Skip to content

Add native SB40 component fuels and rate of spread - #69

Open
mefrediani wants to merge 4 commits into
developfrom
sb40-tier-ab
Open

mefrediani wants to merge 4 commits into
developfrom
sb40-tier-ab

Conversation

@mefrediani

@mefrediani mefrediani commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

Native SB40 inputs previously used the Anderson crosswalk. This change adds fuel_opt=2 with all 40 Scott and Burgan models, dynamic herbaceous curing, and separate dead/live Rothermel calculations, combining the agreed Tier A and Tier B work.

Fuel parameters remain compiled arrays in physics/fuel_anderson_mod.F90 and physics/fuel_scott_burgan_mod.F90; moisture-response constants remain in physics/fmc_wrffire_mod.F90. Runtime parameter tables are a separate follow-up in #72, based on this branch.

External nfuel_cat values remain unchanged in history and restart files. A validated integer fuel_index resolves owned tiles into 40 burnable rows plus one nonburnable row. Codes 91, 92, 93, 98, 99 and legacy code 14 share that row; unknown, fractional, missing and nonfinite categories are rejected before physics accesses fuel arrays. Documentation explains the class interfaces, row counts, NB behavior, moisture treatment, consumption assumptions, and restart compatibility.

SB40 uses six moisture classes with distinct herbaceous and woody state, preserves total dry inventory under curing, and uses per-model heat content. fuelmc_g_live retains its name and 0.30 default; fuelmc_g_woody defaults to 0.90. ROS initialization receives all three prescribed moisture values explicitly from the run configuration. Comments in ros_sb40_mod.F90 explain each calculation stage, array ordering, weighting, and units. Anderson arithmetic, including its existing wet/dry-load factor, remains unchanged.

The Behave reference generator stays archived outside this repository. Unit tests compare CFBM against fixed numerical values from the earlier independent compiled Behave experiment; they do not build or execute Behave. Documentation describes the reference assumptions and intentional difference in the rounded curing expression. The unit suite also covers category mapping and rejection, all NB aliases, curing endpoints and mass conservation, separate live reactions, extinction, six-class moisture state, nondefault prescribed ROS inputs, heat release, and MPI broadcasts.

Validation:

  • A fresh GNU Strict MPI/OpenMP build with NUOPC passed.
  • GitHub CI passed the full PR and restart matrix across serial, OpenMP, MPI, and hybrid builds, including NUOPC and ESMX.
  • The fresh local GNU Strict MPI/OpenMP build with NUOPC passed 100/100 PR-suite CTests against the approved reference and 16/16 restart-suite CTests.
  • Paired compiled/table comparison: 16 paired runs, 120 NetCDF file pairs, and 3,131 compared arrays were bitwise identical, with maximum absolute difference 0.0. Coverage includes SB40 curing endpoints, partial curing, evolving moisture, continuous/restarted integrations, both NUOPC wind paths, and six Anderson cases. History metadata matched exactly; restart table identities were validated separately.
  • The earlier independent Behave comparison had a maximum relative difference of 1.30e-7 for spread and dead/live reaction intensity in 22 cases with matching curing assumptions. Eight fixed numerical cases remain in the Fortran unit tests.

All internal regression additions and detailed evidence remain in separate local validation commits and are excluded from this PR. Approved regression configurations, references, tolerances, and CI selection are unchanged. The inherited Anderson wet/dry-load correction and Intel Debug failures in #68 remain separate work.

Preserve external fuel categories while resolving validated tiled indices, including named nonburnable classes. Combine native SB40 tables and curing with separate dead/live reaction, six-class moisture, conserved dry inventory, and restart metadata. Retain Anderson arithmetic and document unit and independent Behave comparisons. Regression additions remain separate.
@mefrediani mefrediani changed the title Add native Scott and Burgan 40 fuels with dead/live ROS Add native SB40 fuels and runtime parameter tables Nov 3, 2026
@mefrediani
mefrediani marked this pull request as ready for review November 3, 2026 22:03
@mefrediani
mefrediani requested a review from pedro-jm November 3, 2026 22:03
@mefrediani mefrediani changed the title Add native SB40 fuels and runtime parameter tables Add native SB40 component fuels and rate of spread Nov 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant