NearestNeighborModel¶
full name: tenpy.models.model.NearestNeighborModel
parent module:
tenpy.models.model
type: class
Inheritance Diagram
Methods
|
Initialize self. |
Calculate bond energies <psi|H_bond|psi>. |
|
Calculate the MPO Hamiltonian from the bond Hamiltonian. |
|
Repeat the unit cell for infinite MPS boundary conditions; in place. |
|
|
Initialize a NearestNeighborModel from a model class defining an MPO. |
|
Load instance from a HDF5 file. |
|
Modify self in place to group sites. |
|
Export self into a HDF5 file. |
|
|
Return a NearestNeighborModel with same lattice, but trivial (H=0) bonds. |
Class Attributes and Properties
|
class attribute. |
-
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 refers 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_bond (list of {
Array
| None}) – The Hamiltonian rewritten assum_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*']
.
-
H_bond
¶ 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_bond is not affected by the explicit_plus_hc flag of aCouplingModel
.- Type
list of {
Array
| None}
-
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 aNearestNeighborModel
, 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}) >>> 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.
>>> grouped_sites = 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) >>> isinstance(nnn_chain_for_tebd, NearestNeighborModel) True
-
trivial_like_NNModel
()[source]¶ Return a NearestNeighborModel with same lattice, but trivial (H=0) bonds.
-
bond_energies
(psi)[source]¶ Calculate bond energies <psi|H_bond|psi>.
- Parameters
psi (
MPS
) – The MPS for which the bond energies should be calculated.- Returns
E_bond – 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
.- Return type
1D ndarray
-
enlarge_mps_unit_cell
(factor=2)[source]¶ Repeat the unit cell for infinite MPS boundary conditions; in place.
This has to be done after finishing initialization and can not be reverted.
- Parameters
factor (int) – The new number of sites in the MPS unit cell will be increased from N_sites to
factor*N_sites_per_ring
. Since MPS unit cells are repeated in the x-direction in our convetion, the lattice shape goes from(Lx, Ly, ..., Lu)
to(Lx*factor, Ly, ..., Lu)
.
-
group_sites
(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
n (int) – Number of sites to be grouped together.
grouped_sites (None | list of
GroupedSite
) – The sites grouped together.
- Returns
grouped_sites – The sites grouped together.
- Return type
list of
GroupedSite
-
calc_H_MPO_from_bond
(tol_zero=1e-15)[source]¶ Calculate the MPO Hamiltonian from the bond Hamiltonian.
-
classmethod
from_hdf5
(hdf5_loader, h5gr, subpath)[source]¶ Load instance from a HDF5 file.
This method reconstructs a class instance from the data saved with
save_hdf5()
.- Parameters
hdf5_loader (
Hdf5Loader
) – Instance of the loading engine.h5gr (
Group
) – HDF5 group which is represent the object to be constructed.subpath (str) – The name of h5gr with a
'/'
in the end.
- Returns
obj – Newly generated class instance containing the required data.
- Return type
cls
-
save_hdf5
(hdf5_saver, h5gr, subpath)[source]¶ Export self into a HDF5 file.
This method saves all the data it needs to reconstruct self with
from_hdf5()
.This implementation saves the content of
__dict__
withsave_dict_content()
, storing the format under the attribute'format'
.