Dissipative Baths

Contributed by George Trenins and Paolo Lazzaroni.

Basics

A dissipative environment can be represented by a set of harmonic oscillators, which for a one-dimensional system with phase-space coordinates \((P,\,Q)\) takes the from

\[H(P,Q,p,q) = \frac{P^2}{2 m} + V(Q) + \sum_{n = 1}^{N_{\text{bath}}} \frac{p_n^2}{2 m} + \frac{c_n^2}{2 m \omega_n^2} \left( q_n - \frac{c_n Q}{m \omega_n^2} \right)^2\]

The bath frequencies \(\omega_n\) and coupling coefficients \(c_n\) come from the discretization of the spectral density \(J(\omega)\)

\[J(\omega) \sim \frac{\pi}{2} \sum_{n=1}^{N_{\text{bath}}} \frac{c_n^2}{m \omega_n} \delta(\omega - \omega_n)\]

which we have implemented for several common models.

Bath discretization

Spectral densities, memory-friction kernels, harmonic discretisation schemes.

class tools.baths.BaseSpectralDensity(mass: float, Nmodes: int, *args, **kwargs)[source]

Model spectral densities for one-dimensional systems with bilinear coupling.

Parameters:
  • mass (float) – mass of the bath modes

  • Nmodes (int) – number of oscillators in the harmonic bath discretisation

property frequencies

Array of frequencies computed in the harmonic discretization of the spectral density.

quadrature(f)[source]

Calculate the quadrature approximation to the integral

\[\int_0^{\infty} J(\omega) f(\omega) \, \mathrm{d}\omega \approx \frac{\pi}{2} \sum_{n=1}^{N_{\text{bath}}} \frac{c_n^2}{m \omega_n} f(\omega_n)\]

where \(J(\omega)\) is the spectral density.

Parameters:

f – input function evaluated at the quadrature points (self.frequencies).

F type:

numpy.ndarray

Returns:

integral over the input with the spectral density as the integration kernel

Return type:

float

l_quadrature(f)[source]

Same as quadrature but using \(\Lambda(\omega) = J(\omega)/\omega\) as the integration kernel.

J(omega: float | ndarray) float | ndarray[source]

Spectral density at frequency omega.

Lambda(omega: float | ndarray) float | ndarray[source]

Spectral density at frequency omega, divided by omega.

K(t: float | ndarray) float | ndarray[source]

Memory-friction kernel at time t.

class tools.baths.ExpOhmic(mass: float, Nmodes: int, eta: float, omega_cut: float, *args, **kwargs)[source]

Bases: BaseSpectralDensity

Exponentially damped Ohmic spectral density

\[J(\omega) = \eta \omega \exp(-\omega/\omega_c)\]

with discrete frequencies calculated according to Craig and Manolopoulos (2004), https://doi.org/10.1063/1.1850093.

Parameters:
  • mass (float) – mass of the bath modes

  • Nmodes (int) – number of oscillators in the harmonic bath discretisation

  • eta (float) – static friction coefficient

  • omega_cut (float) – cut-off frequency

class tools.baths.Debye(mass: float, Nmodes: int, eta: float, omega_cut: float, *args, **kwargs)[source]

Bases: BaseSpectralDensity

Debye spectral density

\[J(\omega) = \frac{\eta \omega \omega_c^2 }{\omega^2 + \omega_c^2}\]

with discrete frequencies calculated according to https://doi.org/10.1002/jcc.24527

Parameters:
  • mass (float) – mass of the bath modes

  • Nmodes (int) – number of oscillators in the harmonic bath discretisation

  • eta (float) – static friction coefficient

  • omega_cut (float) – cut-off frequency

class tools.baths.Splined(mass: float, Nmodes: int, omega: ndarray, Lambda: ndarray, eta: float | None = 1.0, *args, **kwargs)[source]

Bases: BaseSpectralDensity

Discretization of a numerical spectral density calculated on a grid and interpolated with cubic splines. Discretisation is implemented as described in https://doi.org/10.1002/jcc.24527

Parameters:
  • mass (float) – mass of the bath modes

  • Nmodes (int) – number of oscillators in the harmonic bath discretisation

  • omega (numpy.ndarray) – grid of frequencies

  • Lambda (numpy.ndarray) – spectral density divided by frequency, computed at omega

  • eta (float, optional) – scaling of the spectral density

  • **kwargs – optional arguments passed on to scipy.interpolate.CubicSpline