4.2. Real-Time Evolution of the Transverse Field Ising Model

Here, we introduce a calculation example for the real-time evolution of the Ising model on a square lattice when a transverse magnetic field, denoted by hx, is applied. The Hamiltonian is

\[\begin{aligned} H = J^z \sum_{\langle i,j \rangle} {S}_i^{z} {S}_j^{z} - h^x \sum_i S_i^x. \end{aligned}\]

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 can be found in sample/02_time_evolution.

Initially, we compute the ground state (refer to the simple.toml file) which serves as our starting state. Specifically, it’s set as:

[parameter]
[parameter.general]
output = "output"
tensor_save = "save_tensor"

[parameter.simple_update]
num_step = 10
tau = 0.01

[parameter.full_update]
num_step = 0
tau = 0.0

[parameter.ctm]
meanfield_env = true
iteration_max = 10
dimension = 10

[lattice]
type = "square lattice"
L = 2
W = 2
virtual_dim = 3
initial = "ferro"

[model]
type = "spin"
Jz = -1.0
Jx = 0.0
Jy = 0.0
hx = 0.0

Given that Jz = -1.0, the ground state becomes ferromagnetic. We use the ground state as the initial state, and save the state tensor with tensor_save = "save_tensor".

Next, we prepare the input file for the real-time evolution. This can be achieved by setting the mode to time. Below is a sample input file (simple_te_strong.toml):

[parameter]
[parameter.general]
output = "output_te_strong"
tensor_load = "save_tensor"
mode = "time"

[parameter.simple_update]
num_step = 500
tau = 0.01

[parameter.full_update]
num_step = 0
tau = 0.0

[parameter.ctm]
meanfield_env = true
iteration_max = 10
dimension = 10

[lattice]
type = "square lattice"
L = 2
W = 2
virtual_dim = 3
initial = "ferro"

[model]
type = "spin"
Jz = -1.0
Jx = 0.0
Jy = 0.0
hx = 2.0

In this case, the transverse field is set to hx = 2.0, and the time-step for evolution is tau = 0.01. Moreover, since we are utilizing the ground state as our initial condition, we load the state tensor with tensor_load = "save_tensor".

Once preparing the input file, we execute tenes_simple, tenes_std, and tenes in order. The results are saved in the output_te_strong directory. Basically, the output is the same as the ground state, but with the addition of time in the first column. For example, FT_density.dat records the expectation values of physical quantities over time:

# The meaning of each column is the following:
# $1: time
# $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 -5.00184764052080899e-01  0.00000000000000000e+00
0.00000000000000000e+00 1  4.99999945646528332e-01  0.00000000000000000e+00
0.00000000000000000e+00 2  9.24306486797199186e-05  0.00000000000000000e+00
0.00000000000000000e+00 3  2.34088935337348195e-06  0.00000000000000000e+00
0.00000000000000000e+00 4 -5.00184764052080899e-01  3.47535331983321418e-21
0.00000000000000000e+00 5  4.99999902788251294e-01 -8.46256269499545126e-22
0.00000000000000000e+00 6  1.12653588020163689e-05  6.35907290717320676e-22
0.00000000000000000e+00 7 -1.12840199341671039e-05 -2.06527532941704114e-21

The second column represents the type of physical quantity, and in this case, 1 represents the longitudinal magnetization \(m^z = \langle S^z \rangle\). We can extract the time evolution of the magnetization by extracting rows with the second column equal to 1:

awk '$2 == 1 {print $1, $3, $4}' output_te_strong/TE_density.dat > magnetization_strong.dat

For observing the time evolution with different transverse magnetic fields, we’ve also prepared sample input files named simple_te_middle.toml (hx = 0.8) and simple_te_weak.toml (hx = 0.5). Additionally, there’s a script named run.sh to execute these calculations in one go. Ensure that paths to tools like tenes are set correctly, and then execute the calculations with:

sh run.sh

The computation will conclude in several seconds. Once done, launch gnuplot and enter:

load 'plot.plt'

This will plot the temporal evolution of magnetization, \(S_z\). The result is displayed in Fig. 4.2.

../_images/tutorial_07_timeevolution.png

Fig. 4.2 Graph illustrating the real-time evolution of the Ising model. The vertical axis represents magnetization, and the horizontal axis represents time.

When the strength of the transverse-field exceeds the quantum phase transition point, the magnetization oscillates beyond 0 [DQPT].

As time evolution progresses, the entanglement increases. At a certain point, the tensor network’s capacity may be insufficient to express the wave function. In our case, the jump at t=4.25 for hx=2.0 indicates this issue. When applying this in practice, ensure no such discontinuities exist. If jumps are observed, steps like increasing the virtual_dimension might be necessary. For instance, adjusting it to virtual_dimension = 10 and redoing the calculation as described above will eliminate the discontinuity, as can be seen in Fig. 4.3.

../_images/tutorial_07_timeevolution_D10.png

Fig. 4.3 Graph showcasing the real-time evolution of the Ising model. The vertical axis denotes magnetization, while the horizontal axis represents time. Results when virtual_dimension = 10 are applied.

Reference

[DQPT] M. Heyl, A. polkovnikov, and S. Kehrein, Dynamical Quantum Phase Transitions in the Transverse-Field Ising Model, Phys. Rev. Lett. 110, 135704 (2013). link