Skip to content

Support kinematic wave floodplain routing#870

Open
vers-w wants to merge 110 commits into
masterfrom
feat/kinwave_floodplain
Open

Support kinematic wave floodplain routing#870
vers-w wants to merge 110 commits into
masterfrom
feat/kinwave_floodplain

Conversation

@vers-w

@vers-w vers-w commented Mar 18, 2026

Copy link
Copy Markdown
Collaborator

Issue addressed

Fixes #235

Explanation

This PR is about:

  • Support of 1D floodplain schematization for kinematic wave routing, making use of the same 1D floodplain schematization that is already in place for local inertial river flow routing. Routing is done separately for the river channel and floodplain. Floodplain water is routed down slope using the accucapacityflux function with a transport capacity based on Manning's equation.
  • Added for river and floodplain flow on a staggered grid the option to use the Manning's equation, in addition to the local inertial equation, for applications where water flow is mostly controlled by the topography.

Besides these implementations river and overland flow routing (except local inertial overland flow) has been refactored, the type of routing (routing_method) is now used to distinguish between different routing types for RiverFlowModel and OverlandFlowModel.

Checklist

  • Updated tests or added new tests
  • Branch is up to date with master
  • Tests & pre-commit hooks pass
  • Updated documentation if needed
  • Updated changelog.qmd if needed

vers-w added 30 commits March 11, 2026 09:15
Initialized as `nothing`.
Introduce one struct for riverflow routing `RiverFlowModel` and one struct for overlandflow routing `OverlandFlowModel`. The routing method (subtype of `AbstractRoutingMethod`) is used to differentiate between different routing approaches for river and overland flow. Extending to other routing methods is now easier.
Remove `AbstractRoutingMethod` from these abstract types and add the routing method as first field to `RiverFlowModel` and `OverlandFlowModel`. This simplifies dispatching a bit and looks a bit cleaner.
Also add `slope` parameter that can be used by kinematic wave routing (as alternative to local inertial routing) using a staggered scheme.
Use a separate function for reading river parameters that can also be used by kinematic wave routing with a staggered scheme.
Using the term kinematic wave is not entirely correct as the Manning's equation is used as an alternative for the local inertial approach on a staggered grid.
For manning flow on a staggered grid.
To run manning river and floodplain flow on a staggered grid.
Edge/node variables and parameters.
Remove update of `alpha` at each model timestep as dynamic input of manning roughness is not allowed.
@vers-w
vers-w requested a review from JoostBuitink June 12, 2026 16:44
vers-w added 2 commits June 16, 2026 17:06
Removed flow area and hydraulic radius fields of local inertial structs as these are used only internally (per function) and are not part of model output. Added check for hydraulic radius floodplain.
Already part of release/v1.0 branch: this check was based on `water_depth_at_edge` of river nodes and should be based on `water_depth_at_edge` of floodplain nodes. However, testing showed there is no performance benefit from this check and looping over active floodplain indices.

@JoostBuitink JoostBuitink left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this work! I will still do a run with a different model to check the effects, will update the review in the PR once I have done that (hopefully this week!) Other than that, I only have a couple of small comments, see below

Comment thread Wflow/src/routing/surface/floodplain.jl Outdated
Comment thread Wflow/src/routing/surface/surface_kinwave.jl
Comment thread docs/model_docs/routing/staggered-grid.qmd
Comment thread Wflow/src/routing/surface/surface_staggered_scheme.jl
@JoostBuitink

Copy link
Copy Markdown
Contributor

When running a simulation for the Meuse, I noticed two things:

  • it looks like the states are not picked up correctly (e.g. the floodplain_water__instantaneous_volume_flow_rate and floodplain_water__depth when running the local_inertial river routing + 1d floodplains
  • I noticed numerical instability when using the manning_staggered routing option (see also the model with output in the postbox)

vers-w added 5 commits July 2, 2026 15:40
By using the "upwind"option (instead of "max" as used for local inertial routing) for water level and depth estimation at edge.
For zero flows the maximum waterlevel between two adjacent cells was computed. For slope based mannings flow (one direction) this is not required.
@vers-w

vers-w commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author
* I noticed numerical instability when using the `manning_staggered` routing option (see also the model with output in the postbox)

Thanks for testing this functionality thoroughly! Changing the estimation of water level and depth at the edge in commit 5faf1fd resolves this.

vers-w added 4 commits July 6, 2026 10:59
Fix floodplain states check.
The floodplain water depth was incorrect as it was based on the floodplain storage excluding river channel storage using the floodplain profile, while river channel storage should be included. This is now resolved by using the floodplain storage as state instead of the water depth. Additonally, for floodplain routing a check if the downstream floodplain is active (based on flow area) has been added.
@vers-w

vers-w commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator Author
* it looks like the states are not picked up correctly (e.g. the `floodplain_water__instantaneous_volume_flow_rate` and `floodplain_water__depth` when running the local_inertial river routing + 1d floodplains

This has been fixed in commit 20ce151. There was also a state issue for the kinematic wave floodplain routing, this has been fixed in commit 7fe5253.

@vers-w
vers-w requested a review from JoostBuitink July 8, 2026 11:31
@deltamarnix deltamarnix added this to the v1.1.0 milestone Jul 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add 1D floodplain schematization to kinematic wave routing

4 participants