MODFLOW Governing Equation And CVFD Formulation#
Purpose#
This page is the scientific entry point for the MODFLOW-family flow backends in HydroModPy.
Its role is narrower than a full MODFLOW manual and more explicit than a simple backend overview:
state the governing groundwater-flow problem that HydroModPy expects
modflownwtandmodflow6to solve,explain the control-volume finite-difference perspective used by the MODFLOW family,
identify which parts of the formulation belong to official MODFLOW documentation and which parts belong to HydroModPy’s own scientific contract and method choices,
provide the chapter map for the deeper MODFLOW scientific notes that should grow around this page.
Primary Official Anchors#
The scientific material on this page should stay aligned with the following primary sources:
USGS TM 6-A55, [Langevin et al., 2017], Documentation for the MODFLOW 6 Groundwater Flow Model: governing equation, control-volume finite-difference formulation, storage, and stress-package concepts for MODFLOW 6.
USGS TM 6-A56, Documentation for the XT3D Option in the Node Property Flow Package of MODFLOW 6: extended conductance formulation and the reason XT3D matters on irregular grids.
MODFLOW 6 Input Guide: package-level definitions for
DIS,DISV,NPF,STO,CHD,DRN,WEL,RCHA,EVT,IMS, andOC.USGS TM 6-A37, [Niswonger et al., 2011], Online Guide to MODFLOW-NWT: the legacy Newton-based path still used by HydroModPy for the structured MODFLOW-NWT branch, on top of the original MODFLOW-2005 ground-water flow process [Harbaugh, 2005].
HydroModPy documentation should build from these sources rather than replacing them.
Scope In HydroModPy#
This page is about the HydroModPy use of the MODFLOW groundwater-flow family:
modflow_nwtas the legacy structured-grid flow backend,modflow6as the modern backend for both structured and runtime unstructured mesh paths,the common solver-agnostic
[flow]scientific payload that HydroModPy maps to those two backends.
This page is not the place for:
FloPy call signatures,
package-by-package input syntax,
transport details beyond their coupling boundary to flow,
software class layout.
Those topics belong in the existing architecture notes or in dedicated package pages.
HydroModPy-Level Governing Problem#
At the HydroModPy level, the canonical unknown is hydraulic head \(h\).
The shared groundwater problem is expressed in terms of:
storage,
internal groundwater flow between neighbouring control volumes,
imposed-head or head-dependent boundary exchanges,
diffuse areal forcing,
localized sources and sinks.
One schematic PDE-style reading is:
This is intentionally schematic. HydroModPy does not claim that every backend uses the exact same continuous reduction or the exact same closure laws.
What HydroModPy does require is a stable scientific contract:
head is the primary state variable,
hydraulic properties are expressed before backend translation,
storage, recharge, wells, imposed-head boundaries, and drainage semantics are normalized before assembly,
backend differences are then made explicit rather than hidden.
Relation To The MODFLOW Family#
The MODFLOW family solves groundwater flow through a control-volume finite-difference perspective.
The key scientific ideas that HydroModPy should explain here are:
one hydraulic-head unknown per cell,
one water-balance equation per cell,
intercell exchange written through conductance-like connections,
storage and stress terms added to that cell balance,
geometry carried by one discretization package such as
DISorDISV.
Fig. 72 This is the minimal mental model used by the HydroModPy documentation: one head unknown per cell, intercell exchanges through conductance-like terms, and package stresses added to the same cell balance.#
At the cell-balance level, a useful schematic reading is:
where:
\(i\) is one control volume,
\(\mathcal{N}(i)\) is the set of connected neighbouring cells,
\(C_{ij}\) is the intercell conductance term,
\(Q_i\) collects stress-package contributions for that cell,
\(S_i\) represents the storage side of the transient balance.
This is not meant to replace the official derivations in TM 6-A55. It is the minimum common mathematical picture HydroModPy needs in public documentation.
From Equation To Published Results#
The equation and the cell balance above should always be connected back to actual model outputs. Two useful result anchors are:


Scientific Questions HydroModPy Must Answer Explicitly#
Using MODFLOW inside HydroModPy raises questions that the official USGS manuals do not answer for the project automatically.
The documentation here should therefore make the following choices explicit:
How the solver-agnostic
[flow]payload becomes MODFLOW-family cell terms.Which public package subset HydroModPy actually uses today.
When
DISversusDISVis part of the scientific method choice.How
SyandSsare interpreted in the current vertical contract.When HydroModPy treats a boundary as imposed head versus head-dependent exchange.
Why
modflow6is preferred for irregular runtime meshes.Why
modflow_nwtis still kept for legacy structured comparisons and theMT3DMS/MODPATHecosystem.Why XT3D is treated as a first-class numerical-method choice rather than an invisible implementation detail.
Recommended Chapter Structure#
The MODFLOW scientific block should grow around the following structure.
Common governing equation and normalized HydroModPy scientific contract. This page should explain the unknown, the sign conventions, and the PDE-to-cell-balance reading.
Geometry and discretization path. Explain
DISversusDISV, control-volume interpretation, and why mesh choice is already a scientific decision.Internal flow law. Explain what
NPFmeans scientifically, including conductivity, anisotropy, convertible cells, and the role of XT3D.Storage and transient terms. Explain
STO,Sy,Ss, steady/transient flags, and the current vertical representation assumptions.Boundary and forcing package semantics. Explain
CHD,DRN,WEL,RCHA,EVT, and the current project-level simplifications.Nonlinearity and solver policy. Explain Newton behaviour, wetting/drying, IMS choices, and what stays specific to the legacy NWT branch.
Backend-selection rationale. Explain when
modflow6is scientifically preferred and whenmodflow_nwtis still the right comparison or compatibility choice.Evidence and comparison reporting. Explain what should be reported in validation and comparison pages so that solver choice, mesh choice, and XT3D choice are not silently mixed.
Immediate Writing Backlog#
The next concrete additions should now be:
expand the internal-flow-law section with a careful TM 6-A55 reading of the
NPFrole;add one explicit
DISversusDISVsubsection with HydroModPy runtime examples;add one short subsection on Newton behaviour and why the legacy NWT path still matters for some unconfined structured cases;
connect this page to one public scientific
modflow6versusmodflow_nwtcomparison note;connect comparison workflow pages back to the exact method choices they are exercising.
How This Page Relates To Existing Notes#
This page should stay near the top of the MODFLOW scientific reading order.
Then readers should continue with:
Current Limitation#
HydroModPy already documents many MODFLOW choices in fragments, but still lacks one public note that fully walks from:
the governing equation,
to the MODFLOW control-volume formulation,
to the package subset actually used by the project,
to the scientific reason a user would choose one backend or mesh path over another.
This page is intended to become that anchor.