Source code for tardis.opacities.macro_atom.macroatom_solver

from tardis.opacities.macro_atom.base import (
    calculate_transition_probabilities,
    initialize_transition_probabilities,
)
from tardis.opacities.macro_atom.macroatom_state import MacroAtomState


[docs] class MacroAtomSolver: initialize: bool = True normalize: bool = True def __init__(self, initialize=True, normalize=True): """Solver class for Macro Atom related opacities Parameters ---------- initialize: bool Whether or not to initialize the transition probabilitiy coefficients and block references when solving the first time (default True) normalize: bool Whether or not to normalize the transition probabilities to unity. Default True """ self.initialize = initialize self.normalize = normalize
[docs] def initialize_transition_probabilities(self, atomic_data): """initialize the transition probability coefficients and block references when solving the first time Parameters ---------- atomic_data : tardis.io.atom_data.AtomData Atomic Data """ coef_and_block_ref = initialize_transition_probabilities(atomic_data) self.transition_probability_coef = coef_and_block_ref[ "transition_probability_coef" ] self.block_references = coef_and_block_ref["block_references"] self.initialize = False
[docs] def solve_legacy_transition_probabilities( self, atomic_data, legacy_plasma, tau_sobolev, stimulated_emission_factor, ): """Solve the basic transition probabilities for the macroatom Parameters ---------- atomic_data : tardis.io.atom_data.AtomData Atomic Data legacy_plasma : tarids.plasma.BasePlasma legacy base plasma tau_sobolev : pd.DataFrame Expansion Optical Depths stimulated_emission_factor : np.ndarray Returns ------- pd.DataFrame Transition Probabilities """ if self.initialize: self.initialize_transition_probabilities(atomic_data) transition_probabilities = calculate_transition_probabilities( atomic_data, legacy_plasma.beta_sobolev, legacy_plasma.j_blues, stimulated_emission_factor, tau_sobolev, self.transition_probability_coef, self.block_references, normalize=self.normalize, ) return transition_probabilities
[docs] def solve_transition_probabilities( self, atomic_data, mean_intensities, tau_sobolev, beta_sobolev, stimulated_emission_factor, ): """Solve the basic transition probabilities for the macroatom Parameters ---------- atomic_data : tardis.io.atom_data.AtomData Atomic Data mean_intensities : pd.DataFrame Mean intensity of the radiation field for each shell tau_sobolev : pd.DataFrame Expansion Optical Depths beta_sobolev : pd.DataFrame Modified expansion Optical Depths stimulated_emission_factor : np.ndarray Returns ------- pd.DataFrame Transition Probabilities """ if self.initialize: self.initialize_transition_probabilities(atomic_data) transition_probabilities = calculate_transition_probabilities( atomic_data, beta_sobolev, mean_intensities, stimulated_emission_factor, tau_sobolev, self.transition_probability_coef, self.block_references, normalize=self.normalize, ) return transition_probabilities
[docs] def solve( self, legacy_plasma, atomic_data, tau_sobolev, stimulated_emission_factor, beta_sobolev=None, legacy_mode=True, ): """Solved the Macro Atom State Parameters ---------- legacy_plasma : tarids.plasma.BasePlasma legacy base plasma atomic_data : tardis.io.atom_data.AtomData Atomic Data tau_sobolev : pd.DataFrame Expansion Optical Depths stimulated_emission_factor : pd.DataFrame Returns ------- tardis.opacities.macroatom_state.MacroAtomState State of the macro atom ready to be placed into the OpacityState """ if legacy_mode: transition_probabilities = ( self.solve_legacy_transition_probabilities( atomic_data, legacy_plasma, tau_sobolev, stimulated_emission_factor, ) ) else: transition_probabilities = self.solve_transition_probabilities( atomic_data, legacy_plasma.j_blues, tau_sobolev, beta_sobolev, stimulated_emission_factor, ) macro_block_references = atomic_data.macro_atom_references[ "block_references" ] macro_atom_info = legacy_plasma.atomic_data.macro_atom_data return MacroAtomState( transition_probabilities, macro_atom_info["transition_type"], macro_atom_info["destination_level_idx"], macro_atom_info["lines_idx"], macro_block_references, legacy_plasma.atomic_data.lines_upper2macro_reference_idx, )