Simulation Workflow#
[workflow].mode = "simulation" runs one forward model. It turns one validated
configuration into one persisted run with solver outputs, catalog rows, result
stores, and optional figures.
Use it when the question is: “Given this physical setup, what does one model run produce?”
Functional Role#
The simulation workflow is the canonical HydroModPy forward run. It usually performs these phases:
resolve workspace
-> build geographic context
-> load requested data
-> build supports and mesh input
-> build process plan
-> run solver backend(s)
-> ingest outputs
-> render figures
-> finalize catalog and result store
It is appropriate for:
one MODFLOW-NWT, MODFLOW 6, or Boussinesq run;
steady or transient flow simulations;
solver-specific option testing;
producing persisted results for later inspection or comparison.
It is not the right first choice when the watershed geometry is still
uncertain. Run overview first in that case.
Typical Command#
hmp run examples/projects/06_vire_selune/run_vire_mf6_irregular.toml
Reference examples:
examples/projects/00_getting_started/project.tomlexamples/projects/02_nancon_watershed/run_transient_nwt.tomlexamples/projects/06_vire_selune/run_vire_mf6_irregular.tomlexamples/projects/06_vire_selune/run_vire_nwt.tomlexamples/projects/09_comparison_workflow/base_dupuit_shared_mesh.toml
The figures below use the committed gallery case
headwater_100km2_outlet_2_mf6_transient_reference. It is a more complete
transient MODFLOW 6 example than a minimal launcher run: it combines a natural
headwater support, a transient recharge chronology, integrated discharge
response, and water-table diagnostics.
Representative Results#





Minimal Shape#
[workflow]
mode = "simulation"
[workspace]
project_root = "outputs/my_run"
[simulation]
name = "my_first_forward_run"
[simulation.time]
start_datetime = "2020-01-01 00:00:00"
end_datetime = "2020-12-31 00:00:00"
step_value = "1 month"
[[simulation.process]]
id = "flow_main"
type = "flow"
solvers = ["modflow6"]
[solver]
backend = { backend = "modflow6" }
Important Parameters#
Section / field |
Role |
Practical guidance |
|---|---|---|
|
Inherits a shared project TOML. |
Use overlays for run-specific solver, time, or outlet changes. |
|
Selects the forward-run launcher. |
Must be |
|
Human-readable run name in the catalog. |
Use a short name that encodes basin, solver, and scenario. |
|
Optional stable output identifier. |
Leave empty for filename-derived IDs unless you need strict output naming. |
|
Controls what happens when a run name already exists. |
|
|
Defines stress-period and forcing alignment. |
Check start/end dates and |
|
Declares process type and active solvers. |
Use |
|
Declares flow process parameters and boundary conditions. |
This is where physical assumptions become runtime parameters. |
|
Optional runtime catchment mesh used by solver backends. |
Include it when MODFLOW 6 or Boussinesq should consume an irregular mesh. |
Backend sections |
Tune solver-specific behavior. |
Use |
Time Window Example#
[simulation.time]
start_datetime = "2000-01-01"
end_datetime = "2002-12-31"
step_value = "1 month"
coverage_policy = "warn"
coverage_policy = "warn" is useful while preparing data because it surfaces
forcing gaps without immediately blocking exploratory runs. Use "error"
for production runs when forcing coverage must be complete.
Process Example#
[[simulation.process]]
id = "flow_main"
type = "flow"
solvers = ["modflow6"]
The process declaration says what HydroModPy is asked to solve. The backend sections say how a given solver family should solve it.
Mesh-only preparation is also represented as a simulation process, not as a solver:
[[simulation.process]]
id = "mesh_main"
type = "mesh"
backend = "catchment"
This delegates to the [mesh_catchment] runtime and stops before any flow
or transport solver.
Outputs To Inspect#
After a successful run, inspect in this order:
the catalog entry and run metadata;
solver logs and convergence messages;
support or mesh overview figure;
water-table maps and time-series outputs;
budget or recharge/discharge figures;
persisted Zarr or exported result tables if downstream analysis needs them.