I'm trying to free your mind, Neo. But I can only show you the door. You're the one that has to walk through it.

IDMRG /
## OverviewAn {$L$} is the It is important to distinguish the unit cell size of the ## 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
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, - Finite operators
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; - Triangular operators
So-called 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. - Product operators
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 |

Page last modified on October 06, 2015, at 07:00 AM