Source code for sasktran2.constituent.amf

import numpy as np

from sasktran2 import Atmosphere
from sasktran2.atmosphere import DerivativeMapping, NativeGridDerivative

from .base import Constituent


[docs]class AirMassFactor(Constituent): 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 = {} derivs["air_mass_factor"] = DerivativeMapping( NativeGridDerivative( d_extinction=alt_factors[:, np.newaxis], d_ssa=alt_factors[:, np.newaxis] * (0 - atmo.storage.ssa) / atmo.storage.total_extinction, ), summable=True, log_radiance_space=True, name_prefix="", ) return derivs