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
From \(|\psi_{k}\rangle\), we estimate the corresponding inverse temperature \(\beta_{k}\) as
where \(u_{k}\) is the internal energy. The arbitrary local physical properties at \(\beta_{k}\) are also estimated as
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
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. |