Opacities (transport coefficients)¶
Module: src/transport_coefficients/ —
agb::TransportCoefficients, agb::OpacitySpecies,
agb::SampledData.
The radiative transfer needs the absorption and scattering coefficients of the gas and the dust at every radius and every spectral point. These are assembled separately and summed:
with the gas/dust split kept explicitly (absorption_coeff_gas /
…_dust etc.) because the temperature corrector and the energy balance act on
each component’s absorption separately (Radiative-equilibrium temperature correction).
Gas opacities¶
agb::TransportCoefficients::calculate() loops over the configured gas
species (one agb::OpacitySpecies each) and accumulates their
contributions for the local temperature, pressure and number densities. Three
kinds of opacity source are handled:
Molecular/atomic line absorption — pre-computed cross sections sampled from a database (HELIOS-K), one folder per species (e.g. CO, H₂O, CO₂, C₂H₂). The cross sections are tabulated on a pressure–temperature grid; for the local conditions the code locates the bracketing tabulated points (
findClosestDataPoints) and interpolates (calcAbsorptionCrossSections). Theagb::SampledDataobjects hold the sampled cross sections on the global wavenumber grid.Continuum / collision-induced absorption (CIA) — e.g. H₂–H₂, H₂–He, H–He (
calcContinuumAbsorption), and the negative ions H⁻ and H₂⁻ (h_m.cpp,h2_m.cpp). These have no line list (”none” folder) and are evaluated from built-in physics; their density depends on collision partners (cia_collision_partner).Rayleigh scattering — wavelength-dependent scattering cross sections per species (
species_rayleigh_cross_sections.cpp,calcScatteringCrossSections/generalRayleighCrossSectionwith the King correction factor).
The species list, the database path, and the per-species folder are set in the
[opacity] block (Configuration (config.toml)). A folder of "none" marks a
species whose opacity is computed internally rather than read from a line list.
Spectral grid and sampling¶
Module: src/spectral_grid/ — agb::SpectralGrid.
The opacity database is tabulated on a fixed, high-resolution global wavenumber
grid (read from wavenumber_full.dat). The model builds a working
constant-resolving-power grid between min_wavelength and
max_wavelength at the requested resolution
(createConstantResolutionGrid), and selects the nearest database points
(index_list). All radiative-transfer quantities live on this working grid;
helpers convert between wavelength (μm and cm) and wavenumber and interpolate data
onto either grid.
Dust opacities¶
The dust absorption and scattering coefficients come from Mie theory applied
to the grain-size information from the dust module (Dust formation (Gail & Sedlmayr)). Given the
complex refractive index of the dust material ([dust] refractive_index_file,
e.g. amorphous carbon) and the grain radius at each layer, the LX-MIE routine
returns the extinction/scattering efficiencies, which are scaled by the grain
geometric cross section and number density
(agb::GailSedlmayrDust::calcTransportCoefficients()). Because the dust
opacity does not depend on temperature, it is computed once per temperature
iteration, not per Unsöld–Lucy sub-step.
Note
A non-finite or non-positive mean grain radius would overflow the Mie series
(a length_error was observed historically when a NaN ⟨a⟩ propagated from a
collapsed density). The dust module floors the grain radius and number
density to guard against this.