Quasi-Adiabatic Propagator Path Integral (QuAPI)
This module provides the basic interface for simulating a system using QuAPI. Though the implementation does not follow the algorithm in the original papers, the first papers to outline the method are QuAPI1 and QuAPI2. For an overall review of the ideas involved, consider reading QuAPI review.
API
The API has three important end-points for user interface.
First, there is the propagate
function for propagating a given reduced density matrix.
QuantumDynamics.QuAPI.propagate
— Functionpropagate(; fbU::Matrix{ComplexF64}, Jw::Vector{T}, β::Real, ρ0, dt::Real, ntimes::Int, kmax::Int, extraargs::QuAPIArgs=QuAPIArgs(), svec=[1.0 -1.0], reference_prop=false, verbose::Bool=false) where {T<:SpectralDensities.SpectralDensity}
Given a time-series of system forward-backward propagators, fbU
, the spectral densities describing the solvent, Jw
, and an inverse temperature, this uses QuAPI to propagate the input initial reduced density matrix, ρ0, with a time-step of dt
for ntimes
time steps. A non-Markovian memory of kmax
steps is used in this simulation. The j^th bath, described by Jw[j]
, interacts with the system through the diagonal operator with the values of svec[j,:]
.
ρ0
: initial reduced density matrix fbU
: time-series of forward-backward propagators Jw
: array of spectral densities svec
: diagonal elements of system operators through which the corresponding baths interact. QuAPI currently only works for baths with diagonal coupling to the system
dt
: time-step for recording the density matrices ntimes
: number of time steps of simulation kmax
: number of steps within memory extraargs
: extra arguments for the QuAPI algorithm. Contains the filtration cutoff threshold
Then, there is the build_augmented_propagator
function for computing the augmented propagator incorporating the solvent effects through the Feynman-Vernon influence functional. This currently only does a full path calculation and does not iterate.
QuantumDynamics.QuAPI.build_augmented_propagator
— Functionbuild_augmented_propagator(; fbU::AbstractArray{ComplexF64,3}, Jw::Vector{T}, β::Real, dt::Real, ntimes::Int, kmax::Union{Int,Nothing}=nothing, extraargs::QuAPIArgs=QuAPIArgs(), svec=[1.0 -1.0], reference_prop=false, verbose::Bool=false, output::Union{Nothing,HDF5.Group}=nothing, from_TTM::Bool=false, exec=ThreadedEx()) where {T<:SpectralDensities.SpectralDensity}
Builds the propagators, augmented with the influence of the harmonic baths defined by the spectral densities Jw
, upto ntimes
time-steps without iteration using shared memory parallelism. The paths are generated in full forward-backward space but not stored. So, while the space requirement is minimal and constant, the time complexity for each time-step grows by an additional factor of $d^2$, where $d$ is the dimensionality of the system. This j^th bath, described by Jw[j]
, interacts with the system through the diagonal operator with the values of svec[j,:]
.
Arguments:
fbU
: time-series of forward-backward propagatorsJw
: array of spectral densitiessvec
: diagonal elements of system operators through which the corresponding baths interact. QuAPI currently only works for baths with diagonal coupling to the system.β
: inverse temperaturedt
: time-step for recording the density matricesntimes
: number of time steps of simulationextraargs
: extra arguments for the blip algorithm. Contains themax_blips
threshold for number of blips, and thenum_changes
threshold on the number of blip-to-blip changes.exec
: FLoops.jl execution policy
QuAPI allows for path filtering based on the absolute value of the amplitude of a path. This cutoff threshold is specified using the QuAPIArgs
structure. QuAPI.propagate
and QuAPI.build_augmented_propagator
use objects of this structure, with a default value being the default constructed objected.
QuantumDynamics.QuAPI.QuAPIArgs
— TypeFiltration parameters for QuAPI. Currently has a threshold for magnitude-based filtering, with a default value of cutoff=0
(no filtering).