PICurv runs are composed from modular inputs. This lets you swap physics, numerics, monitoring, and post-analysis independently.
Nothing in the C runtime reads your YAML. picurv validate is the only translator: it checks the contracts, applies non-dimensionalization, and writes the generated control artifacts the runtime actually consumes. That is why a change that does not pass validation never reaches the solver, and why the generated files under <run.config> are the authoritative record of what a run was actually told to do.
A single-run workflow uses five logical inputs:
case.yml: physics/domain/grid/BC/run controlsolver.yml: numerical strategy and solver controlsmonitor.yml: logging, profiling, diagnostics, and output cadencepost.yml: post-processing pipeline recipe-n)Cluster/sweep extensions add:
cluster.yml: Slurm resource/scheduler contract (run --cluster, sweep --cluster)study.yml: parameter matrix + metrics/plot contract (sweep --study)Inside an initialized workspace the active files have canonical homes under <workspace>/config/; variants may have any descriptive name under <workspace>/config/variants/ or the role-specific configuration directories. C binaries do not read YAML names.
Example solve invocation:
Only numerics/monitoring can be swapped without touching case physics. In practice, users often keep one validated case.yml, then compare multiple solver.yml or monitor.yml profiles against it, or reuse one post.yml across several cases.
picurv validates inputs, resolves the workspace asset graph, and then generates C-facing artifacts under <run.config>/:
<run_id>.controlbcs.run or bcs_block*.runwhitelist.runprofile.runpost-recipes/<recipe_id>/post.runactive.json, which selects the immutable configuration revision<run.inputs>/assets.lock.yml and the remaining <run.inputs>/ tree hold the exact reusable grid, initial-condition, and inlet-profile objects selected for the run. These are the concrete contracts consumed by C-side parsers in setup.c, io.c, and BC/profile loaders. A continuation adds a timestamped configuration revision under <run.config>/history/ instead of erasing the inputs used earlier.
Workspace configuration and imported source files live in:
Use picurv inputs import to copy, reflink, hardlink, or explicitly reference imported files. Use picurv precompute to publish a validated asset set; subsequent runs reuse an object whenever its provider configuration has the same digest, including from a different case file.
Proceed to Configuration Reference: Case YAML.
For full contract and ingestion mapping, also see: