SingleSiteMixer¶
full name: tenpy.algorithms.dmrg.SingleSiteMixer
parent module:
tenpy.algorithms.dmrg
type: class
Inheritance Diagram
Methods
|
Initialize self. |
|
Mix extra terms to theta and perform an SVD. |
|
Expand the MPS subspace, to allow the bond dimension to increase. |
|
Update the amplitude, possibly disable the mixer. |
-
class
tenpy.algorithms.dmrg.
SingleSiteMixer
(options)[source]¶ Bases:
tenpy.algorithms.dmrg.Mixer
Mixer for single-site DMRG.
Performs a subspace expansion following [hubig2015].
-
perturb_svd
(engine, theta, i0, move_right, next_B)[source]¶ Mix extra terms to theta and perform an SVD.
We calculate the left and right reduced density matrix using the mixer (which might include applications of H). These density matrices are diagonalized and truncated such that we effectively perform a svd for the case
mixer.amplitude=0
.- Parameters
engine (
DMRGEngine
) – The DMRG engine calling the mixer.theta (
Array
) – The optimized wave function, prepared for svd.i0 (int) – The site index where theta lives.
move_right (bool) – Whether we move to the right (
True
) or left (False
).next_B (
Array
) – The subspace expansion requires to change the tensor on the next site as well. If move_right, it should correspond toengine.psi.get_B(i0+1, form='B')
. If not move_right, it should correspond toengine.psi.get_B(i0-1, form='A')
.
- Returns
U (
Array
) – Left-canonical part of tensordot(theta, next_B). Labels'(vL.p0)', 'vR'
.S (1D ndarray) – (Perturbed) singular values on the new bond (between theta and next_B).
VH (
Array
) – Right-canonical part of tensordot(theta, next_B). Labels'vL', '(p1.vR)'
.err (
TruncationError
) – The truncation error introduced.
-
subspace_expand
(engine, theta, i0, move_right, next_B)[source]¶ Expand the MPS subspace, to allow the bond dimension to increase.
This is the subspace expansion following [hubig2015].
- Parameters
engine (
DMRGEngine
) – The DMRG engine calling the mixer.theta (
Array
) – Optimized guess for the ground state of the effective local Hamiltonian.i0 (int) – Site index at which the local update has taken place.
move_right (bool) – 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 toengine.psi.get_B(i0+1, form='B')
. If not move_right, it should correspond toengine.psi.get_B(i0-1, form='A')
.
- 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.
-