Skip to content

v3.0 Multi-AOI Cross-Regime Recovery — Scoping

Status: Planning doc only. No code in this PR. Implementation builds on whichever box-model is canonical on main when v3.0 work begins — v2.7 (2-layer box, on main via PR #42) is sufficient on its own to start; v2.8 (depth-resolved POC, in flight as branch v2.8-depth-resolved-poc) is an optional upgrade that v3.0 will adopt if it ships first (per §3.4 for selection logic). The v3.0 gate is "v2.7 on main," which is met; the v2.8 dependency is opt-in, not required.

Parent finding: v2.6 GEOTRACES hybrid hit 4/6 Cal-grade reproducibly across 10 seeds in Eq Pacific. v2.6's fine GEOTRACES_W sweep + v2.7's corrected 2-layer experiments both confirm scav_rat is stuck at 0.87–0.92 off Carroll regardless of subsurface-iron weighting in this AOI. The honest interpretation: the bottleneck is regime, not architecture. Eq Pacific is HNLC; iron there is biology-dominated, so scav_rat (particle-scavenging coefficient) is intrinsically underconstrained by the local iron budget.

Hypothesis: Training on a small set of carefully-chosen AOIs spanning distinct biogeochemical regimes breaks the regional-coverage bottleneck without requiring cluster-scale compute. A shared Carroll-6 parameter vector that must fit HNLC + iron-replete + carbonate-rich regimes simultaneously is identifiable in ways that any single AOI cannot deliver.

1. Why multi-AOI is the realistic next lift on the laptop

The 6/6 paths catalogue (v2.7 closeout + Section 7.6 of the v2.7 scoping doc) identified three credible unblocks: (Path 1) depth-resolved POC; (Path 2) cross-basin / cross-regime; (Path 3) independent PIC observations. v2.8 is in flight on Path 1. Path 2 has two flavours:

  • Cluster cross-basin at global 1° resolution — the textbook fix, gated on ORCD B200 access. Realistic wall-clock ~1 hr/sweep on the laptop is borderline OOM; cluster-class GPUs eliminate this.
  • Multi-AOI laptop bridge — pick 3 AOIs sampling 3 different regimes, train them jointly with a shared parameter vector, fit on the laptop in ~7–10 min/sweep. This is the v3.0 scope.

The 2.6/v2.7 framing made it explicit: depth-resolved DFe alone does not move scav_rat out of Drifted. The community view (Tagliabue, Achterberg, Ye, Somes) is that scavenging is identifiable where iron is replete and particles are abundant — N Atlantic subpolar and Southern Ocean. Multi-AOI brings those regimes into the loss surface.

2. AOI selection

Three AOIs covering three biogeochemical regimes, each ~1° × 1° resolution, each ~1,000 ocean cells. All are GEOTRACES-coverage rich (IDP2025 has ≥ 30 stations in each).

AOI Lat / Lon Cells Regime What it constrains
Equatorial Pacific (existing) −5° to 15° N, −160° to −110° W ~1,000 HNLC, biology-dominated iron loss alpfe, Smallgrow, diatomgraz (v2.6 wins reproduce here)
North Atlantic subpolar (new) 50° to 65° N, −40° to −10° W ~1,000 Iron-replete, scavenging-dominated scav_rat (the key unblock); POC export
Southern Ocean Pacific sector (new) −65° to −50° S, −180° to −100° (i.e., 180°W to 100°W; bounded by the antimeridian, not crossing it) ~1,500 High-particle-flux, carbonate-rich, seasonal bloom Biggrow, R_PICPOC, diatomgraz cross-check

Defer to implementation: exact AOI bounds. The above are sensible defaults; final values should be picked by checking GEOTRACES station density + Darwin grid coverage. Add NORTH_ATLANTIC_SUBPOLAR_AOI and SOUTHERN_OCEAN_PACIFIC_AOI constants to src/darwindiff/ecco_darwin_loader.py alongside the existing EQUATORIAL_PACIFIC_AOI.

Why not the existing NORTH_PACIFIC_AOI (30–50° N)? That's mid-latitude oligotrophic — chlorophyll-poor but not strongly iron-replete. It doesn't add a sharp scavenging-dominated regime. The N Atlantic subpolar above 50° N is the cleaner "iron-replete" choice because of deep winter convection bringing iron up.

3. State + loss design choices

3.1 Shared parameter vector across AOIs

The Carroll-6 vector is global (one value per parameter for the whole ocean) in the published Carroll 2020 / 2022 calibrations. v3.0 honours this: one shared parameter vector trained against the union of all AOI losses. Per-AOI parameter vectors would defeat the point of cross-regime identifiability.

Concretely: the DINN takes per-AOI environmental input (SST) and produces per-cell parameter fields, but the loss aggregates a single global recovery via masked ocean-cell averaging. The "recovered" parameter for the verdict table is the mask-weighted mean across all AOIs combined.

3.2 Per-AOI loss aggregation

Each AOI contributes its own:

  • 11-target z-score loss (Darwin output)
  • GEOTRACES surface MSE (sparse populated bins per AOI)
  • Optional GEOTRACES subsurface MSE (if v2.8's 2-layer integrator is in scope)
  • Optional PINN drift loss (if retained from v2.4 / v2.6 / v2.7)

Combined loss is the AOI-weighted sum of per-AOI losses. Each per-AOI loss is mean-reduced over its ocean cells (i.e., averaged per cell, not summed), so equal AOI weights already make each AOI contribute equally to the gradient regardless of cell count — no inverse-cell-count rescaling is needed inside the weight. Default: equal weight 1.0 per AOI; expose AOI_W_<aoi> env vars for sweep experiments that intentionally up/down-weight a regime.

3.3 State + integrator independence

Each AOI has its own state tensor (e.g. state_eqpac, state_natl, state_so) and its own forward integration. The integrator function is reused; only the input state, target tensors, and ocean masks differ. The neural network is shared — same DINN instance produces parameters for every AOI (since the parameter vector is shared).

3.4 Architectural foundation

v3.0 builds on whatever box-model state is canonical at that time:

  • If v2.7 (2-layer box) is on main but v2.8 (depth-resolved POC) hasn't shipped: build on the 2-layer integrator from carroll6_5pft_2layer.py.
  • If v2.8 ships first: build on whatever the v2.8 box-model module provides.
  • v3.0 does NOT introduce its own integrator changes. It's a loss-surface + data-coverage extension, not a physics change.

4. Compute estimates (RTX 5090 Laptop)

Based on the v2.6 / v2.7 batched-runner measurements (Eq Pac alone: ~133s for 5 seeds × 1500 epochs, single-layer; ~165s for 5 seeds, 2-layer):

Setup Total cells Wall-clock 1 seed 5-seed batched Memory headroom
1 AOI (Eq Pac, current v2.7) ~1,000 ~88s ~165s (~33s/seed amortized) comfortable
3 AOIs (v3.0 default) ~3,500 ~4–5 min ~7–10 min comfortable
5 AOIs (stretch goal) ~5,500 ~7–8 min ~12–15 min mild pressure

GPU memory at 5-seed batched is ~5–10 GB at 3 AOIs, well under the 24 GB VRAM budget. No engineering work needed for the default 3-AOI setup.

Data-loading cost: each AOI builds its own target cache once (~60s rebuild on first run; sub-second cache hit after). Total one-time cost for v3.0: ~3 min to populate the cache directory.

5. Experimental plan

Run each in isolation before composing. Each is a 5-seed batched sweep.

Phase 0 — Sanity baseline (~10 min)

  • Eq Pacific alone (single AOI v3.0 config): should reproduce v2.6 / v2.7 numbers within run-to-run noise. Validates that the v3.0 multi-AOI scaffolding doesn't regress the single-AOI fit.

Phase 1 — Sequential AOI additions (~30 min total)

  • Eq Pacific + N Atlantic (no Southern Ocean): does adding the iron-replete regime move scav_rat toward Carroll? Direct test of the Path-2 hypothesis.
  • Eq Pacific + Southern Ocean (no N Atlantic): does the carbonate-rich regime move R_PICPOC toward Carroll without sacrificing the iron pair?
  • N Atlantic + Southern Ocean (no Eq Pacific): can the model recover the v2.6 wins (alpfe, Smallgrow, diatomgraz) without HNLC anchoring? Diagnostic, not a candidate winner.

Phase 2 — Full 3-AOI fit (~10 min)

  • All three AOIs jointly: the v3.0 headline experiment. Compare against v2.6 (10-seed on Eq Pacific) and against each Phase 1 pair-fit.

Phase 3 — Sensitivity sweeps (~30 min total)

  • AOI weight balance: try (1, 1, 1), (1, 2, 1), (1, 0.5, 0.5) to see whether the N Atlantic contribution is the load-bearing component.
  • Without GEOTRACES subsurface loss: ablation to test whether the v3.0 win (if any) is from regime diversity or from the v2.7 subsurface anchor still being active.

6. Success criteria

Primary: scav_rat moves from 0.87 off Carroll (v2.7 best) into Cal-grade (≤ 0.40 off) across ≥ 3 of 5 seeds, without breaking v2.6's alpfe / Smallgrow / diatomgraz Cal-grade recovery. That's the 5/6 outcome.

Secondary: R_PICPOC moves from 2.9 off Carroll into Loose (≤ 0.80 off) or better. That's the 6/6 outcome if the iron pair survives.

Falsification: if scav_rat stays Drifted (> 0.80 off) even with the full 3-AOI fit, the regime-coverage interpretation is incomplete and something else (PIC observations, longer integration, different box model) is the binding constraint. Worth documenting honestly.

7. What's NOT in v3.0 (deferred)

  • True global 1° fit — gated on cluster compute (probable OOM at 5-seed batched on the laptop; single-seed feasible but slow at ~60 min/sweep).
  • PIC observations as a loss term — separate Track-1 loader effort, scoped as v3.1. Stacking with v3.0 multi-AOI in a single PR risks the nb24-style composition breakage.
  • Forward-Darwin validation of recovered v3.0 parameters — credibility check, but Darwin 3 simulation is itself cluster-bound. Defer.
  • Cross-validation block-CV within each AOI — would add manuscript rigour but doesn't unblock 6/6. Defer to a follow-up.
  • Per-PFT K_FE refinement (v2.2.1) — separate axis; orthogonal to the cross-regime question.

8. Risk register

Risk Severity Mitigation
Composition breaks v2.6 wins (nb24 lesson redux) High Phase 1 pair-fits validate each combination before Phase 2 full fit. If pairs break, full fit will too — caught early.
AOI weight balance is fragile Medium Phase 3 sensitivity sweep. Default 1-1-1 is the honest starting point.
GEOTRACES subsurface coverage outside Eq Pac is sparser Medium Run a populated-cell count diagnostic at the loader step before training; report.
New AOI bounds clip ECCO-Darwin grid cells incorrectly Low Use existing subset_aoi + bin_native_tracer_to_1deg infrastructure; v2.5/v2.6 already validated these handle non-Eq-Pac AOIs.
Memory pressure at 5-seed batched Low 3 AOIs × 1000 cells × 5 seeds is well within budget; verified at the back-of-envelope. Mitigate by reducing N_STEPS or seeds if needed.

9. Implementation checklist (for the eventual coding PR)

When v2.7 merges and v2.8 ships, implementation reduces to:

  1. Add NORTH_ATLANTIC_SUBPOLAR_AOI and SOUTHERN_OCEAN_PACIFIC_AOI to src/darwindiff/ecco_darwin_loader.py (~10 lines).
  2. Build per-AOI target cache for each new AOI (~3 min one-time data-loader work, cached after).
  3. Write scripts/run_v3.0_multi_aoi_batched.py — generalises the batched runner to a list of AOIs, with per-AOI state + loss + target, summed gradient. ~500 lines; mostly a refactor of run_v2.7_multilayer_batched.py.
  4. Tests: extend tests/test_carroll6_5pft_2layer.py (or whatever integrator is canonical) with a multi-AOI integration test confirming gradient flows from each AOI's loss back to the shared parameter vector.
  5. Run the Phase 0 → Phase 3 experiment sequence (~80 min wall-clock total).
  6. Update docs/findings/v3.0_multi_aoi_scoping.md with the experimental results section, same structure as v2.7.

Total estimated effort once unblocked: ~1 week for implementation + experiments + honest write-up.

10. Open questions to settle during implementation

  1. Should the DINN input also include AOI identity? Currently SST-only. If the parameter recovery is sensitive to which AOI a cell belongs to, adding a one-hot AOI channel makes the network aware. Risk: the network learns AOI-specific parameters, defeating the cross-regime identifiability point. Test with and without.
  2. Initial state per AOI — Eq Pacific uses a literature-plausible HNLC initial state. N Atl + S Ocean need different defaults (more biomass, different DIC/ALK). Worth a quick literature check.
  3. Time-mean vs seasonal cycle — v2.6 / v2.7 use the time-mean Darwin output. N Atlantic subpolar has a strong seasonal bloom; time-mean fields may smear that out. Consider whether seasonal-resolved targets are necessary for the iron-replete regime.
  4. PINN drift loss across AOIs — currently formulated on L1 iron balance only. If v3.0 builds on the 2-layer integrator, do we want one PINN term per AOI, or a single global PINN term?

These are real open questions; they don't block scoping but should be revisited at implementation time.


Bottom line: v3.0 is the laptop-feasible bridge between v2.7 (Eq Pacific only, stuck at 4/6) and the cluster cross-basin experiment we're waiting on ORCD to enable. It costs ~7–10 min per sweep at the default 3-AOI setup, uses no new physics or architectures, and gives a clean empirical test of the regime-coverage hypothesis. If it works, 5/6 or 6/6 within ~1 week of focused work; if it doesn't, it explicitly de-risks the cluster ask by showing that even with broader AOI coverage the parameters are not identifiable, so the cluster experiment must use other levers (PIC observations, multi-year time series, etc.).