ProjMPO

Description

ITensorMPS.ProjMPOType

A ProjMPO computes and stores the projection of an MPO into a basis defined by an MPS, leaving a certain number of site indices of the MPO unprojected. Which sites are unprojected can be shifted by calling the position! method.

Drawing of the network represented by a ProjMPO P(H), showing the case of nsite(P)==2 and position!(P,psi,4) for an MPS psi:

o--o--o-      -o--o--o--o--o--o <psi|
|  |  |  |  |  |  |  |  |  |  |
o--o--o--o--o--o--o--o--o--o--o H
|  |  |  |  |  |  |  |  |  |  |
o--o--o-      -o--o--o--o--o--o |psi>

Methods

ITensors.productMethod
product(P::ProjMPO,v::ITensor)::ITensor

(P::ProjMPO)(v::ITensor)

Efficiently multiply the ProjMPO P by an ITensor v in the sense that the ProjMPO is a generalized square matrix or linear operator and v is a generalized vector in the space where it acts. The returned ITensor will have the same indices as v. The operator overload P(v) is shorthand for product(P,v).

ITensorMPS.position!Method
position!(P::ProjMPO, psi::MPS, pos::Int)

Given an MPS psi, shift the projection of the MPO represented by the ProjMPO P such that the set of unprojected sites begins with site pos. This operation efficiently reuses previous projections of the MPO on sites that have already been projected. The MPS psi must have compatible bond indices with the previous projected MPO tensors for this operation to succeed.

ITensorMPS.noisetermMethod
noiseterm(P::ProjMPO,
          phi::ITensor,
          ortho::String)

Return a "noise term" or density matrix perturbation ITensor as proposed in Phys. Rev. B 72, 180403 for aiding convergence of DMRG calculations. The ITensor phi is the contracted product of MPS tensors acted on by the ProjMPO P, and ortho is a String which can take the values "left" or "right" depending on the sweeping direction of the DMRG calculation.

Properties

Base.lengthMethod
length(P::ProjMPO)

The length of a ProjMPO is the same as the length of the MPO used to construct it

Base.eltypeMethod
eltype(P::ProjMPO)

Deduce the element type (such as Float64 or ComplexF64) of the tensors in the ProjMPO P.

Base.sizeMethod
size(P::ProjMPO)

The size of a ProjMPO are its dimensions (d,d) when viewed as a matrix or linear operator acting on a space of dimension d.

For example, if a ProjMPO maps from a space with indices (a,s1,s2,b) to the space (a',s1',s2',b') then the size is (d,d) where d = dim(a)*dim(s1)*dim(s1)*dim(b)