diff --git a/dev/examples/index.html b/dev/examples/index.html index 3ce9092..549bc3c 100644 --- a/dev/examples/index.html +++ b/dev/examples/index.html @@ -50,4 +50,4 @@ Hellwarth (61) Omega (freq): 500.08501275972833

Temperature-dependent behaviour

Getting temperature-dependent behaviour is a matter of sending a temperature range to the polaronmobility function.

MAPIe=polaronmobility(10:10:1000, 4.5, 24.1, 2.25, 0.12)

Plotting

For publication, savepolaron outputs a column-delimited text file for post-production plotting (with gnuplot) or similar.

savepolaron("MAPI-electron",MAPIe)

Example gnuplot scripts can be found in Examples and HalidePerovskites.

Built in plotting

The convenience function plotpolaron generates (and saves) a number of Plots.jl figures of the temperature dependent behaviour.

It has been separated off into its own submodule (PlotPolaron), so that the Plots.jl dependency does not slow down loading of PolaronMobility.jl.

To use it, we therefore need to inform Julia where to find PlotPolaron. A suitable initialisation script was kindly supplied by @wkearn:

using PolaronMobility, Plots
 gr()
 include(Pkg.dir("PolaronMobility","src","PlotPolaron.jl"))
-using PlotPolaron

As with savepolaron, the call signature is output-file-string and then the polaron object which you have calculated.

plotpolaron("MAPI-electron",MAPIe)

This will attempt to make fairly sensible defaults, and plot a lot of different data of sufficient quality for talk slides.

