Comparison Output Reading Order#
Use this page after running one comparison case such as the examples in
examples/projects/09_comparison_workflow/.
Its purpose is simple: help you decide what to open first, and what each file really proves.
If you have not yet run a comparison, start with Simulation Comparison Workflow.
What The Workflow Produces#
One comparison run usually leaves two kinds of artifacts:
normal child simulation outputs, one folder per generated child TOML;
one comparison output folder that summarizes the differences between those child runs.
The comparison output folder is the right place to start. Its role is to make the evidence readable without reopening each child simulation manually.
Persistence Model#
Child simulations keep the normal HydroModPy persistence model: simulation metadata are stored in the workspace/project catalog, while fields and tabular products live in the result storage controlled by that catalog.
The comparison folder is different. It is a post-processing layer above those
runs, not a simulation run of its own. Its HTML, CSV, JSON, Markdown, and PNG
files are therefore written as standalone artifacts under the comparison output
root and indexed by comparison_manifest.json.
That means:
the child run results remain queryable through the simulation catalog;
comparison artifacts are discoverable from
comparison_manifest.json;web/index.htmlis a human-readable entry point, not the source of truth;if fleet-scale queries over many comparison reports become necessary, the right extension is a dedicated comparison catalog rather than storing report HTML and images inside the simulation catalog.
Reading Order#
Use the order above for a first pass.
web/index.htmlOpen this first when it exists. It is the generated reading page that links the audit, metrics, categorized figures, budget tables, and child outputs.comparison_audit.mdRead this first. It tells you whether the workflow still considers the child runs to be one comparable physical case.comparison_report.mdRead this next for context: reference variant, candidate variants, observables, and main outputs.comparison_figures/case_configuration.pngOpen this before judging numerical differences. It shows the support, topography when available, detected fixed-head boundaries, point/outlet observables, and recharge forcing.comparison_metrics.csvUse this to quantify the gap: bias, MAE, RMSE, and max error.comparison_figures/*triptych*.pngUse the figures to see where the discrepancy is concentrated.hydrographic_network_metrics.csvInspect this when the compared runs both expose canonical hydrographic networks and geometry matters to the question.comparison_manifest.jsonKeep this for traceability. It is the index that points to the report, metrics, generated configs, and child run folders.
Why This Order Matters#
Starting with figures is tempting, but it is often the wrong first move.
The safer order is:
audit first, to confirm that the comparison stayed scientifically coherent;
configuration second, to understand the tested case;
metrics third, to measure the discrepancy;
field figures fourth, to locate and diagnose it.
This avoids one common failure mode: reading an impressive difference map before realizing the compared runs do not actually share the same support, observable, or physical setup.
Case Configuration Figure#
comparison_figures/case_configuration.png is the orientation view. In the
HTML report, it appears in the dedicated Configuration du cas section. It
is not a solver result; it is a compact description of the case that produced
the results.
Use it to answer:
what mesh or cell-centroid support is being compared,
where the fixed-head boundaries are detected,
which point/outlet observables are sampled,
which recharge chronicle is applied,
which solver variants are compared.
Triptych Figures#
In web/index.html, solver-output figures are grouped by category before
being listed:
charges hydrauliques;
flux, drainage, surface excess and seepage;
budgets and balance diagnostics;
networks and spatial diagnostics;
performance;
uncategorized figures when no standard rule applies.
The most useful visual artifact is usually one triptych image:
reference field,
candidate field,
candidate minus reference difference.
That layout is valuable because it keeps three questions separate:
what the reference solution looks like,
what the candidate solution looks like,
where the mismatch is actually located.
For map observables, this is usually the fastest way to see whether the main difference is:
one broad bias,
one localized hotspot,
one boundary effect,
or one support-resolution artifact.
How To Read Metrics#
Use the metrics file to answer magnitude questions before making causal claims.
Metric |
Main use |
What it does not prove by itself |
|---|---|---|
Bias |
Detect one systematic signed offset |
A small bias does not mean the fields agree everywhere |
MAE |
Measure the typical absolute discrepancy |
It can hide a few strong local outliers |
RMSE |
Penalize stronger local deviations more heavily |
A large RMSE does not tell you where the hotspot is |
Max error |
Flag the worst local mismatch |
One peak does not mean the whole field is poor |
Time Columns In CSV Files#
When reading observables.csv, timeseries_long.csv,
comparison_differences.csv, or budget_timeseries_long.csv, first check
time_role.
initial_stateis the explicit state before the first transient period.state_snapshotis an instantaneous state such as head or watertable.period_valueis an interval value such as recharge, drainage, or a budget component.reducedis a statistic computed from several time rows.
For period_value rows, elapsed_seconds is the end of the period. Budget
exports also carry period_index, period_start_seconds, and
period_end_seconds so that interval quantities are not confused with
instantaneous states.
Comparable Outflow#
For transient MODFLOW/Boussinesq comparisons, do not read drainage and surface excess as interchangeable native variables.
drainage_total_m3_sis the outflow through the drainage operator.surface_excess_total_m3_sis the outflow associated with saturation or surface excess when the backend exposes it.comparable_outflow_total_m3_sis a post-processed comparison quantity:drainage_total_m3_s + surface_excess_total_m3_swith missing components treated as zero.
Use comparison_figures/comparable_outflow_dashboard.png and
budget_timeseries_wide.csv when the question is “how much water leaves the
groundwater system?” Keep the native components visible when the question is
“which numerical mechanism produced the outflow?”
Common Misreadings#
Avoid these shortcuts when reading comparison outputs.
A small discrepancy is not the same thing as analytical validity.
A clean triptych does not guarantee the same hydrological assumptions upstream.
A large difference near one boundary does not automatically mean one solver is wrong; it may expose a support, closure, or boundary-condition mismatch.
A fine-raster comparison is a harmonized observable space, not a universal proof of exact mesh equivalence.
When To Open The Child Runs#
Stay in the comparison folder first.
Open child run folders only when one discrepancy needs a second-level diagnosis, for example:
to inspect one solver package setup,
to check one exported field directly,
to read one backend-specific log or budget artifact.
That keeps the workflow readable:
comparison folder for evidence,
child run folders for diagnosis.