Mixer based on density matrices.

Engine(psi, model, DMRG_params)

Prototype for an DMRG ‘Engine’.

EngineCombine(psi, model, DMRG_params)

Engine which combines legs into pipes as far as possible.

EngineFracture(psi, model, DMRG_params)

Engine which keeps the legs separate.


Base class of a general Mixer.


Mixer for single-site DMRG.


Mixer for two-site DMRG.


chi_list(chi_max[, dchi, nsweeps])

Compute a ‘ramping-up’ chi_list.

run(psi, model, DMRG_params)

Run the DMRG algorithm to find the ground state of the given model.

Module description

Density Matrix Renormalization Group (DMRG).

Although it was originally not formulated with tensor networks, the DMRG algorithm (invented by Steven White in 1992 [White1992]) opened the whole field with its enormous success in finding ground states in 1D.

We implement DMRG in the modern formulation of matrix product states [Schollwoeck2011], both for finite systems ('finite' or 'segment' boundary conditions) and in the thermodynamic limit ('infinite' b.c.).

The function run() - well - runs one DMRG simulation. Internally, it generates an instance of an Engine. This class implements the common functionality like defining a sweep, but leaves the details of the contractions to be performed to the derived classes.

Currently, there are two derived classes implementing the contractions. They should both give the same results (up to rounding errors). Which one is in the end faster is not obvious a priory and might depend on the used model. Just try both of them.

Currently, there is only one Mixer implemented. The mixer should be used initially to avoid that the algorithm gets stuck in local energy minima, and then slowly turned off in the end.


Write UserGuide/Example!!!


separate effective Hamiltonian from Engine for better readability?