diff --git a/examples/graphene_extended_hubbard.ipynb b/examples/graphene_extended_hubbard.ipynb index 1133c3b370dd4baa5767b79246f1fa516935408e..71d40ecb63e424671901e460009212c8bae0fc9f 100644 --- a/examples/graphene_extended_hubbard.ipynb +++ b/examples/graphene_extended_hubbard.ipynb @@ -16,6 +16,17 @@ "from tqdm import tqdm" ] }, + { + "cell_type": "markdown", + "id": "75721173-f9af-4b9b-a694-7a0bdf65c307", + "metadata": {}, + "source": [ + "Now we show the interface with `kwant`. We start by using `kwant` to build two tight-binding systems with translational symmetry:\n", + "* graphene;\n", + "* a dummy system that encodes the interaction matrix.\n", + "See [`kwant_examples`](./codes/kwant_examples.py) to check how these two steps are done." + ] + }, { "cell_type": "code", "execution_count": 2, @@ -27,6 +38,14 @@ "bulk_graphene, syst_V = kwant_examples.graphene_extended_hubbard()" ] }, + { + "cell_type": "markdown", + "id": "8f004476-fc3b-4c50-808c-4a636ce17c03", + "metadata": {}, + "source": [ + "We then use `utils.extract_hopping_vectors` to extract the hopping vectors of the `kwant.Builder` that encodes the interaction matrix." + ] + }, { "cell_type": "code", "execution_count": 3, @@ -34,110 +53,119 @@ "metadata": {}, "outputs": [], "source": [ - "# Extract hopping vectors from dummy interacting system\n", - "hopping_vecs = utils.extract_hopping_vectors(syst_V)\n", - "hopping_vecs = np.unique(np.stack([*hopping_vecs, *-hopping_vecs]), axis=(0))" + "tb_model = utils.builder2tb_model(bulk_graphene)" ] }, { - "cell_type": "code", - "execution_count": 4, - "id": "d1ef154e-70bd-4f28-887f-72362d8533dd", - "metadata": { - "tags": [] - }, - "outputs": [], + "cell_type": "markdown", + "id": "4a671249-a256-4e3f-b570-3ec10e5d9a40", + "metadata": {}, + "source": [ + "Finally, we use [`kwant.wraparound.wraparound`](https://kwant-project.org/doc/dev/reference/generated/kwant.wraparound.wraparound#kwant.wraparound.wraparound) to wrap the system." + ] + }, + { + "cell_type": "markdown", + "id": "88183ab4-2f73-4389-a14f-168fe3806902", + "metadata": {}, "source": [ - "# Use wraparound to make infinite system\n", - "wrapped_syst = kwant.wraparound.wraparound(bulk_graphene).finalized()\n", - "wrapped_V = kwant.wraparound.wraparound(syst_V).finalized()" + "With the finalized systems, we first generate an nd-array for the Hamiltonian evaluated on a $n \\times n$, $n=15$, k-point grid." ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "id": "d31cbfea-18ea-454e-8a63-d706a85cd3fc", "metadata": {}, "outputs": [], "source": [ "# Compute non-interacting Hamiltonian on a coarse k-point grid\n", "# Number of k-points along each direction\n", - "nk = 15\n", - "# k-points must start at zero\n", - "ks = np.linspace(0, 2 * np.pi, nk, endpoint=False)\n", - "hamiltonians_0 = utils.syst2hamiltonian(ks, wrapped_syst)" + "nk = 50\n", + "hamiltonians_0 = utils.kgrid_hamiltonian(nk, tb_model)" + ] + }, + { + "cell_type": "markdown", + "id": "075df6f6-9311-4122-8b1e-2d709058e574", + "metadata": {}, + "source": [ + "Note that this grid is rather coarse, and thus not necessarily appropriate to observables. We thus use `utils.hk_densegrid` to compute the gap." ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 18, "id": "41bd9f60-8f29-4e7c-a0c4-a0bbf66445b2", "metadata": {}, "outputs": [], "source": [ "def compute_gap(\n", - " H_int,\n", - " ks,\n", - " ks_dense,\n", - " hamiltonians_0=hamiltonians_0,\n", + " tb_model,\n", + " int_model,\n", + " nk,\n", + " nk_dense,\n", + " U,\n", " filling=2,\n", - " tol=1e-5,\n", - " mixing=0.01,\n", - " order=10,\n", - " guess=None\n", + " guess=None,\n", "):\n", " # Generate guess on the same grid\n", " if guess is None:\n", - " guess = utils.generate_guess(ks, hopping_vecs, ndof=hamiltonians_0.shape[-1], scale=1)\n", - " else:\n", - " guess += np.max(guess) * utils.generate_guess(ks, hopping_vecs, ndof=hamiltonians_0.shape[-1], scale=0.1)\n", + " guess = utils.generate_guess(nk, tb_model, int_model, scale=0.2)\n", + " # else:\n", + " # guess += utils.generate_guess(\n", + " # nk, tb_model, int_model, scale=0.1 * np.max(np.abs(guess))\n", + " # )\n", "\n", " # Find groundstate Hamiltonian on the same grid\n", - " hk = hf.find_groundstate_ham(\n", - " H_int=H_int,\n", + " mf_model, mf = hf.find_groundstate_ham(\n", + " tb_model=tb_model,\n", + " int_model=int_model,\n", " filling=filling,\n", - " hamiltonians_0=hamiltonians_0,\n", - " tol=tol,\n", + " nk=nk,\n", " guess=guess,\n", - " mixing=mixing,\n", - " order=order,\n", + " return_mf=True,\n", " )\n", " # Compute groundstate Hamiltonian on a dense grid\n", - " scf_ham = utils.hk_densegrid(hk, ks, ks_dense, hopping_vecs)\n", + " scf_ham = utils.kgrid_hamiltonian(nk_dense, mf_model)\n", " # Diagonalize groundstate Hamiltonian\n", " vals, vecs = np.linalg.eigh(scf_ham)\n", " # Extract dense-grid Fermi energy\n", " E_F = utils.get_fermi_energy(vals, filling)\n", " gap = utils.calc_gap(vals, E_F)\n", - " return gap, hk - hamiltonians_0" + " return gap, mf" + ] + }, + { + "cell_type": "markdown", + "id": "718bc267-0899-4d45-8592-deabd6849a75", + "metadata": {}, + "source": [ + "Finally, we run the SCF by evaluating also the interacting matrix on a k-point grid." ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 19, "id": "32b9e7c5-db12-44f9-930c-21e5494404b8", "metadata": { "tags": [] }, "outputs": [], "source": [ - "def compute_phase_diagram(Us, Vs, ks, ks_dense, tol, mixing, order):\n", - " Uk = utils.syst2hamiltonian(ks, wrapped_V, params=dict(U=1, V=0))\n", - " Vk = utils.syst2hamiltonian(ks, wrapped_V, params=dict(U=0, V=1))\n", + "def compute_phase_diagram(Us, Vs, nk, nk_dense):\n", " gap = []\n", " for U in tqdm(Us):\n", " guess = None\n", " gap_U = []\n", " for V in Vs:\n", - " H_int = U * Uk + V * Vk\n", + " params = dict(U=U, V=V)\n", " _gap, guess = compute_gap(\n", - " H_int=H_int,\n", - " ks=ks,\n", - " ks_dense=ks_dense,\n", - " tol=tol,\n", - " mixing=mixing,\n", - " order=order,\n", - " guess=guess,\n", + " tb_model=utils.builder2tb_model(bulk_graphene),\n", + " int_model=utils.builder2tb_model(syst_V, params),\n", + " nk=nk,\n", + " nk_dense=nk_dense,\n", + " guess=guess, U=U\n", " )\n", " gap_U.append(_gap)\n", " gap.append(gap_U)\n", @@ -146,7 +174,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "6a8c08a9-7e31-420b-b6b4-709abfb26793", "metadata": { "tags": [] @@ -156,39 +184,58 @@ "name": "stderr", "output_type": "stream", "text": [ - " 0%| | 0/10 [00:00<?, ?it/s]" + "100%|██████████| 10/10 [03:45<00:00, 22.59s/it]\n" ] } ], "source": [ "# Generate dense-grid k-points\n", - "nk_dense = 30\n", - "ks_dense = np.linspace(0, 2 * np.pi, nk_dense, endpoint=False)\n", "# Interaction strengths\n", - "Us = np.linspace(0, 4, 10, endpoint=True)\n", + "nk=15\n", + "nk_dense=30\n", + "Us = np.linspace(0, 3, 10, endpoint=True)\n", "Vs = np.linspace(0, 1.5, 10, endpoint=True)\n", - "gap = compute_phase_diagram(Us, Vs, ks=ks, ks_dense=ks_dense, tol=1e-4, mixing=0.01, order=10)" + "gap = compute_phase_diagram(Us, Vs, nk=nk, nk_dense=nk_dense)" + ] + }, + { + "cell_type": "markdown", + "id": "1f2defc7-d22b-4f12-834c-4ac8060da9c9", + "metadata": {}, + "source": [ + "We finally see two gapped regions in the spectrum. The bottom region is an antiferromagnetic groundstate, while the upper one is a charge density wave, as described in [arXiv:1204.4531](https://arxiv.org/abs/1204.4531)." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "e17fc96c-c463-4e1f-8250-c254d761b92a", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "gap_da = xr.DataArray(data=gap, coords=dict(Us=Us, Vs=Vs))" ] }, { "cell_type": "code", - "execution_count": 11, - "id": "39edbf19", + "execution_count": 23, + "id": "101d04f3-f811-446d-a313-5a004eba2690", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "<matplotlib.colorbar.Colorbar at 0x7f0a0d7c18d0>" + "<matplotlib.collections.QuadMesh at 0x7fe0ade2cad0>" ] }, - "execution_count": 11, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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Y6NHjzYeeuihoP0ffPBBY/To0X7Hvv3tbxu5ubndFmNnQh3D9u3bDUnGiRMnIhCdOZKMLVu2dNgnFufi87oyhp4wFw0NDYYkY+fOne32ifW5MIyujaMnzMeFF15oPP3000F/1hPmoU1H44jleTh16pQxatQoo6KiwrjmmmuM+++/v92+3TEfbrfbkGRcect/GM7bV1pqV97yH4Yko66uznC73b529uxZ0/EZhmFs2LDBsNvtAcftdrvxzDPPtHvevHnzDLvdbgwdOtQYNWqUsWDBAuOjjz7y/fz11183JBmffPKJ33mXX3658aMf/SikGKNeAWlubtaBAweUl5fndzwvL0979+4Nes6+ffsC+s+YMUOVlZVqaYn867XNjKHN+PHjlZ6ermnTpmn79u3dGWa3iLW5sCKW58LtdktShy/X6glz0ZVxtInF+fB4PNq0aZPOnDkjp9MZtE9PmIeujKNNLM7DvffeqxtuuEHTp3f+St7unI+2u2CsNknKyMjw7dWw2+0qLi62FFt9fb2GDRsWcHzYsGHtvr1ekmbOnKnnn39ef/jDH/TTn/5Ub775pr7yla+oqanJd92EhARdeOGFfuelpqZ2eN1gon4XzLFjx+TxeAJeZtfRYOrr64P2b21t1bFjx5Sent5t8QZjZgzp6elav369HA6Hmpqa9Nxzz2natGnasWOHrr766kiEHRaxNhdmxPpcGIahwsJCffnLX9a4cePa7Rfrc9HVccTifPzpT3+S0+nU2bNndcEFF2jLli269NJLg/aN5XkIZRyxOA+StGnTJh08eFBvvvlml/p363yE8TkgX3wDcXtPcV22bJmWL1/e4SXbfjfB3jhvdPL2+rlz5/r+97hx45STk6PMzEy98sor+upXv9rBMDq+bjBRT0DafDHwzgYTrH+w45EUyhiys7OVnZ3t++x0OlVXV6eVK1fGxF96oYjFuQhFrM/F4sWL9fbbb2vPnj2d9o3luejqOGJxPrKzs1VdXa2TJ0+qrKxM8+bN086dO9v9yztW5yGUccTiPNTV1en+++/Xtm3blJTU9SeQxup8fF5X30C8ePFi3XHHHR32GTlypN5++2199NFHAT/7+OOP2317fTDp6enKzMzU4cOHJZ17w31zc7NOnDjhVwVpaGho96W07Yn6EkxKSori4uICKgUNDQ3t/pLS0tKC9u/fv7+G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", + "image/png": "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", "text/plain": [ "<Figure size 640x480 with 2 Axes>" ] @@ -198,24 +245,12 @@ } ], "source": [ - "plt.imshow(np.log10(gap).T, origin='lower', extent=(Us.min(), Us.max(), Vs.min(), Vs.max()), vmin=-1)\n", - "plt.colorbar()" + "gap_da.plot(x='Us', y='Vs')" ] }, { "cell_type": "code", - "execution_count": 17, - "id": "e17fc96c-c463-4e1f-8250-c254d761b92a", - "metadata": {}, - "outputs": [], - "source": [ - "import xarray as xr\n", - "gap_da = xr.DataArray(data=gap, coords=dict(Us=Us, Vs=Vs))" - ] - }, - { - "cell_type": "code", - "execution_count": 18, + "execution_count": 25, "id": "0cb395cd-84d1-49b4-89dd-da7a2d09c8d0", "metadata": {}, "outputs": [],