Source code for sasktran2.constituent.amf

from __future__ import annotations

import numpy as np

from sasktran2.atmosphere import Atmosphere

from .base import Constituent


[docs] class AirMassFactor(Constituent):
[docs] def __init__( self, ) -> None: """ A dummy atmospheric constituent that does not add any terms to the atmosphere, but rather enables the calculation of Air Mass Factor derivatives. """ super().__init__()
def add_to_atmosphere(self, atmo: Atmosphere): pass def register_derivative(self, atmo: Atmosphere, name: str): # noqa: ARG002 altitudes = atmo.model_geometry.altitudes() alt_factors = -1 / np.gradient(altitudes) # Need to adjust bottom of atmosphere and top to match AMF definition alt_factors[0] *= 2 alt_factors[-1] *= 2 derivs = {} deriv_mapping = atmo.storage.get_derivative_mapping("air_mass_factor") deriv_mapping.d_extinction[:] += alt_factors[:, np.newaxis] deriv_mapping.d_ssa[:] += ( alt_factors[:, np.newaxis] * (0 - atmo.storage.ssa) / atmo.storage.total_extinction ) deriv_mapping.log_radiance_space = True deriv_mapping.interp_dim = "altitude" return derivs