3b · Mie, Rayleigh, and the Phase Matrices
For: users adding aerosols to their scene; method developers extending the scattering codebase; retrieval developers reasoning about polarization sensitivity.
Prev: 3a · Gas Absorption · Next: 3c · Mixing & δ-M Truncation
This page covers three of the four layer-optics arrays plus the aerosol contribution to the optical depth: the Fourier-moment phase matrices
What this page produces
For each aerosol type and each Fourier moment
| Symbol | Meaning | Used for |
|---|---|---|
| phase matrix Fourier moments | layer scattering | |
| aerosol single-scattering albedo | layer SSA | |
| extinction cross-section | aerosol optical depth from microphysics | |
| δ-M forward-truncation factor | consumed in Concepts/03c |
For Rayleigh (and Cabannes), the same
The Mie pipeline
Aerosol(size_dist, n_r, n_i)
│
▼
MieModel
│
▼
compute_aerosol_optical_properties
│
▼
AerosolOptics(GreekCoefs, ω̃, k, fᵗ)
│
▼
compute_Z_moments (per Fourier moment m)
│
▼
(Z⁺⁺, Z⁻⁺) per (μ', μ, m)The user-facing entry is compute_aerosol_optical_properties(model::MieModel) in src/Scattering/. The dispatcher branches on the decomposition algorithm (NAI2() or PCW()) carried in MieModel.
The Greek matrix B_l
Polarized Mie scattering is fully captured by the Greek expansion of the
The six coefficients GreekCoefs struct at src/Scattering/types.jl:231–244:
struct GreekCoefs{FT}
α::Vector{FT}
β::Vector{FT}
γ::Vector{FT}
δ::Vector{FT}
ϵ::Vector{FT}
ζ::Vector{FT}
endThe output of compute_aerosol_optical_properties packages this with the scalar bookkeeping (src/Scattering/types.jl:281–292):
struct AerosolOptics{FT}
greek_coefs::GreekCoefs
ω̃::Union{FT, Array{FT}} # single-scattering albedo
k::Union{FT, Array{FT}} # extinction cross-section
fᵗ::Union{FT, Array{FT}} # δ-M truncation factor
endPhase matrix Z from Greek + μ
Once the Greek coefficients are in hand, the per-Fourier-moment phase matrices
The coded entry point is compute_Z_moments(pol_type, μ, greek, m, arr_type=arr_type) in src/Scattering/compute_Z_matrices.jl. It returns (NquadN, NquadN) (or the pre-broadcast scalar-spectral version that gets expanded across nSpec in expandOpticalProperties).
NAI-2 vs PCW — two ways to compute the Greek expansion
Sanghavi 2014 (the Mie-Fourier paper) compares two decomposition methods:
NAI-2 (Numerical Angular Integration, version 2; Siewert's formalism): computes the scattering matrix on a Gauss-Legendre quadrature in scattering cosine
, then projects to Greek coefficients via integrals against associated Legendre functions. The quadrature roots needed for accurate integration are determined upfront. Default path; entry atsrc/Scattering/compute_NAI2.jl:44.PCW (Pre-computed Wigner; Domke's formalism corrected): computes Greek coefficients directly from products of size-averaged Mie coefficients
etc. weighted by precomputed Wigner-3j symbols. No reconstruction of the angular scattering matrix. Entry atsrc/Scattering/compute_PCW.jl:28.
Tradeoffs (Sanghavi 2014 Mie-Fourier §5):
| Regime | Faster method |
|---|---|
| Single particle, | NAI-2 (no angular reconstruction needed) |
| Polydispersion over a finite size range up to ~80 μm | PCW (6–8× faster than NAI-2) |
| Single small particle | PCW (precomputed Wigner-3j makes individual particles cheap) |
NAI-2 is the safer default. PCW pays off for big polydisperse populations that dominate aerosol retrievals over ocean. Selection is via the DECOMP_MAP in src/IO/Parameters.jl ("NAI2" or "PCW").
Rayleigh and the Cabannes choice
For the molecular contribution (no aerosols, just air molecules):
Pure-elastic runs (
noRS) use the full Rayleigh Greek expansion. In this case rotational Raman is rolled into the effective depolarization ratio ; the phase matrix is the standard Rayleigh form with depolarization of ~0.028 for air at 532 nm.Raman-aware runs (
RRS,VS_*) use the Cabannes Greek expansion. Rotational Raman is then handled explicitly by the inelastic kernel (Concepts/08), and the elastic Cabannes path uses a lower depolarization (~0.007).
The selector at src/CoreRT/LayerOpticalProperties/compEffectiveLayerProperties.jl:8–9:
_rayleigh_greek_source(::Union{noRS, noRS_plus}, greek_rayleigh, greek_cabannes) = greek_rayleigh
_rayleigh_greek_source(::AbstractRamanType, greek_rayleigh, greek_cabannes) = greek_cabannesMismatch — using Cabannes greek with noRS, or full Rayleigh greek with RRS — produces a ~1% bias on Stokes
Aerosol microphysics → optics
The size distribution and refractive index are inputs to the Mie calculation. vSmartMOM ships with two microphysics schemes (in the Aerosols module):
TOMAS15Scheme— TOMAS-15-bin sectional scheme used in CESM/GEOS-Chem.TwoMomentScheme— two-moment lognormal scheme (median radius + width).
Plus a refractive-index database for common aerosol species (sulfate, dust, black carbon, organic carbon, sea salt). See Aerosols (microphysics) for the schemes (status: API still being stabilized — WIP).
Code anchors
| Concept | Source |
|---|---|
| Mie entry (NAI-2) | src/Scattering/compute_NAI2.jl:44 |
| Mie entry (PCW) | src/Scattering/compute_PCW.jl:28 |
| Mie helper (a_n, b_n) | src/Scattering/mie_helper_functions.jl |
| GreekCoefs type | src/Scattering/types.jl:231–244 |
| AerosolOptics type | src/Scattering/types.jl:281–292 |
| Polarization types | src/Scattering/types.jl:92–143 |
| Z from Greek + μ | src/Scattering/compute_Z_matrices.jl::compute_Z_moments |
| Truncation entry | src/Scattering/truncate_phase.jl (used by createAero) |
| Rayleigh / Cabannes selector | src/CoreRT/LayerOpticalProperties/compEffectiveLayerProperties.jl:8–9 |
| GPU Mie kernel | src/Scattering/gpu_mie_kernels.jl:30–100 |
| YAML decomposition map | src/IO/Parameters.jl::DECOMP_MAP |
Hands-on tutorials
Runnable examples with Plotly figures:
References
Sanghavi (2014), Revisiting the Fourier expansion of Mie scattering matrices in generalized spherical functions, JQSRT 136:16–27, doi:10.1016/j.jqsrt.2013.12.015. NAI-2 vs PCW comparison; corrected Domke formalism.
Sanghavi et al. (2014), JQSRT 133:412–433, doi:10.1016/j.jqsrt.2013.09.004, App. A.
Hansen, J. E. & Travis, L. D. (1974), Light scattering in planetary atmospheres, Space Sci. Rev. 16:527. (Background on Mie + Greek matrix.)
Siewert, C. E. (1981, 1982), On the equation of transfer relevant to the scattering of polarized light, On the phase matrix basic to the scattering of polarized light. (NAI formalism.)
Domke, H. (1974), The expansion of scattering matrices for an isotropic medium in generalized spherical functions, Astrophys. Space Sci. 29:379. (PCW basis.)
de Rooij, W. A. & van der Stap, C. C. A. H. (1984), Expansion of Mie scattering matrices in generalized spherical functions, A&A 131:237. (Domke corrections that PCW further fixes.)
Crib sheet:
docs/dev_notes/theory_references.md§G.