View source on GitHub |
A general, parameterized Fermi-Hubbard model.
openfermion.hamiltonians.FermiHubbardModel(
lattice, tunneling_parameters=None, interaction_parameters=None,
potential_parameters=None, magnetic_field=0.0, particle_hole_symmetry=False
)
The general (AKA 'multiband') Fermi-Hubbard model has k
degrees of
freedom per site in a lattice.
For a lattice with n
sites, there are N = k * n
spatial orbitals.
Additionally, in what we call the "spinful" model each spatial orbital is
associated with "up" and "down" spin orbitals, for a total of 2N
spin
orbitals; in the spinless model, there is only one spin-orbital per site
for a total of N
.
For a lattice with only one type of site and edges from each site only to itself and its neighbors, the Hamiltonian for the spinful model has the form
.. math::
\begin{align}
H = &- \sum_{a < b} t_{a, b}^{(\mathrm{onsite})}
\sum_{i} \sum_{\sigma}
(a^\dagger_{i, a, \sigma} a_{i, b, \sigma} +
a^\dagger_{i, b, \sigma} a_{i, a, \sigma})
\\
&- \sum_{a} t_{a, a}^{(\mathrm{nghbr})}
\sum_{\{i, j\} } \sum_{\sigma}
(a^\dagger_{i, a, \sigma} a_{j, a, \sigma} +
a^\dagger_{j, a, \sigma} a_{i, a, \sigma})
- \sum_{a < b} t_{a, b}^{(\mathrm{nghbr})}
\sum_{(i, j)} \sum_{\sigma}
(a^\dagger_{i, a, \sigma} a_{j, b, \sigma} +
a^\dagger_{j, b, \sigma} a_{i, a, \sigma})
\\
&+ \sum_{a < b} U_{a, b}^{(\mathrm{onsite}, +)}
\sum_{i} \sum_{\sigma}
n_{i, a, \sigma} n_{i, b, \sigma}
\\
&+ \sum_{a} U_{a, a}^{(\mathrm{nghbr}, +)}
\sum_{\{i, j\} } \sum_{\sigma}
n_{i, a, \sigma} n_{j, a, \sigma}
+ \sum_{a < b} U_{a, b}^{(\mathrm{nghbr}, +)}
\sum_{(i, j)} \sum_{\sigma}
n_{i, a, \sigma} n_{j, b, \sigma}
\\
&+ \sum_{a \leq b} U_{a, b}^{(\mathrm{onsite}, -)}
\sum_{i} \sum_{\sigma}
n_{i, a, \sigma} n_{i, b, -\sigma}
\\
&+ \sum_{a} U_{a, a}^{(\mathrm{nghbr}, -)}
\sum_{\{ i, j \} } \sum_{\sigma}
n_{i, a, \sigma} n_{j, a, -\sigma}
+ \sum_{a < b} U_{a, b}^{(\mathrm{nghbr}, -)}
\sum_{( i, j )} \sum_{\sigma}
n_{i, a, \sigma} n_{j, b, -\sigma}
\\
&- \sum_{a} \mu_a
\sum_i \sum_{\sigma} n_{i, a, \sigma}
\\
&- h \sum_{i} \sum_{a}
\left(n_{i, a, \uparrow} - n_{i, a, \downarrow}\right)
\end{align}
where
- The indices :math:`(i, j)` and :math:`\{i, j\}` run over ordered and
unordered pairs, respectively of sites :math:`i` and :math:`j` of
neighboring sites in the lattice,
- :math:`a` and :math:`b` index degrees of freedom on each site,
- :math:`\sigma \in \{\uparrow, \downarrow\}` is the spin,
- :math:`t_{a, b}^{(\mathrm{onsite})}` is the tunneling amplitude
between spin orbitals on the same site,
- :math:`t_{a, b}^{(\mathrm{nghbr})}` is the tunneling amplitude
between spin orbitals on neighboring sites,
- :math:`U_{a, b}^{(\mathrm{onsite, \pm})}` is the Coulomb potential
between spin orbitals on the same site with the same (+) or different
(-) spins,
- :math:`U_{a, b}^{(\mathrm{nghbr, \pm})}` is the Coulomb potential
betwen spin orbitals on neighborings sites with the same (+) or
different (-) spins,
- :math:`\mu_{a}` is the chemical potential, and
- :math:`h` is the magnetic field.
One can also construct the Hamiltonian for the spinless model, which has the form
.. math::
\begin{align}
H = &- \sum_{a < b} t_{a, b}^{(\mathrm{onsite})}
\sum_{i}
(a^\dagger_{i, a} a_{i, b} +
a^\dagger_{i, b} a_{i, a})
\\
&- \sum_{a} t_{a, a}^{(\mathrm{nghbr})}
\sum_{\{i, j\} }
(a^\dagger_{i, a} a_{j, a} +
a^\dagger_{j, a} a_{i, a})
- \sum_{a < b} t_{a, b}^{(\mathrm{nghbr})}
\sum_{(i, j)}
(a^\dagger_{i, a} a_{j, b} +
a^\dagger_{j, b} a_{i, a})
\\
&+ \sum_{a < b} U_{a, b}^{(\mathrm{onsite})}
\sum_{i}
n_{i, a} n_{i, b}
\\
&+ \sum_{a} U_{a, a}^{(\mathrm{nghbr})}
\sum_{\{i, j\} }
n_{i, a} n_{j, a}
+ \sum_{a < b} U_{a, b}^{(\mathrm{nghbr})}
\sum_{(i, j)}
n_{i, a} n_{j, b}
\\
&- \sum_{a} \mu_a
\sum_i n_{i, a}
\end{align}
Args | |
---|---|
lattice (HubbardLattice): The lattice on which the model is defined. tunneling_parameters (Iterable[Tuple[Hashable, Tuple[int, int], float]], optional): The tunneling parameters. interaction_parameters (Iterable[Tuple[Hashable, Tuple[int, int], float, int?]], optional): The interaction parameters. potential_parameters (Iterable[Tuple[int, float]], optional): The potential parameters. magnetic_field (float, optional): The magnetic field. Default is 0. | |
particle_hole_symmetry
|
If true, each number operator :math:n is
replaced with :math:n - 1/2 .
|
Methods
field_terms
field_terms()
hamiltonian
hamiltonian()
interaction_terms
interaction_terms()
parse_interaction_parameters
parse_interaction_parameters(
parameters
)
parse_potential_parameters
parse_potential_parameters(
parameters
)
parse_tunneling_parameters
parse_tunneling_parameters(
parameters
)
potential_terms
potential_terms()
tunneling_terms
tunneling_terms()