TimeEvolutionPEPO.jl
TimeEvolutionPEPO.jl is a high-level and domain-specific package for simulating the time-evolution of an open-quantum system represented by the iPEPO ansatz. A variety of options are implemented under one common interface for both Lindblad real-time evolution and thermal state annealing.
Keywords: Open Quantum Systems, Tensor Networks, Spins
Installation
To use this package, first create a new directory (or navigate to an existing directory) and start Julia from the command line:
mkdir MyProject
cd MyProject
julia
You should then activate an enviroment withing the directory to avoid polluting your global enviroment.
First open the package manager interface by typing ] at the Julia prompt:
julia>]
Then from the package interface,
(@v1.11) pkg> activate .
which activates (or creates) an enviroment in current directory, indiciated by the ..
Packages can then be added to this enviroment:
(MyProject) pkg> add TimeEvolutionPEPO
which will install the TimeEvolutionPEPO package, and add it to the enviroment.
Note the change in prompt from (@v1.11) (the global enviroment) to (MyProject) (the local enviroment).
Additional packages that might be useful can also be added:
(MyProject) pkg> add Plots, DataFrames
Code Example
function thermalising(; Jz = 1.0, D = 2)
_, _, Z = PAULI
# Spin-1/2 local Hilbert space dimension
localdim = 2
# Initialise to the infinite temperate thermal state on 2x2 unit cell lattice
rho = PEPO(fill(ThermalState(),2,2), localdim, D)
# Define the square lattice Ising model critical temperature
βc = log(1 + sqrt(2)) / 2
# Construct the anti-ferromagnetic Ising model
model = Model(Jz * LocalOp(Z, Z))
# Define a method, here we use time-evolving block decimation (TEBD) with default options
method = TEBD()
# We also need to define how we compute observables. Here we use the VUMPS algorithm
obsalg = VUMPS(bonddim=16, maxiter=200, tol=1e-8)
# We then set up the problem we wish to solve
sim = Simulation(rho, model, method; timestep = 0.002 * βc)
# Define an empty vector to store our output
xis = Float64[]
# Run the simulation!
simulate!(sim; numsteps = 1000, maxshots=100) do simstep
if simulationinfo(simstep).iterations == 0
return nothing
end
# Compute the density matrix
dm = DensityMatrix(quantumstate(simstep), obsalg)
# Append the correlation length to the output vector
push!(xis, correlationlength(dm))
return nothing
end
return xis
end