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,:]
.
Arguments:
ρ0
: initial reduced density matrixfbU
: 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 systemdt
: time-step for recording the density matricesntimes
: number of time steps of simulationkmax
: number of steps within memoryextraargs
: 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,:]
. Note that the kmax
variable does not have any function here. All calculations are full path.
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 different versions of QuAPI. Currently has a threshold for magnitude-based filtering, with a default value of cutoff=0
(no filtering).
Properties:
cutoff
: threshold for absolute magnitude-based path filtration [default = 0.0]prop_cutoff
: propagator cutoff threshold for adaptive kink filtration [default = 0.0]num_kinks
: maximum number of kinks for kink summation algorithm [default = -1: all kinks are allowed]num_blips
: maximum number of blips between forward and backward paths allowed [default = -1: all blips are allowed]