Exemple #1
0
def _do_ramp(psi_0, H, basis, v, E_final, V_final):
    """
	Auxiliary function to evolve the state and calculate the entropies after the
	ramp.
	--- arguments ---
	psi_0: initial state
	H: time-dependent Hamiltonian
	basis: spin_basis_1d object containing the spin basis (required for Sent)
	E_final, V_final: eigensystem of H(t_f) at the end of the ramp t_f=1/(2v)
	"""
    # determine total ramp time
    t_f = 0.5 / v
    # time-evolve state from time 0.0 to time t_f
    psi = H.evolve(psi_0, 0.0, t_f)
    # calculate entanglement entropy
    subsys = range(basis.L // 2)  # define subsystem
    Sent = ent_entropy(psi, basis, chain_subsys=subsys)["Sent"]
    # calculate diagonal entropy in the basis of H(t_f)
    S_d = diag_ensemble(basis.L, psi, E_final, V_final,
                        Sd_Renyi=True)["Sd_pure"]
    #
    return np.asarray([S_d, Sent])
Exemple #2
0
    DE_args = {
        "density": randint(2),
        "alpha": uniform(5),
        "rho_d": True,
        "Srdm_args": {
            "basis": basis
        }
    }

    ### pure state
    DE = diag_ensemble(L,
                       psi0,
                       E2,
                       V2,
                       Obs=O_zxz,
                       delta_t_Obs=False,
                       delta_q_Obs=False,
                       Sd_Renyi=False,
                       Srdm_Renyi=False,
                       **DE_args)
    DE = diag_ensemble(L,
                       psi0,
                       E2,
                       V2,
                       Obs=O_zxz,
                       delta_t_Obs=True,
                       delta_q_Obs=False,
                       Sd_Renyi=False,
                       Srdm_Renyi=False,
                       **DE_args)
    DE = diag_ensemble(L,
Exemple #3
0
	#
	H1=O_pm+O_zxz
	H2=O_pm-O_zxz
	# diagonalise H
	E1,V1 = H1.eigh()
	E2,V2 = H2.eigh()
	psi0=V1[:,0]
	rho0=np.outer(psi0.conj(),psi0)


	alpha=uniform(5)

	DE_args={"densities":randint(2),"alpha":uniform(5),"rho_d":True,"Srdm_args":{"basis":basis}}

	### pure state
	DE = diag_ensemble(L,psi0,E2,V2,Obs=O_zxz,delta_t_Obs=False,delta_q_Obs=False,Sd_Renyi=False,Srdm_Renyi=False,**DE_args)
	DE = diag_ensemble(L,psi0,E2,V2,Obs=O_zxz,delta_t_Obs=True,delta_q_Obs=False,Sd_Renyi=False,Srdm_Renyi=False,**DE_args)
	DE = diag_ensemble(L,psi0,E2,V2,Obs=O_zxz,delta_t_Obs=True,delta_q_Obs=True,Sd_Renyi=False,Srdm_Renyi=False,**DE_args)
	DE = diag_ensemble(L,psi0,E2,V2,Obs=O_zxz,delta_t_Obs=True,delta_q_Obs=True,Sd_Renyi=True,Srdm_Renyi=False,**DE_args)
	DE = diag_ensemble(L,psi0,E2,V2,Obs=O_zxz,delta_t_Obs=True,delta_q_Obs=True,Sd_Renyi=True,Srdm_Renyi=True,**DE_args)

	### DM
	DE = diag_ensemble(L,rho0,E2,V2,Obs=O_zxz,delta_t_Obs=False,delta_q_Obs=False,Sd_Renyi=False,Srdm_Renyi=False,**DE_args)
	DE = diag_ensemble(L,rho0,E2,V2,Obs=O_zxz,delta_t_Obs=True,delta_q_Obs=False,Sd_Renyi=False,Srdm_Renyi=False,**DE_args)
	DE = diag_ensemble(L,rho0,E2,V2,Obs=O_zxz,delta_t_Obs=True,delta_q_Obs=True,Sd_Renyi=False,Srdm_Renyi=False,**DE_args)
	DE = diag_ensemble(L,rho0,E2,V2,Obs=O_zxz,delta_t_Obs=True,delta_q_Obs=True,Sd_Renyi=True,Srdm_Renyi=False,**DE_args)
	DE = diag_ensemble(L,rho0,E2,V2,Obs=O_zxz,delta_t_Obs=True,delta_q_Obs=True,Sd_Renyi=True,Srdm_Renyi=True,**DE_args)

	### thermal average
	beta=[10.0,1.0,0.1]
	in_state={'V1':V1,'E1':E1,'f_args':[beta],'V1_state':[0,2,4,6]}
# alternative way by solving Schroedinger's eqn
psi_t = H.evolve(psi_i, t.i, t.vals, rtol=1E-9, atol=1E-9)
meas = obs_vs_time(psi_t, t.vals, {"E_time": HF_02 / L}, Sent_args=Sent_args)
#"""
# read off measurements
Energy_t = meas["E_time"]
Entropy_t = meas["Sent_time"]["Sent"]
#
##### calculate diagonal ensemble measurements
DE_args = {
    "Obs": HF_02,
    "Sd_Renyi": True,
    "Srdm_Renyi": True,
    "Srdm_args": Sent_args
}
DE = diag_ensemble(L, psi_i, EF, VF, **DE_args)
Ed = DE["Obs_pure"]
Sd = DE["Sd_pure"]
Srdm = DE["Srdm_pure"]
#
##### plot results #####
import matplotlib.pyplot as plt
import pylab
# define legend labels
str_E_t = "$\\mathcal{E}(lT)$"
str_Sent_t = "$s_\mathrm{ent}(lT)$"
str_Ed = "$\\overline{\mathcal{E}}$"
str_Srdm = "$\\overline{s}_\mathrm{rdm}$"
str_Sd = "$s_d^F$"
# plot infinite-time data
fig = plt.figure()
Exemple #5
0
from quspin.operators import hamiltonian # Hamiltonians and operators
from quspin.basis import spin_basis_1d # Hilbert space spin basis
from quspin.tools.measurements import diag_ensemble
import numpy as np # generic math functions
#
L=12 # syste size
# coupling strenghts
J=1.0 # spin-spin coupling
h=0.8945 # x-field strength
g=0.945 # z-field strength
# create site-coupling lists
J_zz=[[J,i,(i+1)%L] for i in range(L)] # PBC
x_field=[[h,i] for i in range(L)]
z_field=[[g,i] for i in range(L)]
# create static and dynamic lists
static_1=[["x",x_field],["z",z_field]]
static_2=[["zz",J_zz],["x",x_field],["z",z_field]]
dynamic=[]
# create spin-1/2 basis
basis=spin_basis_1d(L,kblock=0,pblock=1)
# set up Hamiltonian
H1=hamiltonian(static_1,dynamic,basis=basis,dtype=np.float64)
H2=hamiltonian(static_2,dynamic,basis=basis,dtype=np.float64)
# compute eigensystems of H1 and H2
E1,V1=H1.eigh()
psi1=V1[:,14] # pick any state as initial state
E2,V2=H2.eigh()
#
# calculate long-time (diagonal ensemble) expectations of H1 and its temporal fluctuations
Diag_Ens=diag_ensemble(L,psi1,E2,V2,Obs=H1,delta_t_Obs=True)
print(Diag_Ens['Obs_pure'],Diag_Ens['delta_t_Obs_pure'])