Skip to content

Commit

Permalink
Comments processed
Browse files Browse the repository at this point in the history
  • Loading branch information
SouthEndMusic committed Aug 11, 2023
1 parent 138086e commit 92985d7
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 175 deletions.
6 changes: 2 additions & 4 deletions python/ribasim/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@
basic_model,
basic_transient_model,
bucket_model,
conditions_on_discrete_flow_model,
crossing_specific_control_model,
flow_boundary_time_model,
flow_condition_model,
invalid_control_states_model,
invalid_fractional_flow_model,
invalid_qh_model,
level_setpoint_with_minmax_model,
linear_resistance_model,
manning_resistance_model,
misc_nodes_model,
Expand Down Expand Up @@ -70,7 +69,6 @@ def backwater() -> ribasim.Model:
invalid_qh_model().write(datadir / "invalid_qh")
invalid_fractional_flow_model().write(datadir / "invalid_fractional_flow")
flow_boundary_time_model().write(datadir / "flow_boundary_time")
crossing_specific_control_model().write(datadir / "crossing_specific_control")
conditions_on_discrete_flow_model().write(datadir / "conditions_on_discrete_flow")
level_setpoint_with_minmax_model().write(datadir / "level_setpoint_with_minmax")
pid_control_equation_model().write(datadir / "pid_control_equation")
invalid_control_states_model().write(datadir / "invalid_control_states")
6 changes: 2 additions & 4 deletions python/ribasim_testmodels/ribasim_testmodels/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
)
from ribasim_testmodels.bucket import bucket_model
from ribasim_testmodels.discrete_control import (
crossing_specific_control_model,
flow_condition_model,
level_setpoint_with_minmax_model,
pump_discrete_control_model,
tabulated_rating_curve_control_model,
)
Expand All @@ -27,7 +27,6 @@
)
from ribasim_testmodels.pid_control import pid_control_model
from ribasim_testmodels.time import (
conditions_on_discrete_flow_model,
flow_boundary_time_model,
)
from ribasim_testmodels.trivial import trivial_model
Expand All @@ -49,9 +48,8 @@
"tabulated_rating_curve_control_model",
"invalid_qh_model",
"flow_boundary_time_model",
"crossing_specific_control_model",
"conditions_on_discrete_flow_model",
"pid_control_equation_model",
"invalid_fractional_flow_model",
"invalid_control_states_model",
"level_setpoint_with_minmax_model",
]
18 changes: 5 additions & 13 deletions python/ribasim_testmodels/ribasim_testmodels/discrete_control.py
Original file line number Diff line number Diff line change
Expand Up @@ -412,10 +412,11 @@ def tabulated_rating_curve_control_model() -> ribasim.Model:
return model


def crossing_specific_control_model():
def level_setpoint_with_minmax_model():
"""
Set up a model with DiscreteControl with truth states that are
crossing-direction specific.
Set up a minimal model in which the level of a basin is kept within an acceptable range
around a setpoint while being affected by time-varying forcing.
This is done by bringing the level back to the setpoint once the level goes beyond this range.
"""

# Forcing
Expand Down Expand Up @@ -562,7 +563,7 @@ def crossing_specific_control_model():
discrete_control = ribasim.DiscreteControl(condition=condition, logic=logic)

model = ribasim.Model(
modelname="crossing_specific_control",
modelname="level_setpoint_with_minmax",
node=node,
edge=edge,
basin=basin,
Expand All @@ -575,12 +576,3 @@ def crossing_specific_control_model():
)

return model


if __name__ == "__main__":
import matplotlib.pyplot as plt

model = crossing_specific_control_model()
model.plot()

plt.show()
154 changes: 0 additions & 154 deletions python/ribasim_testmodels/ribasim_testmodels/time.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,157 +102,3 @@ def flow_boundary_time_model():
)

return model


