Skip to content

Verification

Nasr Ghoniem edited this page Oct 3, 2026 · 1 revision

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.

Clone this wiki locally