Stream, Ocean, And Drainage Semantics#

Purpose#

This page documents three boundary or exchange families that are easy to confuse because they all live near the land surface:

  • stream,

  • ocean,

  • drainage.

They do not play the same scientific role.

  • stream and ocean currently act as stage or imposed-head style boundaries in the public modelling path,

  • drainage acts as a head-dependent release operator,

  • none of them should be confused with diffuse recharge,

  • and none of them should be confused with runoff observations.

Conceptual Diagram#

The atmosphere supplies precipitation and a potential ET demand to the land surface, which partitions them hydrologically. From there the following exchanges occur:

  • the land surface sends recharge to the aquifer; the aquifer can also return ETP / net diffuse loss to the land when groundwater acts as a sink,

  • the land surface produces runoff, which stays on the surface signal and is read by outlet hydrometry; it is not a Flow forcing,

  • the river / stream stage and the ocean stage feed the aquifer as stage supports in the current public path,

  • the solve produces exchanged fluxes that emerge between the aquifer and the stream or ocean stage,

  • the aquifer also produces a drainage / groundwater release signal that joins runoff at the outlet hydrometry comparison.

The aquifer keeps head h as the primary unknown throughout.

Drainage is a head-dependent outflow operator. It is distinct from recharge, runoff, and stream/ocean stage.

Drainage result example#

On the Nancon reference run, drainage is not a prescribed stream network. It is a head-dependent release mechanism whose active cells are derived after the groundwater solve.

Why This Distinction Matters#

Without one dedicated page, it is too easy to read all surface-related objects as if they were just different names for water leaving or entering the model.

That is not the intended meaning.

Family

Prescribed quantity

Scientific meaning

What the solve returns

stream

stage or head m

Exchange with one river-network support

resulting groundwater-to-stream or stream-to-groundwater flux

ocean

sea level m

Exchange with one coastal support

resulting coastal inflow or outflow

drainage

conductance m2/s plus threshold geometry

Unilateral head-dependent release

resulting drainage outflow

Stream Semantics#

At the current Flow level, stream should be understood as:

  • one selected stream support on the mesh or grid,

  • one prescribed stage or head value,

  • one exchange flux that is not prescribed directly but emerges from the solved head field.

In other words, stream is currently closer to:

  • a river stage boundary,

  • or a prescribed surface-water head support,

than to a full surface-routing or river-hydraulics model.

Current public implementation notes:

  • in MODFLOW-family paths, stream is currently assembled through CHD-style constant-head supports rather than a full RIV law;

  • in the Boussinesq path, stream is resolved to river-tagged cells or edges, then applied as a Dirichlet support.

This is a strong modelling simplification. It is acceptable in controlled setups and in some basin-scale approximations, but it is not equivalent to a riverbed-resistance model with explicitly parameterized conductance.

Ocean Semantics#

ocean is also a stage-controlled boundary family, but its support logic is different from stream.

Scientifically, ocean means:

  • the sea level is prescribed,

  • the coastal support is the part of the domain considered hydraulically connected to the sea,

  • the exchanged flux is an output of the solve.

Current public implementation notes:

  • the oceanic data path can inject a mean sea level or a mean time-series value into the active ocean boundary;

  • in MODFLOW 6, the current public path translates this to CHD on cells whose support is considered ocean-influenced;

  • in the current Boussinesq slice, coastal support is stage-dependent: cells or edges are selected where topography lies below the current sea threshold.

This means the public ocean path is currently:

  • stage-controlled,

  • geometry-aware,

  • but not yet a conductance-limited GHB-style coastal exchange law.

Drainage Semantics#

drainage is fundamentally different from stream and ocean.

It does not prescribe a water level. It prescribes an exchange capacity and lets outflow activate only when groundwater reaches the drainage condition.

Scientifically, drainage means:

  • one head-dependent release mechanism,

  • usually interpreted as seepage or drainage toward a surface interface or network,

  • distinct from diffuse recharge,

  • distinct from observed runoff,

  • distinct from the current Boussinesq saturation-excess closure.

Current public implementation notes:

  • in MODFLOW-family paths, drainage is assembled through DRN-style head-dependent outflow;

  • in the current Boussinesq slice, it is implemented as a top-drainage operator driven by conductance and activation above the top elevation.

For the broader navigation map across observed stream networks, seepage, and simulation-derived active networks, see Streams And Seepage.

What They Are Not#

stream is not currently:

  • a full river-routing model,

  • a full riverbed conductance model in the public MODFLOW 6 path,

  • a runoff observation.

ocean is not currently:

  • a tidal hydrodynamics model,

  • a full conductance-limited coastal interface in the public path,

  • a recharge term.

drainage is not currently:

  • direct runoff,

  • a climatic forcing,

  • identical to stream exchange,

  • identical to the saturation-excess operator in the Boussinesq backend.

Current Public Path Diagram#

@startuml
title Current Public Path For Stream, Ocean, And Drainage
left to right direction
skinparam componentStyle rectangle
skinparam wrapWidth 180
skinparam maxMessageSize 180

package "Loaded data and geometry" {
  component "hydrography" as Hydro
  component "oceanic data\n(mean sea level or time series)" as OceanData
  component "runtime mesh support\ncells / edges / labels" as Support
}

package "Flow contract" {
  component "flow.bc.stream\nDirichlet stage\noptional support_label" as BCStream
  component "flow.bc.ocean\nDirichlet stage" as BCOcean
  component "flow.bc.drainage\nCauchy / Robin conductance" as BCDrain
}

package "Current backend interpretations" {
  component "MODFLOW family\nstream -> CHD\nocean -> CHD\ndrainage -> DRN" as MF
  component "Boussinesq\nstream/ocean -> Dirichlet supports\ndrainage -> top outflow operator" as Bouss
}

Hydro --> Support : river-tagged supports
OceanData --> BCOcean : stage value
Support --> BCStream : selected support

BCStream --> MF
BCOcean --> MF
BCDrain --> MF

BCStream --> Bouss
BCOcean --> Bouss
BCDrain --> Bouss

note bottom
Current public semantics:
- stream and ocean prescribe stage/head
- drainage prescribes exchange capacity
- resulting fluxes are solver outputs
end note
@enduml

Backend Reading Guide#

Backend family

stream and ocean

drainage

MODFLOW-NWT / MODFLOW 6

Stage/head supports currently expressed through CHD-style assembly

Head-dependent outflow currently expressed through DRN

Boussinesq

Dirichlet supports on resolved cells or edges

Top outflow operator driven by conductance and head exceedance

Validation And Comparison Anchors#

Useful pages already exist to validate or inspect these semantics in context.

Current Source Anchors#