3b. Process Forcings (case.process_forcings)#
The final part of the CrocoDash workflow is extracting and processing all the forcing data your simulation needs. This includes initial conditions, boundary conditions, tidal forcings, biogeochemistry data, and more. You process all of this data through the case.process_forcings call. case.process_forcings wraps the CrocoDash.forcing package, which holds one configurator per forcing type (initial/boundary conditions, tides, BGC, runoff, chlorophyll) plus the driver that dispatches to them. You trigger this from Python via case.process_forcings(), or from the shell via crocodash process.
Workflow Overview#
case.configure_forcings(...)— writesinputdir/extract_forcings/config.jsonwith your case-specific forcing setup (the directory keeps its historical name; the code lives in the installedCrocoDash.forcingpackage, not in that folder)case.process_forcings(...)— reads that config and runs the extraction pipelineOutputs land in
inputdir/ocn/
The key insight: you don’t have to run this from a Jupyter notebook. After configure_forcings completes you can submit the extraction as a batch job using the CLI:
crocodash process --caseroot ~/croc_cases/mycase --all
Directory Structure#
inputdir/
├── extract_forcings/
│ └── config.json # Written by case.configure_forcings
└── ocn/ # Output goes here
├── init_eta_filled.nc
├── init_vel_filled.nc
├── init_tracers_filled.nc
├── forcing_obc_segment_001.nc
└── ...
Command-Line Interface#
See CLI reference for full flag documentation.
# Run all forcing extractions
crocodash process --caseroot ~/croc_cases/mycase --all
# Run only specific forcings
crocodash process --caseroot ~/croc_cases/mycase --tides
crocodash process --caseroot ~/croc_cases/mycase --runoff
crocodash process --caseroot ~/croc_cases/mycase --bgcic
# Run multiple forcings
crocodash process --caseroot ~/croc_cases/mycase --tides --runoff --bgcic
# Run all except certain forcings
crocodash process --caseroot ~/croc_cases/mycase --all --skip bgcic
crocodash process --caseroot ~/croc_cases/mycase --all --skip ic bgcic
# Skip both initial and boundary conditions
crocodash process --caseroot ~/croc_cases/mycase --all --skip ic bc
Note
--skip matches component flag names (ic, bc, tides, chl, runoff,
bgcic, bgcironforcing, bgcrivernutrients), not configurator names. Passing a
configurator name such as --skip conditions is silently ignored — the flags it
answers to are ic and bc. There is also no bare --bgc flag: BGC is three
separate components.
This flexibility lets you:
Test individual components without running everything
Re-run one forcing type if your source data changed
Submit to a batch queue and re-run from the CLI after a failure
Resume a partially-completed run
Large datasets#
Large regional domains require large datasets. CrocoDash automatically switches to parallel downloading and regridding of Glorys data if multiple CPUs are available and a regridding step is provided in config.json (see example here). External infrastructure may set limits: for example, if using get_glorys_data_from_cds_api, Copernicus Marine Services may throw a “Too many requests” error if too many CPUs are used and they all contact the server at once. get_glorys_data_from_rda does not have this limitation but implies permission to access to NCAR’s RDA repository. Regridding has no limitations per se.
Python API#
You can also call the driver directly from Python:
from CrocoDash.forcing.driver import run_workflow
run_workflow(
config_path="/glade/u/home/<user>/scratch/croc_input/mycase/extract_forcings/config.json",
ic=True,
bc=True,
tides=True,
)
The Processing Pipeline#
config.json + _crocodash_state.json
↓
ForcingConfigRegistry.resolve_process_targets()
↓ {flag: (configurator, method)}
GET — download raw OBC/IC data in time-stepped chunks (forcing/obc.py, forcing/ic.py)
↓
REGRID — regrid to the model grid, fill missing data (forcing/mom6.py)
↓
MERGE — concatenate chunks into final OBC files (forcing/obc.py)
↓
[tides / bgc / runoff / chl configurators run independently]
↓
inputdir/ocn/
Each CLI flag maps onto one configurator method via that class’s
process_components declaration:
Flag |
Configurator |
Method |
Module |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Adding a process_components entry to a new configurator surfaces its CLI flag
automatically — there is no hand-maintained flag list.
Design Philosophy#
CrocoDash delegates heavy lifting to specialist packages:
Task |
Tool |
Module |
|---|---|---|
OBC chunking / merge |
CrocoDash |
|
IC chunking |
CrocoDash |
|
OBC + IC regridding |
|
|
IC land-fill |
|
|
Chlorophyll |
|
|
Runoff mapping |
|
|
Data formatting |
|
Throughout |
For more detail on OBC regridding, see the regional-mom6 documentation.
See also#
3a. Configure Forcings — the step that writes the
config.jsonthis driver consumesDatasets — the raw data sources the driver downloads from
Architecture — where
CrocoDash.forcinglives in the code and how to extend itSubmodule API Usage — exact
regional-mom6/mom6_forgefunctions called during processing