Changelog
All notable changes to Nucleide are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Releases are cut with scripts/bump-version.sh X.Y.Z, which stamps the
[Unreleased] section below and updates [workspace.package] version in the
root Cargo.toml. Git tags (vX.Y.Z) are the release source of truth; CI
publishes Python wheels (and optionally Rust crates) from tags.
[Unreleased]
Added
depletion: reactionbranching_ratiosupport in chain XML (default 1.0), with branched gains in the burnup matrix.depletion: light-particle production in the burnup matrix — He-4/H-1 from alpha/proton decays and from reaction secondaries such as (n,α) and (n,p), when the product nuclide is in the chain.depletion: decay branching ratios are renormalized to sum to 1 (largest branch adjusted) for programmatically built chains, matching OpenMC’s chain-generation behavior.depletion: CASL-style fission-yield borrowing in chain XML (<neutron_fission_yields parent="X"/>resolves X’s yields, transitively), matching OpenMC.nuclei:NuclideId::from_namenow accepts PyNE-normalized forms such as"U-235","u235", and uppercase-Mmetastable markers.- Python API:
Cascade.solve_multicomponent()(M*-optimizing solve),DepletionSystembuilder andsolve_vec()for repeated solves without per-call overhead, andMeshTally.total_rel_error. - Python API:
nucleide.datamodule (fetch,fetch_compendium,default_ref) for downloading repo data files — the Materials Compendium, sample depletion chains — pinned to the installed version’s tag, since the wheel bundles no data files. - Criterion benchmarks in
crates/*/benches/(cargo bench). validation/: runnable cross-code validation harness against PyNE 0.7.5 and OpenMC 0.16.0 (containerized viavalidation/Containerfile+validation/run_container.sh) with committed results (validation/results.md).validation/: full-chain depletion validation on the CASL/VERA simplified chain (downloaded to the git-ignoredvalidation/.cache/), parser cross-validation against PyNE and serpentTools oracles (parsers_vs_refs.py), and generated paper figures (validation/figures/, viamake_figures.py).- JOSS submission materials:
paper.md,paper.bib,CITATION.cff,CONTRIBUTING.md, and a draft-PDF workflow. bindings/wasm:wasm-bindgencrate exposing a subset of the workspace to the browser, including aWasmMaterialsCompendiumAPI that parses the DOE/PNNL Materials Compendium from its JSON text.- Documentation website (
website/, Astro +@nukehub/docs-kit) with content synced fromdocs/, theory pages, and interactive WASM tutorials (including a compendium browser that fetches the stagedMaterialsCompendium.jsonand charts compositions with Plotly), deployed to GitHub Pages. - Interactive tutorials: MCNP meshtal z-slice heatmap with log colorscale and relative-error toggle, xsdir table-count histogram by element, depletion burnup-curve plot, material atom-vs-weight-fraction bar chart, enrichment cascade stage-profile line chart, and MAGIC energy upper-bound step line.
enrichment:Cascade::stage_profile()returns per-stage assays of the enriching key via the ideal-cascade recurrence, exposed through WASM asWasmCascade.stageProfile().- Release workflow:
vX.Y.Ztags build and publish Python wheels for Linux, macOS, and Windows to PyPI, publish workspace crates to crates.io, and draft a GitHub release from the matching changelog section.
Changed
-
Documentation website moved from
https://nukehub-dev.github.io/nucleideto a custom domain,https://nucleide.nukehub.org, hosted on GitHub Pages with Cloudflare DNS; the Astrobasepath changed from/nucleideto/. -
Documentation theory pages (
depletion,enrichment,nuclear-data,variance-reduction) now use the citation support from@nukehub/docs-kit: references are declared in frontmatter, cited inline with<Citation />, and rendered as a linked bibliography with copy-to-clipboard export. -
Python API reorganized into domain submodules (
nucleide.nuclei,nucleide.material,nucleide.mcnp,nucleide.serpent,nucleide.fluka,nucleide.vr,nucleide.enrichment,nucleide.depletion) mirroring the workspace crates; the top level re-exports the domain submodules alongsideversion()and__version__. -
vr-tools:MeshSourceSamplernow rejects negative or non-finite tally / user-density values with an error instead of silently absolutizing them. -
depletion: reaction loss is subtracted once per reaction type per nuclide; duplicate entries only add branched gains. -
depletion: CRAM pole solves reuse scratch buffers across poles. -
nuclei: FLUKA name lookups use lazily-built maps instead of linear scans.
Fixed
-
Documentation website “Edit this page on GitHub” links now point at real repo files (docs-kit sync injects the source path as
editPathfrontmatter); previously every link 404’d — all were missing the file extension, and the changelog link pointed atdocs/changeloginstead of the repo-rootCHANGELOG.md. -
Documentation website deployment now builds the
bindings/wasmpackage in CI, so the interactive tutorials can load/wasm/nucleide_wasm.jsinstead of receiving the SPA fallback HTML response. -
Interactive tutorials: file/text inputs now use the docs-kit
Textareaauto-resize (content-fitted height, no manual resize grip); kit bumped for aSelectdropdown fix so short lists flipped above the trigger no longer float with a gap. -
depletion:Chain::from_xmlno longer renormalizes decay branching ratios — file values are used verbatim, matching OpenMC’sChain.from_xml(renormalization only happens at chain generation). Found by the CASL full-chain validation (e.g. I-128 β⁻ branching ratio 0.931). -
depletion: fission production now uses the yield set at the lowest incident neutron energy, matching OpenMC’sget_default_fission_yields. -
nuclei:NuclideId::newrejects mass numbers above 999, fixing a debug overflow panic from inputs like"U999999". -
depletion: zero/negative/non-finite half-lives and non-positivedtnow return errors instead of producing inf/NaN. -
linalg: LU solve validates matrix/RHS dimensions and symbolic-pattern identity instead of panicking inside faer. -
enrichment: validatesalpha > 1, assay ordering, andM*bounds; guards secant divide-by-zero; golden-section M* polish no longer trusts unconverged probe solves;recompute_nmreset path no longer uses stale right-hand sides. -
vr-tools:magicno longer panics on tallies with empty energy bounds and validates array lengths and finiteness. -
bindings/wasm: fraction and result maps are now serialized as plain JS objects instead of JSMaps, fixing empty tables in all interactive tutorials.