broadening

starkzee.broadening.calculate_plasma_frequency(Ne_m3)[source]

Return the electron plasma angular frequency ω_p [rad s⁻¹].

The plasma frequency sets the lower cutoff for electron-impact broadening: perturbations with frequency ω < ω_p are screened by collective plasma oscillations and do not contribute to individual collisions.

ω_p = √(N_e e² / (ε₀ m_e))

Parameters:

Ne_m3 (float) – Electron number density [m⁻³].

Returns:

Plasma angular frequency [rad s⁻¹].

Return type:

float

starkzee.broadening.calculate_larmor_frequency(B)[source]

Return the electron Larmor (cyclotron) angular frequency ω_L [rad s⁻¹].

In a magnetic field B the electron gyrates at

ω_L = e B / m_e

This frequency acts as a lower cutoff for the GBK electron-broadening model when it exceeds both ω_p and ω_e: cyclotron motion prevents an electron from approaching the radiator more closely than the cyclotron radius, reducing the effective cross-section at low detunings.

Parameters:

B (float) – Magnetic field strength [T]. B=0 returns 0 safely.

Returns:

Larmor angular frequency [rad s⁻¹].

Return type:

float

starkzee.broadening.calculate_configuration_frequency(Ne_m3, Te_ev)[source]

Return the ion-configuration change frequency ω_e = 2π / τ_e [rad s⁻¹].

τ_e is the mean time for an electron to cross the inter-particle distance r_e at the thermal velocity v_th:

r_e = (3 / 4π N_e)^(1/3) — mean inter-electron spacing v_th = √(k_B T_e / m_e) — thermal speed (non-relativistic) τ_e = r_e / v_th ω_e = 2π / τ_e

ω_e represents the typical rate at which the local electric field seen by the radiator changes due to electron motion, and is used as a lower cutoff in the GBK broadening model.

Parameters:
  • Ne_m3 (float) – Electron number density [m⁻³].

  • Te_ev (float) – Electron temperature [eV].

Returns:

Configuration-change angular frequency [rad s⁻¹].

Return type:

float

starkzee.broadening.calculate_electron_impact_prefactor(Ne_m3, Te_ev)[source]

Return the electron-impact width prefactor W₀ [eV].

The total electron-impact half-width is

W_e = W₀ × ⟨r²⟩_n × [C_n + G(Δω)]

where ⟨r²⟩_n is the statistically averaged squared radius of the upper level (in a₀²), C_n is a strong-collision constant, and G is the GBK dynamical factor. W₀ combines the electron density, temperature, and fundamental constants into a single prefactor:

W₀ = (4π/3) N_e √(2m_e / (π k_B T_e)) × (ħ/m_e)² × (ħ/e)

The factor (ħ/m_e)² converts the squared velocity integral from SI to atomic-unit area, and (ħ/e) converts rad s⁻¹ to eV.

Parameters:
  • Ne_m3 (float) – Electron number density [m⁻³].

  • Te_ev (float) – Electron temperature [eV].

Returns:

Prefactor W₀ [eV a₀⁻²]. Multiply by ⟨r²⟩_n [a₀²] to obtain [eV].

Return type:

float

starkzee.broadening.gbk_model(delta_omega_ev, omega_c_ev, Te_ev, Z, n=2)[source]

Evaluate the semi-classical GBK dynamical broadening function G(Δω).

The Griem–Baranger–Kolb (GBK) model accounts for the frequency dependence of electron-impact broadening using an exponential-integral form:

G(Δω) = ½ E₁(y)

where E₁ is the exponential integral and the dimensionless argument is

y = (n² / 2Z)² × (Δω² + ω_c²) / (E_H T_e)

with E_H = 2 Ry the Hartree energy and T_e in eV. At line center (Δω = 0) G reduces to ½ E₁((n²/2Z)² ω_c² / (E_H T_e)) ≈ a positive constant; in the far wings where Δω ≫ ω_c the argument y grows and G → 0, suppressing the broadening at large detunings (the impact approximation breaks down).

The cutoff frequency ω_c = max(ω_p, ω_e, ω_L) prevents the logarithm from diverging at small impact parameters and encodes the transition from the impact regime to the quasi-static regime.

Parameters:
  • delta_omega_ev (float or array-like) – Frequency detuning from line center Δω [eV].

  • omega_c_ev (float) – Cutoff angular frequency ω_c [eV] (= ħ ω_c in SI units).

  • Te_ev (float) – Electron temperature [eV].

  • Z (int) – Nuclear charge of the radiating ion.

  • n (int, optional) – Principal quantum number of the upper level (default 2).

Returns:

Dimensionless GBK factor G(Δω) ≥ 0.

Return type:

float or ndarray

References

Griem, Baranger, Kolb & Oertel, Phys. Rev. 116, 4 (1959).

starkzee.broadening.electron_impact_width(delta_omega_ev, Ne_m3, Te_ev, B, Z, n=2)[source]

Return the total electron-impact half-width W_e(Δω) [eV].

Implements the frequency-dependent GBK model for electron Stark broadening, extended to include a magnetic-field-dependent cutoff frequency. The total half-width (HWHM of the Lorentzian) is:

W_e(Δω) = W₀ × ⟨r²⟩_n × [C_n + G(Δω, ω_c)]

Prefactor W₀ — see calculate_electron_impact_prefactor().

Mean squared radius ⟨r²⟩_n is the statistical (2l+1)-weighted average of ⟨r²⟩_{n,l} over all l subshells:

⟨r²⟩_{n,l} = (n²/2Z²) [5n² + 1 − 3l(l+1)] [a₀²] ⟨r²⟩_n = (1/n²) Σ_{l=0}^{n-1} (2l+1) ⟨r²⟩_{n,l}

Scales approximately as n⁴/Z², so broadening grows rapidly with n.

Strong-collision constant C_n (from Table 1 of Ferri et al. 2021):

n

C_n

≤ 2

1.50

3, 4

0.75

≥ 5

0.40

Cutoff frequency ω_c = max(ω_p, ω_L, ω_e) where ω_p is the plasma frequency, ω_L the electron Larmor frequency, and ω_e the configuration change frequency. The magnetic field raises ω_c at high B, reducing the resonant broadening contribution.

Parameters:
  • delta_omega_ev (float or array-like) – Frequency detuning from line center Δω [eV]. Pass 0.0 for the on-resonance (line-center) width.

  • Ne_m3 (float) – Electron number density [m⁻³].

  • Te_ev (float) – Electron temperature [eV].

  • B (float) – Magnetic field [T]. B=0 is valid; ω_L = 0 in that case.

  • Z (int) – Nuclear charge of the radiating ion (1 for hydrogen).

  • n (int, optional) – Principal quantum number of the upper level (default 2). The width refers to the upper-level broadening only; the lower-level contribution is neglected, consistent with the semi-classical model.

Returns:

Electron-impact half-width W_e [eV] (HWHM of the Lorentzian component at detuning Δω). Always positive.

Return type:

float or ndarray

Notes

A negligible floor of 1e-10 eV is added by the caller in calculate_static_profile() solely to prevent 0/0 in the Lorentzian at exactly zero density; the raw value returned here is the physical width without that floor.