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.propagateFunction
propagate(; 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

source

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_propagatorFunction
build_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 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.
  • β: inverse temperature
  • dt: time-step for recording the density matrices
  • ntimes: number of time steps of simulation
  • extraargs: extra arguments for the blip algorithm. Contains the max_blips threshold for number of blips, and the num_changes threshold on the number of blip-to-blip changes.
  • exec: FLoops.jl execution policy
source

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.