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 — TypeSpectralDensityAbstract base type for all spectral densities.
which is split into two types:
QuantumDynamics.SpectralDensities.ContinuousSpectralDensity — TypeContinuousSpectralDensity <: SpectralDensityAbstract base type for all continuous spectral densities.
and
QuantumDynamics.SpectralDensities.DiscreteOscillators — TypeDiscreteOscillators <: SpectralDensityDescribes 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 <: ContinuousSpectralDensitySpectral density provided in tabular form. Contains a vector of ωs and a vector corresponding to jws.
for spectral densities obtained in a tabular form either from experiments or from theoretical simulations, and
QuantumDynamics.SpectralDensities.AnalyticalSpectralDensity — TypeAnalyticalSpectralDensity <: ContinuousSpectralDensityAbstract 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 <: AnalyticalSpectralDensityModel 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 <: AnalyticalSpectralDensityModel 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}$