Ionization Calculations

GASFIR provides three methods for computing strong-field ionization observables. All methods accept a Pulse object and a parameter dictionary, including DataPulse for numerical fields.

Non-Adiabatic Ionization Probability

get_diabatic_ionization_probability() integrates the time-dependent ionization rate over the full pulse envelope:

from gasfir import create_pulse, get_parameters, get_diabatic_ionization_probability

laser  = create_pulse(800, 1e14, 0, 6)
params = get_parameters("Hydrogen_SFA")

prob = get_diabatic_ionization_probability(pulse=laser, param_dict=params)

Time-Resolved Rate

get_diabatic_ionization_rate() returns the instantaneous ionization rate on a user-supplied time grid:

from gasfir import get_diabatic_ionization_rate

t    = laser.get_tgrid(dt=0.25)
rate = get_diabatic_ionization_rate(t_grid=t, pulse=laser, param_dict=params)

Quasi-Static Limit

For validation against tunnel-ionization benchmarks:

from gasfir import get_quasi_static_rate_for_field
import numpy as np

fields  = np.linspace(0.01, 0.2, 50)   # field amplitudes in atomic units
qs_rate = get_quasi_static_rate_for_field(fields, params)

Batch Processing

To compute probabilities for many pulses in one parallelised call, use get_diabatic_ionization_probability_vec():

from gasfir import get_diabatic_ionization_probability_vec

pulses = [create_pulse(800, I, 0, 6) for I in intensities]
probs  = get_diabatic_ionization_probability_vec(pulses, params)

Numerical / DataPulse Fields

All calculation functions work transparently with DataPulse:

from gasfir import DataPulse, get_diabatic_ionization_probability, get_parameters
import numpy as np

# load or construct your field on a time grid
t    = np.linspace(-300, 300, 4801)
A    = my_simulation_result   # vector potential in a.u.

dp   = DataPulse(t, A=A)
prob = get_diabatic_ionization_probability(pulse=dp, param_dict=get_parameters("H_SFA"))