Skip to content

Verification

Select checks by the boundaries changed. Portable correctness runs locally first; Roihu is reserved for behaviour that requires Linux, OpenFOAM v2512, MPI, UCX, Slurm, multiple nodes or GH200 hardware.

Verification ladder

Level Run when Evidence
Documentation Prose, links or examples Diff, links, signatures, units and source/site rendering
Static Source change Repository formatting and relevant import or compile checks
Focused unit Behaviour change Tests for the owning Python or C++ component
Native integration Runtime, FNOM, connector or exchange change CMake build and the matching tests/backend/ or BindNordic native target
OpenFOAM integration Field, expression, closure, transform or installed SDK change foamnordic build under the target OpenFOAM environment
Solver smoke Commit timing, observation, equation or boundary change Small case completion with expected fields, logs and records
Roihu single-node Linux ABI, MPI, SHM or Slurm change Saved batch script and retained logs under the configured test directories
Roihu multi-node or GPU UCX, split placement or accelerator change Explicit allocation, readiness, exchange and teardown evidence

Documentation-only changes need no runtime tests or solver execution. Escalate functional checks only when the changed boundary requires them.

Test locations

Area Tests
Python API, plans and rendering packages/foamnordic/tests/
FNOM and model kernels packages/bindnordic/tests/
Rune, Harbor and channels tests/backend/communication/
Field exchange and observations tests/backend/adapter/
ModelHost, Smedja and admission tests/backend/inference/
Longship native lifecycle tests/runtime/
OpenFOAM expressions and dictionary contracts tests/openfoam/
Installed OpenFOAM SDK examples/openfoam/externalNutFjord/testInstalledSdk.sh

Acceptance rules

A passing build is not sufficient for a numerical change. Compare the relevant fields against an accepted baseline and report tolerances, precision, mesh, rank count and physical interval. A performance result must separate packing, inference, exchange and end-to-end solver time and must not generalise a focused microbenchmark into a solver speed-up.

Keep generated cases, build trees and temporary diagnostics outside tracked source paths. Preserve solver logs, scheduler output and numerical reports when they are substantive validation evidence; remove disposable local smoke artefacts after the result has been recorded.