Skip to content

Components — overview & catalog

A forecast is a graph of components. Each component is a versioned, schema-declared unit that states its inputs, outputs, parameters, platform needs, the Cylc fragment it owns, and (for plugins) its prerequisites. List what is available on your install:

Terminal window
nwp-compose components list # core + discovered plugins
nwp-compose components list --json # machine-readable
Component Role Path Fan-out Notes
data_ingest ingest shared Unified GFS/RAP downloader (dispatches on data_source).
subset_grib preprocess shared wgrib2 bbox subsetter; optional in the ungrib graph.
ungrib preprocess WRF + MPAS GRIB2 → WPS intermediate; needs a data_ingest upstream.
metgrid preprocess WRF metgrid.exe; needs geogrid + ungrib.
geogrid sub-workflow WRF One-shot WPS geogrid; publishes geo_em.d??.nc.
mesh_gen sub-workflow MPAS One-shot MPAS static mesh: generates from a declarative spec (JIGSAW + region cut + partition + static fields) or bring-your-own; publishes .static.nc + .grid.nc + partitions.
init_atmosphere model init MPAS ICs (init_case 7); needs ungrib.
lbc model init MPAS LBCs (init_case 9); needs init_atmosphere + ungrib.
real model init WRF real.exe IC+LBC generation; needs metgrid.
mpas_run model run MPAS atmosphere_model; emits a per-fhr completion message.
wrf model run WRF wrf.exe; emits a per-fhr completion message.
mpassit postprocess MPAS Native → regular grid, per forecast hour.
upp postprocess MPAS/shared UPP GRIB2 conversion, per forecast hour.
archive_s3 archive MPAS/shared S3 upload, per forecast hour.
housekeeping housekeeping shared Daily (P1D) prune of work dirs.
data_assimilation reserved Slot reserved in the schema; referencing it is a hard error today.

MPASdata_ingest → [subset_grib →] ungrib → init_atmosphere → lbc → mpas_run → mpassit → upp → archive_s3, with mesh_gen as a once-only sub-workflow.

WRFdata_ingest → ungrib → metgrid → real → wrf → [upp], with geogrid as a once-only sub-workflow. ungrib and upp are shared between the paths.

mpassit, upp, and archive_s3 are fan_out_compatible: one instance per forecast hour, triggered by the model’s per-fhr completion message, with concurrency capped per family. This is how per-output-file post-processing scales without writing 50 near-identical task stanzas by hand.

Drop a directory with component.yaml + template.cylc.j2 (+ optional namelist/task templates) into the plugin path; it is auto-discovered and listed alongside core components. Plugins are sandboxed — schema and templates only, no arbitrary code at generate time — and declare their requires: so nwp-compose doctor and the validator can check prerequisites.

Each golden-path component ships a TROUBLESHOOTING.md next to its component.yaml, following a strict 5-section template (Symptoms / Diagnose / Recover / Blast radius / Escalate). These will be mirrored into per-component pages in this section.