Ionisation.jl

Amalthea.Ionisation.IonRateADKType
IonRateADK(ionpot::Float64, threshold=true)
IonRateADK(material::Symbol)

Ionisation rate based on the ADK formula. If threshold is true, use ADK_threshold to avoid calculation below floating-point precision. If cycle_average is true, calculate the cycle-averaged ADK ionisation rate instead.

source
Amalthea.Ionisation.IonRatePPTType
IonRatePPT(ionpot::Float64, λ0, Z, l; kwargs...)

PPT ionisation rate for a state with ionisation potential ionpot, when driven at wavelength λ0, also given charge state Z and angular momentum l

Keyword arguments

  • sum_tol::Number: Relative tolerance used to truncate the infinite sum. Defaults to 1e-6.
  • cycle_average::Bool: If true, calculate the cycle-averaged rate. Defaults to false.
  • sum_integral::Bool: whether to approximate the infinite sum in the PPT rate equation with an integral (this neglects the multiphoton thresholds).
  • Δα::Number: polarisability difference between the ground state and the cation (in SI units) to calculate the Stark shift of the ground-state energy levels. Defaults to 0.
  • α_ion::Number: polarisability of the cation (in SI units) to calculate the dipole correction to the rate. Defaults to 0.
  • msum::Bool: for l ≠ 0, whether or not to sum over different m states. Defaults to true.
  • Cnl::Real : Pre-calculated Cₙₗ constant. If not given, defaults to the approximate expression from the PPT papers.
  • occupancy: Occupancy of the state(s) from which ionisation is considered. Defaults to 2 for a state with two electrons (spin up/down).

References

[1] Ilkov, F. A., Decker, J. E. & Chin, S. L. Ionization of atoms in the tunnelling regime with experimental evidence using Hg atoms. Journal of Physics B: Atomic, Molecular and Optical Physics 25, 4005–4020 (1992)

[2] Bergé, L., Skupin, S., Nuter, R., Kasparian, J. & Wolf, J.-P. Ultrashort filaments of light in weakly ionized, optically transparent media. Rep. Prog. Phys. 70, 1633–1713 (2007) (Appendix A)

[3] A. Couairon and A. Mysyrowicz, "Femtosecond filamentation in transparent media," Physics Reports 441(2–4), 47–189 (2007).

source
Amalthea.Ionisation.IonRatePPTMethod
IonRatePPT(material::Symbol, λ0; kwargs...)

PPT ionisation rate for the given material when driven at wavelength λ0.

Keyword arguments

  • stark_shift::Bool: whether to include the Stark shift
  • dipole_corr::Bool: whether to include the dipole correction factor

Other keyword arguments are identical to IonRatePPT(ionpot::Float64, λ0, Z, l; kwargs...)

source
Amalthea.Ionisation.IonRatePPTAccelMethod
IonRatePPTAccel(material::Symbol, λ0; kwargs...)
IonRatePPTAccel(ionpot::Float64, λ0, Z, l; kwargs...)
IonRatePPTAccel(E, rate)

Create a cached (saved) interpolated PPT ionisation rate function. If a saved lookup table exists, load this rather than recalculate.

Keyword arguments

  • N::Int: Number of samples with which to create the CSpline interpolant.
  • Emax::Number: Maximum field strength to include in the interpolant.
  • cache::Bool: Whether to save the pre-calculated rate to a file
  • cachedir::String: Path to the directory where the cache should be stored and loaded from. Defaults to $HOME/.luna/pptcache

Other keyword arguments are passed on to IonRatePPT

source
Amalthea.Ionisation.RustAdkHandleType

Mutable wrapper around a heap-allocated AdkIonizationRate in the Rust shared library (docs/dev/BACKLOG.md Phase I item 3). A GC finalizer calls free_adk_ionization when the handle is no longer reachable.

source
Amalthea.Ionisation.RustIonizationHandleType

Mutable wrapper around a heap-allocated PptIonizationRate in the Rust shared library. A GC finalizer calls free_ppt_ionization_lut when the handle is no longer reachable, so the Rust heap allocation is always reclaimed.

source
Amalthea.Ionisation.ADK_thresholdMethod
ADK_threshold(ionpot)

Determine the lowest electric field strength at which the ADK ionisation rate for the ionisation potential ionpot is non-zero to within 64-bit floating-point precision.

source
Amalthea.Ionisation._make_rust_adk_handleMethod
_make_rust_adk_handle(occupancy, ω_p, cn_sq, nstar, ω_t_prefac, thr, avfac)
    -> Union{Nothing, RustAdkHandle}

Build a Rust-side AdkIonizationRate from Julia's own already-computed ADK constants — closed-form, no LUT fitting (unlike _make_rust_ionization_handle). Same eligibility as the PPT handle: either AMALTHEA_USE_RUST_IONISATION=1 or the native stepper default. Returns nothing when neither toggle is active, or the library/handle construction fails, so the pure-Julia path is taken.

source
Amalthea.Ionisation._make_rust_ionization_handleMethod
_make_rust_ionization_handle(E, rate, Emin, Emax) -> Union{Nothing, RustIonizationHandle}

Build a Rust-side PPT ionization LUT from the already-filtered (E, rate) data (the same knots the Julia CSpline uses), when either AMALTHEA_USE_RUST_IONISATION=1 is set explicitly, or the resident native stepper is enabled (AMALTHEA_USE_RUST_NATIVE defaults to "1" since Phase 8 — see RK45.jl).

The native stepper's plasma wiring (RustNativeStepper's native_set_plasma_params) requires this handle to exist; without it, every default field-resolved prop_capillary call (plasma = !envelope is the default) throws NativeIneligible and silently falls back to the Julia stepper — the native port's headline speedup would then never apply to the fork's own bread-and-butter use case (REVIEW.md §3.2 / docs/dev/BACKLOG.md Phase C.1). Decoupling this from the AMALTHEA_USE_RUST_IONISATION opt-in toggle is safe only because the Rust and Julia paths now agree above Emax too (Phase B.2's clamp parity) — before that fix, silently switching the default ionisation backend would have changed strong-field behaviour without the user asking for it.

Returns nothing when neither toggle is active, or the library/handle construction fails, so the pure-Julia path is taken.

source
Amalthea.Ionisation.ionfracMethod
ionfrac(rate, E, δt)

Given an ionisation rate function rate and an electric field array E sampled with time spacing δt, calculate the ionisation fraction as a function of time on the same time axis.

The function rate should have the signature rate!(out, E) and place its results into out, like the functions returned by e.g. IonRateADK or IonRatePPTCached.

source
Amalthea.Ionisation.ionrate_ADKMethod
ionrate_ADK(IP_or_material, E::Number; kwargs...) -> Float64

Calculate the ionisation rate based on the ADK model.

Arguments

  • IP_or_material: Ionisation potential (Float64) or gas species (Symbol)
  • E::Number: Electric field in SI units (V/M)

Keywords

  • kwargs...: See IonRateADK
source
Amalthea.Ionisation.keldyshMethod
keldysh(material, λ, E)

Calculate the Keldysh parameter for the given material at wavelength λ and electric field strength E.

source
Amalthea.Ionisation.φMethod
φ(m, x)

Calculate the φ function for the PPT ionisation rate.

Note that wm(x) in [1] and φm(x) in [2] look slightly different but are in fact identical.

source