2.1. Heisenberg chain (finite temperatures)

Here, we study the finite-temperature properties of spin 1/2 Heisenberg model on the chain.

(2.1)\[H = J \sum_{\langle i,j\rangle}{\bf S}_{i}\cdot{\bf S}_{j}\]

The input file (samples/tutorial_2.1/stan1.in) for 12-site Heisenberg model is as follows:

L  = 12
J  = 1
2S = 1
model   = "SpinGC"
method  = "cTPQ"
lattice = "chain"
lanczos_max = 2000
LargeValue  = 50
NumAve      = 10

You can execute HPhi as follows

HPhi -s stan1.in

2.1.1. Full diagonalization

After executing the full diagonalization, all the eigenvalues are output in output/Eiegenvalue.dat. By using the python script (samples/tutorial_2.1/Finite.py), you can obtain the temperature dependence of the energy and the specific heat.

You can execute Finite.py as follows

python3 Finite.py

Then, you can obtain FullDiag.dat as follows

0.000100  -5.3873909174000003    0.0000000000000000
0.000150  -5.3873909174000003    0.0000000000000000
0.000200  -5.3873909174000003    0.0000000000000000
0.000250  -5.3873909174000003    0.0000000000000000
0.000300  -5.3873909174000003    0.0000000000000000

The 1st row represents temperature, 2nd row represents the energy, and the 3rd row represents the specific heat defined by \(C=(\langle E^2 \rangle-\langle E \rangle^2)/T^2\).

2.1.2. Micro-canonical TPQ (mTPQ) method (Sz=0)

By selecting method as “TPQ”, you can perform the finite-temperature calculations using the mTPQ method.

The input file (samples/tutorial_2.1/stan2.in) for 12-site Heisenberg model is as follows:

L       = 12
model   = "Spin"
method  = "TPQ"
lattice = "chain"
J = 1
2Sz = 0
2S  = 1

After performing the TPQ calculations, results are output in output/SS_rand*.dat. By using the python script (samples/tutorial_2.1/AveSSrand.py), you can obtain the temperature dependence of physical quantities such as the energy and the specific heat.

Then, you can obtain ave_TPQ.dat as follows

# temperature T    err of T  Energy E    error of E  specific heat C  err of C
30.17747           0.02022   -0.35489    0.04044     0.00264          8.1126-05
15.10875           0.01016   -0.43500    0.04065     0.01068          0.0003182
10.08598           0.00681   -0.51592    0.04086     0.02423          0.0007030
7.574693           0.00513   -0.59754    0.04106     0.04335          0.0012311
6.067978           0.00412   -0.67978    0.04123     0.06808          0.0019053

Using gnuplot, you can directly compare the two results

plot "FullDiag.dat" u 1:2 w l,"ave_TPQ.dat" u 1:3:4 w e

You can see the following output image.

../_images/finiteT.png

2.1.3. mTPQ method (susceptibility)

By using the mTPQ method, it is also possible to calculate the spin susceptibility by performing the calculations for all Sz sectors.

The input file (samples/tutorial_2.1/stan3.in) for 12-site Heisenberg model is as follows:

L       = 12
model   = "SpinGC"
method  = "TPQ"
lattice = "chain"
J = 1
2S  = 1

Here, note that “model = Spin” is changed to “model = SpinGC” and “Sz = 0” is omitted.

After performing the TPQ calculations, temperature dependence of several physical quantities such as number of particel N and total Sz are output in output/Flct_rand*.dat. By using the python script (samples/tutorial_2.1/AveFlct.py), you can obtain the temperature dependence of physical quantities such as the energy and the spin susceptibility \(\chi\). Note that \(\chi\) is defined as

(2.2)\[\begin{split}&\chi = \frac{\langle m_z^2\rangle-\langle m_z\rangle^2}{T} \\ &m_z = \sum_{i} S_{i}^{z}.\end{split}\]

Then, you can obtain ave_Flct.dat as follows

