floodmodeller-api 0.5.0.post1__py3-none-any.whl → 0.5.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. floodmodeller_api/__init__.py +1 -1
  2. floodmodeller_api/_base.py +26 -16
  3. floodmodeller_api/backup.py +3 -2
  4. floodmodeller_api/dat.py +29 -30
  5. floodmodeller_api/diff.py +3 -3
  6. floodmodeller_api/hydrology_plus/hydrology_plus_export.py +14 -13
  7. floodmodeller_api/ied.py +6 -6
  8. floodmodeller_api/ief.py +27 -25
  9. floodmodeller_api/inp.py +3 -4
  10. floodmodeller_api/logs/lf.py +9 -16
  11. floodmodeller_api/logs/lf_helpers.py +18 -18
  12. floodmodeller_api/mapping.py +2 -0
  13. floodmodeller_api/test/__init__.py +2 -2
  14. floodmodeller_api/test/conftest.py +2 -3
  15. floodmodeller_api/test/test_backup.py +2 -2
  16. floodmodeller_api/test/test_conveyance.py +4 -3
  17. floodmodeller_api/test/test_dat.py +2 -2
  18. floodmodeller_api/test/test_data/structure_logs/EX17_expected.csv +4 -0
  19. floodmodeller_api/test/test_data/structure_logs/EX17_expected.json +69 -0
  20. floodmodeller_api/test/test_data/structure_logs/EX18_expected.csv +20 -0
  21. floodmodeller_api/test/test_data/structure_logs/EX18_expected.json +292 -0
  22. floodmodeller_api/test/test_data/structure_logs/EX6_expected.csv +4 -0
  23. floodmodeller_api/test/test_data/structure_logs/EX6_expected.json +35 -0
  24. floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_flow.csv +182 -0
  25. floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_fr.csv +182 -0
  26. floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_mode.csv +182 -0
  27. floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_stage.csv +182 -0
  28. floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_state.csv +182 -0
  29. floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_velocity.csv +182 -0
  30. floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_left_fp_h.csv +182 -0
  31. floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_left_fp_mode.csv +182 -0
  32. floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_link_inflow.csv +182 -0
  33. floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_max.csv +87 -0
  34. floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_right_fp_h.csv +182 -0
  35. floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_right_fp_mode.csv +182 -0
  36. floodmodeller_api/test/test_flowtimeprofile.py +2 -2
  37. floodmodeller_api/test/test_hydrology_plus_export.py +4 -2
  38. floodmodeller_api/test/test_ied.py +2 -2
  39. floodmodeller_api/test/test_ief.py +2 -2
  40. floodmodeller_api/test/test_inp.py +2 -2
  41. floodmodeller_api/test/test_json.py +5 -10
  42. floodmodeller_api/test/test_logs_lf.py +6 -6
  43. floodmodeller_api/test/test_read_file.py +1 -0
  44. floodmodeller_api/test/test_river.py +11 -11
  45. floodmodeller_api/test/test_tool.py +8 -5
  46. floodmodeller_api/test/test_toolbox_structure_log.py +149 -158
  47. floodmodeller_api/test/test_xml2d.py +9 -11
  48. floodmodeller_api/test/test_zz.py +143 -0
  49. floodmodeller_api/to_from_json.py +8 -8
  50. floodmodeller_api/tool.py +12 -6
  51. floodmodeller_api/toolbox/example_tool.py +5 -1
  52. floodmodeller_api/toolbox/model_build/add_siltation_definition.py +12 -8
  53. floodmodeller_api/toolbox/model_build/structure_log/structure_log.py +498 -196
  54. floodmodeller_api/toolbox/model_build/structure_log_definition.py +5 -1
  55. floodmodeller_api/units/_base.py +14 -10
  56. floodmodeller_api/units/conveyance.py +1 -1
  57. floodmodeller_api/units/helpers.py +1 -3
  58. floodmodeller_api/units/losses.py +2 -3
  59. floodmodeller_api/units/sections.py +14 -10
  60. floodmodeller_api/units/structures.py +9 -9
  61. floodmodeller_api/units/units.py +2 -0
  62. floodmodeller_api/urban1d/_base.py +6 -9
  63. floodmodeller_api/urban1d/outfalls.py +2 -1
  64. floodmodeller_api/urban1d/raingauges.py +2 -1
  65. floodmodeller_api/urban1d/subsections.py +2 -0
  66. floodmodeller_api/urban1d/xsections.py +3 -2
  67. floodmodeller_api/util.py +16 -2
  68. floodmodeller_api/validation/validation.py +2 -1
  69. floodmodeller_api/version.py +1 -1
  70. floodmodeller_api/xml2d.py +18 -20
  71. floodmodeller_api/zz.py +538 -0
  72. {floodmodeller_api-0.5.0.post1.dist-info → floodmodeller_api-0.5.1.dist-info}/METADATA +20 -14
  73. {floodmodeller_api-0.5.0.post1.dist-info → floodmodeller_api-0.5.1.dist-info}/RECORD +78 -60
  74. {floodmodeller_api-0.5.0.post1.dist-info → floodmodeller_api-0.5.1.dist-info}/WHEEL +1 -1
  75. floodmodeller_api/test/test_zzn.py +0 -36
  76. floodmodeller_api/zzn.py +0 -414
  77. /floodmodeller_api/test/test_data/{network_from_tabularCSV.csv → tabular_csv_outputs/network_zzn_max.csv} +0 -0
  78. {floodmodeller_api-0.5.0.post1.dist-info → floodmodeller_api-0.5.1.dist-info}/LICENSE.txt +0 -0
  79. {floodmodeller_api-0.5.0.post1.dist-info → floodmodeller_api-0.5.1.dist-info}/entry_points.txt +0 -0
  80. {floodmodeller_api-0.5.0.post1.dist-info → floodmodeller_api-0.5.1.dist-info}/top_level.txt +0 -0
