Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,20 @@ jobs:
run: python photon/census.py
- name: report the ampoule from the committed tallies (no OpenMC, no network)
run: python ampoule/report.py
- name: compile the instance onto the measured vessel and close its timing
run: python ampoule/compile.py
- name: rebuild index.html
run: python build_html.py
- name: run the tests (prose against computed numbers, links, style, physics, the manifest)
run: pip install pytest && python -m pytest -q tests
- name: verify that every number, table and vector figure came back byte for byte
run: |
changed=$(git status --porcelain --untracked-files=all | grep -v -i '\.png$' || true)
if [ -n "$changed" ]; then
echo "the tree is not the same after regeneration:"; echo "$changed"
git --no-pager diff --stat -- . ':(exclude)*.png'
echo "what moved in the text outputs:"
git --no-pager diff -- '*.md' '*.csv' '*.txt' '*.json' '*.cff' | head -300
exit 1
fi
echo "the tree is the same after regeneration"
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ neutron/data/
neutron/work/
photon/cache/
ampoule/work/
.venv/
37 changes: 37 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Changelog

Every release of this repository is archived on Zenodo under the concept DOI [10.5281/zenodo.21330486](https://doi.org/10.5281/zenodo.21330486); the version DOI of each release is on its Zenodo record.

## 1.1.0: the second edition

The founding edition stated the theory, evaluated its criterion against the nuclear data record, and specified the device. This edition computes the machine: the keystone in the neutron sector in real neutron transport, the photon sector keystone searched for in ENSDF, the sealed vessel in real photon transport, and the compiler run on what that transport measured. It also makes the repository's oldest promise, that every number regenerates from public data, into a checked one.

### New results

- **The neutron gate, computed** ([neutron/](neutron/)). The two region subcritical gate of theory Section 4 built in OpenMC with the official ENDF/B-VIII.0 library, calibrated first against three ICSBEP handbook criticals: the fission matrix and its eigenvalue check, a drain of 1.49 fission neutrons per driver neutron with the gate open, the transfer curves of two absorbers, superposition to 0.6 percent, level restoration to a total variation of 0.002 across a thermal to 14 MeV input range, the clock (Λ = 106 µs, 1/Λ = 9.4 kHz), and the temperature coefficient that prices the sector's only veto. The convergence trap of weakly coupled regions is on the record with its remedy.
- **The photon keystone, searched** ([photon/](photon/)). Every gateway of the 415 isomers that hold a bit for a second, in observed and allowed classes, with its release cascade; the level restoring pairs of theory Section 2 counted (12470 candidates, none the data can resolve, all behind the areal density wall); the veto gateway that gives isomers the inhibition the neutron sector lacks (214 isomers); the NEEC class as the Phase B1 target list.
- **The ampoule, transported** ([ampoule/](ampoule/)). The sealed vessel of the machine and build notes in OpenMC photon transport, driven by its own ⁹⁰Sr and ⁹⁰Y beta spectra: the photon budget, the site rates in plastic and CsI, the collar's transfer curve, the 64 × 64 Green's function and the septum's effect on it, the boundary count, the energy budget and the dose outside. The notes are amended where the numbers say so.
- **The vessel, compiled** ([ampoule/compile.py](ampoule/compile.py), [figure 18](figures/fig18_compiled.svg)). The compiler of theory Section 11 run on the measured Green's function: the fabric read as solid angle times an interaction probability; Way B placing the twin's instance on the vessel's lattice and the fabric's unaperturable couplings burying it, with the collar pass as the last compilation step; the 64 site law checked against an exact transfer matrix at 3.3 sweeps per independent sample; and the timing closure, every weight a photon current, which prices the vessel as built at 0.34 independent samples per second against the 38,462 the machine note priced on proposals alone, with the ladder of measured and catalogue levers between the two. Theory Section 11.5 and the reset ledger of Section 3.1 gain the synapse term; the machine note, the build note and the ENIAC ledger are amended.

### The repository as an instrument

- `reproduce.py` runs every step in the CI's order and, with `--check`, fails unless every number, table and vector figure came back byte for byte. The CI now runs the same check on every push.
- `tests/`: the documents' headline numbers read back from the files that compute them (the class of drift the 1.0.1 erratum corrected), every internal link resolved, the house style enforced (no dashes in prose, isotopes as superscripts, no edition notes inside the documents), the instruments checked against things that are not themselves (the beta spectra against ICRP 107, the transfer matrix against enumeration, the sampler against its exact law, the adjoint against finite differences, the committed fission matrix against the committed eigenvalue), and the committed inputs against a manifest.
- `requirements.txt` is pinned. Under the pin the numbers reproduce byte for byte on macOS and Linux; the vector figures do too, now that the two that did not (a cancellation in the Siegert integrand, an embedded raster in the ampoule figure) are drawn in a platform independent form. Raster PNGs are regenerated but not compared.
- `Dockerfile`: the OpenMC 0.16.0 environment of the two transport directories, the image the neutron README referred to, for the x86-64 platform conda-forge builds it on.
- `data-manifest.sha256` and [DATA.md](DATA.md): every committed input with its digest and its source; the two compressed tables are written without a timestamp so they reproduce.
- [GLOSSARY.md](GLOSSARY.md): the terms the work coins, each with the place it is defined.
- The finite difference check of the adjoint compiler uses a step where truncation rather than rounding dominates the residual, and reports the bound the residual satisfies (below 10⁻⁷) rather than digits that depend on which BLAS inverted the matrix, so it reads the same on every platform.
- `CITATION.cff` carries the version.

### Corrections

- Hyphenated isotope designations in the transport documents are written as superscripts (²⁵²Cf), as the rest of the work does.

## 1.0.1: error corrections (2026-08-01)

- The ¹⁸⁰ᵐTa excitation energy corrected to the NUBASE2020 evaluated value, 75.3 keV, and the leverage figure derived from it, 0.075. The curated candidate table carried the superseded 77.1 keV value while the generated catalogue already read 75.3.

## 1.0.0: the founding release (2026-07-13)

The theory: the model, the gate set, the physical limits, the complexity ceiling, and the whole feasibility question concentrated into one falsifiable component, the keystone gate, judged by three inequalities. The criterion run against every isomer in NUBASE2020 and evaluated against ENSDF. The routine gates verified to Monte Carlo precision, the digital twin run decay by decay against exact enumeration, the compiler three ways, the degree checker. The reference transistor at three scales with its datasheet, the sealed ampoule with its build note, the valve, the component inventory, the metabolism and the ENIAC ledger. Seven executable instruments, a CI that recomputes every number, and a Zenodo archive.
1 change: 1 addition & 0 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
cff-version: 1.2.0
version: 1.1.0
message: "If you use or build on this theory, please cite it as below."
title: "Nuclear Compute: Power, Logic, Memory, and Interconnect in One Radioactive Medium"
authors:
Expand Down
33 changes: 33 additions & 0 deletions DATA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Data: where every input comes from

Every number in this repository descends from public nuclear data through the scripts in the tree. The inputs the scripts read are either committed here, so that everything reproduces offline, or fetched from an official archive by a script that verifies what it fetched. This page names each one. The committed inputs are listed with their SHA-256 digests in [data-manifest.sha256](data-manifest.sha256), and a test fails if any of them changes without the manifest.

## Committed inputs

| file | what it is | source | read by |
|---|---|---|---|
| `gates/data/nubase_4.mas20.txt` | NUBASE2020, the evaluation of nuclear and decay properties of every known nuclide and isomer | Kondev, Wang, Huang, Naimi, Audi, Chin. Phys. C 45, 030001 (2021); IAEA AMDC | `gates/isomer_screen.py`, `photon/ensdf.py` |
| `gates/data/decay_g_*.csv` | decay radiation (gamma) tables for the curated candidate isomers, from ENSDF | IAEA Live Chart of Nuclides, `fields=decay_rads` | `gates/isomer_screen.py` |
| `photon/levels.json.gz` | the adopted levels and gammas of the 544 nuclides carrying an isomer that holds a bit for at least a second, packed | IAEA Live Chart of Nuclides (ENSDF), fetched and packed by `photon/ensdf.py` | `photon/census.py` |
| `neutron/tallies.json`, `neutron/benchmarks.json` | the raw tallies of the two region gate protocol and the three handbook benchmarks, with Monte Carlo uncertainties | OpenMC 0.16.0 with ENDF/B-VIII.0, run by `neutron/gate.py` and `neutron/benchmarks.py` | `neutron/report.py` |
| `ampoule/tallies.json`, `ampoule/calibration.json` | the raw tallies of the vessel in photon transport, and the instrument's calibration against XCOM, the exponential and the thick target rule | OpenMC 0.16.0 with ENDF/B-VIII.0 photoatomic data, run by `ampoule/model.py` and `ampoule/calibrate.py` | `ampoule/report.py`, `ampoule/compile.py` |

## Fetched inputs

| what | source | fetched by | verified how |
|---|---|---|---|
| the ENDF/B-VIII.0 library in OpenMC's HDF5 form (the files the two transport directories use, about 2 GB of a 3.4 GB archive) | openmc.org, the official distribution | `neutron/data.py`, streamed once into `neutron/data/` (ignored by git) or `NC_DATA_DIR` | `python neutron/data.py --verify`, and the three ICSBEP handbook criticals in `neutron/benchmarks.py` |
| the raw level and gamma CSVs behind `photon/levels.json.gz` | IAEA Live Chart of Nuclides | `photon/ensdf.py`, cached in `photon/cache/` (ignored by git) | the packed file is committed; the census reproduces from it offline |

## Reference values quoted from the literature

Handbook eigenvalues and the JEFF-3.1 results on the same cases are from OECD/NEA JEFF Report 21, Appendix 2, with geometries as transcribed in the MIT CRPG benchmark collection. NIST XCOM attenuation coefficients, the ICRP 107 beta mean energies and the ICRP 116 dose coefficients are carried inside the scripts and tally files that use them, with their citations. The ²²⁹Th transition frequency, the NEEC and IGE literature, and the probabilistic hardware benchmark are cited in the [README](README.md) references.

## Reproducing everything

```
pip install -r requirements.txt
python reproduce.py --check
```

runs every step in the order the CI does and reports whether every number, table and vector figure came back byte for byte. The OpenMC runs that regenerate the two tally sets are in `.github/workflows/openmc.yml` and, for a local machine, the [Dockerfile](Dockerfile).
30 changes: 30 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Copyright 2026 Max Freedom Pollard
# SPDX-License-Identifier: Apache-2.0
#
# The OpenMC environment of neutron/ and ampoule/: the same OpenMC 0.16.0
# from conda-forge that the openmc.yml workflow installs, with the Python
# packages every other script in the repository needs. The nuclear data is
# not in the image; neutron/data.py streams the official ENDF/B-VIII.0
# archive into a directory you mount at /data (about 2 GB, once). conda-forge
# builds OpenMC 0.16.0 for x86-64 only, so the image is pinned to that
# platform; on an Apple silicon Mac Docker runs it under emulation, slowly,
# and the emulated BLAS spins unless its threads are pinned, so add
# -e OPENBLAS_NUM_THREADS=1 to docker run there (on an x86-64 host leave
# the threads alone: OpenMC uses them). The transport runs themselves are
# best left to an x86-64 machine or to .github/workflows/openmc.yml.
#
# docker build -t nuclear-compute .
# docker run --rm -v "$PWD:/repo" -v "$HOME/nc-data:/data" nuclear-compute \
# bash -c "python neutron/data.py --verify && python neutron/gate.py --quick && python neutron/report.py"
#
# Everything that needs no OpenMC runs in the same image too:
#
# docker run --rm -v "$PWD:/repo" nuclear-compute python reproduce.py
FROM --platform=linux/amd64 mambaorg/micromamba:1.5.10
ARG MAMBA_DOCKERFILE_ACTIVATE=1
RUN micromamba install -y -n base -c conda-forge \
python=3.12 "openmc=0.16.0=*nompi*" numpy matplotlib h5py markdown pytest \
&& micromamba clean --all --yes
ENV NC_DATA_DIR=/data
WORKDIR /repo
CMD ["python", "reproduce.py"]
Loading
Loading