Test models

Ribasim developers use the following models in their testbench and in order to test new features.

Code
import ribasim_testmodels
import matplotlib.pyplot as plt
from IPython.display import Markdown, display

for model_name, model_constructor in ribasim_testmodels.constructors.items():
    if model_name.startswith("invalid"):
        continue

    display(Markdown(f"\n# {model_name}\n"))
    if model_constructor.__doc__ is not None:
        display(Markdown(model_constructor.__doc__))

    model = model_constructor()
    fig, ax = plt.subplots(figsize=(6, 4))
    model.plot(ax)
    ax.axis("off")
    plt.show()
    plt.close(fig)

1 allocation_training

2 allocation_example

Generate a model that is used as an example of allocation in the docs.

3 backwater

Backwater curve as an integration test for ManningResistance.

4 basic_arrow

5 basic

6 basic_basin_only_area

7 basic_basin_only_storage

8 basic_basin_both_area_and_storage

9 basic_transient

Update the basic model with transient forcing.

10 bommelerwaard

11 bucket

Bucket model with just a single basin at Deltares’ headquarter.

12 compound_variable_condition

Model with a condition on a compound variable for DiscreteControl.

13 concentration_condition

DiscreteControl based on a concentration condition.

14 continuous_concentration_condition

DiscreteControl based on a continuous (calculated) concentration condition.

In this case, we setup a salt concentration and mimic the Dutch coast.

           dc
         /   |
lb --> lr -> basin <-- fb
             |
            out
             |
            term

15 connector_node_flow_condition

DiscreteControl with a condition on the flow through a connector node.

16 cyclic_demand

Create a model that has cyclic User- Flow- and LevelDemand.

17 cyclic_time

18 discrete_control_of_pid_control

Set up a basic model where a discrete control node sets the target level of a pid control node.

19 drought

Create a small subsection of the LHM Vechtstromen model containing a basin that runs dry (#2189).

20 fair_distribution

See the behavior of allocation with few restrictions within the graph.

21 flow_boundary_interpolation

22 flow_boundary_time

Set up a minimal model with time-varying flow boundary.

23 flow_condition

Set up a basic model that involves discrete control based on a flow condition.

24 flow_demand

Small model with a FlowDemand.

25 junction_combined

Testmodel combining confluence and bifurcation junctions.

26 junction_chained

Testmodel with chained junctions.

27 leaky_bucket

Bucket model with dynamic forcing with missings at Deltares’ headquarter.

28 level_boundary_condition

Set up a small model with a condition on a level boundary.

29 level_demand

Small model with LevelDemand nodes.

30 level_range

Keep the level of a Basin within a range around a setpoint, under the influence of time-varying forcing.

This is done by bringing the level back to the setpoint once the level goes beyond this range.

31 linear_resistance_demand

Small model with a FlowDemand for a node with a max flow rate.

32 linear_resistance

Set up a minimal model which uses a linear_resistance node.

33 local_pidcontrolled_cascade

Demonstrating model for the cascade polder project from our partner.

34 looped_subnetwork

Create a UserDemand testmodel representing a subnetwork containing a loop in the topology.

This model is merged into main_network_with_subnetworks_model.

35 main_network_with_subnetworks

Generate a model which consists of a main network and multiple connected subnetworks.

36 manning_resistance

Set up a minimal model which uses a manning_resistance node.

37 minimal_subnetwork

Create a subnetwork that is minimal with non-trivial allocation.

38 misc_nodes

Set up a minimal model using flow_boundary and pump nodes.

39 outlet_continuous_control

Set up a small model that distributes flow over 2 branches.

40 outlet

Set up a basic model with an outlet that encounters various physical constraints.

41 pid_control_equation

Set up a model with pid control for an analytical solution test.

42 pid_control

Set up a basic model with a PID controlled pump controlling a basin with abundant inflow.

43 pump_discrete_control

Set up a basic model with a Pump controlled based on Basin levels.

The LinearResistance is deactivated when the levels are almost equal.

44 rating_curve

Set up a minimal model which uses a tabulated_rating_curve node.

45 subnetwork

Create a UserDemand testmodel representing a subnetwork.

This model is merged into main_network_with_subnetworks_model.

46 subnetworks_with_sources

Generate a model with subnetworks which contain sources.

47 tabulated_rating_curve_control

Discrete control on a TabulatedRatingCurve.

The Basin drains over a TabulatedRatingCurve into a Terminal. The Control
node will effectively increase the crest level to prevent further drainage
at some threshold level.

48 tabulated_rating_curve

Set up a model where the upstream Basin has two TabulatedRatingCurve attached.

They both flow to the same downstream Basin, but one has a static rating curve,
and the other one a time-varying rating curve.
Only the upstream Basin receives a (constant) precipitation.

49 transient_condition

DiscreteControl based on transient condition.

50 transient_pump_outlet

Set up a model with time dependent pump and outlet flows.

51 trivial

Trivial model with just a basin, tabulated rating curve and terminal node.

52 two_basin

Create a model of two basins.

The basins are not connected; the model is mostly designed to test in
combination with a groundwater model.

The left basin receives water. In case of a coupled run, the water
infiltrates in the left basin, and exfiltrates in the right basin.
The right basin fills up and discharges over the rating curve.

53 user_demand

Create a UserDemand test model with static and dynamic UserDemand on the same basin.