skyscapes.physical_model.exojax.components.base#
Abstract base classes for atmosphere components.
Each abstract class declares the contract its concrete subclasses must
implement. Returning a structured Contribution (rather than a
bare dtau) lets the atmosphere combine absorption, Rayleigh, and
cloud contributions uniformly without each component caring whether the
others are present.
Classes#
Per-layer optical-property contribution from one component. |
|
Temperature-pressure profile. |
|
Per-layer absorption opacity from line lists / cross-sections. |
|
Per-layer scattering opacity (e.g. Rayleigh). |
|
Per-layer cloud opacity (mixed scattering + absorption). |
|
Bottom-of-atmosphere reflectivity. |
Module Contents#
- class skyscapes.physical_model.exojax.components.base.Contribution[source]#
Bases:
NamedTuplePer-layer optical-property contribution from one component.
- Fields:
- dtau_total: Layer optical depth this component adds to the total
opacity budget, shape
(n_layers, n_nu).- dtau_scatter: Subset of
dtau_totalthat is scattering (non-absorbing), shape
(n_layers, n_nu). For a pure absorber this is zero. For Rayleighssa=1so it equalsdtau_total. For a partly-absorbing cloud with single- scattering albedossa_c, this isssa_c * dtau_cloud.- g_weighted_num:
g * dtau_scatternumerator for the weighted- average asymmetry parameter, shape
(n_layers, n_nu). Rayleigh contributes zero (isotropic,g=0). A cloud with asymmetryg_ccontributesg_c * ssa_c * dtau_cloud.
- dtau_total: jaxtyping.Array#
- dtau_scatter: jaxtyping.Array#
- g_weighted_num: jaxtyping.Array#
- class skyscapes.physical_model.exojax.components.base.AbstractTPProfile[source]#
Bases:
equinox.ModuleTemperature-pressure profile.
- class skyscapes.physical_model.exojax.components.base.AbstractAbsorption[source]#
Bases:
equinox.ModulePer-layer absorption opacity from line lists / cross-sections.
Concrete implementations iterate over the atmosphere’s
MolecularSpeciestuple, calling each species’opaengine and summing the contributions.- abstractmethod compute(species, Tarr, pressure, gravity, rt_engine)[source]#
Absorption contribution.
dtau_scatterandg_weighted_numare zero for pure absorbers, but the return shape is the same as for scattering components so the atmosphere can combine them uniformly.- Parameters:
species (tuple[skyscapes.physical_model.exojax.components.species.MolecularSpecies, Ellipsis])
Tarr (jaxtyping.Array)
pressure (jaxtyping.Array)
gravity (jaxtyping.Array)
- Return type:
- class skyscapes.physical_model.exojax.components.base.AbstractScattering[source]#
Bases:
equinox.ModulePer-layer scattering opacity (e.g. Rayleigh).
- abstractmethod compute(species, bulk, gravity, rt_engine, n_layers, n_nu)[source]#
Scattering contribution from tracked species + optional bulk gas.
For a pure scatterer
dtau_total == dtau_scatter;g_weighted_numis zero for isotropic Rayleigh.- Parameters:
species (tuple[skyscapes.physical_model.exojax.components.species.MolecularSpecies, Ellipsis])
bulk (skyscapes.physical_model.exojax.components.species.BulkGasResidual | None)
gravity (jaxtyping.Array)
n_layers (int)
n_nu (int)
- Return type:
- class skyscapes.physical_model.exojax.components.base.AbstractClouds[source]#
Bases:
equinox.ModulePer-layer cloud opacity (mixed scattering + absorption).
- abstractmethod compute(log_pressure_bar_scalar, log_opt_depth_scalar, pressure, n_nu)[source]#
Cloud contribution.
For a single-scattering-albedo cloud the scattering and absorption parts are both nonzero; for a purely scattering cloud
dtau_total == dtau_scatter.- Parameters:
log_pressure_bar_scalar (jaxtyping.Array)
log_opt_depth_scalar (jaxtyping.Array)
pressure (jaxtyping.Array)
n_nu (int)
- Return type: