PICurv 0.1.0
A Parallel Particle-In-Cell Solver for Curvilinear LES
 
Loading...
Searching...
No Matches
Capability Evidence Matrix

Type ReferenceFor Scientists assessing credibilityStatus Declared sources for every public capability

What confidence this project claims for each capability in the families covered so far.

The table is generated from the capability registry and now covers every public capability family the census recognises - 33 families, 101 canonical values.

Warning
Coverage is not credibility. A complete table means every capability has been asked what evidence stands behind it, not that the answers are strong. Many rows carry a single facet, and some carry none. Read the gaps in section 3 before citing anything here.

A method being documented says nothing about whether it has been verified, which is what this table is for.

1. How to Read It

Warning
A tick is a declared evidence source, not a verified scientific result. Tooling checks that each declared source exists and that the capability entry cites the same source the registry does. It cannot check that the test or example actually establishes the claimed property — that is a human review judgement. Read a tick as "someone recorded this source against this claim", not as "this has been proven".

Each column is an independent evidence facet, not a rung on a ladder. Production use does not imply analytical verification, and a benchmark comparison does not imply restart equivalence. A capability can be heavily exercised and still never checked against an exact solution.

A row with no ticks is not an error. It means implemented only: the code path exists and runs, and nobody has yet established more than that. That is a legitimate state to record and a dishonest one to hide.

Facet definitions are in Capability Status Vocabulary.

2. The Matrix

Capability Family Unit verified Integration/regression verified Analytical or manufactured-solution verified Benchmark characterized Externally/reference validated Production exercised
conservationboundary.handler
constant_fluxboundary.handler
constant_velocityboundary.handler
geometricboundary.handler
initial_fluxboundary.handler
noslipboundary.handler
parabolicboundary.handler
prescribed_flowboundary.handler
inletboundary.type
outletboundary.type
periodicboundary.type
wallboundary.type
Dual Time Picard Jameson RKmomentum.solver
Dual Time Picard RK4momentum.solver
Explicit RK4momentum.solver
Newton Krylovmomentum.solver
constant_smagorinskyturbulence.les_model
dynamic_smagorinskyturbulence.les_model
noneturbulence.les_model
analyticaleulerian.field_source
loadeulerian.field_source
solveeulerian.field_source
Constantinitial.field_mode
Poiseuilleinitial.field_mode
Zeroinitial.field_mode
PointSourceparticle.init_mode
Surfaceparticle.init_mode
SurfaceEdgesparticle.init_mode
Volumeparticle.init_mode
CornerAveragedparticle.interpolation
Trilinearparticle.interpolation
periodic_deterministicsolver.convergence_mode
statistical_steadysolver.convergence_mode
steady_deterministicsolver.convergence_mode
transientsolver.convergence_mode
k_omegaturbulence.rans_model
noneturbulence.rans_model
simpson_ikturbulence.les_test_filter
volume_weighted_boxturbulence.les_test_filter
cube_root_volumeturbulence.les_filter_width
geometric_meanturbulence.les_filter_width
max_edgeturbulence.les_filter_width
globalturbulence.les_averaging_mode
homogeneousturbulence.les_averaging_mode
localturbulence.les_averaging_mode
clampturbulence.les_clip_mode
clip_negativeturbulence.les_clip_mode
noneturbulence.les_clip_mode
TGV3Danalytical.solution_type
UNIFORM_FLOWanalytical.solution_type
ZERO_FLOWanalytical.solution_type
cabotturbulence.wall_function
log_lawturbulence.wall_function
wernerturbulence.wall_function
ucatinitial.target_field
ucontinitial.target_field
msdstatistics.task
filegrid.mode
grid_gengrid.mode
programmatic_cgrid.mode
cpipegrid.generator_type
pipegrid.generator_type
warpgrid.generator_type
initparticle.restart_mode
loadparticle.restart_mode
nodal_averagepost.eulerian_task
normalize_fieldpost.eulerian_task
q_criterionpost.eulerian_task
specific_kepost.lagrangian_task
shell_spectrumpost.spectra_task
fluxpost.field_statistics_output
meanpost.field_statistics_output
reynolds_stresspost.field_statistics_output
rmspost.field_statistics_output
tkepost.field_statistics_output
physical_timestatistics.weighting
samplestatistics.weighting
grid_independencestudy.type
sensitivitystudy.type
timestep_independencestudy.type
frozen_momentum_jacobianmomentum.nk_preconditioner
nonemomentum.nk_preconditioner
autostorage.compression
balancedstorage.compression
faststorage.compression
maximumstorage.compression
nonestorage.compression
carryrun.restart_statistics_state
resetrun.restart_statistics_state
copyworkspace.input_import_mode
hardlinkworkspace.input_import_mode
referenceworkspace.input_import_mode
reflinkworkspace.input_import_mode
analysis-readystorage.offload_policy
metadata-onlystorage.offload_policy
restart-readystorage.offload_policy
analysisstorage.retention_component
checkpointsstorage.retention_component
inputsstorage.retention_component
logsstorage.retention_component
raw-outputstorage.retention_component
visualizationstorage.retention_component

