Spectral Densities
The interaction of a quantum system with a condensed phase environment is often captured through the spectral density. QuantumDynamics has a built-in support for a few of the most common spectral densities and allows for easy incorporation of other spectral densities.
Spectral Density Hierarchy
QuantumDynamics.SpectralDensities
— ModuleCollection of spectral densities commonly used to describe solvents.
The hierarchy of structures are as follows. All spectral densities are subtypes of the SpectralDensity struct:
QuantumDynamics.SpectralDensities.SpectralDensity
— TypeSpectralDensity
Abstract base type for all spectral densities.
which is split into two types:
QuantumDynamics.SpectralDensities.ContinuousSpectralDensity
— TypeContinuousSpectralDensity <: SpectralDensity
Abstract base type for all continuous spectral densities.
and
QuantumDynamics.SpectralDensities.DiscreteOscillators
— TypeDiscreteOscillators <: SpectralDensity
Describes a bath of discrete oscillators. Contains:
ω
: frequencies of the different oscillatorsjw
: spectral density for each of the oscillators
which encodes a bath of discrete oscillators.
The ContinuousSpectralDensities
struct is further subtyped into:
QuantumDynamics.SpectralDensities.SpectralDensityTable
— TypeSpectralDensityTable <: ContinuousSpectralDensity
Spectral density provided in tabular form. Contains a vector of ω
s and a vector corresponding to jw
s.
for spectral densities obtained in a tabular form either from experiments or from theoretical simulations, and
QuantumDynamics.SpectralDensities.AnalyticalSpectralDensity
— TypeAnalyticalSpectralDensity <: ContinuousSpectralDensity
Abstract base type for all model analytical spectral densities. An analytical spectral density, J
, can be evaluated at a frequency, ω
, as J(ω)
.
corresponding to the model spectral densities with particular analytical form.
Analytical Spectral Densities
Currently only two broad classes of analytical spectral densities are covered:
QuantumDynamics.SpectralDensities.ExponentialCutoff
— TypeExponentialCutoff <: AnalyticalSpectralDensity
Model spectral density with an exponential cutoff of the form:
$J(ω) = \frac{2π}{Δs^2} ξ \frac{ω^n}{ω_c^{n-1}} \exp\left(-\frac{|ω|}{ωc}\right)$
where Δs
is the distance between the two system states, ξ
is the dimensionless Kondo parameter, and ωc
is the cutoff frequency. The model is Ohmic if n = 1
, sub-Ohmic if n < 1
, and super-Ohmic if n > 1
.
The struct contains:
ξ
: Kondo parameterωc
: cutoff frequencyΔs
: the distance between the two statesn
: power of the polynomialωmax
: when discretized the points would lie in the symmetric interval, [-ωmax, ωmax]npoints
: number of points of discretizationclassical
: is the spectral density describing a classical bath?
QuantumDynamics.SpectralDensities.DrudeLorentz
— TypeDrudeLorentz <: AnalyticalSpectralDensity
Model Drude-Lorentz spectral density of the form:
$J(ω) = \frac{2λ}{Δs^2} \frac{ω γ}{ω^2 + γ^2}$
where Δs
is the distance between the two system states.
The struct contains:
γ
: cutoff frequencyλ
: reorganization energyΔs
: the distance between the two statesωmax
: when discretized the points would lie in the symmetric interval, [-ωmax, ωmax]npoints
: number of points of discretizationclassical
: is the spectral density describing a classical bath?
QuantumDynamics.SpectralDensities.matsubara_decomposition
— Functionmatsubara_decomposition(sd::DrudeLorentz, num_modes::Int, β::AbstractFloat)
Returns the Matsubara frequencies, γ
, and the expansion coefficients, c
.
Utilities for spectral densities
All spectral densities can be evaluated on a regular grid of frequencies to give a table of values using
QuantumDynamics.SpectralDensities.tabulate
— Functiontabulate(sd::DiscreteOscillators, full_real::Bool=true)
Returns sd.ω
and sd.jw
.
tabulate(sd::AnalyticalSpectralDensity, full_real::Bool=true)
Returns a table with ω
and J(ω)
for ω between -ωmax to ωmax if full_real
is true. Otherwise the table ranges for ω between 0 and ωmax with sd.npoints
.
tabulate(sd::SpectralDensityTable, full_real::Bool=true)
Returns sd.ω
and sd.jw
.
For continuous spectral densities, it is often useful to discretize it into a set of independent oscillators. This can be done using
QuantumDynamics.SpectralDensities.discretize
— Functiondiscretize(sd::ContinuousSpectralDensity, num_osc::Int)
Discretizes a continuous spectral density into a set of num_osc
oscillators by assigning equal portions of the total reorganization energy to each oscillator.
This is important for applying quantum-classical algorithms like the Ehrenfest limit or the Quantum-Classical Path Integral.
The reorganization energies of spectral densities can be computed using
QuantumDynamics.SpectralDensities.reorganization_energy
— Functionreorganization_energy(sd::AnalyticalSpectralDensity)
Calculates the reorganization energy corresponding to any analytical spectral density.
$λ = \frac{Δs^2}{2π}\int_{-∞}^∞ \frac{J(ω)}{ω}\,dω$
reorganization_energy(sd::SpectralDensityTable)
Calculates the reorganization energy corresponding to any analytical spectral density.
$λ = \frac{1}{2π}\int_{-∞}^∞ \frac{J(ω)}{ω}\,dω$
reorganization_energy(sd::DiscreteOscillators)
Calculates the reorganization energy corresponding to a bath of discrete oscillators.
$λ = \frac{1}{π}\sum_n \frac{j_n}{ω_n}$
QuantumDynamics.SpectralDensities.mode_specific_reorganization_energy
— Functionmode_specific_reorganization_energy(sd::DiscreteOscillators)
Calculates the array of reorganization energies corresponding to each mode in a bath of discrete oscillators.
$λ_n = \frac{1}{π}\frac{j_n}{ω_n}$