Architecture

The package exposes the existing analytic-band column solvers through three levels of API.

High-level column update

radiative_heating! runs the reusable RadiativeTransferColumn workspace by calling longwave and shortwave component solvers. This is the convenience path for examples and single-column workflows.

Component access

Host models can call solve_longwave!, solve_shortwave!, and heating_rates! independently. This keeps solver, flux, and tendency ownership explicit for models that need their own vertical integrals or tendency insertion.

The staged interface also defines optical_properties!, cloud_optical_properties!, aerosol_optical_properties!, and radiative_fluxes! for gas-optics and solver implementations. The ecCKD tabulated models (EcCKDTabulatedGasOpticsModel) fill LongwaveOptics and ShortwaveOptics, and the staged solvers cover clear-sky (CloudlessLongwave, CloudlessShortwave) and cloud-overlap (CloudOverlapLongwave, CloudOverlapShortwave) transport, all writing caller-owned RadiativeFluxes.

heating_rates! can convert RadiativeFluxes into layer heating rates for a ColumnAtmosphere with the gravity and heat capacity of the column's constants (a PhysicalConstants by default; gravity and heat_capacity keywords override). No stage carries a physical constant of its own: the gas optics read gravity and the dry-air molar mass from the same constants for the hydrostatic layer air amounts, and the ecCKD models store the Stefan–Boltzmann constant they were built with. The convention is top-down pressure interfaces, net-downward flux, and positive heating for atmospheric warming.

Workspace access

radiation_workspace returns reusable storage for repeated runtime calls. For the current analytic-band path, RadiativeTransferColumn is already the workspace: it owns the temperature-tendency vector, shortwave transmissivity scratch, and diagnostics.

Host integrations — such as the SpeedyWeather and RRTMGP package extensions — should prefer caller-owned arrays, views, or explicit workspaces over per-call temporary arrays.