Page 1 of 1

Loschmidt Echo

Posted: 15 Sep 2020, 08:51
by Mike
Hi Johannes/everyone,
I am trying to perform some sudden quench simulations in the transverse field 1D Ising model and compute the Loschmidt echo. I am doing everything based on the nice example code "c_tebd.py" that is already provided. The procedure that I pursue is the following:
I first set the initial state of the system to the ground state of TFI chain with no coupling (J=0) by MPS:

Code: Select all

model_params = dict(L=L, bc_MPS='finite', conserve=None, verbose=verbose)
M_0 = TFIChain(model_params)
p_state = ["up"] * M_0.lat.N_sites
psi_0 = MPS.from_product_state(M_0.lat.mps_sites(), p_state, bc=M_0.lat.bc_MPS)
Now, I want to see how the initial state psi_0 evolves under the dynamics of the 1D Ising Hamiltonian with J=1. To generate the model I use

Code: Select all

model_params = dict(L=L, J=1., g=g, bc_MPS='finite', conserve=None, verbose=verbose)
M_1 = TFIChain(model_params)
Then, without changing the 'tebd_params' I set

Code: Select all

eng = tebd.Engine(psi_0, M_1, tebd_params)
l_echo = [abs(eng.psi.overlap(psi_0))/psi_0.norm/eng.psi.norm]
Nstep = int(tmax / dt_measure + 0.5)
for n in range(Nstep):
    eng.run()
    l_echo.append(abs(eng.psi.overlap(psi_0))/psi_0.norm/eng.psi.norm)
But I only get a flat line at 1, which is not what one would expect. So, am I doing anything wrong?
I would appreciate your help.
Best,
Mike

Re: Loschmidt Echo

Posted: 21 Sep 2020, 10:14
by Johannes
Welcome!

The MPS which you pass to the TEBDEngine gets modified in place (because we want to avoid unnecessary copies of MPS in case they are large).
In other words, psi_0 and eng.epsi are the same MPS (namely the time evolved one).

The solution is to make a copy of the MPS at some point, e.g.

Code: Select all

psi_0 = MPS.from_product_state(M_0.lat.mps_sites(), p_state, bc=M_0.lat.bc_MPS)
psi_t = psi_0.copy()
...
eng = tebd.Engine(psi_t, M_1, tebd_params)

Re: Loschmidt Echo

Posted: 21 Sep 2020, 13:21
by Mike
Thanks Johannes!
It indeed worked.