Source code for solrat.atom_model.base_atom_model.radiative_transfer_equations

try:
    from typing import Self  # Python 3.11+
except ImportError:
    from typing_extensions import Self  # Python <3.11

from abc import abstractmethod
from typing import Generic, TypeVar

import numpy as np

from solrat.atom_model.base_atom_model.object.atmosphere_parameters import AtmosphereParametersT
from solrat.atom_model.base_atom_model.object.config import ConfigT
from solrat.atom_model.base_atom_model.object.rho import RhoT
from solrat.atom_model.shared.object.angles import Angles
from solrat.atom_model.shared.object.radiative_transfer_coefficients import RadiativeTransferCoefficients


[docs] class BaseRTE(Generic[ConfigT, AtmosphereParametersT, RhoT]): r""" Base class for radiative Transfer Equations. """
[docs] @classmethod @abstractmethod def from_model_config(cls, config: ConfigT, nu: np.ndarray) -> Self: r""" Constructor from the model config. :param config: Model config :param nu: frequency array :return: :any:`BaseRTE` subclass instance """
[docs] @abstractmethod def calculate_all_coefficients( self, atmosphere_parameters: AtmosphereParametersT, angles: Angles, rho: RhoT, ) -> RadiativeTransferCoefficients: r""" Compute all radiative transfer coefficients. :param atmosphere_parameters: Atmosphere parameters that define RTE :param angles: :any:`Angles` instance with LOS and magnetic field angles :param rho: density tensor :math:`\rho^K_Q` :return: :any:`RadiativeTransferCoefficients` instance """
RTET = TypeVar("RTET", bound=BaseRTE)