# temperature T    err of T  m_z         error of m_z susceptibility chi  err of chi
13.5876            0.00695   -0.00688    0.00955      0.21243             0.00184
6.83615            0.00373   -0.00783    0.01067      0.40632             0.00414
4.58603            0.00278   -0.00894    0.01251      0.58234             0.00694
3.46113            0.00239   -0.01023    0.01474      0.74129             0.01021
2.78624            0.00220   -0.01171    0.01713      0.88407             0.01383

Using gnuplot, you can see the temperature dependence of \(\chi\)

se log x
se colors classic
se xlabel "T/J"
se ylabel "chi"
plot    "ave_Flct.dat"   u 1:5:6 w e lc rgb "#FFBBBB" ps 1 pt 6,\
        "ave_Flct.dat"   u 1:5 w lp lt 1 ps 1 pt 6

You can see the following output image.

../_images/chi.png

2.1.4. Canonical TPQ (cTPQ) method (Advanced)

In the cTPQ method, we generate the kth TPQ state as

(2.3)\[\begin{split}&\ket{\Phi_{\rm cTPQ}(\beta_{k})}=[U_{\rm c}(\Delta \tau)]^{k}\ket{\Phi_{\rm rand}},\\ &U_{\rm c}(\Delta \tau) \equiv \exp[-\frac{\Delta\tau}{2}\hat{H}]\sim\sum_{n=0}^{n_{\rm max}}\frac{1}{n!}(-\frac{\Delta\tau}{2}\hat{H})^{n},\\ &\beta_{k}=k\Delta\tau,\end{split}\]

where \(n_{\rm max}\) represents the order of the Taylor expansion and \(\Delta\tau\) represents increment of the imaginary-time evolution. An advantage of the cTPQ method is the inverse temperatures do not depend on the initial states \(\ket{\Phi_{\rm rand}}\). Because of this feature, it is possible to estimate the errors originating from fluctuations of the initial states without ambiguity using the bootstarp method.

A input file (samples/tutorial_2.1/stan4.in) for 12-site Heisenberg model is as follows:

L  = 12
J  = 1
2S = 1
model   = "SpinGC"
method  = "cTPQ"
lattice = "chain"
lanczos_max = 2000
LargeValue  = 50
NumAve      = 10

The increment of the imaginary-time evolution \(\Delta\tau\) is given by \(\Delta\tau=1/{\rm LargeValue }=1/50=0.02\). The default value of \(n_{\rm max}=10\) is used in this calculation. Please note that this cTPQ calculation takes 2-3 minutes.

After the calculation, by executing sh Aft_cTPQ.sh, you can estimate the average values and errors by using the bootstrap method. In this example, we choose 10 samples from 10 samples with allowing duplications for 5 times in the bootstrap sampling. In BS_MaxBS5.dat, the following physical quantities are output:

T E E_err C C_err S S_err Sz Sz_err chi_Sz chi_Sz_err Z  Z_err k

where

  1. T : temperature (\(T=1/\beta=1/(k\Delta\tau)\)),

  2. E : average value of energy,

  3. E_err : error of energy,

  4. C : average value of specific heat,

  5. C_err : error of specific heat,

  6. S : average value of entropy,

  7. S_err : error of entropy,

  8. Sz : average value of Sz,

  9. Sz_err : error of Sz,

  10. chi_Sz : average value of chi_Sz,

  11. chi_Sz_err : error of chi_Sz,

  12. Z : average value of norm the wave function,

  13. Z_err : error of norm of the wave function, and

  14. k : number of the cTPQ state.

For example, you can see the temperature dependence of the specific heat as:

se log x
se colors classic
se xlabel "T/J"
se ylabel "C"
plot    "BS_MaxBS5.dat"  u 1:4:5 w e lt 1 ps 1 pt 6

We note that Ext_BS_MaxBS5.dat is a file with several temperatures omitted from BS_MaxBS5.dat for clarity. To see overall temperature dependence, it is better to plot Ext_BS_MaxBS5.dat.

More advanced exercise: By increasing NumAve (e.g. NumAve=100), please examine how the error bars of the physical quantities decrease.