def conditions_on_discrete_flow_model():
xy = np.array(
[
(1.0, 1.0), # 1: Basin
(2.0, 0.0), # 2: Basin
(2.0, 1.0), # 3: Pump
(0.0, 1.0), # 4: FlowBoundary
(2.0, 2.0), # 5: LevelBoundary
(1.0, 2.0), # 6: DiscreteControl
]
)

node_xy = gpd.points_from_xy(x=xy[:, 0], y=xy[:, 1])
node_type = [
"Basin",
"Basin",
"Pump",
"FlowBoundary",
"LevelBoundary",
"DiscreteControl",
]

# Make sure the feature id starts at 1: explicitly give an index.
node = ribasim.Node(
static=gpd.GeoDataFrame(
data={"type": node_type},
index=pd.Index(np.arange(len(xy)) + 1, name="fid"),
geometry=node_xy,
crs="EPSG:28992",
)
)

# Setup the edges:
from_id = np.array([4, 3, 5, 6], dtype=np.int64)
to_id = np.array([1, 2, 3, 3], dtype=np.int64)
lines = ribasim.utils.geometry_from_connectivity(node, from_id, to_id)
edge = ribasim.Edge(
static=gpd.GeoDataFrame(
data={
"from_node_id": from_id,
"to_node_id": to_id,
"edge_type": 3 * ["flow"] + ["control"],
},
geometry=lines,
crs="EPSG:28992",
)
)

# Setup the basins:
profile = pd.DataFrame(
data={
"node_id": [1, 1, 2, 2],
"area": [0.0, 1000.0] * 2,
"level": [0.0, 1.0] * 2,
}
)

static = pd.DataFrame(
data={
"node_id": [1, 2],
"drainage": 2 * [0.0],
"potential_evaporation": 2 * [0.0],
"infiltration": 2 * [0.0],
"precipitation": 2 * [0.0],
"urban_runoff": 2 * [0.0],
}
)

basin = ribasim.Basin(profile=profile, static=static)

# Setup pump:
pump = ribasim.Pump(
static=pd.DataFrame(
data={
"node_id": 6 * [3],
"control_state": [str(n) for n in np.arange(6) + 1],
"flow_rate": 6 * [1.0],
}
)
)

# Setup level boundary:
level_boundary = ribasim.LevelBoundary(
static=pd.DataFrame(
data={
"node_id": [5],
"level": [1.0],
}
)
)

# Setup flow boundary:
flow_rate = np.linspace(1.0, 5.0, 6)

flow_boundary = ribasim.FlowBoundary(
time=pd.DataFrame(
data={
"node_id": 6 * [4],
"time": pd.date_range(
start="2020-01-01 00:00:00",
end="2021-01-01 00:00:00",
periods=6,
).astype("datetime64[s]"),
"flow_rate": flow_rate,
}
)
)

# Setup the control:
greater_than = (flow_rate[1:] + flow_rate[:-1]) / 2

condition = pd.DataFrame(
data={
"node_id": 5 * [6],
"listen_feature_id": 5 * [1],
"variable": 5 * ["flow"],
"greater_than": greater_than,
}
)

logic = pd.DataFrame(
data={
"node_id": 6 * [6],
"truth_state": ["FFFFF", "TFFFF", "TTFFF", "TTTFF", "TTTTF", "TTTTT"],
"control_state": pump.static.control_state,
}
)

discrete_control = ribasim.DiscreteControl(condition=condition, logic=logic)

model = ribasim.Model(
modelname="conditions_on_discrete_flow",
node=node,
edge=edge,
basin=basin,
pump=pump,
level_boundary=level_boundary,
flow_boundary=flow_boundary,
discrete_control=discrete_control,
starttime="2020-01-01 00:00:00",
endtime="2021-01-01 00:00:00",
)

return model


if __name__ == "__main__":
import matplotlib.pyplot as plt

model = conditions_on_discrete_flow_model()
model.plot()
plt.show()

0 comments on commit 92985d7

Please sign in to comment.