Models
Single terms
Terms are either one-dimensional (axial) with support on a single axis of a lattice only, or two-dimensional. In the former case, lattice site indices are denoted with scalar sub-scripts representing the position on a lattice axis. In the latter, vector subscripts are used.
TimeEvolutionPEPO.LocalOp — Typestruct LocalOp{N} <: AbstractSingleTermConcrete type representing an $N$-local axial terms.
Constructors
LocalOp(D::AbstractMatrix) -> LocalOp{1}Construct a one-local (on-site) term op::LocalOp{1} such that a * op represents:
\[\hat{h}_{j} = a \hat{D}_j\]
LocalOp(C::AbstractMatrix, B::AbstractMatrix [,A=one(C), N = 2])Construct a $N$-local one-dimensional (axial) term op::LocalOp{N} such that a * op represents:
\[\hat{h}_{j} = a \hat{C}_{j} \hat{A}_{j + 1} \hat{A}_{j + 2} \dots \hat{B}_{j + N - 1}\]
Note, for type stabilty pass Val(N) instead of N::Integer as the final argument or use the generic Tuple constructor.
LocalOp(CAB::NTuple{N, <:AbstractMatrix})Construct a $N$-local one-dimensional (axial) term op::LocalOp{N} such that a * op represents:
\[\hat{h}_{j} = a \hat{C}_{j} \hat{A}^{[1]}_{j + 1} \hat{A}^{[2]}_{j + 2} \dots \hat{B}_{j + N - 1}\]
with $C$, $B$, and $\{A^{[\alpha]}\}$ given by first(CAB), last(CAB) and CAB[2:end-1] respectively.
TimeEvolutionPEPO.ExpOp — Typestruct ExpOp <: AbstractAxialTermConcrete type representing one-dimensional (axial) non-local between two collinear sites with exponetially decaying interaction strength with distance between the lattice sites.
Constructors
ExpOp(C::AbstractMatrix, B::AbstractMatrix, λ::Float64, [A = one(C)]Constructs op::ExpOp such that a * op represents terms of the form:
\[\hat{h}_{j} = a \sum_{k > j}^{\infty} \lambda^{k - j} \hat{C}_j \hat{A}_{j + 1} \dots \hat{A}_{k - 1} \hat{B}_{k}\]
Note, this function checks that abs(λ)< 1 as otherwise the interaction strength diverges in the thermodynamic limit.
TimeEvolutionPEPO.GaussOp — Typestruct GaussOp <: AbstractAxialTermConcrete type representing an approximation to Gaussian decay profile term as a sum of exponential functions, that is,ExpOp.
\[\sum_{i = -\infty}^{\infty} \sum_{r = 1}^{\infty} a e^{-\mu r^2} C_{i} A_{i + 1} \cdots B_{i + r} \approx \sum_{i = -\infty}^{\infty} \sum_{r = 1}^{\infty} a \sum_{k = 1}^{k_{\max}} \lambda_{k}^{r} C_{i} A_{i + 1} \cdots B_{i + r}\]
where $k_{\max}$ is the number of terms in approximation.
TimeEvolutionPEPO.PowOp — Typestruct PowOp{T<:Union{ExpOp, GaussOp2d}} <: AbstractSingleTermConcrete type representing an approximation to a power-law decay term as a sum of axial exponential functions ExpOp or radial Gaussians GaussOp2d.
Constructors
PowOp(C, B, α, A=one(C); n=10, N=50, expand=false, kwargs...)Constructs op::PowOp such that a * op refers to terms of the form:
\[\hat{h}_{j} = a \sum_{l = 1}^{n} \hat{g}^{[l]}_{j} \approx a \sum_{k > j}^{\infty} \frac{\hat{C}_{j} \hat{B}_{k} }{|{k -j}|^{\alpha}}\]
That is, an $n$ term approximation to the power law $r^{\alpha}$ on the one-dimensional interval $[1,N]$. If expand=true, then the expansion is automatically expanded into a Trotterized product. The extra kwargs... are passed in as keyword arguments to ExpOp.
PowOp{GaussOp2d}(C, B, α, A=one(C); n=10, N=50, expand=false, kwargs...)Constructs op::PowOp such that a * op refers to terms of the form:
\[\hat{h}_{j} = a \sum_{l = 1}^{n} \hat{g}^{[l]}_{j} \approx a \sum_{k}^{\infty} \frac{\hat{C}_{\mathbf{r}_{j}} \hat{B}_{\mathbf{r}_k} }{||\mathbf{r}_k - \mathbf{r}_j||^{\alpha}}\]
That is, an $n$ term approximation to the power law $r^{\alpha}$ on the disc $\{ r = \sqrt{x^2 + y^2} \mid x,y \in \mathbb{Z}_{\leq N} \}$. If expand=true, then the expansion is automatically expanded into a Trotterized product (recommended). The extra kwargs... are passed in as keyword arguments to GaussOp2d.
TimeEvolutionPEPO.ExpOp2d — Typestruct ExpOp2d <: AbstractManhattanTermConcrete type representing two-dimensional non-local between two sites interactions strength decaying as a function of the Manhatten distance.
Constructors
ExpOp2d(C::AbstractMatrix, B::AbstractMatrix, λ::Float64, [A = one(C)]Constructs op::ExpOp2d such that a * op represents terms of the form:
\[\hat{h}_{j} = a \sum_{x = -\infty, y \geq y_j}^{\infty} \lambda^{| x | +| y|} \hat{C}_{\mathbf{r}_j} \hat{A}_{\mathbf{r}_j + \mathbf{y} } \dots \hat{A}_{\mathbf{r}_j + y \mathbf{y} } \hat{A}_{\mathbf{r}_j + \mathbf{x} + y \mathbf{y} } \dots \hat{A}_{\mathbf{r}_{j} + (x - 1) \mathbf{x} + y\mathbf{y} } \hat{B}_{\mathbf{r}_{j} + x \mathbf{x} + y\mathbf{y} }\]
where $\mathbf{r}_j = x_j \mathbf{x} + y_j \mathbf{y}$. Note, this constructor checks that abs(λ)< 1 as otherwise the interaction strength diverges in the thermodynamic limit.
TimeEvolutionPEPO.GaussOp2d — Typestruct GaussOp2d <: AbstractRadialTermConcrete type representing an approximation to a two-dimensional Gaussian decay profile term as a product of approximate one-dimensional Gaussians as GaussOp objects.
\[\sum_{i,j = -\infty}^{\infty} \sum_{x,y = 1}^{\infty} a e^{-\mu (x^2 + y^2)} C_{i,j} B_{i+x,j+y} \approx \sum_{i,j= -\infty}^{\infty} \sum_{x,y = 1}^{\infty} a e^{-\mu_{x} x^2 } e^{-\mu_{y} y^2} C_{i,j} B_{i+x,j+y} \]
TimeEvolutionPEPO.PowOp2d — Typeconst PowOp2d = PowOp{GaussOp2d}Convenience alias.
Models and sums of terms
TimeEvolutionPEPO.Model — Typestruct Model{HL<:Union{Hamiltonian, Ising, Liouvillian}} <: TimeEvolutionPEPO.AbstractModelTimeEvolutionPEPO.Hamiltonian — Typestruct Hamiltonian{T<:Tuple{Vararg{AbstractSingleTerm}}} <: AbstractSumOfTermsConcrete type representing a Hamiltonian. Users should construct this object by adding terms together using localop, expop, powop2d etc, rather than directly.
TimeEvolutionPEPO.Dissipator — Typestruct Dissipator <: AbstractSumOfTermsRepresents the dissipator in the Liouvillian super-operator.
TimeEvolutionPEPO.Liouvillian — Typestruct Liouvillian{T} <: AbstractSumOfTermsConcrete type representing a Liouvillian super-operator.
Fields
hamiltonian::Hamiltonian{T} where Tdissipator::Dissipator
TimeEvolutionPEPO.TrotterLayer — Typestruct TrotterLayer{T<:AbstractTerm}Concrete type representing a single trotter layer in a trotter decomposition.
Fields
data::Matrix{T}: Each element ofdatadefines the operator(s) applied to the corresponding lattice site.axis::Int=0: Ifaxis=0, then this layer generates two layers for each axis in the Trotter decomposition whenisaxial(T)==trueis axial, otherwiseaxisdefines the axis which the operators should be applied across. Ifisradial(T)==truethenaxishas no meaning and should be set equal to0.
TimeEvolutionPEPO.Ising — Typestruct Ising{HL} <: AbstractSumOfTermsRepresents an Ising-like term of the form
\[ \hat{H}_{jk} = a \hat{X}_j \hat{X}_k + \hat{D}_j\]
together with an (optional) on-site dissipator $\hat{\mathcal{D}}_j$. This type allows for certain exact low-rank truncations to take place when using TEBD. In that case, the two-local nearest-neighbor Suzuki-Trotter gate takes the form
\[\hat{g}_{jk} = e^{\frac{\tau}{4}( \hat{D}_j + \hat{\mathcal{D}}_j + \hat{D}_k + \hat{\mathcal{D}}_k )} e^{\tau a \hat{X}_j \hat{X}_k } e^{\frac{\tau}{4}( \hat{D}_j + \hat{\mathcal{D}}_j + \hat{D}_k + \hat{\mathcal{D}}_k )}.\]
Constructors
Ising([a = 1,], X::LocalOp{2}, [oneterms::Union{LocalOp{1}, Vector{LocalOp{1}}, dissipator::Dissipator])Construct an Ising-like term with optional on-site terms oneterms and dissipator. Note, the argument X is checked to be of Ising form, i.e. X.C == X.B.