Main /
HowtoFrequencyThe Single-Magnon Line in the Spin-1 Heisenberg ChainThis is a tutorial on using the correction-vector and lanczos-vector programs to calculate a momentum-resolved Green's function {$G(w,k)$}. 1. Constructing the lattice file and groundstateIf you have previously looked at the DMRG Tutorial (yes yes, this is incomplete still), you will know that the first step of any calculation is to obtain a lattice file, that describes the lattice and the Hamiltonian. The isotropic spin-1 chain is globally SU(2) invarant, which we can make use of to accelerate the calculation. The
The parameters we have specified result in the construction of a 60 site lattice, of spin 1. In addition, we have specified that the edge spins (at the open boundaries) are to be spin 1/2 instead, and the edge bonds are to have a different magnitude to the bulk, at JEdge=0.7 (the bulk coupling defaults to 1.0). This generates the file Note: The purpose of the spin 1/2's at the boundaries is to supress some excitations that would otherwise appear below the Haldane gap. The purpose of reducing the coupling constant for the boundary bonds is to smooth out fluctuations induced by the open boundaries. For more details, see for example, White and Huse, Phys. Rev. B. 48, 3844 (1993). We now obtain a groundstate, by the usual procedure TutorialDmrg. 50 SU(2) states is plenty for this model, so in mp-random spin1chain.lattice 0 10 psi mp-dmrg-init -H spin1chain.lattice:H -w psi -c dmrg.conf -o spin1gs mp-dmrg-resume spin1gs mv spin1gs.psi.6 psi We now have our spin chain groundstate, named psi. If everything has worked properly, the energy should be approximately -81.6081633. If the output of Note: we can see the effect of the SU(2) symmetry by looking at the degeneracies of the reduced density matrices. Try 2. K-Dependent OperatorsNext, we need to construct our momentum-space operators. Strictly speaking we could calculate all expectation values in real-space and perform the Fourier transform at the end, however it is much more convenient to examine {$G(w,k)$} directly. Thus, we need the operators {% mylabel, \mathbf{S}(k) = \sum_{x=1}^L e^{ikx} \; \mathbf{S}(x) %} Since we have open boundary conditions, the momentum k of a state is not well defined (i.e. there is no exact reciprocal lattice). So, there are many choices as to precisely which momenta we choose to evaluate. One option is to use the momenta of a periodic system, combined with a window function, the effect of which is to smooth the otherwise sharp rectangular cutoff at the open boundary. For more details of this approach, see Kühner and White, Phys. Rev. B 60, 335 (1999). An alternative option, which we use here, is to choose the k-points at the non-interacting quasimomenta. For a non-interacting system, the single-particle eigenstates are standing waves of definite (absolute) momentum, obtained under the constraint that the wavefunction vanishes at site L+1. Thus, the single particle states can be labelled by a quasimomentum taking values of {$|k|=\frac{n \pi}{L+1}$}, where {$n=1,2,..,L$}. For an interacting system this argument no longer applies. Nevertheless, the quasimomenta should be reasonable choices at which to evaluate the spectral function. There is a tool called
This adds the operators 3. Calculating the Lanczos VectorNext, we want to apply our momentum-space operator to the groundstate to generate {$\mathbf{S}(k) |\psi \rangle$}. This state is traditionally known as the Lanczos vector. This procedure is straightforward. Starting from the wavevector closest to pi:
Notice that this increases the number of states in the wavefunction, to a maximum of just under 150. This is excessive: a look at the density matrices via
(note: To save some typing later, we are going to set an attribute of our state
This sets the GroundstateEnergy attribute of Why did we start with the wavevector closest to {$\pi$}? Easy, this wavevector has by far the largest integrated spectral weight. This can be determined by looking at {$\langle psi|S(k)^2|psi\rangle$}, which is a sum-rule for the integral of the local density of states. This is shown in the following figure: The spectral weight goes to zero for {$k \rightarrow 0$}. This is obvious as {$S(k=0)$} is just the total spin operator itself, and since our groundstate is a singlet, {$S(k=0)|\psi\rangle=0$}. 4. Calculating the Spectral FunctionNow that we have our initial state, we can proceed to calculate {$G(k,w)$}. As a first step, we want a very quick, if not very accurate, spectral function. To do this, we use the continued-fraction (Lanczos) procedure. Firstly, tri-diagonalize the Hamiltonian in the effective DMRG basis.
This calculates the coefficients {$\alpha$} and {$\beta$} of the tridiagonal form, and writes them to the file (Note: to see some more details of what is happening here, you can increase the verbosity of the output: Once we have the tridiagonal form, the spectral function can be calculated either from the continued fraction expansion, or, with more numerical stability, by completely diagonalizing the matrix and expanding the Green's function in the Lehmann representation using this eigenbasis. The
The output here is two columns, the frequency and the corresponding density of states. (Without the --dos option, the output would instead be 3 columns, the frequency, and real and imaginary parts of the Green's function.) To visualize this, rather than staring at a screen full of numbers, we can pipe the output directly into a graphing program (we also increase the number of data points to 1000):
We see immediately that there is a peak in the spectral function at around {$\omega=0.454$}. We can now use the correction vector program to calculate a more precise value of the Green's function at this frequency. We use the sample mp-gmres-init -H spin1chain.lattice:H -w psi-60 -l psi-60 -c gmres.conf -o cv-0.454 -F 0.454 -B 0.05 mp-gmres-resume cv-0.454 As well as giving as an accurate value for the DOS at this frequency, we can use the output correction vector to improve the Lanczos procedure by using this as an additional state in the DMRG basis. mp-tridiag -H spin1chain.lattice:H -w psi-60 -w cv-0.454.psi.5 > psi-60.diag mp-trispectral -m 0 -x 4 --dos -B 0.05 -c 1000 < psi-60.diag | xmgrace -pipe And our spectral function has changed a bit, the main peak has shifted to a slightly lower frequency and the additional smaller peaks have all but dissappeared. Calculating another correction vector at the new peak position, w=0.4245, mp-gmres-init -H spin1chain.lattice:H -w psi-60 -l psi-60 -c gmres.conf -o cv-0.4245 -F 0.4245 -B 0.05 mp-gmres-resume cv-0.4245 gives 2070 as the value of the LDOS at this frequency, and gives another correction vector with which to improve our Lanczos calculation: mp-tridiag -H spin1chain.lattice:H -w psi-60 -w cv-0.454.psi.5 -w cv-0.4245.psi.5 > psi-60.diag mp-trispectral -m 0 -x 4 --dos -B 0.05 -c 1000 < psi-60.diag | xmgrace -pipe Our peak position has not changed; it looks like we have found the correct frequency. To be sure, we could calculate a third correction vector at a lower frequency, say w=0.4, so that both sides of the peak are well represented. In this case however, nothing changes: we already have an accurate spectral function. Our value of the peak position is slightly larger than the Haldane gap {$\Delta_H \simeq 0.4105$}. This is due to the finite size system. To get an accurate result for the thermodynamic limit we would need to calculate the peak position for some larger lattice sizes and extrapolate {$L \rightarrow \infty$}. See figures 5 and 6 of Kühner and White, Phys. Rev. B 60, 335 (1999) for an example of this. TODO: explain the broadening factor, script this to calculate the peak position for other k vectors, show what happens when the spectral function has multiple peaks. An interesting link for spin-1/2 spectral functions: http://arxiv.org/abs/cond-mat/0611467 |