Source code for tardis.transport.montecarlo.estimators.estimators_line

"""Line radiation field estimators for Monte Carlo simulations.

This module contains estimators for line-specific radiation field properties.
"""

import numba as nb
import numpy as np
from numba.experimental import jitclass
from numba.typed import List

from tardis.transport.montecarlo import njit_dict_no_parallel


[docs] @jitclass class EstimatorsLine: """ Estimators for line-specific radiation field properties. Attributes ---------- mean_intensity_blueward : numpy.ndarray Monte Carlo estimator for the mean intensity in a line's extreme blue wing (Lucy 1999). energy_deposition_line_rate : numpy.ndarray Monte Carlo estimator for the rate per unit volume at which energy is removed from the radiation field by line excitations (Lucy 1999). """ mean_intensity_blueward: nb.float64[:, :] # type: ignore[misc] energy_deposition_line_rate: nb.float64[:, :] # type: ignore[misc] def __init__( self, mean_intensity_blueward: np.ndarray, energy_deposition_line_rate: np.ndarray, ) -> None: """ Initialize EstimatorsLine with pre-allocated arrays. Parameters ---------- mean_intensity_blueward Monte Carlo estimator for the mean intensity in a line's extreme blue wing energy_deposition_line_rate Monte Carlo estimator for the rate per unit volume at which energy is removed from the radiation field by line excitations """ self.mean_intensity_blueward = mean_intensity_blueward self.energy_deposition_line_rate = energy_deposition_line_rate def increment(self, other: "EstimatorsLine") -> None: """ Increment estimators with values from another instance. Parameters ---------- other Another EstimatorsLine instance to add. """ self.mean_intensity_blueward += other.mean_intensity_blueward self.energy_deposition_line_rate += other.energy_deposition_line_rate
[docs] @nb.njit(**njit_dict_no_parallel) def init_estimators_line( n_lines_by_n_cells_tuple: tuple[int, int], ) -> EstimatorsLine: """ Factory function to create and initialize EstimatorsLine. Parameters ---------- n_lines_by_n_cells_tuple Shape of tau_sobolev array (n_lines, n_cells). Returns ------- Initialized estimators with zero-filled arrays. """ mean_intensity_blueward = np.zeros(n_lines_by_n_cells_tuple, dtype=np.float64) energy_deposition_line_rate = np.zeros(n_lines_by_n_cells_tuple, dtype=np.float64) return EstimatorsLine(mean_intensity_blueward, energy_deposition_line_rate)
[docs] @nb.njit(**njit_dict_no_parallel) def create_estimators_line_list( n_lines_by_n_cells_tuple: tuple[int, int], number: int ) -> List[EstimatorsLine]: """ Factory function to create a list of EstimatorsLine instances. Parameters ---------- n_lines_by_n_cells_tuple Shape tuple (n_lines, n_cells). number Number of estimator instances to create. Returns ------- Typed list of EstimatorsLine instances. """ estimator_list = List() for _ in range(number): estimator_list.append(init_estimators_line(n_lines_by_n_cells_tuple)) return estimator_list