TwoSiteMixer¶
full name: tenpy.algorithms.dmrg.TwoSiteMixer
parent module:
tenpy.algorithms.dmrg
type: class
-
class
tenpy.algorithms.dmrg.
TwoSiteMixer
(mixer_params)[source]¶ Bases:
tenpy.algorithms.dmrg.SingleSiteMixer
Mixer 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.
-