TwoSiteH

class tenpy.algorithms.mps_sweeps.TwoSiteH(env, i0, combine=False, move_right=True, ortho_to_envs=[])[source]

Bases: tenpy.algorithms.mps_sweeps.EffectiveH

Class defining the two-site effective Hamiltonian for Lanczos.

The effective two-site Hamiltonian looks like this:

|        .---       ---.
|        |    |   |    |
|       LP----W0--W1---RP
|        |    |   |    |
|        .---       ---.

If combine is True, we define LHeff and RHeff, which are the contractions of LP with W0, and RP with W1, respectively.

Parameters
envMPOEnvironment

Environment for contraction <psi|H|psi>.

i0int

Index of the active site if length=1, or of the left-most active site if length>1.

combinebool

Whether to combine legs into pipes. This combines the virtual and physical leg for the left site (when moving right) or right side (when moving left) into pipes. This reduces the overhead of calculating charge combinations in the contractions, but one matvec() is formally more expensive, \(O(2 d^3 \chi^3 D)\).

move_rightbool

Whether the the sweep is moving right or left for the next update.

Attributes
combinebool

Whether to combine legs into pipes. This combines the virtual and physical leg for the left site and right site into pipes. This reduces the overhead of calculating charge combinations in the contractions, but one matvec() is formally more expensive, \(O(2 d^3 \chi^3 D)\).

lengthint

Number of (MPS) sites the effective hamiltonian covers.

LHeffArray

Left part of the effective Hamiltonian. Labels '(vR*.p0)', 'wR', '(vR.p0*)' for bra, MPO, ket.

RHeffArray

Right part of the effective Hamiltonian. Labels '(p1*.vL)', 'wL', '(p1.vL*)' for ket, MPO, bra.

LP, W0, W1, RPArray

Tensors making up the network of self.

Methods

combine_Heff(self)

Combine LP and RP with W to form LHeff and RHeff.

combine_theta(self, theta)

Combine the legs of theta, such that fit to how we combined the legs of self.

matvec(self, theta)

Apply the effective Hamiltonian to theta.

matvec_theta_ortho(self, theta)

Apply self to theta, and orthogonalize against self.theta_ortho.

to_matrix(self)

Contract self to a matrix.

matvec(self, theta)[source]

Apply the effective Hamiltonian to theta.

Parameters
thetaArray

Labels: vL, p0, p1, vR if combine=False, (vL.p0), (p1.vR) if True

Returns
theta Array

Product of theta and the effective Hamiltonian.

combine_Heff(self)[source]

Combine LP and RP with W to form LHeff and RHeff.

Combine LP with W0 and RP with W1 to get the effective parts of the Hamiltonian with piped legs.

combine_theta(self, theta)[source]

Combine the legs of theta, such that fit to how we combined the legs of self.

Parameters
thetaArray

Wave function with labels 'vL', 'p0', 'p1', 'vR'

Returns
thetaArray

Wave function with labels 'vL', 'p0', 'p1', 'vR'

to_matrix(self)[source]

Contract self to a matrix.

matvec_theta_ortho(self, theta)

Apply self to theta, and orthogonalize against self.theta_ortho. __ We implement this by effectively replacing H -> P H P with the projector P = 1 - sum_o |o> <o| projecting out the states from theta_ortho.

Parameter and return value as for matvec() (which this function replaces, if the class was initialized with non-empty ortho_to_envs.)