I didn't come here to tell you how this is going to end. I came here to tell you how it's going to begin.

HOWTO /
## IDMRGIntroductionIn this tutorial, we will use infinite-size DMRG to obtain the ground-state energy of the spin-1/2 Heisenberg model, and some properties such as the correlation length. Firstly, we need to obtain a lattice file for our system. There are predefined models for spin chains with {$SU(2)$}, {$U(1)$}, {$Z_2$} or no symmetry, which are named To construct the lattice file: spinchain -o lattice We have used the default value of the spin (0.5), otherwise we could set it explicitly, for example a spin-3/2 chain we can add the option -S 1.5. To obtain the groundstate wavefunction: We use the
The first time we run the program, we need to specify that we want to create a new wavefunction ( We also need to specify the number of states, and the number of sweeps. For our first calculation we are going to use m=50 states, and 200 sweeps should be enough for convergence. mp-idmrg-s3e -w psi -H lattice:H_J1 -m 50x200 --create -u 2 This should only take a few seconds to run. At the end of the calculation, the wavefunction is explicitly orthogonalized to be translationally invariant, before it is saved to disk. For any wavefunction, we can obtain some general information about it using the In order to verify that the calculation has converged, we could run this command again. Since we want to start from the existing groundstate, we must remember to remove the mp-idmrg-s3e -w psi -m 50x200 The resulting energy is the energy NOTE: The energy that is displayed on the screen while mp-idmrg-s3e is running isn't a true variational energy -- it represents a local energy of a wavefunction that isn't perfectly translationally invariant. So it that might be lower than the groundstate energy, but typically it is a bit higher. To get the true variational energy use the mp-imoments psi You can use this tool to calculate the expectation value of any triangular MPO -- by default it will evalute the expectation value of the Hamiltonian attribute of the wavefunction, but you can calculate some other expectation value by using The output of It is often convenient to scale the energy in a different way to the wavefunction unit cell. Since the Hamiltonian is translationally invariant under a single site shift, typically energies of the Heisenberg model are reported as an energy per site, rather than per 2-site unit cell. If we want to display the output of mp-imoments -u 1 psi displays the energy per site. We can also calculate the variance per unit cell, from the expectation value of {$\langle H^2 \rangle$}. To do this, we add mp-imoments psi --power 2 The expectation value {$\langle H^2 \rangle = E_0^2 L^2 + \sigma^2 L$}, where {$E_0$} is the energy per unit cell, and {$\sigma^2$} is the variance per unit cell. So the variance is given by the degree 1 part of the 2nd moment, which should be around 1E-5 in this example. ## ObservablesThe main tool for calculating observables is mp-expectation psi lattice:"Sz(0) * Sz(1)" For obtaining correlation functions, there is a short-cut tool For infinite systems, transfer matrix methods can be much more powerful than looking at real-space correlations. The basic tool for examining the transfer matrix is mp-ispectrum psi By default, Note that for an MPS, the correlation length is ## Using symmetriesIf the Hamiltonian has global symmetries such as particle number conservation, or spin rotational invariance, it is generally advantageous to use these symmetries in the calculation. Preserving a symmetry enforces a block structure into the MPS, which gives a useful speedup, which in some cases can be many orders of magnitude. It also enforces that the obtained groundstates exactly preserve the symmetry. This is more important for iMPS than for finite MPS, since variationally an iMPS will tend to break global symmetries in order to obtain a lower variational energy, even if they are symmetries that would not be broken in the exact groundstate. We can demonstrate that the wavefunction we obtained above breaks various symmetries by calculating observables and other properties.
It breaks translational invariance and spin rotation symmetry because the expectation value of {$Sz$} is not zero. eg, mp-expectation psi lattice:"Sz(0)" mp-expectation psi lattice:"Sz(1)" mp-expectation psi lattice:"Sp(0)" The expectation value of {$S^+$} should always be zero for a state that preserves the z-component of spin, but here we see that the value is relatively big.
The total Sz operator {$\sum_i S^z(i)$} is also non-zero, although it is small it is much bigger than a rounding error. Since the wavefunction is translationally invariant under a 2-site shift you can calculate the total Sz per unit cell as mp-imoments psi lattice:"sum_unit(Sz(0))" The ## {$U(1)$} symmetryWe can construct a wavefunction that preserves the z-component of spin by using the spinchain-u1 -o lattice-u1 mp-idmrg-s3e -w psi-u1 -H lattice-u1:H_J1 -m 50x200 --create -u 2 -q 0 We used a different name for the lattice and wavefunction, to avoid overwriting the files we constructed previously. We used a lattice constructed from You will notice that this command runs even faster than the previous calculation that didn't use symmetry. This is because the MPS matrices now have a block structure, so the cost of operations on the matrices is reduced. This effect is more noticeable on larger scale calculations with more states kept. If we calculate the total Sz operator for this state, we should see that it is now numerically zero, meaning it is smaller than about {$10^{-16}$}, which is smaller than the number of digits available in a double-precision floating point variable. Because we are using U(1) symmetry, the expectation value of a raising or lowering operator such as {$ [Sz, O] = nO$} where {$n$} is a (half) integer, which is the label of the group representation. So {$n=0$} for the Sz operator, {$n=+1$} for the Sp operator, {$n=-1$} for the Sm operator, and so on. The Sx and Sy operators are not irreducible, so any expectation value using these operators needs to be re-expressed in terms of Sp, Sm, Sz before we can evaluate it. If you use ## {$SU(2)$} symmetryWe can construct a wavefunction for the spin-1/2 Heisenberg model that explicitly preserves {$SU(2)$} symmetry using the commands spinchain-su2 -o lattice-su2 mp-idmrg-s3e -w psi-su2 -H lattice-su2:H_J1 -m 50x200 --create -u 2 -q 0 You should find that this takes approximately the same amount of time to run as it did for the {$U(1)$} symmetric code. Why is this? The group {$SU(2)$} is much bigger than {$U(1)$}, so we might expect that the efficiency should increase a lot, corresponding to the larger symmetry group. Well, if we compare the resulting energy, we notice that using {$SU(2)$} it is quite a bit better. Your exact numbers will vary, but typically with m=50 the {$SU(2)$} calculation will give an energy per site of around -0.4431468, compared with -0.4431419 using {$U(1)$}. The reason for this is that {$SU(2)$} is a mp-info psi-su2 -d -p 0 The important column is the 3rd column, Calculating expectation values using {$SU(2)$} symmetry is more difficult, because we need to construct rotational invariant forms, and the algebra of {$SU(2)$} invariant operators is unfamiliar. The only local operator we have (apart from the identity) is the spin vector operator mp-expectation psi-su2 lattice-su2:"inner(S(0), S(1))" is the nearest-neighbor spin correlation function. ## Advanced techniquesIf we really want to push to get a well-converged wavefunction, we would do this several more times, and also decrease the density matrix mixing factor each time. The mp-idmrg-s3e -w psi -H lattice:H_J1 -m 50x200 --mix-factor 1e-5 mp-idmrg-s3e -w psi -H lattice:H_J1 -m 50x200 --mix-factor 1e-7 mp-idmrg-s3e -w psi -H lattice:H_J1 -m 50x200 --mix-factor 0 |

Page last modified on September 27, 2022, at 04:36 AM