Accepted spellings and latent values are omitted: they carry no evidence of their own beyond the canonical value they resolve to.

3. Reading the Gaps

Three gaps in the current table are worth naming, because they are the ones most likely to matter:

  • **Explicit RK4 has no facets.** src/guide.md records "direct positive-path momentum solver harnesses, especially explicit RK" as an open coverage gap, and no shipped example selects it. Treat it as unverified.
  • No capability claims analytical or reference facets. The particle verification examples in Example Catalog are designed to compare against exact solutions, but a numerical acceptance threshold has not been run and gated as part of this work. Design intent is not evidence, so no tick was recorded.
  • Both LES models are experimental. Both are implemented and carry unit coverage in tests/c/test_les.c, including an analytic check of the Germano model tensor and a decomposition-independence check of the coefficient averaging. Neither has a validated coefficient magnitude: no reference-flow comparison has been run and gated. The check that would close the gap is decaying isotropic turbulence with homogeneous averaging, where Cs(t) should settle near 0.16-0.17. The dynamic model declares examples/decaying_isotropic_turbulence as production evidence, which records that the model runs there and reproduces the trends a correct implementation must show
    • not that the coefficient has been checked against a reference. The constant model declares none, because no shipped example selects it.

4. Keeping It Current

The matrix is generated from value_metadata[*].evidence in tests/tooling/capability_families.json and regenerated by make docs-inventory.

Each facet maps to source identifiers (make:<target>, example:<dir>, file:<path>, or measurement:<id>). make audit-capability enforces two things: every declared source must exist, and the capability entry's Evidence part must cite the same source. It does not and cannot verify that the source establishes the claim, so adding a facet remains a deliberate human assertion.

4.1 Citing a Measurement That Already Happened

The first three source kinds name something anyone can re-run on demand. That works for unit and integration coverage, and for a shipped example. It does not work for the evidence the analytical, benchmark, and reference facets ask for: a refinement study, a decaying-turbulence coefficient check, a comparison against a published result. Those run once, on a cluster, at a resolution nobody will repeat casually, and the answer is a number rather than a command.

measurement:<id> cites such a run, recorded in tests/tooling/measurement_records.json. A record states the question asked, the date and revision it was taken at, the machine and rank layout that produced it, the configuration that determines the result, what was measured against what threshold, and — required, with none rejected — what the measurement does not establish. A verdict of not-met or inconclusive is a legitimate record: a campaign that failed its threshold is evidence, and deleting it invites the same run again.

make review-packet CAPABILITY=<family> prints the records cited by that family before its verification commands, so a reader planning an expensive run sees what has already been answered first. That is the point of recording them: the registry exists to stop a question being paid for twice, and to give a status promotion something specific to rest on.

5. Related Documentation