hamiltonian

◼ hubbard[Hubbard,op[j],n,U,t,ϵ] returns the Hubbard model Hamiltonian in a one dimensional n-site chain with electron-electron repulsion U, hopping t and on-site energy ϵ. op[j] is the corresponding fermionic operator (in the stripped form) for lattice sites.

◼ Operator op must be expressed in the stripped form, i.e. a form which excludes the first index (creation/annihilation) and the last index (spin).

◼ See also: isozsq, number, pow, chargecharge.

Further examples

Load sneg and declare c to be a fermionic operator

<< sneg`sneg`;
snegfermionoperators[c];
snegrealconstants[U, t, ϵ];

Three-site Hubbard Hamiltonian

n = 3;
H = 
      hamiltonian[Hubbard, c[], n, U, 
        t, ϵ]
SnegSimplify[H]

Construct a basis with well defined (Q, (Subscript[S, z])) quantum numbers

ops = Table[c[i], {i, n}];
makebasis[ops];
bz = qszbasisvc[ops];
MatrixForm[bz]

Construct the Hamiltonian matrix in Q=0, (Subscript[S, z])=1/2 subspace.

bz1 = Select[bz, #[[1]] == {0, 1/2} &][[1, 
            2]];
mat = matrixrepresentationvc[H, bz1];
MatrixForm[mat]

More complex example: five site Hubbard model

n = 5;
H = 
        hamiltonian[Hubbard, c[], n, U, 
          t, ϵ];
H = 
        H /. {ϵ -> 0, U -> 1, 
            t -> -0.2};
ops = Table[c[i], {i, n}];
makebasis[ops];
bz = qszbasisvc[ops];
bz1 = Select[bz, #[[1]] == {0, 1/2} &][[1, 
            2]];
Print["Matrix dimension: ", 
        Length[bz1]];
Timing[mat = 
          matrixrepresentationvc[H, bz1];]
Timing[matfast = 
          matrixrepresentationvcfast[H, bz1];]
Timing[matsp = 
          matrixrepresentationvcsparse[H, bz1];]
mat == matfast
mat == matsp

Plot the structure of the Hamiltonian matrix and compute the lowest five eigenvalues using the Arnoldi (Lanczos) method

ArrayPlot[mat];
Timing[
      Eigenvalues[mat, 5, 
        Method -> {"Arnoldi", Shift -> -0.5}]]