Brutsaert Recession Validation: Deep Linearized Aquifer#
Note
This page and its static assets are auto-generated by python -m tools.doc_gallery. The Sphinx build only reads committed PNG and JSON artifacts.
This transient validation case checks that the available modflow_nwt, modflow6, and PETSc boussinesq backends reproduce the linearized Brutsaert recession law on a deep aquifer.
Case Setup#
homogeneous 1D strip with west divide and east imposed head,
steady uniform recharge used only to build the initial saturated state,
transient recession started by switching recharge off,
comparison performed on outlet discharge Q(t).
Available solver variants: MODFLOW-NWT, MODFLOW 6, MODFLOW 6 irregular triangles, Boussinesq.
What It Shows#
Integrated-discharge recession behavior across MODFLOW-NWT, MODFLOW 6, and the PETSc Boussinesq runtime in the near-linear regime
Primary metrics: relative discharge RMSE, relative discharge max abs error, cross-row spread, positive-increment check.
Solver-specific figures and metrics are shown side by side so the same benchmark can be read across backends.
Analytical Reference#
Exponential Brutsaert recession law for a deep aquifer
Solver Coverage#
Default solver: MODFLOW-NWT
Available variants: MODFLOW-NWT, MODFLOW 6, MODFLOW 6 irregular triangles, Boussinesq

Metrics - Solution: exponential - Initial discharge: 2.707439e-04 m3/s - Characteristic time: 15.01 d - Relative RMSE: 0.7527 - Relative max abs error: 0.8255 - Cross-row head spread: 4.97e-05 m
Config file:
validation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/config_modflownwt.tomlTolerances:
validation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/tolerances_modflownwt.toml
python -m validation_cases.analytical.transient.brutsaert_recession_linearized_deep_1d.run_case --no-show --solver modflow_nwt

Metrics - Solution: exponential - Initial discharge: 2.709876e-04 m3/s - Characteristic time: 15.01 d - Relative RMSE: 0.0191 - Relative max abs error: 0.0361 - Cross-row head spread: 2.08e-07 m
Config file:
validation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/config_modflow6.tomlTolerances:
validation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/tolerances.toml
python -m validation_cases.analytical.transient.brutsaert_recession_linearized_deep_1d.run_case --no-show --solver modflow6

Metrics - Solution: exponential - Initial discharge: 2.751283e-04 m3/s - Characteristic time: 15.01 d - Relative RMSE: 0.0202 - Relative max abs error: 0.0349 - Cross-row head spread: 7.11e-15 m
Config file:
validation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/config_modflow6_irregular_tri.tomlTolerances:
validation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/tolerances_modflow6_irregular_tri.toml
python -m validation_cases.analytical.transient.brutsaert_recession_linearized_deep_1d.run_case --no-show --solver modflow6_irregular_tri

Metrics - Solution: exponential - Initial discharge: 2.743056e-04 m3/s - Characteristic time: 15.01 d - Relative RMSE: 0.0243 - Relative max abs error: 0.0771 - Cross-row head spread: 7.11e-15 m
Config file:
validation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/config_boussinesq.tomlTolerances:
validation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/tolerances_boussinesq.toml
python -m validation_cases.analytical.transient.brutsaert_recession_linearized_deep_1d.run_case --no-show --solver boussinesq
Reproduce#
Run the underlying example or validation case with:
python -m validation_cases.analytical.transient.brutsaert_recession_linearized_deep_1d.run_case --no-show
Refresh the committed gallery artifacts with:
python -m tools.doc_gallery
Case Parameters#
Reference Parameters#
Field |
Meaning |
Value |
Source |
|---|---|---|---|
|
Named analytical solution variant used by the comparison helper. |
exponential |
|
|
Hydraulic conductivity used by the analytical or benchmark reference. |
0.0001 m/s |
|
|
Specific yield used by the transient reference formulation. |
0.1 - |
|
|
Aquifer thickness used by the reference formulation. |
50 m |
|
|
Watershed area used by the recession reference. |
12000 m2 |
|
|
Characteristic channel length used by the recession reference. |
30 m |
|
|
Fraction of the domain where the analytical drainage condition is active. |
1 |
|
|
Constant used by the linearized analytical formulation. |
0.25 |
|
|
Start day retained when comparing the numerical and reference time series. |
0 |
|
|
Number of time periods used by the analytical or benchmark helper. |
12 |
|
|
Reference time step used by the analytical evaluator. |
864000 s |
|
Common Numerical Setup#
Field |
Meaning |
Value |
Source |
|---|---|---|---|
|
Case-specific configuration field workflow used by the validation benchmark. |
simulation |
|
|
Simulation start time used by the benchmark. |
2003-01-01 00:00:00 |
|
|
Simulation end time used by the benchmark. |
2003-05-10 00:00:00 |
|
|
Nominal time step used by the benchmark. |
10 day |
|
|
Synthetic-domain length along the x axis. |
400.0 m |
|
|
Synthetic-domain length along the y axis. |
30.0 m |
|
|
Grid cell count along the x axis. |
40 |
|
|
Grid cell count along the y axis. |
3 |
|
|
Synthetic topography shape used by the benchmark. |
flat |
|
|
Base land-surface elevation of the synthetic topography. |
100 m |
|
|
Depth model used to build the aquifer support. |
constant_thickness |
|
|
Aquifer or support thickness used by the benchmark. |
100.0 m |
|
|
Steady or transient flow regime used by the benchmark. |
transient |
|
|
Sink and source families activated in the benchmark. |
[recharge] |
|
|
Boundary-condition families activated in the benchmark. |
[east_side] |
|
|
Hydraulic parameter families explicitly configured by the benchmark. |
[K, Ss, Sy] |
|
|
Parameterization mode used for K. |
homogeneous |
|
|
Homogeneous K value used by the benchmark. |
1e-4 m/s |
|
|
Parameterization mode used for Ss. |
homogeneous |
|
|
Homogeneous Ss value used by the benchmark. |
1e-10 m-1 |
|
|
Parameterization mode used for Sy. |
homogeneous |
|
|
Homogeneous Sy value used by the benchmark. |
0.10 - |
|
|
Initial-condition policy used to start the benchmark. |
custom |
|
|
Scalar initial head or top offset used by the initial-condition policy. |
50.0 m |
|
|
Case-specific configuration field flow.bc.dirichlet.east_side.forcing.mode used by the validation benchmark. |
constant |
|
|
Fixed head applied on the east side boundary. |
50 m |
|
|
Case-specific configuration field flow.bc.dirichlet.east_side.forcing.units used by the validation benchmark. |
m |
|
|
Case-specific configuration field flow.sinks_sources.recharge.negative_to_evt used by the validation benchmark. |
true |
|
|
External data families loaded by the benchmark. |
[recharge] |
|
|
Recharge data source mode used by the benchmark. |
synthetic |
|
|
Recharge values used by the benchmark forcing. |
[2 mm/day, 0 mm/day, 0 mm/day, 0 mm/day, 0 mm/day, 0 mm/day, 0 mm/day, 0 mm/day, 0 mm/day, 0 mm/day, 0 mm/day, 0 mm/day, 0 mm/day] |
|
|
Sampling frequency used for the recharge forcing. |
10D |
|
|
Runoff ratio applied when converting recharge forcing to effective infiltration. |
0 |
|
Solver-Specific Overrides#
Field |
Meaning |
Value |
Source |
|---|---|---|---|
|
Planar support construction mode used by MODFLOW-NWT. |
resample_to_shape |
|
|
Planar support cell count along x used by MODFLOW-NWT. |
40 |
|
|
Planar support cell count along y used by MODFLOW-NWT. |
3 |
|
|
Planar support resampling mode used by MODFLOW-NWT. |
nearest |
|
|
Number of vertical layers used by MODFLOW-NWT. |
1 |
|
|
Whether the first time period is treated as steady by MODFLOW-NWT. |
true |
|
Field |
Meaning |
Value |
Source |
|---|---|---|---|
|
Solver-specific override applied to MODFLOW 6. |
false |
|
|
Linear-solver complexity preset used by MODFLOW 6. |
COMPLEX |
|
|
Vertical anisotropy ratio passed to MODFLOW 6. |
1 |
|
|
Planar support construction mode used by MODFLOW 6. |
resample_to_shape |
|
|
Planar support cell count along x used by MODFLOW 6. |
40 |
|
|
Planar support cell count along y used by MODFLOW 6. |
3 |
|
|
Planar support resampling mode used by MODFLOW 6. |
nearest |
|
|
Number of vertical layers used by MODFLOW 6. |
1 |
|
|
Whether the first time period is treated as steady by MODFLOW 6. |
true |
|
Field |
Meaning |
Value |
Source |
|---|---|---|---|
|
Solver-specific override applied to MODFLOW 6. |
false |
|
|
Linear-solver complexity preset used by MODFLOW 6. |
COMPLEX |
|
|
Vertical anisotropy ratio passed to MODFLOW 6. |
1 |
|
|
Number of vertical layers used by MODFLOW 6. |
1 |
|
|
Whether the first time period is treated as steady by MODFLOW 6. |
true |
|
|
Committed unstructured mesh file used by the irregular-mesh solver variant. |
../../../shared/mesh_bundles/brutsaert_recession_linearized_deep_irregular_tri_400x30/mesh_2d.msh |
|
|
Committed mesh-bundle directory used to recover support metadata for the irregular-mesh solver variant. |
../../../shared/mesh_bundles/brutsaert_recession_linearized_deep_irregular_tri_400x30 |
|
No additional override beyond the common validation setup.
Acceptance Criteria#
Field |
Meaning |
Value |
Source |
|---|---|---|---|
|
Simulated observable compared against the reference solution. |
outlet_discharge_east_side_m3_s |
|
|
Expected number of stored time periods checked by the validation helper. |
12 |
|
|
Head-like observable used when the case exposes more than one comparison target. |
watertable_elevation |
|
|
Warmup periods dropped before comparing modflow6_irregular_tri to the reference. |
1 |
|
Acceptance Criteria by Solver#
Field |
Meaning |
Value |
Source |
|---|---|---|---|
|
Expected output shape or time-space layout checked for this solver. |
None |
|
|
Acceptance threshold for discharge.relative_rmse. |
1 |
|
|
Acceptance threshold for discharge.relative_max_error. |
1 |
|
|
Maximum accepted cross-row spread for uniformity. |
0.0001 |
|
|
Acceptance threshold for monotonicity.max_positive_increment_m3_s. |
1e-06 |
|
Field |
Meaning |
Value |
Source |
|---|---|---|---|
|
Expected output shape or time-space layout checked for this solver. |
None |
|
|
Acceptance threshold for discharge.relative_rmse. |
0.03 |
|
|
Acceptance threshold for discharge.relative_max_error. |
0.05 |
|
|
Maximum accepted cross-row spread for uniformity. |
1e-06 |
|
|
Acceptance threshold for monotonicity.max_positive_increment_m3_s. |
1e-12 |
|
Field |
Meaning |
Value |
Source |
|---|---|---|---|
|
Expected output shape or time-space layout checked for this solver. |
None |
|
|
Acceptance threshold for discharge.relative_rmse. |
0.03 |
|
|
Acceptance threshold for discharge.relative_max_error. |
0.05 |
|
|
Maximum accepted cross-row spread for uniformity. |
1e-06 |
|
|
Acceptance threshold for monotonicity.max_positive_increment_m3_s. |
1e-07 |
|
Field |
Meaning |
Value |
Source |
|---|---|---|---|
|
Expected output shape or time-space layout checked for this solver. |
None |
|
|
Acceptance threshold for discharge.relative_rmse. |
0.03 |
|
|
Acceptance threshold for discharge.relative_max_error. |
0.08 |
|
|
Maximum accepted cross-row spread for uniformity. |
1e-06 |
|
|
Acceptance threshold for monotonicity.max_positive_increment_m3_s. |
1e-12 |
|
Source Pointers#
validation_cases/README.mdvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/README.mdvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/reference.pyvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/comparison.pyvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/plotting.pyvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/run_case.pyvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/metadata.tomlvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/config_common.tomlvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/runtime_boussinesq.pyvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/tolerances.tomlvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/tolerances_boussinesq.tomlvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/tolerances_modflow6_irregular_tri.tomlvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/tolerances_modflownwt.tomlvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/config_modflownwt.tomlvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/config_modflow6.tomlvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/config_modflow6_irregular_tri.tomlvalidation_cases/analytical/transient/brutsaert_recession_linearized_deep_1d/config_boussinesq.tomlvalidation_cases/analytical/transient/brutsaert_common.pyvalidation_cases/analytical/transient/brutsaert_reference.pyvalidation_cases/analytical/transient/runtime_boussinesq_brutsaert_1d.py
Artifacts#
docs/source/_static/capability_gallery/validation/brutsaert_recession_linearized_deep_1d__modflownwt.pngdocs/source/_static/capability_gallery/validation/brutsaert_recession_linearized_deep_1d__modflow6.pngdocs/source/_static/capability_gallery/validation/brutsaert_recession_linearized_deep_1d__modflow6_irregular_tri.pngdocs/source/_static/capability_gallery/validation/brutsaert_recession_linearized_deep_1d__boussinesq.pngdocs/source/_static/capability_gallery/validation/brutsaert_recession_linearized_deep_1d_summary.jsonstores the displayed metrics plus source hashes used bypython -m tools.doc_gallery --check.