@@ -64,42 +64,40 @@ class AllData(Data):
64
64
  index_key: str | None = None,
65
65
  index_df: pd.Series | None = None,
66
66
  ) -> pd.DataFrame:
67
- df = pd.DataFrame(self._value)
67
+ value_df = pd.DataFrame(self._value)
68
68
 
69
69
  # do nothing to empty dataframes
70
- if df.empty:
71
- return df
70
+ if value_df.empty:
71
+ return value_df
72
72
 
73
73
  # overall header
74
74
  if self._subheaders is None:
75
- df.rename(columns={df.columns[0]: self.header}, inplace=True)
75
+ value_df = value_df.rename(columns={value_df.columns[0]: self.header})
76
76
 
77
77
  elif index_key is not None:
78
78
  # subheaders
79
- df = df.set_axis(self._subheaders, axis=1)
79
+ value_df = value_df.set_axis(self._subheaders, axis=1)
80
80
 
81
81
  # remove duplicate of index
82
82
  # sometimes it includes extra values
83
83
  # it also has different precision
84
84
  index_duplicate = index_key + "_duplicate"
85
- if index_duplicate in df.columns:
85
+ if index_duplicate in value_df.columns:
86
86
  try:
87
- index_df = df[index_duplicate].dt.round("1s")
88
- df.drop(index_duplicate, axis=1, inplace=True)
87
+ index_df = value_df[index_duplicate].dt.round("1s")
88
+ value_df = value_df.drop(index_duplicate, axis=1)
89
89
  except AttributeError:
90
- df = df.drop(columns=index_duplicate)
90
+ value_df = value_df.drop(columns=index_duplicate)
91
91
 
92
92
  # there is no index because *this* is the index
93
93
  if index_key is None:
94
- return df
94
+ return value_df
95
95
 
96
96
  # made lf index the dataframe index
97
- df[index_key] = index_df
98
- df.dropna(inplace=True)
99
- df.drop_duplicates(subset=index_key, keep="last", inplace=True)
100
- df.set_index(index_key, inplace=True)
101
-
102
- return df
97
+ value_df[index_key] = index_df
98
+ value_df = value_df.dropna()
99
+ value_df = value_df.drop_duplicates(subset=index_key, keep="last")
100
+ return value_df.set_index(index_key)
103
101
 
