NearestNeighborModel¶
full name: tenpy.models.model.NearestNeighborModel
parent module:
tenpy.models.model
type: class
-
class
tenpy.models.model.
NearestNeighborModel
(lattice, H_bond)[source]¶ Bases:
tenpy.models.model.Model
Base class for a model of nearest neigbor interactions w.r.t. the MPS index.
In this class, the Hamiltonian \(H = \sum_{i} H_{i,i+1}\) is represented by “bond terms” \(H_{i,i+1}\) acting only on two neighboring sites i and i+1, where i is an integer. Instances of this class are suitable for
tebd
.Note that the “nearest-neighbor” in the name referst to the MPS index, not the lattice. In short, this works only for 1-dimensional (1D) nearest-neighbor models: A 2D lattice is internally mapped to a 1D MPS “snake”, and even a nearest-neighbor coupling in 2D becomes long-range in the MPS chain.
- Parameters
- lattice
tenpy.model.lattice.Lattice
The lattice defining the geometry and the local Hilbert space(s).
- H_bondlist of {
Array
| None} The Hamiltonian rewritten as
sum_i H_bond[i]
for MPS indicesi
.H_bond[i]
acts on sites(i-1, i)
; we requirelen(H_bond) == lat.N_sites
. Legs of eachH_bond[i]
are['p0', 'p0*', 'p1', 'p1*']
.
- lattice
- Attributes
- H_bondlist of {
Array
| None} The Hamiltonian rewritten as
sum_i H_bond[i]
for MPS indicesi
.H_bond[i]
acts on sites(i-1, i)
,None
represents 0. Legs of eachH_bond[i]
are['p0', 'p0*', 'p1', 'p1*']
.
- H_bondlist of {
Methods
bond_energies
(self, psi)Calculate bond energies <psi|H_bond|psi>.
calc_H_MPO_from_bond
(self[, tol_zero])Calculate the MPO Hamiltonian from the bond Hamiltonian.
from_MPOModel
(mpo_model)Initialize a NearestNeighborModel from a model class defining an MPO.
group_sites
(self[, n, grouped_sites])Modify self in place to group sites.
trivial_like_NNModel
(self)Return a NearestNeighborModel with same lattice, but trivial (H=0) bonds.
test_sanity
-
classmethod
from_MPOModel
(mpo_model)[source]¶ Initialize a NearestNeighborModel from a model class defining an MPO.
This is especially usefull in combination with
MPOModel.group_sites()
.- Parameters
- mpo_model
MPOModel
A model instance implementing the MPO. Does not need to be a
NearestNeighborModel
, but should only have nearest-neighbor couplings.
- mpo_model
Examples
The SpinChainNNN2 has next-nearest-neighbor couplings and thus only implements an MPO:
>>> from tenpy.models.spins_nnn import SpinChainNNN2 >>> nnn_chain = SpinChainNNN2({'L': 20}) parameter 'L'=20 for SpinChainNNN2 >>> print(isinstance(nnn_chain, NearestNeighborModel)) False >>> print("range before grouping:", nnn_chain.H_MPO.max_range) range before grouping: 2
By grouping each two neighboring sites, we can bring it down to nearest neighbors.
>>> nnn_chain.group_sites(2) >>> print("range after grouping:", nnn_chain.H_MPO.max_range) range after grouping: 1
Yet, TEBD will not yet work, as the model doesn’t define H_bond. However, we can initialize a NearestNeighborModel from the MPO:
>>> nnn_chain_for_tebd = NearestNeighborModel.from_MPOModel(nnn_chain)
-
trivial_like_NNModel
(self)[source]¶ Return a NearestNeighborModel with same lattice, but trivial (H=0) bonds.
-
bond_energies
(self, psi)[source]¶ Calculate bond energies <psi|H_bond|psi>.
- Parameters
- psi
MPS
The MPS for which the bond energies should be calculated.
- psi
- Returns
- E_bond1D ndarray
List of bond energies: for finite bc,
E_Bond[i]
is the energy of bondi, i+1
. (i.e. we omit bond 0 between sites L-1 and 0); for infinite bcE_bond[i]
is the energy of bondi-1, i
.
-
group_sites
(self, n=2, grouped_sites=None)[source]¶ Modify self in place to group sites.
Group each n sites together using the
GroupedSite
. This might allow to do TEBD with a Trotter decomposition, or help the convergence of DMRG (in case of too long range interactions).This has to be done after finishing initialization and can not be reverted.
- Parameters
- nint
Number of sites to be grouped together.
- grouped_sitesNone | list of
GroupedSite
The sites grouped together.
- Returns
- grouped_siteslist of
GroupedSite
The sites grouped together.
- grouped_siteslist of