optmat.gas.molecular_ionisation_rates#
Strong-field ionisation rates of molecules.
The rate (the model default; TC-677 to TC-680) carries the rate of the noble
gases (optmat.gas.ionisation_rates) to molecules. For an unaligned molecule, at
the fields and frequencies of a laser pulse,
\(\langle B^2(m') \rangle\): the structure factors of the ionising orbital of Tong, Zhao and Lin (2002), averaged over the orientations of the molecule (
isotropic_structure_factors()), which take the place of an atom’s \(|C_{\kappa l}|^2 f(l, m)\): for one partial wave the two are the same;\(w^\text{sr}_{m'}\): the short-range rate of Perelomov, Popov and Terent’ev (1966, eq. 54) for the projection \(m'\), with its dependence on the frequency, and \(Q = (2F_0/F)^{2n^*}\) Perelomov and Popov’s static Coulomb factor;
\(S = \exp[-\alpha F/(I_p \kappa^3)]\): Tong and Lin’s (2005) form of the correction at finite field, with \(\alpha\) fitted here to the average over orientations of all-electron static rates (N2, H2);
\(N_\text{eff}\): the number of electrons in the ionising shell, the weak-field limit of the many-electron theory (Tolstikhin, Madsen and Morishita 2014);
\(V\): the average of the rate over the vibrational ground state, where a reference gives it (H2), 1 otherwise.
The ionisation energy is the vertical one, and the rate that of fixed nuclei at
the neutral’s geometry times \(V\). The instantaneous and the cycle-averaged rate
are related as for the noble gases (optmat.gas.ionisation_rates.Averaging).
The forms of the literature. Three rates are in use for molecules in pulse-propagation codes. Each is given as its source gives it, in SI, so that results computed with it can be reproduced and the forms compared with one another and with the references (TC-673):
moadkThe molecular tunnelling rate of Tong, Zhao and Lin (2002). The ionising orbital is written by its asymptotic tail, \(\Psi^m \to \sum_l C_l\, r^{Z/\kappa - 1} e^{-\kappa r}\, Y_{lm}\) (their eqs. 1-2), and for a molecule at the Euler angles \(\mathbf R\) to a static field \(F\) (eqs. 8-9)
\[w(F, \mathbf R) = \sum_{m'} \frac{B^2(m')}{2^{|m'|}\, |m'|!}\, \frac{1}{\kappa^{2Z/\kappa - 1}} \left(\frac{2\kappa^3}{F}\right)^{2Z/\kappa - |m'| - 1} e^{-2\kappa^3/3F}, \qquad B(m') = \sum_l C_l\, D^l_{m'm}(\mathbf R)\, Q(l, m'),\]with \(Q(l, m) = (-1)^m [(2l+1)(l+|m|)!/2(l-|m|)!]^{1/2}\). Averaged over the orientations of the molecule the cross terms between partial waves vanish, \(\langle B^2(m') \rangle = \sum_l C_l^2\, Q^2(l, m')/(2l+1)\) (
isotropic_structure_factors()).pptThe rate of Perelomov, Popov and Terent’ev for an electron with \(l = m = 0\) and an effective charge \(Z_\text{eff}\) fitted to measured ion yields (Talebpour et al. 1998, 1999): \(n^* = Z_\text{eff}/\kappa\), the Hartree coefficient with \(l^* = n^* - 1\), and a Coulomb factor (
optmat.gas.ionisation_rates.coulomb_factor()): the static one, within which the charges were fitted (ppt_talebpour), or Ilkov et al.’s (ppt_talebpour_ilkov), within which the charges were not fitted.adkThe tunnelling rate of a hydrogen-like s electron built on the ionisation energy alone: \(Z = 1\), \(l^* = 0\), no angular factor.
Each is the rate of one electron. To apply an occupancy, set
MolecularRateModel.electrons consistently with the coefficients.
The rates of the moadk and adk forms are static: their cycle-averaged rate is
the static rate times the factor of the tunnelling limit, \((3F/\pi F_0)^{1/2}\).
The ppt form is cycle averaged, and its instantaneous rate is that divided by the
same factor.
None of these is validated as the rate of a molecule. Against the orientation
average of all-electron static rates the moadk form is twice too high for H2, and
for N2 from 0.9 to 6.6 times as the field rises to twice its barrier-suppression
field (optmat.gas.molecular_ionisation_validation).
References#
X. M. Tong, Z. X. Zhao and C. D. Lin, “Theory of molecular tunneling ionization”, Phys. Rev. A 66, 033402 (2002).
S.-F. Zhao, C. Jin, A.-T. Le, T. F. Jiang and C. D. Lin, “Determination of structure parameters in strong-field tunneling ionization theory of molecules”, Phys. Rev. A 81, 033423 (2010).
A. Talebpour, J. Yang and S. L. Chin, “Semi-empirical model for the rate of tunnel ionization of N2 and O2 molecule in an intense Ti:sapphire laser pulse”, Opt. Commun. 163, 29 (1999).
A. Talebpour, S. Larochelle and S. L. Chin, “Suppressed tunnelling ionization of the D2 molecule in an intense Ti:sapphire laser pulse”, J. Phys. B 31, L49 (1998).
M. V. Ammosov, N. B. Delone and V. P. Krainov, “Tunnel ionization of complex atoms and of atomic ions in an alternating electromagnetic field”, Sov. Phys. JETP 64, 1191 (1986).
A. M. Perelomov, V. S. Popov and M. V. Terent’ev, “Ionization of atoms in an alternating electric field”, Sov. Phys. JETP 23, 924 (1966).
A. M. Perelomov and V. S. Popov, “Ionization of atoms in an alternating electrical field. III”, Sov. Phys. JETP 25, 336 (1967).
X. M. Tong and C. D. Lin, “Empirical formula for static field ionization rates of atoms and molecules by lasers in the barrier-suppression regime”, J. Phys. B 38, 2593 (2005).
O. I. Tolstikhin, L. B. Madsen and T. Morishita, “Weak-field asymptotic theory of tunneling ionization in many-electron atomic and molecular systems”, Phys. Rev. A 89, 013421 (2014).
V. P. Majety and A. Scrinzi, “Static field ionization rates for multi-electron atoms and small molecules”, J. Phys. B 48, 245603 (2015).
A. Saenz, “Behavior of molecular hydrogen exposed to strong dc, ac, or low-frequency laser fields. I. Bond softening and enhanced ionization”, Phys. Rev. A 66, 063407 (2002).
Module Attributes
The version of this module's evaluation code, in the identity of every model that evaluates through it; raised whenever the code changes its output (OEP 1, section 4.8). |
|
The named molecular rate models, each with its reasons. |
|
The form of a molecular rate: see the module's description. |
|
The correction of the static rate at finite field. |
Functions
|
Return the static molecular tunnelling rate of one electron. |
Return the gases each molecular rate model covers, building none of them. |
|
|
Return the ionisation rate of a molecule, or a named form of it. |
Return every named molecular rate model, at 800 nm. |
Classes
|
A named form of the ionisation rate of a molecule, at one wavelength. |
- optmat.gas.molecular_ionisation_rates.EVALUATION_VERSION: Final = 2#
The version of this module’s evaluation code, in the identity of every model that evaluates through it; raised whenever the code changes its output (OEP 1, section 4.8).
- optmat.gas.molecular_ionisation_rates.MOLECULAR_RATES_FILE: Final = PosixPath('/home/docs/checkouts/optmat/checkouts/7/src/optmat/data/gas/molecular_ionisation_rates.toml')#
The named molecular rate models, each with its reasons.
- optmat.gas.molecular_ionisation_rates.MolecularCorrection#
The correction of the static rate at finite field.
alias of
Literal[‘tong-lin’, ‘none’]
- optmat.gas.molecular_ionisation_rates.MolecularForm#
The form of a molecular rate: see the module’s description.
alias of
Literal[‘molecular’, ‘moadk’, ‘ppt’, ‘adk’]
- class optmat.gas.molecular_ionisation_rates.MolecularRateModel(gas, wavelength, model, form, ionization_energy, ionization_energy_kind, charge=1.0, structure_factors=<factory>, coefficient_squared=nan, coulomb='ilkov', electrons=1.0, static_correction='none', tong_lin_alpha=nan, correction_range=1.5, vibrational_constant=0.0, averaging='tunnelling', channel_sum='integral', adiabatic_ionization_energy=nan, uncertainty_factor=nan, sources=<factory>, reasons=<factory>, *, status='user', status_reason='', modified=(), base='')[source]#
Bases:
IdentifiedA named form of the ionisation rate of a molecule, at one wavelength.
Built by
molecular_rate_model()from the curated parameters, or byfrom_parameters()from a caller’s;with_parametersrebuilds it with any ofINPUTSchanged. The orientation averagestructure_factorsand the Hartree coefficient are derived, and an override naming them is refused.- Attributes:
- gasGas or str
The molecule, or a custom species’ name.
- wavelengthfloat
Vacuum wavelength of the field, m;
math.inffor a static field. Themolecularandpptforms depend on it.- modelstr
The model’s name in
molecular_ionisation_rates.toml.- form{“molecular”, “moadk”, “ppt”, “adk”}
The form of the rate.
- ionization_energyfloat
The ionisation energy the rate is evaluated with, J.
- ionization_energy_kindstr
adiabatic,verticalornot stated.- chargefloat
The charge seen by the electron: 1, or the fitted effective charge of the
pptform.- structure_factorsdict of int to float
<B^2(m')>of themolecularandmoadkforms, averaged over orientations; empty for the other forms.- coefficient_squaredfloat
The Hartree coefficient of the
pptandadkforms; NaN otherwise.- coulomb{“static”, “ilkov”, “popruzhenko”}
The Coulomb factor of the
molecularandpptforms.- electronsfloat
The factor on the rate of the one electron: 1 as the sources give the rates; the number of electrons in the ionising shell in the
defaultmodel.- static_correction{“tong-lin”, “none”}
The correction of the static rate at finite field.
- tong_lin_alphafloat
Its constant; NaN without a correction.
- correction_rangefloat
The largest field, in barrier-suppression fields, at which the correction is used: above it the rate is held at its value there (
maximum_field).- vibrational_constantfloat
\(c\) of the vibrational factor \(V = e^{c/F^2}\), atomic units of field squared; 0 for fixed nuclei.
- averaging{“consistent”, “tunnelling”}
How the cycle-averaged and the instantaneous rates are related (
optmat.gas.ionisation_rates.Averaging).- channel_sum{“integral”, “sum”}
How the sum over the above-threshold channels is taken.
- adiabatic_ionization_energyfloat
The adiabatic ionisation energy, J, where it differs from the energy of the rate: the energy of the molecule’s ion in its ground state. NaN where not set.
- uncertainty_factorfloat
The factor within which the rate is expected to be right; NaN for the forms of the literature.
- sourcesdict of str to str
The dataset or paper of each part.
- reasonsdict of str to str
Why each choice was made.
- DERIVED: ClassVar[tuple[str, ...]] = ('coefficient_squared', 'structure_factors')#
Fields derived from the inputs, which an override may not name.
- EVALUATES_THROUGH: ClassVar[tuple[str, ...]] = ('optmat.gas.ionisation_rates', 'optmat.gas.molecular_ionisation_rates')#
- INPUTS: ClassVar[tuple[str, ...]] = ('adiabatic_ionization_energy', 'averaging', 'channel_sum', 'charge', 'correction_range', 'coulomb', 'electrons', 'form', 'ionization_energy', 'ionization_energy_kind', 'static_correction', 'structure_coefficients', 'tong_lin_alpha', 'uncertainty_factor', 'vibrational_constant')#
The parameters
with_parameters()may change.
- at_wavelength(wavelength)[source]#
Return the same model at another wavelength.
- Parameters:
- wavelengthfloat
Vacuum wavelength, m;
math.inffor a static field.
- Returns:
- MolecularRateModel
The model at that wavelength.
- property barrier_suppression_field: float#
The field at which the barrier of a Coulomb potential is suppressed, V/m.
- Returns:
- float
I_p^2 / 4Zin atomic units, withZ = 1: beyond it no tunnelling rate holds, and none of these forms has a correction.
- channel_rates(field_strength)[source]#
Return the rate of each channel: one, the instantaneous rate.
For a linearly polarised field (quasi-static along an elliptical one, which optmat does not validate).
- Parameters:
- field_strengtharray_like
The field, V/m; its sign is ignored.
- Returns:
- numpy.ndarray
Rates per molecule, 1/s, shape
(1,) + shape(field).
- Warns:
- ModelRangeWarning
If a field exceeds
maximum_field.
- cycle_averaged_rate(amplitude)[source]#
Return the rate averaged over a cycle of a field of constant amplitude.
For the
moadkandadkforms, the static rate at the amplitude times \((3F/\pi F_0)^{1/2}\).- Parameters:
- amplitudearray_like
Amplitude of the field, V/m; its sign is ignored.
- Returns:
- numpy.ndarray
Rate per molecule, 1/s, with the shape of
amplitude; 0 at zero field.
- Raises:
- ValueError
If the form is
pptand the wavelength is infinite.
- Warns:
- ModelRangeWarning
If a field exceeds
maximum_field.
Examples
>>> model = molecular_rate_model("N2", 800e-9, "moadk_zhao_2010") >>> f"{float(model.cycle_averaged_rate(2.74e10)):.3e}" '2.077e+11'
- property energy_kind: str#
The kind of the ionisation energy the exponent uses.
- Returns:
- str
vertical,adiabaticornot stated, as the curated dataset states it (ionization_energy_kind).
- energy_loss_rate(field_strength)[source]#
Return the energy the ionisation takes from the field,
I_p Gamma.For a linearly polarised field.
- Parameters:
- field_strengtharray_like
The field, V/m; its sign is ignored.
- Returns:
- numpy.ndarray
The energy-loss rate, W per molecule, the shape of the field.
- Warns:
- ModelRangeWarning
If a field exceeds
maximum_field.
- energy_per_event(field_strength)[source]#
Return the ionisation energy of an event: the one the exponent uses.
- Parameters:
- field_strengtharray_like
The field, V/m.
- Returns:
- numpy.ndarray
ionization_energy, J, the shape of the field.
- classmethod from_parameters(species, wavelength, *, form, ionization_energy, ionization_energy_kind='not stated', structure_coefficients=None, structure_factors=None, charge=1.0, electrons=1.0, coulomb='ilkov', static_correction='none', tong_lin_alpha=nan, correction_range=1.5, vibrational_constant=0.0, averaging='tunnelling', channel_sum='integral', adiabatic_ionization_energy=nan, uncertainty_factor=nan, citation='', model='user', sources=None, reasons=None)[source]#
Return a molecular rate model from explicit parameters.
The curated models are built through it. The orientation average of the
molecularandmoadkforms is computed from the structure coefficients, and the Hartree coefficient of thepptandadkforms from the energy and the charge.- Parameters:
- speciesGas or str
A curated molecule, or a custom species’ name, the identity’s material.
- wavelengthfloat
Vacuum wavelength, m;
math.inffor a static field.- form{“molecular”, “moadk”, “ppt”, “adk”}
The form of the rate.
- ionization_energyfloat
- ionization_energy_kindstr, optional
adiabatic,verticalornot stated.- structure_coefficientsMapping or None, optional
C_lby partial wave (sqrt(sum_m |C_lm|^2)), in Tong et al.’s normalisation, for themolecularandmoadkforms.- structure_factorsMapping or None, optional
The orientation average itself, as a curated model stores it, in place of the coefficients.
- chargefloat, optional
The charge seen by the electron (the
pptform’s effective charge).- electronsfloat, optional
The factor on the one electron’s rate.
- coulombstr, optional
The Coulomb factor.
- static_correction{“tong-lin”, “none”}, optional
The correction at finite field, with
tong_lin_alpha.- tong_lin_alphafloat, optional
Its constant.
- correction_rangefloat, optional
The largest field at which it is used, in barrier-suppression fields, 1.5 by default; above it the rate is held.
- vibrational_constantfloat, optional
The vibrational factor’s constant, atomic units of field squared.
- averagingstr, optional
consistentortunnelling.- channel_sumstr, optional
integralorsum.- adiabatic_ionization_energyfloat, optional
J, where it differs from the rate’s.
- uncertainty_factorfloat, optional
A stated uncertainty factor; NaN (none) by default.
- citationstr, optional
Where the parameters come from.
- modelstr, optional
The model’s name,
"user"by default.- sourcesMapping or None, optional
The source of each part.
- reasonsMapping or None, optional
Why each choice was made.
- Returns:
- MolecularRateModel
The model, status
user.
- Raises:
- ValueError
If the structure is missing, given twice, or given to a form without one, or as the model’s checks do.
Examples
>>> from optmat.constants import E_CHARGE >>> model = MolecularRateModel.from_parameters( ... "N2*", 800e-9, form="moadk", ionization_energy=15.58 * E_CHARGE, ... structure_coefficients={0: 2.02, 2: 0.78, 4: 0.04}) >>> model.identity.material, sorted(model.structure_factors) ('N2*', [-4, -3, -2, -1, 0, 1, 2, 3, 4])
- instantaneous_rate(field_strength)[source]#
Return the rate at the instantaneous value of a carrier-resolved field.
For the
pptform, the cycle-averaged rate at an amplitude equal to the instantaneous field, divided by \((3F/\pi F_0)^{1/2}\).- Parameters:
- field_strengtharray_like
The field, V/m; its sign is ignored.
- Returns:
- numpy.ndarray
Rate per molecule, 1/s, with the shape of
field_strength; 0 at zero field.
- Raises:
- ValueError
If the form is
pptand the wavelength is infinite.
- Warns:
- ModelRangeWarning
If a field exceeds
maximum_field.
Examples
>>> model = molecular_rate_model("N2", 800e-9, "moadk_zhao_2010") >>> f"{float(model.instantaneous_rate(2.74e10)):.3e}" '1.019e+12'
- keldysh(field_strength)[source]#
Return the Keldysh parameter at a field.
- Parameters:
- field_strengtharray_like
Field, V/m, > 0.
- Returns:
- numpy.ndarray
omega kappa / F; 0 for a static field.
- property maximum_field: float#
The largest field at which the rate is given without a warning, V/m.
- Returns:
- float
With Tong and Lin’s correction,
correction_rangetimes the barrier-suppression field: the largest field its alpha was fitted to or checked against (TC-828). The barrier-suppression field without a correction.
- property omega_au: float#
The angular frequency of the field in atomic units.
- Returns:
- float
hbar omega / E_h; 0 for a static field.
- with_ionization_energy(ionization_energy, kind)[source]#
Return the same model evaluated with another ionisation energy.
An override (
with_parameters()): the Hartree coefficient of thepptandadkforms is recomputed; the structure coefficients and the effective charge are not, though each was determined with an energy of its own.- Parameters:
- ionization_energyfloat
The energy, J, > 0.
- kindstr
adiabatic,verticalor a description of where it is from.
- Returns:
- MolecularRateModel
The model with that energy, status
user.
- optmat.gas.molecular_ionisation_rates.isotropic_structure_factors(coefficients)[source]#
Return <B^2(m’)> averaged over the orientations of the molecule.
The average of
|sum_l C_l D^l_{m'm}(R) Q(l, m')|^2over the Euler angles issum_l C_l^2 Q(l, m')^2 / (2l + 1), by the orthogonality of the rotation matrices; it does not depend on the orbital’s ownm.- Parameters:
- coefficientsmapping of int to float
C_lby partial wavel, in Tong et al.’s normalisation (eq. 2).
- Returns:
- dict of int to float
<B^2(m')>for everym'from-l_maxtol_max.
- optmat.gas.molecular_ionisation_rates.moadk_rate_au(field_au, ionization_energy_au, structure_factors, charge=1.0)[source]#
Return the static molecular tunnelling rate of one electron.
Tong, Zhao and Lin (2002), eqs. (7) and (9):
\[w(F) = \sum_{m'} \frac{B^2(m')}{2^{|m'|}\, |m'|!}\, \frac{1}{\kappa^{2Z/\kappa - 1}} \left(\frac{2\kappa^3}{F}\right)^{2Z/\kappa - |m'| - 1} e^{-2\kappa^3/3F}.\]- Parameters:
- field_aunumpy.ndarray
Static field, atomic units, > 0.
- ionization_energy_aufloat
Ionisation energy of the orbital, hartree, > 0.
- structure_factorsmapping of int to float
\(B^2(m')\) by \(m'\), every \(m'\) of either sign:
isotropic_structure_factors()for an unaligned molecule.- chargefloat, optional
Charge \(Z\) of the ion left behind.
- Returns:
- numpy.ndarray
Rate, atomic units, with the shape of
field_au.
Examples
Hydrogen 1s (\(C_0 = 2\)) gives \((4/F) e^{-2/3F}\):
>>> import numpy as np >>> factors = isotropic_structure_factors({0: 2.0}) >>> w = moadk_rate_au(np.array(0.05), 0.5, factors) >>> f"{float(w) / (4 / 0.05 * np.exp(-2 / 0.15)):.12f}" '1.000000000000'
- optmat.gas.molecular_ionisation_rates.molecular_rate_coverage()[source]#
Return the gases each molecular rate model covers, building none of them.
- Returns:
- dict of str to tuple of Gas
Each model of
molecular_rate_models()and its gases, in file order, read frommolecular_ionisation_rates.tomlalone; thedefaultmodel’s are the molecules optmat gives an ionisation rate for.
Examples
>>> [gas.value for gas in molecular_rate_coverage()["ppt_talebpour"]] ['D2', 'N2', 'O2']
- optmat.gas.molecular_ionisation_rates.molecular_rate_model(gas, wavelength, model='default')[source]#
Return the ionisation rate of a molecule, or a named form of it.
defaultis optmat’s rate (TC-677 to TC-680); the others are the forms of the literature (TC-673).- Parameters:
- gasGas or str
The molecule.
- wavelengthfloat
Vacuum wavelength of the field, m, > 0;
math.inffor a static field (not for thepptform).- modelstr, optional
A name of
molecular_rate_models():default,moadk_zhao_2010,moadk_zhao_2017,moadk_tong_2002,ppt_talebpour,ppt_talebpour_ilkovoradk_hydrogenic.
- Returns:
- MolecularRateModel
The model.
- Raises:
- DataError
If the model is unknown or is not given for the molecule.
Examples
>>> model = molecular_rate_model("O2", 800e-9, "ppt_talebpour") >>> model.charge, model.form (0.53, 'ppt') >>> nitrogen = molecular_rate_model("N2", 800e-9) >>> nitrogen.form, nitrogen.electrons, nitrogen.ionization_energy_kind ('molecular', 2.0, 'vertical')
- optmat.gas.molecular_ionisation_rates.molecular_rate_models()[source]#
Return every named molecular rate model, at 800 nm.
- Returns:
- dict of str to dict of Gas to MolecularRateModel
The models by name and molecule.
Examples
>>> sorted(molecular_rate_models()) ['adk_hydrogenic', 'default', 'moadk_tong_2002', 'moadk_zhao_2010', 'moadk_zhao_2017', 'ppt_talebpour', 'ppt_talebpour_ilkov']