104
102
 
105
103
  def data_factory(data_type: str, header: str, subheaders: list | None = None):
@@ -107,7 +105,8 @@ def data_factory(data_type: str, header: str, subheaders: list | None = None):
107
105
  return LastData(header, subheaders)
108
106
  if data_type == "all":
109
107
  return AllData(header, subheaders)
110
- raise ValueError(f'Unexpected data "{data_type}"')
108
+ msg = f'Unexpected data "{data_type}"'
109
+ raise ValueError(msg)
111
110
 
112
111
 
113
112
  class State(ABC):
@@ -140,7 +139,8 @@ class SteadyState(State):
140
139
  pass
141
140
 
142
141
  def report_progress(self):
143
- raise NotImplementedError("No progress reporting for steady simulations")
142
+ msg = "No progress reporting for steady simulations"
143
+ raise NotImplementedError(msg)
144
144
 
145
145
 
146
146
  def state_factory(steady: bool, extracted_data: Data) -> State:
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  from typing import Any
2
4
 
3
5
  from . import DAT, IED, IEF, INP, LF1, LF2, XML2D, ZZN
@@ -1,4 +1,4 @@
1
- import os
2
1
  import sys
2
+ from pathlib import Path
3
3
 
4
- sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
4
+ sys.path.insert(0, str(Path(__file__).parent.parent))
@@ -1,4 +1,3 @@
1
- import os
2
1
  from pathlib import Path
3
2
  from unittest.mock import patch
4
3
 
@@ -6,8 +5,8 @@ import pytest
6
5
 
7
6
 
8
7
  @pytest.fixture(scope="session")
9
- def test_workspace():
10
- return Path(os.path.dirname(__file__), "test_data")
8
+ def test_workspace() -> Path:
9
+ return Path(__file__).parent / "test_data"
11
10
 
12
11
 
13
12
  @pytest.fixture()
@@ -6,13 +6,13 @@ import pytest
6
6
  from floodmodeller_api.backup import BackupControl, File
7
7
 
8
8
 
9
- @pytest.fixture
9
+ @pytest.fixture()
10
10
  def backup_control():
11
11
  # Use a different directory for testing
12
12
  return BackupControl()
13
13
 
14
14
 
15
- @pytest.fixture
15
+ @pytest.fixture()
16
16
  def file(test_workspace):
17
17
  test_file = Path(test_workspace, "EX1.DAT")
18
18
  file = File(test_file)
@@ -38,7 +38,8 @@ def test_insert_intermediate_wls():
38
38
  result = insert_intermediate_wls(arr, threshold)
39
39
 
40
40
  assert isinstance(result, np.ndarray), "Result should be a numpy array"
41
- assert result[0] == 1.0 and result[-1] == 3.0, "First and last elements should match the input"
41
+ assert result[0] == 1.0, "First element should match the input"
42
+ assert result[-1] == 3.0, "Last element should match the input"
42
43
  assert all(np.diff(result) <= threshold), "All gaps should be <= to the threshold"
43
44
 
44
45
 
@@ -52,7 +53,7 @@ def from_gui(test_workspace: Path):
52
53
  return pd.read_csv(test_workspace / "expected_conveyance.csv")
53
54
 
54
55
 
55
- @pytest.mark.parametrize("section", ("a", "a2", "b", "b2", "c", "d", "d2", "e", "e2", "e3"))
56
+ @pytest.mark.parametrize("section", ["a", "a2", "b", "b2", "c", "d", "d2", "e", "e2", "e3"])
56
57
  def test_results_close_to_gui(section: str, dat: DAT, from_gui: pd.DataFrame):
57
58
  threshold = 6
58
59
 
@@ -71,7 +72,7 @@ def test_results_close_to_gui(section: str, dat: DAT, from_gui: pd.DataFrame):
71
72
  assert hausdorff_distance < threshold
72
73
 
73
74
 
