From 16ff87dcc6b15f1d23dc16cfd76fc41b5c387518 Mon Sep 17 00:00:00 2001 From: Johanna <johanna@zijderveld.de> Date: Wed, 8 May 2024 11:53:17 +0200 Subject: [PATCH] small rephrasings, typo fixings and sentence added --- docs/source/tutorial/hubbard_1d.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/docs/source/tutorial/hubbard_1d.md b/docs/source/tutorial/hubbard_1d.md index 1f84840..0c87e3f 100644 --- a/docs/source/tutorial/hubbard_1d.md +++ b/docs/source/tutorial/hubbard_1d.md @@ -41,17 +41,19 @@ With the model defined, we can now proceed to input the Hamiltonian into the pac ### Non-interacting Hamiltonian -First, lets get the basic imports out of the way. +First, let's get the basic imports out of the way. ```{code-cell} ipython3 import numpy as np import matplotlib.pyplot as plt import pymf ``` -Now lets translate the non-interacting Hamiltonian $\hat{H_0}$ defined above into a basic input format for the package: a **tight-binding dictionary**. +Now let us translate the non-interacting Hamiltonian $\hat{H_0}$ defined above into the basic input format for the package: a **tight-binding dictionary**. The tight-binding dictionary is a python dictionary where the keys are tuples of integers representing the hopping vectors and the values are the hopping matrices. -For example, a key `(0,)` represents the onsite term and a key `(1,)` represents the hopping a single unit cell to the right. -In the case of our 1D Hubbard model, non-interacting Hamiltonian is: +For example, a key `(0,)` represents the onsite term in one dimension and a key `(1,)` represents the hopping a single unit cell to the right. +In two dimensions a key `(0,0)` would represent the onsite term and `(1,0)` would represent hopping to the right in the direction of the first reciprocal lattice vector. +In the case of our 1D Hubbard model, we only have an onsite term and hopping a single unit cell to the left and right. +Thus our non-interacting Hamiltonian becomes: ```{code-cell} ipython3 hopp = np.kron(np.array([[0, 1], [0, 0]]), np.eye(2)) @@ -60,7 +62,7 @@ h_0 = {(0,): hopp + hopp.T.conj(), (1,): hopp, (-1,): hopp.T.conj()} Here `hopp` is the hopping matrix which we define as a kronecker product between sublattice and spin degrees of freedom: `np.array([[0, 1], [0, 0]])` corresponds to the hopping between sublattices and `np.eye(2)` leaves the spin degrees of freedom unchanged. In the corresponding tight-binding dictionary `h_0`, the key `(0,)` contains hopping within the unit cell and the keys `(1,)` and `(-1,)` correspond to the hopping between the unit cells to the right and left respectively. -We verify the validity of `h_0`, we evaluate it in the reciprocal space using the {autolink}`~pymf.tb.transforms.tb_to_kgrid`, diagonalize it and plot the band structure: +To verify the validity of `h_0`, we evaluate it in the reciprocal space using the {autolink}`~pymf.tb.transforms.tb_to_kgrid`, then diagonalize it and plot the band structure: ```{code-cell} ipython3 nk = 50 # number of k-points @@ -107,10 +109,11 @@ The object `full_model` now contains all the information needed to solve the mea To find a mean-field solution, we first require a starting guess. In cases where the non-interacting Hamiltonian is highly degenerate, there exists several possible mean-field solutions, many of which are local and not global minima of the energy landscape. +Therefore, the choice of the initial guess can significantly affect the final solution depending on the energy landscape. Here the problem is simple enough that we can generate a random guess for the mean-field solution through the {autolink}`~pymf.tb.utils.generate_guess` function. It creates a random Hermitian tight-binding dictionary based on the hopping keys provided and the number of degrees of freedom within the unit cell. -Because the mean-field solution cannot contain hoppings longer than the interaction itself, we use `h_0` keys as an input to {autolink}`~pymf.tb.utils.generate_guess`. -Finally, to solve the model, we use the {autolink}`~pymf.solvers.solver` function which by default employes a root-finding algorithm to find a self-consistent mean-field solution. +Because the mean-field solution cannot contain hoppings longer than the interaction itself, we use `h_int` keys as an input to {autolink}`~pymf.tb.utils.generate_guess`. +Finally, to solve the model, we use the {autolink}`~pymf.solvers.solver` function which by default employes a root-finding [algorithm](https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.anderson.html) to find a self-consistent mean-field solution. ```{code-cell} ipython3 filling = 2 @@ -184,4 +187,4 @@ plt.ylabel("$\Delta{E}/t$") plt.show() ``` -We see that at around $U=1$ the gap opens up and the system transitions from a metal to an insulator. +We see that at around $U=1$ the gap opens up and the system transitions from a metal to an insulator. In order to more accurately determine the size of the gap, we chose to use a denser k-grid for the diagonalization of the mean-field solution. -- GitLab