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
latticetenpy.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 indices i. H_bond[i] acts on sites (i-1, i); we require len(H_bond) == lat.N_sites. Legs of each H_bond[i] are ['p0', 'p0*', 'p1', 'p1*'].

Attributes
H_bondlist of {Array | None}

The Hamiltonian rewritten as sum_i H_bond[i] for MPS indices i. H_bond[i] acts on sites (i-1, i), None represents 0. Legs of each H_bond[i] are ['p0', 'p0*', 'p1', 'p1*'].

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_modelMPOModel

A model instance implementing the MPO. Does not need to be a NearestNeighborModel, but should only have nearest-neighbor couplings.

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
psiMPS

The MPS for which the bond energies should be calculated.

Returns
E_bond1D ndarray

List of bond energies: for finite bc, E_Bond[i] is the energy of bond i, i+1. (i.e. we omit bond 0 between sites L-1 and 0); for infinite bc E_bond[i] is the energy of bond i-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.

calc_H_MPO_from_bond(self, tol_zero=1e-15)[source]

Calculate the MPO Hamiltonian from the bond Hamiltonian.

Parameters
tol_zerofloat

Arrays with norm < tol_zero are considered to be zero.

Returns
H_MPOMPO

MPO representation of the Hamiltonian.