ProjMPO
Description
ITensorMPS.ProjMPO
— TypeA 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.product
— Methodproduct(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!
— Methodposition!(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.noiseterm
— Methodnoiseterm(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.length
— Methodlength(P::ProjMPO)
The length of a ProjMPO is the same as the length of the MPO used to construct it
Base.eltype
— Methodeltype(P::ProjMPO)
Deduce the element type (such as Float64 or ComplexF64) of the tensors in the ProjMPO P
.
Base.size
— Methodsize(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)