NearestNeighborModel¶
full name: tenpy.models.model.NearestNeighborModel
parent module:
tenpy.models.modeltype: class
-
class
tenpy.models.model.NearestNeighborModel(lattice, H_bond)[source]¶ Bases:
tenpy.models.model.ModelBase 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),Nonerepresents 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