Ionisation.jl
Amalthea.Ionisation.IonRateADK — Type
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.
Amalthea.Ionisation.IonRatePPT — Type
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: Iftrue, calculate the cycle-averaged rate. Defaults tofalse.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 totrue.Cnl::Real: Pre-calculatedCₙₗ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).
Amalthea.Ionisation.IonRatePPT — Method
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 shiftdipole_corr::Bool: whether to include the dipole correction factor
Other keyword arguments are identical to IonRatePPT(ionpot::Float64, λ0, Z, l; kwargs...)
Amalthea.Ionisation.IonRatePPTAccel — Method
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 theCSplineinterpolant.Emax::Number: Maximum field strength to include in the interpolant.cache::Bool: Whether to save the pre-calculated rate to a filecachedir::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
Amalthea.Ionisation.RustAdkHandle — Type
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.
Amalthea.Ionisation.RustIonizationHandle — Type
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.
Amalthea.Ionisation.ADK_threshold — Method
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.
Amalthea.Ionisation._libamalthea_path — Method
_libamalthea_path() -> StringReturn the platform-appropriate path to the libamalthea shared library (built with cargo build --release in amalthea/).
Amalthea.Ionisation._make_rust_adk_handle — Method
_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.
Amalthea.Ionisation._make_rust_ionization_handle — Method
_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.
Amalthea.Ionisation.barrier_suppression — Method
barrier_suppression(ionpot, Z)Calculate the barrier-suppresion field strength for the ionisation potential ionpot and charge state Z.
Amalthea.Ionisation.ionfrac — Method
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.
Amalthea.Ionisation.ionrate_ADK — Method
ionrate_ADK(IP_or_material, E::Number; kwargs...) -> Float64Calculate 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...: SeeIonRateADK
Amalthea.Ionisation.keldysh — Method
keldysh(material, λ, E)Calculate the Keldysh parameter for the given material at wavelength λ and electric field strength E.
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.