Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Prerequisites — Cross-tier infrastructure

UNEP
IMEO
MARS

Before any dispersion model, you need three things that every tier shares: meteorological forcing (winds, turbulence, PBL), static surface fields (orography, roughness, land-use), and the observation-side glue (L1/L2 ingest, averaging kernels). These are not models — they are the data interfaces all tiers read from. Getting them right early pays off because all four tiers will read from the same APIs; getting them wrong forces parallel ports of every tier later.

The page is grouped into:

  1. Forcing — meteorology (dynamic 3D fields)
  2. Static surface fields (orography, land-use, roughness)
  3. Geometry (coordinate frames and time)
  4. Inversion priors (background emission inventory)
  5. Observation side (L1/L2 ingest + averaging kernel)

The fixed forward interface is the contract that ties them together.


1 · Forcing — meteorology

Reanalysis-agnostic met reader

Met forcing has a many-to-one interface. WRF is the highest-fidelity option (you control resolution, microphysics, nesting) and is the industry baseline, but ERA5 / MERRA-2 / HRRR / GEOS-FP are all valid forcing sources. The MetField PyTree is the abstraction; the WRF reader is one concrete loader.

Planetary boundary layer (PBL) height

PBL height is not optional — Tier I plume rise, Tier II trajectory reflection, and Tier IV column partitioning all depend on it. WRF emits it as a diagnostic (PBLH); ERA5 has blh. Carry it as a first-class field on MetField, not buried inside a derived helper.

Pasquill–Gifford stability classifier

Maps surface observations (wind speed, cloud cover, time-of-day, solar elevation) to PG stability class A–F. Used by Gaussian-tier σy\sigma_y, σz\sigma_z parameterizations.

Monin–Obukhov similarity

Surface-layer wind and turbulence profiles. Provides σy(x)\sigma_y(x) and σz(x)\sigma_z(x) as functions of downwind distance, friction velocity uu_*, Obukhov length LL, and surface roughness z0z_0.


2 · Static surface fields

These are time-invariant geophysical fields. Distinct enough from dynamic met to deserve their own loader, but they live alongside MetField (typically broadcast against the time axis).

Surface roughness z0z_0 and land-use

Orography / terrain


3 · Geometry

Coordinate transforms

Time and calendar

UTC throughout — but enforce it. A small Timestamp PyTree (epoch_seconds: int64, tz: Literal["UTC"]) makes the invariant load-bearing instead of aspirational. Document leap-year / leap-second handling at the boundary (most projects botch this once and never again).


4 · Inversion priors

Background emission inventory qaq_a

Every Bayesian inversion (Tiers I–IV, Step 2) uses a prior qaq_a over the source field. Naming a single source matters because results are sensitive to it.


5 · Observation side

L1 / L2 ingest

Symmetric to the met reader. Parses raw satellite products into the shared Observations PyTree.

Averaging-kernel operator

Applies the satellite averaging kernel to a model column:

y^  =  A ⁣(hx+(1h)xa)\hat{y} \;=\; \mathbf{A}\!\left(\mathbf{h}^{\top} \mathbf{x} \,+\, (1 - \mathbf{h}^{\top})\, \mathbf{x}_a\right)

where x\mathbf{x} is the model state (CH₄ mixing-ratio profile), xa\mathbf{x}_a is the prior used in the L2 retrieval, h\mathbf{h} is the column-averaging weighting, and A\mathbf{A} is the satellite-product averaging kernel matrix. The construction follows the optimal-estimation framework of Rodgers, 2000. Needed by Tiers II–IV when comparing to L2 XCH₄ products instead of L1 radiances.


Fixed forward interface

All four tiers implement the same shape:

def forward(params: Params, met: MetField) -> Observations:
    """Map source/state parameters + met forcing → simulated observations.

    Each tier provides its own concrete `Params` PyTree, but the call
    signature, return type, and JAX traceability are identical, so any
    inference loop (NumPyro, vardaX, filterax) takes any tier as a drop-in.
    """

MetField schema

The single most-shared object in plumax. Concrete fields, units, and conventions:

```{list-table} MetField PyTree fields, shapes, units, and provenance. :label: tbl-metfield-schema :header-rows: 1


**Conventions:**

- Coordinate axes ordered `(time, vertical, y, x)` always — never reordered downstream. `coordax` is the natural representation; the loader returns a `coordax.Dataset` with these names.
- Units enforced at load time; downstream code may assume them.
- Time alignment: dynamic fields are time-stamped at their native cadence (typically hourly). The forward interface accepts a *temporal interpolation policy* (snapshot / piecewise-linear / nearest) — see open questions.

### `Params` and `Observations`

- `Params`: tier-specific PyTree (e.g. $(Q, x_0, H)$ for Tier I, $S(x,t)$ field for Tier III).
- `Observations`: per-instrument PyTree from the L1/L2 ingest layer — radiances or column XCH₄ + footprint + mask + uncertainty + AK. Same shape as the L1/L2 product the satellite returned.

This contract is what makes Step 6 ("upgrade any component") tractable: replace `forward` with an emulator, the inference loop doesn't notice.

---

(prereqs-modules)=
## Module layout

```{list-table} Module-level breakdown — concern, target module, status, downstream blockers.
:label: tbl-prereqs-modules
:header-rows: 1

* - Concern
  - Module
  - Status
  - Blocks
* - Met loader (WRF)
  - `plume_simulation.met.wrf`
  - ☐
  - Tier II, III
* - Met loader (ERA5)
  - `plume_simulation.met.era5`
  - ☐
  - global Tier II/III
