tardis.plasma.equilibrium.rate_matrix module

class tardis.plasma.equilibrium.rate_matrix.AnalyticIonRateMatrix(radiative_ionization_rate_solver: AnalyticPhotoionizationRateSolver, collisional_ionization_rate_solver: CollisionalIonizationRateSolver)[source]

Bases: object

Build ionization matrices from analytic radiative rates.

solve(radiation_field: DilutePlanckianRadiationField | PlanckianRadiationField, thermal_electron_energy_distribution: ThermalElectronEnergyDistribution, lte_level_population: DataFrame, level_population: DataFrame, lte_ion_population: DataFrame, ion_population: DataFrame, partition_function: DataFrame, boltzmann_factor: DataFrame, level_to_continuum_saha_factor: DataFrame | None = None, lte_ionization_factor: DataFrame | None = None) DataFrame[source]

Compute the ionization rate matrix.

Parameters:
radiation_fieldRadiationField

A radiation field that can compute its mean intensity.

thermal_electron_energy_distributionThermalElectronEnergyDistribution

Electron properties.

lte_level_populationpd.DataFrame

LTE level number density. Columns are cells.

level_populationpd.DataFrame

Estimated level number density. Columns are cells.

lte_ion_populationpd.DataFrame

LTE ion number density. Columns are cells.

ion_populationpd.DataFrame

Estimated ion number density. Columns are cells.

level_to_continuum_saha_factorpandas.DataFrame, optional

Density-independent Lucy level-to-continuum Saha factor. When omitted, retain the existing LTE-population-derived behavior.

Returns:
pandas.DataFrame

Rate matrices indexed by atomic number, with each column being a shell.

class tardis.plasma.equilibrium.rate_matrix.EstimatedIonRateMatrix(radiative_ionization_rate_solver: EstimatedPhotoionizationRateSolver, collisional_ionization_rate_solver: CollisionalIonizationRateSolver, lte_ionization_factor: DataFrame | None = None)[source]

Bases: object

Build ionization matrices from fixed Monte Carlo estimator rates.

solve(radiation_field: DilutePlanckianRadiationField | PlanckianRadiationField, thermal_electron_energy_distribution: ThermalElectronEnergyDistribution, lte_level_population: DataFrame, level_population: DataFrame, lte_ion_population: DataFrame, ion_population: DataFrame, partition_function: DataFrame, boltzmann_factor: DataFrame, level_to_continuum_saha_factor: DataFrame, lte_ionization_factor: DataFrame | None = None) DataFrame[source]

Compute the ionization rate matrix from fixed estimators.

class tardis.plasma.equilibrium.rate_matrix.RateMatrix(radiative_rate_solver: RadiativeRatesSolver, electron_rate_solver: ThermalCollisionalRateSolver, levels: DataFrame)[source]

Bases: object

Build bound-bound rate matrices from rate solvers.

Construct a rate matrix from explicit bound-bound rate owners.

Parameters:
radiative_rate_solverRadiativeRatesSolver

Solver for radiative transition rates.

electron_rate_solverThermalCollisionalRateSolver

Solver for electron-dependent transition rates.

levelspd.DataFrame

DataFrame of energy levels.

assemble_matrices(j_blues: DataFrame, thermal_electron_energy_distribution: ThermalElectronEnergyDistribution, beta_sobolev: DataFrame | None = None) DataFrame[source]

Assemble column-conserving bound-bound rate matrices.

The returned matrices contain the rate equations, including their column-conserving diagonals, but do not contain the normalization row used by solve(). j_blues and beta_sobolev are used together for radiative transitions, so a residual evaluation can rebuild the matrix at a candidate Sobolev state.

solve(radiation_field: DilutePlanckianRadiationField | PlanckianRadiationField, thermal_electron_energy_distribution: ThermalElectronEnergyDistribution) DataFrame[source]

Construct the compiled rate matrix dataframe.

Parameters:
radiation_fieldRadiationField

Radiation field containing radiative temperature.

thermal_electron_energy_distributionThermalElectronEnergyDistribution

Distribution of electrons in the plasma, containing electron energies, temperatures and number densities.

Returns:
pd.DataFrame

A DataFrame of rate matrices indexed by atomic number and ion number, with each column being a cell.

tardis.plasma.equilibrium.rate_matrix.assemble_ion_rate_matrices(photoion_rates_df: DataFrame, recombination_rates_df: DataFrame, collisional_ionization_rates_df: DataFrame, collisional_recombination_rates_df: DataFrame, lte_ionization_factor: DataFrame | None = None, electron_density: ndarray[tuple[Any, ...], dtype[float64]] | None = None) tuple[DataFrame, MultiIndex][source]

Assemble normalized ionization matrices from collected rates.