IDMRG /
OverviewAn infinite MPS (iMPS) is described by a set of {$L$} A-matrices, {% A^{s_1} A^{s_2} \ldots A^{s_L} \; . %} {$L$} is the unit cell size of the iMPS. These matrices describe a translationally invariant infinite system, where the unit cell is repeated on both the left and right. It is important to distinguish the unit cell size of the wavefunction versus the unit cell size of the Hamiltonian. The unit cell size of the wavefunction is an integer multiple of the Hamiltonian unit cell. Generally, we want to choose a wavefunction unit cell that is as small as possible, but it is sometimes not possible to have the wavefunction as just a single Hamiltonian unit cell. This is because the wavefunction may break translation symmetry in a larger unit cell than the Hamiltonian. An example is the spin-1/2 Heisenberg chain, where the usual form of the Hamiltonian is such that the groundstate has momentum {$\pi$}, and hence is only translationally invariant under 2-site shifts, although the Hamiltonian itself is invariant under a 1-site translation. Lattice sites and operatorsBy convention, sites within the unit cell are denoted with square brackets. For example
the Tip: if the unit cell size is 1 site, then the The toolkit uses several different types of operators. Many kinds of operator expressions are allowed, for details see Main.OperatorExpressions.
Local operators are defined on a single site of a lattice. These are rarely used on their own, rather they are building blocks of other operators. The local operators are defined in the Most commonly, we will refer to a local operator acting on a specific site and unit cell, as, for example,
These operators act on a finite support. For example, the operator To calculate expectation values of finite operators, use
This command will calculate a string correlation function between unit cells 0 and 2. Since there is no cell index specified, it is assumed that the unit cell is only 1 site. Finite operators can be defined in the lattice file too. In this case, the operator is always attached to the unit cell. In the the C++ code this is denoted using a UnitCell Cell(MyLatticeSite); UnitCellOperator Sz(Cell, "Sz"); UnitCellOperator U(Cell, "U"); U = exp(complex_i * pi * Sz(0)); In this example,
Note that a UnitCellOperator can have arbitrary finite support. So we could, for example, define UnitCellOperator B(Cell, "B"); UnitCellOperator BH(Cell, "BH"); UnitCellOperator BondCurrent(Cell, "BondCurrent"); BondCurrent = complex_i * (BH(0)*B(1) - B(0)*BH(1)); and then Because of wavefunction translational invariance, the cell number is only meaningful modulo the wavefunction unit cell size. So if the wavefunction has the same unit cell size as the lattice itself, then the cell index is irrelevant;
So-called triangular operators have infinite support, and represent the sum of terms acting on all unit cells. They can also represent arbitrary polynomials of these operators. The name 'triangular operator' arises because the Matrix Product Operator representation of these operators is of the form of an upper-triangular matrix. The simplest triangular operator is the sum of some local term. The basic way of constructing a triangular operator (in either C++ or the expression parser) is with the For example,
Triangular operators can be added to a C++ Lattice object directly, for example
and the command-line parser also allows many kinds of expressions on triangular operators. The basic tool for calculating expectation values of triangular operators is
will calculate the energy of a Heisenberg Hamiltonian for the wavefunction Expectation values of triangular operators are defined per unit cell. So for example, we have the energy per unit cell, or the magnetization per unit cell. More generally, products of triangular operators have expectation values that are polynomial functions per unit cell. For example, if we add the Tip: calculating the expectation value of H^2 in this way is very useful as the variance is an excellent measure of the convergence of the wavefunction.
The final type of operator that is used in the toolkit denotes an infinite product of operators. These operators are typically used for string correlation functions, or Jordan-Wigner strings, or evolution operators, for example from the Suzuki-Trotter decomposition of exp(H). Analogously to Product operators are used in several contexts. To calculate the expectation value of a product operator, use the |