8 · Inelastic Extension (brief)
For: users who need to model the Ring effect or hyperspectral retrievals where rotational/vibrational Raman scattering matters. UV/Vis instruments, O₂ A-band, deep Fraunhofer lines.
Prev: 7 · Architecture-Agnostic Code · Next: User Guide → Compute Jacobians (loop back to task layer)
This page is intentionally brief — vSmartMOM's Raman support is a parallel solver path next to the elastic one, not central to most retrievals. For the full RT formalism see Sanghavi & Frankenberg 2023 (Part II); for the optical-property derivation see Sanghavi 2022 (Part I).
In one paragraph
vSmartMOM supports rotational Raman (RRS) and vibrational Raman (VRS, RVRS) inelastic scattering as a parallel kernel path next to the elastic one. Pass the configured mode object as rt_run(RS_type, model, iBand): noRS (default; pure elastic), RRS, or the vibrational VS_0to1_plus / VS_1to0_plus for runs over an incident wavelength and its Raman target bands. The bulk of retrievals (NIR shortwave for greenhouse gases, polarized aerosol over ocean) use noRS — the inelastic correction is small there. UV/Vis retrievals (Ring effect, O₂ A-band line shapes, ozone DOAS) need RRS. Vibrational Raman runs use the _plus variants, whose state and model are built by model_from_parameters(rs, λ₀, params) for one incident wavelength λ₀ (same depolarization rule as the standard builder: with depol: -1 the Rayleigh and Cabannes depolarizations come from the molecular constants, the Rayleigh one with rayleigh_anisotropy; params is not modified); VS_0to1 and VS_1to0 are kept as types only (they have no state builder and do not run in rt_run).
When to enable it
| Application | Mode |
|---|---|
| Ring effect (hyperspectral UV/Vis trace gases) | RRS |
| O₂ A-band line-shape correction at high precision | RRS (single-scatter approximation often suffices via rt_run_ss) |
| Fraunhofer-line ghosting due to N₂/O₂ vibrational Raman | VS_0to1_plus and/or VS_1to0_plus |
| NIR-only retrievals (XCO₂, XCH₄ from OCO-2/3, GOSAT) | noRS (default) |
How it's wired
The Raman path uses the same matrix-operator language as the elastic path. Sanghavi & Frankenberg 2023 §3.3 shows that the elastic adding equations (R₂₀, T₂₀, J₂₀) carry over essentially unchanged; the inelastic adding equations (Eqs. 16–21 of SF2023-II) build the inelastic contributions on top under a linear-in-inelastic-scattering approximation — only one inelastic event per photon path, multiple elastic scattering before and after. Second-order inelastic has been shown to be negligible at typical atmospheric conditions.
Architecturally:
Mode types subtype
AbstractRamanTypeand live insrc/Inelastic/types.jl. Each carries the precomputed Cabannes/Raman greek coefficients and Dunham coefficients for N₂/O₂.Parallel kernel files at
src/CoreRT/CoreKernel/elemental_inelastic.jl,doubling_inelastic.jl,interaction_inelastic.jl.rt_kernel!dispatches onRS_typeto choose which set runs (see theRRS/VS_*methods insrc/CoreRT/CoreKernel/rt_kernel.jl:399–442). The elastic kernel also runs alongside — Raman is additive on top.Diffuse redistribution and direct-solar excitation use different angular shapes. Raman diffuse operators remain square
(NquadN,NquadN,nSpec,nRaman)because they redistribute an arbitrary diffuse incident field. With external-solar SFI, separatearrays have shape (NquadN,nStokes,nSpec,nRaman). They couple only the fixedbeam to diffuse streams and are contracted with before the ordinary Raman source-vector doubling recurrence.fScattRayleighmeans Rayleigh over total extinction, not Rayleigh over scattering extinction: . The RRS elemental kernels attenuate with the total spectraldτ_λ; this factor then isolates the Rayleigh-active part of that extinction for the Raman source. Computing it before gas absorption would over-weight Raman source terms inside absorption lines.rt_run_ss(src/CoreRT/rt_run.jl) is the single-scattering approximation that exists alongsidert_runfor SF2023-II Eq. (32) — the inelastic correctionI₁ ≈ I₀ + (I'₁ − I'₀)that makes the linear-in-inelastic approximation usable in absorbing bands. Not a debug helper; it's the production tool for fast O₂ A-band Raman corrections. Its hemispheric outputshem_R/hem_Tare diffuse fluxes:hem_Texcludes the unscattered direct beam for every quadrature scheme (addfor the total downwelling flux). An
RRSband must hold rotational lines.getRamanSSProp!(rs, λ, ν)measures the line shifts from the band grid point nearestλ(normally the band centre) and keeps only the lines inside the band;rt_runthen scales them so that together they carry the whole Raman fraction (≈ 3 %) of the Rayleigh scattering. A band whose half-width is below the smallest shifts (±11.9 cm⁻¹ for N₂, ±14.3 cm⁻¹ for O₂) holds no line, andgetRamanSSProp!throws anArgumentError: widen the band or usenoRS. A band that holds only some lines conserves the Raman energy but concentrates it on those lines. All lines lie within ±234 cm⁻¹ (N₂, J ≤ 28), so a complete RRS band needs a shoulder of that width around every output point.Raman lines fall between grid points. Each line is shared between its two neighbouring grid points by linear interpolation, which keeps the line's strength and position. Because the shifts are measured from a grid point, the result does not depend on whether
λfalls on a grid point (the mean of an even-length band does not). The vibrational Raman lines of the VS modes are put on their target grids by the same interpolation.Vibrational Raman (
_plus) runs take the Raman light from band 1. Band 1 holds the incident wavelength; its elastic single-scattering albedo is reduced by the whole vibrational Raman fraction of both directions (≈ 9 × 10⁻⁴ at 395 nm), and the target bands keep the full elastic albedo. AVS_0to1_plusrun puts the Stokes (0→1) part, nearly all of it, into its target bands; aVS_1to0_plusrun only the anti-Stokes part (at most a few 10⁻⁴ of it at atmospheric temperatures), so the energy closes when both directions are combined. Rotational Raman is not redistributed in these runs: its energy stays in the elastic part.The vibrational Q branch (ΔJ = 0) has a Rayleigh-type phase matrix whose depolarization follows from the population-weighted Placzek–Teller coefficient ⟨b_JJ⟩ of its per-J lines (ρ ≈ 0.046 for N₂ and 0.100 for O₂); the O and S branches use the rotational Raman phase matrix.
Raman Jacobians are unsupported. The
_lin.jlfiles cover the elastic path only;derivatives through inelastic scattering are not yet implemented.
Code anchors
| Concept | Source |
|---|---|
Mode types (noRS, RRS, VS_0to1, VS_1to0, _plus variants) | src/Inelastic/types.jl |
| Inelastic optical properties (Cabannes, RRS, VRS, RVRS) | src/Inelastic/ |
| Inelastic elemental | src/CoreRT/CoreKernel/elemental_inelastic.jl |
| Inelastic doubling | src/CoreRT/CoreKernel/doubling_inelastic.jl |
| Inelastic interaction | src/CoreRT/CoreKernel/interaction_inelastic.jl |
_plus variants (multi-band) | src/CoreRT/CoreKernel/elemental_inelastic_plus.jl |
| Single-scatter inelastic correction | src/CoreRT/rt_run.jl::rt_run_ss |
| Cabannes vs full Rayleigh selector | src/CoreRT/LayerOpticalProperties/compEffectiveLayerProperties.jl:8–9 |
| Raman Rayleigh extinction fraction | src/CoreRT/LayerOpticalProperties/compEffectiveLayerProperties.jl::_rayleigh_fraction_of_total_extinction |
For developers extending the Raman path (adding a new mode, adding new molecular species), see Add a Raman Mode.
References
Sanghavi (2022), Raman scattering in the earth's atmosphere, part I: Optical properties, JQSRT 291:108328, doi:10.1016/j.jqsrt.2022.108328. Optical-property derivation; Cabannes vs Rayleigh; RRS/VRS/RVRS phase matrices and cross-sections.
Sanghavi & Frankenberg (2023), Raman scattering in the Earth's atmosphere, Part II: Radiative transfer modeling for remote sensing applications, JQSRT 311:108791, doi:10.1016/j.jqsrt.2023.108791. Inelastic RT formalism in the matrix-operator method; constant-
N_doubltrick (Eqs. 8–9); single-scatter correction (Eq. 32).Crib sheet:
docs/dev_notes/theory_references.md§I.