5.3. Finite-temperature calculations by the TPQ method

Sugiura and Shimizu showed that it is possible to calculate the finite-temperature properties from a few wavefunctions (in the thermodynamic limit, only one wave function is necessary) [1] . The wavefunction is called the thermal pure quantum (TPQ) state. Because the TPQ state can be generated by operating the Hamiltonian to the random initial wavefunction, we directly use the routine Lanczos method for the TPQ calculations. Here, we explain how to construct the micro canonical TPQ (mTPQ) state, which offers the simplest method for calculating finite-temperature properties.

Let \(|\psi_{0}\rangle\) be a random initial vector. By operating \((l-\hat{\mathcal H }/N_{s})^{k}\)(\(l\) is constant and \(N_{s}\) represents the number of sites) to \(|\psi_{0}\rangle\), we obtain the \(k\)th TPQ states as

\[|\psi_{k}\rangle \equiv \frac{(l-\hat{\mathcal H }/N_{s})|\psi_{k-1}\rangle}{|(l-\hat{\mathcal H }/N_{s})|\psi_{k-1}\rangle|}.\]

From \(|\psi_{k}\rangle\), we estimate the corresponding inverse temperature \(\beta_{k}\) as

\[\beta_{k}\sim \frac{2k/N_{s}}{l-u_{k}}, u_{k} = \langle \psi_{k}|\hat{\mathcal H }|\psi_{k}\rangle/N_{s},\]

where \(u_{k}\) is the internal energy. The arbitrary local physical properties at \(\beta_{k}\) are also estimated as

\[\langle \hat{A}\rangle_{\beta_{k}} = \langle \psi_{k}|\hat{A}|\psi_{k}\rangle/N_{s}.\]

In a finite-size system, error is caused by the choice of the initial random vector. To estimate the average value and error of the physical properties, we perform some independent calculations by changing \(|\psi_{0}\rangle\).

5.3.1. Details of implementation

Initial vector

For the TPQ method, the initial vector is given by using a random generator, i.e., the coefficients of all the components for the initial vector are given by random numbers. The seed is calculated as

\[123432+(n_{\rm run}+1)\times |r_s|+k_{\rm Thread}+N_{\rm Thread} \times k_{\rm Process},\]

where \(r_s\) is the number given by an input file and \(n_{\rm run}\) is the number of runs. \(r_s\) and the maximum value of \(n_{\rm run}\) are defined by initial_iv and NumAve in an input file for Standard mode or a ModPara file for Expert mode, respectively. Random numbers are generated by using SIMD-oriented Fast Mersenne Twister (dSFMT) [2] . We can select the type of initial vector as a real number or complex number by using InitialVecType in a ModPara file. \(k_{\rm Thread}, N_{\rm Thread}, and k_{\rm Process}\) indicate the thread ID, number of threads, process ID, respectively; the initial vector depends both on initial_iv and the number of parallelisms.

[1]S. Sugiura, A. Shimizu, Phys. Rev. Lett. 108, 240401 (2012).
[2]http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/SFMT.