# ProjMPOSum

## Description

ITensors.ProjMPOSumType

A ProjMPOSum computes and stores the projection of an implied sum of MPOs into a basis defined by an MPS, leaving a certain number of site indices of each MPO unprojected. Which sites are unprojected can be shifted by calling the position! method. The MPOs used as input to a ProjMPOSum are not added together beforehand; instead when the product method of a ProjMPOSum is invoked, each projected MPO in the set of MPOs is multiplied by the input tensor one-by-one in an efficient way.

Drawing of the network represented by a ProjMPOSum P([H1,H2,...]), showing the case of nsite(P)==2 and position!(P,psi,4) for an MPS psi (note the sum Σⱼ on the left):

     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>
source

## Methods

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

(P::ProjMPOSum)(v::ITensor)

Efficiently multiply the ProjMPOSum P by an ITensor v in the sense that the ProjMPOSum 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).

source
ITensors.position!Method
position!(P::ProjMPOSum, psi::MPS, pos::Int)

Given an MPS psi, shift the projection of the MPO represented by the ProjMPOSum P such that the set of unprojected sites begins with site pos. This operation efficiently reuses previous projections of the MPOs 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.

source
ITensors.noisetermMethod
noiseterm(P::ProjMPOSum,
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 ProjMPOSum P, and ortho is a String which can take the values "left" or "right" depending on the sweeping direction of the DMRG calculation.

source

## Properties

Base.lengthMethod
length(is::IndexSet)

The number of indices in the IndexSet.

source

length(::Type{<:IndexSet})

The number of indices in the IndexSet type.

source
Base.sizeMethod
size(P::ProjMPOSum)

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

For example, if a ProjMPOSum 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)

source