diff --git a/codes/test.py b/codes/test.py index b59fb59bf2dd60d9cd9d5d016a2159b485364959..7e6041637d9a21922f67b6793cdb41b841ba3673 100644 --- a/codes/test.py +++ b/codes/test.py @@ -69,3 +69,31 @@ def hubbard_2D(U, N_ks): v_int = U * np.ones((2,2)) V = np.array([[v_int for i in range(N_ks)] for j in range(N_ks)]) return hamiltonians_0, V + + +def hubbard_1D(U, N_ks): + chain = kwant.lattice.chain(a=1, norbs=2) + # create bulk system + bulk_hubbard = kwant.Builder(kwant.TranslationalSymmetry(*chain.prim_vecs)) + bulk_hubbard[chain.shape((lambda pos: True), (0,))] = 0 * np.eye(2) + # add hoppings between lattice points + bulk_hubbard[chain.neighbors()] = -1 + + # use kwant wraparound to sample bulk k-space + wrapped_fsyst = kwant.wraparound.wraparound(bulk_hubbard).finalized() + + # return a hamiltonian for a given kx, ky + @np.vectorize + def hamiltonian_return(kx, params={}): + ham = wrapped_fsyst.hamiltonian_submatrix(params={**params, **dict(k_x=kx)}) + return ham + + N_k_axis = np.linspace(0, 2 * np.pi, N_ks, endpoint=False) + hamiltonians_0 = np.array( + [hamiltonian_return(kx) for kx in N_k_axis] + ) + + # onsite interactions + v_int = U * np.ones((2,2)) + V = np.array([v_int for i in range(N_ks)]) + return hamiltonians_0, V