Skip to content

Releases: holoros/fvs-modern

v2026.05.4 — comprehensive per-species calibration propagation

30 May 23:31
dfe3757

Choose a tag to compare

Comprehensive per-species calibration propagation (issue #54)

Calibrated configs previously emitted at most one FVS keyword block per variant
(SDIMAX), so most fitted components never reached FVS at runtime. This release
fixes that and extends the calibration into a comprehensive, availability-gated
per-species block.

Highlights

  • New calibration_multipliers block carries per-species factors for all five
    tree components (height-diameter, mortality, crown ratio, diameter growth,
    height increment), gated by the published equation_availability_full.csv.
  • Height-diameter, mortality, and crown ratio are SPCD-keyed and populated for
    all 25 variants; diameter growth for its 7 adopted variants.
  • Fit scripts now save the species-index crosswalk; multipliers.R maps factors
    to the correct FVS species.
  • config/validate_calibrated.py guardrail checks every config for a consistent
    block.
  • 100-year stress test: calibrated FVS-NE shows ~10% lower biomass at year 100
    from the mortality calibration; trajectories realistic.

Known limitations

  • Diameter growth and height increment use a dense species index that is exact
    only after a refit with the new crosswalk save (approximate otherwise, flagged
    in provenance).
  • FVS-ACD does not honor FVS keyword multipliers; ACD calibration must be applied
    through the Acadian model path.

v2026.05.3 — Zenodo metadata fix

26 Apr 23:41

Choose a tag to compare

v2026.05.3 — Zenodo InvenioRDM metadata fix

Resolves Zenodo DOI minting failure observed on all prior tags. Zenodo migrated to InvenioRDM schema validation, which converts .zenodo.json creators[].orcid into a new person_or_org.identifiers structure and rejects the result. Errors on v2026.05.1 and v2026.05.2 ingestion both showed metadata.creators[0].person_or_org.identifiers validation failures.

This tag carries a minimal but sufficient .zenodo.json: title, description, creators (name and affiliation only), keywords, license, upload_type, access_right. The ORCID and related_identifiers can be added back through the Zenodo UI once the initial DOI mints.

No source code changes vs v2026.05.2.

v2026.05.2 — FVS-PN/SN/IE library build infrastructure recovery

26 Apr 19:53

Choose a tag to compare

Release notes — v2026.05.2 (2026-04-26)

What's new

This release ships substantial build-infrastructure improvements to the FVS-modern project. The FVS-PN, FVS-SN, and FVS-IE shared libraries now build cleanly and load via Python ctypes for the first time since the F77-to-F90 source conversion, removing a foundational blocker for the FIA Bakuzis evaluation on western and southern variants.

Build infrastructure improvements

  • deployment/scripts/build_fvs_libraries.sh: include-order fix resolves the vwc/morts.f90 shared-source conundrum that silently broke PN and SN compilation. Variant-specific include paths now precede -Ibase so that PRGPRM.f90 and other variant-aware headers resolve correctly.
    • Repaired seven F77-to-F90 conversion bugs in src-converted/econ/ (ecvol.f90, ecinit.f90, echarv.f90, ecstatus.f90, eccalc.f90, ecsetp.f90, ecin.f90). The conversion had mangled C-prefixed comments into broken trailing-& continuations, leaving the econ extension uncompilable.
    • Twelve previously-undefined symbols are now resolved in the PN, SN, IE shared libraries: morcon_, ecvol_, ecinit_, echarv_, ecstatus_, setpretendstatus_, eccalc_, ecsetp_, eckey_, plus three downstream.

New tools

  • scripts/fix_f77_comment_bug.py: heuristic auto-repair for the comment-conversion pattern. Walks any Fortran file looking for trailing-& followed by stripped-comment fragments and rewrites them as proper ! comments.
    • calibration/python/marshall_to_fia_csv.py: adapter that converts Marshall-format FIA CSVs to the standard FIA DataMart schema. Already used to prepare per-state inventory data for OR, WA, AL, FL, GA, MS, SC, TN, ID, MT.

Manuscript updates

  • Section 5.4 limitations rewritten to accurately reflect the new FVS-PN/SN/IE state.
    • Section 5.5 future work adds the runtime regression as a sixth outstanding item.

Known issue

FVS-PN/SN/IE libraries load via ctypes but hit a Fortran runtime EOF error in base/keyrdr.f90 line 47 when reading any keyword file. This affects both INVENTORY-mode keyfiles and the canonical upstream USDA test files. Documented in calibration/python/PN_SN_LIBRARY_DIAGNOSIS.md. Resolution requires comparison against a USDA reference binary or deeper Fortran I/O debugging.

Backwards compatibility

The build script change improves correctness without breaking existing variant builds. Eastern variants (NE, ACD) continue to build identically.

Release notes — v2026.05.1 (2026-04-26)

26 Apr 13:25

Choose a tag to compare

Release notes — v2026.05.1 (2026-04-26)

What's new

This release applies the FIA-stand Bakuzis evaluation to the
manuscript and ships the FIA stratified sampling pipeline as part
of the open-source Bakuzis runner.

Headline scientific finding

When the Bakuzis matrix is evaluated on real FIA stand combinations
sampled by site index and basal area band rather than synthetic
algorithmic stands, the calibrated posterior credible band achieves
50 percent compliance with Eichhorn's rule for the Acadian (ACD)
variant compared with 20 percent for both the default parameters
and the calibrated MAP point estimate. This 2.5-fold uplift was
observed previously on synthetic stands and is now corroborated
on real stands. It is the strongest single empirical argument that
posterior propagation carries biological information beyond what
the MAP point estimate alone captures.

Northeast Sukachev finding

NE Sukachev compliance remains 0 percent under all configurations
on real FIA stands. The prior synthetic-stand version of this
analysis suggested this was a synthetic stand artifact; the FIA
result confirms it is a real property of the NE variant's self-
thinning behavior. The manuscript revision explicitly corrects the
prior framing.

Software changes

  • FIA stratified sampling pipeline: new
    calibration/python/fia_stand_generator.py draws up to five real
    FIA condition pairs per Bakuzis cell from each variant's state
    coverage, with site index and basal area band stratification.
  • Replicate-aware aggregation:
    calibration/python/bakuzis_uncertainty_aggregate.py extended for
    the replicate dimension, with horizon alignment and 5-year
    quantization that handles plots with different FIA inventory years
    cleanly.
  • Per-variant figures: the matplotlib figures script now
    auto-renders trajectory, divergence, and band-growth panels for
    every variant present in the summary, not just NE.
  • Marshall format adapter: new marshall_to_fia_csv.py
    converts curated Marshall-style FIA CSVs to the standard FIA
    DataMart format the FIA stand generator expects. Ready for PN/SN/IE
    Bakuzis extension once the FVS-PN/SN library issues are addressed.
  • PN/SN library diagnosis:
    calibration/python/PN_SN_LIBRARY_DIAGNOSIS.md documents the
    undefined morcon_ symbol that prevents PN and SN libraries from
    loading via fvs2py. PN is missing morts.f90 source entirely; SN
    has the source but the library was built without including it.

Manuscript changes

  • Section 4.6 rewritten with FIA-derived numbers (33 of 36 cells
    populated per variant).
  • Section 3.3 methods describes the FIA stratified sampling path.
  • Section 5.4 limitations updated to reflect 33-of-36 cell coverage
    and the open path to PN/SN/IE extension.
  • Internal v2 self-review docx
    (manuscript/20260426_ems_self-review_fvs-modern_v2.docx) compiled.
    Indicative recommendation moved from Minor Revision to Accept,
    pending Zenodo DOI.

Operational notes

  • Zenodo GitHub webhook for holoros/fvs-modern is still pending
    enablement. Once enabled, this tag (v2026.05.1) will mint a DOI
    that should replace the placeholder in the manuscript software
    availability block before submission.

Backwards compatibility

The aggregator and figures scripts handle both synthetic-mode
(no replicate column) and FIA-mode (replicate column present)
ensemble outputs without configuration. Existing pipelines that
produce synthetic-stand outputs continue to work unchanged.

Verification

  • python3 calibration/python/bakuzis_uncertainty_aggregate.py --input-dir calibration/output/bakuzis reproduces the laws
    compliance table shipped in
    calibration/output/bakuzis/bakuzis_laws_compliance.csv.
  • python3 calibration/python/bakuzis_uncertainty_figures.py
    regenerates the seven Bakuzis figures from the shipped summary.
  • pandoc manuscript/fvs_combined_draft.md -o manuscript/fvs_combined_draft.docx regenerates the manuscript
    docx (7,255 words, 11 images).

fvs-modern 2026.04.5

13 Apr 17:10

Choose a tag to compare

Re-tag to retry Zenodo ingestion after v2026.04.4 hit a server-side ConnectTimeout from Zenodo's worker to api.github.com. Zenodo's webhook receiver is idempotent on delivery_id, so a fresh tag is required to produce a new delivery event. No source, calibration, deployment, or metadata changes from v2026.04.4.

fvs-modern 2026.04.4

13 Apr 16:57

Choose a tag to compare

Patch release adding .zenodo.json to unblock DOI minting.

Added

  • .zenodo.json with native Zenodo metadata (upload_type, license, creators with bare ORCID, keywords, related_identifiers).

Context

Releases v2026.04.1, .2, and .3 all returned Citation metadata load failed with distinct error_ids from Zenodo's GitHub ingestion despite CITATION.cff validating cleanly under cffconvert against CFF schema 1.2.0. Zenodo uses .zenodo.json in preference to CITATION.cff when both are present, which bypasses whatever parser quirk was hitting the CFF path.

No source, calibration, or deployment changes.

fvs-modern 2026.04.3

13 Apr 16:05

Choose a tag to compare

Patch release to unblock Zenodo DOI minting.

Fixed

  • CITATION.cff: removed license-url field and the machine-readable references: block. Zenodo's GitHub release ingestion returned Citation metadata load failed on both v2026.04.1 and v2026.04.2 despite validation passing under cffconvert 2.0 against CFF schema 1.2.0. Empirically, Zenodo's parser accepts only a minimal subset of CFF fields.

No source, calibration, or deployment changes. Upstream Weiskittel et al. 2011 textbook citation is preserved in README.md and the v3 manuscript.

fvs-modern 2026.04.2

13 Apr 15:44

Choose a tag to compare

Patch release fixing F77→F90 conversion defects in two base source files.

Fixed

  • src-converted/base/CONTRL.f90: stripped CRLF line terminators and converted column-6 fixed-form continuation to free-form trailing &. Because this file is pulled in by 40+ base modules via INCLUDE, the defect cascaded to volkey.f90 and evldx.f90 under the gfortran -ffree-form CI sanity check.
  • src-converted/base/errgro.f90: rewrote legacy INCLUDE 'PRGPRM.F77', 'CONTRL.F77', and 'PLOT.F77' references to the actual .f90 include targets, and applied the same CRLF and continuation fixes.
  • CI syntax-check now passes on all six sanity-check files. Preexisting CI red since PR #118 upstream sync is cleared.

No functional changes to the simulation engine, calibration pipeline, or deployment infrastructure.

fvs-modern 2026.04.1

13 Apr 15:27

Choose a tag to compare

Patch release of v2026.04.0 to fix Zenodo CITATION.cff ingestion.

Changed

  • CITATION.cff license: field switched from a list (MIT, CC0-1.0) to a single SPDX identifier (MIT) plus license-url. The dual-license intent is preserved in a comment block and in the LICENSE file, which remains the authoritative source of license terms. This unblocks Zenodo DOI minting for the tag.

No code, binary, or scientific-output changes from v2026.04.0. Cite v2026.04.1 rather than v2026.04.0 going forward for the v3 manuscript.

fvs-modern 2026.04.0

13 Apr 14:39

Choose a tag to compare

fvs-modern 2026.04.0 — First Public Tag

Release date: 2026-04-13
Tag: v2026.04.0

Summary

This is the first public tag of fvs-modern, a community-maintained,
dual-licensed fork of the USDA Forest Vegetation Simulator that adds a
Bayesian calibration pipeline and uncertainty quantification on top of a
Fortran 90 free-form conversion of the full 2,247-file FVS codebase. The
tag serves as the reproducibility anchor for the v3 manuscript and the
baseline collaborators on Cardinal and Greg Johnson's CONUS work can pull.

Highlights

  • Fortran 90 free-form conversion of base plus 25 US and Canadian regional
    variants and the fire, estb, and volume extension modules.
  • Upstream sync through PR #118 (commit 66a5e14e), covering SDI reporting
    updates, modern gfortran FORMAT descriptor fixes, Reineke diameter
    plumbing in CONTRL globals, and NSVB decay class = 3. Local sed patches
    are retired in favor of the upstream fixes.
  • Bayesian calibration pipeline producing posterior distributions for seven
    component models across 25 variants, with Wykoff ln(DDS) basal area R²
    improving from 0.672 to 0.699 across the fleet.
  • PERSEUS uncertainty projection pipeline driving ensemble projections of
    500 posterior draws per component, preserving within-draw parameter
    correlations for Maine-wide runs backing the v3 manuscript.
  • Turnkey deployment: Docker compose on Ubuntu 24.04, Fedora/RHEL systemd
    installer, macOS Homebrew flow, WSL2 setup, fvs2py ctypes bindings, and
    the microfvs FastAPI REST interface.
  • Dual licensing: CC0-1.0 for original USDA FVS Fortran source, MIT for
    new Python, R, and deployment code. CITATION.cff is SPDX-aligned.
  • Governance: Code of Conduct, Contributing guide, CHANGELOG, and upstream
    sync tooling (check_upstream.sh, sync_upstream.sh) with per-commit
    traceability.

Regression status

66 of 67 standalone keyword-file regression tests pass (98.5%). The one
failure is the long-standing iet03 segfault, triaged in
KNOWN_ISSUES.md as an FFE snag and fuels initialization issue seeded
without a TreeInit tree list. Library load tests, fvs2py ctypes imports,
and the rFVS .Fortran() path are green across all 25 built variants.

Known issues

  • iet03 segfault: preexisting in upstream, xfail marked here. Planned
    investigation under gdb and upstream Open-FVS issue in the next cycle.
  • ACD variant builds clean in the workspace but has been reported unstable
    on cardinal.osc.edu. deployment/scripts/diagnose_acd_cardinal.sh
    captures source hashes, PRGPRM include resolution, and compiler flags
    so the discrepancy can be pinned without another round trip. This tag
    ships FVSacd.so as advisory; users on Cardinal should run the diagnostic
    before depending on ACD output.

How to cite

See CITATION.cff at the repository root, plus the v3 manuscript
preprint reference (to be updated with the final DOI once the Zenodo
integration mints one for this tag).

Acknowledgments

USDA Forest Service for the original FVS source and ongoing maintenance.
University of Maine Center for Research on Sustainable Forests (CRSF)
and the NSF I/UCRC Center for Advanced Forestry Systems (CAFS) for
institutional support. Ohio Supercomputer Center for the Cardinal
allocation that ran the calibration fleet. Greg Johnson for ongoing
collaboration on the CONUS unified variant, slated for a later tag.