Releases: holoros/fvs-modern
v2026.05.4 — comprehensive per-species calibration propagation
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_multipliersblock carries per-species factors for all five
tree components (height-diameter, mortality, crown ratio, diameter growth,
height increment), gated by the publishedequation_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.Rmaps factors
to the correct FVS species. config/validate_calibrated.pyguardrail 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
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
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 thevwc/morts.f90shared-source conundrum that silently broke PN and SN compilation. Variant-specific include paths now precede-Ibaseso thatPRGPRM.f90and 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.
- Repaired seven F77-to-F90 conversion bugs in
-
- 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.
- Twelve previously-undefined symbols are now resolved in the PN, SN, IE shared libraries:
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)
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.pydraws 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.pyextended 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.mddocuments the
undefinedmorcon_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-modernis 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/bakuzisreproduces 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.docxregenerates the manuscript
docx (7,255 words, 11 images).
fvs-modern 2026.04.5
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
Patch release adding .zenodo.json to unblock DOI minting.
Added
.zenodo.jsonwith 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
Patch release to unblock Zenodo DOI minting.
Fixed
- CITATION.cff: removed
license-urlfield and the machine-readablereferences:block. Zenodo's GitHub release ingestion returnedCitation metadata load failedon 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
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 viaINCLUDE, the defect cascaded tovolkey.f90andevldx.f90under thegfortran -ffree-formCI sanity check.src-converted/base/errgro.f90: rewrote legacyINCLUDE 'PRGPRM.F77','CONTRL.F77', and'PLOT.F77'references to the actual.f90include targets, and applied the same CRLF and continuation fixes.- CI
syntax-checknow 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
Patch release of v2026.04.0 to fix Zenodo CITATION.cff ingestion.
Changed
CITATION.cfflicense:field switched from a list (MIT, CC0-1.0) to a single SPDX identifier (MIT) pluslicense-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
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
iet03segfault: 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.