Time evolution
Reference for the time-evolution drivers and algorithms. For a task-oriented walkthrough see the how-to guides. The full, canonical docstrings for the whole package live in the Library index.
Drivers
MPSKit.time_evolve Function
time_evolve(ψ₀, H, t_span, alg, [envs]; kwargs...) -> (ψ, envs)
time_evolve!(ψ₀, H, t_span, alg, [envs]; kwargs...) -> (ψ₀, envs)Time-evolve the initial state ψ₀ with Hamiltonian H over a given time span by stepping through each of the time points obtained by iterating t_span.
Arguments
ψ₀::AbstractMPS: initial stateH::AbstractMPO: operator that generates the time evolution (can be time-dependent).t_span::AbstractVector{<:Number}: time points over which the time evolution is steppedalg: algorithm to use for the time evolution, e.g.TDVPorTDVP2.envs: MPS environment manager
Keyword Arguments
verbosity::Int = 0: verbosity level for loggingimaginary_evolution::Bool = false: if true, the time evolution is done with an imaginary time step instead, (i.e. instead of ). This can be useful for using this function to compute the ground state of a Hamiltonian, or to compute finite-temperature properties of a system.
Returns
ψ: the time-evolved stateenvs: the updated environment manager
MPSKit.timestep Function
timestep(ψ₀, H, t, dt, alg, [envs]; kwargs...) -> (ψ, envs)
timestep!(ψ₀, H, t, dt, alg, [envs]; kwargs...) -> (ψ₀, envs)Time-step the state ψ₀ with Hamiltonian H over a given time step dt at time t, solving the Schroedinger equation:
Arguments
ψ₀::AbstractMPS: initial stateH::AbstractMPO: operator that generates the time evolution (can be time-dependent).t::Number: starting time of time-stepdt::Number: time-step magnitudealg: algorithm to use for the time evolution, e.g.TDVPorTDVP2.envs: MPS environment manager
Keyword Arguments
imaginary_evolution::Bool = false: if true, the time evolution is done with an imaginary time step instead, (i.e. instead of ). This can be useful for using this function to compute the ground state of a Hamiltonian, or to compute finite-temperature properties of a system.
Returns
ψ: the time-stepped stateenvs: the updated environment manager
MPSKit.timestep! Function
timestep(ψ₀, H, t, dt, alg, [envs]; kwargs...) -> (ψ, envs)
timestep!(ψ₀, H, t, dt, alg, [envs]; kwargs...) -> (ψ₀, envs)Time-step the state ψ₀ with Hamiltonian H over a given time step dt at time t, solving the Schroedinger equation:
Arguments
ψ₀::AbstractMPS: initial stateH::AbstractMPO: operator that generates the time evolution (can be time-dependent).t::Number: starting time of time-stepdt::Number: time-step magnitudealg: algorithm to use for the time evolution, e.g.TDVPorTDVP2.envs: MPS environment manager
Keyword Arguments
imaginary_evolution::Bool = false: if true, the time evolution is done with an imaginary time step instead, (i.e. instead of ). This can be useful for using this function to compute the ground state of a Hamiltonian, or to compute finite-temperature properties of a system.
Returns
ψ: the time-stepped stateenvs: the updated environment manager
MPS time-evolution algorithms
MPSKit.TDVP Type
struct TDVP{A, E, G, F} <: MPSKit.AlgorithmSingle site MPS time-evolution algorithm based on the Time-Dependent Variational Principle.
For finite MPS, setting alg_expand to a bond-expansion algorithm (e.g. OptimalExpand, SketchedExpand) expands the bond with directions orthogonal to the current state ahead of each local integration, recovering Controlled Bond Expansion (CBE) TDVP and lifting the fixed-bond limitation of plain single-site TDVP. A truncating trscheme is then required to cut the enlarged bond back down (selecting the truncated-SVD gauge). The expansion is state-preserving, as required for a consistent time evolution.
Note
Real-time evolution preserves the norm: neither the bond expansion nor the truncation renormalizes, so the state norm reflects the accumulated truncation error. Imaginary-time evolution instead renormalizes at every step, like a ground-state search. CBE is only available for finite MPS.
Fields
integrator::Any: algorithm used in the exponential solverstolgauge::Float64: tolerance for gauging algorithmgaugemaxiter::Int64: maximal amount of iterations for gauging algorithmalg_expand::Any: algorithm used to expand the bond ahead of each local update, ornothingfor none (finite CBE-TDVP)alg_gauge::Any: factorization used for the post-update gauge: a QR algorithm (no truncation) or a truncated SVDfinalize::Any: callback function applied after each iteration, of signaturefinalize(iter, ψ, H, envs) -> ψ, envs
See also
Used as the algorithm argument of timestep, timestep! and time_evolve.
References
sourceMPSKit.TDVP2 Type
struct TDVP2{A, S, F} <: MPSKit.AlgorithmTwo-site MPS time-evolution algorithm based on the Time-Dependent Variational Principle.
Fields
integrator::Any: algorithm used in the exponential solverstolgauge::Float64: tolerance for gauging algorithmgaugemaxiter::Int64: maximal amount of iterations for gauging algorithmalg_svd::Any: algorithm used for the singular value decompositiontrscheme::MatrixAlgebraKit.TruncationStrategy: algorithm used for truncation of the two-site updatefinalize::Any: callback function applied after each iteration, of signaturefinalize(iter, ψ, H, envs) -> ψ, envs
See also
Used as the algorithm argument of timestep, timestep! and time_evolve.
References
sourceTime-evolution MPOs
For evolving with an explicitly constructed propagator MPO, e.g. for an InfiniteMPS, use make_time_mpo with one of the expansion algorithms below.
MPSKit.make_time_mpo Function
make_time_mpo(H::MPOHamiltonian, dt::Number, alg; kwargs...) -> O::MPOConstruct an MPO that approximates
Keyword Arguments
imaginary_evolution::Bool = false: if true, the time evolution operator is constructed with an imaginary time step instead, (i.e. instead of ). This can be useful for using this function to compute the ground state of a Hamiltonian, or to compute finite-temperature properties of a system.
MPSKit.TaylorCluster Type
struct TaylorCluster <: MPSKit.AlgorithmAlgorithm for constructing the Nth order time evolution MPO using the Taylor cluster expansion.
Fields
N::Int64: order of the Taylor expansionextension::Bool: include higher-order correctionscompression::Bool: approximate compression of corrections, accurate up to orderN
See also
Used as the algorithm argument of make_time_mpo.
References
sourceMPSKit.WI Constant
const WI = TaylorCluster(; N = 1, extension = false, compression = false)First order Taylor expansion for a time-evolution MPO.
sourceMPSKit.WII Type
struct WII <: MPSKit.AlgorithmGeneralization of the Euler approximation of the operator exponential for MPOs.
Fields
tol::Float64: tolerance for convergence criteriummaxiter::Int64: maximal number of iterations
See also
Used as the algorithm argument of make_time_mpo.
References
source<!– Maintainer footer. Symbols included: time_evolve, timestep, timestep!, TDVP, TDVP2, make_time_mpo, TaylorCluster, WI, WII. Caveats:
time_evolve!exists in src but is NOT exported, so it is intentionally omitted from this page.
–>