* - PBL diagnostics
  - `plume_simulation.met.pbl`
  - ☐
  - Tier II reflection, Tier IV partitioning
* - Static fields ($z_0$, LU, terrain)
  - `plume_simulation.met.static`
  - ☐
  - MO similarity, Tier III BCs
* - PG stability
  - `plume_simulation.gauss_plume.dispersion`
  - 🚧 partial
  - Tier I (only)
* - MO similarity
  - `plume_simulation.met.surface_layer`
  - ☐
  - Tier II turbulence, Tier III diffusivity
* - Coord transforms
  - `plume_simulation.met.frames`
  - ☐
  - all tiers
* - Time / Timestamp
  - `plume_simulation.met.time`
  - ☐
  - all tiers
* - Emission inventory loader
  - `plume_simulation.priors.inventory`
  - ☐
  - Tier I–IV inversion priors
* - L1/L2 ingest
  - `plume_simulation.obs.ingest`
  - ☐
  - Tier IV (and any real-data work)
* - AK operator
  - `plume_simulation.assimilation.obs_operator`
  - 🚧 scaffold
  - Tier IV column-space comparison

A plume_simulation.met subpackage doesn’t exist yet — proposed home for the prerequisites that aren’t tied to any particular tier. Same for plume_simulation.priors and plume_simulation.obs.


Validation strategy


Open questions

References
  1. Turner, D. B. (1970). Workbook of Atmospheric Dispersion Estimates. U.S. Department of Health, Education,.
  2. Briggs, G. A. (1973). Diffusion Estimation for Small Emissions (Techreport ATDL-106). Atmospheric Turbulence.
  3. Monin, A. S., & Obukhov, A. M. (1954). Basic laws of turbulent mixing in the surface layer of the atmosphere. Tr. Akad. Nauk SSSR Geophiz. Inst., 24(151), 163–187.
  4. Stull, R. B. (1988). An Introduction to Boundary Layer Meteorology. Kluwer Academic. 10.1007/978-94-009-3027-8
  5. Cimorelli, A. J., Perry, S. G., Venkatram, A., Weil, J. C., Paine, R. J., Wilson, R. B., Lee, R. F., Peters, W. D., & Brode, R. W. (2005). AERMOD: A dispersion model for industrial source applications. Part I: General model formulation and boundary layer characterization. Journal of Applied Meteorology, 44(5), 682–693. 10.1175/JAM2227.1
  6. Crippa, M., Guizzardi, D., Pagani, F., Banja, M., Muntean, M., Schaaf, E., & others. (2023). High resolution temporal profiles in the Emissions Database for Global Atmospheric Research (EDGAR). Scientific Data, 10, 636. 10.1038/s41597-023-02489-1
  7. Scarpelli, T. R., Jacob, D. J., Grossman, S., Lu, X., Qu, Z., Sulprizio, M. P., Zhang, Y., Reuland, F., Gordon, D., & Worden, J. R. (2022). Updated Global Fuel Exploitation Inventory (GFEI) for methane emissions from the oil, gas, and coal sectors: Evaluation with inversions of atmospheric methane observations. Atmospheric Chemistry and Physics, 22(5), 3235–3249. 10.5194/acp-22-3235-2022
  8. Maasakkers, J. D., Mcduffie, E. E., Sulprizio, M. P., Chen, C., Schultz, M., Brunelle, L., Thrush, R., Steller, J., Sherry, C., Jacob, D. J., & others. (2023). A gridded inventory of annual 2012-2018 U.S. anthropogenic methane emissions. Environmental Science & Technology, 57(43), 16276–16288. 10.1021/acs.est.3c05138
  9. U.S. Environmental Protection Agency. (2024). Inventory of U.S. Greenhouse Gas Emissions and Sinks: 1990–2022. EPA 430-R-24-004. https://www.epa.gov/ghgemissions/inventory-us-greenhouse-gas-emissions-and-sinks
  10. Scarpelli, T. R., Jacob, D. J., Maasakkers, J. D., Sulprizio, M. P., Sheng, J.-X., Rose, K., Romeo, L., Worden, J. R., & Janssens-Maenhout, G. (2020). A global gridded (0.1° × 0.1°) inventory of methane emissions from oil, gas, and coal exploitation based on national reports to the United Nations Framework Convention on Climate Change. Earth System Science Data, 12(1), 563–575. 10.5194/essd-12-563-2020
  11. Veefkind, J. P., Aben, I., McMullan, K., Förster, H., de Vries, J., Otter, G., Claas, J., Eskes, H. J., de Haan, J. F., Kleipool, Q., & others. (2012). TROPOMI on the ESA Sentinel-5 Precursor: a GMES mission for global observations of the atmospheric composition for climate, air quality and ozone layer applications. Remote Sensing of Environment, 120, 70–83.
  12. GHGSat Inc. (2016). GHGSat WAF-P imaging spectrometer constellation. https://www.ghgsat.com/
  13. Jervis, D., McKeever, J., Durak, B. O. A., Sloan, J. J., Gains, D., Varon, D. J., Ramier, A., Strupler, M., & Tarrant, E. (2021). The GHGSat-D imaging spectrometer. Atmospheric Measurement Techniques, 14(3), 2127–2140. 10.5194/amt-14-2127-2021
  14. Green, R. O., & others. (2022). EMIT: Earth Surface Mineral Dust Source Investigation. https://earth.jpl.nasa.gov/emit/
  15. Carbon Mapper. (2024). Carbon Mapper: airborne and satellite imaging spectroscopy for greenhouse gas monitoring. https://carbonmapper.org/