Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
M
MeanFi
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Quantum Tinkerer
MeanFi
Commits
50ff803b
Commit
50ff803b
authored
1 year ago
by
Antonio Manesco
Browse files
Options
Downloads
Patches
Plain Diff
diatomic molecule example
parent
fe3af47b
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
examples/diatomic_molecule.ipynb
+262
-0
262 additions, 0 deletions
examples/diatomic_molecule.ipynb
with
262 additions
and
0 deletions
examples/diatomic_molecule.ipynb
0 → 100644
+
262
−
0
View file @
50ff803b
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "cb509096-42c6-4a45-8dc4-a8eed3116e67",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import kwant\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from codes import utils, hf, kwant_examples\n",
"from tqdm import tqdm\n",
"from itertools import product"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "d31cbfea-18ea-454e-8a63-d706a85cd3fc",
"metadata": {},
"outputs": [],
"source": [
"hamiltonian_0 = np.block([\n",
" [0 * np.eye(2), np.eye(2)],\n",
" [np.eye(2), 0 * np.eye(2)]\n",
"])\n",
"hamiltonian_0 = np.expand_dims(hamiltonian_0, axis=0)\n",
"hopping_vecs = np.array([[0,]])"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "46e26a1c-36bd-48bd-89e5-5a7faffa3d1e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1, 4, 4)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hamiltonian_0.shape"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "b39a2976-7c35-4670-83ef-12157bd3fc0e",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAGdCAYAAAAfTAk2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAsV0lEQVR4nO3da3RUVZ738V+RkAo45IBEcmkjoEsTIOhAaHLhiZcWQ1AURkeCYLX0wig9rRBpn9a02iI9bcSxbS+Itgw9iM0AakjLLAENKgidBDuYICLSqDAJUCXChKrgJQlwnhc81FjkAlFOktp8P2vtF7Xrf3btfRaQH7vOOXHZtm0LAADAIN06ewIAAABnGgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGCcyM6eQGc4duyY9u3bp169esnlcnX2dAAAwGmwbVv19fVKTExUt25t79GclQFn3759SkpK6uxpAACA76G2tlbnn39+mzVnZcDp1auXpOMnKCYmppNnAwAATkcgEFBSUlLw53hbzsqAc+JrqZiYGAIOAABh5nQuL+EiYwAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOGflg/4AmOlIU6M+XLtM9d4a9Uq4QJeOnqTI7lGdPS0AncDRHZz33ntP119/vRITE+VyufSXv/zllMesX79eaWlpio6O1oUXXqgXXnihWU1xcbEGDx4st9utwYMHq6SkxIHZAwgnG5c8ofdHDVOPe4rU7/El6nFPkd4fNUwblzzR2VMD0AkcDThfffWVLrvsMs2bN++06nft2qVrr71W2dnZqqqq0q9//WvNmDFDxcXFwZry8nLl5eXJ4/Foy5Yt8ng8mjhxojZt2uTUMgB0cRuXPKFzf7tQvQPHQvqtwDGd+9uFhBzgLOSybdvukA9yuVRSUqIJEya0WnPfffdp5cqV2r59e7Bv+vTp2rJli8rLyyVJeXl5CgQCWr16dbAmNzdXffr00dKlS09rLoFAQJZlye/387uogDB3pKlR748apt6BY2rpt9Mck+S3IjRy4wd8XQWEufb8/O5SFxmXl5crJycnpG/MmDGqrKxUU1NTmzVlZWWtjtvQ0KBAIBDSAJjhw7XL1KeVcCMd/0euj/+oPly7rCOnBaCTdamA4/P5FBcXF9IXFxenI0eO6MCBA23W+Hy+VsctKiqSZVnBlpSUdOYnD6BT1HtrzmgdADN0qYAjNf8V6Ce+Qftuf0s1bf3q9MLCQvn9/mCrra09gzMG0Jl6JVxwRusAmKFLBZz4+PhmOzH79+9XZGSk+vbt22bNybs63+V2uxUTExPSAJjh0tGTVBfTTcdaef+YpDorQpeOntSR0wLQybpUwMnMzFRpaWlI31tvvaURI0aoe/fubdZkZWV12DwBdB2R3aN0bObP5JKahZxj0vH+GVO5wBg4yzj6oL/Dhw/r008/Db7etWuXqqurde655+qCCy5QYWGh9u7dq8WLF0s6fsfUvHnzNGvWLOXn56u8vFwLFy4MuTtq5syZuvzyyzV37lyNHz9er7/+utauXauNGzc6uRQAXdj/mXKvNkrq9vR/qM93bhX3WxE6NmOq/s+UeztvcgA6haO3ia9bt05XXXVVs/7bbrtNixYt0tSpU7V7926tW7cu+N769et1zz33aNu2bUpMTNR9992n6dOnhxz/2muv6cEHH9Tnn3+uiy66SL/73e904403nva8uE0cMBNPMgbM1p6f3x32HJyuhIADAED4Cdvn4AAAAJwJBBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAON0SMCZP3++Bg4cqOjoaKWlpWnDhg2t1k6dOlUul6tZGzJkSLBm0aJFLdZ8++23HbEcAADQxTkecJYvX66CggI98MADqqqqUnZ2tsaOHauampoW659++ml5vd5gq62t1bnnnqubb745pC4mJiakzuv1Kjo62unlAACAMOB4wHnyySc1bdo03X777Ro0aJCeeuopJSUl6fnnn2+x3rIsxcfHB1tlZaXq6ur0s5/9LKTO5XKF1MXHxzu9FAAAECYcDTiNjY3avHmzcnJyQvpzcnJUVlZ2WmMsXLhQo0ePVv/+/UP6Dx8+rP79++v888/XuHHjVFVV1eoYDQ0NCgQCIQ0AAJjL0YBz4MABHT16VHFxcSH9cXFx8vl8pzze6/Vq9erVuv3220P6U1JStGjRIq1cuVJLly5VdHS0Ro0apZ07d7Y4TlFRkSzLCrakpKTvvygAANDldchFxi6XK+S1bdvN+lqyaNEi9e7dWxMmTAjpz8jI0K233qrLLrtM2dnZeuWVV3TJJZfo2WefbXGcwsJC+f3+YKutrf3eawEAAF1fpJODx8bGKiIiotluzf79+5vt6pzMtm396U9/ksfjUVRUVJu13bp1049//ONWd3Dcbrfcbnf7Jg8AAMKWozs4UVFRSktLU2lpaUh/aWmpsrKy2jx2/fr1+vTTTzVt2rRTfo5t26qurlZCQsIPmi8AADCDozs4kjRr1ix5PB6NGDFCmZmZevHFF1VTU6Pp06dLOv710d69e7V48eKQ4xYuXKj09HSlpqY2G/ORRx5RRkaGLr74YgUCAT3zzDOqrq7Wc8895/RyAABAGHA84OTl5engwYOaM2eOvF6vUlNTtWrVquBdUV6vt9kzcfx+v4qLi/X000+3OOahQ4d0xx13yOfzybIsDRs2TO+9955Gjhzp9HIAAEAYcNm2bXf2JDpaIBCQZVny+/2KiYnp7OkAAIDT0J6f3/wuKgAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcTok4MyfP18DBw5UdHS00tLStGHDhlZr161bJ5fL1ax98sknIXXFxcUaPHiw3G63Bg8erJKSEqeXAQAAwoTjAWf58uUqKCjQAw88oKqqKmVnZ2vs2LGqqalp87gdO3bI6/UG28UXXxx8r7y8XHl5efJ4PNqyZYs8Ho8mTpyoTZs2Ob0cAAAQBly2bdtOfkB6erqGDx+u559/Ptg3aNAgTZgwQUVFRc3q161bp6uuukp1dXXq3bt3i2Pm5eUpEAho9erVwb7c3Fz16dNHS5cuPeWcAoGALMuS3+9XTExM+xcFAAA6XHt+fju6g9PY2KjNmzcrJycnpD8nJ0dlZWVtHjts2DAlJCTo6quv1rvvvhvyXnl5ebMxx4wZ0+qYDQ0NCgQCIQ0AAJjL0YBz4MABHT16VHFxcSH9cXFx8vl8LR6TkJCgF198UcXFxVqxYoWSk5N19dVX67333gvW+Hy+do1ZVFQky7KCLSkp6QeuDAAAdGWRHfEhLpcr5LVt2836TkhOTlZycnLwdWZmpmpra/XEE0/o8ssv/15jFhYWatasWcHXgUCAkAMAgMEc3cGJjY1VREREs52V/fv3N9uBaUtGRoZ27twZfB0fH9+uMd1ut2JiYkIaAAAwl6MBJyoqSmlpaSotLQ3pLy0tVVZW1mmPU1VVpYSEhODrzMzMZmO+9dZb7RoTAACYy/GvqGbNmiWPx6MRI0YoMzNTL774ompqajR9+nRJx78+2rt3rxYvXixJeuqppzRgwAANGTJEjY2N+vOf/6zi4mIVFxcHx5w5c6Yuv/xyzZ07V+PHj9frr7+utWvXauPGjU4vBwAAhAHHA05eXp4OHjyoOXPmyOv1KjU1VatWrVL//v0lSV6vN+SZOI2Njbr33nu1d+9e9ejRQ0OGDNEbb7yha6+9NliTlZWlZcuW6cEHH9RDDz2kiy66SMuXL1d6errTywEAAGHA8efgdEU8BwcAgPDTZZ6DAwAA0BkIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxumQgDN//nwNHDhQ0dHRSktL04YNG1qtXbFiha655hqdd955iomJUWZmpt58882QmkWLFsnlcjVr3377rdNLAQAAYcDxgLN8+XIVFBTogQceUFVVlbKzszV27FjV1NS0WP/ee+/pmmuu0apVq7R582ZdddVVuv7661VVVRVSFxMTI6/XG9Kio6OdXg4AAAgDLtu2bSc/ID09XcOHD9fzzz8f7Bs0aJAmTJigoqKi0xpjyJAhysvL029+8xtJx3dwCgoKdOjQoe81p0AgIMuy5Pf7FRMT873GAAAAHas9P78d3cFpbGzU5s2blZOTE9Kfk5OjsrKy0xrj2LFjqq+v17nnnhvSf/jwYfXv31/nn3++xo0b12yH57saGhoUCARCGgAAMJejAefAgQM6evSo4uLiQvrj4uLk8/lOa4zf//73+uqrrzRx4sRgX0pKihYtWqSVK1dq6dKlio6O1qhRo7Rz584WxygqKpJlWcGWlJT0/RcFAAC6vA65yNjlcoW8tm27WV9Lli5dqtmzZ2v58uXq169fsD8jI0O33nqrLrvsMmVnZ+uVV17RJZdcomeffbbFcQoLC+X3+4Ottrb2hy0IAAB0aZFODh4bG6uIiIhmuzX79+9vtqtzsuXLl2vatGl69dVXNXr06DZru3Xrph//+Met7uC43W653e72TR4AAIQtR3dwoqKilJaWptLS0pD+0tJSZWVltXrc0qVLNXXqVP3nf/6nrrvuulN+jm3bqq6uVkJCwg+eMwAACH+O7uBI0qxZs+TxeDRixAhlZmbqxRdfVE1NjaZPny7p+NdHe/fu1eLFiyUdDzc//elP9fTTTysjIyO4+9OjRw9ZliVJeuSRR5SRkaGLL75YgUBAzzzzjKqrq/Xcc885vRwAABAGHA84eXl5OnjwoObMmSOv16vU1FStWrVK/fv3lyR5vd6QZ+L88Y9/1JEjR/SLX/xCv/jFL4L9t912mxYtWiRJOnTokO644w75fD5ZlqVhw4bpvffe08iRI51eDgAACAOOPwenK+I5OAAAhJ8u8xwcAACAzkDAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwTocEnPnz52vgwIGKjo5WWlqaNmzY0Gb9+vXrlZaWpujoaF144YV64YUXmtUUFxdr8ODBcrvdGjx4sEpKSpyaPgAACDOOB5zly5eroKBADzzwgKqqqpSdna2xY8eqpqamxfpdu3bp2muvVXZ2tqqqqvTrX/9aM2bMUHFxcbCmvLxceXl58ng82rJlizwejyZOnKhNmzY5vRwAABAGXLZt205+QHp6uoYPH67nn38+2Ddo0CBNmDBBRUVFzervu+8+rVy5Utu3bw/2TZ8+XVu2bFF5ebkkKS8vT4FAQKtXrw7W5Obmqk+fPlq6dOkp5xQIBGRZlvx+v2JiYn7I8gAAQAdpz89vR3dwGhsbtXnzZuXk5IT05+TkqKysrMVjysvLm9WPGTNGlZWVampqarOmtTEbGhoUCARCGgAAMJejAefAgQM6evSo4uLiQvrj4uLk8/laPMbn87VYf+TIER04cKDNmtbGLCoqkmVZwZaUlPR9lwQAAMJAh1xk7HK5Ql7btt2s71T1J/e3Z8zCwkL5/f5gq62tbdf8AQBAeIl0cvDY2FhFREQ021nZv39/sx2YE+Lj41usj4yMVN++fdusaW1Mt9stt9v9fZcBAADCjKM7OFFRUUpLS1NpaWlIf2lpqbKyslo8JjMzs1n9W2+9pREjRqh79+5t1rQ2JgAAOLs4uoMjSbNmzZLH49GIESOUmZmpF198UTU1NZo+fbqk418f7d27V4sXL5Z0/I6pefPmadasWcrPz1d5ebkWLlwYcnfUzJkzdfnll2vu3LkaP368Xn/9da1du1YbN250ejkAACAMOB5w8vLydPDgQc2ZM0der1epqalatWqV+vfvL0nyer0hz8QZOHCgVq1apXvuuUfPPfecEhMT9cwzz+imm24K1mRlZWnZsmV68MEH9dBDD+miiy7S8uXLlZ6e7vRyAABAGHD8OThdEc/BAQAg/HSZ5+AAAAB0BgIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxHA04dXV18ng8sixLlmXJ4/Ho0KFDrdY3NTXpvvvu09ChQ3XOOecoMTFRP/3pT7Vv376QuiuvvFIulyukTZo0ycmlAACAMOJowJk8ebKqq6u1Zs0arVmzRtXV1fJ4PK3Wf/311/rggw/00EMP6YMPPtCKFSv097//XTfccEOz2vz8fHm93mD74x//6ORSAABAGIl0auDt27drzZo1qqioUHp6uiRpwYIFyszM1I4dO5ScnNzsGMuyVFpaGtL37LPPauTIkaqpqdEFF1wQ7O/Zs6fi4+Odmj4AAAhjju3glJeXy7KsYLiRpIyMDFmWpbKystMex+/3y+VyqXfv3iH9S5YsUWxsrIYMGaJ7771X9fX1rY7R0NCgQCAQ0gAAgLkc28Hx+Xzq169fs/5+/frJ5/Od1hjffvut7r//fk2ePFkxMTHB/ilTpmjgwIGKj4/XRx99pMLCQm3ZsqXZ7s8JRUVFeuSRR77fQgAAQNhp9w7O7Nmzm13ge3KrrKyUJLlcrmbH27bdYv/JmpqaNGnSJB07dkzz588PeS8/P1+jR49WamqqJk2apNdee01r167VBx980OJYhYWF8vv9wVZbW9veZQMAgDDS7h2cu+6665R3LA0YMEAffvihvvjii2bvffnll4qLi2vz+KamJk2cOFG7du3SO++8E7J705Lhw4ere/fu2rlzp4YPH97sfbfbLbfb3eYYAADAHO0OOLGxsYqNjT1lXWZmpvx+v95//32NHDlSkrRp0yb5/X5lZWW1etyJcLNz5069++676tu37yk/a9u2bWpqalJCQsLpLwQAABjLsYuMBw0apNzcXOXn56uiokIVFRXKz8/XuHHjQu6gSklJUUlJiSTpyJEj+ud//mdVVlZqyZIlOnr0qHw+n3w+nxobGyVJn332mebMmaPKykrt3r1bq1at0s0336xhw4Zp1KhRTi0HAACEEUefg7NkyRINHTpUOTk5ysnJ0aWXXqqXX345pGbHjh3y+/2SpD179mjlypXas2eP/vEf/1EJCQnBduLOq6ioKL399tsaM2aMkpOTNWPGDOXk5Gjt2rWKiIhwcjkAACBMuGzbtjt7Eh0tEAjIsiz5/f5TXt8DAAC6hvb8/OZ3UQEAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjONowKmrq5PH45FlWbIsSx6PR4cOHWrzmKlTp8rlcoW0jIyMkJqGhgbdfffdio2N1TnnnKMbbrhBe/bscXAlAAAgnDgacCZPnqzq6mqtWbNGa9asUXV1tTwezymPy83NldfrDbZVq1aFvF9QUKCSkhItW7ZMGzdu1OHDhzVu3DgdPXrUqaUAAIAwEunUwNu3b9eaNWtUUVGh9PR0SdKCBQuUmZmpHTt2KDk5udVj3W634uPjW3zP7/dr4cKFevnllzV69GhJ0p///GclJSVp7dq1GjNmzJlfDAAACCuO7eCUl5fLsqxguJGkjIwMWZalsrKyNo9dt26d+vXrp0suuUT5+fnav39/8L3NmzerqalJOTk5wb7ExESlpqa2Om5DQ4MCgUBIAwAA5nIs4Ph8PvXr169Zf79+/eTz+Vo9buzYsVqyZIneeecd/f73v9ff/vY3/eQnP1FDQ0Nw3KioKPXp0yfkuLi4uFbHLSoqCl4HZFmWkpKSfsDKAABAV9fugDN79uxmFwGf3CorKyVJLper2fG2bbfYf0JeXp6uu+46paam6vrrr9fq1av197//XW+88Uab82pr3MLCQvn9/mCrra1tx4oBAEC4afc1OHfddZcmTZrUZs2AAQP04Ycf6osvvmj23pdffqm4uLjT/ryEhAT1799fO3fulCTFx8ersbFRdXV1Ibs4+/fvV1ZWVotjuN1uud3u0/5MAAAQ3todcGJjYxUbG3vKuszMTPn9fr3//vsaOXKkJGnTpk3y+/2tBpGWHDx4ULW1tUpISJAkpaWlqXv37iotLdXEiRMlSV6vVx999JEef/zx9i4HAAAYyLFrcAYNGqTc3Fzl5+eroqJCFRUVys/P17hx40LuoEpJSVFJSYkk6fDhw7r33ntVXl6u3bt3a926dbr++usVGxurf/qnf5IkWZaladOm6Ze//KXefvttVVVV6dZbb9XQoUODd1UBAICzm2O3iUvSkiVLNGPGjOAdTzfccIPmzZsXUrNjxw75/X5JUkREhLZu3arFixfr0KFDSkhI0FVXXaXly5erV69ewWP+8Ic/KDIyUhMnTtQ333yjq6++WosWLVJERISTywEAAGHCZdu23dmT6GiBQECWZcnv9ysmJqazpwMAAE5De35+87uoAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGcTTg1NXVyePxyLIsWZYlj8ejQ4cOtXmMy+Vqsf3bv/1bsObKK69s9v6kSZOcXAoAAAgjkU4OPnnyZO3Zs0dr1qyRJN1xxx3yeDz6r//6r1aP8Xq9Ia9Xr16tadOm6aabbgrpz8/P15w5c4Kve/TocQZnDgAAwpljAWf79u1as2aNKioqlJ6eLklasGCBMjMztWPHDiUnJ7d4XHx8fMjr119/XVdddZUuvPDCkP6ePXs2qwUAAJAc/IqqvLxclmUFw40kZWRkyLIslZWVndYYX3zxhd544w1Nmzat2XtLlixRbGyshgwZonvvvVf19fWtjtPQ0KBAIBDSAACAuRzbwfH5fOrXr1+z/n79+snn853WGC+99JJ69eqlG2+8MaR/ypQpGjhwoOLj4/XRRx+psLBQW7ZsUWlpaYvjFBUV6ZFHHmn/IgAAQFhq9w7O7NmzW70Q+ESrrKyUdPyC4ZPZtt1if0v+9Kc/acqUKYqOjg7pz8/P1+jRo5WamqpJkybptdde09q1a/XBBx+0OE5hYaH8fn+w1dbWtnPVAAAgnLR7B+euu+465R1LAwYM0Icffqgvvvii2Xtffvml4uLiTvk5GzZs0I4dO7R8+fJT1g4fPlzdu3fXzp07NXz48Gbvu91uud3uU44DAADM0O6AExsbq9jY2FPWZWZmyu/36/3339fIkSMlSZs2bZLf71dWVtYpj1+4cKHS0tJ02WWXnbJ227ZtampqUkJCwqkXAAAAjOfYRcaDBg1Sbm6u8vPzVVFRoYqKCuXn52vcuHEhd1ClpKSopKQk5NhAIKBXX31Vt99+e7NxP/vsM82ZM0eVlZXavXu3Vq1apZtvvlnDhg3TqFGjnFoOAAAII44+6G/JkiUaOnSocnJylJOTo0svvVQvv/xySM2OHTvk9/tD+pYtWybbtnXLLbc0GzMqKkpvv/22xowZo+TkZM2YMUM5OTlau3atIiIinFwOAAAIEy7btu3OnkRHCwQCsixLfr9fMTExnT0dAABwGtrz85vfRQUAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYJzIzp4AAJwpR48c0Seb3tQ3dXvVo8+PlJI+RhGR/DMHnI0c3cH53e9+p6ysLPXs2VO9e/c+rWNs29bs2bOVmJioHj166Morr9S2bdtCahoaGnT33XcrNjZW55xzjm644Qbt2bPHgRUACBdVb76kA/96iYaUTtaIyv+rIaWTdeBfL1HVmy919tQAdAJHA05jY6Nuvvlm/fznPz/tYx5//HE9+eSTmjdvnv72t78pPj5e11xzjerr64M1BQUFKikp0bJly7Rx40YdPnxY48aN09GjR51YBoAururNl3RZ2QydZx8M6T/PPqjLymYQcoCzkMu2bdvpD1m0aJEKCgp06NChNuts21ZiYqIKCgp03333STq+WxMXF6e5c+fqzjvvlN/v13nnnaeXX35ZeXl5kqR9+/YpKSlJq1at0pgxY045n0AgIMuy5Pf7FRMT84PXB6DzHD1yRAf+9RKdZx9UN1fz94/Z0n5XX5334N/5ugoIc+35+d2lLjLetWuXfD6fcnJygn1ut1tXXHGFysrKJEmbN29WU1NTSE1iYqJSU1ODNSdraGhQIBAIaQDM8MmmNxWnlsONJHVzSfE6qE82vdmxEwPQqbpUwPH5fJKkuLi4kP64uLjgez6fT1FRUerTp0+rNScrKiqSZVnBlpSU5MDsAXSGb+r2ntE6AGZod8CZPXu2XC5Xm62ysvIHTcrlCv2vmG3bzfpO1lZNYWGh/H5/sNXW1v6g+QHoOnr0+dEZrQNghnZ/IX3XXXdp0qRJbdYMGDDge00mPj5e0vFdmoSEhGD//v37g7s68fHxamxsVF1dXcguzv79+5WVldXiuG63W263+3vNCUDXlpI+Rl+U9j3lNTgp6ae+Pg+AOdq9gxMbG6uUlJQ2W3R09PeazMCBAxUfH6/S0tJgX2Njo9avXx8ML2lpaerevXtIjdfr1UcffdRqwAFgrojISO3LfFjS8TDzXSdeezMf5gJj4Czj6DU4NTU1qq6uVk1NjY4eParq6mpVV1fr8OHDwZqUlBSVlJRIOv7VVEFBgR599FGVlJToo48+0tSpU9WzZ09NnjxZkmRZlqZNm6Zf/vKXevvtt1VVVaVbb71VQ4cO1ejRo51cDoAuatiY27Ql6xl96eob0r/f1Vdbsp7RsDG3ddLMAHQWR/9L85vf/EYvvfS/z58YNmyYJOndd9/VlVdeKUnasWOH/H5/sOZXv/qVvvnmG/3Lv/yL6urqlJ6errfeeku9evUK1vzhD39QZGSkJk6cqG+++UZXX321Fi1apIiICCeXA6ALGzbmNh29eoq2nfQk43h2boCzUoc8B6er4Tk4AACEn7B9Dg4AAMCZQMABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxzVj7D/MTDmwOBQCfPBAAAnK4TP7dP55cwnJUBp76+XpKUlJTUyTMBAADtVV9fL8uy2qw5K38X1bFjx7Rv3z716tVLLpers6fT6QKBgJKSklRbW8vv5nIQ57ljcJ47Due6Y3Ce/5dt26qvr1diYqK6dWv7KpuzcgenW7duOv/88zt7Gl1OTEzMWf+XpyNwnjsG57njcK47Buf5uFPt3JzARcYAAMA4BBwAAGAcAg7kdrv18MMPy+12d/ZUjMZ57hic547Due4YnOfv56y8yBgAAJiNHRwAAGAcAg4AADAOAQcAABiHgAMAAIxDwDkL1NXVyePxyLIsWZYlj8ejQ4cOtXmMbduaPXu2EhMT1aNHD1155ZXatm1bq7Vjx46Vy+XSX/7ylzO/gDDhxHn+n//5H919991KTk5Wz549dcEFF2jGjBny+/0Or6ZrmT9/vgYOHKjo6GilpaVpw4YNbdavX79eaWlpio6O1oUXXqgXXnihWU1xcbEGDx4st9utwYMHq6SkxKnph40zfZ4XLFig7Oxs9enTR3369NHo0aP1/vvvO7mEsODEn+cTli1bJpfLpQkTJpzhWYchG8bLzc21U1NT7bKyMrusrMxOTU21x40b1+Yxjz32mN2rVy+7uLjY3rp1q52Xl2cnJCTYgUCgWe2TTz5pjx071pZkl5SUOLSKrs+J87x161b7xhtvtFeuXGl/+umn9ttvv21ffPHF9k033dQRS+oSli1bZnfv3t1esGCB/fHHH9szZ860zznnHPu///u/W6z//PPP7Z49e9ozZ860P/74Y3vBggV29+7d7ddeey1YU1ZWZkdERNiPPvqovX37dvvRRx+1IyMj7YqKio5aVpfjxHmePHmy/dxzz9lVVVX29u3b7Z/97Ge2ZVn2nj17OmpZXY4T5/mE3bt32z/60Y/s7Oxse/z48Q6vpOsj4Bju448/tiWF/MNdXl5uS7I/+eSTFo85duyYHR8fbz/22GPBvm+//da2LMt+4YUXQmqrq6vt888/3/Z6vWd1wHH6PH/XK6+8YkdFRdlNTU1nbgFd2MiRI+3p06eH9KWkpNj3339/i/W/+tWv7JSUlJC+O++8087IyAi+njhxop2bmxtSM2bMGHvSpElnaNbhx4nzfLIjR47YvXr1sl966aUfPuEw5dR5PnLkiD1q1Cj73//93+3bbruNgGPbNl9RGa68vFyWZSk9PT3Yl5GRIcuyVFZW1uIxu3btks/nU05OTrDP7XbriiuuCDnm66+/1i233KJ58+YpPj7euUWEASfP88n8fr9iYmIUGWn+r5JrbGzU5s2bQ86RJOXk5LR6jsrLy5vVjxkzRpWVlWpqamqzpq3zbjKnzvPJvv76azU1Nencc889MxMPM06e5zlz5ui8887TtGnTzvzEwxQBx3A+n0/9+vVr1t+vXz/5fL5Wj5GkuLi4kP64uLiQY+655x5lZWVp/PjxZ3DG4cnJ8/xdBw8e1G9/+1vdeeedP3DG4eHAgQM6evRou86Rz+drsf7IkSM6cOBAmzWtjWk6p87zye6//3796Ec/0ujRo8/MxMOMU+f5r3/9qxYuXKgFCxY4M/EwRcAJU7Nnz5bL5WqzVVZWSpJcLlez423bbrH/u05+/7vHrFy5Uu+8846eeuqpM7OgLqqzz/N3BQIBXXfddRo8eLAefvjhH7Cq8HO656it+pP72zvm2cCJ83zC448/rqVLl2rFihWKjo4+A7MNX2fyPNfX1+vWW2/VggULFBsbe+YnG8bM3+M21F133aVJkya1WTNgwAB9+OGH+uKLL5q99+WXXzb7X8EJJ75u8vl8SkhICPbv378/eMw777yjzz77TL179w459qabblJ2drbWrVvXjtV0XZ19nk+or69Xbm6u/uEf/kElJSXq3r17e5cSlmJjYxUREdHsf7ctnaMT4uPjW6yPjIxU375926xpbUzTOXWeT3jiiSf06KOPau3atbr00kvP7OTDiBPnedu2bdq9e7euv/764PvHjh2TJEVGRmrHjh266KKLzvBKwkQnXfuDDnLi4tdNmzYF+yoqKk7r4te5c+cG+xoaGkIufvV6vfbWrVtDmiT76aeftj///HNnF9UFOXWebdu2/X6/nZGRYV9xxRX2V1995dwiuqiRI0faP//5z0P6Bg0a1OZFmYMGDQrpmz59erOLjMeOHRtSk5ube9ZfZHymz7Nt2/bjjz9ux8TE2OXl5Wd2wmHqTJ/nb775ptm/xePHj7d/8pOf2Fu3brUbGhqcWUgYIOCcBXJzc+1LL73ULi8vt8vLy+2hQ4c2u305OTnZXrFiRfD1Y489ZluWZa9YscLeunWrfcstt7R6m/gJOovvorJtZ85zIBCw09PT7aFDh9qffvqp7fV6g+3IkSMdur7OcuK22oULF9off/yxXVBQYJ9zzjn27t27bdu27fvvv9/2eDzB+hO31d5zzz32xx9/bC9cuLDZbbV//etf7YiICPuxxx6zt2/fbj/22GPcJu7AeZ47d64dFRVlv/baayF/duvr6zt8fV2FE+f5ZNxFdRwB5yxw8OBBe8qUKXavXr3sXr162VOmTLHr6upCaiTZ//Ef/xF8fezYMfvhhx+24+PjbbfbbV9++eX21q1b2/ycsz3gOHGe3333XVtSi23Xrl0ds7Au4LnnnrP79+9vR0VF2cOHD7fXr18ffO+2226zr7jiipD6devW2cOGDbOjoqLsAQMG2M8//3yzMV999VU7OTnZ7t69u52SkmIXFxc7vYwu70yf5/79+7f4Z/fhhx/ugNV0XU78ef4uAs5xLtv+/1crAQAAGIK7qAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwzv8D8FyS3m+YC6IAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"vals, vecs = np.linalg.eigh(hamiltonian_0)\n",
"plt.plot(vals, 'o')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 57,
"id": "41bd9f60-8f29-4e7c-a0c4-a0bbf66445b2",
"metadata": {},
"outputs": [],
"source": [
"def compute_vals(\n",
" H_int,\n",
" hamiltonian_0=hamiltonian_0,\n",
" filling=2,\n",
" tol=1e-5,\n",
" mixing=0.01,\n",
" order=10,\n",
" guess=None\n",
"):\n",
" # Generate guess on the same grid\n",
" if guess is None:\n",
" guess = utils.generate_guess([0], hopping_vecs, ndof=hamiltonian_0.shape[-1], scale=1)\n",
" else:\n",
" guess += np.max(guess) * utils.generate_guess([0], hopping_vecs, ndof=hamiltonian_0.shape[-1], scale=0.1)\n",
"\n",
" # Find groundstate Hamiltonian on the same grid\n",
" h = hf.find_groundstate_ham(\n",
" H_int=H_int,\n",
" filling=filling,\n",
" hamiltonians_0=hamiltonian_0,\n",
" tol=tol,\n",
" guess=guess,\n",
" mixing=mixing,\n",
" order=order,\n",
" )\n",
" # Diagonalize groundstate Hamiltonian\n",
" vals, vecs = np.linalg.eigh(h)\n",
" # Extract dense-grid Fermi energy\n",
" E_F = utils.get_fermi_energy(vals, filling)\n",
" return vals - E_F"
]
},
{
"cell_type": "code",
"execution_count": 79,
"id": "32b9e7c5-db12-44f9-930c-21e5494404b8",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"def compute_phase_diagram(\n",
" Us,\n",
" Vs,\n",
" tol=1e-5,\n",
" mixing=0.1,\n",
" order=5,\n",
"):\n",
" # onsite interactions\n",
" onsite_int = np.block(\n",
" [[np.ones((2, 2)), np.zeros((2, 2))], [np.zeros((2, 2)), np.ones((2, 2))]]\n",
" )\n",
" onsite_int = np.expand_dims(onsite_int, axis=0)\n",
" # Nearest-neighbor interactions\n",
" nn_int = np.block(\n",
" [[np.zeros((2, 2)), np.ones((2, 2))], [np.zeros((2, 2)), np.zeros((2, 2))]]\n",
" )\n",
" nn_int = np.expand_dims(nn_int, axis=0)\n",
" vals = []\n",
" for U in tqdm(Us):\n",
" gap_U = []\n",
" vals_U = []\n",
" for V in Vs:\n",
" H_int = U * onsite_int + V * nn_int\n",
" _vals = compute_vals(\n",
" H_int=H_int,\n",
" tol=tol,\n",
" mixing=mixing,\n",
" order=order,\n",
" )\n",
" vals_U.append(_vals)\n",
" vals.append(vals_U)\n",
" return np.asarray(vals)"
]
},
{
"cell_type": "code",
"execution_count": 81,
"id": "6a8c08a9-7e31-420b-b6b4-709abfb26793",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 20/20 [01:02<00:00, 3.15s/it]\n"
]
}
],
"source": [
"# Interaction strengths\n",
"Us = np.linspace(0, 5, 20, endpoint=True)\n",
"Vs = np.linspace(0, 1, 20, endpoint=True)\n",
"vals = compute_phase_diagram(Us, Vs, tol=1e-5)"
]
},
{
"cell_type": "code",
"execution_count": 82,
"id": "e17fc96c-c463-4e1f-8250-c254d761b92a",
"metadata": {},
"outputs": [],
"source": [
"import xarray as xr\n",
"\n",
"ds = xr.Dataset(\n",
" data_vars=dict(\n",
" vals=([\"Us\", \"Vs\", \"n\"], vals[:,:,0,:]),\n",
" ),\n",
" coords=dict(Us=Us, Vs=Vs, n=np.arange(vals.shape[-1])),\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 83,
"id": "868cf368-45a0-465e-b042-6182ff8b6998",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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p3AFIWOMPM+TJP3qV7/SJz/5SUlSdXW1du/e3ZUuAQAAAAAAAmPcEhmfeYL8tnXkpptu0uzZs3XppZdKkm655Rb98pe/1KJFi1RbW9vlWCVp27Zt3fr7znTpfKjx48fru9/9ru69916tXbtWZ599tqSDwQ4YMCCvAQIAAAAAAHRb6yVjfoukhoaGrKWxsbHd7pqamrRp0yZNnTo1a/3UqVO1fv36wIfTXV06Q+jmm2/WhRdeqIcfflhXX321jj76aEnSz3/+c5100kl5DTAXh/cqU3kvJrIOSsYzgbVvavECiwPxlGu+p9xoTwhXSDa5E4W2gCSVHVahdI90p+0cN7q3hy004+X+mWoywbSVpIxFHECuuY6uCyrfM83NgfQLBOngpNId/zuhdVt1dXXW+muvvVYLFy48pP3u3buVyWQOOTFmwIAB2rVrV/cD/oA333xTjz76qLZv366mpqasbTfddJN1f10qCB133HF68cUXD1l/ww03KJVKdaVLAAAAAACAwBhzcPHbLkn19fWqrKxsW996i/eOOB8oMhljDlnXXf/1X/+lT33qUxo+fLhefvlljRkzRm+88YaMMTrxxBO71KfVz2qu6yqVSh2yHH744ZowYYJWrVql0tLSLgUCAAAAAAAQlIwxnS6SVFlZmbV0VBDq16+fUqnUIWcDvfXWW3mfTqempkZf//rX9eKLL6q8vFwrVqxQfX29TjvtNJ1//vld6tPqDKGVK1e2u/6dd97Rb3/7W1100UW65557uhwMAAAAAABAEDxzcPHbbqOsrEzjxo3T6tWr9elPf7pt/erVq3XOOed0Mcr2bd26VcuXL5cklZSU6K9//at69+6t6667Tuecc46+/OUvW/dpVRDyG9DMmTM1atQo3XjjjRSEAAAAAABApBhjZHyuGfPb1pH58+fr4osv1vjx4zVx4kQtXrxY27dv15w5c7oT6iF69erVNrn14MGD9dprr2n06NGS1OW7vXdpDqGOTJ06Vd/61rfy2SUAAAAAAEC35fsMIUm64IIL9Pbbb+u6667Tzp07NWbMGK1atUrDhg3reqDtmDBhgp555hmNGjVKZ599tr7+9a/rhRde0EMPPaQJEyZ0qc+8FoT++te/qry8PJ9dAgAAAAAA5EUQ9779yle+oq985SsB9Py+m266Sfv27ZMkLVy4UPv27dP999+vo48+WjfffHOX+sxrQejOO+/UCSeckM8uAQAAAAAAui3jGWV8TgPy2xa2f/mXf9FFF10kY4x69uyp22+/vdt9WhWE5s+f3+76PXv2aOPGjXrttdf09NNPdzsoAAAAAACAfPLeW/y2R9Xbb7+ts88+W3379tWMGTN08cUX6/jjj+9Wn1YFobq6unbXV1ZW6qyzztJXvvKVvF8nBwAAAAAA0F3GHFz8tkfVo48+qnfeeUcPPPCAli1bpltuuUUjRozQRRddpM9//vM68sgjrfu0Kgg99dRT1k9QCIf1LFWPnmWhxuBZvHIyNm0tTllrasm9nhnlU+EAP7nme8rJvc+MRTpEIdclu3wHilFpRYVKe+YwL6Hr5t6pZ5E3Xib3tpKMRXtjEYfX1GIVB1Bscs71IFnlb/i5btMvgGxBTCpdSIcddpi++MUv6otf/KLefPNNLV++XHfffbeuueYatbTYf2fI6xxCAAAAAAAAUZQxxvdHW5sfdMPU3NysjRs36rnnntMbb7yhAQMGdKkfi5/VAAAAAAAAipPR+5eNtbuEHWAnnnrqKV122WUaMGCAZs6cqYqKCj322GOqr6/vUn+cIQQAAAAAAGLPM8Z3Cgib6SEKbciQIXr77bd15pln6o477tD06dNVXt69S24pCAEAAAAAgNgz8j8LKLrlIOmaa67R+eefr8MPPzxvfYZ6yVhtba0++tGPqqKiQv3799e5556rl19+OcyQAAAAAABADHmelPFZojxn+xe/+MW8FoOkkAtCa9eu1dy5c7VhwwatXr1aLS0tmjp1qvbv3x9mWAAAAAAAIGY8mU6XJAn1krEnnngi6/GSJUvUv39/bdq0SaeeempIUQEAAAAAgLhpnTzab3uSRGoOoT179kiS+vTpE3IkAAAAAAAgTjxzcPHbniSRKQgZYzR//nx94hOf0JgxY9pt09jYqMbGxrbHDQ0NhQoPQIGR70AykOtAMpDrAKIgY4wyPqcB+W2Lo1DnEPpbl19+uX7/+99r+fLlHbapra1VVVVV21JdXV3ACAEUEvkOJAO5DiQDuQ4gClovGfNbkiQSZwhdccUVevTRR7Vu3ToNGTKkw3Y1NTWaP39+2+OGhgZVV1erPOWqvKTz2pZNta85k7BXQoJlInJeYBTiyDWGQsRayHzPkO+JUUx5FrSo5HtHue6ky+WkyzvvwMvk/FwmyrcOQV55mWgcaxOBOEwmtxwJOtZC5rokmeZm2xBRhMj1v43B4vMwAvGGxTNGns+/E/y2xVGoBSFjjK644gqtXLlSa9as0fDhw33bp9NppdPpAkUHIEzkO5AM5DqQDOQ6gChovb283/YkCbUgNHfuXC1btkyPPPKIKioqtGvXLklSVVWVevToEWZoAAAAAAAgRjhDKFuoBaFFixZJkiZNmpS1fsmSJZo1a1bhAwIAAAAAALHU4hk1+1xC3hKRS/sLJfRLxgAAAAAAAILGJWPZIjGpNAAAAAAAQJC4ZCwbBSEAAAAAABB7GWN870Zsc6fiOKAgBAAAAAAAYq/ZM2rOdFz0aWYOIQAAAAAAgHgxnVwylrR5jikIAQAAAACA2MuYg4vf9iShIAQAAAAAAGKPSaWzURACAAAAAACx15zx1Oxzb3m/bXHkhh0AAAAAAABA0FovGfNbgvK9731PJ510knr27KnDDjssuCeyQEEIAAAAAADEXuslY35LUJqamnT++efry1/+cmDPYYtLxgAAAAAAQOx5npHnc2t5v23d9Z3vfEeStHTp0sCewxYFIQAAAAAAEHstnlGzT9Gn5b1tDQ0NWevT6bTS6XSgsYWBS8YAAAAAAEDsZYzpdJGk6upqVVVVtS21tbUhRx4MCkIAAAAAACD2Wi8Z81skqb6+Xnv27Glbampq2u1v4cKFchzHd9m4cWMhh2iFS8YAAAAAAEDsZeR/J7HMe/+trKxUZWVlp/1dfvnlmjFjhm+bI488Muf4Co2CEAAAAAAAiL3O7iRme5exfv36qV+/ft0NKzQUhAAAAAAAQOw1ZzylMp7v9qBs375d//d//6ft27crk8lo8+bNkqSjjz5avXv3Dux5/VAQQt5lArxVX7GJwr6IQgyIJ15b74vKvohKHIgXL5PpvFFCGC+4fyjYMAH+gwXJRr6/Lwr5Tq7nX8Yzvt+Xgvwudc011+iee+5pe3zCCSdIkp566ilNmjQpsOf1w6TSAAAAAAAg9loLQn5LUJYuXSpjzCFLWMUgiTOEAAAAAABAAmQ8/7OAknZSFgUhAAAAAAAQe00tntyWjqs+TT7b4oiCEAAAAAAAiD2vk8vCvITNx0hBCAAAAAAAxF7GdDKptOVt54sdBSEAAAAAABB7Yd5lLIooCAEAAAAAgNhrbPEkn3mCGplDCAAAAAAAIF44QygbBSEAAAAAABB7TCqdjYIQYqkl5omc8YI5lTHX/ZawMykRcXHO96ByXSLfUXxMgPkQBV5A48t1v8V9/6J4xP21GHau27aNm4wxvhNHM6k0AAAAAABAzDR1ModQU8J+CaMgBAAAAAAAYo85hLK5YT75unXrNH36dA0ePFiO4+jhhx8OMxwAAAAAABBTGeMp4/ksJllnCIVaENq/f7+OO+44/fjHPw4zDAAAAAAAEHOtk0p3tDCpdAFNmzZN06ZNCzMEAAAAAACQABnPyOWSsTZFNYdQY2OjGhsb2x43NDSEGA2AIJHvQDKQ60AykOsAoqCxxcjzmTi6uSVZBaFQLxmzVVtbq6qqqraluro67JAABIR8B5KBXAeSgVwHEAV+l4t1NuF0HBVVQaimpkZ79uxpW+rr68MOCUBAyHcgGch1IBnIdQBRQEEoW1FdMpZOp5VOp8MOA0ABkO9AMpDrQDKQ6wCiwOuk6MOk0gA6lDHBvUEEVY1OWpUbyJeg8j3InCTfAXsmE9wthoPq22QygfQLxF1wOUmuF4uWjCf5zCHUEuBnQhSFWhDat2+fXn311bbH27Zt0+bNm9WnTx8NHTo0xMgAAAAAAECceJ3cWp4zhApo48aNmjx5ctvj+fPnS5JmzpyppUuXhhQVAAAAAACIG2OMjM9Z4H7b4ijUgtCkSZMSt8MBAAAAAEDhGc/I+JwF5LctjphDCAAAAAAAxF6mxchp6bjok/HZFkcUhAAAAAAAQOxxyVg2CkIAAAAAACD2mFQ6GwUhAAAAAAAQe8whlM0NOwAAAAAAAIDAvVcQ6mhRQAWhN954Q7Nnz9bw4cPVo0cPfehDH9K1116rpqamQJ4vV5whBAAAAAAAYi/jeVLG898egJdeekme5+mOO+7Q0UcfrRdffFGXXXaZ9u/frxtvvDGQ58wFBSEAAAAAABB7YV0ydtZZZ+mss85qe3zUUUfp5Zdf1qJFiygIAbnIBJScQfUbpLD3RTHuMxSPIF9fxfbajcK+KLZ9huJifH6ljWK/QQp7X5iAfhUHpPBf31EShX2R5Hz3PMnxnVT64H8bGhqy1qfTaaXT6bzGsmfPHvXp0yevfdpiDiEAAAAAABB7rbed91skqbq6WlVVVW1LbW1tXuN47bXX9KMf/Uhz5szJa7+2KAgBAAAAAIDYy7SYThdJqq+v1549e9qWmpqadvtbuHChHMfxXTZu3Jj1Nzt27NBZZ52l888/X5deemngY/bDJWMAAAAAACD2cp1DqLKyUpWVlZ32d/nll2vGjBm+bY488si2/9+xY4cmT56siRMnavHixbkFHSAKQgAAAAAAIPbyPal0v3791K9fv5za/u///q8mT56scePGacmSJXLd8C/YoiAEAAAAAABizzNGjvGZVNpnW3fs2LFDkyZN0tChQ3XjjTfqz3/+c9u2gQMHBvKcuaAgBAAAAAAAYs/LeHJaOr7LmhfQXeCefPJJvfrqq3r11Vc1ZMiQrG0moCJULsI/RwkAAAAAACBgxjPyfBbbS8ZyNWvWLN+7moWFM4QAAAAAAEDsdVaECbtAU2gUhAAAAAAAQOzle1LpYkdBKOIyEXhBRiGGYmWz7zJeMNertnD8ikJU8iwqcRSbKOS6RL4XCxPQ/ATFFkMxst1vXkD5bgJ8H0H+RCXPohJHsbHZb+R68ci0tMi4LR1u91o63hZHFIQAAAAAAEDsGS8j42V8tycJBSEAAAAAABB7xvM6KQgl66wsCkIAAAAAACD2TCYjk/EpCPlsiyMKQgAAAAAAIPaM6eSSMUNBCAAAAAAAIFa8libJSflvTxAKQgAAAAAAIPaYVDobBSEAAAAAABB7TCqdjYIQAAAAAACIPc/LSD4FIY8zhAAAAAAAAOLl4BxCrv/2BKEghFBlPBPrfqMQRxBtgxoX4ivI10yx5VlQMdi2J98RFJMJ5nR7L6B+bS4PCGpsB/vO/Vdpmzhybhvg2BBPxZbrUjTyPfRcl5Kd75mMjOtzDBJ22/mOS2MFcvvtt2v48OEqLy/XuHHj9PTTT4cdEgAAAAAAiJnW2853uCTstvOhFoTuv/9+zZs3T1dffbXq6up0yimnaNq0adq+fXuYYQEAAAAAgJhpnVS64yVZZ0+FWhC66aabNHv2bF166aX6yEc+oltuuUXV1dVatGhRmGEBAAAAAICY8VqaO12SJLSCUFNTkzZt2qSpU6dmrZ86darWr18fUlQAAAAAACCO/M8Oyvjekj6OQptUevfu3cpkMhowYEDW+gEDBmjXrl3t/k1jY6MaGxvbHjc0NAQaI4DwkO9AMpDrQDKQ6wCiwHRy2/mkFYRCn1TacZysx8aYQ9a1qq2tVVVVVdtSXV1diBABhIB8B5KBXAeSgVwHEAWel+l0SZLQCkL9+vVTKpU65Gygt95665CzhlrV1NRoz549bUt9fX0hQgUQAvIdSAZyHUgGch1AFHgtzfKamzpeEjaHUGiXjJWVlWncuHFavXq1Pv3pT7etX716tc4555x2/yadTiudThcqRAAhIt+BZCDXgWQg1wFEgfEyksMlY61CKwhJ0vz583XxxRdr/PjxmjhxohYvXqzt27drzpw5YYYFAAAAAABihoJQtlALQhdccIHefvttXXfdddq5c6fGjBmjVatWadiwYTn9vTFGkvTX/ftyap95r30umr3c20qSZ9G3VRwtXu79WsScyb1bNVnEIEmeRRxNFoHYjK/RIuag4pXs9l3G5N7W5nXR3GLzusitbcuB/ZLez8FCiEq+RyHXpWjkexRyXYpGvkch1w+2L/58b32eve8eyO0PLL64mWaL08AtvxDafIH0WixitngdGs8iF5paLGKw2xdei03fFrnTHMx+s4nXZr9JkhfQMbGJOdcPgX1NB/MjDrkuBZfvxZbrUnD5Xmy5LgWX78WU61Lh8z1KTPMB/zzOJOuSMccU8avgzTffZEI6IET19fUaMmRIQZ6LfAfCVah8J9eBcJHrQHIU8rt82A4cOKDhw4d3eEfzvzVw4EBt27ZN5eXlBYgsXEVdEPI8Tzt27FBFRUXWnckaGhpUXV2t+vp6VVZWhhhh/jCm4pCUMRljtHfvXg0ePFiuW5i56dvL96Ts72LHmIpDR2MqdL4nJdeleI6LMRWHKHy28z2+uDGm4hCVz/aoOHDggJqamjptV1ZWlohikBTyJWPd5bqub0WzsrIyNsncijEVhySMqaqqqqDP75fvSdjfccCYikN7Yypkvict16V4josxFYcwP9v5Hh8PjKk4hP3ZHhXl5eWJKfTkKjnlQAAAAAAAAEiiIAQAAAAAAJA4sSwIpdNpXXvttUqn02GHkjeMqTgwpsKKcmxdxZiKA2MqrCjH1h1xHBdjKg5RHlOUY+sqxlQcGBOSqKgnlQYAAAAAAIC9WJ4hBAAAAAAAgI5REAIAAAAAAEgYCkIAAAAAAAAJUxQFodtvv13Dhw9XeXm5xo0bp6efftq3/dq1azVu3DiVl5frqKOO0k9+8pND2qxYsUKjRo1SOp3WqFGjtHLlyqDCb5fNmB566CGdccYZOuKII1RZWamJEyfql7/8ZVabpUuXynGcQ5YDBw4EPZQ2NmNas2ZNu/G+9NJLWe2K6TjNmjWr3TGNHj26rU3Yx2ndunWaPn26Bg8eLMdx9PDDD3f6N4XMpzjmukS+k++FP05Rz3UpnvlOrpPrfLYfilwn14vhOJHr4X5XRohMxN13332mtLTU3HnnnWbLli3myiuvNL169TJ//OMf223/+uuvm549e5orr7zSbNmyxdx5552mtLTU/PznP29rs379epNKpcz3v/99s3XrVvP973/flJSUmA0bNkRyTFdeeaX5wQ9+YH7729+aP/zhD6ampsaUlpaa559/vq3NkiVLTGVlpdm5c2fWUii2Y3rqqaeMJPPyyy9nxdvS0tLWptiO0zvvvJM1lvr6etOnTx9z7bXXtrUJ+zitWrXKXH311WbFihVGklm5cqVv+0LmUxxz3Rjy3RjyPYzjFOVcNyae+U6uk+t8th+KXCfXi+U4kevhfVdGuCJfEPrYxz5m5syZk7Vu5MiRZsGCBe22/3//7/+ZkSNHZq370pe+ZCZMmND2+LOf/aw566yzstqceeaZZsaMGXmK2p/tmNozatQo853vfKft8ZIlS0xVVVW+QrRmO6bWD5K//OUvHfZZ7Mdp5cqVxnEc88Ybb7StC/s4/a1cPkgKmU9xzHVjyHdjyPewRS3XjYlnvpPr5HoURC3fyfX2kevBI9eLI58QvkhfMtbU1KRNmzZp6tSpWeunTp2q9evXt/s3zz777CHtzzzzTG3cuFHNzc2+bTrqM5+6MqYP8jxPe/fuVZ8+fbLW79u3T8OGDdOQIUP0yU9+UnV1dXmL2093xnTCCSdo0KBBOv300/XUU09lbSv243TXXXdpypQpGjZsWNb6sI5TVxQqn+KY6xL5/kHke3TzvZD5FMd8J9ezkevRzXWJz/buINezkevkOopfpAtCu3fvViaT0YABA7LWDxgwQLt27Wr3b3bt2tVu+5aWFu3evdu3TUd95lNXxvRB//Zv/6b9+/frs5/9bNu6kSNHaunSpXr00Ue1fPlylZeX6+STT9Yrr7yS1/jb05UxDRo0SIsXL9aKFSv00EMPacSIETr99NO1bt26tjbFfJx27typxx9/XJdeemnW+jCPU1cUKp/imOsS+d6KfI9+vhcyn+KY7+T6QeR69HNd4rO9O8j1g8h1ch3xURJ2ALlwHCfrsTHmkHWdtf/gets+862rz798+XItXLhQjzzyiPr379+2fsKECZowYULb45NPPlknnniifvSjH+nWW2/NX+A+bMY0YsQIjRgxou3xxIkTVV9frxtvvFGnnnpql/oMQleff+nSpTrssMN07rnnZq2PwnGyVch8imOudycG8p18L6RC51Mc851cJ9el6Oe6xGd7d5Hr5LpEriMeIn2GUL9+/ZRKpQ6pUL711luHVDJbDRw4sN32JSUl6tu3r2+bjvrMp66MqdX999+v2bNn64EHHtCUKVN827quq49+9KMFqVh3Z0x/a8KECVnxFutxMsbo7rvv1sUXX6yysjLftoU8Tl1RqHyKY65L5Lsf8j1aCplPccx3cr1j5Hr08NnedeR6x8j16Il6PiEaIl0QKisr07hx47R69eqs9atXr9ZJJ53U7t9MnDjxkPZPPvmkxo8fr9LSUt82HfWZT10Zk3TwF4VZs2Zp2bJlOvvsszt9HmOMNm/erEGDBnU75s50dUwfVFdXlxVvMR4n6eDtHV999VXNnj270+cp5HHqikLlUxxzXSLf/ZDv0VLIfIpjvpPrHSPXo4fP9q4j1ztGrkdP1PMJEZH/earzq/WWgXfddZfZsmWLmTdvnunVq1fbjO8LFiwwF198cVv71tvrfe1rXzNbtmwxd9111yG313vmmWdMKpUy119/vdm6dau5/vrrQ7kNYq5jWrZsmSkpKTG33XZb1i0O33nnnbY2CxcuNE888YR57bXXTF1dnbnkkktMSUmJee655yI5pptvvtmsXLnS/OEPfzAvvviiWbBggZFkVqxY0dam2I5Tq4suush8/OMfb7fPsI/T3r17TV1dnamrqzOSzE033WTq6urabsEZZj7FMde7Mi7ynXzPhyjnujHxzHdynVzns/1Q5Dq5XizHqRW5XvjvyghX5AtCxhhz2223mWHDhpmysjJz4oknmrVr17ZtmzlzpjnttNOy2q9Zs8accMIJpqyszBx55JFm0aJFh/T54IMPmhEjRpjS0lIzcuTIrDewQrAZ02mnnWYkHbLMnDmzrc28efPM0KFDTVlZmTniiCPM1KlTzfr16ws4Irsx/eAHPzAf+tCHTHl5uTn88MPNJz7xCfOLX/zikD6L6TgZY8w777xjevToYRYvXtxuf2Efp9bbhHb0Wgo7n+KY68aQ7+R74Y9T1HPdmHjmO7lOrvPZfihynVwvhuNkDLke5ndlhMcx5r2ZpQAAAAAAAJAIkZ5DCAAAAAAAAPlHQQgAAAAAACBhKAgBAAAAAAAkDAUhAAAAAACAhKEgBAAAAAAAkDAUhAAAAAAAABKGghAAAAAAAEDCUBACAAAAAABIGApCAAAAAAAACUNBCIGaPn26pkyZ0u62Z599Vo7j6Pnnny9wVADyjVwHkoFcB5KDfAfij4IQAjV79mz9+te/1h//+MdDtt199906/vjjdeKJJ4YQGYB8IteBZCDXgeQg34H4oyCEQH3yk59U//79tXTp0qz17777ru6//37Nnj1bf/nLX3ThhRfqiCOOUI8ePfThD39YS5YsCSdgAF1CrgPJQK4DyUG+A/FHQQiBKikp0Re+8AUtXbpUxpi29Q8++KCampp04YUX6tvf/ra2bNmixx9/XFu3btWiRYvUr1+/EKMGYItcB5KBXAeSg3wH4s8xf5vdQABeeuklfeQjH9Gvf/1rTZ48WZJ02mmn6e/+7u+0bNkyfepTn1K/fv109913hxwpgO4g14FkINeB5CDfgXijIISCOPnkk3XUUUfp3nvv1WuvvaYPf/jDevLJJzVlyhQ9/vjjOu+883TMMcdo6tSpOvfcc3XSSSeFHTKALiDXgWQg14HkIN+B+OKSMRTE7NmztWLFCjU0NGjJkiUaNmyYTj/9dEnStGnT9Mc//lHz5s3Tjh07dPrpp+sb3/hGyBED6ApyHUgGch1IDvIdiC/OEEJB7Nu3T4MGDdINN9yg733ve7rssst0zTXXtNv2jjvu0D//8z+roaGhwFEC6C5yHUgGch1IDvIdiK+SsANAMvTu3VsXXHCBrrrqKu3Zs0ezZs1q23bNNddo3LhxGj16tBobG/Wf//mf+shHPhJesAC6jFwHkoFcB5KDfAfii0vGUDCtt6acMmWKhg4d2ra+rKxMNTU1Gjt2rE499VSlUindd999IUYKoDvIdSAZyHUgOch3IJ64ZAwAAAAAACBhOEMIAAAAAAAgYSgIAQAAAAAAJAwFIQAAAAAAgIShIAQAAAAAAJAwFIQAAAAAAAAShoIQAAAAAABAwlAQAgAAAAAASBgKQgAAAAAAAAlDQQgAAAAAACBhKAgBAAAAAAAkDAUhAAAAAACAhKEgBAAAAAAAkDD/H5VG4QNAHqEvAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 1300x300 with 5 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ds.vals.plot(col='n')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "0cb395cd-84d1-49b4-89dd-da7a2d09c8d0",
"metadata": {},
"outputs": [],
"source": [
"ds.to_netcdf('./data/diatomic_molecule_example.nc')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.5"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"state": {},
"version_major": 2,
"version_minor": 0
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}
%% Cell type:code id:cb509096-42c6-4a45-8dc4-a8eed3116e67 tags:
```
python
import
kwant
import
numpy
as
np
import
matplotlib.pyplot
as
plt
from
codes
import
utils
,
hf
,
kwant_examples
from
tqdm
import
tqdm
from
itertools
import
product
```
%% Cell type:code id:d31cbfea-18ea-454e-8a63-d706a85cd3fc tags:
```
python
hamiltonian_0
=
np
.
block
([
[
0
*
np
.
eye
(
2
),
np
.
eye
(
2
)],
[
np
.
eye
(
2
),
0
*
np
.
eye
(
2
)]
])
hamiltonian_0
=
np
.
expand_dims
(
hamiltonian_0
,
axis
=
0
)
hopping_vecs
=
np
.
array
([[
0
,]])
```
%% Cell type:code id:46e26a1c-36bd-48bd-89e5-5a7faffa3d1e tags:
```
python
hamiltonian_0
.
shape
```
%% Output
(1, 4, 4)
%% Cell type:code id:b39a2976-7c35-4670-83ef-12157bd3fc0e tags:
```
python
vals
,
vecs
=
np
.
linalg
.
eigh
(
hamiltonian_0
)
plt
.
plot
(
vals
,
'
o
'
)
plt
.
show
()
```
%% Output
%% Cell type:code id:41bd9f60-8f29-4e7c-a0c4-a0bbf66445b2 tags:
```
python
def
compute_vals
(
H_int
,
hamiltonian_0
=
hamiltonian_0
,
filling
=
2
,
tol
=
1e-5
,
mixing
=
0.01
,
order
=
10
,
guess
=
None
):
# Generate guess on the same grid
if
guess
is
None
:
guess
=
utils
.
generate_guess
([
0
],
hopping_vecs
,
ndof
=
hamiltonian_0
.
shape
[
-
1
],
scale
=
1
)
else
:
guess
+=
np
.
max
(
guess
)
*
utils
.
generate_guess
([
0
],
hopping_vecs
,
ndof
=
hamiltonian_0
.
shape
[
-
1
],
scale
=
0.1
)
# Find groundstate Hamiltonian on the same grid
h
=
hf
.
find_groundstate_ham
(
H_int
=
H_int
,
filling
=
filling
,
hamiltonians_0
=
hamiltonian_0
,
tol
=
tol
,
guess
=
guess
,
mixing
=
mixing
,
order
=
order
,
)
# Diagonalize groundstate Hamiltonian
vals
,
vecs
=
np
.
linalg
.
eigh
(
h
)
# Extract dense-grid Fermi energy
E_F
=
utils
.
get_fermi_energy
(
vals
,
filling
)
return
vals
-
E_F
```
%% Cell type:code id:32b9e7c5-db12-44f9-930c-21e5494404b8 tags:
```
python
def
compute_phase_diagram
(
Us
,
Vs
,
tol
=
1e-5
,
mixing
=
0.1
,
order
=
5
,
):
# onsite interactions
onsite_int
=
np
.
block
(
[[
np
.
ones
((
2
,
2
)),
np
.
zeros
((
2
,
2
))],
[
np
.
zeros
((
2
,
2
)),
np
.
ones
((
2
,
2
))]]
)
onsite_int
=
np
.
expand_dims
(
onsite_int
,
axis
=
0
)
# Nearest-neighbor interactions
nn_int
=
np
.
block
(
[[
np
.
zeros
((
2
,
2
)),
np
.
ones
((
2
,
2
))],
[
np
.
zeros
((
2
,
2
)),
np
.
zeros
((
2
,
2
))]]
)
nn_int
=
np
.
expand_dims
(
nn_int
,
axis
=
0
)
vals
=
[]
for
U
in
tqdm
(
Us
):
gap_U
=
[]
vals_U
=
[]
for
V
in
Vs
:
H_int
=
U
*
onsite_int
+
V
*
nn_int
_vals
=
compute_vals
(
H_int
=
H_int
,
tol
=
tol
,
mixing
=
mixing
,
order
=
order
,
)
vals_U
.
append
(
_vals
)
vals
.
append
(
vals_U
)
return
np
.
asarray
(
vals
)
```
%% Cell type:code id:6a8c08a9-7e31-420b-b6b4-709abfb26793 tags:
```
python
# Interaction strengths
Us
=
np
.
linspace
(
0
,
5
,
20
,
endpoint
=
True
)
Vs
=
np
.
linspace
(
0
,
1
,
20
,
endpoint
=
True
)
vals
=
compute_phase_diagram
(
Us
,
Vs
,
tol
=
1e-5
)
```
%% Output
100%|██████████| 20/20 [01:02<00:00, 3.15s/it]
%% Cell type:code id:e17fc96c-c463-4e1f-8250-c254d761b92a tags:
```
python
import
xarray
as
xr
ds
=
xr
.
Dataset
(
data_vars
=
dict
(
vals
=
([
"
Us
"
,
"
Vs
"
,
"
n
"
],
vals
[:,:,
0
,:]),
),
coords
=
dict
(
Us
=
Us
,
Vs
=
Vs
,
n
=
np
.
arange
(
vals
.
shape
[
-
1
])),
)
```
%% Cell type:code id:868cf368-45a0-465e-b042-6182ff8b6998 tags:
```
python
ds
.
vals
.
plot
(
col
=
'
n
'
)
plt
.
show
()
```
%% Output
%% Cell type:code id:0cb395cd-84d1-49b4-89dd-da7a2d09c8d0 tags:
```
python
ds
.
to_netcdf
(
'
./data/diatomic_molecule_example.nc
'
)
```
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment