mdopt.optimiser.dephasing_dmrg module#
This module contains the DephasingDMRG and the EffectiveDensityOperator classes.
This algorithm’s main feature is that it restricts the target-state search to the computational basis states domain. In particular, we use it to find the main component of a Matrix Density Product Operator (MDPO), i.e., a computational basis state contributing the largest amplitude.
In our notation, MDPO for n sites denotes the following object:
| | | |
| | | |
----(0*)---(1*)--- ... ---(n-2*)--(n-1*)---
----(0)----(1)---- ... ---(n-2)---(n-1)----
| | | |
| | | |
An MDPO is formed by an MPS and its complex-conjugated version. The main idea is to find the main component of this object without performing the kronecker product explicitly.
- class mdopt.optimiser.dephasing_dmrg.DephasingDMRG(mps: ExplicitMPS | CanonicalMPS, mps_target: ExplicitMPS | CanonicalMPS, chi_max: int = 10000, cut: float = 1e-17, mode: str = 'SA', silent: bool = False, copy: bool = True)#
Class holding the Dephasing Density Matrix Renormalisation Group algorithm with two-site updates for a finite-size system with open-boundary conditions.
- mps#
MPS serving as a current approximation of the target state.
- Type:
Union[ExplicitMPS, CanonicalMPS]
- mps_target#
The target MPS in the right-canonical form. This MPS is used to construct the dephased MDPO.
- Type:
Union[ExplicitMPS, CanonicalMPS]
- chi_max#
The highest bond dimension of an MPS allowed.
- Type:
int
- mode#
- The eigensolver mode. Available options:
LM: Largest (in magnitude) eigenvalues.SM: Smallest (in magnitude) eigenvalues.LA: Largest (algebraic) eigenvalues.SA: Smallest (algebraic) eigenvalues.
- Type:
str
- cut#
The lower boundary of the spectrum, i.e., all the singular values smaller than that will be discarded.
- Type:
float
- silent#
Whether to show/hide the progress bar.
- Type:
bool
- run(num_iter: int = 1) None#
Run the algorithm for num_iter full sweeps.
- sweep() None#
One full Dephasing DMRG sweep (left→right, then right→left).
- update_bond(i: int) None#
Update the bond between sites i and i+1.
- update_left_environment(i: int) None#
Compute left_environment left of site i+1 from left of site i.
- update_right_environment(i: int) None#
Compute right_environment right of site i-1 from right of site i.
- class mdopt.optimiser.dephasing_dmrg.EffectiveDensityOperator(*args, **kwargs)#
Bases:
LinearOperatorClass to store an effective two-site density operator.
To take more advantage of the
scipy.sparse.linalgmodule, we make a special class for local effective density operators extending the analogy from local effective operators. It allows us to compute eigenvectors more effeciently.The diagram displaying the contraction can be found in the supplementary notes.