# dmrg¶

Classes

 DMRGEngine(psi, model, options) DMRG base class.’Engine’ for the DMRG algorithm. DensityMatrixMixer(options) Mixer based on density matrices. 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. Mixer(options) Base class of a general Mixer. SingleSiteDMRGEngine(psi, model, options) ‘Engine’ for the single-site DMRG algorithm. SingleSiteMixer(options) Mixer for single-site DMRG. TwoSiteDMRGEngine(psi, model, options) ‘Engine’ for the two-site DMRG algorithm. TwoSiteMixer(options) Mixer for two-site DMRG.

Functions

 chi_list(chi_max[, dchi, nsweeps]) Compute a ‘ramping-up’ chi_list. full_diag_effH(effH, theta_guess[, keep_sector]) Perform an exact diagonalization of effH. run(psi, model, options) 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: SingleSiteDMRGEngine 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, SingleSiteDMRGEngine 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 SingleSiteDMRGEngine, using a mixer is crucial, as the one-site algorithm cannot increase the MPS bond dimension by itself.

Todo

Write UserGuide!!!