Much for the functionality has been unrolled into the Jupyter Notebook example, which should also be interactively-runnable from (https://juliabox.com). See the repository README.md for the latest information.

Here is a figure showing typical temperature-dependent behaviour of the three-different polaron mobility approximations, for MAPI.

MAPI mobility

Further examples

More complete examples are provided in Examples and HalidePerovskites.

+using PlotPolaron

As with savepolaron, the call signature is output-file-string and then the polaron object which you have calculated.

plotpolaron("MAPI-electron",MAPIe)

This will attempt to make fairly sensible defaults, and plot a lot of different data of sufficient quality for talk slides.

Much for the functionality has been unrolled into the Jupyter Notebook example, which should also be interactively-runnable from (https://juliabox.com). See the repository README.md for the latest information.

Here is a figure showing typical temperature-dependent behaviour of the three-different polaron mobility approximations, for MAPI.

MAPI mobility

Further examples

More complete examples are provided in Examples and HalidePerovskites.

diff --git a/dev/functions/index.html b/dev/functions/index.html index e494f7c..1df8727 100644 --- a/dev/functions/index.html +++ b/dev/functions/index.html @@ -1,67 +1,15 @@ -Functions · PolaronMobility.jl documentation

Functions

PolaronMobility.MaterialType
mutable struct Material
+Functions · PolaronMobility.jl documentation

Functions

PolaronMobility.AMethod
A(v, w, ω, β)

Hellwarth's A expression from Eqn. (62b) in Hellwarth et al. 1999 PRB. Part of the overall free energy expression.

See Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.AMethod
A(v, w, β)

Generalisation of the A function from Eqn. (62b) in Hellwarth et al. 1999. This is the Helmholtz free energy of the trial model.

Required for calculating the polaron free energy.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
  • β::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.

See Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.AMethod
A(v, w, n)

Calculates A(v, w, β) but at zero-temperature, β = Inf.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
source
PolaronMobility.BMethod
B(v, w, α, ω)

Integral of Eqn. (31) in Feynman 1955. Part of the overall ground-state energy expression.

See Feynman 1955: http://dx.doi.org/10.1103/PhysRev.97.660.

source
PolaronMobility.BMethod
B(v, w, α, ω, β)

Hellwarth's B expression from Eqn. (62c) in Hellwarth et al. 1999 PRB. Part of the overall free energy expression.

See Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.BMethod
B(v, w, α, β)

Generalisation of the B function from Eqn. (62c) in Hellwarth et al. 1999. This is the expected value of the exact action <S_j> taken w.r.t trial action, given for the 'jth' phonon mode.

Required for calculating the polaron free energy.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
  • α::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for the 'jth' phonon mode.
  • β::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.

See Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.BMethod
B(v, w, α; rtol = 1e-3)

Calculates B(v, w, α, β) but at zero-temperature, β = Inf.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
  • α::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for the 'jth' phonon mode.
source
PolaronMobility.CMethod
C(v, w, ω, β)

Hellwarth's C expression from Eqn. (62e) in Hellwarth et al. 1999 PRB. Part of the overall free energy expression.

See Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.CMethod
C(v, w, β)

Generalisation of the C function from Eqn. (62e) in Hellwarth et al. 1999. This is the expected value of the trial action <S_0> taken w.r.t trial action.

Required for calculating the polaron free energy.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
  • β::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.

See Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.CMethod
C(v, w)

Calculates C(v, w, β) but at zero-temperature, β = Inf.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
source
PolaronMobility.C_ijMethod
C_ij(i, j, v, w)

Calculates the element to the coupling matrix C_ij (a generalisation of Feynman's C coupling variational parameter in Feynman 1955) between the electron and the ith' andjth' fictitious masses that approximates the exact electron-phonon interaction with a harmonic coupling to a massive fictitious particle.

Required for calculating the polaron free energy.

Note: Not to be confused with the number of physical phonon branches; many phonon branches could be approximated with one or two etc. fictitious masses for example. The number of fictitious mass does not necessarily need to match the number of phonon branches.

Arguments

  • i::Integer, j::Integer: enumerate the current fictitious masses under focus (also the index of the element in the coupling matrix C)
  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.

See Feynman 1955: http://dx.doi.org/10.1103/PhysRev.97.660.

source
PolaronMobility.DMethod
D(τ, v, w, β)

Calculates the recoil function (a generalisation of D(u) in Eqn. (35c) in FHIP 1962) that approximates the exact influence (recoil effects) of the phonon bath on the electron with the influence of the fictitious masses attached by springs to the electron. It appears in the exponent of the intermediate scattering function.

Arguments

  • τ::Float64: is the imaginary time variable.
  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
  • β::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.

See FHIP 1962: https://doi.org/10.1103/PhysRev.127.1004.

source
PolaronMobility.DMethod
D(τ, v, w)

Calculates the recoil function at zero-temperature.

Arguments

  • τ::Float64: is the imaginary time variable.
  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
source
PolaronMobility.HellwarthASchemeMethod
HellwarthAScheme(phonon_modes; T=295, convergence=1e-6)

Multiple phonon mode reduction to a single effective frequency. Temperature dependent, defaults to T = 295 K.

Solved iteratively by bisection until Δfreq < convergence.

Follows Hellwarth et al. 1999 PRB 'A' scheme, Eqn. (50) RHS.

See Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.HellwarthBSchemeMethod
HellwarthBScheme(LO)

LO an array assumed to be of [freq ; absolute ir activity]

Multiple phonon mode reduction to a single effective frequency. Hellwarth et al. 1999 PRB, 'B scheme'; the athermal method. Averaging procedure is constructed by considering the average effect of the action of multiple branches.

Follows Eqn. (58) in this paper, assuming typo on LHS, should actually be W_e.

See Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.cartesian_k_integralMethod
cartesian_k_integral(coupling, propagator; rₚ = 1, a = 1, limits = [-π, π])

Calculate the k-space integral in cartesian coordinates of the integrand cartesian_k_integrand over a specified range in k-space.

Arguments

  • coupling: A function that takes a scalar k value and returns a scalar value representing the coupling strength.
  • propagator: A scalar value representing the propagator.
  • rₚ: An optional scalar value representing the charactersitc polaron radius. Default value is 1.
  • a: An optional scalar value representing ther lattice constant. Default value is 1.
  • limits: An array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.

Returns

A scalar value representing the calculated k-space integral over the specified range in cartesian coordinates.

Example

coupling(k) = k^2  # define the coupling function
-propagator = 0.5  # define the propagator value
-result = cartesian_k_integral(coupling, propagator; rₚ = 1, a = 1, limits = [-π, π])  # calculate the integral
-println(result)  # print the result

Expected Output: A scalar value representing the calculated k-space integral over the specified range in cartesian coordinates.

source
PolaronMobility.cartesian_k_integrandMethod
cartesian_k_integrand(k, coupling, propagator; rₚ = 1)

Calculate the integrand for a k-space integral in Cartesian coordinates.

Arguments

  • k: a scalar value representing the k-coordinate in k-space
  • coupling: a function that takes a scalar k value and returns a scalar value representing the coupling strength
  • propagator: a scalar value representing the propagator
  • rₚ: an optional scalar value representing the radius

Example Usage

coupling(k) = k^2  # define the coupling function
-propagator = 0.5  # define the propagator value
-result = cartesian_k_integrand(2.0, coupling, propagator; rₚ = 1)  # calculate the integrand for k = 2.0
-println(result)  # print the result

Expected Output: 0.5

source
PolaronMobility.effective_freqsMethod
effective_freqs(freqs_and_ir_activity, num_var_params)

Generates a matrix of effective phonon modes with frequencies and infra-red activities derived from a larger matrix using the Principal Component Analysis (PCA) method.

Arguments

  • freqs_and_ir_activity::Matrix{Float64}: is a matrix containing the phonon mode frequencies (in THz) in the first column and the infra-red activities (in e²amu⁻¹) in the second column.
  • num_var_params::Integer: is the number of effective modes required (which needs to be less than the number of modes in freqs_and_ir_activity`).

*** POSSIBLY REDUNDANT ***

source
PolaronMobility.electron_energyMethod
electron_energy(v, w, ω, β)

Calculate the free electron energy at finite temperature.

Arguments

  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.

Returns

A scalar value representing the calculated free electron energy at finite temperature.

Example

v = 0.5
-w = 1.0
-ω = 2.0
-β = 0.2
-result = electron_energy(v, w, ω, β; dims = 3)
-println(result)

Expected Output: A scalar value representing the calculated free electron energy at finite temperature.

source
PolaronMobility.electron_energyMethod
electron_energy(v, w, ω)

Calculate the free electron energy at zero temperature.

Arguments

  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • ω: a scalar value representing the phonon frequency.

Returns

A scalar value representing the calculated free electron energy at zero temperature.

Example

v = 0.5
-w = 1.0
-ω = 2.0
-β = 0.2
-result = electron_energy(v, w, ω)
-println(result)

Expected Output: A scalar value representing the calculated free electron energy at finite temperature.

source
PolaronMobility.feynmanvwMethod
feynmanvw(v, w, αωβ...; upper_limit = Inf64)

Minimises the multiple phonon mode free energy function for a set of vₚ and wₚ variational parameters. The variational parameters follow the inequality: v₁ > w₁ > v₂ > w₂ > ... > vₙ > wₙ. Generalises feynmanvw to multiple variational parameters.

Arguments

  • v::Vector{Float64}: vector of initial v parameters.
  • w::Vector{Float64}: vector of initial w parameters.
  • α::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for one or many phonon modes.
  • ω::Union{Float64, Vector{Float64}}: phonon mode frequencies (2π THz) for one or many phonon modes.
  • β::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) for one or many phonon modes.

See also F.

source
PolaronMobility.frohlich_complex_conductivityMethod

frohlichcomplexconductivity(Ω, β, α, v, w; rtol = 1e-3)

Calculate the complex conductivity σ(Ω) of the polaron at finite temperatures for a given frequency Ω (equal to 1 / Z(Ω) with Z the complex impedence).

Arguments

  • Ω::Float64: is the frequency (2π THz) of applied electric field.
  • β::Float64: is the reduced thermodynamic betas.
  • α::Float64: is the Frohlich alpha coupling parameter.
  • v::Float64: is the 'v' variational parameter.
  • w::Float64: is the 'w' variational parameter.
  • rtol: relative tolerance for the accuracy of any quadrature integrations.

See also polaron_complex_impedence

source
PolaronMobility.frohlich_complex_impedenceMethod
frohlich_complex_impedence(Ω, β, α, v, w; rtol = 1e-3, T = nothing, verbose = false)

Calculate the complex impedence Z(Ω) of the polaron at finite temperatures for a given frequency Ω (Eqn. (41) in FHIP 1962).

Arguments

  • Ω::Float64: is the frequency (2π THz) of applied electric field.
  • β::Float64: is the reduced thermodynamic betas.
  • α::Float64: is the Frohlich alpha coupling parameter.
  • v::Float64: is the 'v' variational parameter.
  • w::Float64: is the 'w' variational parameter.
  • rtol: relative tolerance for the accuracy of any quadrature integrations.
  • T: is a token used by make_polaron() to keep track of the temperature for printing during a calculation. Do not alter.
  • verbose: is used by make_polaron() to specify whether or not to print. Ignore.

See FHIP 1962: https://doi.org/10.1103/PhysRev.127.1004.

source
PolaronMobility.frohlich_couplingMethod
frohlich_coupling(k, α, ω)

Calculate the coupling strength for the Frohlich continuum polaron model.

Arguments

  • k: a scalar value representing the k-coordinate in k-space
  • α: a scalar value representing the coupling constant
  • ω: a scalar value representing the phonon frequency

Returns

The coupling strength for the Frohlich continuum polaron model.

Example

result = frohlich_coupling(2.0, 0.5, 1.0)
-println(result)

Expected Output: 6.0

source
PolaronMobility.frohlich_energyMethod
F(v, w, α, ω)

Calculates the zero-temperature ground-state energy of the polaron for a material with multiple phonon branches. Similar to F(v, w, α, ω, β) but with β = Inf. Generalises Eqn. (33) in Feynman 1955.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
  • α::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for the 'jth' phonon mode.
  • ω::Union{Float64, Vector{Float64}}: phonon mode frequencies (2π THz).

See Feynman 1955: http://dx.doi.org/10.1103/PhysRev.97.660.

source
PolaronMobility.frohlich_energyMethod
F(v, w, α, ω, β)

Calculates the Helmholtz free energy of the polaron for a material with multiple phonon branches.

This generalises the Osaka 1959 (below Eqn. (22)) and Hellwarth. et al 1999 (Eqn. (62a)) free energy expressions.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
  • α::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for the 'jth' phonon mode.
  • ω::Union{Float64, Vector{Float64}}: phonon mode frequencies (2π THz).
  • β::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.

See Osaka, Y. (1959): https://doi.org/10.1143/ptp.22.437 and Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.frohlich_energy_k_spaceMethod
frohlich_energy_k_space(v, w, α, ωβ...; rₚ = 1, limits = [0, Inf])

Calculate the total energy, kinetic energy, and interaction energy of the Frohlich lattice polaron.

Arguments

  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: (optional) a scalar value representing the inverse temperature.
  • rₚ: The characteristic polaron radius (default is 1).
  • limits: The limits of integration for the interaction energy calculation (default is [0, Inf]).

Returns

  • total_energy: The calculated total polaron energy.
  • kinetic_energy: The calculated polaron kinetic energy.
  • interaction_energy: The calculated polaron interaction energy.
source
PolaronMobility.frohlich_interaction_energy_integrand_k_spaceMethod
frohlich_interaction_energy_integrand_k_space(τ, v, w, α, ω; rₚ = 1, limits = [0, Inf])

Calculate the integrand for the Frohlich interaction energy in k-space at finite zero temperaure.

Arguments

  • τ: a scalar value representing the imaginary time.
  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • limits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [0, Inf].

Returns

A scalar value representing the integrand for the Frohlich interaction energy in k-space at zero temperature.

source
PolaronMobility.frohlich_interaction_energy_integrand_k_spaceMethod
frohlich_interaction_energy_integrand_k_space(τ, v, w, α, ω, β)

Calculate the integrand for the Frohlich interaction energy in k-space at finite temperaure.

Arguments

  • τ: a scalar value representing the imaginary time.
  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • limits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [0, Inf].

Returns

A scalar value representing the integrand for the Frohlich interaction energy in k-space at finite temperature.

source
PolaronMobility.frohlich_interaction_energy_k_spaceMethod
frohlich_interaction_energy_k_space(v, w, α, ω, β; rₚ = 1, limits = [0, Inf])

Calculate the Frohlich polaron interaction energy in k-space at zero temperaure.

Arguments

  • τ: a scalar value representing the imaginary time.
  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].

Returns

A scalar value representing the Frohlich polaron interaction energy in k-space at zero temperature.

source
PolaronMobility.frohlich_interaction_energy_k_spaceMethod
frohlich_interaction_energy_k_space(v, w, α, ω, β; rₚ = 1, limits = [0, Inf])

Calculate the Frohlich polaron interaction energy in k-space at finite temperaure.

Arguments

  • τ: a scalar value representing the imaginary time.
  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].

Returns

A scalar value representing the Frohlich polaron interaction energy in k-space at finite temperature.

source
PolaronMobility.frohlich_memory_function_k_spaceMethod
frohlich_memory_function_k_space(Ω, v, w, α, ω; rₚ = 1, limits = [0, Inf])

Calculate the memory function for the Frohlich model in k-space at zero temperature and finite frequency.

Arguments

  • Ω: a scalar value representing the frequency at which the memory function is evaluated.
  • v: a scalar value representing the optimal variational parameter.
  • w: a scalar value representing the optimal variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.

Returns

A scalar value representing the memory function of the Frohlich model in k-space at finite temperature evaluated at the frequency Ω.

source
PolaronMobility.frohlich_memory_function_k_spaceMethod
frohlich_memory_function_k_space(Ω, v, w, α, ω, β; rₚ = 1, limits = [0, Inf])

Calculate the memory function for the Frohlich model in k-space at finite temperature and frequency.

Arguments

  • Ω: a scalar value representing the frequency at which the memory function is evaluated.
  • v: a scalar value representing the optimal variational parameter.
  • w: a scalar value representing the optimal variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.

Returns

A scalar value representing the memory function of the Frohlich model in k-space at finite temperature evaluated at the frequency Ω.

source
PolaronMobility.frohlich_mobility_k_spaceMethod
frohlich_mobility_k_space(v, w, α, ω, β; rₚ = 1, limits = [0, Inf])

Calculate the DC mobility in k-space for a Frohlich polaron system at finite temperature.

Arguments

  • v: a scalar value representing the optimal variational parameter.
  • w: a scalar value representing the optimal variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.

Returns

The DC mobility in k-space for the Frohlich polaron system at finite temperature.

source
PolaronMobility.frohlich_structure_factor_k_spaceMethod
frohlich_structure_factor_k_space(t, v, w, α, ω; rₚ = 1, limits = [0, Inf])

Calculate the structure factor in k-space for the Frohlich continuum polaron model at zero temperature.

Arguments

  • t: a scalar value representing the real time.
  • v: a scalar value representing the optimal variational parameter.
  • w: a scalar value representing the optimal variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.

Returns

A scalar value representing the calculated structure factor in k-space for the Frohlich continuum polaron model at zero temperature.

source
PolaronMobility.frohlich_structure_factor_k_spaceMethod
frohlich_structure_factor_k_space(t, v, w, α, ω, β; rₚ = 1, limits = [0, Inf])

Calculate the structure factor in k-space for the Frohlich continuum polaron model at finite temperature.

Arguments

  • t: a scalar value representing the real time.
  • v: a scalar value representing a variational parameter.
  • w: a scalar value representing a variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.

Returns

A scalar value representing the calculated structure factor in k-space for the Frohlich continuum polaron model at finite temperature.

source
PolaronMobility.frohlichalphaMethod
frohlichalpha(ε_Inf, ε_S, freq, m_eff)

Calculates the Frohlich alpha parameter, for a given dielectric constant, frequency (f) of phonon in Hertz, and effective mass (in units of the bare electron mass).

See Feynman 1955: http://dx.doi.org/10.1103/PhysRev.97.660.

source
PolaronMobility.frohlichalphaMethod
frohlichalpha(ϵ_optic, ϵ_ionic, ϵ_total, phonon_mode_freq, m_eff)

Calculates the partial dielectric electron-phonon coupling parameter for a given longitudinal optical phonon mode.

This decomposes the original Frohlich alpha coupling parameter (defined for a single phonon branch) into contributions from multiple phonon branches.

Arguments

  • ϵ_optic::Float64: is the optical dielectric constant of the material.
  • ϵ_ionic::Float64: is the ionic dielectric contribution from the phonon mode.
  • ϵ_total::Float64: is the total ionic dielectric contribution from all phonon modes of the material.
  • phonon_mode_freq::Float64: is the frequency of the phonon mode (THz).
  • m_eff::Float64 is the band mass of the electron (in units of electron mass m_e).
source
PolaronMobility.general_memory_functionMethod
general_memory_function(Ω, structure_factor; limits = [0, Inf])

This function calculates the integral of a given structure factor with respect to time using the quadgk function from the QuadGK package.

Arguments

  • Ω: A scalar representing the frequency.
  • structure_factor: A function that returns the value of the structure factor at a given time.
  • limits (optional): A 2-element array specifying the lower and upper limits of integration. Default is [0, Inf].

Returns

The integral of the structure factor with respect to time.

Example

# Define a structure factor function
-function structure_factor(t)
-    # Implementation of the structure factor
-    # ...
-end
-
-# Calculate the memory function for a given frequency and structure factor
-Ω = 0.5
-limits = [0, 10]
-result = general_memory_function(Ω, structure_factor; limits = limits)
-println(result)

This example demonstrates how to use the general_memory_function to calculate the memory function for a given frequency Ω and structure factor function structure_factor. The limits argument is optional and specifies the lower and upper limits of integration. The result is then printed.

source
PolaronMobility.general_memory_functionMethod
general_memory_function(structure_factor; limits = [0, Inf])

Calculate the integral of a given function structure_factor using the quadgk function in Julia.

Arguments

  • structure_factor: A function that takes a single argument t and returns a value.
  • limits: An optional array specifying the lower and upper limits of integration. Default is [0, Inf].

Returns

  • integral: The result of the numerical integration of the function structure_factor over the specified limits.

Example

# Define the structure factor function
-function structure_factor(t)
-    return t^2 + 2t + 1
-end
-
-# Call the general_memory_function with the structure_factor function
-result = general_memory_function(structure_factor; limits = [0, 10])
-
-println(result)  # Output: 383.3333333333333
source
PolaronMobility.h_iMethod
h_i(i, v, w)

Calculates the normal-mode (the eigenmodes) frequency of the coupling between the electron and the `ith' fictitious mass that approximates the exact electron-phonon interaction with a harmonic coupling to a massive fictitious particle.

Required for calculating the polaron free energy.

Note: Not to be confused with the number of physical phonon branches; many phonon branches could be approximated with one or two etc. fictitious masses for example. The number of fictitious mass does not necessarily need to match the number of phonon branches.

Arguments

  • i::Integer: enumerates the current fictitious mass.
  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
source
PolaronMobility.holstein_couplingMethod
holstein_coupling(k, α, ω; dims = 1)

Calculate the coupling strength for the Holstein lattice polaron model.

Arguments

  • k: a scalar value representing the k-coordinate in k-space
  • α: a scalar value representing the coupling constant
  • ω: a scalar value representing the phonon frequency
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.

Returns

The coupling strength for the Holstein model.

Example

result = holstein_coupling(2.0, 0.5, 1.0; dims = 3)
-println(result)

Expected Output: 6.0

source
PolaronMobility.holstein_energy_k_spaceMethod
holstein_energy_k_space(v, w, α, ωβ...; dims = 3, rₚ = 1, a = 1, limits = [-π, π])

Calculate the total energy, kinetic energy, and interaction energy of the Holstein lattice polaron.

Arguments

  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: (optional) a scalar value representing the inverse temperature.
  • dims: The number of dimensions of the system (default is 3).
  • rₚ: The characteristic polaron radius (default is 1).
  • a: The lattice constant (default is 1).
  • limits: The limits of integration for the interaction energy calculation (default is [-π, π]).

Returns

  • total_energy: The calculated total polaron energy.
  • kinetic_energy: The calculated polaron kinetic energy.
  • interaction_energy: The calculated polaron interaction energy.
source
PolaronMobility.holstein_interaction_energyMethod
holstein_interaction_energy(v, w, α, ω; dims = 3)

Calculate the interaction energy between electrons and phonons in the Holstein model.

Arguments

  • v: A scalar representing a variational parameter.
  • w: A scalar representing a variational parameter.
  • α: A scalar representing the electron-phonon coupling.
  • ω: A scalar representing the adiabaticity.
  • dims: An optional parameter representing the number of dimensions (default is 3).

Returns

  • integral: The interaction energy between electrons and phonons in the Holstein model.

Example

v = 0.2
-w = 0.1
-α = 0.5
-ω = 0.3
-result = holstein_interaction_energy(v, w, α, ω)
-println(result)

This example calculates the interaction energy for given values of v, w, α, and ω. The result is then printed.

source
PolaronMobility.holstein_interaction_energyMethod
holstein_interaction_energy(v, w, α, ω, β; dims = 3)

Electron-phonon interaction energy for the Holstein mode at finite temperature. Here the k-space integral is evaluated analytically.

Arguments

  • v: A scalar representing a variational parameter.
  • w: A scalar representing a variational parameter.
  • α: A scalar representing the electron-phonon coupling.
  • ω: A scalar representing the adiabaticity.
  • β: A scalar representing the inverse temperature.
  • dims: An optional argument representing the number of dimensions. Default is 3.

Returns

  • integral: The electron-phonon interaction energy for the Holstein mode at finite temperature.

Example

v = 0.2
+Structure to contain material-specific data.
source
PolaronMobility.AMethod
A(v, w, ω, β)

Hellwarth's A expression from Eqn. (62b) in Hellwarth et al. 1999 PRB. Part of the overall free energy expression.

See Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.AMethod
A(v, w, β)

Generalisation of the A function from Eqn. (62b) in Hellwarth et al. 1999. This is the Helmholtz free energy of the trial model.

Required for calculating the polaron free energy.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
  • β::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.

See Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.AMethod
A(v, w, n)

Calculates A(v, w, β) but at zero-temperature, β = Inf.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
source
PolaronMobility.BMethod
B(v, w, α, β)

Generalisation of the B function from Eqn. (62c) in Hellwarth et al. 1999. This is the expected value of the exact action <S_j> taken w.r.t trial action, given for the 'jth' phonon mode.

Required for calculating the polaron free energy.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
  • α::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for the 'jth' phonon mode.
  • β::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.

See Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.BMethod
B(v, w, α; rtol = 1e-3)

Calculates B(v, w, α, β) but at zero-temperature, β = Inf.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
  • α::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for the 'jth' phonon mode.
source
PolaronMobility.CMethod
C(v, w, ω, β)

Hellwarth's C expression from Eqn. (62e) in Hellwarth et al. 1999 PRB. Part of the overall free energy expression.

See Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.CMethod
C(v, w, β)

Generalisation of the C function from Eqn. (62e) in Hellwarth et al. 1999. This is the expected value of the trial action <S_0> taken w.r.t trial action.

Required for calculating the polaron free energy.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
  • β::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.

See Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.CMethod
C(v, w)

Calculates C(v, w, β) but at zero-temperature, β = Inf.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
source
PolaronMobility.C_ijMethod
C_ij(i, j, v, w)

Calculates the element to the coupling matrix C_ij (a generalisation of Feynman's C coupling variational parameter in Feynman 1955) between the electron and the ith' andjth' fictitious masses that approximates the exact electron-phonon interaction with a harmonic coupling to a massive fictitious particle.

Required for calculating the polaron free energy.

Note: Not to be confused with the number of physical phonon branches; many phonon branches could be approximated with one or two etc. fictitious masses for example. The number of fictitious mass does not necessarily need to match the number of phonon branches.

Arguments

  • i::Integer, j::Integer: enumerate the current fictitious masses under focus (also the index of the element in the coupling matrix C)
  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.

See Feynman 1955: http://dx.doi.org/10.1103/PhysRev.97.660.

source
PolaronMobility.DMethod
D(τ, v, w, β)

Calculates the recoil function (a generalisation of D(u) in Eqn. (35c) in FHIP 1962) that approximates the exact influence (recoil effects) of the phonon bath on the electron with the influence of the fictitious masses attached by springs to the electron. It appears in the exponent of the intermediate scattering function.

Arguments

  • τ::Float64: is the imaginary time variable.
  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
  • β::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.

See FHIP 1962: https://doi.org/10.1103/PhysRev.127.1004.

source
PolaronMobility.DMethod
D(τ, v, w)

Calculates the recoil function at zero-temperature.

Arguments

  • τ::Float64: is the imaginary time variable.
  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
source
PolaronMobility.HellwarthASchemeMethod
HellwarthAScheme(phonon_modes; T=295, convergence=1e-6)

Multiple phonon mode reduction to a single effective frequency. Temperature dependent, defaults to T = 295 K.

Solved iteratively by bisection until Δfreq < convergence.

Follows Hellwarth et al. 1999 PRB 'A' scheme, Eqn. (50) RHS.

See Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.HellwarthBSchemeMethod
HellwarthBScheme(LO)

LO an array assumed to be of [freq ; absolute ir activity]

Multiple phonon mode reduction to a single effective frequency. Hellwarth et al. 1999 PRB, 'B scheme'; the athermal method. Averaging procedure is constructed by considering the average effect of the action of multiple branches.

Follows Eqn. (58) in this paper, assuming typo on LHS, should actually be W_e.

See Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.feynmanvwMethod
feynmanvw(v, w, αωβ...; upper_limit = Inf64)

Minimises the multiple phonon mode free energy function for a set of vₚ and wₚ variational parameters. The variational parameters follow the inequality: v₁ > w₁ > v₂ > w₂ > ... > vₙ > wₙ. Generalises feynmanvw to multiple variational parameters.

Arguments

  • v::Vector{Float64}: vector of initial v parameters.
  • w::Vector{Float64}: vector of initial w parameters.
  • α::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for one or many phonon modes.
  • ω::Union{Float64, Vector{Float64}}: phonon mode frequencies (2π THz) for one or many phonon modes.
  • β::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) for one or many phonon modes.

See also F.

source
PolaronMobility.frohlich_complex_conductivityMethod

frohlichcomplexconductivity(Ω, β, α, v, w; rtol = 1e-3)

Calculate the complex conductivity σ(Ω) of the polaron at finite temperatures for a given frequency Ω (equal to 1 / Z(Ω) with Z the complex impedence).

Arguments

  • Ω::Float64: is the frequency (2π THz) of applied electric field.
  • β::Float64: is the reduced thermodynamic betas.
  • α::Float64: is the Frohlich alpha coupling parameter.
  • v::Float64: is the 'v' variational parameter.
  • w::Float64: is the 'w' variational parameter.
  • rtol: relative tolerance for the accuracy of any quadrature integrations.

See also polaron_complex_impedence

source
PolaronMobility.frohlich_complex_impedenceMethod
frohlich_complex_impedence(Ω, β, α, v, w; rtol = 1e-3, T = nothing, verbose = false)

Calculate the complex impedence Z(Ω) of the polaron at finite temperatures for a given frequency Ω (Eqn. (41) in FHIP 1962).

Arguments

  • Ω::Float64: is the frequency (2π THz) of applied electric field.
  • β::Float64: is the reduced thermodynamic betas.
  • α::Float64: is the Frohlich alpha coupling parameter.
  • v::Float64: is the 'v' variational parameter.
  • w::Float64: is the 'w' variational parameter.
  • rtol: relative tolerance for the accuracy of any quadrature integrations.
  • T: is a token used by make_polaron() to keep track of the temperature for printing during a calculation. Do not alter.
  • verbose: is used by make_polaron() to specify whether or not to print. Ignore.

See FHIP 1962: https://doi.org/10.1103/PhysRev.127.1004.

source
PolaronMobility.frohlich_couplingMethod
frohlich_coupling(k, α, ω)

Calculate the coupling strength for the Frohlich continuum polaron model.

Arguments

  • k: a scalar value representing the k-coordinate in k-space
  • α: a scalar value representing the coupling constant
  • ω: a scalar value representing the phonon frequency

Returns

The coupling strength for the Frohlich continuum polaron model.

Example

result = frohlich_coupling(2.0, 0.5, 1.0)
+println(result)

Expected Output: 6.0

source
PolaronMobility.frohlich_energyMethod
F(v, w, α, ω, β)

Calculates the Helmholtz free energy of the polaron for a material with multiple phonon branches.

This generalises the Osaka 1959 (below Eqn. (22)) and Hellwarth. et al 1999 (Eqn. (62a)) free energy expressions.

Arguments

  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
  • α::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for the 'jth' phonon mode.
  • ω::Union{Float64, Vector{Float64}}: phonon mode frequencies (2π THz).
  • β::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.

See Osaka, Y. (1959): https://doi.org/10.1143/ptp.22.437 and Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.

source
PolaronMobility.frohlich_energy_k_spaceMethod
frohlich_energy_k_space(v, w, α, ωβ...; rₚ = 1, limits = [0, Inf])

Calculate the total energy, kinetic energy, and interaction energy of the Frohlich lattice polaron.

Arguments

  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: (optional) a scalar value representing the inverse temperature.
  • rₚ: The characteristic polaron radius (default is 1).
  • limits: The limits of integration for the interaction energy calculation (default is [0, Inf]).

Returns

  • total_energy: The calculated total polaron energy.
  • kinetic_energy: The calculated polaron kinetic energy.
  • interaction_energy: The calculated polaron interaction energy.
source
PolaronMobility.frohlich_interaction_energyMethod
frohlich_interaction_energy(v, w, α, ωβ...)

Integral of Eqn. (31) in Feynman 1955. Part of the overall ground-state energy expression.

See Feynman 1955: http://dx.doi.org/10.1103/PhysRev.97.660.

source
PolaronMobility.frohlich_interaction_energy_k_spaceMethod
frohlich_interaction_energy_k_space(v, w, α, ω, β; rₚ = 1, limits = [0, Inf])

Calculate the Frohlich polaron interaction energy in k-space at finite temperaure.

Arguments

  • τ: a scalar value representing the imaginary time.
  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].

Returns

A scalar value representing the Frohlich polaron interaction energy in k-space at finite temperature.

source
PolaronMobility.frohlich_memory_function_k_spaceMethod
frohlich_memory_function_k_space(Ω, v, w, α, ω, β; rₚ = 1, limits = [0, Inf])

Calculate the memory function for the Frohlich model in k-space at finite temperature and frequency.

Arguments

  • Ω: a scalar value representing the frequency at which the memory function is evaluated.
  • v: a scalar value representing the optimal variational parameter.
  • w: a scalar value representing the optimal variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.

Returns

A scalar value representing the memory function of the Frohlich model in k-space at finite temperature evaluated at the frequency Ω.

source
PolaronMobility.frohlich_mobility_k_spaceMethod
frohlich_mobility_k_space(v, w, α, ω, β; rₚ = 1, limits = [0, Inf])

Calculate the DC mobility in k-space for a Frohlich polaron system at finite temperature.

Arguments

  • v: a scalar value representing the optimal variational parameter.
  • w: a scalar value representing the optimal variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.

Returns

The DC mobility in k-space for the Frohlich polaron system at finite temperature.

source
PolaronMobility.frohlich_structure_factor_k_spaceMethod
frohlich_structure_factor_k_space(t, v, w, α, ωβ...; limits = [0, Inf])

Calculate the structure factor in k-space for the Frohlich continuum polaron model at finite temperature.

Arguments

  • t: a scalar value representing the real time.
  • v: a scalar value representing a variational parameter.
  • w: a scalar value representing a variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.

Returns

A scalar value representing the calculated structure factor in k-space for the Frohlich continuum polaron model at finite temperature.

source
PolaronMobility.frohlichalphaMethod
frohlichalpha(ε_Inf, ε_S, freq, m_eff)

Calculates the Frohlich alpha parameter, for a given dielectric constant, frequency (f) of phonon in Hertz, and effective mass (in units of the bare electron mass).

See Feynman 1955: http://dx.doi.org/10.1103/PhysRev.97.660.

source
PolaronMobility.frohlichalphaMethod
frohlichalpha(ϵ_optic, ϵ_ionic, ϵ_total, phonon_mode_freq, m_eff)

Calculates the partial dielectric electron-phonon coupling parameter for a given longitudinal optical phonon mode.

This decomposes the original Frohlich alpha coupling parameter (defined for a single phonon branch) into contributions from multiple phonon branches.

Arguments

  • ϵ_optic::Float64: is the optical dielectric constant of the material.
  • ϵ_ionic::Float64: is the ionic dielectric contribution from the phonon mode.
  • ϵ_total::Float64: is the total ionic dielectric contribution from all phonon modes of the material.
  • phonon_mode_freq::Float64: is the frequency of the phonon mode (THz).
  • m_eff::Float64 is the band mass of the electron (in units of electron mass m_e).
source
PolaronMobility.frohlichpolaronMethod
polaron(αrange, Trange, Ωrange, ω, v_guesses, w_guesses; verbose=false)

Outer constructor for the Polaron type. This function evaluates model data for the polaron, i.e. unitless and not material specific.

Examples

julia> polaron(6, 300, 3, 1.0, 3.6, 2.8)
source
PolaronMobility.frohlichpolaronMethod
polaron(material::Material, TΩrange...; v_guesses=3.11, w_guesses=2.87, verbose=false)

Material specific constructors that use material specific parameters to parameterise the polaron. Material data is inputted through the Material type. Returns all data in either SI units or other common, suitable units otherwise.

source
PolaronMobility.h_iMethod
h_i(i, v, w)

Calculates the normal-mode (the eigenmodes) frequency of the coupling between the electron and the `ith' fictitious mass that approximates the exact electron-phonon interaction with a harmonic coupling to a massive fictitious particle.

Required for calculating the polaron free energy.

Note: Not to be confused with the number of physical phonon branches; many phonon branches could be approximated with one or two etc. fictitious masses for example. The number of fictitious mass does not necessarily need to match the number of phonon branches.

Arguments

  • i::Integer: enumerates the current fictitious mass.
  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
source
PolaronMobility.holstein_couplingMethod
holstein_coupling(k, α, ω; dims = 1)

Calculate the coupling strength for the Holstein lattice polaron model.

Arguments

  • k: a scalar value representing the k-coordinate in k-space
  • α: a scalar value representing the coupling constant
  • ω: a scalar value representing the phonon frequency
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.

Returns

The coupling strength for the Holstein model.

Example

result = holstein_coupling(2.0, 0.5, 1.0; dims = 3)
+println(result)

Expected Output: 6.0

source
PolaronMobility.holstein_energy_k_spaceMethod
holstein_energy_k_space(v, w, α, ωβ...; dims = 3, rₚ = 1, a = 1, limits = [-π, π])

Calculate the total energy, kinetic energy, and interaction energy of the Holstein lattice polaron.

Arguments

  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: (optional) a scalar value representing the inverse temperature.
  • dims: The number of dimensions of the system (default is 3).
  • rₚ: The characteristic polaron radius (default is 1).
  • a: The lattice constant (default is 1).
  • limits: The limits of integration for the interaction energy calculation (default is [-π, π]).

Returns

  • total_energy: The calculated total polaron energy.
  • kinetic_energy: The calculated polaron kinetic energy.
  • interaction_energy: The calculated polaron interaction energy.
source
PolaronMobility.holstein_interaction_energyMethod
holstein_interaction_energy(v, w, α, ωβ...; dims = 3)

Electron-phonon interaction energy for the Holstein mode at finite temperature. Here the k-space integral is evaluated analytically.

Arguments

  • v: A scalar representing a variational parameter.
  • w: A scalar representing a variational parameter.
  • α: A scalar representing the electron-phonon coupling.
  • ω: A scalar representing the adiabaticity.
  • β: A scalar representing the inverse temperature.
  • dims: An optional argument representing the number of dimensions. Default is 3.

Returns

  • integral: The electron-phonon interaction energy for the Holstein mode at finite temperature.

Example

v = 0.2
 w = 0.1
 α = 0.5
 ω = 0.3
 β = 1.0
 result = holstein_interaction_energy(v, w, α, ω, β)
-println(result)

This example calculates the electron-phonon interaction energy for given values of v, w, α, ω, and β. The result is then printed.

source
PolaronMobility.holstein_interaction_energy_integrandMethod
holstein_interaction_energy_integrand(τ, v, w, α, ω; dims = 3)

Calculate the integrand for the Holstein interaction energy.

Arguments

  • τ: A scalar representing the imaginary time.
  • v: A scalar representing a variational parameter.
  • w: A scalar representing a variational parameter.
  • α: A scalar representing the electron-phonon coupling.
  • ω: A scalar representing the adiabaticity.
  • dims: An optional parameter representing the number of dimensions (default is 3).

Returns

The integrand for the Holstein interaction energy.

Example

τ = 0.5
-v = 0.2
-w = 0.1
-α = 0.3
-ω = 0.4
-result = holstein_interaction_energy_integrand(τ, v, w, α, ω)
-println(result)

This example calculates the integrand for the Holstein interaction energy using the given values of τ, v, w, α, and ω. The result is then printed.

source
PolaronMobility.holstein_interaction_energy_integrandMethod
holstein_interaction_energy_integrand(τ, v, w, α, ω, β; dims = 3)

Calculate the integrand for the Holstein interaction energy.

Arguments

  • τ: A scalar representing the imaginary time.
  • v: A scalar representing a variational parameter.
  • w: A scalar representing a variational parameter.
  • α: A scalar representing the electron-phonon coupling.
  • ω: A scalar representing the adiabaticity.
  • β: A scalar representing the inverse temperature.
  • dims: An optional parameter representing the number of dimensions (default is 3).

Returns

The integrand for the Holstein interaction energy.

Example

τ = 0.5
-v = 0.2
-w = 0.1
-α = 0.3
-ω = 0.4
-β = 1.0
-result = holstein_interaction_energy_integrand(τ, v, w, α, ω, β)
-println(result)

This example calculates the integrand for the Holstein interaction energy using the given values of τ, v, w, α, and ω. The result is then printed.

source
PolaronMobility.holstein_interaction_energy_integrand_k_spaceMethod
holstein_interaction_energy_integrand_k_space(τ, v, w, α, ω; dims = 3, rₚ = 1, a = 1, limits = [-π, π])

Calculate the integrand for the Holstein interaction energy in k-space at zero temperature.

Arguments

  • τ: a scalar value representing the imaginary time.
  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].

Returns

A scalar value representing the integrand for the Holstein interaction energy in k-space at zero temperature.

source
PolaronMobility.holstein_interaction_energy_integrand_k_spaceMethod
holstein_interaction_energy_integrand_k_space(τ, v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])

Calculate the integrand for the Holstein interaction energy in k-space at finite temperature.

Arguments

  • τ: a scalar value representing the imaginary time.
  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].

Returns

A scalar value representing the integrand for the Holstein interaction energy in k-space at finite temperature.

source
PolaronMobility.holstein_interaction_energy_k_spaceMethod
holstein_interaction_energy_k_space(v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])

Calculate the Holstein polaron interaction energy in k-space at zero temperaure.

Arguments

  • τ: a scalar value representing the imaginary time.
  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].

Returns

A scalar value representing the Holstein polaron interaction energy in k-space at zero temperature.

source
PolaronMobility.holstein_interaction_energy_k_spaceMethod
holstein_interaction_energy_k_space(v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])

Calculate the Holstein polaron interaction energy in k-space at finite temperaure.

Arguments

  • τ: a scalar value representing the imaginary time.
  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].

Returns

A scalar value representing the Holstein polaron interaction energy in k-space at finite temperature.

source
PolaronMobility.holstein_memory_functionMethod
holstein_memory_function(Ω, v, w, α, ω; dims = 3)

Calculate the integral of a structure factor using the general_memory_function function.

Arguments

  • Ω: The frequency parameter.
  • v, w, α, ω: Parameters used in the holstein_structure_factor function.
  • dims: Optional parameter specifying the number of dimensions, defaults to 3.

Returns

The integral value of the structure factor.

Example

result = holstein_memory_function(Ω, v, w, α, ω; dims = 3)

In this example, the holstein_memory_function is called with the parameters Ω, v, w, α, and ω. The dims parameter is optional and defaults to 3. The function calculates the structure factor using the holstein_structure_factor function and then calls the general_memory_function to calculate the integral of the structure factor. The result is stored in the result variable.

source
PolaronMobility.holstein_memory_functionMethod
holstein_memory_function(Ω, v, w, α, ω, β; dims = 3)

Calculate the memory function using the general_memory_function function.

Arguments

  • Ω: a parameter representing a frequency
  • v, w, α, ω, β: parameters used to calculate the structure factor
  • dims: an optional parameter representing the dimensions (default value is 3)

Returns

The result of the general_memory_function function, which represents the calculated memory function.

Example

result = holstein_memory_function(Ω, v, w, α, ω, β; dims = 3)

In this example, the holstein_memory_function is called with the input parameters Ω, v, w, α, ω, and β, and the optional parameter dims set to 3. The function calculates the memory function using the general_memory_function function and returns the result.

source
PolaronMobility.holstein_memory_function_k_spaceMethod
holstein_memory_function_k_space(Ω, v, w, α, ω; dims = 3, rₚ = 1, a = 1, limits = [-π, π])

Calculate the memory function for the Holstein model in k-space at zero temperature and finite frequency.

Arguments

  • Ω: a scalar value representing the frequency at which the memory function is evaluated.
  • v: a scalar value representing the optimal variational parameter.
  • w: a scalar value representing the optimal variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.

Returns

A scalar value representing the memory function of the Holstein model in k-space at zero temperature evaluated at the frequency Ω.

source
PolaronMobility.holstein_memory_function_k_spaceMethod
holstein_memory_function_k_space(Ω, v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])

Calculate the memory function for the Holstein model in k-space at finite temperature and frequency.

Arguments

  • Ω: a scalar value representing the frequency at which the memory function is evaluated.
  • v: a scalar value representing the optimal variational parameter.
  • w: a scalar value representing the optimal variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.

Returns

A scalar value representing the memory function of the Holstein model in k-space at finite temperature evaluated at the frequency Ω.

source
PolaronMobility.holstein_mobilityMethod
holstein_mobility(v, w, α, ω, β; dims = 3)

Calculate the mobility using the general_memory_function and holstein_structure_factor functions.

Arguments

  • v: Parameter used in the holstein_structure_factor function.
  • w: Parameter used in the holstein_structure_factor function.
  • α: Parameter used in the holstein_structure_factor function.
  • ω: Parameter used in the holstein_structure_factor function.
  • β: Parameter used in the holstein_structure_factor function.
  • dims: The dimensionality of the system. Default is 3.

Returns

The calculated mobility.

Example

v = 1.0
+println(result)

This example calculates the electron-phonon interaction energy for given values of v, w, α, ω, and β. The result is then printed.

source
PolaronMobility.holstein_interaction_energy_k_spaceMethod
holstein_interaction_energy_k_space(v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])

Calculate the Holstein polaron interaction energy in k-space at finite temperaure.

Arguments

  • τ: a scalar value representing the imaginary time.
  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].

Returns

A scalar value representing the Holstein polaron interaction energy in k-space at finite temperature.

source
PolaronMobility.holstein_memory_functionMethod
holstein_memory_function(Ω, v, w, α, ω, β; dims = 3)

Calculate the memory function using the general_memory_function function.

Arguments

  • Ω: a parameter representing a frequency
  • v, w, α, ω, β: parameters used to calculate the structure factor
  • dims: an optional parameter representing the dimensions (default value is 3)

Returns

The result of the general_memory_function function, which represents the calculated memory function.

Example

result = holstein_memory_function(Ω, v, w, α, ω, β; dims = 3)

In this example, the holstein_memory_function is called with the input parameters Ω, v, w, α, ω, and β, and the optional parameter dims set to 3. The function calculates the memory function using the general_memory_function function and returns the result.

source
PolaronMobility.holstein_memory_function_k_spaceMethod
holstein_memory_function_k_space(Ω, v, w, α, ωβ...; dims = 3)

Calculate the memory function for the Holstein model in k-space at finite temperature and frequency.

Arguments

  • Ω: a scalar value representing the frequency at which the memory function is evaluated.
  • v: a scalar value representing the optimal variational parameter.
  • w: a scalar value representing the optimal variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.

Returns

A scalar value representing the memory function of the Holstein model in k-space at finite temperature evaluated at the frequency Ω.

source
PolaronMobility.holstein_mobilityMethod
holstein_mobility(v, w, α, ω, β; dims = 3)

Calculate the mobility using the general_memory_function and holstein_structure_factor functions.

Arguments

  • v: Parameter used in the holstein_structure_factor function.
  • w: Parameter used in the holstein_structure_factor function.
  • α: Parameter used in the holstein_structure_factor function.
  • ω: Parameter used in the holstein_structure_factor function.
  • β: Parameter used in the holstein_structure_factor function.
  • dims: The dimensionality of the system. Default is 3.

Returns

The calculated mobility.

Example

v = 1.0
 w = 2.0
 α = 0.5
 ω = 1.0
@@ -69,57 +17,68 @@
 dims = 3
 
 result = holstein_mobility(v, w, α, ω, β, dims=dims)
-println(result)

This code calculates the mobility using the given parameters and prints the result.

source
PolaronMobility.holstein_mobility_k_spaceMethod
holstein_mobility_k_space(v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])

Calculate the DC mobility in k-space for a Holstein polaron system at finite temperature.

Arguments

  • v: a scalar value representing the optimal variational parameter.
  • w: a scalar value representing the optimal variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.

Returns

The DC mobility in k-space for the Holstein polaron system at finite temperature.

source
PolaronMobility.holstein_structure_factorMethod
holstein_structure_factor(t, v, w, α, ω; dims = 3)

Calculate the structure factor for the Holstein model.

Arguments

  • t: A scalar representing the time.
  • v: A scalar representing a parameter.
  • w: A scalar representing a parameter.
  • α: A scalar representing a parameter.
  • ω: A scalar representing a parameter.
  • dims: An optional integer representing the number of dimensions (default is 3).

Returns

The value of the structure factor.

Example

t = 0.5
-v = 0.2
-w = 0.1
-α = 1.0
-ω = 0.5
-result = holstein_structure_factor(t, v, w, α, ω)
-println(result)

This example calculates the structure factor for the given values of t, v, w, α, and ω. The result is then printed.

source
PolaronMobility.holstein_structure_factorMethod
holstein_structure_factor(t, v, w, α, ω, β; dims = 3)

Calculate the structure factor for the Holstein model.

Arguments

  • t: A scalar representing the time.
  • v: A scalar representing a parameter.
  • w: A scalar representing a parameter.
  • α: A scalar representing a coupling constant.
  • ω: A scalar representing a coupling constant.
  • β: A scalar representing the inverse temperature.
  • dims: An optional argument representing the number of dimensions. Default is 3.

Returns

The value of the structure factor for the given inputs.

Example

t = 0.5
+println(result)

This code calculates the mobility using the given parameters and prints the result.

source
PolaronMobility.holstein_mobility_k_spaceMethod
holstein_mobility_k_space(v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])

Calculate the DC mobility in k-space for a Holstein polaron system at finite temperature.

Arguments

  • v: a scalar value representing the optimal variational parameter.
  • w: a scalar value representing the optimal variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.

Returns

The DC mobility in k-space for the Holstein polaron system at finite temperature.

source
PolaronMobility.holstein_structure_factorMethod
holstein_structure_factor(t, v, w, α, ω, β; dims = 3)

Calculate the structure factor for the Holstein model.

Arguments

  • t: A scalar representing the time.
  • v: A scalar representing a parameter.
  • w: A scalar representing a parameter.
  • α: A scalar representing a coupling constant.
  • ω: A scalar representing a coupling constant.
  • β: A scalar representing the inverse temperature.
  • dims: An optional argument representing the number of dimensions. Default is 3.

Returns

The value of the structure factor for the given inputs.

Example

t = 0.5
 v = 0.2
 w = 0.1
 α = 0.3
 ω = 0.4
 β = 1.0
 result = holstein_structure_factor(t, v, w, α, ω, β)
-println(result)

This example demonstrates how to use the holstein_structure_factor function to calculate the structure factor for a given set of parameters. The function is called with the values of t, v, w, α, ω, and β as arguments, and the result is then printed.

source
PolaronMobility.holstein_structure_factor_k_spaceMethod
holstein_structure_factor_k_space(t, v, w, α, ω; dims = 3, rₚ = 1, a = 1, limits = [-π, π])

Calculate the structure factor in k-space for the Holstein lattice polaron model at zero temperature.

Arguments

  • t: a scalar value representing the real time.
  • v: a scalar value representing a variational parameter.
  • w: a scalar value representing a variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.

Returns

A scalar value representing the calculated structure factor in k-space for the Holstein lattice polaron model at zero temperature.

source
PolaronMobility.holstein_structure_factor_k_spaceMethod
holstein_structure_factor_k_space(t, v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])

Calculate the structure factor in k-space for the Holstein lattice polaron model at finite temperature.

Arguments

  • t: a scalar value representing the real time.
  • v: a scalar value representing a variational parameter.
  • w: a scalar value representing a variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.

Returns

A scalar value representing the calculated structure factor in k-space for the Holstein lattice polaron model at finite temperature.

source
PolaronMobility.inverse_Hellwarth_mobilityMethod
inverse_Hellwarth_mobility(v, w, α, ω, β)

Calculates the DC mobility using Hellwarth et al. 1999 Eqn. (2). Directly performs contour integration in Feynman1962, for finite temperature DC mobility. Eqns. (2) and (1) are going back to the general (pre low-T limit) formulas in Feynman1962. To evaluate these, you need to do the explicit contour integration to get the polaron self-energy.

See Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.

See also Hellwarth_mobility

source
PolaronMobility.inverse_frohlich_mobilityMethod
inverse_polaron_mobility(v, w, α, ω, β)

Calculate the inverse of the dc mobility μ of the polaron at finite temperatues (Eqn. (11.5) in F. Peeters and J. Devreese 1984) for a given frequency Ω.

Arguments

  • v::Float64: is the 'v' variational parameter.
  • w::Float64: is the 'w' variational parameter.
  • α::Float64: is the Frohlich alpha coupling parameter.
  • ω::Float64: is the angular phonon frequency.
  • β::Float64: is the reduced thermodynamic beta.
  • verbose: is used by make_polaron() to specify whether or not to print. Ignore.

See F. Peeters and J. Devreese 1984: https://doi.org/10.1016/S0081-1947(08)60312-4.

See also polaron_mobility, polaron_complex_conductivity

source
PolaronMobility.materialMethod
material(ϵ_optical, ϵ_static, m_eff, phonon_freq)
+println(result)

This example demonstrates how to use the holstein_structure_factor function to calculate the structure factor for a given set of parameters. The function is called with the values of t, v, w, α, ω, and β as arguments, and the result is then printed.

source
PolaronMobility.holstein_structure_factor_k_spaceMethod
holstein_structure_factor_k_space(t, v, w, α, ωβ...; dims = 3)

Calculate the structure factor in k-space for the Holstein lattice polaron model at finite temperature.

Arguments

  • t: a scalar value representing the real time.
  • v: a scalar value representing a variational parameter.
  • w: a scalar value representing a variational parameter.
  • α: a scalar value representing the coupling constant.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.
  • dims: an optional scalar value representing the dimensionality of the system. Default value is 3.
  • rₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.
  • a: an optional scalar value representing the lattice constant. Default value is 1.
  • limits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.

Returns

A scalar value representing the calculated structure factor in k-space for the Holstein lattice polaron model at finite temperature.

source
PolaronMobility.holsteinpolaronMethod
holstein(material::Material, TΩrange...; v_guesses=3.11, w_guesses=2.87, verbose=false)

Material specific constructors that use material specific parameters to parameterise the polaron. Material data is inputted through the Material type. Returns all data in either SI units or other common, suitable units otherwise.

source
PolaronMobility.inverse_Hellwarth_mobilityMethod
inverse_Hellwarth_mobility(v, w, α, ω, β)

Calculates the DC mobility using Hellwarth et al. 1999 Eqn. (2). Directly performs contour integration in Feynman1962, for finite temperature DC mobility. Eqns. (2) and (1) are going back to the general (pre low-T limit) formulas in Feynman1962. To evaluate these, you need to do the explicit contour integration to get the polaron self-energy.

See Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.

See also Hellwarth_mobility

source
PolaronMobility.inverse_frohlich_mobilityMethod
inverse_polaron_mobility(v, w, α, ω, β)

Calculate the inverse of the dc mobility μ of the polaron at finite temperatues (Eqn. (11.5) in F. Peeters and J. Devreese 1984) for a given frequency Ω.

Arguments

  • v::Float64: is the 'v' variational parameter.
  • w::Float64: is the 'w' variational parameter.
  • α::Float64: is the Frohlich alpha coupling parameter.
  • ω::Float64: is the angular phonon frequency.
  • β::Float64: is the reduced thermodynamic beta.
  • verbose: is used by make_polaron() to specify whether or not to print. Ignore.

See F. Peeters and J. Devreese 1984: https://doi.org/10.1016/S0081-1947(08)60312-4.

See also polaron_mobility, polaron_complex_conductivity

source
PolaronMobility.materialMethod
material(ϵ_optical, ϵ_static, m_eff, phonon_freq)
 
 Construct a 'struct Material' object from traditional Frohlich Hamiltonian parameters. 
 
-ϵ_ionic and α derived from these parmaters; other material properties filled with bogus values.
source
PolaronMobility.materialMethod
material(ϵ_optic, ϵ_static, m_eff, phonon_freqs, ir_activity, volume)
+ϵ_ionic and α derived from these parmaters; other material properties filled with bogus values.
source
PolaronMobility.materialMethod
material(ϵ_optic, ϵ_static, m_eff, phonon_freqs, ir_activity, volume)
 
 Construct a 'struct Material' object from a set of infrared activities and phonon
 frequencies, for use with the 'multiple phonon branches' extension of the code. 
 
 effective_freq calculated with the Hellwarth 'B' scheme; ϵ_ionic and α calculated from
-the infrared activties.
source
PolaronMobility.optical_absorptionMethod
optical_absorption(Ω, β, α, v, w; rtol = 1e-3)

Calculate the absorption coefficient Γ(Ω) for the polaron at at finite temperatures (Eqn. (11a) in DSG 1972) for a given frequency Ω.

Arguments

  • Ω::Float64: is the frequency (2π THz) of applied electric field.
  • β::Float64: is the reduced thermodynamic betas.
  • α::Float64: is the Frohlich alpha coupling parameter.
  • v::Float64: is the 'v' variational parameter.
  • w::Float64: is the 'w' variational parameter.
  • rtol: relative tolerance for the accuracy of any quadrature integrations.

See DSG 1972: https://doi.org/10.1103/PhysRevB.5.2367.

source
PolaronMobility.phonon_propagatorMethod
phonon_propagator(τ, ω, β)

Calculate the value of the phonon propagator at a given imaginary time (τ), phonon frequency (ω), and inverse temperature (β).

Arguments

  • τ: A scalar representing the imaginary time.
  • ω: A scalar representing the phonon frequency.
  • β: A scalar representing the inverse temperature.

Returns

The value of the phonon propagator.

Example

τ = 0.5
+the infrared activties.
source
PolaronMobility.phonon_propagatorMethod
phonon_propagator(τ, ω, β)

Calculate the value of the phonon propagator at a given imaginary time (τ), phonon frequency (ω), and inverse temperature (β).

Arguments

  • τ: A scalar representing the imaginary time.
  • ω: A scalar representing the phonon frequency.
  • β: A scalar representing the inverse temperature.

Returns

The value of the phonon propagator.

Example

τ = 0.5
 ω = 0.2
 β = 1.0
 result = phonon_propagator(τ, ω, β)
-println(result)

This example calculates the value of the phonon propagator for τ = 0.5, ω = 0.2, and β = 1.0. The result is then printed.

source
PolaronMobility.phonon_propagatorMethod
phonon_propagator(τ, ω)

Calculate the value of the phonon propagator based on the given inputs.

Arguments

  • τ: A scalar representing the imaginary time.
  • ω: A scalar representing the adiabaticity.

Example

τ = 0.5
+println(result)

This example calculates the value of the phonon propagator for τ = 0.5, ω = 0.2, and β = 1.0. The result is then printed.

source
PolaronMobility.phonon_propagatorMethod
phonon_propagator(τ, ω)

Calculate the value of the phonon propagator based on the given inputs.

Arguments

  • τ: A scalar representing the imaginary time.
  • ω: A scalar representing the adiabaticity.

Example

τ = 0.5
 ω = 0.2
 result = phonon_propagator(τ, ω)
-println(result)

This example calculates the value of the phonon propagator for the given values of τ and ω. The result is then printed.

Returns

The value of the phonon propagator.

source
PolaronMobility.polaronMethod
polaron(αrange, Trange, Ωrange, ω, v_guesses, w_guesses; verbose=false)

Outer constructor for the Polaron type. This function evaluates model data for the polaron, i.e. unitless and not material specific.

Examples

julia> polaron(6, 300, 3, 1.0, 3.6, 2.8)
source
PolaronMobility.polaronMethod
polaron(material::Material, TΩrange...; v_guesses=3.11, w_guesses=2.87, verbose=false)

Material specific constructors that use material specific parameters to parameterise the polaron. Material data is inputted through the Material type. Returns all data in either SI units or other common, suitable units otherwise.

source
PolaronMobility.polaron_propagatorMethod
polaron_propagator(τ, v, w, β)

Calculate the imaginary time polaron Green's function with temperature dependence.

Arguments

  • τ: A scalar representing the imaginary time.
  • v: A scalar representing a variational parameter.
  • w: A scalar representing a variational parameter.
  • β: A scalar representing the inverse temperature.

Returns

The value of the polaron propagator.

Example

τ = 0.5
+println(result)

This example calculates the value of the phonon propagator for the given values of τ and ω. The result is then printed.

Returns

The value of the phonon propagator.

source
PolaronMobility.polaron_memory_functionMethod
polaron_memory_function(Ω, structure_factor; limits = [0, Inf])

This function calculates the integral of a given structure factor with respect to time using the quadgk function from the QuadGK package.

Arguments

  • Ω: A scalar representing the frequency.
  • structure_factor: A function that returns the value of the structure factor at a given time.
  • limits (optional): A 2-element array specifying the lower and upper limits of integration. Default is [0, Inf].

Returns

The integral of the structure factor with respect to time.

Example

# Define a structure factor function
+function structure_factor(t)
+    # Implementation of the structure factor
+    # ...
+end
+
+# Calculate the memory function for a given frequency and structure factor
+Ω = 0.5
+limits = [0, 10]
+result = general_memory_function(Ω, structure_factor; limits = limits)
+println(result)

This example demonstrates how to use the general_memory_function to calculate the memory function for a given frequency Ω and structure factor function structure_factor. The limits argument is optional and specifies the lower and upper limits of integration. The result is then printed.

source
PolaronMobility.polaron_memory_functionMethod
general_memory_function(structure_factor; limits = [0, Inf])

Calculate the integral of a given function structure_factor using the quadgk function in Julia.

Arguments

  • structure_factor: A function that takes a single argument t and returns a value.
  • limits: An optional array specifying the lower and upper limits of integration. Default is [0, Inf].

Returns

  • integral: The result of the numerical integration of the function structure_factor over the specified limits.

Example

# Define the structure factor function
+function structure_factor(t)
+    return t^2 + 2t + 1
+end
+
+# Call the general_memory_function with the structure_factor function
+result = general_memory_function(structure_factor; limits = [0, 10])
+
+println(result)  # Output: 383.3333333333333
source
PolaronMobility.polaron_propagatorMethod
polaron_propagator(τ, v, w)

Calculate the value of the polaron propagator based on the given inputs.

Arguments

  • τ::Number: A scalar representing the imaginary time.
  • v::Number: A scalar representing a variational parameter.
  • w::Number: A scalar representing a variational parameter.

Returns

The value of the polaron propagator.

Example

τ = 0.5
 v = 0.2
 w = 0.1
-β = 1.0
-result = polaron_propagator(τ, v, w, β)
-println(result)

This example calculates the polaron propagator for given values of τ, v, w, and β. The result is then printed.

source
PolaronMobility.polaron_propagatorMethod
polaron_propagator(τ, v, w)

Calculate the value of the polaron propagator based on the given inputs.

Arguments

  • τ::Number: A scalar representing the imaginary time.
  • v::Number: A scalar representing a variational parameter.
  • w::Number: A scalar representing a variational parameter.

Returns

The value of the polaron propagator.

Example

τ = 0.5
+result = polaron_propagator(τ, v, w)
+println(result)

This example calculates the polaron propagator for the given values of τ, v, and w. The result is then printed.

source
PolaronMobility.polaron_propagatorMethod
polaron_propagator(τ, v, w, β)

Calculate the imaginary time polaron Green's function with temperature dependence.

Arguments

  • τ: A scalar representing the imaginary time.
  • v: A scalar representing a variational parameter.
  • w: A scalar representing a variational parameter.
  • β: A scalar representing the inverse temperature.

Returns

The value of the polaron propagator.

Example

τ = 0.5
 v = 0.2
 w = 0.1
-result = polaron_propagator(τ, v, w)
-println(result)

This example calculates the polaron propagator for the given values of τ, v, and w. The result is then printed.

source
PolaronMobility.puconvertMethod
puconvert(u::Unitful.Units, x::Number)

Interpret x as a quantity given in polaron units and convert it to the unit u.

source
PolaronMobility.punitMethod
punit(x::Unitful.Quantity)
+β = 1.0
+result = polaron_propagator(τ, v, w, β)
+println(result)

This example calculates the polaron propagator for given values of τ, v, w, and β. The result is then printed.

source
PolaronMobility.puconvertMethod
puconvert(u::Unitful.Units, x::Number)

Interpret x as a quantity given in polaron units and convert it to the unit u.

source
PolaronMobility.punitMethod
punit(x::Unitful.Quantity)
 punit(x::Unitful.Units)
-punit(x::Unitful.Dimensions)

Returns the appropriate polaron unit (a Unitful.Units object) for the dimension of x.

source
PolaronMobility.pustripMethod
pustrip(x::Unitful.Quantity)

Returns the value of the quantity converted to polaron units as a number type (i.e., with the units removed). This is equivalent to Unitful.ustrip(puconvert(x)).

source
PolaronMobility.save_polaronMethod
save_polaron(p::Polaron, prefix)

Saves data from 'polaron' into file "prefix". This is a .jdl file for storing the polaron data whilst preserving types. Allows for saving multidimensional arrays that sometimes arise in the polaron data. Each parameter in the NewPolaron type is saved as a dictionary entry. E.g. NewPolaron.α is saved under JLD.load("prefix.jld")["alpha"].

source
PolaronMobility.spherical_k_integralMethod
spherical_k_integral(coupling, propagator; rₚ = 1, limits = [0, Inf])

Calculate the k-space integral in spherical coordinates of the integrand spherical_k_integrand over a specified radius in k-space.

Arguments

  • coupling: A function that takes a scalar k value and returns a scalar value representing the coupling strength.
  • propagator: A scalar value representing the propagator.
  • rₚ: An optional scalar value representing the characteristic polaron radius. Default value is 1.
  • limits: An array of two scalar values representing the lower and upper limits of the integration range in spherical coordinates. Default is [0, Inf] for infinite sphere.

Returns

A scalar value representing the calculated integral over the specified range in spherical coordinates.

Example

coupling(k) = k^2  # define the coupling function
-propagator = 0.5  # define the propagator value
-result = spherical_k_integral(coupling, propagator; rₚ = 1, limits = [0, Inf])  # calculate the integral
-println(result)  # print the result

Expected Output: A scalar value representing the calculated k-space integral over the specified range in spherical coordinates.

source
PolaronMobility.spherical_k_integrandMethod
spherical_k_integrand(k, coupling, propagator; rₚ = 1)

Calculate the integrand for a k-space integral in spherical coordinates.

Arguments

  • k: a scalar value representing the k-coordinate in k-space
  • coupling: a function that takes a scalar k value and returns a scalar value representing the coupling strength
  • propagator: a scalar value representing the propagator
  • rₚ: an optional scalar value representing the radius

Returns

The calculated integrand as a scalar value.

Example

coupling(k) = k^2  # define the coupling function
-propagator = 0.5  # define the propagator value
-result = spherical_k_integrand(2.0, coupling, propagator; rₚ = 1)  # calculate the integrand for k = 2.0
-println(result)  # print the result

Expected Output: 0.5

source
PolaronMobility.vw_variationMethod
vw_variation(energy, initial_v, initial_w; lower_bounds = [0, 0], upper_bounds = [Inf, Inf])

This function optimizes the values of v and w to minimize the energy function energy(x[1] + x[2], x[2])[1]. It uses the Optim package to perform the optimization and returns the optimized values of v and w, as well as the minimized energy, kinetic energy, and potential energy.

Arguments

  • energy: A function that takes two arguments x and y and returns an array of energy components.
  • initial_v: The initial value of v.
  • initial_w: The initial value of w.
  • lower_bounds: An optional array representing the lower bounds for v and w optimization. Default is [0, 0].
  • upper_bounds: An optional array representing the upper bounds for v and w optimization. Default is [Inf, Inf].

Returns

  • Δv + w: The optimized value of v.
  • w: The optimized value of w.
  • energy_minimized: The minimized energy.
  • kinetic_energy: The kinetic energy corresponding to the minimized energy.
  • potential_energy: The potential energy corresponding to the minimized energy.

Example

energy(x, y) = [x^2 + y^2, x^2, y^2]
+punit(x::Unitful.Dimensions)

Returns the appropriate polaron unit (a Unitful.Units object) for the dimension of x.

source
PolaronMobility.pustripMethod
pustrip(x::Unitful.Quantity)

Returns the value of the quantity converted to polaron units as a number type (i.e., with the units removed). This is equivalent to Unitful.ustrip(puconvert(x)).

source
PolaronMobility.save_frohlich_polaronMethod
save_polaron(p::FrohlichPolaron, prefix)

Saves data from 'polaron' into file "prefix". This is a .jdl file for storing the polaron data whilst preserving types. Allows for saving multidimensional arrays that sometimes arise in the polaron data. Each parameter in the NewPolaron type is saved as a dictionary entry. E.g. NewPolaron.α is saved under JLD.load("prefix.jld")["alpha"].

source
PolaronMobility.save_holstein_polaronMethod
save_polaron(p::Polaron, prefix)

Saves data from 'polaron' into file "prefix". This is a .jdl file for storing the polaron data whilst preserving types. Allows for saving multidimensional arrays that sometimes arise in the polaron data. Each parameter in the NewPolaron type is saved as a dictionary entry. E.g. NewPolaron.α is saved under JLD.load("prefix.jld")["alpha"].

source
PolaronMobility.trial_energyMethod
trial_energy(v, w, ω, β)

Calculate the free electron energy at finite temperature.

Arguments

  • v: a scalar value representing a variational paramater.
  • w: a scalar value representing a variational paramater.
  • ω: a scalar value representing the phonon frequency.
  • β: a scalar value representing the inverse temperature.

Returns

A scalar value representing the calculated free electron energy at finite temperature.

Example

v = 0.5
+w = 1.0
+ω = 2.0
+β = 0.2
+result = electron_energy(v, w, ω, β; dims = 3)
+println(result)

Expected Output: A scalar value representing the calculated free electron energy at finite temperature.

source
PolaronMobility.vw_variationMethod
vw_variation(energy, initial_v, initial_w; lower_bounds = [0, 0], upper_bounds = [Inf, Inf])

This function optimizes the values of v and w to minimize the energy function energy(x[1] + x[2], x[2])[1]. It uses the Optim package to perform the optimization and returns the optimized values of v and w, as well as the minimized energy, kinetic energy, and potential energy.

Arguments

  • energy: A function that takes two arguments x and y and returns an array of energy components.
  • initial_v: The initial value of v.
  • initial_w: The initial value of w.
  • lower_bounds: An optional array representing the lower bounds for v and w optimization. Default is [0, 0].
  • upper_bounds: An optional array representing the upper bounds for v and w optimization. Default is [Inf, Inf].

Returns

  • Δv + w: The optimized value of v.
  • w: The optimized value of w.
  • energy_minimized: The minimized energy.
  • kinetic_energy: The kinetic energy corresponding to the minimized energy.
  • potential_energy: The potential energy corresponding to the minimized energy.

Example

energy(x, y) = [x^2 + y^2, x^2, y^2]
 initial_v = 0.5
 initial_w = 0.2
 lower_bounds = [0, 0]
 upper_bounds = [Inf, Inf]
 result = vw_variation(energy, initial_v, initial_w; lower_bounds, upper_bounds)
-println(result)

This example demonstrates how to use the vw_variation function. It defines an energy function energy(x, y) that returns an array of energy components. It then calls vw_variation with the initial values of v and w, as well as lower and upper bounds for the optimization. The function optimizes v and w to minimize the energy and returns the optimized values, as well as the minimized energy, kinetic energy, and potential energy. The result is then printed.

source
PolaronMobility.κ_iMethod
κ_i(i, v, w)

Calculates the spring-constant coupling the electron to the 'ith' fictitious mass that approximates the exact electron-phonon interaction with a harmonic coupling to a massive fictitious particle.

Required for calculating the polaron free energy.

Note: Not to be confused with the number of physical phonon branches; many phonon branches could be approximated with one or two etc. fictitious masses for example. The number of fictitious mass does not necessarily need to match the number of phonon branches.

Arguments

  • i::Integer: enumerates the current fictitious mass.
  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
source
PolaronMobility.ϵ_ionic_modeMethod
ϵ_ionic_mode(phonon_mode_freq, ir_activity, volume)

Calculate the ionic contribution to the dielectric function for a given phonon mode.

Arguments

  • phonon_mode_freq::Float64: is the frequency of the mode in THz.
  • ir_activity::Float64: is the infra-red activity of the mode in e²amu⁻¹.
  • volume::Float64: is the volume of the unit cell of the material in m³.
source
PolaronMobility.ϵ_totalMethod
ϵ_total(freqs_and_ir_activity, volume)

Calculate the total ionic contribution to the dielectric function from all phonon modes.

Arguments

  • freqs_and_ir_activity::Matrix{Float64}: is a matrix containeing the phonon mode frequencies (in THz) in the first column and the infra-red activities (in e²amu⁻¹) in the second column.
  • volume::Float64: is the volume of the unit cell of the material in m^3.
source
+println(result)

This example demonstrates how to use the vw_variation function. It defines an energy function energy(x, y) that returns an array of energy components. It then calls vw_variation with the initial values of v and w, as well as lower and upper bounds for the optimization. The function optimizes v and w to minimize the energy and returns the optimized values, as well as the minimized energy, kinetic energy, and potential energy. The result is then printed.

source
PolaronMobility.κ_iMethod
κ_i(i, v, w)

Calculates the spring-constant coupling the electron to the 'ith' fictitious mass that approximates the exact electron-phonon interaction with a harmonic coupling to a massive fictitious particle.

Required for calculating the polaron free energy.

Note: Not to be confused with the number of physical phonon branches; many phonon branches could be approximated with one or two etc. fictitious masses for example. The number of fictitious mass does not necessarily need to match the number of phonon branches.

Arguments

  • i::Integer: enumerates the current fictitious mass.
  • v::Vector{Float64}: is a vector of the v variational parameters.
  • w::Vector{Float64}: is a vector of the w variational parameters.
source
PolaronMobility.ϵ_ionic_modeMethod
ϵ_ionic_mode(phonon_mode_freq, ir_activity, volume)

Calculate the ionic contribution to the dielectric function for a given phonon mode.

Arguments

  • phonon_mode_freq::Float64: is the frequency of the mode in THz.
  • ir_activity::Float64: is the infra-red activity of the mode in e²amu⁻¹.
  • volume::Float64: is the volume of the unit cell of the material in m³.
source
PolaronMobility.ϵ_totalMethod
ϵ_total(freqs_and_ir_activity, volume)

Calculate the total ionic contribution to the dielectric function from all phonon modes.

Arguments

  • freqs_and_ir_activity::Matrix{Float64}: is a matrix containeing the phonon mode frequencies (in THz) in the first column and the infra-red activities (in e²amu⁻¹) in the second column.
  • volume::Float64: is the volume of the unit cell of the material in m^3.
source
diff --git a/dev/index.html b/dev/index.html index d0f5efc..25f511e 100644 --- a/dev/index.html +++ b/dev/index.html @@ -10,4 +10,4 @@ author = {Jarvist Moore Frost}, title = {Calculating polaron mobility in halide perovskites}, journal = {Physical Review B} -} +} diff --git a/dev/scientific_discussion/index.html b/dev/scientific_discussion/index.html index 7acaebf..ef2c33c 100644 --- a/dev/scientific_discussion/index.html +++ b/dev/scientific_discussion/index.html @@ -136,4 +136,4 @@ title = {Velocity Acquired by an Electron in a Finite Electric Field in a Polar Crystal}, journal = {Physical Review B} } - + diff --git a/dev/search/index.html b/dev/search/index.html index 386d66b..35e60a9 100644 --- a/dev/search/index.html +++ b/dev/search/index.html @@ -1,2 +1,2 @@ -Search · PolaronMobility.jl documentation

Loading search...

    +Search · PolaronMobility.jl documentation

    Loading search...

      diff --git a/dev/search_index.js b/dev/search_index.js index 1baa011..652a791 100644 --- a/dev/search_index.js +++ b/dev/search_index.js @@ -1,3 +1,3 @@ var documenterSearchIndex = {"docs": -[{"location":"functions/#Functions","page":"Functions","title":"Functions","text":"","category":"section"},{"location":"functions/","page":"Functions","title":"Functions","text":"Modules = [PolaronMobility]\nOrder = [:type, :function]","category":"page"},{"location":"functions/#PolaronMobility.Material","page":"Functions","title":"PolaronMobility.Material","text":"mutable struct Material\n\nStructure to contain material-specific data.\n\n\n\n\n\n","category":"type"},{"location":"functions/#PolaronMobility.Polaron","page":"Functions","title":"PolaronMobility.Polaron","text":"Polaron(x...)\n\nType for storing the polaron information, x....\n\n\n\n\n\n","category":"type"},{"location":"functions/#PolaronMobility.A-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.A","text":"A(v, w, ω, β)\n\nHellwarth's A expression from Eqn. (62b) in Hellwarth et al. 1999 PRB. Part of the overall free energy expression.\n\nSee Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.A-Tuple{Vector, Vector, Any, Any}","page":"Functions","title":"PolaronMobility.A","text":"A(v, w, β)\n\nGeneralisation of the A function from Eqn. (62b) in Hellwarth et al. 1999. This is the Helmholtz free energy of the trial model.\n\nRequired for calculating the polaron free energy.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\nβ::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.\n\nSee Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.A-Tuple{Vector, Vector, Any}","page":"Functions","title":"PolaronMobility.A","text":"A(v, w, n)\n\nCalculates A(v, w, β) but at zero-temperature, β = Inf.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.B-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.B","text":"B(v, w, α, ω)\n\nIntegral of Eqn. (31) in Feynman 1955. Part of the overall ground-state energy expression.\n\nSee Feynman 1955: http://dx.doi.org/10.1103/PhysRev.97.660.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.B-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.B","text":"B(v, w, α, ω, β)\n\nHellwarth's B expression from Eqn. (62c) in Hellwarth et al. 1999 PRB. Part of the overall free energy expression.\n\nSee Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.B-Tuple{Vector, Vector, Any, Any, Any}","page":"Functions","title":"PolaronMobility.B","text":"B(v, w, α, β)\n\nGeneralisation of the B function from Eqn. (62c) in Hellwarth et al. 1999. This is the expected value of the exact action taken w.r.t trial action, given for the 'jth' phonon mode.\n\nRequired for calculating the polaron free energy.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\nα::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for the 'jth' phonon mode. \nβ::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.\n\nSee Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.B-Tuple{Vector, Vector, Any, Any}","page":"Functions","title":"PolaronMobility.B","text":"B(v, w, α; rtol = 1e-3)\n\nCalculates B(v, w, α, β) but at zero-temperature, β = Inf.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\nα::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for the 'jth' phonon mode. \n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.C-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.C","text":"C(v, w, ω, β)\n\nHellwarth's C expression from Eqn. (62e) in Hellwarth et al. 1999 PRB. Part of the overall free energy expression.\n\nSee Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.C-Tuple{Vector, Vector, Any, Any}","page":"Functions","title":"PolaronMobility.C","text":"C(v, w, β)\n\nGeneralisation of the C function from Eqn. (62e) in Hellwarth et al. 1999. This is the expected value of the trial action taken w.r.t trial action.\n\nRequired for calculating the polaron free energy.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\nβ::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.\n\nSee Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.C-Tuple{Vector, Vector, Any}","page":"Functions","title":"PolaronMobility.C","text":"C(v, w)\n\nCalculates C(v, w, β) but at zero-temperature, β = Inf.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.C_ij-Tuple{Any, Any, Vector, Vector}","page":"Functions","title":"PolaronMobility.C_ij","text":"C_ij(i, j, v, w)\n\nCalculates the element to the coupling matrix C_ij (a generalisation of Feynman's C coupling variational parameter in Feynman 1955) between the electron and the ith' andjth' fictitious masses that approximates the exact electron-phonon interaction with a harmonic coupling to a massive fictitious particle. \n\nRequired for calculating the polaron free energy.\n\nNote: Not to be confused with the number of physical phonon branches; many phonon branches could be approximated with one or two etc. fictitious masses for example. The number of fictitious mass does not necessarily need to match the number of phonon branches.\n\nArguments\n\ni::Integer, j::Integer: enumerate the current fictitious masses under focus (also the index of the element in the coupling matrix C)\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\n\nSee Feynman 1955: http://dx.doi.org/10.1103/PhysRev.97.660.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.D-Tuple{Any, Vector, Vector, Any, Any}","page":"Functions","title":"PolaronMobility.D","text":"D(τ, v, w, β)\n\nCalculates the recoil function (a generalisation of D(u) in Eqn. (35c) in FHIP 1962) that approximates the exact influence (recoil effects) of the phonon bath on the electron with the influence of the fictitious masses attached by springs to the electron. It appears in the exponent of the intermediate scattering function.\n\nArguments\n\nτ::Float64: is the imaginary time variable.\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\nβ::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.\n\nSee FHIP 1962: https://doi.org/10.1103/PhysRev.127.1004.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.D-Tuple{Any, Vector, Vector}","page":"Functions","title":"PolaronMobility.D","text":"D(τ, v, w)\n\nCalculates the recoil function at zero-temperature.\n\nArguments\n\nτ::Float64: is the imaginary time variable.\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.FHIP_mobility_lowT-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.FHIP_mobility_lowT","text":"FHIP_mobility_lowT(v, w, α, ω, β)\n\nFHIP mobility in the low-temperature approximation.\n\nSee also inverse_FHIP_mobility_lowT\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.HellwarthAScheme-Tuple{Any}","page":"Functions","title":"PolaronMobility.HellwarthAScheme","text":"HellwarthAScheme(phonon_modes; T=295, convergence=1e-6)\n\nMultiple phonon mode reduction to a single effective frequency. Temperature dependent, defaults to T = 295 K.\n\nSolved iteratively by bisection until Δfreq < convergence.\n\nFollows Hellwarth et al. 1999 PRB 'A' scheme, Eqn. (50) RHS.\n\nSee Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.HellwarthBScheme-Tuple{Any}","page":"Functions","title":"PolaronMobility.HellwarthBScheme","text":"HellwarthBScheme(LO)\n\nLO an array assumed to be of [freq ; absolute ir activity]\n\nMultiple phonon mode reduction to a single effective frequency. Hellwarth et al. 1999 PRB, 'B scheme'; the athermal method. Averaging procedure is constructed by considering the average effect of the action of multiple branches.\n\nFollows Eqn. (58) in this paper, assuming typo on LHS, should actually be W_e.\n\nSee Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.Hellwarth_mobility-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.Hellwarth_mobility","text":"Hellwarth_mobility(v, w, α, ω, β)\n\nThe Hellwarth polaron mobility.\n\nSee also inverse_Hellwarth_mobility\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.Kadanoff_mobility_lowT-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.Kadanoff_mobility_lowT","text":"Kadanoff_mobility_lowT(v, w, α, ω, β)\n\nKadanoff mobility in the low-temperature approximation.\n\nSee also inverse_Kadanoff_mobility_lowT\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.addunits!-Tuple{Material}","page":"Functions","title":"PolaronMobility.addunits!","text":"addunits!(polaron::Material)\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.addunits!-Tuple{Polaron}","page":"Functions","title":"PolaronMobility.addunits!","text":"addunits!(polaron::Polaron)\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.cartesian_k_integral-Tuple{Any, Any}","page":"Functions","title":"PolaronMobility.cartesian_k_integral","text":"cartesian_k_integral(coupling, propagator; rₚ = 1, a = 1, limits = [-π, π])\n\nCalculate the k-space integral in cartesian coordinates of the integrand cartesian_k_integrand over a specified range in k-space.\n\nArguments\n\ncoupling: A function that takes a scalar k value and returns a scalar value representing the coupling strength.\npropagator: A scalar value representing the propagator.\nrₚ: An optional scalar value representing the charactersitc polaron radius. Default value is 1.\na: An optional scalar value representing ther lattice constant. Default value is 1.\nlimits: An array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.\n\nReturns\n\nA scalar value representing the calculated k-space integral over the specified range in cartesian coordinates.\n\nExample\n\ncoupling(k) = k^2 # define the coupling function\npropagator = 0.5 # define the propagator value\nresult = cartesian_k_integral(coupling, propagator; rₚ = 1, a = 1, limits = [-π, π]) # calculate the integral\nprintln(result) # print the result\n\nExpected Output: A scalar value representing the calculated k-space integral over the specified range in cartesian coordinates.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.cartesian_k_integrand-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.cartesian_k_integrand","text":"cartesian_k_integrand(k, coupling, propagator; rₚ = 1)\n\nCalculate the integrand for a k-space integral in Cartesian coordinates.\n\nArguments\n\nk: a scalar value representing the k-coordinate in k-space\ncoupling: a function that takes a scalar k value and returns a scalar value representing the coupling strength\npropagator: a scalar value representing the propagator\nrₚ: an optional scalar value representing the radius\n\nExample Usage\n\ncoupling(k) = k^2 # define the coupling function\npropagator = 0.5 # define the propagator value\nresult = cartesian_k_integrand(2.0, coupling, propagator; rₚ = 1) # calculate the integrand for k = 2.0\nprintln(result) # print the result\n\nExpected Output: 0.5\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.effective_freqs-Tuple{Any, Any}","page":"Functions","title":"PolaronMobility.effective_freqs","text":"effective_freqs(freqs_and_ir_activity, num_var_params)\n\nGenerates a matrix of effective phonon modes with frequencies and infra-red activities derived from a larger matrix using the Principal Component Analysis (PCA) method.\n\nArguments\n\nfreqs_and_ir_activity::Matrix{Float64}: is a matrix containing the phonon mode frequencies (in THz) in the first column and the infra-red activities (in e²amu⁻¹) in the second column.\nnum_var_params::Integer: is the number of effective modes required (which needs to be less than the number of modes in freqs_and_ir_activity`).\n\n*** POSSIBLY REDUNDANT ***\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.electron_energy-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.electron_energy","text":"electron_energy(v, w, ω, β)\n\nCalculate the free electron energy at finite temperature.\n\nArguments\n\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\n\nReturns\n\nA scalar value representing the calculated free electron energy at finite temperature.\n\nExample\n\nv = 0.5\nw = 1.0\nω = 2.0\nβ = 0.2\nresult = electron_energy(v, w, ω, β; dims = 3)\nprintln(result)\n\nExpected Output: A scalar value representing the calculated free electron energy at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.electron_energy-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.electron_energy","text":"electron_energy(v, w, ω)\n\nCalculate the free electron energy at zero temperature.\n\nArguments\n\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nω: a scalar value representing the phonon frequency.\n\nReturns\n\nA scalar value representing the calculated free electron energy at zero temperature.\n\nExample\n\nv = 0.5\nw = 1.0\nω = 2.0\nβ = 0.2\nresult = electron_energy(v, w, ω)\nprintln(result)\n\nExpected Output: A scalar value representing the calculated free electron energy at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.feynmanvw-Tuple{Vector, Vector, Vararg{Any}}","page":"Functions","title":"PolaronMobility.feynmanvw","text":"feynmanvw(v, w, αωβ...; upper_limit = Inf64)\n\nMinimises the multiple phonon mode free energy function for a set of vₚ and wₚ variational parameters. The variational parameters follow the inequality: v₁ > w₁ > v₂ > w₂ > ... > vₙ > wₙ. Generalises feynmanvw to multiple variational parameters.\n\nArguments\n\nv::Vector{Float64}: vector of initial v parameters.\nw::Vector{Float64}: vector of initial w parameters.\nα::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for one or many phonon modes. \nω::Union{Float64, Vector{Float64}}: phonon mode frequencies (2π THz) for one or many phonon modes.\nβ::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) for one or many phonon modes.\n\nSee also F.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_complex_conductivity-Tuple{Any, Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.frohlich_complex_conductivity","text":"frohlichcomplexconductivity(Ω, β, α, v, w; rtol = 1e-3)\n\nCalculate the complex conductivity σ(Ω) of the polaron at finite temperatures for a given frequency Ω (equal to 1 / Z(Ω) with Z the complex impedence). \n\nArguments\n\nΩ::Float64: is the frequency (2π THz) of applied electric field.\nβ::Float64: is the reduced thermodynamic betas. \nα::Float64: is the Frohlich alpha coupling parameter.\nv::Float64: is the 'v' variational parameter.\nw::Float64: is the 'w' variational parameter. \nrtol: relative tolerance for the accuracy of any quadrature integrations.\n\nSee also polaron_complex_impedence\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_complex_impedence-Tuple{Any, Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.frohlich_complex_impedence","text":"frohlich_complex_impedence(Ω, β, α, v, w; rtol = 1e-3, T = nothing, verbose = false)\n\nCalculate the complex impedence Z(Ω) of the polaron at finite temperatures for a given frequency Ω (Eqn. (41) in FHIP 1962). \n\nArguments\n\nΩ::Float64: is the frequency (2π THz) of applied electric field.\nβ::Float64: is the reduced thermodynamic betas. \nα::Float64: is the Frohlich alpha coupling parameter.\nv::Float64: is the 'v' variational parameter.\nw::Float64: is the 'w' variational parameter. \nrtol: relative tolerance for the accuracy of any quadrature integrations.\nT: is a token used by make_polaron() to keep track of the temperature for printing during a calculation. Do not alter.\nverbose: is used by make_polaron() to specify whether or not to print. Ignore.\n\nSee FHIP 1962: https://doi.org/10.1103/PhysRev.127.1004.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_coupling-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.frohlich_coupling","text":"frohlich_coupling(k, α, ω)\n\nCalculate the coupling strength for the Frohlich continuum polaron model.\n\nArguments\n\nk: a scalar value representing the k-coordinate in k-space\nα: a scalar value representing the coupling constant\nω: a scalar value representing the phonon frequency\n\nReturns\n\nThe coupling strength for the Frohlich continuum polaron model.\n\nExample\n\nresult = frohlich_coupling(2.0, 0.5, 1.0)\nprintln(result)\n\nExpected Output: 6.0\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_energy-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.frohlich_energy","text":"F(v, w, α, ω)\n\nCalculates the zero-temperature ground-state energy of the polaron for a material with multiple phonon branches. Similar to F(v, w, α, ω, β) but with β = Inf. Generalises Eqn. (33) in Feynman 1955.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\nα::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for the 'jth' phonon mode. \nω::Union{Float64, Vector{Float64}}: phonon mode frequencies (2π THz). \n\nSee Feynman 1955: http://dx.doi.org/10.1103/PhysRev.97.660.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_energy-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.frohlich_energy","text":"F(v, w, α, ω, β)\n\nCalculates the Helmholtz free energy of the polaron for a material with multiple phonon branches. \n\nThis generalises the Osaka 1959 (below Eqn. (22)) and Hellwarth. et al 1999 (Eqn. (62a)) free energy expressions.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\nα::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for the 'jth' phonon mode. \nω::Union{Float64, Vector{Float64}}: phonon mode frequencies (2π THz).\nβ::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.\n\nSee Osaka, Y. (1959): https://doi.org/10.1143/ptp.22.437 and Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_energy_k_space-Tuple{Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.frohlich_energy_k_space","text":"frohlich_energy_k_space(v, w, α, ωβ...; rₚ = 1, limits = [0, Inf])\n\nCalculate the total energy, kinetic energy, and interaction energy of the Frohlich lattice polaron.\n\nArguments\n\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: (optional) a scalar value representing the inverse temperature.\nrₚ: The characteristic polaron radius (default is 1).\nlimits: The limits of integration for the interaction energy calculation (default is [0, Inf]).\n\nReturns\n\ntotal_energy: The calculated total polaron energy.\nkinetic_energy: The calculated polaron kinetic energy.\ninteraction_energy: The calculated polaron interaction energy.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_interaction_energy_integrand_k_space-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.frohlich_interaction_energy_integrand_k_space","text":"frohlich_interaction_energy_integrand_k_space(τ, v, w, α, ω; rₚ = 1, limits = [0, Inf])\n\nCalculate the integrand for the Frohlich interaction energy in k-space at finite zero temperaure.\n\nArguments\n\nτ: a scalar value representing the imaginary time.\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\nlimits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [0, Inf].\n\nReturns\n\nA scalar value representing the integrand for the Frohlich interaction energy in k-space at zero temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_interaction_energy_integrand_k_space-NTuple{6, Any}","page":"Functions","title":"PolaronMobility.frohlich_interaction_energy_integrand_k_space","text":"frohlich_interaction_energy_integrand_k_space(τ, v, w, α, ω, β)\n\nCalculate the integrand for the Frohlich interaction energy in k-space at finite temperaure.\n\nArguments\n\nτ: a scalar value representing the imaginary time.\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\nlimits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [0, Inf].\n\nReturns\n\nA scalar value representing the integrand for the Frohlich interaction energy in k-space at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_interaction_energy_k_space-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.frohlich_interaction_energy_k_space","text":"frohlich_interaction_energy_k_space(v, w, α, ω, β; rₚ = 1, limits = [0, Inf])\n\nCalculate the Frohlich polaron interaction energy in k-space at zero temperaure.\n\nArguments\n\nτ: a scalar value representing the imaginary time.\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].\n\nReturns\n\nA scalar value representing the Frohlich polaron interaction energy in k-space at zero temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_interaction_energy_k_space-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.frohlich_interaction_energy_k_space","text":"frohlich_interaction_energy_k_space(v, w, α, ω, β; rₚ = 1, limits = [0, Inf])\n\nCalculate the Frohlich polaron interaction energy in k-space at finite temperaure.\n\nArguments\n\nτ: a scalar value representing the imaginary time.\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].\n\nReturns\n\nA scalar value representing the Frohlich polaron interaction energy in k-space at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_memory_function_k_space-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.frohlich_memory_function_k_space","text":"frohlich_memory_function_k_space(Ω, v, w, α, ω; rₚ = 1, limits = [0, Inf])\n\nCalculate the memory function for the Frohlich model in k-space at zero temperature and finite frequency.\n\nArguments\n\nΩ: a scalar value representing the frequency at which the memory function is evaluated.\nv: a scalar value representing the optimal variational parameter.\nw: a scalar value representing the optimal variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.\n\nReturns\n\nA scalar value representing the memory function of the Frohlich model in k-space at finite temperature evaluated at the frequency Ω.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_memory_function_k_space-NTuple{6, Any}","page":"Functions","title":"PolaronMobility.frohlich_memory_function_k_space","text":"frohlich_memory_function_k_space(Ω, v, w, α, ω, β; rₚ = 1, limits = [0, Inf])\n\nCalculate the memory function for the Frohlich model in k-space at finite temperature and frequency.\n\nArguments\n\nΩ: a scalar value representing the frequency at which the memory function is evaluated.\nv: a scalar value representing the optimal variational parameter.\nw: a scalar value representing the optimal variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.\n\nReturns\n\nA scalar value representing the memory function of the Frohlich model in k-space at finite temperature evaluated at the frequency Ω.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_mobility-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.frohlich_mobility","text":"polaron_mobility(v, w, α, ω, β)\n\nThe polaron mobility.\n\nSee also inverse_polaron_mobility\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_mobility_k_space-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.frohlich_mobility_k_space","text":"frohlich_mobility_k_space(v, w, α, ω, β; rₚ = 1, limits = [0, Inf])\n\nCalculate the DC mobility in k-space for a Frohlich polaron system at finite temperature.\n\nArguments\n\nv: a scalar value representing the optimal variational parameter.\nw: a scalar value representing the optimal variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.\n\nReturns\n\nThe DC mobility in k-space for the Frohlich polaron system at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_structure_factor_k_space-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.frohlich_structure_factor_k_space","text":"frohlich_structure_factor_k_space(t, v, w, α, ω; rₚ = 1, limits = [0, Inf])\n\nCalculate the structure factor in k-space for the Frohlich continuum polaron model at zero temperature.\n\nArguments\n\nt: a scalar value representing the real time.\nv: a scalar value representing the optimal variational parameter.\nw: a scalar value representing the optimal variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.\n\nReturns\n\nA scalar value representing the calculated structure factor in k-space for the Frohlich continuum polaron model at zero temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_structure_factor_k_space-NTuple{6, Any}","page":"Functions","title":"PolaronMobility.frohlich_structure_factor_k_space","text":"frohlich_structure_factor_k_space(t, v, w, α, ω, β; rₚ = 1, limits = [0, Inf])\n\nCalculate the structure factor in k-space for the Frohlich continuum polaron model at finite temperature.\n\nArguments\n\nt: a scalar value representing the real time.\nv: a scalar value representing a variational parameter.\nw: a scalar value representing a variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.\n\nReturns\n\nA scalar value representing the calculated structure factor in k-space for the Frohlich continuum polaron model at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlichalpha-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.frohlichalpha","text":"frohlichalpha(ε_Inf, ε_S, freq, m_eff)\n\nCalculates the Frohlich alpha parameter, for a given dielectric constant, frequency (f) of phonon in Hertz, and effective mass (in units of the bare electron mass).\n\nSee Feynman 1955: http://dx.doi.org/10.1103/PhysRev.97.660.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlichalpha-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.frohlichalpha","text":"frohlichalpha(ϵ_optic, ϵ_ionic, ϵ_total, phonon_mode_freq, m_eff)\n\nCalculates the partial dielectric electron-phonon coupling parameter for a given longitudinal optical phonon mode. \n\nThis decomposes the original Frohlich alpha coupling parameter (defined for a single phonon branch) into contributions from multiple phonon branches.\n\nArguments\n\nϵ_optic::Float64: is the optical dielectric constant of the material.\nϵ_ionic::Float64: is the ionic dielectric contribution from the phonon mode.\nϵ_total::Float64: is the total ionic dielectric contribution from all phonon modes of the material.\nphonon_mode_freq::Float64: is the frequency of the phonon mode (THz).\nm_eff::Float64 is the band mass of the electron (in units of electron mass m_e).\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.general_memory_function-Tuple{Any, Any}","page":"Functions","title":"PolaronMobility.general_memory_function","text":"general_memory_function(Ω, structure_factor; limits = [0, Inf])\n\nThis function calculates the integral of a given structure factor with respect to time using the quadgk function from the QuadGK package.\n\nArguments\n\nΩ: A scalar representing the frequency.\nstructure_factor: A function that returns the value of the structure factor at a given time.\nlimits (optional): A 2-element array specifying the lower and upper limits of integration. Default is [0, Inf].\n\nReturns\n\nThe integral of the structure factor with respect to time.\n\nExample\n\n# Define a structure factor function\nfunction structure_factor(t)\n # Implementation of the structure factor\n # ...\nend\n\n# Calculate the memory function for a given frequency and structure factor\nΩ = 0.5\nlimits = [0, 10]\nresult = general_memory_function(Ω, structure_factor; limits = limits)\nprintln(result)\n\nThis example demonstrates how to use the general_memory_function to calculate the memory function for a given frequency Ω and structure factor function structure_factor. The limits argument is optional and specifies the lower and upper limits of integration. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.general_memory_function-Tuple{Any}","page":"Functions","title":"PolaronMobility.general_memory_function","text":"general_memory_function(structure_factor; limits = [0, Inf])\n\nCalculate the integral of a given function structure_factor using the quadgk function in Julia.\n\nArguments\n\nstructure_factor: A function that takes a single argument t and returns a value.\nlimits: An optional array specifying the lower and upper limits of integration. Default is [0, Inf].\n\nReturns\n\nintegral: The result of the numerical integration of the function structure_factor over the specified limits.\n\nExample\n\n# Define the structure factor function\nfunction structure_factor(t)\n return t^2 + 2t + 1\nend\n\n# Call the general_memory_function with the structure_factor function\nresult = general_memory_function(structure_factor; limits = [0, 10])\n\nprintln(result) # Output: 383.3333333333333\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.h_i-Tuple{Any, Vector, Vector}","page":"Functions","title":"PolaronMobility.h_i","text":"h_i(i, v, w)\n\nCalculates the normal-mode (the eigenmodes) frequency of the coupling between the electron and the `ith' fictitious mass that approximates the exact electron-phonon interaction with a harmonic coupling to a massive fictitious particle. \n\nRequired for calculating the polaron free energy.\n\nNote: Not to be confused with the number of physical phonon branches; many phonon branches could be approximated with one or two etc. fictitious masses for example. The number of fictitious mass does not necessarily need to match the number of phonon branches.\n\nArguments\n\ni::Integer: enumerates the current fictitious mass.\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_coupling-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.holstein_coupling","text":"holstein_coupling(k, α, ω; dims = 1)\n\nCalculate the coupling strength for the Holstein lattice polaron model.\n\nArguments\n\nk: a scalar value representing the k-coordinate in k-space\nα: a scalar value representing the coupling constant\nω: a scalar value representing the phonon frequency\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\n\nReturns\n\nThe coupling strength for the Holstein model.\n\nExample\n\nresult = holstein_coupling(2.0, 0.5, 1.0; dims = 3)\nprintln(result)\n\nExpected Output: 6.0\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_energy-Tuple{Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.holstein_energy","text":"Total free energy for the Holstein model. Here the k-space integral is evaluated analytically.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_energy_k_space-Tuple{Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.holstein_energy_k_space","text":"holstein_energy_k_space(v, w, α, ωβ...; dims = 3, rₚ = 1, a = 1, limits = [-π, π])\n\nCalculate the total energy, kinetic energy, and interaction energy of the Holstein lattice polaron.\n\nArguments\n\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: (optional) a scalar value representing the inverse temperature.\ndims: The number of dimensions of the system (default is 3).\nrₚ: The characteristic polaron radius (default is 1).\na: The lattice constant (default is 1).\nlimits: The limits of integration for the interaction energy calculation (default is [-π, π]).\n\nReturns\n\ntotal_energy: The calculated total polaron energy.\nkinetic_energy: The calculated polaron kinetic energy.\ninteraction_energy: The calculated polaron interaction energy.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_interaction_energy-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.holstein_interaction_energy","text":"holstein_interaction_energy(v, w, α, ω; dims = 3)\n\nCalculate the interaction energy between electrons and phonons in the Holstein model.\n\nArguments\n\nv: A scalar representing a variational parameter.\nw: A scalar representing a variational parameter.\nα: A scalar representing the electron-phonon coupling.\nω: A scalar representing the adiabaticity.\ndims: An optional parameter representing the number of dimensions (default is 3).\n\nReturns\n\nintegral: The interaction energy between electrons and phonons in the Holstein model.\n\nExample\n\nv = 0.2\nw = 0.1\nα = 0.5\nω = 0.3\nresult = holstein_interaction_energy(v, w, α, ω)\nprintln(result)\n\nThis example calculates the interaction energy for given values of v, w, α, and ω. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_interaction_energy-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.holstein_interaction_energy","text":"holstein_interaction_energy(v, w, α, ω, β; dims = 3)\n\nElectron-phonon interaction energy for the Holstein mode at finite temperature. Here the k-space integral is evaluated analytically.\n\nArguments\n\nv: A scalar representing a variational parameter.\nw: A scalar representing a variational parameter.\nα: A scalar representing the electron-phonon coupling.\nω: A scalar representing the adiabaticity.\nβ: A scalar representing the inverse temperature.\ndims: An optional argument representing the number of dimensions. Default is 3.\n\nReturns\n\nintegral: The electron-phonon interaction energy for the Holstein mode at finite temperature.\n\nExample\n\nv = 0.2\nw = 0.1\nα = 0.5\nω = 0.3\nβ = 1.0\nresult = holstein_interaction_energy(v, w, α, ω, β)\nprintln(result)\n\nThis example calculates the electron-phonon interaction energy for given values of v, w, α, ω, and β. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_interaction_energy_integrand-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.holstein_interaction_energy_integrand","text":"holstein_interaction_energy_integrand(τ, v, w, α, ω; dims = 3)\n\nCalculate the integrand for the Holstein interaction energy.\n\nArguments\n\nτ: A scalar representing the imaginary time.\nv: A scalar representing a variational parameter.\nw: A scalar representing a variational parameter.\nα: A scalar representing the electron-phonon coupling.\nω: A scalar representing the adiabaticity.\ndims: An optional parameter representing the number of dimensions (default is 3).\n\nReturns\n\nThe integrand for the Holstein interaction energy.\n\nExample\n\nτ = 0.5\nv = 0.2\nw = 0.1\nα = 0.3\nω = 0.4\nresult = holstein_interaction_energy_integrand(τ, v, w, α, ω)\nprintln(result)\n\nThis example calculates the integrand for the Holstein interaction energy using the given values of τ, v, w, α, and ω. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_interaction_energy_integrand-NTuple{6, Any}","page":"Functions","title":"PolaronMobility.holstein_interaction_energy_integrand","text":"holstein_interaction_energy_integrand(τ, v, w, α, ω, β; dims = 3)\n\nCalculate the integrand for the Holstein interaction energy.\n\nArguments\n\nτ: A scalar representing the imaginary time.\nv: A scalar representing a variational parameter.\nw: A scalar representing a variational parameter.\nα: A scalar representing the electron-phonon coupling.\nω: A scalar representing the adiabaticity.\nβ: A scalar representing the inverse temperature.\ndims: An optional parameter representing the number of dimensions (default is 3).\n\nReturns\n\nThe integrand for the Holstein interaction energy.\n\nExample\n\nτ = 0.5\nv = 0.2\nw = 0.1\nα = 0.3\nω = 0.4\nβ = 1.0\nresult = holstein_interaction_energy_integrand(τ, v, w, α, ω, β)\nprintln(result)\n\nThis example calculates the integrand for the Holstein interaction energy using the given values of τ, v, w, α, and ω. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_interaction_energy_integrand_k_space-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.holstein_interaction_energy_integrand_k_space","text":"holstein_interaction_energy_integrand_k_space(τ, v, w, α, ω; dims = 3, rₚ = 1, a = 1, limits = [-π, π])\n\nCalculate the integrand for the Holstein interaction energy in k-space at zero temperature.\n\nArguments\n\nτ: a scalar value representing the imaginary time.\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].\n\nReturns\n\nA scalar value representing the integrand for the Holstein interaction energy in k-space at zero temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_interaction_energy_integrand_k_space-NTuple{6, Any}","page":"Functions","title":"PolaronMobility.holstein_interaction_energy_integrand_k_space","text":"holstein_interaction_energy_integrand_k_space(τ, v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])\n\nCalculate the integrand for the Holstein interaction energy in k-space at finite temperature.\n\nArguments\n\nτ: a scalar value representing the imaginary time.\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].\n\nReturns\n\nA scalar value representing the integrand for the Holstein interaction energy in k-space at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_interaction_energy_k_space-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.holstein_interaction_energy_k_space","text":"holstein_interaction_energy_k_space(v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])\n\nCalculate the Holstein polaron interaction energy in k-space at zero temperaure.\n\nArguments\n\nτ: a scalar value representing the imaginary time.\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].\n\nReturns\n\nA scalar value representing the Holstein polaron interaction energy in k-space at zero temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_interaction_energy_k_space-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.holstein_interaction_energy_k_space","text":"holstein_interaction_energy_k_space(v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])\n\nCalculate the Holstein polaron interaction energy in k-space at finite temperaure.\n\nArguments\n\nτ: a scalar value representing the imaginary time.\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].\n\nReturns\n\nA scalar value representing the Holstein polaron interaction energy in k-space at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_memory_function-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.holstein_memory_function","text":"holstein_memory_function(Ω, v, w, α, ω; dims = 3)\n\nCalculate the integral of a structure factor using the general_memory_function function.\n\nArguments\n\nΩ: The frequency parameter.\nv, w, α, ω: Parameters used in the holstein_structure_factor function.\ndims: Optional parameter specifying the number of dimensions, defaults to 3.\n\nReturns\n\nThe integral value of the structure factor.\n\nExample\n\nresult = holstein_memory_function(Ω, v, w, α, ω; dims = 3)\n\nIn this example, the holstein_memory_function is called with the parameters Ω, v, w, α, and ω. The dims parameter is optional and defaults to 3. The function calculates the structure factor using the holstein_structure_factor function and then calls the general_memory_function to calculate the integral of the structure factor. The result is stored in the result variable.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_memory_function-NTuple{6, Any}","page":"Functions","title":"PolaronMobility.holstein_memory_function","text":"holstein_memory_function(Ω, v, w, α, ω, β; dims = 3)\n\nCalculate the memory function using the general_memory_function function.\n\nArguments\n\nΩ: a parameter representing a frequency\nv, w, α, ω, β: parameters used to calculate the structure factor\ndims: an optional parameter representing the dimensions (default value is 3)\n\nReturns\n\nThe result of the general_memory_function function, which represents the calculated memory function.\n\nExample\n\nresult = holstein_memory_function(Ω, v, w, α, ω, β; dims = 3)\n\nIn this example, the holstein_memory_function is called with the input parameters Ω, v, w, α, ω, and β, and the optional parameter dims set to 3. The function calculates the memory function using the general_memory_function function and returns the result.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_memory_function_k_space-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.holstein_memory_function_k_space","text":"holstein_memory_function_k_space(Ω, v, w, α, ω; dims = 3, rₚ = 1, a = 1, limits = [-π, π])\n\nCalculate the memory function for the Holstein model in k-space at zero temperature and finite frequency.\n\nArguments\n\nΩ: a scalar value representing the frequency at which the memory function is evaluated.\nv: a scalar value representing the optimal variational parameter.\nw: a scalar value representing the optimal variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.\n\nReturns\n\nA scalar value representing the memory function of the Holstein model in k-space at zero temperature evaluated at the frequency Ω.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_memory_function_k_space-NTuple{6, Any}","page":"Functions","title":"PolaronMobility.holstein_memory_function_k_space","text":"holstein_memory_function_k_space(Ω, v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])\n\nCalculate the memory function for the Holstein model in k-space at finite temperature and frequency.\n\nArguments\n\nΩ: a scalar value representing the frequency at which the memory function is evaluated.\nv: a scalar value representing the optimal variational parameter.\nw: a scalar value representing the optimal variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.\n\nReturns\n\nA scalar value representing the memory function of the Holstein model in k-space at finite temperature evaluated at the frequency Ω.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_mobility-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.holstein_mobility","text":"holstein_mobility(v, w, α, ω, β; dims = 3)\n\nCalculate the mobility using the general_memory_function and holstein_structure_factor functions.\n\nArguments\n\nv: Parameter used in the holstein_structure_factor function.\nw: Parameter used in the holstein_structure_factor function.\nα: Parameter used in the holstein_structure_factor function.\nω: Parameter used in the holstein_structure_factor function.\nβ: Parameter used in the holstein_structure_factor function.\ndims: The dimensionality of the system. Default is 3.\n\nReturns\n\nThe calculated mobility.\n\nExample\n\nv = 1.0\nw = 2.0\nα = 0.5\nω = 1.0\nβ = 0.2\ndims = 3\n\nresult = holstein_mobility(v, w, α, ω, β, dims=dims)\nprintln(result)\n\nThis code calculates the mobility using the given parameters and prints the result.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_mobility_k_space-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.holstein_mobility_k_space","text":"holstein_mobility_k_space(v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])\n\nCalculate the DC mobility in k-space for a Holstein polaron system at finite temperature.\n\nArguments\n\nv: a scalar value representing the optimal variational parameter.\nw: a scalar value representing the optimal variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.\n\nReturns\n\nThe DC mobility in k-space for the Holstein polaron system at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_structure_factor-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.holstein_structure_factor","text":"holstein_structure_factor(t, v, w, α, ω; dims = 3)\n\nCalculate the structure factor for the Holstein model.\n\nArguments\n\nt: A scalar representing the time.\nv: A scalar representing a parameter.\nw: A scalar representing a parameter.\nα: A scalar representing a parameter.\nω: A scalar representing a parameter.\ndims: An optional integer representing the number of dimensions (default is 3).\n\nReturns\n\nThe value of the structure factor.\n\nExample\n\nt = 0.5\nv = 0.2\nw = 0.1\nα = 1.0\nω = 0.5\nresult = holstein_structure_factor(t, v, w, α, ω)\nprintln(result)\n\nThis example calculates the structure factor for the given values of t, v, w, α, and ω. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_structure_factor-NTuple{6, Any}","page":"Functions","title":"PolaronMobility.holstein_structure_factor","text":"holstein_structure_factor(t, v, w, α, ω, β; dims = 3)\n\nCalculate the structure factor for the Holstein model.\n\nArguments\n\nt: A scalar representing the time.\nv: A scalar representing a parameter.\nw: A scalar representing a parameter.\nα: A scalar representing a coupling constant.\nω: A scalar representing a coupling constant.\nβ: A scalar representing the inverse temperature.\ndims: An optional argument representing the number of dimensions. Default is 3.\n\nReturns\n\nThe value of the structure factor for the given inputs.\n\nExample\n\nt = 0.5\nv = 0.2\nw = 0.1\nα = 0.3\nω = 0.4\nβ = 1.0\nresult = holstein_structure_factor(t, v, w, α, ω, β)\nprintln(result)\n\nThis example demonstrates how to use the holstein_structure_factor function to calculate the structure factor for a given set of parameters. The function is called with the values of t, v, w, α, ω, and β as arguments, and the result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_structure_factor_k_space-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.holstein_structure_factor_k_space","text":"holstein_structure_factor_k_space(t, v, w, α, ω; dims = 3, rₚ = 1, a = 1, limits = [-π, π])\n\nCalculate the structure factor in k-space for the Holstein lattice polaron model at zero temperature.\n\nArguments\n\nt: a scalar value representing the real time.\nv: a scalar value representing a variational parameter.\nw: a scalar value representing a variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.\n\nReturns\n\nA scalar value representing the calculated structure factor in k-space for the Holstein lattice polaron model at zero temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_structure_factor_k_space-NTuple{6, Any}","page":"Functions","title":"PolaronMobility.holstein_structure_factor_k_space","text":"holstein_structure_factor_k_space(t, v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])\n\nCalculate the structure factor in k-space for the Holstein lattice polaron model at finite temperature.\n\nArguments\n\nt: a scalar value representing the real time.\nv: a scalar value representing a variational parameter.\nw: a scalar value representing a variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.\n\nReturns\n\nA scalar value representing the calculated structure factor in k-space for the Holstein lattice polaron model at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_FHIP_mobility_lowT-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.inverse_FHIP_mobility_lowT","text":"inverse_FHIP_mobility_lowT(v, w, α, ω, β)\n\nFHIP low-temperature mobility, final result of Feynman1962. [1.60] in Devreese2016 page 36; 6th Edition of Frohlich polaron notes (ArXiv).\n\nSee also FHIP_mobility_lowT\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_FHIP_mobility_lowT-Tuple{Any, Any, Vector, Vector, Any}","page":"Functions","title":"PolaronMobility.inverse_FHIP_mobility_lowT","text":"inverse_FHIP_mobility_lowT(v, w, α::Vector, ω::Vector, β::Vector)\n\nInverse FHIP mobility for multiple phonon modes.\n\nSee also FHIP_mobility_lowT\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_Hellwarth_mobility-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.inverse_Hellwarth_mobility","text":"inverse_Hellwarth_mobility(v, w, α, ω, β)\n\nCalculates the DC mobility using Hellwarth et al. 1999 Eqn. (2). Directly performs contour integration in Feynman1962, for finite temperature DC mobility. Eqns. (2) and (1) are going back to the general (pre low-T limit) formulas in Feynman1962. To evaluate these, you need to do the explicit contour integration to get the polaron self-energy.\n\nSee Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.\n\nSee also Hellwarth_mobility\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_Hellwarth_mobility-Tuple{Any, Any, Vector, Vector, Any}","page":"Functions","title":"PolaronMobility.inverse_Hellwarth_mobility","text":"inverse_Hellwarth_mobility(v, w, α::Vector, ω::Vector, β::Vector)\n\nInverse Hellwarth mobility for multiple phonon modes.\n\nSee also Hellwarth_mobility\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_Kadanoff_mobility_lowT-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.inverse_Kadanoff_mobility_lowT","text":"inverse_Kadanoff_mobility_lowT(v, w, α, ω, β)\n\nKadanoff low-temperaure mobility, constructed around Boltzmann equation. Adds factor of 3 / (2 * β) c.f. FHIP, correcting phonon emission behaviour.\n\nSee also Kadanoff_mobility_lowT\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_Kadanoff_mobility_lowT-Tuple{Any, Any, Vector, Vector, Any}","page":"Functions","title":"PolaronMobility.inverse_Kadanoff_mobility_lowT","text":"inverse_Kadanoff_mobility_lowT(v, w, α::Vector, ω::Vector, β::Vector)\n\nInverse Kadanoff mobility for multiple phonon modes.\n\nSee also Kadanoff_mobility_lowT\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_frohlich_mobility-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.inverse_frohlich_mobility","text":"inverse_polaron_mobility(v, w, α, ω, β)\n\nCalculate the inverse of the dc mobility μ of the polaron at finite temperatues (Eqn. (11.5) in F. Peeters and J. Devreese 1984) for a given frequency Ω.\n\nArguments\n\nv::Float64: is the 'v' variational parameter.\nw::Float64: is the 'w' variational parameter. \nα::Float64: is the Frohlich alpha coupling parameter.\nω::Float64: is the angular phonon frequency.\nβ::Float64: is the reduced thermodynamic beta. \nverbose: is used by make_polaron() to specify whether or not to print. Ignore.\n\nSee F. Peeters and J. Devreese 1984: https://doi.org/10.1016/S0081-1947(08)60312-4.\n\nSee also polaron_mobility, polaron_complex_conductivity\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_frohlich_mobility-Tuple{Any, Any, Vector, Vector, Any}","page":"Functions","title":"PolaronMobility.inverse_frohlich_mobility","text":"inverse_polaron_mobility(v, w, α::Vector, ω::Vector, β::Vector)\n\ninverse of the polaron mobility, but for multiple phonon modes.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.load_polaron-Tuple{Any}","page":"Functions","title":"PolaronMobility.load_polaron","text":"load_polaron(p::NewPolaron, prefix)\n\nLoads data from file \"polaronfilepath\" into a NewPolaron type.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.material-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.material","text":"material(ϵ_optical, ϵ_static, m_eff, phonon_freq)\n\nConstruct a 'struct Material' object from traditional Frohlich Hamiltonian parameters. \n\nϵ_ionic and α derived from these parmaters; other material properties filled with bogus values.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.material-NTuple{6, Any}","page":"Functions","title":"PolaronMobility.material","text":"material(ϵ_optic, ϵ_static, m_eff, phonon_freqs, ir_activity, volume)\n\nConstruct a 'struct Material' object from a set of infrared activities and phonon\nfrequencies, for use with the 'multiple phonon branches' extension of the code. \n\neffective_freq calculated with the Hellwarth 'B' scheme; ϵ_ionic and α calculated from\nthe infrared activties.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.optical_absorption-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.optical_absorption","text":"optical_absorption(Ω, β, α, v, w; rtol = 1e-3)\n\nCalculate the absorption coefficient Γ(Ω) for the polaron at at finite temperatures (Eqn. (11a) in DSG 1972) for a given frequency Ω. \n\nArguments\n\nΩ::Float64: is the frequency (2π THz) of applied electric field.\nβ::Float64: is the reduced thermodynamic betas. \nα::Float64: is the Frohlich alpha coupling parameter.\nv::Float64: is the 'v' variational parameter.\nw::Float64: is the 'w' variational parameter. \nrtol: relative tolerance for the accuracy of any quadrature integrations.\n\nSee DSG 1972: https://doi.org/10.1103/PhysRevB.5.2367.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.phonon_propagator-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.phonon_propagator","text":"phonon_propagator(τ, ω, β)\n\nCalculate the value of the phonon propagator at a given imaginary time (τ), phonon frequency (ω), and inverse temperature (β).\n\nArguments\n\nτ: A scalar representing the imaginary time.\nω: A scalar representing the phonon frequency.\nβ: A scalar representing the inverse temperature.\n\nReturns\n\nThe value of the phonon propagator.\n\nExample\n\nτ = 0.5\nω = 0.2\nβ = 1.0\nresult = phonon_propagator(τ, ω, β)\nprintln(result)\n\nThis example calculates the value of the phonon propagator for τ = 0.5, ω = 0.2, and β = 1.0. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.phonon_propagator-Tuple{Any, Any}","page":"Functions","title":"PolaronMobility.phonon_propagator","text":"phonon_propagator(τ, ω)\n\nCalculate the value of the phonon propagator based on the given inputs.\n\nArguments\n\nτ: A scalar representing the imaginary time.\nω: A scalar representing the adiabaticity.\n\nExample\n\nτ = 0.5\nω = 0.2\nresult = phonon_propagator(τ, ω)\nprintln(result)\n\nThis example calculates the value of the phonon propagator for the given values of τ and ω. The result is then printed.\n\nReturns\n\nThe value of the phonon propagator.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.polaron-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.polaron","text":"polaron(αrange, Trange, Ωrange, ω, v_guesses, w_guesses; verbose=false)\n\nOuter constructor for the Polaron type. This function evaluates model data for the polaron, i.e. unitless and not material specific. \n\nExamples\n\njulia> polaron(6, 300, 3, 1.0, 3.6, 2.8)\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.polaron-Tuple{Any, Any}","page":"Functions","title":"PolaronMobility.polaron","text":"No frequency input.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.polaron-Tuple{Any}","page":"Functions","title":"PolaronMobility.polaron","text":"No temperature input => 300 K.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.polaron-Tuple{Material, Vararg{Any}}","page":"Functions","title":"PolaronMobility.polaron","text":"polaron(material::Material, TΩrange...; v_guesses=3.11, w_guesses=2.87, verbose=false)\n\nMaterial specific constructors that use material specific parameters to parameterise the polaron. Material data is inputted through the Material type. Returns all data in either SI units or other common, suitable units otherwise.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.polaron-Tuple{Real, Any, Any}","page":"Functions","title":"PolaronMobility.polaron","text":"Single alpha parameter. polaron() expects alpha parameters to be in a Vector.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.polaron-Tuple{}","page":"Functions","title":"PolaronMobility.polaron","text":"No input => α = 1\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.polaron_propagator-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.polaron_propagator","text":"polaron_propagator(τ, v, w, β)\n\nCalculate the imaginary time polaron Green's function with temperature dependence.\n\nArguments\n\nτ: A scalar representing the imaginary time.\nv: A scalar representing a variational parameter.\nw: A scalar representing a variational parameter.\nβ: A scalar representing the inverse temperature.\n\nReturns\n\nThe value of the polaron propagator.\n\nExample\n\nτ = 0.5\nv = 0.2\nw = 0.1\nβ = 1.0\nresult = polaron_propagator(τ, v, w, β)\nprintln(result)\n\nThis example calculates the polaron propagator for given values of τ, v, w, and β. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.polaron_propagator-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.polaron_propagator","text":"polaron_propagator(τ, v, w)\n\nCalculate the value of the polaron propagator based on the given inputs.\n\nArguments\n\nτ::Number: A scalar representing the imaginary time.\nv::Number: A scalar representing a variational parameter.\nw::Number: A scalar representing a variational parameter.\n\nReturns\n\nThe value of the polaron propagator.\n\nExample\n\nτ = 0.5\nv = 0.2\nw = 0.1\nresult = polaron_propagator(τ, v, w)\nprintln(result)\n\nThis example calculates the polaron propagator for the given values of τ, v, and w. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.puconvert-Tuple{Any}","page":"Functions","title":"PolaronMobility.puconvert","text":"puconvert(x::Unitful.Quantity)\n\nConvert a quantity to the appropriate polaron unit.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.puconvert-Tuple{Unitful.Units, Number}","page":"Functions","title":"PolaronMobility.puconvert","text":"puconvert(u::Unitful.Units, x::Number)\n\nInterpret x as a quantity given in polaron units and convert it to the unit u.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.punit-Tuple{Any}","page":"Functions","title":"PolaronMobility.punit","text":"punit(x::Unitful.Quantity)\npunit(x::Unitful.Units)\npunit(x::Unitful.Dimensions)\n\nReturns the appropriate polaron unit (a Unitful.Units object) for the dimension of x.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.pustrip-Tuple{Any}","page":"Functions","title":"PolaronMobility.pustrip","text":"pustrip(x::Unitful.Quantity)\n\nReturns the value of the quantity converted to polaron units as a number type (i.e., with the units removed). This is equivalent to Unitful.ustrip(puconvert(x)).\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.save_polaron-Tuple{Polaron, Any}","page":"Functions","title":"PolaronMobility.save_polaron","text":"save_polaron(p::Polaron, prefix)\n\nSaves data from 'polaron' into file \"prefix\". This is a .jdl file for storing the polaron data whilst preserving types. Allows for saving multidimensional arrays that sometimes arise in the polaron data. Each parameter in the NewPolaron type is saved as a dictionary entry. E.g. NewPolaron.α is saved under JLD.load(\"prefix.jld\")[\"alpha\"].\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.spherical_k_integral-Tuple{Any, Any}","page":"Functions","title":"PolaronMobility.spherical_k_integral","text":"spherical_k_integral(coupling, propagator; rₚ = 1, limits = [0, Inf])\n\nCalculate the k-space integral in spherical coordinates of the integrand spherical_k_integrand over a specified radius in k-space.\n\nArguments\n\ncoupling: A function that takes a scalar k value and returns a scalar value representing the coupling strength.\npropagator: A scalar value representing the propagator.\nrₚ: An optional scalar value representing the characteristic polaron radius. Default value is 1.\nlimits: An array of two scalar values representing the lower and upper limits of the integration range in spherical coordinates. Default is [0, Inf] for infinite sphere.\n\nReturns\n\nA scalar value representing the calculated integral over the specified range in spherical coordinates.\n\nExample\n\ncoupling(k) = k^2 # define the coupling function\npropagator = 0.5 # define the propagator value\nresult = spherical_k_integral(coupling, propagator; rₚ = 1, limits = [0, Inf]) # calculate the integral\nprintln(result) # print the result\n\nExpected Output: A scalar value representing the calculated k-space integral over the specified range in spherical coordinates.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.spherical_k_integrand-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.spherical_k_integrand","text":"spherical_k_integrand(k, coupling, propagator; rₚ = 1)\n\nCalculate the integrand for a k-space integral in spherical coordinates.\n\nArguments\n\nk: a scalar value representing the k-coordinate in k-space\ncoupling: a function that takes a scalar k value and returns a scalar value representing the coupling strength\npropagator: a scalar value representing the propagator\nrₚ: an optional scalar value representing the radius\n\nReturns\n\nThe calculated integrand as a scalar value.\n\nExample\n\ncoupling(k) = k^2 # define the coupling function\npropagator = 0.5 # define the propagator value\nresult = spherical_k_integrand(2.0, coupling, propagator; rₚ = 1) # calculate the integrand for k = 2.0\nprintln(result) # print the result\n\nExpected Output: 0.5\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.vw_variation-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.vw_variation","text":"vw_variation(energy, initial_v, initial_w; lower_bounds = [0, 0], upper_bounds = [Inf, Inf])\n\nThis function optimizes the values of v and w to minimize the energy function energy(x[1] + x[2], x[2])[1]. It uses the Optim package to perform the optimization and returns the optimized values of v and w, as well as the minimized energy, kinetic energy, and potential energy.\n\nArguments\n\nenergy: A function that takes two arguments x and y and returns an array of energy components.\ninitial_v: The initial value of v.\ninitial_w: The initial value of w.\nlower_bounds: An optional array representing the lower bounds for v and w optimization. Default is [0, 0].\nupper_bounds: An optional array representing the upper bounds for v and w optimization. Default is [Inf, Inf].\n\nReturns\n\nΔv + w: The optimized value of v.\nw: The optimized value of w.\nenergy_minimized: The minimized energy.\nkinetic_energy: The kinetic energy corresponding to the minimized energy.\npotential_energy: The potential energy corresponding to the minimized energy.\n\nExample\n\nenergy(x, y) = [x^2 + y^2, x^2, y^2]\ninitial_v = 0.5\ninitial_w = 0.2\nlower_bounds = [0, 0]\nupper_bounds = [Inf, Inf]\nresult = vw_variation(energy, initial_v, initial_w; lower_bounds, upper_bounds)\nprintln(result)\n\nThis example demonstrates how to use the vw_variation function. It defines an energy function energy(x, y) that returns an array of energy components. It then calls vw_variation with the initial values of v and w, as well as lower and upper bounds for the optimization. The function optimizes v and w to minimize the energy and returns the optimized values, as well as the minimized energy, kinetic energy, and potential energy. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.κ_i-Tuple{Any, Vector, Vector}","page":"Functions","title":"PolaronMobility.κ_i","text":"κ_i(i, v, w)\n\nCalculates the spring-constant coupling the electron to the 'ith' fictitious mass that approximates the exact electron-phonon interaction with a harmonic coupling to a massive fictitious particle. \n\nRequired for calculating the polaron free energy.\n\nNote: Not to be confused with the number of physical phonon branches; many phonon branches could be approximated with one or two etc. fictitious masses for example. The number of fictitious mass does not necessarily need to match the number of phonon branches.\n\nArguments\n\ni::Integer: enumerates the current fictitious mass.\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.ϵ_ionic_mode-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.ϵ_ionic_mode","text":"ϵ_ionic_mode(phonon_mode_freq, ir_activity, volume)\n\nCalculate the ionic contribution to the dielectric function for a given phonon mode.\n\nArguments\n\nphonon_mode_freq::Float64: is the frequency of the mode in THz.\nir_activity::Float64: is the infra-red activity of the mode in e²amu⁻¹.\nvolume::Float64: is the volume of the unit cell of the material in m³.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.ϵ_total-Tuple{Any, Any}","page":"Functions","title":"PolaronMobility.ϵ_total","text":"ϵ_total(freqs_and_ir_activity, volume)\n\nCalculate the total ionic contribution to the dielectric function from all phonon modes.\n\nArguments\n\nfreqs_and_ir_activity::Matrix{Float64}: is a matrix containeing the phonon mode frequencies (in THz) in the first column and the infra-red activities (in e²amu⁻¹) in the second column.\nvolume::Float64: is the volume of the unit cell of the material in m^3.\n\n\n\n\n\n","category":"method"},{"location":"examples/#Examples","page":"Examples","title":"Examples","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"Perhaps the easiest way to understand the code is to see how it can be used for science. As an example system, we are going to look at some of the basic polaron properties of methylammonium lead-iodide perovskite.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The 'Feynman' units used internally set the LO phonon reduced frequency omega=1, hbar=1 and mass-of-electron=1. ","category":"page"},{"location":"examples/#Loading-the-Module","page":"Examples","title":"Loading the Module","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"using PolaronMobility ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"If you are running the module from outside the Julia package directory (i.e. you have cloned the repository elsewhere to more easily work on the codes), you can supplement the LOAD_PATH.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"push!(LOAD_PATH,\"../src/\") # load module from local directory","category":"page"},{"location":"examples/#α/alpha-parameter","page":"Examples","title":"α/alpha parameter","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"The Frohlich electron-phonon coupling parameter can be characterised by a dimensionless coupling, alpha (α). This gives the long-range ('non analytic') contribution from electrodynamic coupling into infrared active phonon modes.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"alpha = \nfrac12 \nfrac14piepsilon_0 \nleft( frac1epsilon_optical - frac1epsilon_static right ) \nfrace^2hbar omega \nsqrtfrac2m_eomegahbar","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"This is provided as a convenience function (with correct units!). Let us demonstrate by calculating α for CdTe, and compare it to literature values.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The call signature is: ϵ-optical, ϵ-static, phonon-frequency (THz), effective-mass (in mass-of-electron units).","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"α=frohlichalpha(7.1, 10.4, 5.08, 0.095)\nprintln(\"CdTe α=\",α,\" Stone 0.39 / Devreese 0.29\")\n#@test α ≈ 0.3 atol=0.1","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"We get a value of 0.351. ","category":"page"},{"location":"examples/#Feynman-athermal-polaron","page":"Examples","title":"Feynman athermal polaron","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"Tabulated by Schultz (Phys.Rev. 116, 1959. https://doi.org/10.1103/PhysRev.116.526) are some numeric solutions to the athermal Feynman model. These values are often reproduced in the textbooks (e.g. Feynman & Hibbs, Emended Edition, p. 319). For instance, Schultz gets for α=5, v=4.02, w=2.13 and E=-5.4401. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"julia> v,w=feynmanvw(5.0)\n(4.0343437574170915, 2.1400182510339403)\njulia> F(v,w,5.0)\n-5.440144454909065","category":"page"},{"location":"examples/#Single-temperature-phonon-properties","page":"Examples","title":"Single temperature phonon properties","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"Let us calculate the room-temperature (300 K) character of the electron-polaron in methylammonium lead iodide perovskite (MAPI). The parameters we use are as in Frost2017PRB.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The call signature to polaronmobility is: Temperature range, ϵ-optical, ϵ-static, phonon-frequency (Hz), effective-mass (in mass-of-electron units). ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"For electrons in MAPI, these are ϵ=4.5/24.1, f=2.25 THz, me=0.12 electron masses. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"MAPIe=polaronmobility(300, 4.5, 24.1, 2.25, 0.12)","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"This will think for a bit (as Julia just-in-time compiles the required functions), and then spits out a considerable amount of information to STDOUT. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Polaron mobility for system ε_Inf=4.5, ε_S=24.1, freq=2.25e12, \n effectivemass=0.12; with Trange 300 ...\nPolaron mobility input parameters: ε_Inf=4.500000 ε_S=24.100000 freq=2.25e+12 α=2.393991 \nDerived params in SI: ω =1.41372e+13 mb=1.09313e-31 \nT: 300.000000 β: 2.41e+20 βred: 0.36 ħω = 9.31 meV\t\tConverged? : true\n Polaraon Parameters: v= 19.8635 w= 16.9621 || M=0.371360 k=106.845717\t\n Polaron frequency (SI) v= 4.5e+13 Hz w= 3.8e+13 Hz\n Polaron size (rf), following Schultz1959. (s.d. of Gaussian polaron ψ )\n\t Schultz1959(2.4): rf= 0.528075 (int units) = 2.68001e-09 m [SI]\n Polaron Free Energy: A= -6.448918 B= 7.355627 C= 2.912080 F= -3.818788\t = -35.534786 meV\n Polaron Mobility theories:\n\tμ(FHIP)= 0.082053 m^2/Vs \t= 820.53 cm^2/Vs\n\tμ(Kadanoff,via Devreese2016)= 0.019690 m^2/Vs \t= 196.90 cm^2/Vs\n\t\tEqm. Phonon. pop. Nbar: 2.308150 \n\t\tGamma0 = 5.42813e+13 rad/s = 8.63914e+12 /s \n\t\tTau=1/Gamma0 = 1.15752e-13 = 0.115752 ps\n\t\tEnergy Loss = 1.28798e-08 J/s = 80.3893 meV/ps\n\tμ(Hellwarth1999)= 0.013642 m^2/Vs \t= 136.42 cm^2/Vs","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The output is a little ad-hoc, and specific values are perhaps best understood with comparison to the code, and to the references to the original papers!","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Initially the polaron state is solved for variationally. This involves varying v and w to minimise the miss-match between the trial (analytically solvable) polaron Hamiltonian action, and the true temperature-dependent free-energy (as specified by Osaka). The method uses automatic differentiation to get gradients for the optimisation procedure. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"'Textbook' expressions that predict polaron character and mobilities make assumptions about v and w (usually that either v is small, or v=w), and rather than use the finite-temperature free-energies of Osaka, use a more simple athermal polaron energy function.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Values that can be directly derived from these v and w variational parameters are then displayed. This includes the phonon-drag mass renormalisation (M), the effective spring-constant of this drag (k), and the S.I. oscillation rates v and w in Hz. The Schultz polaron size (rf) is outputted in various units. The total polaron energy (as well as its decomposition into free-energy contributions) is also output (A,B,C; and F). Essentially we are just using Julia as a glorified scientific calculator at this point, but with the units checked. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The polaron theories are constructed in reduced units. Generally this means that energy is in units of ħω, and frequencies in a unit of ω (of the input phonon frequency). For convenience, these are re-printed in SI or more standard units. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Beyond Polaron Mobility theories:, the code enters its final phase and uses the v and w parameters specifying the polaron as an input to theories of mobility, and so directly calculate a charge carrier mobility. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The asymptotic 'FHIP' mobility (low T) is calculated, this can be most easily related to textbook expressions that directly infer a mobility from an α parameter. It lacks optical phonon emission, and so shows pathological high temperature (kT > ħω) behaviour. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The Kadanoff mobility (see the original paper) improves on this by assuming a Boltzmann process (independent scattering events). From this theory we can also get an average scattering time, which we relate to the time-scale of the polaron interacting with the phonon cloud, and so to the rate of polaron cooling. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Finally the Hellwarth1999 scheme is used, which goes back to the original 1962 FHIP paper, and directly carries out the contour integral for the polaron impedance function. We improve on this slightly by explicitly calculating with b, though the approximation b=0 makes very little difference for any so-far tested materials. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The data are also returned as a packed up in type of struct Polaron with fields of (T, Kμ, Hμ, FHIPμ, k, M, A, B, C, F, Tau, v, w, βred, rfsi, rfsmallalpha, α, mb, ω).","category":"page"},{"location":"examples/#Hellwarth's-multi-mode-scheme","page":"Examples","title":"Hellwarth's multi-mode scheme","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"The above examples are slightly back-to-front - in that we've specified a single mode frequency, as if the material were a simple tetrahedral semiconductor with only one infrared active mode. (The Linear Optical 'LO' phonon mode.)","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"In order to use these theories with more complex (many atoms in a unit cell) materials of technological relevance, we must first reduce all of these Infrared-active phonon responses to a single effective one. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"For this we will use the averaging scheme described in Hellwarth1999. Currently only the B scheme (athermal) is correctly implemented; a partial A scheme implementation is present.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Let's test it against the Hellwarth1999 literature data. The argument to the function is a table of frequencies (cm^-1) and infrared activities (unit does not matter, as long as it is consistent). ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"# Hellwarth et al. PRB 1999 Table II - BiSiO frequencies and activities\nHellwarthII = [\n 106.23 8.86\n 160.51 9.50\n 180.33 20.85\n 206.69 10.05\n 252.76 27.00\n 369.64 61.78\n 501.71 52.87\n 553.60 86.18\n 585.36 75.41\n 607.29 98.15\n 834.53 89.36\n]\n\nprintln(\"Attempting to reproduce Hellwarth et al.'s data.\")\nprintln(\"\\nB scheme: (athermal)\")\nHellwarthBScheme(HellwarthII)\nprintln(\" ... should agree with values given in Hellwarth(60) W_e=196.9 cm^-1 and Hellwarth(61) Ω_e=500 cm^-1\")","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The output agrees to within three significant figures with the literatures values;","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Hellwarth (58) summation: 0.15505835776181887\nHellwarth (59) summation (total ir activity ^2): 38777.7725\nHellwarth (59) W_e (total ir activity ): 196.92072643579192\nHellwarth (61) Omega (freq): 500.08501275972833","category":"page"},{"location":"examples/#Temperature-dependent-behaviour","page":"Examples","title":"Temperature-dependent behaviour","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"Getting temperature-dependent behaviour is a matter of sending a temperature range to the polaronmobility function.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"MAPIe=polaronmobility(10:10:1000, 4.5, 24.1, 2.25, 0.12)","category":"page"},{"location":"examples/#Plotting","page":"Examples","title":"Plotting","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"For publication, savepolaron outputs a column-delimited text file for post-production plotting (with gnuplot) or similar.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"savepolaron(\"MAPI-electron\",MAPIe)","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Example gnuplot scripts can be found in Examples and HalidePerovskites.","category":"page"},{"location":"examples/#Built-in-plotting","page":"Examples","title":"Built in plotting","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"The convenience function plotpolaron generates (and saves) a number of Plots.jl figures of the temperature dependent behaviour.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"It has been separated off into its own submodule (PlotPolaron), so that the Plots.jl dependency does not slow down loading of PolaronMobility.jl.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"To use it, we therefore need to inform Julia where to find PlotPolaron. A suitable initialisation script was kindly supplied by @wkearn:","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"using PolaronMobility, Plots\ngr()\ninclude(Pkg.dir(\"PolaronMobility\",\"src\",\"PlotPolaron.jl\"))\nusing PlotPolaron","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"As with savepolaron, the call signature is output-file-string and then the polaron object which you have calculated.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"plotpolaron(\"MAPI-electron\",MAPIe)","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"This will attempt to make fairly sensible defaults, and plot a lot of different data of sufficient quality for talk slides.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Much for the functionality has been unrolled into the Jupyter Notebook example, which should also be interactively-runnable from (https://juliabox.com). See the repository README.md for the latest information.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Here is a figure showing typical temperature-dependent behaviour of the three-different polaron mobility approximations, for MAPI.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"(Image: MAPI mobility)","category":"page"},{"location":"examples/#Further-examples","page":"Examples","title":"Further examples","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"More complete examples are provided in Examples and HalidePerovskites.","category":"page"},{"location":"#PolaronMobility.jl","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"","category":"section"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"These codes calculate the temperature-dependent polaron mobility for a material. We use the Feynman path-integral variational approach. We have parameters for various metal-halide Perovskites; as well as other systems. These codes implement methods described across a wide range of now quite old literature. The methods have been tested against literature values, and the calculated units more well understood. They enable relative 'turn key' calculation of polaron parameters (most particularly the finite temperature charge carrier mobility) for an arbitrary material system, based on parameters that are standard to calculate with modern ab-initio electronic structure methods. ","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"This documentation is intended to be read alongside the paper which was the first application (and motivation) for these codes: Frost2017PRB (ArXiv:1704.05404 ).","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"The required inputs are the dielectric constants (ϵ-static and ϵ-optic) , a characteristic phonon frequency (ω), and the bare-electron band effective-mass (me). These values can be relatively easily calculated in the ab-initio electronic structure package of your choosing, or measured directly.","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"From these four values, the code solves a temperature-dependent polaron model. This is done by variationally optimising the temperature-dependent free-energies for the coupled electron-phonon system. These optimised parameters describe the polaron with the infinite quantum field of lattice vibrations 'integrated through', and replaced with a phonon-drag term. From this the polaron features such as effective-mass, size of the wavefunction, frequency of energy oscillation etc. can be calculated.","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"This polaron state can then be used as an input to further models for polaron mobility.","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"The codes are designed to produce a set of temperature-dependent mobilities and other data, for direct incorporation into a scientific publication.","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"May your phonons drag in a manner truly sublime.","category":"page"},{"location":"#Installation","page":"PolaronMobility.jl","title":"Installation","text":"","category":"section"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"These codes require Julia >1.7 . ","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"To install, type the following at the Julia REPL:","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"julia> Pkg.add(\"PolaronMobility\")","category":"page"},{"location":"#Community-guidelines","page":"PolaronMobility.jl","title":"Community guidelines","text":"","category":"section"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"Contributions to the code (extending that which is calculated), or additional physical systems / examples, are very welcome. ","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"If you have questions about the software, scientific questions, or find errors, please create a GitHub issue. ","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"If you find this package (or snippets, such as the entered and tested free-energy expressions) useful for your work, please cite the paper Frost2017PRB. ","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"@article{Frost2017,\n doi = {10.1103/physrevb.96.195202},\n url = {https://doi.org/10.1103/physrevb.96.195202},\n year = {2017},\n month = {nov},\n publisher = {American Physical Society ({APS})},\n volume = {96},\n number = {19},\n author = {Jarvist Moore Frost},\n title = {Calculating polaron mobility in halide perovskites},\n journal = {Physical Review B}\n}","category":"page"},{"location":"scientific_discussion/#Scientific-discussion","page":"Scientific discussion","title":"Scientific discussion","text":"","category":"section"},{"location":"scientific_discussion/#Overview","page":"Scientific discussion","title":"Overview","text":"","category":"section"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"These codes solve the Feynman polaron mode [Feynman1955] with Ōsaka's [Osaka1961] finite-temperature energies. We use the form of these free energies, as presented in [Hellwarth1999].","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"For each temperature, the total free energy of the Feynman coupled phonon-electron system is minimised by optimising coefficients (v and w) which, equivalently, describe the spring-coupling coefficient (k) and effective-mass (M) of the phonon cloud (i.e. the phonon drag / phonon surfing contribution). This integrates through the infinite quantum field of the harmonic oscillators which make up the dynamic response of the lattice, to simplify the problem back to a quasi-particle (the polaron). ","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"The codes calculate the polaron mobility, with both the original low-temperature FHIP asymptotic approximation [Feynman1962]; Kadanoff's [Kadanoff1964] Boltzmann equation motivated phonon-emission correction to the FHIP; and Hellwarth et al.'s [Hellwarth1999] method. This last method (Hellwarth) is probably the most accurate. This uses a more general result (Eqn. 44-47) in [Feynman1962], directly evaluating the contour integral for the polaron self-energy numerically. ","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"Underlying all this is the simplified Fröhlich Hamiltonian [Frohlich1952] for a single electron interacting with a phonon cloud of non-interacting (harmonic) phonons. The electron-phonon interaction for a polar system is treated at the simple level of being the dielectric response. These are the infrared-active modes present at the Gamma point in the Brillouin zone. Along with an effective mode frequency, the dielectric constants are used to calculate the dimensionless 'α' parameter describing the electron-phonon coupling. (In a simple covalent semiconductor system, the only dielectric active mode is the linear-optical mode.)","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"The Feynman model offers a direct solution of this most simple quantum field problem. The infinite phonon (quantum) field is 'integrated out' by path integration. The soluble system is one in which you have an electron interacting by a (harmonic) spring constant with a mass representing the phonon drag. The variational method allows you to find a set of parameters for this simplified system which produces the smallest free-energy. ","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"This is now a (renormalised) single particle system, a quasi-particle.","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"These Julia codes use Hellwarth's [Hellwarth1999] presentation of Ōsaka's variational free-energies for the Feynman model. We optimise the v and w parameters for these finite-temperature free energies. These can be alternatively restated the mass 'M' and spring-constant 'k' of the coupled phonon-electron Feynman model.","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"Here we apply these methods to the case of hybrid halide perovskites. The method provides the temperature dependent polaron-mobility without any free parameters. No arbitrary relaxation time is needed or used. The scattering processes are treated directly, by including an effective electron-phonon coupling in the specification of the Fröhlich α/'alpha' parameter, and then all other features come from solving the model. The original Feynman model is correct to all orders in alpha, and the Hellwarth direct contour-integration of the general Feynman mobility statement is suitable for high temperature.","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"It was necessary to return to these (rather old!) papers and resolve the models, as hybrid halide perovskites are soft materials with low energy phonons. Therefore the effective temperature in terms of a reduced thermodynamic beta (beta=hbar omega / (kBoltzmann * Temperature) ; β=ħω/(kB.T) ) is much smaller than previously considered.","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"A final note that: in [Hellwarth1999], there is a mistake in the formula for 'b', which is also present in their prior PRL [Biaggio1997]. It is correct in [Feynman1962], where there is no factor of b on the right-hand side. They probably didn't notice this, as they set it to zero. This doesn't make too much difference (~0.1%, for the hybrid halide perovskites) to the calculated mobility. Since we're integrating numerically anyway, we may as well calculate it explicitly.","category":"page"},{"location":"scientific_discussion/#Bibliography","page":"Scientific discussion","title":"Bibliography","text":"","category":"section"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"This bibliography is listed in vague order of utility; I recommend reading the first ones first!","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"Feynman also describes his Polaron model in more detail in both 'Statistical Mechanics' [Feynman1972] and 'Quantum Mechanics and Path Integrals' [FeynmanHibbs1965]. Note that the differing presentations of Feynman do not always agree in detail.","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"Schulman's 'Techniques and applications of path integration' has a 10-page chapter on the Polaron problem. It tries to unify the Feynman prescriptions.","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"J.T. Devreese's \"Fröhlich Polarons. Lecture course including detailed theoretical derivations\" (6th edition, 2016) notes on the ArXiv is a very good place to start & to get an overview of the area. https://arxiv.org/abs/1611.06122","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"\n% This introduces two prescriptions for reducing a multi-mode polar lattice to\n% a single ~mean-field~ response.\n% It contains a modern version of the Ōsaka finite temperature free-energies\n% for use in a variational solution of the Feynman temperature problem.\n% It also includes how to (numerically) do the contour integration to get the\n% DC-response of the polaron developed in Feynman1962.\n@article{Hellwarth1999,\n doi = {10.1103/physrevb.60.299},\n url = {https://doi.org/10.1103%2Fphysrevb.60.299},\n year = {1999},\n month = {jul},\n publisher = {American Physical Society ({APS})},\n volume = {60},\n number = {1},\n pages = {299--307},\n author = {Robert W. Hellwarth and Ivan Biaggio},\n title = {Mobility of an electron in a multimode polar lattice},\n journal = {Physical Review B}\n}\n\n% Boltzmann / relaxation time approximation solution of mobility in the Feynman\n% polaron problem.\n% We extract a relaxation time (+ offer this method of mobility).\n@article{Kadanoff1963,\n doi = {10.1103/physrev.130.1364},\n url = {https://doi.org/10.1103%2Fphysrev.130.1364},\n year = {1963},\n month = {may},\n publisher = {American Physical Society ({APS})},\n volume = {130},\n number = {4},\n pages = {1364--1369},\n author = {Leo P. Kadanoff},\n title = {Boltzmann Equation for Polarons},\n journal = {Physical Review}\n}\n\n% A long and very useful article developing response theories for the polaron.\n% Mainly known for the FHIP mobility, which is low-temperature only.\n@article{Feynman1962,\n doi = {10.1103/physrev.127.1004},\n url = {https://doi.org/10.1103%2Fphysrev.127.1004},\n year = {1962},\n month = {aug},\n publisher = {American Physical Society ({APS})},\n volume = {127},\n number = {4},\n pages = {1004--1017},\n author = {R. P. Feynman and R. W. Hellwarth and C. K. Iddings and P. M. Platzman},\n title = {Mobility of Slow Electrons in a Polar Crystal},\n journal = {Physical Review}\n}\n\n% The original development of Feynman's solution to the polaron problem.\n% Zero temperature approximate variational solutions developed (in limits w->0,\n% or w=v).\n% Perturbative theories of phonon-drag effective-mass renormalisation given.\n% (i.e. where the 'me=1+alpha/6' & etc. limits are from. )\n@article{Feynman1955,\n doi = {10.1103/physrev.97.660},\n url = {https://doi.org/10.1103%2Fphysrev.97.660},\n year = {1955},\n month = {feb},\n publisher = {American Physical Society ({APS})},\n volume = {97},\n number = {3},\n pages = {660--665},\n author = {R. P. Feynman},\n title = {Slow Electrons in a Polar Crystal},\n journal = {Physical Review}\n}\n\n% Schultz seemed to spend his PhD solving the Feynman polaron problem with\n% a digital computer.\n% Lots of characterisation of the polaron state, and the introduction of an\n% effective polaron size, from considering the variance of the Gaussian\n% wavefunction.\n% Some work towards polaron mobility, but not as developed as in Feynman et al. 1962.\n% Schultz provides units for some of the quantities - which is useful!\n@article{Schultz1959,\n doi = {10.1103/physrev.116.526},\n url = {https://doi.org/10.1103%2Fphysrev.116.526},\n year = {1959},\n month = {nov},\n publisher = {American Physical Society ({APS})},\n volume = {116},\n number = {3},\n pages = {526--543},\n author = {T. D. Schultz},\n title = {Slow Electrons in Polar Crystals: Self-Energy, Mass, and Mobility},\n journal = {Physical Review}\n}\n\n% Free-energies of the finite interacting Polaron system.\n@article{Osaka1961,\n doi = {10.1143/ptp.25.517},\n url = {https://doi.org/10.1143%2Fptp.25.517},\n year = {1961},\n month = {apr},\n publisher = {Oxford University Press ({OUP})},\n volume = {25},\n number = {4},\n pages = {517--536},\n author = {Yukio \\=Osaka},\n title = {Theory of Polaron Mobility},\n journal = {Progress of Theoretical Physics}\n}\n\n% Original statement of the Polaron problem + Frohlich Hamiltonian.\n@article{Frohlich1952,\n doi = {10.1098/rspa.1952.0212},\n url = {https://doi.org/10.1098%2Frspa.1952.0212},\n year = {1952},\n month = {dec},\n publisher = {The Royal Society},\n volume = {215},\n number = {1122},\n pages = {291--298},\n author = {H. Frohlich},\n title = {Interaction of Electrons with Lattice Vibrations},\n journal = {Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences}\n}\n\n@article{Thornber1970,\n doi = {10.1103/physrevb.1.4099},\n url = {https://doi.org/10.1103%2Fphysrevb.1.4099},\n year = {1970},\n month = {may},\n publisher = {American Physical Society ({APS})},\n volume = {1},\n number = {10},\n pages = {4099--4114},\n author = {K. K. Thornber and Richard P. Feynman},\n title = {Velocity Acquired by an Electron in a Finite Electric Field in a Polar Crystal},\n journal = {Physical Review B}\n}\n","category":"page"}] +[{"location":"functions/#Functions","page":"Functions","title":"Functions","text":"","category":"section"},{"location":"functions/","page":"Functions","title":"Functions","text":"Modules = [PolaronMobility]\nOrder = [:type, :function]","category":"page"},{"location":"functions/#PolaronMobility.FrohlichPolaron","page":"Functions","title":"PolaronMobility.FrohlichPolaron","text":"Polaron(x...)\n\nType for storing the polaron information, x....\n\n\n\n\n\n","category":"type"},{"location":"functions/#PolaronMobility.HolsteinPolaron","page":"Functions","title":"PolaronMobility.HolsteinPolaron","text":"HolsteinPolaron(x...)\n\nType for storing the Holstein polaron information, x....\n\n\n\n\n\n","category":"type"},{"location":"functions/#PolaronMobility.Material","page":"Functions","title":"PolaronMobility.Material","text":"mutable struct Material\n\nStructure to contain material-specific data.\n\n\n\n\n\n","category":"type"},{"location":"functions/#PolaronMobility.A-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.A","text":"A(v, w, ω, β)\n\nHellwarth's A expression from Eqn. (62b) in Hellwarth et al. 1999 PRB. Part of the overall free energy expression.\n\nSee Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.A-Tuple{Vector, Vector, Any, Any}","page":"Functions","title":"PolaronMobility.A","text":"A(v, w, β)\n\nGeneralisation of the A function from Eqn. (62b) in Hellwarth et al. 1999. This is the Helmholtz free energy of the trial model.\n\nRequired for calculating the polaron free energy.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\nβ::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.\n\nSee Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.A-Tuple{Vector, Vector, Any}","page":"Functions","title":"PolaronMobility.A","text":"A(v, w, n)\n\nCalculates A(v, w, β) but at zero-temperature, β = Inf.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.B-Tuple{Vector, Vector, Any, Any, Any}","page":"Functions","title":"PolaronMobility.B","text":"B(v, w, α, β)\n\nGeneralisation of the B function from Eqn. (62c) in Hellwarth et al. 1999. This is the expected value of the exact action taken w.r.t trial action, given for the 'jth' phonon mode.\n\nRequired for calculating the polaron free energy.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\nα::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for the 'jth' phonon mode. \nβ::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.\n\nSee Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.B-Tuple{Vector, Vector, Any, Any}","page":"Functions","title":"PolaronMobility.B","text":"B(v, w, α; rtol = 1e-3)\n\nCalculates B(v, w, α, β) but at zero-temperature, β = Inf.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\nα::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for the 'jth' phonon mode. \n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.C-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.C","text":"C(v, w, ω, β)\n\nHellwarth's C expression from Eqn. (62e) in Hellwarth et al. 1999 PRB. Part of the overall free energy expression.\n\nSee Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.C-Tuple{Vector, Vector, Any, Any}","page":"Functions","title":"PolaronMobility.C","text":"C(v, w, β)\n\nGeneralisation of the C function from Eqn. (62e) in Hellwarth et al. 1999. This is the expected value of the trial action taken w.r.t trial action.\n\nRequired for calculating the polaron free energy.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\nβ::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.\n\nSee Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.C-Tuple{Vector, Vector, Any}","page":"Functions","title":"PolaronMobility.C","text":"C(v, w)\n\nCalculates C(v, w, β) but at zero-temperature, β = Inf.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.C_ij-Tuple{Any, Any, Vector, Vector}","page":"Functions","title":"PolaronMobility.C_ij","text":"C_ij(i, j, v, w)\n\nCalculates the element to the coupling matrix C_ij (a generalisation of Feynman's C coupling variational parameter in Feynman 1955) between the electron and the ith' andjth' fictitious masses that approximates the exact electron-phonon interaction with a harmonic coupling to a massive fictitious particle. \n\nRequired for calculating the polaron free energy.\n\nNote: Not to be confused with the number of physical phonon branches; many phonon branches could be approximated with one or two etc. fictitious masses for example. The number of fictitious mass does not necessarily need to match the number of phonon branches.\n\nArguments\n\ni::Integer, j::Integer: enumerate the current fictitious masses under focus (also the index of the element in the coupling matrix C)\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\n\nSee Feynman 1955: http://dx.doi.org/10.1103/PhysRev.97.660.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.D-Tuple{Any, Vector, Vector, Any, Any}","page":"Functions","title":"PolaronMobility.D","text":"D(τ, v, w, β)\n\nCalculates the recoil function (a generalisation of D(u) in Eqn. (35c) in FHIP 1962) that approximates the exact influence (recoil effects) of the phonon bath on the electron with the influence of the fictitious masses attached by springs to the electron. It appears in the exponent of the intermediate scattering function.\n\nArguments\n\nτ::Float64: is the imaginary time variable.\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\nβ::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.\n\nSee FHIP 1962: https://doi.org/10.1103/PhysRev.127.1004.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.D-Tuple{Any, Vector, Vector}","page":"Functions","title":"PolaronMobility.D","text":"D(τ, v, w)\n\nCalculates the recoil function at zero-temperature.\n\nArguments\n\nτ::Float64: is the imaginary time variable.\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.FHIP_mobility_lowT-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.FHIP_mobility_lowT","text":"FHIP_mobility_lowT(v, w, α, ω, β)\n\nFHIP mobility in the low-temperature approximation.\n\nSee also inverse_FHIP_mobility_lowT\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.HellwarthAScheme-Tuple{Any}","page":"Functions","title":"PolaronMobility.HellwarthAScheme","text":"HellwarthAScheme(phonon_modes; T=295, convergence=1e-6)\n\nMultiple phonon mode reduction to a single effective frequency. Temperature dependent, defaults to T = 295 K.\n\nSolved iteratively by bisection until Δfreq < convergence.\n\nFollows Hellwarth et al. 1999 PRB 'A' scheme, Eqn. (50) RHS.\n\nSee Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.HellwarthBScheme-Tuple{Any}","page":"Functions","title":"PolaronMobility.HellwarthBScheme","text":"HellwarthBScheme(LO)\n\nLO an array assumed to be of [freq ; absolute ir activity]\n\nMultiple phonon mode reduction to a single effective frequency. Hellwarth et al. 1999 PRB, 'B scheme'; the athermal method. Averaging procedure is constructed by considering the average effect of the action of multiple branches.\n\nFollows Eqn. (58) in this paper, assuming typo on LHS, should actually be W_e.\n\nSee Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.Hellwarth_mobility-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.Hellwarth_mobility","text":"Hellwarth_mobility(v, w, α, ω, β)\n\nThe Hellwarth polaron mobility.\n\nSee also inverse_Hellwarth_mobility\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.Kadanoff_mobility_lowT-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.Kadanoff_mobility_lowT","text":"Kadanoff_mobility_lowT(v, w, α, ω, β)\n\nKadanoff mobility in the low-temperature approximation.\n\nSee also inverse_Kadanoff_mobility_lowT\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.addunits!-Tuple{FrohlichPolaron}","page":"Functions","title":"PolaronMobility.addunits!","text":"addunits!(polaron::Polaron)\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.addunits!-Tuple{Material}","page":"Functions","title":"PolaronMobility.addunits!","text":"addunits!(polaron::Material)\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.feynmanvw-Tuple{Vector, Vector, Vararg{Any}}","page":"Functions","title":"PolaronMobility.feynmanvw","text":"feynmanvw(v, w, αωβ...; upper_limit = Inf64)\n\nMinimises the multiple phonon mode free energy function for a set of vₚ and wₚ variational parameters. The variational parameters follow the inequality: v₁ > w₁ > v₂ > w₂ > ... > vₙ > wₙ. Generalises feynmanvw to multiple variational parameters.\n\nArguments\n\nv::Vector{Float64}: vector of initial v parameters.\nw::Vector{Float64}: vector of initial w parameters.\nα::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for one or many phonon modes. \nω::Union{Float64, Vector{Float64}}: phonon mode frequencies (2π THz) for one or many phonon modes.\nβ::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) for one or many phonon modes.\n\nSee also F.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_complex_conductivity-Tuple{Any, Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.frohlich_complex_conductivity","text":"frohlichcomplexconductivity(Ω, β, α, v, w; rtol = 1e-3)\n\nCalculate the complex conductivity σ(Ω) of the polaron at finite temperatures for a given frequency Ω (equal to 1 / Z(Ω) with Z the complex impedence). \n\nArguments\n\nΩ::Float64: is the frequency (2π THz) of applied electric field.\nβ::Float64: is the reduced thermodynamic betas. \nα::Float64: is the Frohlich alpha coupling parameter.\nv::Float64: is the 'v' variational parameter.\nw::Float64: is the 'w' variational parameter. \nrtol: relative tolerance for the accuracy of any quadrature integrations.\n\nSee also polaron_complex_impedence\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_complex_impedence-Tuple{Any, Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.frohlich_complex_impedence","text":"frohlich_complex_impedence(Ω, β, α, v, w; rtol = 1e-3, T = nothing, verbose = false)\n\nCalculate the complex impedence Z(Ω) of the polaron at finite temperatures for a given frequency Ω (Eqn. (41) in FHIP 1962). \n\nArguments\n\nΩ::Float64: is the frequency (2π THz) of applied electric field.\nβ::Float64: is the reduced thermodynamic betas. \nα::Float64: is the Frohlich alpha coupling parameter.\nv::Float64: is the 'v' variational parameter.\nw::Float64: is the 'w' variational parameter. \nrtol: relative tolerance for the accuracy of any quadrature integrations.\nT: is a token used by make_polaron() to keep track of the temperature for printing during a calculation. Do not alter.\nverbose: is used by make_polaron() to specify whether or not to print. Ignore.\n\nSee FHIP 1962: https://doi.org/10.1103/PhysRev.127.1004.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_coupling-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.frohlich_coupling","text":"frohlich_coupling(k, α, ω)\n\nCalculate the coupling strength for the Frohlich continuum polaron model.\n\nArguments\n\nk: a scalar value representing the k-coordinate in k-space\nα: a scalar value representing the coupling constant\nω: a scalar value representing the phonon frequency\n\nReturns\n\nThe coupling strength for the Frohlich continuum polaron model.\n\nExample\n\nresult = frohlich_coupling(2.0, 0.5, 1.0)\nprintln(result)\n\nExpected Output: 6.0\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_energy-Tuple{Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.frohlich_energy","text":"F(v, w, α, ω, β)\n\nCalculates the Helmholtz free energy of the polaron for a material with multiple phonon branches. \n\nThis generalises the Osaka 1959 (below Eqn. (22)) and Hellwarth. et al 1999 (Eqn. (62a)) free energy expressions.\n\nArguments\n\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\nα::Union{Float64, Vector{Float64}}: is the partial dielectric electron-phonon coupling parameter for the 'jth' phonon mode. \nω::Union{Float64, Vector{Float64}}: phonon mode frequencies (2π THz).\nβ::Union{Float64, Vector{Float64}}: is the reduced thermodynamic temperature ħωⱼ/(kT) associated with the 'jth' phonon mode.\n\nSee Osaka, Y. (1959): https://doi.org/10.1143/ptp.22.437 and Hellwarth, R. W., Biaggio, I. (1999): https://doi.org/10.1103/PhysRevB.60.299.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_energy_k_space-Tuple{Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.frohlich_energy_k_space","text":"frohlich_energy_k_space(v, w, α, ωβ...; rₚ = 1, limits = [0, Inf])\n\nCalculate the total energy, kinetic energy, and interaction energy of the Frohlich lattice polaron.\n\nArguments\n\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: (optional) a scalar value representing the inverse temperature.\nrₚ: The characteristic polaron radius (default is 1).\nlimits: The limits of integration for the interaction energy calculation (default is [0, Inf]).\n\nReturns\n\ntotal_energy: The calculated total polaron energy.\nkinetic_energy: The calculated polaron kinetic energy.\ninteraction_energy: The calculated polaron interaction energy.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_interaction_energy-Tuple{Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.frohlich_interaction_energy","text":"frohlich_interaction_energy(v, w, α, ωβ...)\n\nIntegral of Eqn. (31) in Feynman 1955. Part of the overall ground-state energy expression.\n\nSee Feynman 1955: http://dx.doi.org/10.1103/PhysRev.97.660.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_interaction_energy_k_space-Tuple{Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.frohlich_interaction_energy_k_space","text":"frohlich_interaction_energy_k_space(v, w, α, ω, β; rₚ = 1, limits = [0, Inf])\n\nCalculate the Frohlich polaron interaction energy in k-space at finite temperaure.\n\nArguments\n\nτ: a scalar value representing the imaginary time.\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].\n\nReturns\n\nA scalar value representing the Frohlich polaron interaction energy in k-space at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_memory_function_k_space-Tuple{Any, Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.frohlich_memory_function_k_space","text":"frohlich_memory_function_k_space(Ω, v, w, α, ω, β; rₚ = 1, limits = [0, Inf])\n\nCalculate the memory function for the Frohlich model in k-space at finite temperature and frequency.\n\nArguments\n\nΩ: a scalar value representing the frequency at which the memory function is evaluated.\nv: a scalar value representing the optimal variational parameter.\nw: a scalar value representing the optimal variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.\n\nReturns\n\nA scalar value representing the memory function of the Frohlich model in k-space at finite temperature evaluated at the frequency Ω.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_mobility-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.frohlich_mobility","text":"polaron_mobility(v, w, α, ω, β)\n\nThe polaron mobility.\n\nSee also inverse_polaron_mobility\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_mobility_k_space-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.frohlich_mobility_k_space","text":"frohlich_mobility_k_space(v, w, α, ω, β; rₚ = 1, limits = [0, Inf])\n\nCalculate the DC mobility in k-space for a Frohlich polaron system at finite temperature.\n\nArguments\n\nv: a scalar value representing the optimal variational parameter.\nw: a scalar value representing the optimal variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.\n\nReturns\n\nThe DC mobility in k-space for the Frohlich polaron system at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlich_structure_factor_k_space-Tuple{Any, Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.frohlich_structure_factor_k_space","text":"frohlich_structure_factor_k_space(t, v, w, α, ωβ...; limits = [0, Inf])\n\nCalculate the structure factor in k-space for the Frohlich continuum polaron model at finite temperature.\n\nArguments\n\nt: a scalar value representing the real time.\nv: a scalar value representing a variational parameter.\nw: a scalar value representing a variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is an infinite sphere.\n\nReturns\n\nA scalar value representing the calculated structure factor in k-space for the Frohlich continuum polaron model at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlichalpha-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.frohlichalpha","text":"frohlichalpha(ε_Inf, ε_S, freq, m_eff)\n\nCalculates the Frohlich alpha parameter, for a given dielectric constant, frequency (f) of phonon in Hertz, and effective mass (in units of the bare electron mass).\n\nSee Feynman 1955: http://dx.doi.org/10.1103/PhysRev.97.660.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlichalpha-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.frohlichalpha","text":"frohlichalpha(ϵ_optic, ϵ_ionic, ϵ_total, phonon_mode_freq, m_eff)\n\nCalculates the partial dielectric electron-phonon coupling parameter for a given longitudinal optical phonon mode. \n\nThis decomposes the original Frohlich alpha coupling parameter (defined for a single phonon branch) into contributions from multiple phonon branches.\n\nArguments\n\nϵ_optic::Float64: is the optical dielectric constant of the material.\nϵ_ionic::Float64: is the ionic dielectric contribution from the phonon mode.\nϵ_total::Float64: is the total ionic dielectric contribution from all phonon modes of the material.\nphonon_mode_freq::Float64: is the frequency of the phonon mode (THz).\nm_eff::Float64 is the band mass of the electron (in units of electron mass m_e).\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlichpolaron-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.frohlichpolaron","text":"polaron(αrange, Trange, Ωrange, ω, v_guesses, w_guesses; verbose=false)\n\nOuter constructor for the Polaron type. This function evaluates model data for the polaron, i.e. unitless and not material specific. \n\nExamples\n\njulia> polaron(6, 300, 3, 1.0, 3.6, 2.8)\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlichpolaron-Tuple{Any, Any}","page":"Functions","title":"PolaronMobility.frohlichpolaron","text":"No frequency input.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlichpolaron-Tuple{Any}","page":"Functions","title":"PolaronMobility.frohlichpolaron","text":"No temperature input => 300 K.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlichpolaron-Tuple{Material, Vararg{Any}}","page":"Functions","title":"PolaronMobility.frohlichpolaron","text":"polaron(material::Material, TΩrange...; v_guesses=3.11, w_guesses=2.87, verbose=false)\n\nMaterial specific constructors that use material specific parameters to parameterise the polaron. Material data is inputted through the Material type. Returns all data in either SI units or other common, suitable units otherwise.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlichpolaron-Tuple{Real, Any, Any}","page":"Functions","title":"PolaronMobility.frohlichpolaron","text":"Single alpha parameter. polaron() expects alpha parameters to be in a Vector.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.frohlichpolaron-Tuple{}","page":"Functions","title":"PolaronMobility.frohlichpolaron","text":"No input => α = 1\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.h_i-Tuple{Any, Vector, Vector}","page":"Functions","title":"PolaronMobility.h_i","text":"h_i(i, v, w)\n\nCalculates the normal-mode (the eigenmodes) frequency of the coupling between the electron and the `ith' fictitious mass that approximates the exact electron-phonon interaction with a harmonic coupling to a massive fictitious particle. \n\nRequired for calculating the polaron free energy.\n\nNote: Not to be confused with the number of physical phonon branches; many phonon branches could be approximated with one or two etc. fictitious masses for example. The number of fictitious mass does not necessarily need to match the number of phonon branches.\n\nArguments\n\ni::Integer: enumerates the current fictitious mass.\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_coupling-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.holstein_coupling","text":"holstein_coupling(k, α, ω; dims = 1)\n\nCalculate the coupling strength for the Holstein lattice polaron model.\n\nArguments\n\nk: a scalar value representing the k-coordinate in k-space\nα: a scalar value representing the coupling constant\nω: a scalar value representing the phonon frequency\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\n\nReturns\n\nThe coupling strength for the Holstein model.\n\nExample\n\nresult = holstein_coupling(2.0, 0.5, 1.0; dims = 3)\nprintln(result)\n\nExpected Output: 6.0\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_energy-Tuple{Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.holstein_energy","text":"Total free energy for the Holstein model. Here the k-space integral is evaluated analytically.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_energy_k_space-Tuple{Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.holstein_energy_k_space","text":"holstein_energy_k_space(v, w, α, ωβ...; dims = 3, rₚ = 1, a = 1, limits = [-π, π])\n\nCalculate the total energy, kinetic energy, and interaction energy of the Holstein lattice polaron.\n\nArguments\n\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: (optional) a scalar value representing the inverse temperature.\ndims: The number of dimensions of the system (default is 3).\nrₚ: The characteristic polaron radius (default is 1).\na: The lattice constant (default is 1).\nlimits: The limits of integration for the interaction energy calculation (default is [-π, π]).\n\nReturns\n\ntotal_energy: The calculated total polaron energy.\nkinetic_energy: The calculated polaron kinetic energy.\ninteraction_energy: The calculated polaron interaction energy.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_interaction_energy-Tuple{Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.holstein_interaction_energy","text":"holstein_interaction_energy(v, w, α, ωβ...; dims = 3)\n\nElectron-phonon interaction energy for the Holstein mode at finite temperature. Here the k-space integral is evaluated analytically.\n\nArguments\n\nv: A scalar representing a variational parameter.\nw: A scalar representing a variational parameter.\nα: A scalar representing the electron-phonon coupling.\nω: A scalar representing the adiabaticity.\nβ: A scalar representing the inverse temperature.\ndims: An optional argument representing the number of dimensions. Default is 3.\n\nReturns\n\nintegral: The electron-phonon interaction energy for the Holstein mode at finite temperature.\n\nExample\n\nv = 0.2\nw = 0.1\nα = 0.5\nω = 0.3\nβ = 1.0\nresult = holstein_interaction_energy(v, w, α, ω, β)\nprintln(result)\n\nThis example calculates the electron-phonon interaction energy for given values of v, w, α, ω, and β. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_interaction_energy_k_space-Tuple{Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.holstein_interaction_energy_k_space","text":"holstein_interaction_energy_k_space(v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])\n\nCalculate the Holstein polaron interaction energy in k-space at finite temperaure.\n\nArguments\n\nτ: a scalar value representing the imaginary time.\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an optional array of two scalar values representing the lower and upper limits of the integration range in k-space. Default value is [-π, π].\n\nReturns\n\nA scalar value representing the Holstein polaron interaction energy in k-space at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_memory_function-Tuple{Any, Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.holstein_memory_function","text":"holstein_memory_function(Ω, v, w, α, ω, β; dims = 3)\n\nCalculate the memory function using the general_memory_function function.\n\nArguments\n\nΩ: a parameter representing a frequency\nv, w, α, ω, β: parameters used to calculate the structure factor\ndims: an optional parameter representing the dimensions (default value is 3)\n\nReturns\n\nThe result of the general_memory_function function, which represents the calculated memory function.\n\nExample\n\nresult = holstein_memory_function(Ω, v, w, α, ω, β; dims = 3)\n\nIn this example, the holstein_memory_function is called with the input parameters Ω, v, w, α, ω, and β, and the optional parameter dims set to 3. The function calculates the memory function using the general_memory_function function and returns the result.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_memory_function_k_space-Tuple{Any, Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.holstein_memory_function_k_space","text":"holstein_memory_function_k_space(Ω, v, w, α, ωβ...; dims = 3)\n\nCalculate the memory function for the Holstein model in k-space at finite temperature and frequency.\n\nArguments\n\nΩ: a scalar value representing the frequency at which the memory function is evaluated.\nv: a scalar value representing the optimal variational parameter.\nw: a scalar value representing the optimal variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.\n\nReturns\n\nA scalar value representing the memory function of the Holstein model in k-space at finite temperature evaluated at the frequency Ω.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_mobility-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.holstein_mobility","text":"holstein_mobility(v, w, α, ω, β; dims = 3)\n\nCalculate the mobility using the general_memory_function and holstein_structure_factor functions.\n\nArguments\n\nv: Parameter used in the holstein_structure_factor function.\nw: Parameter used in the holstein_structure_factor function.\nα: Parameter used in the holstein_structure_factor function.\nω: Parameter used in the holstein_structure_factor function.\nβ: Parameter used in the holstein_structure_factor function.\ndims: The dimensionality of the system. Default is 3.\n\nReturns\n\nThe calculated mobility.\n\nExample\n\nv = 1.0\nw = 2.0\nα = 0.5\nω = 1.0\nβ = 0.2\ndims = 3\n\nresult = holstein_mobility(v, w, α, ω, β, dims=dims)\nprintln(result)\n\nThis code calculates the mobility using the given parameters and prints the result.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_mobility_k_space-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.holstein_mobility_k_space","text":"holstein_mobility_k_space(v, w, α, ω, β; dims = 3, rₚ = 1, a = 1, limits = [-π, π])\n\nCalculate the DC mobility in k-space for a Holstein polaron system at finite temperature.\n\nArguments\n\nv: a scalar value representing the optimal variational parameter.\nw: a scalar value representing the optimal variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.\n\nReturns\n\nThe DC mobility in k-space for the Holstein polaron system at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_structure_factor-Tuple{Any, Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.holstein_structure_factor","text":"holstein_structure_factor(t, v, w, α, ω, β; dims = 3)\n\nCalculate the structure factor for the Holstein model.\n\nArguments\n\nt: A scalar representing the time.\nv: A scalar representing a parameter.\nw: A scalar representing a parameter.\nα: A scalar representing a coupling constant.\nω: A scalar representing a coupling constant.\nβ: A scalar representing the inverse temperature.\ndims: An optional argument representing the number of dimensions. Default is 3.\n\nReturns\n\nThe value of the structure factor for the given inputs.\n\nExample\n\nt = 0.5\nv = 0.2\nw = 0.1\nα = 0.3\nω = 0.4\nβ = 1.0\nresult = holstein_structure_factor(t, v, w, α, ω, β)\nprintln(result)\n\nThis example demonstrates how to use the holstein_structure_factor function to calculate the structure factor for a given set of parameters. The function is called with the values of t, v, w, α, ω, and β as arguments, and the result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holstein_structure_factor_k_space-Tuple{Any, Any, Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.holstein_structure_factor_k_space","text":"holstein_structure_factor_k_space(t, v, w, α, ωβ...; dims = 3)\n\nCalculate the structure factor in k-space for the Holstein lattice polaron model at finite temperature.\n\nArguments\n\nt: a scalar value representing the real time.\nv: a scalar value representing a variational parameter.\nw: a scalar value representing a variational parameter.\nα: a scalar value representing the coupling constant.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\ndims: an optional scalar value representing the dimensionality of the system. Default value is 3.\nrₚ: an optional scalar value representing the characteristic polaron radius. Default value is 1.\na: an optional scalar value representing the lattice constant. Default value is 1.\nlimits: an array of two scalar values representing the lower and upper limits of the integration range in k-space. Default is 1D Brillouin zone.\n\nReturns\n\nA scalar value representing the calculated structure factor in k-space for the Holstein lattice polaron model at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holsteinpolaron-Tuple{Any, Any}","page":"Functions","title":"PolaronMobility.holsteinpolaron","text":"No frequency input => Phonon peak.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holsteinpolaron-Tuple{Any}","page":"Functions","title":"PolaronMobility.holsteinpolaron","text":"No temperature input => 300 K.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holsteinpolaron-Tuple{Material, Vararg{Any}}","page":"Functions","title":"PolaronMobility.holsteinpolaron","text":"holstein(material::Material, TΩrange...; v_guesses=3.11, w_guesses=2.87, verbose=false)\n\nMaterial specific constructors that use material specific parameters to parameterise the polaron. Material data is inputted through the Material type. Returns all data in either SI units or other common, suitable units otherwise.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holsteinpolaron-Tuple{Real, Any, Any}","page":"Functions","title":"PolaronMobility.holsteinpolaron","text":"Single alpha parameter. holstein() expects alpha parameters to be in a Vector.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.holsteinpolaron-Tuple{}","page":"Functions","title":"PolaronMobility.holsteinpolaron","text":"No input => α = 1\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_FHIP_mobility_lowT-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.inverse_FHIP_mobility_lowT","text":"inverse_FHIP_mobility_lowT(v, w, α, ω, β)\n\nFHIP low-temperature mobility, final result of Feynman1962. [1.60] in Devreese2016 page 36; 6th Edition of Frohlich polaron notes (ArXiv).\n\nSee also FHIP_mobility_lowT\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_FHIP_mobility_lowT-Tuple{Any, Any, Vector, Vector, Any}","page":"Functions","title":"PolaronMobility.inverse_FHIP_mobility_lowT","text":"inverse_FHIP_mobility_lowT(v, w, α::Vector, ω::Vector, β::Vector)\n\nInverse FHIP mobility for multiple phonon modes.\n\nSee also FHIP_mobility_lowT\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_Hellwarth_mobility-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.inverse_Hellwarth_mobility","text":"inverse_Hellwarth_mobility(v, w, α, ω, β)\n\nCalculates the DC mobility using Hellwarth et al. 1999 Eqn. (2). Directly performs contour integration in Feynman1962, for finite temperature DC mobility. Eqns. (2) and (1) are going back to the general (pre low-T limit) formulas in Feynman1962. To evaluate these, you need to do the explicit contour integration to get the polaron self-energy.\n\nSee Hellwarth et a. 1999: https://doi.org/10.1103/PhysRevB.60.299.\n\nSee also Hellwarth_mobility\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_Hellwarth_mobility-Tuple{Any, Any, Vector, Vector, Any}","page":"Functions","title":"PolaronMobility.inverse_Hellwarth_mobility","text":"inverse_Hellwarth_mobility(v, w, α::Vector, ω::Vector, β::Vector)\n\nInverse Hellwarth mobility for multiple phonon modes.\n\nSee also Hellwarth_mobility\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_Kadanoff_mobility_lowT-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.inverse_Kadanoff_mobility_lowT","text":"inverse_Kadanoff_mobility_lowT(v, w, α, ω, β)\n\nKadanoff low-temperaure mobility, constructed around Boltzmann equation. Adds factor of 3 / (2 * β) c.f. FHIP, correcting phonon emission behaviour.\n\nSee also Kadanoff_mobility_lowT\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_Kadanoff_mobility_lowT-Tuple{Any, Any, Vector, Vector, Any}","page":"Functions","title":"PolaronMobility.inverse_Kadanoff_mobility_lowT","text":"inverse_Kadanoff_mobility_lowT(v, w, α::Vector, ω::Vector, β::Vector)\n\nInverse Kadanoff mobility for multiple phonon modes.\n\nSee also Kadanoff_mobility_lowT\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_frohlich_mobility-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.inverse_frohlich_mobility","text":"inverse_polaron_mobility(v, w, α, ω, β)\n\nCalculate the inverse of the dc mobility μ of the polaron at finite temperatues (Eqn. (11.5) in F. Peeters and J. Devreese 1984) for a given frequency Ω.\n\nArguments\n\nv::Float64: is the 'v' variational parameter.\nw::Float64: is the 'w' variational parameter. \nα::Float64: is the Frohlich alpha coupling parameter.\nω::Float64: is the angular phonon frequency.\nβ::Float64: is the reduced thermodynamic beta. \nverbose: is used by make_polaron() to specify whether or not to print. Ignore.\n\nSee F. Peeters and J. Devreese 1984: https://doi.org/10.1016/S0081-1947(08)60312-4.\n\nSee also polaron_mobility, polaron_complex_conductivity\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.inverse_frohlich_mobility-Tuple{Any, Any, Vector, Vector, Any}","page":"Functions","title":"PolaronMobility.inverse_frohlich_mobility","text":"inverse_polaron_mobility(v, w, α::Vector, ω::Vector, β::Vector)\n\ninverse of the polaron mobility, but for multiple phonon modes.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.load_frohlich_polaron-Tuple{Any}","page":"Functions","title":"PolaronMobility.load_frohlich_polaron","text":"load_polaron(p::FrohlichPolaron, prefix)\n\nLoads data from file \"polaronfilepath\" into a NewPolaron type.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.load_holstein_polaron-Tuple{Any}","page":"Functions","title":"PolaronMobility.load_holstein_polaron","text":"load_polaron(p::NewPolaron, prefix)\n\nLoads data from file \"polaronfilepath\" into a NewPolaron type.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.material-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.material","text":"material(ϵ_optical, ϵ_static, m_eff, phonon_freq)\n\nConstruct a 'struct Material' object from traditional Frohlich Hamiltonian parameters. \n\nϵ_ionic and α derived from these parmaters; other material properties filled with bogus values.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.material-NTuple{6, Any}","page":"Functions","title":"PolaronMobility.material","text":"material(ϵ_optic, ϵ_static, m_eff, phonon_freqs, ir_activity, volume)\n\nConstruct a 'struct Material' object from a set of infrared activities and phonon\nfrequencies, for use with the 'multiple phonon branches' extension of the code. \n\neffective_freq calculated with the Hellwarth 'B' scheme; ϵ_ionic and α calculated from\nthe infrared activties.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.phonon_propagator-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.phonon_propagator","text":"phonon_propagator(τ, ω, β)\n\nCalculate the value of the phonon propagator at a given imaginary time (τ), phonon frequency (ω), and inverse temperature (β).\n\nArguments\n\nτ: A scalar representing the imaginary time.\nω: A scalar representing the phonon frequency.\nβ: A scalar representing the inverse temperature.\n\nReturns\n\nThe value of the phonon propagator.\n\nExample\n\nτ = 0.5\nω = 0.2\nβ = 1.0\nresult = phonon_propagator(τ, ω, β)\nprintln(result)\n\nThis example calculates the value of the phonon propagator for τ = 0.5, ω = 0.2, and β = 1.0. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.phonon_propagator-Tuple{Any, Any}","page":"Functions","title":"PolaronMobility.phonon_propagator","text":"phonon_propagator(τ, ω)\n\nCalculate the value of the phonon propagator based on the given inputs.\n\nArguments\n\nτ: A scalar representing the imaginary time.\nω: A scalar representing the adiabaticity.\n\nExample\n\nτ = 0.5\nω = 0.2\nresult = phonon_propagator(τ, ω)\nprintln(result)\n\nThis example calculates the value of the phonon propagator for the given values of τ and ω. The result is then printed.\n\nReturns\n\nThe value of the phonon propagator.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.polaron_memory_function-Tuple{Any, Any}","page":"Functions","title":"PolaronMobility.polaron_memory_function","text":"polaron_memory_function(Ω, structure_factor; limits = [0, Inf])\n\nThis function calculates the integral of a given structure factor with respect to time using the quadgk function from the QuadGK package.\n\nArguments\n\nΩ: A scalar representing the frequency.\nstructure_factor: A function that returns the value of the structure factor at a given time.\nlimits (optional): A 2-element array specifying the lower and upper limits of integration. Default is [0, Inf].\n\nReturns\n\nThe integral of the structure factor with respect to time.\n\nExample\n\n# Define a structure factor function\nfunction structure_factor(t)\n # Implementation of the structure factor\n # ...\nend\n\n# Calculate the memory function for a given frequency and structure factor\nΩ = 0.5\nlimits = [0, 10]\nresult = general_memory_function(Ω, structure_factor; limits = limits)\nprintln(result)\n\nThis example demonstrates how to use the general_memory_function to calculate the memory function for a given frequency Ω and structure factor function structure_factor. The limits argument is optional and specifies the lower and upper limits of integration. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.polaron_memory_function-Tuple{Any}","page":"Functions","title":"PolaronMobility.polaron_memory_function","text":"general_memory_function(structure_factor; limits = [0, Inf])\n\nCalculate the integral of a given function structure_factor using the quadgk function in Julia.\n\nArguments\n\nstructure_factor: A function that takes a single argument t and returns a value.\nlimits: An optional array specifying the lower and upper limits of integration. Default is [0, Inf].\n\nReturns\n\nintegral: The result of the numerical integration of the function structure_factor over the specified limits.\n\nExample\n\n# Define the structure factor function\nfunction structure_factor(t)\n return t^2 + 2t + 1\nend\n\n# Call the general_memory_function with the structure_factor function\nresult = general_memory_function(structure_factor; limits = [0, 10])\n\nprintln(result) # Output: 383.3333333333333\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.polaron_propagator-NTuple{4, Any}","page":"Functions","title":"PolaronMobility.polaron_propagator","text":"polaron_propagator(τ, v, w)\n\nCalculate the value of the polaron propagator based on the given inputs.\n\nArguments\n\nτ::Number: A scalar representing the imaginary time.\nv::Number: A scalar representing a variational parameter.\nw::Number: A scalar representing a variational parameter.\n\nReturns\n\nThe value of the polaron propagator.\n\nExample\n\nτ = 0.5\nv = 0.2\nw = 0.1\nresult = polaron_propagator(τ, v, w)\nprintln(result)\n\nThis example calculates the polaron propagator for the given values of τ, v, and w. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.polaron_propagator-NTuple{5, Any}","page":"Functions","title":"PolaronMobility.polaron_propagator","text":"polaron_propagator(τ, v, w, β)\n\nCalculate the imaginary time polaron Green's function with temperature dependence.\n\nArguments\n\nτ: A scalar representing the imaginary time.\nv: A scalar representing a variational parameter.\nw: A scalar representing a variational parameter.\nβ: A scalar representing the inverse temperature.\n\nReturns\n\nThe value of the polaron propagator.\n\nExample\n\nτ = 0.5\nv = 0.2\nw = 0.1\nβ = 1.0\nresult = polaron_propagator(τ, v, w, β)\nprintln(result)\n\nThis example calculates the polaron propagator for given values of τ, v, w, and β. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.puconvert-Tuple{Any}","page":"Functions","title":"PolaronMobility.puconvert","text":"puconvert(x::Unitful.Quantity)\n\nConvert a quantity to the appropriate polaron unit.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.puconvert-Tuple{Unitful.Units, Number}","page":"Functions","title":"PolaronMobility.puconvert","text":"puconvert(u::Unitful.Units, x::Number)\n\nInterpret x as a quantity given in polaron units and convert it to the unit u.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.punit-Tuple{Any}","page":"Functions","title":"PolaronMobility.punit","text":"punit(x::Unitful.Quantity)\npunit(x::Unitful.Units)\npunit(x::Unitful.Dimensions)\n\nReturns the appropriate polaron unit (a Unitful.Units object) for the dimension of x.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.pustrip-Tuple{Any}","page":"Functions","title":"PolaronMobility.pustrip","text":"pustrip(x::Unitful.Quantity)\n\nReturns the value of the quantity converted to polaron units as a number type (i.e., with the units removed). This is equivalent to Unitful.ustrip(puconvert(x)).\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.save_frohlich_polaron-Tuple{FrohlichPolaron, Any}","page":"Functions","title":"PolaronMobility.save_frohlich_polaron","text":"save_polaron(p::FrohlichPolaron, prefix)\n\nSaves data from 'polaron' into file \"prefix\". This is a .jdl file for storing the polaron data whilst preserving types. Allows for saving multidimensional arrays that sometimes arise in the polaron data. Each parameter in the NewPolaron type is saved as a dictionary entry. E.g. NewPolaron.α is saved under JLD.load(\"prefix.jld\")[\"alpha\"].\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.save_holstein_polaron-Tuple{HolsteinPolaron, Any}","page":"Functions","title":"PolaronMobility.save_holstein_polaron","text":"save_polaron(p::Polaron, prefix)\n\nSaves data from 'polaron' into file \"prefix\". This is a .jdl file for storing the polaron data whilst preserving types. Allows for saving multidimensional arrays that sometimes arise in the polaron data. Each parameter in the NewPolaron type is saved as a dictionary entry. E.g. NewPolaron.α is saved under JLD.load(\"prefix.jld\")[\"alpha\"].\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.trial_energy-Tuple{Any, Any, Vararg{Any}}","page":"Functions","title":"PolaronMobility.trial_energy","text":"trial_energy(v, w, ω, β)\n\nCalculate the free electron energy at finite temperature.\n\nArguments\n\nv: a scalar value representing a variational paramater.\nw: a scalar value representing a variational paramater.\nω: a scalar value representing the phonon frequency.\nβ: a scalar value representing the inverse temperature.\n\nReturns\n\nA scalar value representing the calculated free electron energy at finite temperature.\n\nExample\n\nv = 0.5\nw = 1.0\nω = 2.0\nβ = 0.2\nresult = electron_energy(v, w, ω, β; dims = 3)\nprintln(result)\n\nExpected Output: A scalar value representing the calculated free electron energy at finite temperature.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.vw_variation-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.vw_variation","text":"vw_variation(energy, initial_v, initial_w; lower_bounds = [0, 0], upper_bounds = [Inf, Inf])\n\nThis function optimizes the values of v and w to minimize the energy function energy(x[1] + x[2], x[2])[1]. It uses the Optim package to perform the optimization and returns the optimized values of v and w, as well as the minimized energy, kinetic energy, and potential energy.\n\nArguments\n\nenergy: A function that takes two arguments x and y and returns an array of energy components.\ninitial_v: The initial value of v.\ninitial_w: The initial value of w.\nlower_bounds: An optional array representing the lower bounds for v and w optimization. Default is [0, 0].\nupper_bounds: An optional array representing the upper bounds for v and w optimization. Default is [Inf, Inf].\n\nReturns\n\nΔv + w: The optimized value of v.\nw: The optimized value of w.\nenergy_minimized: The minimized energy.\nkinetic_energy: The kinetic energy corresponding to the minimized energy.\npotential_energy: The potential energy corresponding to the minimized energy.\n\nExample\n\nenergy(x, y) = [x^2 + y^2, x^2, y^2]\ninitial_v = 0.5\ninitial_w = 0.2\nlower_bounds = [0, 0]\nupper_bounds = [Inf, Inf]\nresult = vw_variation(energy, initial_v, initial_w; lower_bounds, upper_bounds)\nprintln(result)\n\nThis example demonstrates how to use the vw_variation function. It defines an energy function energy(x, y) that returns an array of energy components. It then calls vw_variation with the initial values of v and w, as well as lower and upper bounds for the optimization. The function optimizes v and w to minimize the energy and returns the optimized values, as well as the minimized energy, kinetic energy, and potential energy. The result is then printed.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.κ_i-Tuple{Any, Vector, Vector}","page":"Functions","title":"PolaronMobility.κ_i","text":"κ_i(i, v, w)\n\nCalculates the spring-constant coupling the electron to the 'ith' fictitious mass that approximates the exact electron-phonon interaction with a harmonic coupling to a massive fictitious particle. \n\nRequired for calculating the polaron free energy.\n\nNote: Not to be confused with the number of physical phonon branches; many phonon branches could be approximated with one or two etc. fictitious masses for example. The number of fictitious mass does not necessarily need to match the number of phonon branches.\n\nArguments\n\ni::Integer: enumerates the current fictitious mass.\nv::Vector{Float64}: is a vector of the v variational parameters.\nw::Vector{Float64}: is a vector of the w variational parameters.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.ϵ_ionic_mode-Tuple{Any, Any, Any}","page":"Functions","title":"PolaronMobility.ϵ_ionic_mode","text":"ϵ_ionic_mode(phonon_mode_freq, ir_activity, volume)\n\nCalculate the ionic contribution to the dielectric function for a given phonon mode.\n\nArguments\n\nphonon_mode_freq::Float64: is the frequency of the mode in THz.\nir_activity::Float64: is the infra-red activity of the mode in e²amu⁻¹.\nvolume::Float64: is the volume of the unit cell of the material in m³.\n\n\n\n\n\n","category":"method"},{"location":"functions/#PolaronMobility.ϵ_total-Tuple{Any, Any}","page":"Functions","title":"PolaronMobility.ϵ_total","text":"ϵ_total(freqs_and_ir_activity, volume)\n\nCalculate the total ionic contribution to the dielectric function from all phonon modes.\n\nArguments\n\nfreqs_and_ir_activity::Matrix{Float64}: is a matrix containeing the phonon mode frequencies (in THz) in the first column and the infra-red activities (in e²amu⁻¹) in the second column.\nvolume::Float64: is the volume of the unit cell of the material in m^3.\n\n\n\n\n\n","category":"method"},{"location":"examples/#Examples","page":"Examples","title":"Examples","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"Perhaps the easiest way to understand the code is to see how it can be used for science. As an example system, we are going to look at some of the basic polaron properties of methylammonium lead-iodide perovskite.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The 'Feynman' units used internally set the LO phonon reduced frequency omega=1, hbar=1 and mass-of-electron=1. ","category":"page"},{"location":"examples/#Loading-the-Module","page":"Examples","title":"Loading the Module","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"using PolaronMobility ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"If you are running the module from outside the Julia package directory (i.e. you have cloned the repository elsewhere to more easily work on the codes), you can supplement the LOAD_PATH.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"push!(LOAD_PATH,\"../src/\") # load module from local directory","category":"page"},{"location":"examples/#α/alpha-parameter","page":"Examples","title":"α/alpha parameter","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"The Frohlich electron-phonon coupling parameter can be characterised by a dimensionless coupling, alpha (α). This gives the long-range ('non analytic') contribution from electrodynamic coupling into infrared active phonon modes.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"alpha = \nfrac12 \nfrac14piepsilon_0 \nleft( frac1epsilon_optical - frac1epsilon_static right ) \nfrace^2hbar omega \nsqrtfrac2m_eomegahbar","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"This is provided as a convenience function (with correct units!). Let us demonstrate by calculating α for CdTe, and compare it to literature values.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The call signature is: ϵ-optical, ϵ-static, phonon-frequency (THz), effective-mass (in mass-of-electron units).","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"α=frohlichalpha(7.1, 10.4, 5.08, 0.095)\nprintln(\"CdTe α=\",α,\" Stone 0.39 / Devreese 0.29\")\n#@test α ≈ 0.3 atol=0.1","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"We get a value of 0.351. ","category":"page"},{"location":"examples/#Feynman-athermal-polaron","page":"Examples","title":"Feynman athermal polaron","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"Tabulated by Schultz (Phys.Rev. 116, 1959. https://doi.org/10.1103/PhysRev.116.526) are some numeric solutions to the athermal Feynman model. These values are often reproduced in the textbooks (e.g. Feynman & Hibbs, Emended Edition, p. 319). For instance, Schultz gets for α=5, v=4.02, w=2.13 and E=-5.4401. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"julia> v,w=feynmanvw(5.0)\n(4.0343437574170915, 2.1400182510339403)\njulia> F(v,w,5.0)\n-5.440144454909065","category":"page"},{"location":"examples/#Single-temperature-phonon-properties","page":"Examples","title":"Single temperature phonon properties","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"Let us calculate the room-temperature (300 K) character of the electron-polaron in methylammonium lead iodide perovskite (MAPI). The parameters we use are as in Frost2017PRB.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The call signature to polaronmobility is: Temperature range, ϵ-optical, ϵ-static, phonon-frequency (Hz), effective-mass (in mass-of-electron units). ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"For electrons in MAPI, these are ϵ=4.5/24.1, f=2.25 THz, me=0.12 electron masses. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"MAPIe=polaronmobility(300, 4.5, 24.1, 2.25, 0.12)","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"This will think for a bit (as Julia just-in-time compiles the required functions), and then spits out a considerable amount of information to STDOUT. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Polaron mobility for system ε_Inf=4.5, ε_S=24.1, freq=2.25e12, \n effectivemass=0.12; with Trange 300 ...\nPolaron mobility input parameters: ε_Inf=4.500000 ε_S=24.100000 freq=2.25e+12 α=2.393991 \nDerived params in SI: ω =1.41372e+13 mb=1.09313e-31 \nT: 300.000000 β: 2.41e+20 βred: 0.36 ħω = 9.31 meV\t\tConverged? : true\n Polaraon Parameters: v= 19.8635 w= 16.9621 || M=0.371360 k=106.845717\t\n Polaron frequency (SI) v= 4.5e+13 Hz w= 3.8e+13 Hz\n Polaron size (rf), following Schultz1959. (s.d. of Gaussian polaron ψ )\n\t Schultz1959(2.4): rf= 0.528075 (int units) = 2.68001e-09 m [SI]\n Polaron Free Energy: A= -6.448918 B= 7.355627 C= 2.912080 F= -3.818788\t = -35.534786 meV\n Polaron Mobility theories:\n\tμ(FHIP)= 0.082053 m^2/Vs \t= 820.53 cm^2/Vs\n\tμ(Kadanoff,via Devreese2016)= 0.019690 m^2/Vs \t= 196.90 cm^2/Vs\n\t\tEqm. Phonon. pop. Nbar: 2.308150 \n\t\tGamma0 = 5.42813e+13 rad/s = 8.63914e+12 /s \n\t\tTau=1/Gamma0 = 1.15752e-13 = 0.115752 ps\n\t\tEnergy Loss = 1.28798e-08 J/s = 80.3893 meV/ps\n\tμ(Hellwarth1999)= 0.013642 m^2/Vs \t= 136.42 cm^2/Vs","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The output is a little ad-hoc, and specific values are perhaps best understood with comparison to the code, and to the references to the original papers!","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Initially the polaron state is solved for variationally. This involves varying v and w to minimise the miss-match between the trial (analytically solvable) polaron Hamiltonian action, and the true temperature-dependent free-energy (as specified by Osaka). The method uses automatic differentiation to get gradients for the optimisation procedure. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"'Textbook' expressions that predict polaron character and mobilities make assumptions about v and w (usually that either v is small, or v=w), and rather than use the finite-temperature free-energies of Osaka, use a more simple athermal polaron energy function.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Values that can be directly derived from these v and w variational parameters are then displayed. This includes the phonon-drag mass renormalisation (M), the effective spring-constant of this drag (k), and the S.I. oscillation rates v and w in Hz. The Schultz polaron size (rf) is outputted in various units. The total polaron energy (as well as its decomposition into free-energy contributions) is also output (A,B,C; and F). Essentially we are just using Julia as a glorified scientific calculator at this point, but with the units checked. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The polaron theories are constructed in reduced units. Generally this means that energy is in units of ħω, and frequencies in a unit of ω (of the input phonon frequency). For convenience, these are re-printed in SI or more standard units. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Beyond Polaron Mobility theories:, the code enters its final phase and uses the v and w parameters specifying the polaron as an input to theories of mobility, and so directly calculate a charge carrier mobility. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The asymptotic 'FHIP' mobility (low T) is calculated, this can be most easily related to textbook expressions that directly infer a mobility from an α parameter. It lacks optical phonon emission, and so shows pathological high temperature (kT > ħω) behaviour. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The Kadanoff mobility (see the original paper) improves on this by assuming a Boltzmann process (independent scattering events). From this theory we can also get an average scattering time, which we relate to the time-scale of the polaron interacting with the phonon cloud, and so to the rate of polaron cooling. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Finally the Hellwarth1999 scheme is used, which goes back to the original 1962 FHIP paper, and directly carries out the contour integral for the polaron impedance function. We improve on this slightly by explicitly calculating with b, though the approximation b=0 makes very little difference for any so-far tested materials. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The data are also returned as a packed up in type of struct Polaron with fields of (T, Kμ, Hμ, FHIPμ, k, M, A, B, C, F, Tau, v, w, βred, rfsi, rfsmallalpha, α, mb, ω).","category":"page"},{"location":"examples/#Hellwarth's-multi-mode-scheme","page":"Examples","title":"Hellwarth's multi-mode scheme","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"The above examples are slightly back-to-front - in that we've specified a single mode frequency, as if the material were a simple tetrahedral semiconductor with only one infrared active mode. (The Linear Optical 'LO' phonon mode.)","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"In order to use these theories with more complex (many atoms in a unit cell) materials of technological relevance, we must first reduce all of these Infrared-active phonon responses to a single effective one. ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"For this we will use the averaging scheme described in Hellwarth1999. Currently only the B scheme (athermal) is correctly implemented; a partial A scheme implementation is present.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Let's test it against the Hellwarth1999 literature data. The argument to the function is a table of frequencies (cm^-1) and infrared activities (unit does not matter, as long as it is consistent). ","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"# Hellwarth et al. PRB 1999 Table II - BiSiO frequencies and activities\nHellwarthII = [\n 106.23 8.86\n 160.51 9.50\n 180.33 20.85\n 206.69 10.05\n 252.76 27.00\n 369.64 61.78\n 501.71 52.87\n 553.60 86.18\n 585.36 75.41\n 607.29 98.15\n 834.53 89.36\n]\n\nprintln(\"Attempting to reproduce Hellwarth et al.'s data.\")\nprintln(\"\\nB scheme: (athermal)\")\nHellwarthBScheme(HellwarthII)\nprintln(\" ... should agree with values given in Hellwarth(60) W_e=196.9 cm^-1 and Hellwarth(61) Ω_e=500 cm^-1\")","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"The output agrees to within three significant figures with the literatures values;","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Hellwarth (58) summation: 0.15505835776181887\nHellwarth (59) summation (total ir activity ^2): 38777.7725\nHellwarth (59) W_e (total ir activity ): 196.92072643579192\nHellwarth (61) Omega (freq): 500.08501275972833","category":"page"},{"location":"examples/#Temperature-dependent-behaviour","page":"Examples","title":"Temperature-dependent behaviour","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"Getting temperature-dependent behaviour is a matter of sending a temperature range to the polaronmobility function.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"MAPIe=polaronmobility(10:10:1000, 4.5, 24.1, 2.25, 0.12)","category":"page"},{"location":"examples/#Plotting","page":"Examples","title":"Plotting","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"For publication, savepolaron outputs a column-delimited text file for post-production plotting (with gnuplot) or similar.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"savepolaron(\"MAPI-electron\",MAPIe)","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Example gnuplot scripts can be found in Examples and HalidePerovskites.","category":"page"},{"location":"examples/#Built-in-plotting","page":"Examples","title":"Built in plotting","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"The convenience function plotpolaron generates (and saves) a number of Plots.jl figures of the temperature dependent behaviour.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"It has been separated off into its own submodule (PlotPolaron), so that the Plots.jl dependency does not slow down loading of PolaronMobility.jl.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"To use it, we therefore need to inform Julia where to find PlotPolaron. A suitable initialisation script was kindly supplied by @wkearn:","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"using PolaronMobility, Plots\ngr()\ninclude(Pkg.dir(\"PolaronMobility\",\"src\",\"PlotPolaron.jl\"))\nusing PlotPolaron","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"As with savepolaron, the call signature is output-file-string and then the polaron object which you have calculated.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"plotpolaron(\"MAPI-electron\",MAPIe)","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"This will attempt to make fairly sensible defaults, and plot a lot of different data of sufficient quality for talk slides.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Much for the functionality has been unrolled into the Jupyter Notebook example, which should also be interactively-runnable from (https://juliabox.com). See the repository README.md for the latest information.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"Here is a figure showing typical temperature-dependent behaviour of the three-different polaron mobility approximations, for MAPI.","category":"page"},{"location":"examples/","page":"Examples","title":"Examples","text":"(Image: MAPI mobility)","category":"page"},{"location":"examples/#Further-examples","page":"Examples","title":"Further examples","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"More complete examples are provided in Examples and HalidePerovskites.","category":"page"},{"location":"#PolaronMobility.jl","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"","category":"section"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"These codes calculate the temperature-dependent polaron mobility for a material. We use the Feynman path-integral variational approach. We have parameters for various metal-halide Perovskites; as well as other systems. These codes implement methods described across a wide range of now quite old literature. The methods have been tested against literature values, and the calculated units more well understood. They enable relative 'turn key' calculation of polaron parameters (most particularly the finite temperature charge carrier mobility) for an arbitrary material system, based on parameters that are standard to calculate with modern ab-initio electronic structure methods. ","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"This documentation is intended to be read alongside the paper which was the first application (and motivation) for these codes: Frost2017PRB (ArXiv:1704.05404 ).","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"The required inputs are the dielectric constants (ϵ-static and ϵ-optic) , a characteristic phonon frequency (ω), and the bare-electron band effective-mass (me). These values can be relatively easily calculated in the ab-initio electronic structure package of your choosing, or measured directly.","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"From these four values, the code solves a temperature-dependent polaron model. This is done by variationally optimising the temperature-dependent free-energies for the coupled electron-phonon system. These optimised parameters describe the polaron with the infinite quantum field of lattice vibrations 'integrated through', and replaced with a phonon-drag term. From this the polaron features such as effective-mass, size of the wavefunction, frequency of energy oscillation etc. can be calculated.","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"This polaron state can then be used as an input to further models for polaron mobility.","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"The codes are designed to produce a set of temperature-dependent mobilities and other data, for direct incorporation into a scientific publication.","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"May your phonons drag in a manner truly sublime.","category":"page"},{"location":"#Installation","page":"PolaronMobility.jl","title":"Installation","text":"","category":"section"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"These codes require Julia >1.7 . ","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"To install, type the following at the Julia REPL:","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"julia> Pkg.add(\"PolaronMobility\")","category":"page"},{"location":"#Community-guidelines","page":"PolaronMobility.jl","title":"Community guidelines","text":"","category":"section"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"Contributions to the code (extending that which is calculated), or additional physical systems / examples, are very welcome. ","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"If you have questions about the software, scientific questions, or find errors, please create a GitHub issue. ","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"If you find this package (or snippets, such as the entered and tested free-energy expressions) useful for your work, please cite the paper Frost2017PRB. ","category":"page"},{"location":"","page":"PolaronMobility.jl","title":"PolaronMobility.jl","text":"@article{Frost2017,\n doi = {10.1103/physrevb.96.195202},\n url = {https://doi.org/10.1103/physrevb.96.195202},\n year = {2017},\n month = {nov},\n publisher = {American Physical Society ({APS})},\n volume = {96},\n number = {19},\n author = {Jarvist Moore Frost},\n title = {Calculating polaron mobility in halide perovskites},\n journal = {Physical Review B}\n}","category":"page"},{"location":"scientific_discussion/#Scientific-discussion","page":"Scientific discussion","title":"Scientific discussion","text":"","category":"section"},{"location":"scientific_discussion/#Overview","page":"Scientific discussion","title":"Overview","text":"","category":"section"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"These codes solve the Feynman polaron mode [Feynman1955] with Ōsaka's [Osaka1961] finite-temperature energies. We use the form of these free energies, as presented in [Hellwarth1999].","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"For each temperature, the total free energy of the Feynman coupled phonon-electron system is minimised by optimising coefficients (v and w) which, equivalently, describe the spring-coupling coefficient (k) and effective-mass (M) of the phonon cloud (i.e. the phonon drag / phonon surfing contribution). This integrates through the infinite quantum field of the harmonic oscillators which make up the dynamic response of the lattice, to simplify the problem back to a quasi-particle (the polaron). ","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"The codes calculate the polaron mobility, with both the original low-temperature FHIP asymptotic approximation [Feynman1962]; Kadanoff's [Kadanoff1964] Boltzmann equation motivated phonon-emission correction to the FHIP; and Hellwarth et al.'s [Hellwarth1999] method. This last method (Hellwarth) is probably the most accurate. This uses a more general result (Eqn. 44-47) in [Feynman1962], directly evaluating the contour integral for the polaron self-energy numerically. ","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"Underlying all this is the simplified Fröhlich Hamiltonian [Frohlich1952] for a single electron interacting with a phonon cloud of non-interacting (harmonic) phonons. The electron-phonon interaction for a polar system is treated at the simple level of being the dielectric response. These are the infrared-active modes present at the Gamma point in the Brillouin zone. Along with an effective mode frequency, the dielectric constants are used to calculate the dimensionless 'α' parameter describing the electron-phonon coupling. (In a simple covalent semiconductor system, the only dielectric active mode is the linear-optical mode.)","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"The Feynman model offers a direct solution of this most simple quantum field problem. The infinite phonon (quantum) field is 'integrated out' by path integration. The soluble system is one in which you have an electron interacting by a (harmonic) spring constant with a mass representing the phonon drag. The variational method allows you to find a set of parameters for this simplified system which produces the smallest free-energy. ","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"This is now a (renormalised) single particle system, a quasi-particle.","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"These Julia codes use Hellwarth's [Hellwarth1999] presentation of Ōsaka's variational free-energies for the Feynman model. We optimise the v and w parameters for these finite-temperature free energies. These can be alternatively restated the mass 'M' and spring-constant 'k' of the coupled phonon-electron Feynman model.","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"Here we apply these methods to the case of hybrid halide perovskites. The method provides the temperature dependent polaron-mobility without any free parameters. No arbitrary relaxation time is needed or used. The scattering processes are treated directly, by including an effective electron-phonon coupling in the specification of the Fröhlich α/'alpha' parameter, and then all other features come from solving the model. The original Feynman model is correct to all orders in alpha, and the Hellwarth direct contour-integration of the general Feynman mobility statement is suitable for high temperature.","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"It was necessary to return to these (rather old!) papers and resolve the models, as hybrid halide perovskites are soft materials with low energy phonons. Therefore the effective temperature in terms of a reduced thermodynamic beta (beta=hbar omega / (kBoltzmann * Temperature) ; β=ħω/(kB.T) ) is much smaller than previously considered.","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"A final note that: in [Hellwarth1999], there is a mistake in the formula for 'b', which is also present in their prior PRL [Biaggio1997]. It is correct in [Feynman1962], where there is no factor of b on the right-hand side. They probably didn't notice this, as they set it to zero. This doesn't make too much difference (~0.1%, for the hybrid halide perovskites) to the calculated mobility. Since we're integrating numerically anyway, we may as well calculate it explicitly.","category":"page"},{"location":"scientific_discussion/#Bibliography","page":"Scientific discussion","title":"Bibliography","text":"","category":"section"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"This bibliography is listed in vague order of utility; I recommend reading the first ones first!","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"Feynman also describes his Polaron model in more detail in both 'Statistical Mechanics' [Feynman1972] and 'Quantum Mechanics and Path Integrals' [FeynmanHibbs1965]. Note that the differing presentations of Feynman do not always agree in detail.","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"Schulman's 'Techniques and applications of path integration' has a 10-page chapter on the Polaron problem. It tries to unify the Feynman prescriptions.","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"J.T. Devreese's \"Fröhlich Polarons. Lecture course including detailed theoretical derivations\" (6th edition, 2016) notes on the ArXiv is a very good place to start & to get an overview of the area. https://arxiv.org/abs/1611.06122","category":"page"},{"location":"scientific_discussion/","page":"Scientific discussion","title":"Scientific discussion","text":"\n% This introduces two prescriptions for reducing a multi-mode polar lattice to\n% a single ~mean-field~ response.\n% It contains a modern version of the Ōsaka finite temperature free-energies\n% for use in a variational solution of the Feynman temperature problem.\n% It also includes how to (numerically) do the contour integration to get the\n% DC-response of the polaron developed in Feynman1962.\n@article{Hellwarth1999,\n doi = {10.1103/physrevb.60.299},\n url = {https://doi.org/10.1103%2Fphysrevb.60.299},\n year = {1999},\n month = {jul},\n publisher = {American Physical Society ({APS})},\n volume = {60},\n number = {1},\n pages = {299--307},\n author = {Robert W. Hellwarth and Ivan Biaggio},\n title = {Mobility of an electron in a multimode polar lattice},\n journal = {Physical Review B}\n}\n\n% Boltzmann / relaxation time approximation solution of mobility in the Feynman\n% polaron problem.\n% We extract a relaxation time (+ offer this method of mobility).\n@article{Kadanoff1963,\n doi = {10.1103/physrev.130.1364},\n url = {https://doi.org/10.1103%2Fphysrev.130.1364},\n year = {1963},\n month = {may},\n publisher = {American Physical Society ({APS})},\n volume = {130},\n number = {4},\n pages = {1364--1369},\n author = {Leo P. Kadanoff},\n title = {Boltzmann Equation for Polarons},\n journal = {Physical Review}\n}\n\n% A long and very useful article developing response theories for the polaron.\n% Mainly known for the FHIP mobility, which is low-temperature only.\n@article{Feynman1962,\n doi = {10.1103/physrev.127.1004},\n url = {https://doi.org/10.1103%2Fphysrev.127.1004},\n year = {1962},\n month = {aug},\n publisher = {American Physical Society ({APS})},\n volume = {127},\n number = {4},\n pages = {1004--1017},\n author = {R. P. Feynman and R. W. Hellwarth and C. K. Iddings and P. M. Platzman},\n title = {Mobility of Slow Electrons in a Polar Crystal},\n journal = {Physical Review}\n}\n\n% The original development of Feynman's solution to the polaron problem.\n% Zero temperature approximate variational solutions developed (in limits w->0,\n% or w=v).\n% Perturbative theories of phonon-drag effective-mass renormalisation given.\n% (i.e. where the 'me=1+alpha/6' & etc. limits are from. )\n@article{Feynman1955,\n doi = {10.1103/physrev.97.660},\n url = {https://doi.org/10.1103%2Fphysrev.97.660},\n year = {1955},\n month = {feb},\n publisher = {American Physical Society ({APS})},\n volume = {97},\n number = {3},\n pages = {660--665},\n author = {R. P. Feynman},\n title = {Slow Electrons in a Polar Crystal},\n journal = {Physical Review}\n}\n\n% Schultz seemed to spend his PhD solving the Feynman polaron problem with\n% a digital computer.\n% Lots of characterisation of the polaron state, and the introduction of an\n% effective polaron size, from considering the variance of the Gaussian\n% wavefunction.\n% Some work towards polaron mobility, but not as developed as in Feynman et al. 1962.\n% Schultz provides units for some of the quantities - which is useful!\n@article{Schultz1959,\n doi = {10.1103/physrev.116.526},\n url = {https://doi.org/10.1103%2Fphysrev.116.526},\n year = {1959},\n month = {nov},\n publisher = {American Physical Society ({APS})},\n volume = {116},\n number = {3},\n pages = {526--543},\n author = {T. D. Schultz},\n title = {Slow Electrons in Polar Crystals: Self-Energy, Mass, and Mobility},\n journal = {Physical Review}\n}\n\n% Free-energies of the finite interacting Polaron system.\n@article{Osaka1961,\n doi = {10.1143/ptp.25.517},\n url = {https://doi.org/10.1143%2Fptp.25.517},\n year = {1961},\n month = {apr},\n publisher = {Oxford University Press ({OUP})},\n volume = {25},\n number = {4},\n pages = {517--536},\n author = {Yukio \\=Osaka},\n title = {Theory of Polaron Mobility},\n journal = {Progress of Theoretical Physics}\n}\n\n% Original statement of the Polaron problem + Frohlich Hamiltonian.\n@article{Frohlich1952,\n doi = {10.1098/rspa.1952.0212},\n url = {https://doi.org/10.1098%2Frspa.1952.0212},\n year = {1952},\n month = {dec},\n publisher = {The Royal Society},\n volume = {215},\n number = {1122},\n pages = {291--298},\n author = {H. Frohlich},\n title = {Interaction of Electrons with Lattice Vibrations},\n journal = {Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences}\n}\n\n@article{Thornber1970,\n doi = {10.1103/physrevb.1.4099},\n url = {https://doi.org/10.1103%2Fphysrevb.1.4099},\n year = {1970},\n month = {may},\n publisher = {American Physical Society ({APS})},\n volume = {1},\n number = {10},\n pages = {4099--4114},\n author = {K. K. Thornber and Richard P. Feynman},\n title = {Velocity Acquired by an Electron in a Finite Electric Field in a Polar Crystal},\n journal = {Physical Review B}\n}\n","category":"page"}] }