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.LocalOpType
struct LocalOp{N} <: AbstractSingleTerm

Concrete 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.

source
TimeEvolutionPEPO.ExpOpType
struct ExpOp <: AbstractAxialTerm

Concrete 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.

source
TimeEvolutionPEPO.GaussOpType
struct GaussOp <: AbstractAxialTerm

Concrete 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.

source
TimeEvolutionPEPO.PowOpType
struct PowOp{T<:Union{ExpOp, GaussOp2d}} <: AbstractSingleTerm

Concrete 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.

source
TimeEvolutionPEPO.ExpOp2dType
struct ExpOp2d <: AbstractManhattanTerm

Concrete 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.

source
TimeEvolutionPEPO.GaussOp2dType
struct GaussOp2d <: AbstractRadialTerm

Concrete 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} \]

See also: GaussOp, ExpOp, and PowOp.

source

Models and sums of terms

TimeEvolutionPEPO.HamiltonianType
struct Hamiltonian{T<:Tuple{Vararg{AbstractSingleTerm}}} <: AbstractSumOfTerms

Concrete type representing a Hamiltonian. Users should construct this object by adding terms together using localop, expop, powop2d etc, rather than directly.

source
TimeEvolutionPEPO.LiouvillianType
struct Liouvillian{T} <: AbstractSumOfTerms

Concrete type representing a Liouvillian super-operator.

Fields

  • hamiltonian::Hamiltonian{T} where T

  • dissipator::Dissipator

source
TimeEvolutionPEPO.TrotterLayerType
struct TrotterLayer{T<:AbstractTerm}

Concrete type representing a single trotter layer in a trotter decomposition.

Fields

  • data::Matrix{T}: Each element of data defines the operator(s) applied to the corresponding lattice site.
  • axis::Int=0: If axis=0, then this layer generates two layers for each axis in the Trotter decomposition when isaxial(T)==true is axial, otherwise axis defines the axis which the operators should be applied across. If isradial(T)==true then axis has no meaning and should be set equal to 0.
source
TimeEvolutionPEPO.IsingType
struct Ising{HL} <: AbstractSumOfTerms

Represents 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.

source