TwoSiteMixer¶
full name: tenpy.algorithms.dmrg.TwoSiteMixer
parent module:
tenpy.algorithms.dmrgtype: class
-
class
tenpy.algorithms.dmrg.TwoSiteMixer(mixer_params)[source]¶ Bases:
tenpy.algorithms.dmrg.SingleSiteMixerMixer for two-site DMRG.
This is the two-site version of the mixer described in [Hubig2015]. Equivalent to the
DensityMatrixMixer, but never construct the full density matrix.Methods
perturb_svd(self, engine, theta, i0, move_right)Mix extra terms to theta and perform an SVD.
subspace_expand(self, engine, theta, i0, …)Expand the MPS subspace, to allow the bond dimension to increase.
update_amplitude(self, sweeps)Update the amplitude, possibly disable the mixer.
-
perturb_svd(self, engine, theta, i0, move_right)[source]¶ Mix extra terms to theta and perform an SVD.
- Parameters
- engine
Engine The DMRG engine calling the mixer.
- theta
Array The optimized wave function, prepared for svd.
- i0int
Site index; theta lives on
i0, i0+1.- update_LPbool
Whether to calculate the next
env.LP[i0+1].- update_RPbool
Whether to calculate the next
env.RP[i0].
- engine
- Returns
- U
Array Left-canonical part of theta. Labels
'(vL.p0)', 'vR'.- S1D ndarray | 2D
Array Without mixer just the singluar values of the array; with mixer it might be a general matrix; see comment above.
- VH
Array Right-canonical part of theta. Labels
'vL', '(vR.p1)'.- err
TruncationError The truncation error introduced.
- U
-
subspace_expand(self, engine, theta, i0, move_right, next_B)¶ Expand the MPS subspace, to allow the bond dimension to increase.
This is the subspace expansion following [Hubig2015].
- Parameters
- engine
SingleSiteDMRGEngine|TwoSiteDMRGEngine ‘Engine’ for the DMRG algorithm
- theta
Array Optimized guess for the ground state of the effective local Hamiltonian.
- i0int
Site index at which the local update has taken place.
- move_rightbool
Whether the next i0 of the sweep will be right or left of the current one.
- next_B
Array The subspace expansion requires to change the tensor on the next site as well. If move_right, it should correspond to
engine.psi.get_B(i0+1, form='B'). If not move_right, it should correspond toengine.psi.get_B(i0-1, form='A').
- engine
- Returns
- theta :
Local MPS tensor at site i0 after subspace expansion.
- next_B :
MPS tensor at site i0+1 or i0-1 (depending on sweep direction) after subspace expansion.
-