Verification - Ghoniem/RadCluster GitHub Wiki
Verification
Conservation residuals
Every run reports two dimensionless residuals.
| Residual | What it checks |
|---|---|
| $\delta_{\rm FP}$ | the Frenkel-pair balance: the vacancy content equals the SIA content plus the cumulative net bias flux to dislocations |
| $\delta_{\rm He}$ | the helium balance |
The swelling is reported through the identity
$$S(t) = S_I(t) + \Delta J^d(t)$$
where $S$ is the vacancy content, $S_I$ is the SIA content, and $\Delta J^d$ is the cumulative net bias flux to dislocations.
Levels
| Value | Meaning |
|---|---|
| below about $10^{-6}$ | expected |
| above $10^{-3}$ | a coding error |
Note: In long loop-coarsening runs the loop distribution can outgrow the size axis. Products beyond the largest tracked size then carry content out of the domain, and $\delta_{\rm FP}$ grows. Check it against the length of the size axis.
Check scripts
The folder radcluster_code/codes/Python_Testing/ holds standalone scripts that gate the physics:
- helium and Frenkel-pair conservation
- bin-moment against discrete equivalence
- convergence in the size of the discrete prefix
- loop-conversion kernels and conservation
- consistency of the graph declaration
- comparisons of linear solvers and of window modes
- benchmarks of the Woodbury preconditioner
- parameter sweeps
For example, this script checks the declaration of the EUROFER-97 graph:
cd radcluster_code
PYTHONPATH=. python3 codes/Python_Testing/check_eurofer_rag.py
The script ends with ALL CHECKS PASSED. It needs only the Python layer, and not the C++ solver.
Experimental database
The folder radcluster_code/Eurofer_micro_database/ contains a spreadsheet of loop and cavity number densities and mean sizes for neutron-irradiated and ion-irradiated ferritic-martensitic steels, and a notebook that fits and plots them.
Campaign harness
The folder radcluster_code/digital_twin/ drives the calibration and the verification of the model. A campaign is a designed set of runs that is distributed over several machines, including the UCLA Hoffman2 cluster.
Each machine compiles its own solver. Before a machine joins a campaign, run the machine check:
cd radcluster_code/digital_twin
python check_machine.py
Note: Do not start a machine that fails this check. Its rows cannot be pooled with the others.
The results are appended as each row completes, and a restart skips the rows that are already present. The file digital_twin/README.md describes the protocol.