74
- @pytest.mark.parametrize("section", ("a", "a2", "b", "b2", "c", "d", "d2", "e", "e2", "e3"))
75
+ @pytest.mark.parametrize("section", ["a", "a2", "b", "b2", "c", "d", "d2", "e", "e2", "e3"])
75
76
  def test_results_match_gui_at_shared_points(section: str, dat: DAT, from_gui: pd.DataFrame):
76
77
  tolerance = 1e-2 # 0.001
77
78
  actual = dat.sections[section].conveyance
@@ -8,12 +8,12 @@ from floodmodeller_api.units import QTBDY
8
8
  from floodmodeller_api.util import FloodModellerAPIError
9
9
 
10
10
 
11
- @pytest.fixture
11
+ @pytest.fixture()
12
12
  def dat_fp(test_workspace):
13
13
  return Path(test_workspace, "network.dat")
14
14
 
15
15
 
16
- @pytest.fixture
16
+ @pytest.fixture()
17
17
  def data_before(dat_fp):
18
18
  return DAT(dat_fp)._write()
19
19
 
@@ -0,0 +1,4 @@
1
+ Unit Name,Unit Type,Unit Subtype,Comment,Friction,Dimensions (m),Weir Coefficient,Culvert Inlet/Outlet Loss
2
+ T2,CONDUIT,RECTANGULAR,,"Mannings: [min: 0.010, max: 0.020]",h: 1.50 x w: 2.50 x l: 30.00 (Total conduit length: 30.00),,Ki: 0.6
3
+ T2d,CONDUIT,RECTANGULAR,,"Mannings: [min: 0.010, max: 0.020]",h: 1.50 x w: 2.50 x l: 0.00,,Ko: 1.0
4
+ S4_W,WEIR,,,,Crest Elevation: 49.45 x w: 4.00,,
@@ -0,0 +1,69 @@
1
+ {
2
+ "(T2,CONDUIT)": {
3
+ "name": "T2",
4
+ "type": "CONDUIT",
5
+ "subtype": "RECTANGULAR",
6
+ "comment": "",
7
+ "conduit_data": {
8
+ "length": 30.0,
9
+ "inlet": 0.6,
10
+ "total_length": 30.0
11
+ },
12
+ "dimensions": {
13
+ "invert": 47.5,
14
+ "height": 1.5,
15
+ "width": 2.5
16
+ },
17
+ "friction": {
18
+ "friction_eq": "MANNING",
19
+ "friction_set": [
20
+ 0.01,
21
+ 0.015,
22
+ 0.02
23
+ ],
24
+ "all_friction": [
25
+ 0.01,
26
+ 0.02,
27
+ 0.015
28
+ ]
29
+ }
30
+ },
31
+ "(T2d,CONDUIT)": {
32
+ "name": "T2d",
33
+ "type": "CONDUIT",
34
+ "subtype": "RECTANGULAR",
35
+ "comment": "",
36
+ "conduit_data": {
37
+ "length": 0.0,
38
+ "outlet": 1.0
39
+ },
40
+ "dimensions": {
41
+ "invert": 47.47,
42
+ "height": 1.5,
43
+ "width": 2.5
44
+ },
45
+ "friction": {
46
+ "friction_eq": "MANNING",
47
+ "friction_set": [
48
+ 0.01,
49
+ 0.015,
50
+ 0.02
51
+ ],
52
+ "all_friction": [
53
+ 0.01,
54
+ 0.02,
55
+ 0.015
56
+ ]
57
+ }
58
+ },
59
+ "(S4_W,WEIR)": {
60
+ "name": "S4_W",
61
+ "type": "WEIR",
62
+ "subtype": null,
63
+ "comment": "",
64
+ "dimensions": {
65
+ "weir_elevation": 49.45,
66
+ "weir_breadth": 4.0
67
+ }
68
+ }
69
+ }
@@ -0,0 +1,20 @@
1
+ Unit Name,Unit Type,Unit Subtype,Comment,Friction,Dimensions (m),Weir Coefficient,Culvert Inlet/Outlet Loss
2
+ C2,CONDUIT,CIRCULAR,,"Mannings: [min: 0.015, max: 0.020]",dia: 1.00 x l: 100.00 (Total conduit length: 500.00),,Ki: 0.6
3
+ C2_R1,REPLICATE,,,,,,
4
+ C2_R2,REPLICATE,,,,,,
5
+ C2_R3,REPLICATE,,,,,,
6
+ C2_R4,REPLICATE,,,,,,
7
+ C2m,CONDUIT,CIRCULAR,,"Mannings: [min: 0.015, max: 0.020]",dia: 1.00 x l: 0.00,,
8
+ C2md,CONDUIT,CIRCULAR,,"Mannings: [min: 0.015, max: 0.020]",dia: 1.00 x l: 100.00 (Total conduit length: 700.00),,
9
+ C2_R5,REPLICATE,,,,,,
10
+ C2_R6,REPLICATE,,,,,,
11
+ C2_R7,REPLICATE,,,,,,
12
+ C2_R8,REPLICATE,,,,,,
13
+ C2_R9,REPLICATE,,,,,,
14
+ C2_R10,REPLICATE,,,,,,
15
+ C2d,CONDUIT,CIRCULAR,,"Mannings: [min: 0.015, max: 0.020]",dia: 1.00 x l: 0.00,,
16
+ S0,WEIR,,,,Crest Elevation: 21.00 x w: 1.50,,
17
+ C2d,WEIR,,,,Crest Elevation: 18.00 x w: 0.60,,
18
+ S4,WEIR,,,,Crest Elevation: 17.90 x w: 2.00,,
19
+ S8,WEIR,,,,Crest Elevation: 17.70 x w: 2.00,,
20
+ S3LS,SPILL,,,,Elevation: 20.00 x w: 100.00,1.7,
@@ -0,0 +1,292 @@
1
+ {
2
+ "(C2,CONDUIT)": {
3
+ "name": "C2",
4
+ "type": "CONDUIT",
5
+ "subtype": "CIRCULAR",
6
+ "comment": "",
7
+ "conduit_data": {
8
+ "length": 100.0,
9
+ "inlet": 0.6,
10
+ "total_length": 500.0
11
+ },
12
+ "dimensions": {
13
+ "invert": 20.0,
14
+ "diameter": 1.0
15
+ },
16
+ "friction": {
17
+ "friction_eq": "MANNING",
18
+ "friction_set": [
19
+ 0.015,
20
+ 0.02
21
+ ],
22
+ "all_friction": [
23
+ 0.015,
24
+ 0.02
25
+ ]
26
+ }
27
+ },
28
+ "(C2_R1,REPLICATE)": {
29
+ "name": "C2_R1",
30
+ "type": "REPLICATE",
31
+ "subtype": null,
32
+ "comment": "",
33
+ "conduit_data": {
34
+ "length": 100.0
35
+ },
36
+ "dimensions": {
37
+ "bed_level_drop": 0.2,
38
+ "mimic": "C2m"
39
+ }
40
+ },
41
+ "(C2_R2,REPLICATE)": {
42
+ "name": "C2_R2",
43
+ "type": "REPLICATE",
44
+ "subtype": null,
45
+ "comment": "",
46
+ "conduit_data": {
47
+ "length": 100.0
48
+ },
49
+ "dimensions": {
50
+ "bed_level_drop": 0.2,
51
+ "mimic": "C2m"
52
+ }
53
+ },
54
+ "(C2_R3,REPLICATE)": {
55
+ "name": "C2_R3",
56
+ "type": "REPLICATE",
57
+ "subtype": null,
58
+ "comment": "",
59
+ "conduit_data": {
60
+ "length": 100.0
61
+ },
62
+ "dimensions": {
63
+ "bed_level_drop": 0.2,
64
+ "mimic": "C2m"
65
+ }
66
+ },
67
+ "(C2_R4,REPLICATE)": {
68
+ "name": "C2_R4",
69
+ "type": "REPLICATE",
70
+ "subtype": null,
71
+ "comment": "",
72
+ "conduit_data": {
73
+ "length": 100.0
74
+ },
75
+ "dimensions": {
76
+ "bed_level_drop": 0.2,
77
+ "mimic": "C2m"
78
+ }
79
+ },
80
+ "(C2m,CONDUIT)": {
81
+ "name": "C2m",
82
+ "type": "CONDUIT",
83
+ "subtype": "CIRCULAR",
84
+ "comment": "",
85
+ "conduit_data": {
86
+ "length": 0.0
87
+ },
88
+ "dimensions": {
89
+ "invert": 19.2,
90
+ "diameter": 1.0
91
+ },
92
+ "friction": {
93
+ "friction_eq": "MANNING",
94
+ "friction_set": [
95
+ 0.015,
96
+ 0.02
97
+ ],
98
+ "all_friction": [
99
+ 0.015,
100
+ 0.02
101
+ ]
102
+ }
103
+ },
104
+ "(C2md,CONDUIT)": {
105
+ "name": "C2md",
106
+ "type": "CONDUIT",
107
+ "subtype": "CIRCULAR",
108
+ "comment": "",
109
+ "conduit_data": {
110
+ "length": 100.0,
111
+ "total_length": 700.0
112
+ },
113
+ "dimensions": {
114
+ "invert": 19.2,
115
+ "diameter": 1.0
116
+ },
117
+ "friction": {
118
+ "friction_eq": "MANNING",
119
+ "friction_set": [
120
+ 0.015,
121
+ 0.02
122
+ ],
123
+ "all_friction": [
124
+ 0.015,
125
+ 0.02
126
+ ]
127
+ }
128
+ },
129
+ "(C2_R5,REPLICATE)": {
130
+ "name": "C2_R5",
131
+ "type": "REPLICATE",
132
+ "subtype": null,
133
+ "comment": "",
134
+ "conduit_data": {
135
+ "length": 100.0
136
+ },
137
+ "dimensions": {
138
+ "bed_level_drop": 0.2,
139
+ "mimic": "C2d"
140
+ }
141
+ },
142
+ "(C2_R6,REPLICATE)": {
143
+ "name": "C2_R6",
144
+ "type": "REPLICATE",
145
+ "subtype": null,
146
+ "comment": "",
147
+ "conduit_data": {
148
+ "length": 100.0
149
+ },
150
+ "dimensions": {
151
+ "bed_level_drop": 0.2,
152
+ "mimic": "C2d"
153
+ }
154
+ },
155
+ "(C2_R7,REPLICATE)": {
156
+ "name": "C2_R7",
157
+ "type": "REPLICATE",
158
+ "subtype": null,
159
+ "comment": "",
160
+ "conduit_data": {
161
+ "length": 100.0
162
+ },
163
+ "dimensions": {
164
+ "bed_level_drop": 0.2,
165
+ "mimic": "C2d"
166
+ }
167
+ },
168
+ "(C2_R8,REPLICATE)": {
169
+ "name": "C2_R8",
170
+ "type": "REPLICATE",
171
+ "subtype": null,
172
+ "comment": "",
173
+ "conduit_data": {
174
+ "length": 100.0
175
+ },
176
+ "dimensions": {
177
+ "bed_level_drop": 0.2,
178
+ "mimic": "C2d"
179
+ }
180
+ },
181
+ "(C2_R9,REPLICATE)": {
182
+ "name": "C2_R9",
183
+ "type": "REPLICATE",
184
+ "subtype": null,
185
+ "comment": "",
186
+ "conduit_data": {
187
+ "length": 100.0
188
+ },
189
+ "dimensions": {
190
+ "bed_level_drop": 0.2,
191
+ "mimic": "C2d"
192
+ }
193
+ },
194
+ "(C2_R10,REPLICATE)": {
195
+ "name": "C2_R10",
196
+ "type": "REPLICATE",
197
+ "subtype": null,
198
+ "comment": "",
199
+ "conduit_data": {
200
+ "length": 100.0
201
+ },
202
+ "dimensions": {
203
+ "bed_level_drop": 0.2,
204
+ "mimic": "C2d"
205
+ }
206
+ },
207
+ "(C2d,CONDUIT)": {
208
+ "name": "C2d",
209
+ "type": "CONDUIT",
210
+ "subtype": "CIRCULAR",
211
+ "comment": "",
212
+ "conduit_data": {
213
+ "length": 0.0
214
+ },
215
+ "dimensions": {
216
+ "invert": 18.0,
217
+ "diameter": 1.0
218
+ },
219
+ "friction": {
220
+ "friction_eq": "MANNING",
221
+ "friction_set": [
222
+ 0.015,
223
+ 0.02
224
+ ],
225
+ "all_friction": [
226
+ 0.015,
227
+ 0.02
228
+ ]
229
+ }
230
+ },
231
+ "(S0,WEIR)": {
232
+ "name": "S0",
233
+ "type": "WEIR",
234
+ "subtype": null,
235
+ "comment": "",
236
+ "dimensions": {
237
+ "weir_elevation": 21.0,
238
+ "weir_breadth": 1.5
239
+ }
240
+ },
241
+ "(C2d,WEIR)": {
242
+ "name": "C2d",
243
+ "type": "WEIR",
244
+ "subtype": null,
245
+ "comment": "",
246
+ "dimensions": {
247
+ "weir_elevation": 18.0,
248
+ "weir_breadth": 0.6
249
+ }
250
+ },
251
+ "(S4,WEIR)": {
252
+ "name": "S4",
253
+ "type": "WEIR",
254
+ "subtype": null,
255
+ "comment": "",
256
+ "dimensions": {
257
+ "weir_elevation": 17.9,
258
+ "weir_breadth": 2.0
259
+ }
260
+ },
261
+ "(S8,WEIR)": {
262
+ "name": "S8",
263
+ "type": "WEIR",
264
+ "subtype": null,
265
+ "comment": "",
266
+ "dimensions": {
267
+ "weir_elevation": 17.7,
268
+ "weir_breadth": 2.0
269
+ }
270
+ },
271
+ "(S3LS,SPILL)": {
272
+ "name": "S3LS",
273
+ "type": "SPILL",
274
+ "subtype": null,
275
+ "comment": "",
276
+ "dimensions": {
277
+ "invert": 20.0,
278
+ "width": 100.0,
279
+ "weir_coefficient": 1.7,
280
+ "section_data": {
281
+ "x": [
282
+ 0.0,
283
+ 100.0
284
+ ],
285
+ "y": [
286
+ 20.0,
287
+ 20.0
288
+ ]
289
+ }
290
+ }
291
+ }
292
+ }
@@ -0,0 +1,4 @@
1
+ Unit Name,Unit Type,Unit Subtype,Comment,Friction,Dimensions (m),Weir Coefficient,Culvert Inlet/Outlet Loss
2
+ P0000a,SLUICE,VERTICAL,,,Crest Elevation: 73.20 x w: 20.00 x l: 1.00,,
3
+ P11951U,SLUICE,VERTICAL,,,Crest Elevation: 73.00 x w: 3.36 x l: 1.00,,
4
+ P44865U,SLUICE,VERTICAL,,,Crest Elevation: 70.81 x w: 3.36 x l: 3.00,,
@@ -0,0 +1,35 @@
1
+ {
2
+ "(P0000a,SLUICE)": {
3
+ "name": "P0000a",
4
+ "type": "SLUICE",
5
+ "subtype": "VERTICAL",
6
+ "comment": "",
7
+ "dimensions": {
8
+ "weir_length": 1.0,
9
+ "crest_elevation": 73.2,
10
+ "weir_breadth": 20.0
11
+ }
12
+ },
13
+ "(P11951U,SLUICE)": {
14
+ "name": "P11951U",
15
+ "type": "SLUICE",
16
+ "subtype": "VERTICAL",
17
+ "comment": "",
18
+ "dimensions": {
19
+ "weir_length": 1.0,
20
+ "crest_elevation": 73.0,
21
+ "weir_breadth": 3.36
22
+ }
23
+ },
24
+ "(P44865U,SLUICE)": {
25
+ "name": "P44865U",
26
+ "type": "SLUICE",
27
+ "subtype": "VERTICAL",
28
+ "comment": "",
29
+ "dimensions": {
30
+ "weir_length": 3.0,
31
+ "crest_elevation": 70.81,
32
+ "weir_breadth": 3.36
33
+ }
34
+ }
35
+ }