def example_TEBD_tf_ising_lightcone(L, g, tmax, dt): print("finite TEBD, real time evolution, transverse field Ising") print("L={L:d}, g={g:.2f}, tmax={tmax:.2f}, dt={dt:.3f}".format(L=L, g=g, tmax=tmax, dt=dt)) # find ground state with TEBD or DMRG # E, psi, M = example_TEBD_gs_tf_ising_finite(L, g) from d_dmrg import example_DMRG_tf_ising_finite E, psi, M = example_DMRG_tf_ising_finite(L, g) i0 = L // 2 # apply sigmaz on site i0 SzB = np.tensordot(M.sigmaz, psi.Bs[i0], axes=[1, 1]) # i [i*], vL [i] vR psi.Bs[i0] = np.transpose(SzB, [1, 0, 2]) # vL i vR U_bonds = calc_U_bonds(M.H_bonds, 1.j * dt) # (imaginary dt -> realtime evolution) S = [psi.entanglement_entropy()] Nsteps = int(tmax / dt + 0.5) for n in range(Nsteps): if abs((n * dt + 0.1) % 0.2 - 0.1) < 1.e-10: print("t = {t:.2f}, chi =".format(t=n * dt), psi.get_chi()) run_TEBD(psi, U_bonds, 1, chi_max=50, eps=1.e-10) S.append(psi.entanglement_entropy()) import matplotlib.pyplot as plt plt.figure() plt.imshow(S[::-1], vmin=0., aspect='auto', interpolation='nearest', extent=(0, L - 1., -0.5 * dt, (Nsteps + 0.5) * dt)) plt.xlabel('site $i$') plt.ylabel('time $t/J$') plt.ylim(0., tmax) plt.colorbar().set_label('entropy $S$') filename = 'c_tebd_lightcone_{g:.2f}.pdf'.format(g=g) plt.savefig(filename) print("saved " + filename)
def example_TEBD_tf_ising_lightcone(L, g, tmax, dt, verbose=True): print("finite TEBD, real time evolution") print("L={L:d}, g={g:.2f}, tmax={tmax:.2f}, dt={dt:.3f}".format(L=L, g=g, tmax=tmax, dt=dt)) # find ground state with TEBD or DMRG # E, psi, M = example_TEBD_gs_tf_ising_finite(L, g) from d_dmrg import example_DMRG_tf_ising_finite print("(run DMRG to get the groundstate)") E, psi, M = example_DMRG_tf_ising_finite(L, g, verbose=False) print("(DMRG finished)") i0 = L // 2 # apply sigmaz on site i0 psi.apply_local_op(i0, 'Sigmaz', unitary=True) dt_measure = 0.05 # tebd.Engine makes 'N_steps' steps of `dt` at once; for second order this is more efficient. tebd_params = { 'order': 2, 'dt': dt, 'N_steps': int(dt_measure // dt), 'trunc_params': { 'chi_max': 50, 'svd_min': 1.e-10, 'trunc_cut': None }, 'verbose': verbose, } eng = tebd.Engine(psi, M, tebd_params) S = [psi.entanglement_entropy()] for n in range(int(tmax / dt_measure + 0.5)): eng.run() S.append(psi.entanglement_entropy()) import matplotlib.pyplot as plt plt.figure() plt.imshow(S[::-1], vmin=0., aspect='auto', interpolation='nearest', extent=(0, L - 1., -0.5 * dt_measure, eng.evolved_time + 0.5 * dt_measure)) plt.xlabel('site $i$') plt.ylabel('time $t/J$') plt.ylim(0., tmax) plt.colorbar().set_label('entropy $S$') filename = 'c_tebd_lightcone_{g:.2f}.pdf'.format(g=g) plt.savefig(filename) print("saved " + filename)