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)
Please note that you are missing the optional dependency: fugue. If you need to use this functionality it must be installed.
Please note that you are missing the optional dependency: snowflake. If you need to use this functionality it must be installed.
Please note that you are missing the optional dependency: spark. If you need to use this functionality it must be installed.
Python 3.12 and above currently is not supported by Spark and Ray. Please note that some functionality will not work and currently is not supported.

1 allocation_control

Create a model that has a pump controlled by allocation.

2 allocation_example

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

3 allocation_off_flow_demand

Set up a model with a Pump with a FlowDemand but allocation turned off.

4 allocation_training

5 backwater

Backwater curve as an integration test for ManningResistance.

6 basic_arrow

7 basic_basin_both_area_and_storage

8 basic_basin_only_area

9 basic_basin_only_storage

10 basic

11 basic_transient

Update the basic model with transient forcing.

12 bommelerwaard

13 bucket

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

14 circular_flow

Create a model with a circular flow and a discrete control on a pump.

15 compound_variable_condition

Model with a condition on a compound variable for DiscreteControl.

16 concentration_condition

DiscreteControl based on a concentration condition.

17 connector_node_flow_condition

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

18 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

19 cyclic_demand

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

20 cyclic_time

21 discrete_control_of_pid_control

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

22 drain_surplus

Set up a model which activates an outlet to drain surplus water out of a Basin.

23 drought

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

24 fair_distribution

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

25 flow_boundary_interpolation

26 flow_boundary_time

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

27 flow_condition

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

28 flow_demand

Small model with a FlowDemand.

29 junction_chained

Testmodel with chained junctions.

30 junction_combined

Testmodel combining confluence and bifurcation junctions.

31 leaky_bucket

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

32 level_boundary_condition

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

33 level_demand

Small model with LevelDemand nodes.

34 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.

35 linear_resistance_demand

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

36 linear_resistance

Set up a minimal model which uses a linear_resistance node.

37 local_pidcontrolled_cascade

Demonstrating model for the cascade polder project from our partner.

38 looped_subnetwork

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

This model is merged into primary_and_secondary_subnetworks_model.

39 manning_resistance

Set up a minimal model which uses a manning_resistance node.

40 medium_primary_secondary_network

41 medium_primary_secondary_network_verification

42 minimal_subnetwork

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

43 misc_nodes

Set up a minimal model using flow_boundary and pump nodes.

44 multi_level_demand

Create a model that has a level demand with multiple priorities.

45 multi_priority_flow_demand

Set up a model which contains a FlowDemand node with multiple demand priorities.

46 multiple_source_priorities

Set up a model to test source prioritization.

47 outlet_continuous_control

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

48 outlet

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

49 pid_control_equation

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

50 pid_control

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

51 primary_and_secondary_subnetworks

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

52 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.

53 rating_curve_between_basins

Set up a minimal model which uses a tabulated_rating_curve node.

54 rating_curve

Set up a minimal model which uses a tabulated_rating_curve node.

55 secondary_networks_with_sources

Generate a model with subnetworks which contain sources.

56 small_primary_secondary_network

57 small_primary_secondary_network_verification

58 storage_condition

Create a model with a discrete control condition based on the storage of a Basin.

59 subnetwork

Create a UserDemand testmodel representing a subnetwork.

This model is merged into primary_and_secondary_subnetworks_model.

60 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.

61 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.

62 transient_condition

DiscreteControl based on transient condition.

63 transient_pump_outlet

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

64 trivial

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

65 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.

66 user_demand

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