Mixer based on density matrices.


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[, n])

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 Sweep. 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: OneSiteDMRGEngine and TwoSiteDMRGEngine. They differ (as their name implies) in the number of sites which are optimized simultaneously. They should both give the same results (up to rounding errors). However, if started from a product state, OneSiteDMRGEngine depends critically on the use of a Mixer, while TwoSiteDMRGEngine is in principle more computationally expensive to run and has occasionally displayed some convergence issues.. Which one is preffered in the end is not obvious a priori and might depend on the used model. Just try both of them.

A Mixer should be used initially to avoid that the algorithm gets stuck in local energy minima, and then slowly turned off in the end. For OneSiteDMRGEngine, using a mixer is crucial, as the one-site algorithm cannot increase the MPS bond dimension by itself.


Write UserGuide/Example!!!