SyTen

## ◆ genFermiHubbard()

 MPS::Lattice syten::MPS::Lat::U1U1::genFermiHubbard ( Index const length )

Generate a chain of Fermi-Hubbard sites.

Parameters
 length the length of the lattice

#### Technical Background

Local states defined as follows:

id | Definition | Charge $$N$$ | Spin $$S_z$$ —|--------------------------------------------------------------------—|---------------—|--------------— 0 | $$|\textrm{vac}\rangle$$ | $$0$$ | $$0$$ 1 | $$c^\dagger_\uparrow c^\dagger_\downarrow |\textrm{vac}\rangle$$ | $$2$$ | $$0$$ 2 | $$c^\dagger_\downarrow |\textrm{vac}\rangle$$ | $$1$$ | $$-\frac{1}{2}$$ 3 | $$c^\dagger_\uparrow |\textrm{vac}\rangle$$ | $$1$$ | $$\frac{1}{2}$$

With these definitions, we can define the nonzero matrix elements of the four relevant operators as:

$\begin{array}{llr} c^\dagger_\uparrow | 0 \rangle & = c^\dagger_\uparrow |\textrm{vac}\rangle & = + | 3 \rangle \\ c^\dagger_\uparrow | 2 \rangle & = c^\dagger_\uparrow c^\dagger_\downarrow |\textrm{vac}\rangle & = + | 1 \rangle \\ c^\dagger_\downarrow | 0 \rangle & = c^\dagger_\downarrow |\textrm{vac}\rangle & = + | 2 \rangle \\ c^\dagger_\downarrow | 3 \rangle & = c^\dagger_\downarrow c^\dagger_\uparrow |\textrm{vac}\rangle = - c^\dagger_\uparrow c^\dagger_\downarrow |\textrm{vac}\rangle & = - | 1 \rangle \\ \\ c_\uparrow | 3 \rangle & = c_\uparrow c^\dagger_\uparrow |\textrm{vac}\rangle & = + |0\rangle \\ c_\uparrow | 1 \rangle & = c_\uparrow c^\dagger_\uparrow c^\dagger_\downarrow |\textrm{vac}\rangle = c^\dagger_\downarrow |\textrm{vac}\rangle & = + |2\rangle \\ c_\downarrow | 2 \rangle & = c_\downarrow c^\dagger_\downarrow |\textrm{vac}\rangle & = + |0\rangle \\ c_\downarrow | 1 \rangle & = c_\downarrow c^\dagger_\uparrow c^\dagger_\downarrow |\textrm{vac}\rangle = - c^\dagger_\uparrow c_\downarrow c^\dagger_\downarrow |\textrm{vac}\rangle & = - |3\rangle \end{array}$

In the MPO representations, the RHS legs of these operators always transform as $$0_{N} \times 0_{S_z} \equiv (0,0)$$. The LHS legs transform:

Operator MPO LHS leg transformation
$$c^\dagger_\uparrow$$ $$(1, \frac{1}{2})$$
$$c^\dagger_\downarrow$$ $$(1, -\frac{1}{2})$$
$$c_\uparrow$$ $$(-1, -\frac{1}{2})$$
$$c_\downarrow$$ $$(-1, \frac{1}{2})$$

Furthermore, we need a parity operator $$p$$, which measures particle parity on the given site: $$p | 0, 1 \rangle = 1 | 0, 1 \rangle, p | 2, 3 \rangle = -| 2, 3 \rangle$$, e.g. consider on a three-site lattice

$\begin{array}{rl} c^\dagger_{2, \downarrow} | 2 \otimes 3 \otimes 0 \rangle & = c^\dagger_{2, \downarrow} c^\dagger_{1,\downarrow} c^\dagger_{2, \uparrow} | \textrm{vac} \rangle \\ & = - c^\dagger_{1,\downarrow} c^\dagger_{2, \downarrow} c^\dagger_{2, \uparrow} | \textrm{vac} \rangle \\ & = - c^\dagger_{1,\downarrow} (-c^\dagger_{2, \uparrow} c^\dagger_{2, \downarrow}) | \textrm{vac} \rangle \\ & = | 2 \otimes 1 \otimes 0 \rangle \end{array}$

where the first minus sign is because we have to anticommute the new operator on site 2 past the operators on the previous sites. For each site, we either pick up a minus sign (if there is one creation operator acting there) or a plus sign (if zero or two creation operators are acting there). This is not necessary for the sites on the right of site 2, as we do not have to anticommute anything there.

Hence, fermionic single-site operators for a specific site $$i$$ have to be written as

$\hat o_i = p_1 \otimes \cdots p_{i-1} \otimes o_i \otimes 1_{i+1} \cdots \otimes 1_{L} \quad.$

Of course, this only holds for the fermionic creation and annihilation operators, the bosonic particle number operator $$n$$ and the spin operators keep identities to the left and right of their active site.

Implemented Single-Site Operators
chu, chd, cu, cd create and annihilate spin up and spin down particles. n measures the particle number (0, 1, 2). p measures the parity (+1, -1). sz measures the z-component of the spin (-0.5, 0, 0.5). Currently, there are no spin creation and annihilation operators, as I'm unsure regarding the specific signs and their usefulness.

References syten::genRepU1(), and syten::Inc.

Referenced by syten::Pyten::init_mp_latgen().

Here is the call graph for this function:
Here is the caller graph for this function: