hydromodpy.calibration.cases.groundwater_1d#

Transient 1D unconfined-aquifer analytical calibration case.

This module ports the groundwater_1d calibration case from the old hydromodpy.analysis.calibration.cases.groundwater_1d tree to the new hydromodpy.calibration engine API.

Physics#

The model solves a 1D Dupuit-Forchheimer unconfined aquifer with a material interface at x = xi. Two formulations are supported:

  1. Linearized around mean saturated thickness H:

    Sy * dh/dt = d/dx( K*H * dh/dx ) + R(t)
    
  2. Nonlinear Boussinesq:

    Sy * dh/dt = d/dx( K*h * dh/dx ) + R(t)
    

Domain x in [0, L] with Dirichlet boundary at x=0 and impermeable (Neumann) at x=L. The finite-difference implementation uses harmonic means for face transmissivities, tridiagonal solves (Thomas algorithm), and Picard fixed-point iterations for the nonlinear option.

Calibration#

build_noisy_groundwater_chronicle(config) forges a synthetic noisy head chronicle from “true” parameters. make_groundwater_simulator returns a callable mapping {Kam, Kav, Syam, Syav, xi} to the flattened observation vector. calibrate_groundwater wires these two pieces to CalibrationEngine with any registered optimizer.

Module attributes

MODEL_PARAMETER_ORDER

Canonical calibration parameter order for this case.

Functions

build_noisy_groundwater_chronicle([config])

Build one synthetic noisy head chronicle.

calibrate_groundwater([method, chronicle, ...])

Run a calibration of the groundwater_1d case and return a summary.

default_parameter_space([overrides])

Build the default ParameterSpace for the groundwater_1d case.

make_groundwater_simulator(chronicle)

Build a simulator callable simulate(**params) -> observation vector.

simulate_heads(*, t, h0_series, ...[, h_init])

Run the 1D transient simulation and return h(x, t).

Classes

Hydro1DNumerics([nx, formulation, ...])

Numerical controls for the implicit solver.

Hydro1DParameters(L, xi, Kam, Kav, Syam, Syav)

Physical parameters of the 1D aquifer model.