4.3. Finite Temperature Calculations for the Transverse Field Ising Model¶
In this section, we present a calculation example of the ferromagnetic Ising model on a square lattice subjected to a transverse magnetic field, denoted by hx
, at finite temperatures.
The Hamiltonian is
Please note that the model is defined using spin operators of size 1/2, not Pauli operators.
The input and script files used in this tutorial are located in the sample/03_finite_temperature
directory. Below is a sample input file (simple_ft_strong.toml
):
[parameter]
[parameter.general]
mode = "finite"
is_real = false
output = "output_ft_strong"
measure_interval = [10, 10, 5]
[parameter.simple_update]
num_step = [50, 200, 10]
tau = [0.01, 0.005, 0.05]
[parameter.full_update]
num_step = 0
tau = 0.0
[parameter.ctm]
iteration_max = 10
dimension = 10
[lattice]
type = "square lattice"
L = 2
W = 2
virtual_dim = 3
[model]
type = "spin"
Jz = -1.0
Jx = 0.0
Jy = 0.0
hx = 2.0
To perform finite temperature calculations, set the mode
to finite
.
Here, the transverse magnetic field is set to hx = 2.0
with tau = 0.01
(the inverse temperature step size is 2 times tau
).
Once preparing an input file of the simple mode, execute tenes_simple
, tenes_std
, and tenes
in the same way as for the ground state calculation.
The results of the finite temperature calculations are output to the output_ft_strong
directory.
Basically, the output is the same as the ground state calculation, but the inverse temperature is added to the first column.
For example, FT_density.dat
is as follows:
# The meaning of each column is the following:
# $1: inverse temperature
# $2: observable ID
# $3: real
# $4: imag
# The meaning of observable IDs are the following:
# 0: Energy
# 1: Sz
# 2: Sx
# 3: Sy
# 4: bond_hamiltonian
# 5: SzSz
# 6: SxSx
# 7: SySy
0.00000000000000000e+00 0 0.00000000000000000e+00 0.00000000000000000e+00
0.00000000000000000e+00 1 0.00000000000000000e+00 0.00000000000000000e+00
0.00000000000000000e+00 2 0.00000000000000000e+00 0.00000000000000000e+00
0.00000000000000000e+00 3 0.00000000000000000e+00 0.00000000000000000e+00
0.00000000000000000e+00 4 0.00000000000000000e+00 0.00000000000000000e+00
0.00000000000000000e+00 5 0.00000000000000000e+00 0.00000000000000000e+00
0.00000000000000000e+00 6 0.00000000000000000e+00 0.00000000000000000e+00
0.00000000000000000e+00 7 0.00000000000000000e+00 0.00000000000000000e+00
... continued ...
The second column indicates the type of physical quantity, and for example, 0 represents energy.
Thus, you can extract the temperature dependence by extracting only the energy with awk
:
awk '$2 == 0 {print $1, $3, $4}' output_ft_strong/FT_density.dat > energy_strong.dat
To observe the behavior at different transverse magnetic fields, we’ve provided additional sample input files: simple_ft_middle.toml
(hx = 0.8
), simple_te_weak.toml
(hx = 0.5
), and simple_ft_zero.toml
(hx = 0.0
).
Moreover, a script named run.sh
has been set up to execute all these calculations simultaneously.
Ensure you’ve added tools like tenes
to your PATH, then initiate the calculations with:
sh run.sh
The computation should complete in about a minute.
Since specific heat is difficult to calculate directly, it is calculated from the energy by numerical differentiation.
calcspec.py
is a script to calculate specific heat from the energy by using the spline interpolation:
python3 calcspec.py
To visualize the results, scripts have been prepared to plot energy, heat capacity, and magnetization (\(S_x\), \(S_z\)): plot_e.plt
, plot_c.plt
, plot_mx.plt
, and plot_mz.plt
.
Running the following:
gnuplot -persist plot_e.plt
gnuplot -persist plot_c.plt
gnuplot -persist plot_mx.plt
gnuplot -persist plot_mz.plt
will display plots for energy, heat capacity, and magnetizations (\(m_x\) and \(m_z\)). The resulting plots are illustrated in Fig. 4.4. For comparison, results obtained using Quantum Monte Carlo calculations are also shown (using ALPS/looper
).