HydPy 6.2.dev1__cp313-cp313-win_amd64.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 (890) hide show
  1. hydpy/__init__.py +275 -0
  2. hydpy/aliases.py +2554 -0
  3. hydpy/auxs/__init__.py +0 -0
  4. hydpy/auxs/anntools.py +1305 -0
  5. hydpy/auxs/armatools.py +883 -0
  6. hydpy/auxs/calibtools.py +3337 -0
  7. hydpy/auxs/interptools.py +1094 -0
  8. hydpy/auxs/iuhtools.py +543 -0
  9. hydpy/auxs/networktools.py +597 -0
  10. hydpy/auxs/ppolytools.py +809 -0
  11. hydpy/auxs/quadtools.py +61 -0
  12. hydpy/auxs/roottools.py +228 -0
  13. hydpy/auxs/smoothtools.py +273 -0
  14. hydpy/auxs/statstools.py +2125 -0
  15. hydpy/auxs/validtools.py +81 -0
  16. hydpy/conf/HydPyConfigBase.xsd +68637 -0
  17. hydpy/conf/HydPyConfigBase.xsdt +358 -0
  18. hydpy/conf/HydPyConfigMultipleRuns.xsd +25 -0
  19. hydpy/conf/HydPyConfigSingleRun.xsd +24 -0
  20. hydpy/conf/__init__.py +0 -0
  21. hydpy/conf/a_coefficients_explicit_lobatto_sequence.npy +0 -0
  22. hydpy/conf/support_points_for_smoothpar_logistic2.npy +0 -0
  23. hydpy/config.py +42 -0
  24. hydpy/core/__init__.py +0 -0
  25. hydpy/core/aliastools.py +214 -0
  26. hydpy/core/autodoctools.py +1947 -0
  27. hydpy/core/auxfiletools.py +1169 -0
  28. hydpy/core/devicetools.py +3810 -0
  29. hydpy/core/exceptiontools.py +269 -0
  30. hydpy/core/filetools.py +1985 -0
  31. hydpy/core/hydpytools.py +3089 -0
  32. hydpy/core/importtools.py +1398 -0
  33. hydpy/core/indextools.py +345 -0
  34. hydpy/core/itemtools.py +1849 -0
  35. hydpy/core/masktools.py +460 -0
  36. hydpy/core/modeltools.py +4868 -0
  37. hydpy/core/netcdftools.py +2683 -0
  38. hydpy/core/objecttools.py +2023 -0
  39. hydpy/core/optiontools.py +1045 -0
  40. hydpy/core/parametertools.py +4674 -0
  41. hydpy/core/printtools.py +222 -0
  42. hydpy/core/propertytools.py +643 -0
  43. hydpy/core/pubtools.py +254 -0
  44. hydpy/core/selectiontools.py +1571 -0
  45. hydpy/core/sequencetools.py +4476 -0
  46. hydpy/core/seriestools.py +339 -0
  47. hydpy/core/testtools.py +2483 -0
  48. hydpy/core/timetools.py +3567 -0
  49. hydpy/core/typingtools.py +333 -0
  50. hydpy/core/variabletools.py +2615 -0
  51. hydpy/cythons/__init__.py +24 -0
  52. hydpy/cythons/annutils.pxd +33 -0
  53. hydpy/cythons/annutils.pyi +25 -0
  54. hydpy/cythons/annutils.pyx +120 -0
  55. hydpy/cythons/autogen/__init__.py +0 -0
  56. hydpy/cythons/autogen/annutils.cp313-win_amd64.pyd +0 -0
  57. hydpy/cythons/autogen/annutils.pxd +42 -0
  58. hydpy/cythons/autogen/annutils.pyx +129 -0
  59. hydpy/cythons/autogen/c_arma.cp313-win_amd64.pyd +0 -0
  60. hydpy/cythons/autogen/c_arma.pxd +179 -0
  61. hydpy/cythons/autogen/c_arma.pyx +356 -0
  62. hydpy/cythons/autogen/c_arma_rimorido.cp313-win_amd64.pyd +0 -0
  63. hydpy/cythons/autogen/c_arma_rimorido.pxd +179 -0
  64. hydpy/cythons/autogen/c_arma_rimorido.pyx +356 -0
  65. hydpy/cythons/autogen/c_conv.cp313-win_amd64.pyd +0 -0
  66. hydpy/cythons/autogen/c_conv.pxd +198 -0
  67. hydpy/cythons/autogen/c_conv.pyx +491 -0
  68. hydpy/cythons/autogen/c_conv_idw.cp313-win_amd64.pyd +0 -0
  69. hydpy/cythons/autogen/c_conv_idw.pxd +124 -0
  70. hydpy/cythons/autogen/c_conv_idw.pyx +264 -0
  71. hydpy/cythons/autogen/c_conv_idw_ed.cp313-win_amd64.pyd +0 -0
  72. hydpy/cythons/autogen/c_conv_idw_ed.pxd +197 -0
  73. hydpy/cythons/autogen/c_conv_idw_ed.pyx +481 -0
  74. hydpy/cythons/autogen/c_conv_nn.cp313-win_amd64.pyd +0 -0
  75. hydpy/cythons/autogen/c_conv_nn.pxd +120 -0
  76. hydpy/cythons/autogen/c_conv_nn.pyx +224 -0
  77. hydpy/cythons/autogen/c_dam.cp313-win_amd64.pyd +0 -0
  78. hydpy/cythons/autogen/c_dam.pxd +805 -0
  79. hydpy/cythons/autogen/c_dam.pyx +1477 -0
  80. hydpy/cythons/autogen/c_dam_llake.cp313-win_amd64.pyd +0 -0
  81. hydpy/cythons/autogen/c_dam_llake.pxd +364 -0
  82. hydpy/cythons/autogen/c_dam_llake.pyx +705 -0
  83. hydpy/cythons/autogen/c_dam_lreservoir.cp313-win_amd64.pyd +0 -0
  84. hydpy/cythons/autogen/c_dam_lreservoir.pxd +365 -0
  85. hydpy/cythons/autogen/c_dam_lreservoir.pyx +708 -0
  86. hydpy/cythons/autogen/c_dam_lretention.cp313-win_amd64.pyd +0 -0
  87. hydpy/cythons/autogen/c_dam_lretention.pxd +340 -0
  88. hydpy/cythons/autogen/c_dam_lretention.pyx +625 -0
  89. hydpy/cythons/autogen/c_dam_pump.cp313-win_amd64.pyd +0 -0
  90. hydpy/cythons/autogen/c_dam_pump.pxd +402 -0
  91. hydpy/cythons/autogen/c_dam_pump.pyx +724 -0
  92. hydpy/cythons/autogen/c_dam_pump_sluice.cp313-win_amd64.pyd +0 -0
  93. hydpy/cythons/autogen/c_dam_pump_sluice.pxd +452 -0
  94. hydpy/cythons/autogen/c_dam_pump_sluice.pyx +829 -0
  95. hydpy/cythons/autogen/c_dam_sluice.cp313-win_amd64.pyd +0 -0
  96. hydpy/cythons/autogen/c_dam_sluice.pxd +404 -0
  97. hydpy/cythons/autogen/c_dam_sluice.pyx +726 -0
  98. hydpy/cythons/autogen/c_dam_v001.cp313-win_amd64.pyd +0 -0
  99. hydpy/cythons/autogen/c_dam_v001.pxd +452 -0
  100. hydpy/cythons/autogen/c_dam_v001.pyx +816 -0
  101. hydpy/cythons/autogen/c_dam_v002.cp313-win_amd64.pyd +0 -0
  102. hydpy/cythons/autogen/c_dam_v002.pxd +394 -0
  103. hydpy/cythons/autogen/c_dam_v002.pyx +703 -0
  104. hydpy/cythons/autogen/c_dam_v003.cp313-win_amd64.pyd +0 -0
  105. hydpy/cythons/autogen/c_dam_v003.pxd +417 -0
  106. hydpy/cythons/autogen/c_dam_v003.pyx +744 -0
  107. hydpy/cythons/autogen/c_dam_v004.cp313-win_amd64.pyd +0 -0
  108. hydpy/cythons/autogen/c_dam_v004.pxd +486 -0
  109. hydpy/cythons/autogen/c_dam_v004.pyx +891 -0
  110. hydpy/cythons/autogen/c_dam_v005.cp313-win_amd64.pyd +0 -0
  111. hydpy/cythons/autogen/c_dam_v005.pxd +524 -0
  112. hydpy/cythons/autogen/c_dam_v005.pyx +928 -0
  113. hydpy/cythons/autogen/c_dummy.cp313-win_amd64.pyd +0 -0
  114. hydpy/cythons/autogen/c_dummy.pxd +151 -0
  115. hydpy/cythons/autogen/c_dummy.pyx +263 -0
  116. hydpy/cythons/autogen/c_dummy_interceptedwater.cp313-win_amd64.pyd +0 -0
  117. hydpy/cythons/autogen/c_dummy_interceptedwater.pxd +69 -0
  118. hydpy/cythons/autogen/c_dummy_interceptedwater.pyx +104 -0
  119. hydpy/cythons/autogen/c_dummy_node2node.cp313-win_amd64.pyd +0 -0
  120. hydpy/cythons/autogen/c_dummy_node2node.pxd +89 -0
  121. hydpy/cythons/autogen/c_dummy_node2node.pyx +148 -0
  122. hydpy/cythons/autogen/c_dummy_snowalbedo.cp313-win_amd64.pyd +0 -0
  123. hydpy/cythons/autogen/c_dummy_snowalbedo.pxd +69 -0
  124. hydpy/cythons/autogen/c_dummy_snowalbedo.pyx +104 -0
  125. hydpy/cythons/autogen/c_dummy_snowcover.cp313-win_amd64.pyd +0 -0
  126. hydpy/cythons/autogen/c_dummy_snowcover.pxd +69 -0
  127. hydpy/cythons/autogen/c_dummy_snowcover.pyx +104 -0
  128. hydpy/cythons/autogen/c_dummy_snowycanopy.cp313-win_amd64.pyd +0 -0
  129. hydpy/cythons/autogen/c_dummy_snowycanopy.pxd +69 -0
  130. hydpy/cythons/autogen/c_dummy_snowycanopy.pyx +104 -0
  131. hydpy/cythons/autogen/c_dummy_soilwater.cp313-win_amd64.pyd +0 -0
  132. hydpy/cythons/autogen/c_dummy_soilwater.pxd +69 -0
  133. hydpy/cythons/autogen/c_dummy_soilwater.pyx +104 -0
  134. hydpy/cythons/autogen/c_evap.cp313-win_amd64.pyd +0 -0
  135. hydpy/cythons/autogen/c_evap.pxd +1029 -0
  136. hydpy/cythons/autogen/c_evap.pyx +2601 -0
  137. hydpy/cythons/autogen/c_evap_aet_hbv96.cp313-win_amd64.pyd +0 -0
  138. hydpy/cythons/autogen/c_evap_aet_hbv96.pxd +227 -0
  139. hydpy/cythons/autogen/c_evap_aet_hbv96.pyx +584 -0
  140. hydpy/cythons/autogen/c_evap_aet_minhas.cp313-win_amd64.pyd +0 -0
  141. hydpy/cythons/autogen/c_evap_aet_minhas.pxd +193 -0
  142. hydpy/cythons/autogen/c_evap_aet_minhas.pyx +478 -0
  143. hydpy/cythons/autogen/c_evap_aet_morsim.cp313-win_amd64.pyd +0 -0
  144. hydpy/cythons/autogen/c_evap_aet_morsim.pxd +681 -0
  145. hydpy/cythons/autogen/c_evap_aet_morsim.pyx +1642 -0
  146. hydpy/cythons/autogen/c_evap_pet_ambav1.cp313-win_amd64.pyd +0 -0
  147. hydpy/cythons/autogen/c_evap_pet_ambav1.pxd +532 -0
  148. hydpy/cythons/autogen/c_evap_pet_ambav1.pyx +1296 -0
  149. hydpy/cythons/autogen/c_evap_pet_hbv96.cp313-win_amd64.pyd +0 -0
  150. hydpy/cythons/autogen/c_evap_pet_hbv96.pxd +179 -0
  151. hydpy/cythons/autogen/c_evap_pet_hbv96.pyx +328 -0
  152. hydpy/cythons/autogen/c_evap_pet_m.cp313-win_amd64.pyd +0 -0
  153. hydpy/cythons/autogen/c_evap_pet_m.pxd +124 -0
  154. hydpy/cythons/autogen/c_evap_pet_m.pyx +214 -0
  155. hydpy/cythons/autogen/c_evap_pet_mlc.cp313-win_amd64.pyd +0 -0
  156. hydpy/cythons/autogen/c_evap_pet_mlc.pxd +126 -0
  157. hydpy/cythons/autogen/c_evap_pet_mlc.pyx +214 -0
  158. hydpy/cythons/autogen/c_evap_ret_fao56.cp313-win_amd64.pyd +0 -0
  159. hydpy/cythons/autogen/c_evap_ret_fao56.pxd +305 -0
  160. hydpy/cythons/autogen/c_evap_ret_fao56.pyx +624 -0
  161. hydpy/cythons/autogen/c_evap_ret_io.cp313-win_amd64.pyd +0 -0
  162. hydpy/cythons/autogen/c_evap_ret_io.pxd +112 -0
  163. hydpy/cythons/autogen/c_evap_ret_io.pyx +176 -0
  164. hydpy/cythons/autogen/c_evap_ret_tw2002.cp313-win_amd64.pyd +0 -0
  165. hydpy/cythons/autogen/c_evap_ret_tw2002.pxd +139 -0
  166. hydpy/cythons/autogen/c_evap_ret_tw2002.pyx +273 -0
  167. hydpy/cythons/autogen/c_exch.cp313-win_amd64.pyd +0 -0
  168. hydpy/cythons/autogen/c_exch.pxd +230 -0
  169. hydpy/cythons/autogen/c_exch.pyx +462 -0
  170. hydpy/cythons/autogen/c_exch_branch_hbv96.cp313-win_amd64.pyd +0 -0
  171. hydpy/cythons/autogen/c_exch_branch_hbv96.pxd +134 -0
  172. hydpy/cythons/autogen/c_exch_branch_hbv96.pyx +255 -0
  173. hydpy/cythons/autogen/c_exch_waterlevel.cp313-win_amd64.pyd +0 -0
  174. hydpy/cythons/autogen/c_exch_waterlevel.pxd +54 -0
  175. hydpy/cythons/autogen/c_exch_waterlevel.pyx +78 -0
  176. hydpy/cythons/autogen/c_exch_weir_hbv96.cp313-win_amd64.pyd +0 -0
  177. hydpy/cythons/autogen/c_exch_weir_hbv96.pxd +156 -0
  178. hydpy/cythons/autogen/c_exch_weir_hbv96.pyx +282 -0
  179. hydpy/cythons/autogen/c_ga.cp313-win_amd64.pyd +0 -0
  180. hydpy/cythons/autogen/c_ga.pxd +353 -0
  181. hydpy/cythons/autogen/c_ga.pyx +1204 -0
  182. hydpy/cythons/autogen/c_ga_garto.cp313-win_amd64.pyd +0 -0
  183. hydpy/cythons/autogen/c_ga_garto.pxd +330 -0
  184. hydpy/cythons/autogen/c_ga_garto.pyx +1105 -0
  185. hydpy/cythons/autogen/c_ga_garto_submodel1.cp313-win_amd64.pyd +0 -0
  186. hydpy/cythons/autogen/c_ga_garto_submodel1.pxd +236 -0
  187. hydpy/cythons/autogen/c_ga_garto_submodel1.pyx +944 -0
  188. hydpy/cythons/autogen/c_gland.cp313-win_amd64.pyd +0 -0
  189. hydpy/cythons/autogen/c_gland.pxd +437 -0
  190. hydpy/cythons/autogen/c_gland.pyx +726 -0
  191. hydpy/cythons/autogen/c_gland_gr4.cp313-win_amd64.pyd +0 -0
  192. hydpy/cythons/autogen/c_gland_gr4.pxd +382 -0
  193. hydpy/cythons/autogen/c_gland_gr4.pyx +605 -0
  194. hydpy/cythons/autogen/c_gland_gr5.cp313-win_amd64.pyd +0 -0
  195. hydpy/cythons/autogen/c_gland_gr5.pxd +368 -0
  196. hydpy/cythons/autogen/c_gland_gr5.pyx +568 -0
  197. hydpy/cythons/autogen/c_gland_gr6.cp313-win_amd64.pyd +0 -0
  198. hydpy/cythons/autogen/c_gland_gr6.pxd +420 -0
  199. hydpy/cythons/autogen/c_gland_gr6.pyx +673 -0
  200. hydpy/cythons/autogen/c_hland.cp313-win_amd64.pyd +0 -0
  201. hydpy/cythons/autogen/c_hland.pxd +855 -0
  202. hydpy/cythons/autogen/c_hland.pyx +2486 -0
  203. hydpy/cythons/autogen/c_hland_96.cp313-win_amd64.pyd +0 -0
  204. hydpy/cythons/autogen/c_hland_96.pxd +631 -0
  205. hydpy/cythons/autogen/c_hland_96.pyx +1724 -0
  206. hydpy/cythons/autogen/c_hland_96c.cp313-win_amd64.pyd +0 -0
  207. hydpy/cythons/autogen/c_hland_96c.pxd +621 -0
  208. hydpy/cythons/autogen/c_hland_96c.pyx +1822 -0
  209. hydpy/cythons/autogen/c_hland_96p.cp313-win_amd64.pyd +0 -0
  210. hydpy/cythons/autogen/c_hland_96p.pxd +683 -0
  211. hydpy/cythons/autogen/c_hland_96p.pyx +1911 -0
  212. hydpy/cythons/autogen/c_kinw.cp313-win_amd64.pyd +0 -0
  213. hydpy/cythons/autogen/c_kinw.pxd +509 -0
  214. hydpy/cythons/autogen/c_kinw.pyx +965 -0
  215. hydpy/cythons/autogen/c_kinw_williams.cp313-win_amd64.pyd +0 -0
  216. hydpy/cythons/autogen/c_kinw_williams.pxd +409 -0
  217. hydpy/cythons/autogen/c_kinw_williams.pyx +763 -0
  218. hydpy/cythons/autogen/c_kinw_williams_ext.cp313-win_amd64.pyd +0 -0
  219. hydpy/cythons/autogen/c_kinw_williams_ext.pxd +220 -0
  220. hydpy/cythons/autogen/c_kinw_williams_ext.pyx +440 -0
  221. hydpy/cythons/autogen/c_lland.cp313-win_amd64.pyd +0 -0
  222. hydpy/cythons/autogen/c_lland.pxd +1386 -0
  223. hydpy/cythons/autogen/c_lland.pyx +3679 -0
  224. hydpy/cythons/autogen/c_lland_dd.cp313-win_amd64.pyd +0 -0
  225. hydpy/cythons/autogen/c_lland_dd.pxd +679 -0
  226. hydpy/cythons/autogen/c_lland_dd.pyx +1719 -0
  227. hydpy/cythons/autogen/c_lland_knauf.cp313-win_amd64.pyd +0 -0
  228. hydpy/cythons/autogen/c_lland_knauf.pxd +1096 -0
  229. hydpy/cythons/autogen/c_lland_knauf.pyx +2784 -0
  230. hydpy/cythons/autogen/c_lland_knauf_ic.cp313-win_amd64.pyd +0 -0
  231. hydpy/cythons/autogen/c_lland_knauf_ic.pxd +1369 -0
  232. hydpy/cythons/autogen/c_lland_knauf_ic.pyx +3625 -0
  233. hydpy/cythons/autogen/c_meteo.cp313-win_amd64.pyd +0 -0
  234. hydpy/cythons/autogen/c_meteo.pxd +469 -0
  235. hydpy/cythons/autogen/c_meteo.pyx +879 -0
  236. hydpy/cythons/autogen/c_meteo_clear_glob_io.cp313-win_amd64.pyd +0 -0
  237. hydpy/cythons/autogen/c_meteo_clear_glob_io.pxd +75 -0
  238. hydpy/cythons/autogen/c_meteo_clear_glob_io.pyx +107 -0
  239. hydpy/cythons/autogen/c_meteo_glob_fao56.cp313-win_amd64.pyd +0 -0
  240. hydpy/cythons/autogen/c_meteo_glob_fao56.pxd +209 -0
  241. hydpy/cythons/autogen/c_meteo_glob_fao56.pyx +339 -0
  242. hydpy/cythons/autogen/c_meteo_glob_io.cp313-win_amd64.pyd +0 -0
  243. hydpy/cythons/autogen/c_meteo_glob_io.pxd +63 -0
  244. hydpy/cythons/autogen/c_meteo_glob_io.pyx +91 -0
  245. hydpy/cythons/autogen/c_meteo_glob_morsim.cp313-win_amd64.pyd +0 -0
  246. hydpy/cythons/autogen/c_meteo_glob_morsim.pxd +289 -0
  247. hydpy/cythons/autogen/c_meteo_glob_morsim.pyx +527 -0
  248. hydpy/cythons/autogen/c_meteo_precip_io.cp313-win_amd64.pyd +0 -0
  249. hydpy/cythons/autogen/c_meteo_precip_io.pxd +112 -0
  250. hydpy/cythons/autogen/c_meteo_precip_io.pyx +176 -0
  251. hydpy/cythons/autogen/c_meteo_psun_sun_glob_io.cp313-win_amd64.pyd +0 -0
  252. hydpy/cythons/autogen/c_meteo_psun_sun_glob_io.pxd +87 -0
  253. hydpy/cythons/autogen/c_meteo_psun_sun_glob_io.pyx +123 -0
  254. hydpy/cythons/autogen/c_meteo_sun_fao56.cp313-win_amd64.pyd +0 -0
  255. hydpy/cythons/autogen/c_meteo_sun_fao56.pxd +209 -0
  256. hydpy/cythons/autogen/c_meteo_sun_fao56.pyx +343 -0
  257. hydpy/cythons/autogen/c_meteo_sun_morsim.cp313-win_amd64.pyd +0 -0
  258. hydpy/cythons/autogen/c_meteo_sun_morsim.pxd +286 -0
  259. hydpy/cythons/autogen/c_meteo_sun_morsim.pyx +519 -0
  260. hydpy/cythons/autogen/c_meteo_temp_io.cp313-win_amd64.pyd +0 -0
  261. hydpy/cythons/autogen/c_meteo_temp_io.pxd +112 -0
  262. hydpy/cythons/autogen/c_meteo_temp_io.pyx +176 -0
  263. hydpy/cythons/autogen/c_musk.cp313-win_amd64.pyd +0 -0
  264. hydpy/cythons/autogen/c_musk.pxd +282 -0
  265. hydpy/cythons/autogen/c_musk.pyx +605 -0
  266. hydpy/cythons/autogen/c_musk_classic.cp313-win_amd64.pyd +0 -0
  267. hydpy/cythons/autogen/c_musk_classic.pxd +138 -0
  268. hydpy/cythons/autogen/c_musk_classic.pyx +226 -0
  269. hydpy/cythons/autogen/c_musk_mct.cp313-win_amd64.pyd +0 -0
  270. hydpy/cythons/autogen/c_musk_mct.pxd +282 -0
  271. hydpy/cythons/autogen/c_musk_mct.pyx +609 -0
  272. hydpy/cythons/autogen/c_rconc.cp313-win_amd64.pyd +0 -0
  273. hydpy/cythons/autogen/c_rconc.pxd +119 -0
  274. hydpy/cythons/autogen/c_rconc.pyx +174 -0
  275. hydpy/cythons/autogen/c_rconc_nash.cp313-win_amd64.pyd +0 -0
  276. hydpy/cythons/autogen/c_rconc_nash.pxd +111 -0
  277. hydpy/cythons/autogen/c_rconc_nash.pyx +185 -0
  278. hydpy/cythons/autogen/c_rconc_uh.cp313-win_amd64.pyd +0 -0
  279. hydpy/cythons/autogen/c_rconc_uh.pxd +92 -0
  280. hydpy/cythons/autogen/c_rconc_uh.pyx +125 -0
  281. hydpy/cythons/autogen/c_sw1d.cp313-win_amd64.pyd +0 -0
  282. hydpy/cythons/autogen/c_sw1d.pxd +511 -0
  283. hydpy/cythons/autogen/c_sw1d.pyx +1263 -0
  284. hydpy/cythons/autogen/c_sw1d_channel.cp313-win_amd64.pyd +0 -0
  285. hydpy/cythons/autogen/c_sw1d_channel.pxd +119 -0
  286. hydpy/cythons/autogen/c_sw1d_channel.pyx +300 -0
  287. hydpy/cythons/autogen/c_sw1d_gate_out.cp313-win_amd64.pyd +0 -0
  288. hydpy/cythons/autogen/c_sw1d_gate_out.pxd +240 -0
  289. hydpy/cythons/autogen/c_sw1d_gate_out.pyx +476 -0
  290. hydpy/cythons/autogen/c_sw1d_lias.cp313-win_amd64.pyd +0 -0
  291. hydpy/cythons/autogen/c_sw1d_lias.pxd +320 -0
  292. hydpy/cythons/autogen/c_sw1d_lias.pyx +619 -0
  293. hydpy/cythons/autogen/c_sw1d_lias_sluice.cp313-win_amd64.pyd +0 -0
  294. hydpy/cythons/autogen/c_sw1d_lias_sluice.pxd +325 -0
  295. hydpy/cythons/autogen/c_sw1d_lias_sluice.pyx +644 -0
  296. hydpy/cythons/autogen/c_sw1d_network.cp313-win_amd64.pyd +0 -0
  297. hydpy/cythons/autogen/c_sw1d_network.pxd +90 -0
  298. hydpy/cythons/autogen/c_sw1d_network.pyx +246 -0
  299. hydpy/cythons/autogen/c_sw1d_pump.cp313-win_amd64.pyd +0 -0
  300. hydpy/cythons/autogen/c_sw1d_pump.pxd +256 -0
  301. hydpy/cythons/autogen/c_sw1d_pump.pyx +502 -0
  302. hydpy/cythons/autogen/c_sw1d_q_in.cp313-win_amd64.pyd +0 -0
  303. hydpy/cythons/autogen/c_sw1d_q_in.pxd +224 -0
  304. hydpy/cythons/autogen/c_sw1d_q_in.pyx +383 -0
  305. hydpy/cythons/autogen/c_sw1d_q_out.cp313-win_amd64.pyd +0 -0
  306. hydpy/cythons/autogen/c_sw1d_q_out.pxd +224 -0
  307. hydpy/cythons/autogen/c_sw1d_q_out.pyx +383 -0
  308. hydpy/cythons/autogen/c_sw1d_storage.cp313-win_amd64.pyd +0 -0
  309. hydpy/cythons/autogen/c_sw1d_storage.pxd +193 -0
  310. hydpy/cythons/autogen/c_sw1d_storage.pyx +349 -0
  311. hydpy/cythons/autogen/c_sw1d_weir_out.cp313-win_amd64.pyd +0 -0
  312. hydpy/cythons/autogen/c_sw1d_weir_out.pxd +212 -0
  313. hydpy/cythons/autogen/c_sw1d_weir_out.pyx +404 -0
  314. hydpy/cythons/autogen/c_test.cp313-win_amd64.pyd +0 -0
  315. hydpy/cythons/autogen/c_test.pxd +175 -0
  316. hydpy/cythons/autogen/c_test.pyx +348 -0
  317. hydpy/cythons/autogen/c_test_discontinous.cp313-win_amd64.pyd +0 -0
  318. hydpy/cythons/autogen/c_test_discontinous.pxd +146 -0
  319. hydpy/cythons/autogen/c_test_discontinous.pyx +256 -0
  320. hydpy/cythons/autogen/c_test_stiff0d.cp313-win_amd64.pyd +0 -0
  321. hydpy/cythons/autogen/c_test_stiff0d.pxd +146 -0
  322. hydpy/cythons/autogen/c_test_stiff0d.pyx +250 -0
  323. hydpy/cythons/autogen/c_test_stiff1d.cp313-win_amd64.pyd +0 -0
  324. hydpy/cythons/autogen/c_test_stiff1d.pxd +145 -0
  325. hydpy/cythons/autogen/c_test_stiff1d.pyx +294 -0
  326. hydpy/cythons/autogen/c_whmod.cp313-win_amd64.pyd +0 -0
  327. hydpy/cythons/autogen/c_whmod.pxd +482 -0
  328. hydpy/cythons/autogen/c_whmod.pyx +1156 -0
  329. hydpy/cythons/autogen/c_whmod_rural.cp313-win_amd64.pyd +0 -0
  330. hydpy/cythons/autogen/c_whmod_rural.pxd +411 -0
  331. hydpy/cythons/autogen/c_whmod_rural.pyx +982 -0
  332. hydpy/cythons/autogen/c_whmod_urban.cp313-win_amd64.pyd +0 -0
  333. hydpy/cythons/autogen/c_whmod_urban.pxd +482 -0
  334. hydpy/cythons/autogen/c_whmod_urban.pyx +1155 -0
  335. hydpy/cythons/autogen/c_wland.cp313-win_amd64.pyd +0 -0
  336. hydpy/cythons/autogen/c_wland.pxd +842 -0
  337. hydpy/cythons/autogen/c_wland.pyx +1890 -0
  338. hydpy/cythons/autogen/c_wland_gd.cp313-win_amd64.pyd +0 -0
  339. hydpy/cythons/autogen/c_wland_gd.pxd +829 -0
  340. hydpy/cythons/autogen/c_wland_gd.pyx +1847 -0
  341. hydpy/cythons/autogen/c_wland_wag.cp313-win_amd64.pyd +0 -0
  342. hydpy/cythons/autogen/c_wland_wag.pxd +810 -0
  343. hydpy/cythons/autogen/c_wland_wag.pyx +1780 -0
  344. hydpy/cythons/autogen/c_wq.cp313-win_amd64.pyd +0 -0
  345. hydpy/cythons/autogen/c_wq.pxd +275 -0
  346. hydpy/cythons/autogen/c_wq.pyx +652 -0
  347. hydpy/cythons/autogen/c_wq_trapeze.cp313-win_amd64.pyd +0 -0
  348. hydpy/cythons/autogen/c_wq_trapeze.pxd +170 -0
  349. hydpy/cythons/autogen/c_wq_trapeze.pyx +400 -0
  350. hydpy/cythons/autogen/c_wq_trapeze_strickler.cp313-win_amd64.pyd +0 -0
  351. hydpy/cythons/autogen/c_wq_trapeze_strickler.pxd +243 -0
  352. hydpy/cythons/autogen/c_wq_trapeze_strickler.pyx +578 -0
  353. hydpy/cythons/autogen/c_wq_walrus.cp313-win_amd64.pyd +0 -0
  354. hydpy/cythons/autogen/c_wq_walrus.pxd +61 -0
  355. hydpy/cythons/autogen/c_wq_walrus.pyx +82 -0
  356. hydpy/cythons/autogen/configutils.cp313-win_amd64.pyd +0 -0
  357. hydpy/cythons/autogen/configutils.pxd +17 -0
  358. hydpy/cythons/autogen/configutils.pyx +119 -0
  359. hydpy/cythons/autogen/interfaceutils.cp313-win_amd64.pyd +0 -0
  360. hydpy/cythons/autogen/interfaceutils.pxd +31 -0
  361. hydpy/cythons/autogen/interfaceutils.pyx +82 -0
  362. hydpy/cythons/autogen/interputils.cp313-win_amd64.pyd +0 -0
  363. hydpy/cythons/autogen/interputils.pxd +42 -0
  364. hydpy/cythons/autogen/interputils.pyx +118 -0
  365. hydpy/cythons/autogen/masterinterface.cp313-win_amd64.pyd +0 -0
  366. hydpy/cythons/autogen/masterinterface.pxd +153 -0
  367. hydpy/cythons/autogen/masterinterface.pyx +222 -0
  368. hydpy/cythons/autogen/pointerutils.cp313-win_amd64.pyd +0 -0
  369. hydpy/cythons/autogen/pointerutils.pxd +31 -0
  370. hydpy/cythons/autogen/pointerutils.pyx +650 -0
  371. hydpy/cythons/autogen/ppolyutils.cp313-win_amd64.pyd +0 -0
  372. hydpy/cythons/autogen/ppolyutils.pxd +35 -0
  373. hydpy/cythons/autogen/ppolyutils.pyx +59 -0
  374. hydpy/cythons/autogen/quadutils.cp313-win_amd64.pyd +0 -0
  375. hydpy/cythons/autogen/quadutils.pxd +26 -0
  376. hydpy/cythons/autogen/quadutils.pyx +973 -0
  377. hydpy/cythons/autogen/rootutils.cp313-win_amd64.pyd +0 -0
  378. hydpy/cythons/autogen/rootutils.pxd +28 -0
  379. hydpy/cythons/autogen/rootutils.pyx +109 -0
  380. hydpy/cythons/autogen/sequenceutils.cp313-win_amd64.pyd +0 -0
  381. hydpy/cythons/autogen/sequenceutils.pxd +45 -0
  382. hydpy/cythons/autogen/sequenceutils.pyx +101 -0
  383. hydpy/cythons/autogen/smoothutils.cp313-win_amd64.pyd +0 -0
  384. hydpy/cythons/autogen/smoothutils.pxd +29 -0
  385. hydpy/cythons/autogen/smoothutils.pyx +833 -0
  386. hydpy/cythons/configutils.pxd +8 -0
  387. hydpy/cythons/configutils.pyi +5 -0
  388. hydpy/cythons/configutils.pyx +110 -0
  389. hydpy/cythons/interfaceutils.pxd +22 -0
  390. hydpy/cythons/interfaceutils.pyi +15 -0
  391. hydpy/cythons/interfaceutils.pyx +73 -0
  392. hydpy/cythons/interputils.pxd +33 -0
  393. hydpy/cythons/interputils.pyi +32 -0
  394. hydpy/cythons/interputils.pyx +109 -0
  395. hydpy/cythons/modelutils.py +2990 -0
  396. hydpy/cythons/pointerutils.pxd +22 -0
  397. hydpy/cythons/pointerutils.pyi +89 -0
  398. hydpy/cythons/pointerutils.pyx +641 -0
  399. hydpy/cythons/ppolyutils.pxd +26 -0
  400. hydpy/cythons/ppolyutils.pyi +21 -0
  401. hydpy/cythons/ppolyutils.pyx +50 -0
  402. hydpy/cythons/quadutils.pxd +17 -0
  403. hydpy/cythons/quadutils.pyi +13 -0
  404. hydpy/cythons/quadutils.pyx +964 -0
  405. hydpy/cythons/rootutils.pxd +19 -0
  406. hydpy/cythons/rootutils.pyi +21 -0
  407. hydpy/cythons/rootutils.pyx +100 -0
  408. hydpy/cythons/sequenceutils.pxd +36 -0
  409. hydpy/cythons/sequenceutils.pyi +7 -0
  410. hydpy/cythons/sequenceutils.pyx +92 -0
  411. hydpy/cythons/smoothutils.pxd +20 -0
  412. hydpy/cythons/smoothutils.pyi +15 -0
  413. hydpy/cythons/smoothutils.pyx +824 -0
  414. hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/land_dill_assl.py +13 -0
  415. hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/land_lahn_kalk.py +13 -0
  416. hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/land_lahn_leun.py +14 -0
  417. hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/land_lahn_marb.py +13 -0
  418. hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/stream_dill_assl_lahn_leun.py +5 -0
  419. hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/stream_lahn_leun_lahn_kalk.py +5 -0
  420. hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/stream_lahn_marb_lahn_leun.py +5 -0
  421. hydpy/data/HydPy-H-Lahn/control/default/land.py +9 -0
  422. hydpy/data/HydPy-H-Lahn/control/default/land_dill_assl.py +57 -0
  423. hydpy/data/HydPy-H-Lahn/control/default/land_lahn_kalk.py +57 -0
  424. hydpy/data/HydPy-H-Lahn/control/default/land_lahn_leun.py +56 -0
  425. hydpy/data/HydPy-H-Lahn/control/default/land_lahn_marb.py +57 -0
  426. hydpy/data/HydPy-H-Lahn/control/default/stream_dill_assl_lahn_leun.py +7 -0
  427. hydpy/data/HydPy-H-Lahn/control/default/stream_lahn_leun_lahn_kalk.py +7 -0
  428. hydpy/data/HydPy-H-Lahn/control/default/stream_lahn_marb_lahn_leun.py +7 -0
  429. hydpy/data/HydPy-H-Lahn/multiple_runs.xml +309 -0
  430. hydpy/data/HydPy-H-Lahn/multiple_runs_alpha.xml +71 -0
  431. hydpy/data/HydPy-H-Lahn/network/default/headwaters.py +11 -0
  432. hydpy/data/HydPy-H-Lahn/network/default/nonheadwaters.py +11 -0
  433. hydpy/data/HydPy-H-Lahn/network/default/streams.py +8 -0
  434. hydpy/data/HydPy-H-Lahn/series/default/dill_assl_obs_q.asc +11387 -0
  435. hydpy/data/HydPy-H-Lahn/series/default/evap_pet_hbv96_input_normalairtemperature.nc +0 -0
  436. hydpy/data/HydPy-H-Lahn/series/default/evap_pet_hbv96_input_normalevapotranspiration.nc +0 -0
  437. hydpy/data/HydPy-H-Lahn/series/default/hland_96_input_p.nc +0 -0
  438. hydpy/data/HydPy-H-Lahn/series/default/hland_96_input_t.nc +0 -0
  439. hydpy/data/HydPy-H-Lahn/series/default/lahn_kalk_obs_q.asc +11387 -0
  440. hydpy/data/HydPy-H-Lahn/series/default/lahn_leun_obs_q.asc +11387 -0
  441. hydpy/data/HydPy-H-Lahn/series/default/lahn_marb_obs_q.asc +11387 -0
  442. hydpy/data/HydPy-H-Lahn/series/default/land_dill_assl_evap_pet_hbv96_input_normalairtemperature.asc +11387 -0
  443. hydpy/data/HydPy-H-Lahn/series/default/land_dill_assl_evap_pet_hbv96_input_normalevapotranspiration.asc +11387 -0
  444. hydpy/data/HydPy-H-Lahn/series/default/land_dill_assl_hland_96_input_p.asc +11387 -0
  445. hydpy/data/HydPy-H-Lahn/series/default/land_dill_assl_hland_96_input_t.asc +11387 -0
  446. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_kalk_evap_pet_hbv96_input_normalairtemperature.asc +11387 -0
  447. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_kalk_evap_pet_hbv96_input_normalevapotranspiration.asc +11387 -0
  448. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_kalk_hland_96_input_p.asc +11387 -0
  449. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_kalk_hland_96_input_t.asc +11387 -0
  450. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_leun_evap_pet_hbv96_input_normalairtemperature.asc +11387 -0
  451. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_leun_evap_pet_hbv96_input_normalevapotranspiration.asc +11387 -0
  452. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_leun_hland_96_input_p.asc +11387 -0
  453. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_leun_hland_96_input_t.asc +11387 -0
  454. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_marb_evap_pet_hbv96_input_normalairtemperature.asc +11387 -0
  455. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_marb_evap_pet_hbv96_input_normalevapotranspiration.asc +11387 -0
  456. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_marb_hland_96_input_p.asc +11387 -0
  457. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_marb_hland_96_input_t.asc +11387 -0
  458. hydpy/data/HydPy-H-Lahn/series/default/obs_q.nc +0 -0
  459. hydpy/data/HydPy-H-Lahn/single_run.xml +152 -0
  460. hydpy/data/HydPy-H-Lahn/single_run.xmlt +143 -0
  461. hydpy/data/__init__.py +17 -0
  462. hydpy/docs/__init__.py +0 -0
  463. hydpy/docs/autofigs/__init__.py +0 -0
  464. hydpy/docs/bib/__init__.py +0 -0
  465. hydpy/docs/bib/refs.bib +566 -0
  466. hydpy/docs/combine_docversions.py +133 -0
  467. hydpy/docs/draw_model_sketches.py +1301 -0
  468. hydpy/docs/enable_autodoc.py +7 -0
  469. hydpy/docs/figs/HydPy-G-GR4.png +0 -0
  470. hydpy/docs/figs/HydPy-G-GR5.png +0 -0
  471. hydpy/docs/figs/HydPy-G-GR6.png +0 -0
  472. hydpy/docs/figs/HydPy-H-HBV96-COSERO.png +0 -0
  473. hydpy/docs/figs/HydPy-H-HBV96-PREVAH.png +0 -0
  474. hydpy/docs/figs/HydPy-H-HBV96.png +0 -0
  475. hydpy/docs/figs/HydPy-H-Lahn.png +0 -0
  476. hydpy/docs/figs/HydPy-KinW-Williams.png +0 -0
  477. hydpy/docs/figs/HydPy-L-DD.png +0 -0
  478. hydpy/docs/figs/HydPy-W-Wag.png +0 -0
  479. hydpy/docs/figs/HydPy_Logo.png +0 -0
  480. hydpy/docs/figs/HydPy_Logo_Text.png +0 -0
  481. hydpy/docs/figs/IDLE-editor.png +0 -0
  482. hydpy/docs/figs/IDLE-shell.png +0 -0
  483. hydpy/docs/figs/LAWA_river-basin-bumbers.png +0 -0
  484. hydpy/docs/figs/__init__.py +0 -0
  485. hydpy/docs/html_/__init__.py +0 -0
  486. hydpy/docs/polish_html.py +57 -0
  487. hydpy/docs/prepare.py +224 -0
  488. hydpy/docs/publish_docs.py +53 -0
  489. hydpy/docs/rst/HydPy-ARMA.rst +27 -0
  490. hydpy/docs/rst/HydPy-Conv.rst +22 -0
  491. hydpy/docs/rst/HydPy-Dam.rst +79 -0
  492. hydpy/docs/rst/HydPy-Dummy.rst +21 -0
  493. hydpy/docs/rst/HydPy-Evap.rst +26 -0
  494. hydpy/docs/rst/HydPy-Exch.rst +36 -0
  495. hydpy/docs/rst/HydPy-G.rst +40 -0
  496. hydpy/docs/rst/HydPy-GA.rst +34 -0
  497. hydpy/docs/rst/HydPy-H.rst +24 -0
  498. hydpy/docs/rst/HydPy-KinW.rst +32 -0
  499. hydpy/docs/rst/HydPy-L.rst +42 -0
  500. hydpy/docs/rst/HydPy-Meteo.rst +28 -0
  501. hydpy/docs/rst/HydPy-Musk.rst +21 -0
  502. hydpy/docs/rst/HydPy-Rconc.rst +17 -0
  503. hydpy/docs/rst/HydPy-SW1D.rst +49 -0
  504. hydpy/docs/rst/HydPy-Test.rst +19 -0
  505. hydpy/docs/rst/HydPy-W.rst +20 -0
  506. hydpy/docs/rst/HydPy-WHMod.rst +19 -0
  507. hydpy/docs/rst/HydPy-WQ.rst +20 -0
  508. hydpy/docs/rst/__init__.py +0 -0
  509. hydpy/docs/rst/additional_repositories.rst +40 -0
  510. hydpy/docs/rst/auxiliaries.rst +31 -0
  511. hydpy/docs/rst/continuous_integration.rst +75 -0
  512. hydpy/docs/rst/core.rst +75 -0
  513. hydpy/docs/rst/cythons.rst +47 -0
  514. hydpy/docs/rst/definitions.rst +506 -0
  515. hydpy/docs/rst/developer_guide.rst +54 -0
  516. hydpy/docs/rst/example_projects.rst +40 -0
  517. hydpy/docs/rst/execution.rst +22 -0
  518. hydpy/docs/rst/framework_tools.rst +56 -0
  519. hydpy/docs/rst/how_to_read_the_reference_manual.rst +156 -0
  520. hydpy/docs/rst/hydpydependencies.rst +55 -0
  521. hydpy/docs/rst/index.rst +125 -0
  522. hydpy/docs/rst/installation.rst +155 -0
  523. hydpy/docs/rst/model_families.rst +79 -0
  524. hydpy/docs/rst/model_overview.rst +291 -0
  525. hydpy/docs/rst/modelimports.rst +10 -0
  526. hydpy/docs/rst/options.rst +119 -0
  527. hydpy/docs/rst/programming_style.rst +572 -0
  528. hydpy/docs/rst/project_structure.rst +520 -0
  529. hydpy/docs/rst/quickstart.rst +304 -0
  530. hydpy/docs/rst/reference_manual.rst +29 -0
  531. hydpy/docs/rst/required_tools.rst +50 -0
  532. hydpy/docs/rst/simulation.rst +514 -0
  533. hydpy/docs/rst/submodel_interfaces.rst +32 -0
  534. hydpy/docs/rst/tests_and_documentation.rst +85 -0
  535. hydpy/docs/rst/user_guide.rst +38 -0
  536. hydpy/docs/rst/version_control.rst +116 -0
  537. hydpy/docs/rst/zbibliography.rst +8 -0
  538. hydpy/docs/sphinx/__init__.py +0 -0
  539. hydpy/docs/sphinx/_themes/basic_hydpy/changes/frameset.html +11 -0
  540. hydpy/docs/sphinx/_themes/basic_hydpy/changes/rstsource.html +15 -0
  541. hydpy/docs/sphinx/_themes/basic_hydpy/changes/versionchanges.html +33 -0
  542. hydpy/docs/sphinx/_themes/basic_hydpy/defindex.html +35 -0
  543. hydpy/docs/sphinx/_themes/basic_hydpy/domainindex.html +56 -0
  544. hydpy/docs/sphinx/_themes/basic_hydpy/genindex-single.html +63 -0
  545. hydpy/docs/sphinx/_themes/basic_hydpy/genindex-split.html +41 -0
  546. hydpy/docs/sphinx/_themes/basic_hydpy/genindex.html +76 -0
  547. hydpy/docs/sphinx/_themes/basic_hydpy/globaltoc.html +11 -0
  548. hydpy/docs/sphinx/_themes/basic_hydpy/layout.html +221 -0
  549. hydpy/docs/sphinx/_themes/basic_hydpy/localtoc.html +15 -0
  550. hydpy/docs/sphinx/_themes/basic_hydpy/opensearch.xml +13 -0
  551. hydpy/docs/sphinx/_themes/basic_hydpy/page.html +13 -0
  552. hydpy/docs/sphinx/_themes/basic_hydpy/relations.html +23 -0
  553. hydpy/docs/sphinx/_themes/basic_hydpy/search.html +65 -0
  554. hydpy/docs/sphinx/_themes/basic_hydpy/searchbox.html +21 -0
  555. hydpy/docs/sphinx/_themes/basic_hydpy/searchfield.html +23 -0
  556. hydpy/docs/sphinx/_themes/basic_hydpy/sourcelink.html +18 -0
  557. hydpy/docs/sphinx/_themes/basic_hydpy/static/basic.css_t +925 -0
  558. hydpy/docs/sphinx/_themes/basic_hydpy/static/doctools.js +156 -0
  559. hydpy/docs/sphinx/_themes/basic_hydpy/static/documentation_options.js_t +13 -0
  560. hydpy/docs/sphinx/_themes/basic_hydpy/static/file.png +0 -0
  561. hydpy/docs/sphinx/_themes/basic_hydpy/static/language_data.js_t +26 -0
  562. hydpy/docs/sphinx/_themes/basic_hydpy/static/minus.png +0 -0
  563. hydpy/docs/sphinx/_themes/basic_hydpy/static/plus.png +0 -0
  564. hydpy/docs/sphinx/_themes/basic_hydpy/static/searchtools.js +574 -0
  565. hydpy/docs/sphinx/_themes/basic_hydpy/static/sphinx_highlight.js +154 -0
  566. hydpy/docs/sphinx/_themes/basic_hydpy/theme.conf +16 -0
  567. hydpy/docs/sphinx/_themes/classic_hydpy/layout.html +23 -0
  568. hydpy/docs/sphinx/_themes/classic_hydpy/static/classic.css_t +358 -0
  569. hydpy/docs/sphinx/_themes/classic_hydpy/static/sidebar.js_t +72 -0
  570. hydpy/docs/sphinx/_themes/classic_hydpy/theme.conf +32 -0
  571. hydpy/docs/sphinx/conf.py +398 -0
  572. hydpy/docs/sphinx/defaultlinks_extension.py +36 -0
  573. hydpy/docs/sphinx/integrationtest_extension.py +104 -0
  574. hydpy/docs/sphinx/projectstructure_extension.py +58 -0
  575. hydpy/docs/sphinx/submodelgraph_extension.py +53 -0
  576. hydpy/exe/__init__.py +0 -0
  577. hydpy/exe/commandtools.py +651 -0
  578. hydpy/exe/hyd.py +277 -0
  579. hydpy/exe/modelimports.py +41 -0
  580. hydpy/exe/replacetools.py +216 -0
  581. hydpy/exe/servertools.py +2348 -0
  582. hydpy/exe/xmltools.py +3280 -0
  583. hydpy/interfaces/__init__.py +0 -0
  584. hydpy/interfaces/aetinterfaces.py +94 -0
  585. hydpy/interfaces/dischargeinterfaces.py +45 -0
  586. hydpy/interfaces/petinterfaces.py +117 -0
  587. hydpy/interfaces/precipinterfaces.py +42 -0
  588. hydpy/interfaces/radiationinterfaces.py +79 -0
  589. hydpy/interfaces/rconcinterfaces.py +30 -0
  590. hydpy/interfaces/routinginterfaces.py +324 -0
  591. hydpy/interfaces/soilinterfaces.py +96 -0
  592. hydpy/interfaces/stateinterfaces.py +98 -0
  593. hydpy/interfaces/tempinterfaces.py +46 -0
  594. hydpy/models/__init__.py +0 -0
  595. hydpy/models/arma/__init__.py +14 -0
  596. hydpy/models/arma/arma_control.py +383 -0
  597. hydpy/models/arma/arma_derived.py +204 -0
  598. hydpy/models/arma/arma_fluxes.py +41 -0
  599. hydpy/models/arma/arma_inlets.py +11 -0
  600. hydpy/models/arma/arma_logs.py +19 -0
  601. hydpy/models/arma/arma_model.py +461 -0
  602. hydpy/models/arma/arma_outlets.py +11 -0
  603. hydpy/models/arma_rimorido.py +381 -0
  604. hydpy/models/conv/__init__.py +12 -0
  605. hydpy/models/conv/conv_control.py +303 -0
  606. hydpy/models/conv/conv_derived.py +271 -0
  607. hydpy/models/conv/conv_fluxes.py +54 -0
  608. hydpy/models/conv/conv_inlets.py +11 -0
  609. hydpy/models/conv/conv_model.py +687 -0
  610. hydpy/models/conv/conv_outlets.py +11 -0
  611. hydpy/models/conv_idw.py +120 -0
  612. hydpy/models/conv_idw_ed.py +184 -0
  613. hydpy/models/conv_nn.py +112 -0
  614. hydpy/models/dam/__init__.py +16 -0
  615. hydpy/models/dam/dam_aides.py +17 -0
  616. hydpy/models/dam/dam_control.py +346 -0
  617. hydpy/models/dam/dam_derived.py +559 -0
  618. hydpy/models/dam/dam_factors.py +46 -0
  619. hydpy/models/dam/dam_fluxes.py +179 -0
  620. hydpy/models/dam/dam_inlets.py +29 -0
  621. hydpy/models/dam/dam_logs.py +52 -0
  622. hydpy/models/dam/dam_model.py +5011 -0
  623. hydpy/models/dam/dam_outlets.py +23 -0
  624. hydpy/models/dam/dam_receivers.py +41 -0
  625. hydpy/models/dam/dam_senders.py +23 -0
  626. hydpy/models/dam/dam_solver.py +75 -0
  627. hydpy/models/dam/dam_states.py +11 -0
  628. hydpy/models/dam_llake.py +499 -0
  629. hydpy/models/dam_lreservoir.py +548 -0
  630. hydpy/models/dam_lretention.py +343 -0
  631. hydpy/models/dam_pump.py +278 -0
  632. hydpy/models/dam_pump_sluice.py +339 -0
  633. hydpy/models/dam_sluice.py +319 -0
  634. hydpy/models/dam_v001.py +1127 -0
  635. hydpy/models/dam_v002.py +381 -0
  636. hydpy/models/dam_v003.py +422 -0
  637. hydpy/models/dam_v004.py +665 -0
  638. hydpy/models/dam_v005.py +479 -0
  639. hydpy/models/dummy/__init__.py +15 -0
  640. hydpy/models/dummy/dummy_control.py +22 -0
  641. hydpy/models/dummy/dummy_fluxes.py +11 -0
  642. hydpy/models/dummy/dummy_inlets.py +11 -0
  643. hydpy/models/dummy/dummy_inputs.py +41 -0
  644. hydpy/models/dummy/dummy_model.py +196 -0
  645. hydpy/models/dummy/dummy_outlets.py +11 -0
  646. hydpy/models/dummy_interceptedwater.py +85 -0
  647. hydpy/models/dummy_node2node.py +83 -0
  648. hydpy/models/dummy_snowalbedo.py +84 -0
  649. hydpy/models/dummy_snowcover.py +84 -0
  650. hydpy/models/dummy_snowycanopy.py +86 -0
  651. hydpy/models/dummy_soilwater.py +85 -0
  652. hydpy/models/evap/__init__.py +13 -0
  653. hydpy/models/evap/evap_control.py +354 -0
  654. hydpy/models/evap/evap_derived.py +236 -0
  655. hydpy/models/evap/evap_factors.py +188 -0
  656. hydpy/models/evap/evap_fixed.py +68 -0
  657. hydpy/models/evap/evap_fluxes.py +150 -0
  658. hydpy/models/evap/evap_inputs.py +54 -0
  659. hydpy/models/evap/evap_logs.py +91 -0
  660. hydpy/models/evap/evap_masks.py +48 -0
  661. hydpy/models/evap/evap_model.py +9170 -0
  662. hydpy/models/evap/evap_parameters.py +149 -0
  663. hydpy/models/evap/evap_sequences.py +32 -0
  664. hydpy/models/evap/evap_states.py +18 -0
  665. hydpy/models/evap_aet_hbv96.py +372 -0
  666. hydpy/models/evap_aet_minhas.py +331 -0
  667. hydpy/models/evap_aet_morsim.py +627 -0
  668. hydpy/models/evap_pet_ambav1.py +483 -0
  669. hydpy/models/evap_pet_hbv96.py +147 -0
  670. hydpy/models/evap_pet_m.py +94 -0
  671. hydpy/models/evap_pet_mlc.py +107 -0
  672. hydpy/models/evap_ret_fao56.py +265 -0
  673. hydpy/models/evap_ret_io.py +74 -0
  674. hydpy/models/evap_ret_tw2002.py +165 -0
  675. hydpy/models/exch/__init__.py +14 -0
  676. hydpy/models/exch/exch_control.py +262 -0
  677. hydpy/models/exch/exch_derived.py +36 -0
  678. hydpy/models/exch/exch_factors.py +26 -0
  679. hydpy/models/exch/exch_fluxes.py +48 -0
  680. hydpy/models/exch/exch_inlets.py +11 -0
  681. hydpy/models/exch/exch_logs.py +12 -0
  682. hydpy/models/exch/exch_model.py +451 -0
  683. hydpy/models/exch/exch_outlets.py +17 -0
  684. hydpy/models/exch/exch_receivers.py +17 -0
  685. hydpy/models/exch_branch_hbv96.py +186 -0
  686. hydpy/models/exch_waterlevel.py +73 -0
  687. hydpy/models/exch_weir_hbv96.py +609 -0
  688. hydpy/models/ga/__init__.py +14 -0
  689. hydpy/models/ga/ga_aides.py +17 -0
  690. hydpy/models/ga/ga_control.py +208 -0
  691. hydpy/models/ga/ga_derived.py +77 -0
  692. hydpy/models/ga/ga_fluxes.py +83 -0
  693. hydpy/models/ga/ga_inputs.py +26 -0
  694. hydpy/models/ga/ga_logs.py +17 -0
  695. hydpy/models/ga/ga_model.py +2952 -0
  696. hydpy/models/ga/ga_states.py +87 -0
  697. hydpy/models/ga_garto.py +1001 -0
  698. hydpy/models/ga_garto_submodel1.py +79 -0
  699. hydpy/models/gland/__init__.py +14 -0
  700. hydpy/models/gland/gland_control.py +90 -0
  701. hydpy/models/gland/gland_derived.py +113 -0
  702. hydpy/models/gland/gland_fluxes.py +137 -0
  703. hydpy/models/gland/gland_inputs.py +12 -0
  704. hydpy/models/gland/gland_model.py +1439 -0
  705. hydpy/models/gland/gland_outlets.py +11 -0
  706. hydpy/models/gland/gland_states.py +90 -0
  707. hydpy/models/gland_gr4.py +501 -0
  708. hydpy/models/gland_gr5.py +463 -0
  709. hydpy/models/gland_gr6.py +487 -0
  710. hydpy/models/hland/__init__.py +20 -0
  711. hydpy/models/hland/hland_aides.py +19 -0
  712. hydpy/models/hland/hland_constants.py +37 -0
  713. hydpy/models/hland/hland_control.py +1530 -0
  714. hydpy/models/hland/hland_derived.py +683 -0
  715. hydpy/models/hland/hland_factors.py +57 -0
  716. hydpy/models/hland/hland_fixed.py +42 -0
  717. hydpy/models/hland/hland_fluxes.py +279 -0
  718. hydpy/models/hland/hland_inputs.py +19 -0
  719. hydpy/models/hland/hland_masks.py +107 -0
  720. hydpy/models/hland/hland_model.py +4664 -0
  721. hydpy/models/hland/hland_outlets.py +11 -0
  722. hydpy/models/hland/hland_parameters.py +227 -0
  723. hydpy/models/hland/hland_sequences.py +382 -0
  724. hydpy/models/hland/hland_states.py +236 -0
  725. hydpy/models/hland_96.py +1812 -0
  726. hydpy/models/hland_96c.py +1196 -0
  727. hydpy/models/hland_96p.py +1204 -0
  728. hydpy/models/kinw/__init__.py +18 -0
  729. hydpy/models/kinw/kinw_aides.py +306 -0
  730. hydpy/models/kinw/kinw_control.py +270 -0
  731. hydpy/models/kinw/kinw_derived.py +197 -0
  732. hydpy/models/kinw/kinw_fixed.py +33 -0
  733. hydpy/models/kinw/kinw_fluxes.py +37 -0
  734. hydpy/models/kinw/kinw_inlets.py +11 -0
  735. hydpy/models/kinw/kinw_model.py +3026 -0
  736. hydpy/models/kinw/kinw_outlets.py +11 -0
  737. hydpy/models/kinw/kinw_solver.py +45 -0
  738. hydpy/models/kinw/kinw_states.py +17 -0
  739. hydpy/models/kinw_williams.py +1299 -0
  740. hydpy/models/kinw_williams_ext.py +768 -0
  741. hydpy/models/lland/__init__.py +42 -0
  742. hydpy/models/lland/lland_aides.py +38 -0
  743. hydpy/models/lland/lland_constants.py +88 -0
  744. hydpy/models/lland/lland_control.py +1329 -0
  745. hydpy/models/lland/lland_derived.py +380 -0
  746. hydpy/models/lland/lland_factors.py +18 -0
  747. hydpy/models/lland/lland_fixed.py +128 -0
  748. hydpy/models/lland/lland_fluxes.py +626 -0
  749. hydpy/models/lland/lland_inlets.py +12 -0
  750. hydpy/models/lland/lland_inputs.py +33 -0
  751. hydpy/models/lland/lland_logs.py +17 -0
  752. hydpy/models/lland/lland_masks.py +212 -0
  753. hydpy/models/lland/lland_model.py +7690 -0
  754. hydpy/models/lland/lland_outlets.py +12 -0
  755. hydpy/models/lland/lland_parameters.py +195 -0
  756. hydpy/models/lland/lland_sequences.py +67 -0
  757. hydpy/models/lland/lland_states.py +280 -0
  758. hydpy/models/lland_dd.py +2270 -0
  759. hydpy/models/lland_knauf.py +2156 -0
  760. hydpy/models/lland_knauf_ic.py +1920 -0
  761. hydpy/models/meteo/__init__.py +12 -0
  762. hydpy/models/meteo/meteo_control.py +154 -0
  763. hydpy/models/meteo/meteo_derived.py +159 -0
  764. hydpy/models/meteo/meteo_factors.py +88 -0
  765. hydpy/models/meteo/meteo_fixed.py +19 -0
  766. hydpy/models/meteo/meteo_fluxes.py +46 -0
  767. hydpy/models/meteo/meteo_inputs.py +47 -0
  768. hydpy/models/meteo/meteo_logs.py +30 -0
  769. hydpy/models/meteo/meteo_model.py +2904 -0
  770. hydpy/models/meteo/meteo_parameters.py +14 -0
  771. hydpy/models/meteo/meteo_sequences.py +22 -0
  772. hydpy/models/meteo_clear_glob_io.py +77 -0
  773. hydpy/models/meteo_glob_fao56.py +217 -0
  774. hydpy/models/meteo_glob_io.py +68 -0
  775. hydpy/models/meteo_glob_morsim.py +444 -0
  776. hydpy/models/meteo_precip_io.py +76 -0
  777. hydpy/models/meteo_psun_sun_glob_io.py +83 -0
  778. hydpy/models/meteo_sun_fao56.py +188 -0
  779. hydpy/models/meteo_sun_morsim.py +466 -0
  780. hydpy/models/meteo_temp_io.py +76 -0
  781. hydpy/models/musk/__init__.py +15 -0
  782. hydpy/models/musk/musk_control.py +328 -0
  783. hydpy/models/musk/musk_derived.py +32 -0
  784. hydpy/models/musk/musk_factors.py +53 -0
  785. hydpy/models/musk/musk_fluxes.py +24 -0
  786. hydpy/models/musk/musk_inlets.py +11 -0
  787. hydpy/models/musk/musk_masks.py +15 -0
  788. hydpy/models/musk/musk_model.py +838 -0
  789. hydpy/models/musk/musk_outlets.py +11 -0
  790. hydpy/models/musk/musk_sequences.py +88 -0
  791. hydpy/models/musk/musk_solver.py +68 -0
  792. hydpy/models/musk/musk_states.py +64 -0
  793. hydpy/models/musk_classic.py +228 -0
  794. hydpy/models/musk_mct.py +1247 -0
  795. hydpy/models/rconc/__init__.py +12 -0
  796. hydpy/models/rconc/rconc_control.py +473 -0
  797. hydpy/models/rconc/rconc_derived.py +76 -0
  798. hydpy/models/rconc/rconc_fluxes.py +19 -0
  799. hydpy/models/rconc/rconc_logs.py +74 -0
  800. hydpy/models/rconc/rconc_model.py +260 -0
  801. hydpy/models/rconc/rconc_states.py +11 -0
  802. hydpy/models/rconc_nash.py +48 -0
  803. hydpy/models/rconc_uh.py +53 -0
  804. hydpy/models/sw1d/__init__.py +17 -0
  805. hydpy/models/sw1d/sw1d_control.py +356 -0
  806. hydpy/models/sw1d/sw1d_derived.py +85 -0
  807. hydpy/models/sw1d/sw1d_factors.py +78 -0
  808. hydpy/models/sw1d/sw1d_fixed.py +12 -0
  809. hydpy/models/sw1d/sw1d_fluxes.py +55 -0
  810. hydpy/models/sw1d/sw1d_inlets.py +17 -0
  811. hydpy/models/sw1d/sw1d_model.py +3385 -0
  812. hydpy/models/sw1d/sw1d_outlets.py +11 -0
  813. hydpy/models/sw1d/sw1d_receivers.py +11 -0
  814. hydpy/models/sw1d/sw1d_senders.py +11 -0
  815. hydpy/models/sw1d/sw1d_states.py +23 -0
  816. hydpy/models/sw1d_channel.py +2051 -0
  817. hydpy/models/sw1d_gate_out.py +599 -0
  818. hydpy/models/sw1d_lias.py +105 -0
  819. hydpy/models/sw1d_lias_sluice.py +531 -0
  820. hydpy/models/sw1d_network.py +1219 -0
  821. hydpy/models/sw1d_pump.py +448 -0
  822. hydpy/models/sw1d_q_in.py +79 -0
  823. hydpy/models/sw1d_q_out.py +81 -0
  824. hydpy/models/sw1d_storage.py +78 -0
  825. hydpy/models/sw1d_weir_out.py +75 -0
  826. hydpy/models/test/__init__.py +14 -0
  827. hydpy/models/test/test_control.py +28 -0
  828. hydpy/models/test/test_fluxes.py +17 -0
  829. hydpy/models/test/test_model.py +201 -0
  830. hydpy/models/test/test_solver.py +48 -0
  831. hydpy/models/test/test_states.py +17 -0
  832. hydpy/models/test_discontinous.py +46 -0
  833. hydpy/models/test_stiff0d.py +47 -0
  834. hydpy/models/test_stiff1d.py +42 -0
  835. hydpy/models/whmod/__init__.py +21 -0
  836. hydpy/models/whmod/whmod_constants.py +77 -0
  837. hydpy/models/whmod/whmod_control.py +333 -0
  838. hydpy/models/whmod/whmod_derived.py +210 -0
  839. hydpy/models/whmod/whmod_factors.py +9 -0
  840. hydpy/models/whmod/whmod_fluxes.py +105 -0
  841. hydpy/models/whmod/whmod_inputs.py +15 -0
  842. hydpy/models/whmod/whmod_masks.py +178 -0
  843. hydpy/models/whmod/whmod_model.py +2091 -0
  844. hydpy/models/whmod/whmod_parameters.py +155 -0
  845. hydpy/models/whmod/whmod_sequences.py +193 -0
  846. hydpy/models/whmod/whmod_states.py +73 -0
  847. hydpy/models/whmod_rural.py +794 -0
  848. hydpy/models/whmod_urban.py +1011 -0
  849. hydpy/models/wland/__init__.py +43 -0
  850. hydpy/models/wland/wland_aides.py +55 -0
  851. hydpy/models/wland/wland_constants.py +103 -0
  852. hydpy/models/wland/wland_control.py +508 -0
  853. hydpy/models/wland/wland_derived.py +330 -0
  854. hydpy/models/wland/wland_factors.py +11 -0
  855. hydpy/models/wland/wland_fixed.py +12 -0
  856. hydpy/models/wland/wland_fluxes.py +166 -0
  857. hydpy/models/wland/wland_inputs.py +33 -0
  858. hydpy/models/wland/wland_masks.py +54 -0
  859. hydpy/models/wland/wland_model.py +3755 -0
  860. hydpy/models/wland/wland_outlets.py +11 -0
  861. hydpy/models/wland/wland_parameters.py +214 -0
  862. hydpy/models/wland/wland_sequences.py +108 -0
  863. hydpy/models/wland/wland_solver.py +45 -0
  864. hydpy/models/wland/wland_states.py +56 -0
  865. hydpy/models/wland_gd.py +888 -0
  866. hydpy/models/wland_wag.py +1244 -0
  867. hydpy/models/wq/__init__.py +14 -0
  868. hydpy/models/wq/wq_control.py +117 -0
  869. hydpy/models/wq/wq_derived.py +182 -0
  870. hydpy/models/wq/wq_factors.py +79 -0
  871. hydpy/models/wq/wq_fluxes.py +17 -0
  872. hydpy/models/wq/wq_model.py +1889 -0
  873. hydpy/models/wq_trapeze.py +168 -0
  874. hydpy/models/wq_trapeze_strickler.py +101 -0
  875. hydpy/models/wq_walrus.py +57 -0
  876. hydpy/py.typed +0 -0
  877. hydpy/tests/.coveragerc +22 -0
  878. hydpy/tests/__init__.py +0 -0
  879. hydpy/tests/check_consistency.py +32 -0
  880. hydpy/tests/hydpydoctestcustomize.pth +1 -0
  881. hydpy/tests/hydpydoctestcustomize.py +15 -0
  882. hydpy/tests/iotesting/__init__.py +0 -0
  883. hydpy/tests/run_doctests.py +233 -0
  884. hydpy-6.2.dev1.data/scripts/hyd.py +277 -0
  885. hydpy-6.2.dev1.dist-info/LICENSE +165 -0
  886. hydpy-6.2.dev1.dist-info/METADATA +163 -0
  887. hydpy-6.2.dev1.dist-info/RECORD +890 -0
  888. hydpy-6.2.dev1.dist-info/WHEEL +5 -0
  889. hydpy-6.2.dev1.dist-info/licenses_hydpy_installer.txt +42 -0
  890. hydpy-6.2.dev1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1889 @@
1
+ # pylint: disable=missing-module-docstring
2
+
3
+ # imports...
4
+ # ...from site-packages
5
+ from matplotlib import pyplot
6
+
7
+ # ...from HydPy
8
+ from hydpy.core import importtools
9
+ from hydpy.core import modeltools
10
+ from hydpy.core import objecttools
11
+ from hydpy.core.typingtools import *
12
+ from hydpy.cythons import modelutils
13
+ from hydpy.cythons import smoothutils
14
+ from hydpy.interfaces import dischargeinterfaces
15
+
16
+ # ...from wq
17
+ from hydpy.models.wq import wq_control
18
+ from hydpy.models.wq import wq_derived
19
+ from hydpy.models.wq import wq_factors
20
+ from hydpy.models.wq import wq_fluxes
21
+
22
+
23
+ class Calculate_Discharge_V1(modeltools.Method):
24
+ r"""Calculate the discharge based on the water depth given in m according to
25
+ :cite:t:`ref-Brauer2014` and return it in mm/T.
26
+
27
+ Basic equation (discontinuous):
28
+ .. math::
29
+ q = q_{max} \cdot \left( \frac{max(h-h_{max}, \ 0)}{h_{max}-h_{min}} \right)^x
30
+ \\ \\
31
+ q = Discharge \\
32
+ q_{max} = BankfullDischarge \\
33
+ h = waterdepth \\
34
+ h_{max} = ChannelDepth \\
35
+ h_{min} = CrestHeight \\
36
+ x = DischargeExponent
37
+
38
+ Examples:
39
+
40
+ >>> from hydpy.models.wq_walrus import *
41
+ >>> simulationstep("12h")
42
+ >>> parameterstep("1d")
43
+ >>> channeldepth(5.0)
44
+ >>> crestheight(2.0)
45
+ >>> bankfulldischarge(2.0)
46
+ >>> dischargeexponent(2.0)
47
+ >>> from hydpy import round_
48
+ >>> hs = 1.0, 1.9, 2.0, 2.1, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0
49
+
50
+ Without smoothing:
51
+
52
+ >>> crestheighttolerance(0.0)
53
+ >>> derived.crestheightregularisation.update()
54
+ >>> for h in hs:
55
+ ... round_([h, model.calculate_discharge_v1(h)])
56
+ 1.0, 0.0
57
+ 1.9, 0.0
58
+ 2.0, 0.0
59
+ 2.1, 0.001111
60
+ 3.0, 0.111111
61
+ 4.0, 0.444444
62
+ 5.0, 1.0
63
+ 6.0, 1.777778
64
+ 7.0, 2.777778
65
+ 8.0, 4.0
66
+
67
+ Without smooting:
68
+
69
+ >>> crestheighttolerance(0.1)
70
+ >>> derived.crestheightregularisation.update()
71
+ >>> for h in hs:
72
+ ... round_([h, model.calculate_discharge_v1(h)])
73
+ 1.0, 0.0
74
+ 1.9, 0.0
75
+ 2.0, 0.00001
76
+ 2.1, 0.001111
77
+ 3.0, 0.111111
78
+ 4.0, 0.444444
79
+ 5.0, 1.0
80
+ 6.0, 1.777778
81
+ 7.0, 2.777778
82
+ 8.0, 4.0
83
+ """
84
+
85
+ CONTROLPARAMETERS = (
86
+ wq_control.ChannelDepth,
87
+ wq_control.CrestHeight,
88
+ wq_control.BankfullDischarge,
89
+ wq_control.DischargeExponent,
90
+ )
91
+ DERIVEDPARAMETERS = (wq_derived.CrestHeightRegularisation,)
92
+
93
+ @staticmethod
94
+ def __call__(model: modeltools.Model, waterdepth: float) -> float:
95
+ con = model.parameters.control.fastaccess
96
+ der = model.parameters.derived.fastaccess
97
+
98
+ h: float = smoothutils.smooth_logistic2(
99
+ waterdepth - con.crestheight, der.crestheightregularisation
100
+ )
101
+ f: float = (h / (con.channeldepth - con.crestheight)) ** con.dischargeexponent
102
+ return con.bankfulldischarge * f
103
+
104
+
105
+ class Calc_WaterDepth_V1(modeltools.Method):
106
+ r"""Calculate the water depth based on the current water level.
107
+
108
+ Basic equation:
109
+ .. math::
110
+ WaterDepth = max(WaterLevel - BottomLevels_{\,0}, \ 0)
111
+
112
+ Examples:
113
+
114
+ >>> from hydpy.models.wq import *
115
+ >>> parameterstep()
116
+ >>> nmbtrapezes(2)
117
+ >>> bottomlevels(2.0, 3.0)
118
+ >>> factors.waterlevel(6.0)
119
+ >>> model.calc_waterdepth_v1()
120
+ >>> factors.waterdepth
121
+ waterdepth(4.0)
122
+
123
+ >>> factors.waterlevel(1.0)
124
+ >>> model.calc_waterdepth_v1()
125
+ >>> factors.waterdepth
126
+ waterdepth(0.0)
127
+ """
128
+
129
+ CONTROLPARAMETERS = (wq_control.BottomLevels,)
130
+ REQUIREDSEQUENCES = (wq_factors.WaterLevel,)
131
+ RESULTSEQUENCES = (wq_factors.WaterDepth,)
132
+
133
+ @staticmethod
134
+ def __call__(model: modeltools.SegmentModel) -> None:
135
+ con = model.parameters.control.fastaccess
136
+ fac = model.sequences.factors.fastaccess
137
+
138
+ fac.waterdepth = max(fac.waterlevel - con.bottomlevels[0], 0.0)
139
+
140
+
141
+ class Calc_WaterDepth_V2(modeltools.Method):
142
+ r"""Calculate the water depth based on the current wetted area.
143
+
144
+ Basic equation:
145
+ .. math::
146
+ WaterDepth = \begin{cases}
147
+ a / w &|\ s = 0 \\
148
+ \left( \sqrt{4 \cdot s \cdot a + w^2} - w \right) / (2 \cdot s) &|\ s > 0 \\
149
+ \end{cases}
150
+ \\
151
+ a = WettedArea \\
152
+ w = BottomWidth \\
153
+ s = SideSlope
154
+
155
+ Examples:
156
+
157
+ One can understand |Calc_WaterDepth_V2| as an inverse method of
158
+ |Calc_WettedAreas_V1| (and |Calc_WettedArea_V1|). Hence, the following
159
+ convenience function allows the creation of examples that are directly
160
+ comparable to those on method |Calc_WettedAreas_V1|:
161
+
162
+ >>> from hydpy import print_vector, round_
163
+ >>> def test(*wettedareas):
164
+ ... derived.trapezeheights.update()
165
+ ... derived.slopewidths.update()
166
+ ... derived.trapezeareas.update()
167
+ ... for a in wettedareas:
168
+ ... factors.wettedarea = a
169
+ ... model.calc_waterdepth_v2()
170
+ ... print_vector([a, factors.waterdepth.value])
171
+
172
+ The first example deals with identical rectangular trapezes. We pass different
173
+ wetted areas to the test function. These are the sums of the wetted areas of
174
+ the different trapeze ranges calculated in the first example on method
175
+ |Calc_WettedAreas_V1|. As expected, method |Calc_WaterDepth_V2| finds the
176
+ water depths used as input data for this example. However, note that negative
177
+ wetted areas result in zero water depths:
178
+
179
+ >>> from hydpy.models.wq import *
180
+ >>> parameterstep()
181
+ >>> nmbtrapezes(3)
182
+ >>> bottomlevels(1.0, 2.0, 3.0)
183
+ >>> bottomwidths(2.0)
184
+ >>> sideslopes(0.0)
185
+ >>> factors.wettedarea = 0.0
186
+ >>> test(-0.5, 0.0, 1.0, 2.0, 4.0, 6.0, 9.0, 12.0, 15.0, 18.0)
187
+ -0.5, 0.0
188
+ 0.0, 0.0
189
+ 1.0, 0.5
190
+ 2.0, 1.0
191
+ 4.0, 1.5
192
+ 6.0, 2.0
193
+ 9.0, 2.5
194
+ 12.0, 3.0
195
+ 15.0, 3.5
196
+ 18.0, 4.0
197
+
198
+ The second example deals with identical triangular trapezes and corresponds to
199
+ the second example on method |Calc_WettedAreas_V1|:
200
+
201
+ >>> bottomlevels(1.0, 2.0, 3.0)
202
+ >>> bottomwidths(0.0)
203
+ >>> sideslopes(2.0)
204
+ >>> test(-0.5, 0.0, 0.5, 2.0, 4.5, 8.0, 12.5, 18.0, 24.5, 32.0)
205
+ -0.5, 0.0
206
+ 0.0, 0.0
207
+ 0.5, 0.5
208
+ 2.0, 1.0
209
+ 4.5, 1.5
210
+ 8.0, 2.0
211
+ 12.5, 2.5
212
+ 18.0, 3.0
213
+ 24.5, 3.5
214
+ 32.0, 4.0
215
+
216
+ The third example deals with identical "complete" trapezes and corresponds to
217
+ the third example on method |Calc_WettedAreas_V1|:
218
+
219
+ >>> bottomlevels(1.0, 2.0, 3.0)
220
+ >>> bottomwidths(2.0)
221
+ >>> sideslopes(2.0)
222
+ >>> test(-0.5, 0.0, 1.5, 4.0, 8.5, 14.0, 21.5, 30.0, 39.5, 50.0)
223
+ -0.5, 0.0
224
+ 0.0, 0.0
225
+ 1.5, 0.5
226
+ 4.0, 1.0
227
+ 8.5, 1.5
228
+ 14.0, 2.0
229
+ 21.5, 2.5
230
+ 30.0, 3.0
231
+ 39.5, 3.5
232
+ 50.0, 4.0
233
+
234
+ The fourth example mixes three different geometries and corresponds to the
235
+ fourth example on method |Calc_WettedAreas_V1|:
236
+
237
+ >>> bottomlevels(1.0, 3.0, 4.0)
238
+ >>> bottomwidths(2.0, 0.0, 2.0)
239
+ >>> sideslopes(0.0, 2.0, 2.0)
240
+ >>> test(-0.5, 0.0, 1.0, 2.0, 3.0, 4.0, 5.5, 8.0, 12.5, 18.0)
241
+ -0.5, 0.0
242
+ 0.0, 0.0
243
+ 1.0, 0.5
244
+ 2.0, 1.0
245
+ 3.0, 1.5
246
+ 4.0, 2.0
247
+ 5.5, 2.5
248
+ 8.0, 3.0
249
+ 12.5, 3.5
250
+ 18.0, 4.0
251
+ """
252
+
253
+ CONTROLPARAMETERS = (
254
+ wq_control.NmbTrapezes,
255
+ wq_control.BottomWidths,
256
+ wq_control.SideSlopes,
257
+ )
258
+ DERIVEDPARAMETERS = (
259
+ wq_derived.TrapezeHeights,
260
+ wq_derived.SlopeWidths,
261
+ wq_derived.TrapezeAreas,
262
+ )
263
+ REQUIREDSEQUENCES = (wq_factors.WettedArea,)
264
+ RESULTSEQUENCES = (wq_factors.WaterDepth,)
265
+
266
+ @staticmethod
267
+ def __call__(model: modeltools.SegmentModel) -> None:
268
+ con = model.parameters.control.fastaccess
269
+ der = model.parameters.derived.fastaccess
270
+ fac = model.sequences.factors.fastaccess
271
+
272
+ a: float = fac.wettedarea
273
+ d: float = 0.0
274
+ w: float = 0.0
275
+ for i in range(con.nmbtrapezes):
276
+ if a > der.trapezeareas[i]:
277
+ a -= der.trapezeareas[i]
278
+ d += der.trapezeheights[i]
279
+ w += con.bottomwidths[i] + der.slopewidths[i]
280
+ else:
281
+ if a > 0.0:
282
+ w += con.bottomwidths[i]
283
+ ss: float = con.sideslopes[i]
284
+ if ss > 1e-10:
285
+ d += ((4.0 * ss * a + w**2.0) ** 0.5 - w) / (2.0 * ss)
286
+ else:
287
+ d += a / w
288
+ fac.waterdepth = d
289
+ break
290
+
291
+
292
+ class Calc_WaterLevel_V1(modeltools.Method):
293
+ r"""Calculate the water level based on the current water depth.
294
+
295
+ Basic equation:
296
+ .. math::
297
+ WaterLevel = WaterDepth + BottomLevels_{\,0}
298
+
299
+ Example:
300
+
301
+ >>> from hydpy.models.wq import *
302
+ >>> parameterstep()
303
+ >>> nmbtrapezes(2)
304
+ >>> bottomlevels(2.0, 3.0)
305
+ >>> factors.waterdepth(4.0)
306
+ >>> model.calc_waterlevel_v1()
307
+ >>> factors.waterlevel
308
+ waterlevel(6.0)
309
+ """
310
+
311
+ CONTROLPARAMETERS = (wq_control.BottomLevels,)
312
+ REQUIREDSEQUENCES = (wq_factors.WaterDepth,)
313
+ RESULTSEQUENCES = (wq_factors.WaterLevel,)
314
+
315
+ @staticmethod
316
+ def __call__(model: modeltools.SegmentModel) -> None:
317
+ con = model.parameters.control.fastaccess
318
+ fac = model.sequences.factors.fastaccess
319
+
320
+ fac.waterlevel = fac.waterdepth + con.bottomlevels[0]
321
+
322
+
323
+ class Calc_WettedAreas_V1(modeltools.Method):
324
+ r"""Calculate the wetted area for each trapeze range.
325
+
326
+ Basic equation:
327
+ .. math::
328
+ WettedAreas_i = \begin{cases}
329
+ 0 &|\ d < 0 \\
330
+ (W_B + S_S\cdot d) \cdot d &|\ 0 \leq d < H_T \\
331
+ (W_B + W_S / 2) \cdot H_T + (W_B + W_S) \cdot (d - H_T) &|\ H_T \leq d \\
332
+ \end{cases}
333
+ \\ \\
334
+ d = WaterDepth - BottomDepth_i \\
335
+ H_T = TrapezeHeights_i \\
336
+ W_B = BottomWidths_i \\
337
+ S_S = SideSlopes_i \\
338
+ W_S = SlopeWidths_i
339
+
340
+ Examples:
341
+
342
+ The following convenience function executes |Calc_WettedAreas_V1| for different
343
+ water depths and prints the resulting wetted areas:
344
+
345
+ >>> from hydpy import print_vector, round_
346
+ >>> def test():
347
+ ... derived.bottomdepths.update()
348
+ ... derived.trapezeheights.update()
349
+ ... derived.slopewidths.update()
350
+ ... for d in [0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0]:
351
+ ... factors.waterdepth = d
352
+ ... model.calc_wettedareas_v1()
353
+ ... round_(d, end=": ")
354
+ ... print_vector(factors.wettedareas.values)
355
+
356
+ The first example deals with identical rectangular trapezes. There are no
357
+ differences except those due to the different bottom levels:
358
+
359
+ >>> from hydpy.models.wq import *
360
+ >>> parameterstep()
361
+ >>> nmbtrapezes(3)
362
+ >>> bottomlevels(1.0, 2.0, 3.0)
363
+ >>> bottomwidths(2.0)
364
+ >>> sideslopes(0.0)
365
+ >>> test()
366
+ 0.0: 0.0, 0.0, 0.0
367
+ 0.5: 1.0, 0.0, 0.0
368
+ 1.0: 2.0, 0.0, 0.0
369
+ 1.5: 3.0, 1.0, 0.0
370
+ 2.0: 4.0, 2.0, 0.0
371
+ 2.5: 5.0, 3.0, 1.0
372
+ 3.0: 6.0, 4.0, 2.0
373
+ 3.5: 7.0, 5.0, 3.0
374
+ 4.0: 8.0, 6.0, 4.0
375
+
376
+ The second example deals with identical triangular trapezes. Here, the heights
377
+ of the individual trapezes also matter because they mark where the triangular
378
+ shape switches to a rectangular shape:
379
+
380
+ >>> bottomlevels(1.0, 2.0, 3.0)
381
+ >>> bottomwidths(0.0)
382
+ >>> sideslopes(2.0)
383
+ >>> test()
384
+ 0.0: 0.0, 0.0, 0.0
385
+ 0.5: 0.5, 0.0, 0.0
386
+ 1.0: 2.0, 0.0, 0.0
387
+ 1.5: 4.0, 0.5, 0.0
388
+ 2.0: 6.0, 2.0, 0.0
389
+ 2.5: 8.0, 4.0, 0.5
390
+ 3.0: 10.0, 6.0, 2.0
391
+ 3.5: 12.0, 8.0, 4.5
392
+ 4.0: 14.0, 10.0, 8.0
393
+
394
+ The third example deals with identical "complete" trapezes by combining the
395
+ first two geometries:
396
+
397
+ >>> bottomlevels(1.0, 2.0, 3.0)
398
+ >>> bottomwidths(2.0)
399
+ >>> sideslopes(2.0)
400
+ >>> test()
401
+ 0.0: 0.0, 0.0, 0.0
402
+ 0.5: 1.5, 0.0, 0.0
403
+ 1.0: 4.0, 0.0, 0.0
404
+ 1.5: 7.0, 1.5, 0.0
405
+ 2.0: 10.0, 4.0, 0.0
406
+ 2.5: 13.0, 7.0, 1.5
407
+ 3.0: 16.0, 10.0, 4.0
408
+ 3.5: 19.0, 13.0, 7.5
409
+ 4.0: 22.0, 16.0, 12.0
410
+
411
+ The fourth example mixes three different geometries:
412
+
413
+ >>> bottomlevels(1.0, 3.0, 4.0)
414
+ >>> bottomwidths(2.0, 0.0, 2.0)
415
+ >>> sideslopes(0.0, 2.0, 2.0)
416
+ >>> test()
417
+ 0.0: 0.0, 0.0, 0.0
418
+ 0.5: 1.0, 0.0, 0.0
419
+ 1.0: 2.0, 0.0, 0.0
420
+ 1.5: 3.0, 0.0, 0.0
421
+ 2.0: 4.0, 0.0, 0.0
422
+ 2.5: 5.0, 0.5, 0.0
423
+ 3.0: 6.0, 2.0, 0.0
424
+ 3.5: 7.0, 4.0, 1.5
425
+ 4.0: 8.0, 6.0, 4.0
426
+ """
427
+
428
+ CONTROLPARAMETERS = (
429
+ wq_control.NmbTrapezes,
430
+ wq_control.BottomWidths,
431
+ wq_control.SideSlopes,
432
+ )
433
+ DERIVEDPARAMETERS = (
434
+ wq_derived.BottomDepths,
435
+ wq_derived.TrapezeHeights,
436
+ wq_derived.SlopeWidths,
437
+ )
438
+ REQUIREDSEQUENCES = (wq_factors.WaterDepth,)
439
+ RESULTSEQUENCES = (wq_factors.WettedAreas,)
440
+
441
+ @staticmethod
442
+ def __call__(model: modeltools.SegmentModel) -> None:
443
+ con = model.parameters.control.fastaccess
444
+ der = model.parameters.derived.fastaccess
445
+ fac = model.sequences.factors.fastaccess
446
+
447
+ for i in range(con.nmbtrapezes):
448
+ d: float = fac.waterdepth - der.bottomdepths[i]
449
+ if d < 0.0:
450
+ fac.wettedareas[i] = 0.0
451
+ else:
452
+ ht: float = der.trapezeheights[i]
453
+ wb: float = con.bottomwidths[i]
454
+ if d < ht:
455
+ ss: float = con.sideslopes[i]
456
+ fac.wettedareas[i] = (wb + ss * d) * d
457
+ else:
458
+ ws: float = der.slopewidths[i]
459
+ fac.wettedareas[i] = (wb + ws / 2.0) * ht + (wb + ws) * (d - ht)
460
+
461
+
462
+ class Calc_WettedArea_V1(modeltools.Method):
463
+ r"""Sum up the individual trapeze ranges' wetted areas.
464
+
465
+ Basic equation:
466
+ :math:`WettedArea = \sum_{i=1}^{NmbTrapezes} WettedAreas_i`
467
+
468
+ Examples:
469
+
470
+ >>> from hydpy.models.wq import *
471
+ >>> parameterstep()
472
+ >>> nmbtrapezes(3)
473
+ >>> factors.wettedareas(2.0, 3.0, 1.0)
474
+ >>> model.calc_wettedarea_v1()
475
+ >>> factors.wettedarea
476
+ wettedarea(6.0)
477
+ """
478
+
479
+ CONTROLPARAMETERS = (wq_control.NmbTrapezes,)
480
+ REQUIREDSEQUENCES = (wq_factors.WettedAreas,)
481
+ RESULTSEQUENCES = (wq_factors.WettedArea,)
482
+
483
+ @staticmethod
484
+ def __call__(model: modeltools.Model) -> None:
485
+ con = model.parameters.control.fastaccess
486
+ fac = model.sequences.factors.fastaccess
487
+
488
+ fac.wettedarea = 0.0
489
+ for i in range(con.nmbtrapezes):
490
+ fac.wettedarea += fac.wettedareas[i]
491
+
492
+
493
+ class Calc_WettedPerimeters_V1(modeltools.Method):
494
+ r"""Calculate the wetted perimeter for each trapeze range.
495
+
496
+ Basic equation:
497
+ .. math::
498
+ WettedPerimeters_i = \begin{cases}
499
+ 0 &|\ d < 0 \\
500
+ W_B + 2 \cdot d \cdot \sqrt{S_S^2 + 1} &|\ 0 \leq d < H_T \\
501
+ W_B + 2 \cdot H_T \cdot \sqrt{S_S^2 + 1} + 2 \cdot (d - H_T) &|\ H_T \leq d \\
502
+ \end{cases}
503
+ \\ \\
504
+ d = WaterDepth - BottomDepth_i \\
505
+ H_T = TrapezeHeights_i \\
506
+ W_B = BottomWidths_i \\
507
+ S_S = SideSlopes_i
508
+
509
+ Examples:
510
+
511
+ The following convenience function executes |Calc_WettedPerimeters_V1| for
512
+ different water depths and prints the resulting wetted perimeters:
513
+
514
+ >>> from hydpy import print_vector, round_
515
+ >>> def test():
516
+ ... derived.bottomdepths.update()
517
+ ... derived.trapezeheights.update()
518
+ ... for d in [0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0]:
519
+ ... factors.waterdepth = d
520
+ ... model.calc_wettedperimeters_v1()
521
+ ... round_(d, end=": ")
522
+ ... print_vector(factors.wettedperimeters.values)
523
+
524
+ The first example deals with identical rectangular trapezes. Note that method
525
+ |Calc_WettedPerimeters_V1| adds the contact surface between two adjacent trapeze
526
+ ranges only to the wetted perimeter of the inner one:
527
+
528
+ >>> from hydpy.models.wq import *
529
+ >>> parameterstep()
530
+ >>> nmbtrapezes(3)
531
+ >>> bottomlevels(1.0, 2.0, 3.0)
532
+ >>> bottomwidths(2.0)
533
+ >>> sideslopes(0.0)
534
+ >>> test()
535
+ 0.0: 2.0, 0.0, 0.0
536
+ 0.5: 3.0, 0.0, 0.0
537
+ 1.0: 4.0, 2.0, 0.0
538
+ 1.5: 5.0, 3.0, 0.0
539
+ 2.0: 6.0, 4.0, 2.0
540
+ 2.5: 7.0, 5.0, 3.0
541
+ 3.0: 8.0, 6.0, 4.0
542
+ 3.5: 9.0, 7.0, 5.0
543
+ 4.0: 10.0, 8.0, 6.0
544
+
545
+ The second example deals with identical triangular trapezes. Here, the heights
546
+ of the individual trapezes also matter because they mark where the triangular
547
+ shape switches to a rectangular shape:
548
+
549
+ >>> bottomlevels(1.0, 2.0, 3.0)
550
+ >>> bottomwidths(0.0)
551
+ >>> sideslopes(2.0)
552
+ >>> test()
553
+ 0.0: 0.0, 0.0, 0.0
554
+ 0.5: 2.236068, 0.0, 0.0
555
+ 1.0: 4.472136, 0.0, 0.0
556
+ 1.5: 5.472136, 2.236068, 0.0
557
+ 2.0: 6.472136, 4.472136, 0.0
558
+ 2.5: 7.472136, 5.472136, 2.236068
559
+ 3.0: 8.472136, 6.472136, 4.472136
560
+ 3.5: 9.472136, 7.472136, 6.708204
561
+ 4.0: 10.472136, 8.472136, 8.944272
562
+
563
+ The third example deals with identical "complete" trapezes by combining the
564
+ first two geometries:
565
+
566
+ >>> bottomlevels(1.0, 2.0, 3.0)
567
+ >>> bottomwidths(2.0)
568
+ >>> sideslopes(2.0)
569
+ >>> test()
570
+ 0.0: 2.0, 0.0, 0.0
571
+ 0.5: 4.236068, 0.0, 0.0
572
+ 1.0: 6.472136, 2.0, 0.0
573
+ 1.5: 7.472136, 4.236068, 0.0
574
+ 2.0: 8.472136, 6.472136, 2.0
575
+ 2.5: 9.472136, 7.472136, 4.236068
576
+ 3.0: 10.472136, 8.472136, 6.472136
577
+ 3.5: 11.472136, 9.472136, 8.708204
578
+ 4.0: 12.472136, 10.472136, 10.944272
579
+
580
+ The fourth example mixes three different geometries:
581
+
582
+ >>> bottomlevels(1.0, 3.0, 4.0)
583
+ >>> bottomwidths(2.0, 0.0, 2.0)
584
+ >>> sideslopes(0.0, 2.0, 2.0)
585
+ >>> test()
586
+ 0.0: 2.0, 0.0, 0.0
587
+ 0.5: 3.0, 0.0, 0.0
588
+ 1.0: 4.0, 0.0, 0.0
589
+ 1.5: 5.0, 0.0, 0.0
590
+ 2.0: 6.0, 0.0, 0.0
591
+ 2.5: 7.0, 2.236068, 0.0
592
+ 3.0: 8.0, 4.472136, 2.0
593
+ 3.5: 9.0, 5.472136, 4.236068
594
+ 4.0: 10.0, 6.472136, 6.472136
595
+ """
596
+
597
+ CONTROLPARAMETERS = (
598
+ wq_control.NmbTrapezes,
599
+ wq_control.BottomWidths,
600
+ wq_control.SideSlopes,
601
+ )
602
+ DERIVEDPARAMETERS = (wq_derived.BottomDepths, wq_derived.TrapezeHeights)
603
+ REQUIREDSEQUENCES = (wq_factors.WaterDepth,)
604
+ RESULTSEQUENCES = (wq_factors.WettedPerimeters,)
605
+
606
+ @staticmethod
607
+ def __call__(model: modeltools.SegmentModel) -> None:
608
+ con = model.parameters.control.fastaccess
609
+ der = model.parameters.derived.fastaccess
610
+ fac = model.sequences.factors.fastaccess
611
+
612
+ for i in range(con.nmbtrapezes):
613
+ d: float = fac.waterdepth - der.bottomdepths[i]
614
+ if d < 0.0:
615
+ fac.wettedperimeters[i] = 0.0
616
+ else:
617
+ ht: float = der.trapezeheights[i]
618
+ wb: float = con.bottomwidths[i]
619
+ ss: float = con.sideslopes[i]
620
+ if d < ht:
621
+ fac.wettedperimeters[i] = wb + 2.0 * d * (ss**2.0 + 1.0) ** 0.5
622
+ else:
623
+ fac.wettedperimeters[i] = (
624
+ wb + 2.0 * ht * (ss**2.0 + 1.0) ** 0.5 + 2.0 * (d - ht)
625
+ )
626
+
627
+
628
+ class Calc_WettedPerimeter_V1(modeltools.Method):
629
+ r"""Sum up the individual trapeze ranges' wetted perimeters.
630
+
631
+ Basic equation:
632
+ :math:`WettedPerimeter = \sum_{i=1}^{NmbTrapezes} WettedPerimeters_i`
633
+
634
+ Example:
635
+
636
+ >>> from hydpy.models.wq import *
637
+ >>> parameterstep()
638
+ >>> nmbtrapezes(3)
639
+ >>> factors.wettedperimeters(2.0, 3.0, 1.0)
640
+ >>> model.calc_wettedperimeter_v1()
641
+ >>> factors.wettedperimeter
642
+ wettedperimeter(6.0)
643
+ """
644
+
645
+ CONTROLPARAMETERS = (wq_control.NmbTrapezes,)
646
+ REQUIREDSEQUENCES = (wq_factors.WettedPerimeters,)
647
+ RESULTSEQUENCES = (wq_factors.WettedPerimeter,)
648
+
649
+ @staticmethod
650
+ def __call__(model: modeltools.Model) -> None:
651
+ con = model.parameters.control.fastaccess
652
+ fac = model.sequences.factors.fastaccess
653
+
654
+ fac.wettedperimeter = 0.0
655
+ for i in range(con.nmbtrapezes):
656
+ fac.wettedperimeter += fac.wettedperimeters[i]
657
+
658
+
659
+ class Calc_WettedPerimeterDerivatives_V1(modeltools.Method):
660
+ r"""Calculate the change in the wetted perimeter of each trapeze range with respect
661
+ to the water level increase.
662
+
663
+ Basic equation:
664
+ .. math::
665
+ WettedPerimeterDerivatives_i = \begin{cases}
666
+ 0 &|\ d < 0 \\
667
+ P' &|\ 0 \leq d < H_T \\
668
+ 2 &|\ H_T \leq d \\
669
+ \end{cases}
670
+ \\ \\
671
+ d = WaterDepth - BottomDepth_i \\
672
+ H_T = TrapezeHeights_i \\
673
+ P' = PerimeterDerivatives_i
674
+
675
+ Examples:
676
+
677
+ The following convenience function executes |Calc_WettedPerimeterDerivatives_V1|
678
+ for different water depths and prints the resulting wetted perimeters:
679
+
680
+ >>> from hydpy import print_vector, round_
681
+ >>> def test():
682
+ ... derived.bottomdepths.update()
683
+ ... derived.trapezeheights.update()
684
+ ... derived.perimeterderivatives.update()
685
+ ... for d in [0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0]:
686
+ ... factors.waterdepth = d
687
+ ... model.calc_wettedperimeterderivatives_v1()
688
+ ... round_(d, end=": ")
689
+ ... print_vector(factors.wettedperimeterderivatives.values)
690
+
691
+ The first example deals with identical rectangular trapezes. Note that method
692
+ |Calc_WettedPerimeterDerivatives_V1| adds the contact surface increase between
693
+ two adjacent trapeze ranges only to the wetted perimeter derivative of the inner
694
+ one:
695
+
696
+ >>> from hydpy.models.wq import *
697
+ >>> parameterstep()
698
+ >>> nmbtrapezes(3)
699
+ >>> bottomlevels(1.0, 2.0, 3.0)
700
+ >>> bottomwidths(2.0)
701
+ >>> sideslopes(0.0)
702
+ >>> test()
703
+ 0.0: 2.0, 0.0, 0.0
704
+ 0.5: 2.0, 0.0, 0.0
705
+ 1.0: 2.0, 2.0, 0.0
706
+ 1.5: 2.0, 2.0, 0.0
707
+ 2.0: 2.0, 2.0, 2.0
708
+ 2.5: 2.0, 2.0, 2.0
709
+ 3.0: 2.0, 2.0, 2.0
710
+ 3.5: 2.0, 2.0, 2.0
711
+ 4.0: 2.0, 2.0, 2.0
712
+
713
+ The second example deals with identical triangular trapezes. Here, the heights
714
+ of the individual trapezes also matter because they mark where the triangular
715
+ shape switches to a rectangular shape:
716
+
717
+ >>> bottomlevels(1.0, 2.0, 3.0)
718
+ >>> bottomwidths(0.0)
719
+ >>> sideslopes(2.0)
720
+ >>> test()
721
+ 0.0: 4.472136, 0.0, 0.0
722
+ 0.5: 4.472136, 0.0, 0.0
723
+ 1.0: 2.0, 4.472136, 0.0
724
+ 1.5: 2.0, 4.472136, 0.0
725
+ 2.0: 2.0, 2.0, 4.472136
726
+ 2.5: 2.0, 2.0, 4.472136
727
+ 3.0: 2.0, 2.0, 4.472136
728
+ 3.5: 2.0, 2.0, 4.472136
729
+ 4.0: 2.0, 2.0, 4.472136
730
+
731
+ The third example deals with identical "complete" trapezes by combining the
732
+ first two geometries:
733
+
734
+ >>> bottomlevels(1.0, 2.0, 3.0)
735
+ >>> bottomwidths(2.0)
736
+ >>> sideslopes(2.0)
737
+ >>> test()
738
+ 0.0: 4.472136, 0.0, 0.0
739
+ 0.5: 4.472136, 0.0, 0.0
740
+ 1.0: 2.0, 4.472136, 0.0
741
+ 1.5: 2.0, 4.472136, 0.0
742
+ 2.0: 2.0, 2.0, 4.472136
743
+ 2.5: 2.0, 2.0, 4.472136
744
+ 3.0: 2.0, 2.0, 4.472136
745
+ 3.5: 2.0, 2.0, 4.472136
746
+ 4.0: 2.0, 2.0, 4.472136
747
+
748
+ The fourth example mixes three different geometries:
749
+
750
+ >>> bottomlevels(1.0, 3.0, 4.0)
751
+ >>> bottomwidths(2.0, 0.0, 2.0)
752
+ >>> sideslopes(0.0, 2.0, 2.0)
753
+ >>> test()
754
+ 0.0: 2.0, 0.0, 0.0
755
+ 0.5: 2.0, 0.0, 0.0
756
+ 1.0: 2.0, 0.0, 0.0
757
+ 1.5: 2.0, 0.0, 0.0
758
+ 2.0: 2.0, 4.472136, 0.0
759
+ 2.5: 2.0, 4.472136, 0.0
760
+ 3.0: 2.0, 2.0, 4.472136
761
+ 3.5: 2.0, 2.0, 4.472136
762
+ 4.0: 2.0, 2.0, 4.472136
763
+ """
764
+
765
+ CONTROLPARAMETERS = (wq_control.NmbTrapezes,)
766
+ DERIVEDPARAMETERS = (
767
+ wq_derived.BottomDepths,
768
+ wq_derived.TrapezeHeights,
769
+ wq_derived.PerimeterDerivatives,
770
+ )
771
+ REQUIREDSEQUENCES = (wq_factors.WaterDepth,)
772
+ RESULTSEQUENCES = (wq_factors.WettedPerimeterDerivatives,)
773
+
774
+ @staticmethod
775
+ def __call__(model: modeltools.SegmentModel) -> None:
776
+ con = model.parameters.control.fastaccess
777
+ der = model.parameters.derived.fastaccess
778
+ fac = model.sequences.factors.fastaccess
779
+
780
+ for i in range(con.nmbtrapezes):
781
+ d: float = fac.waterdepth - der.bottomdepths[i]
782
+ if d < 0.0:
783
+ fac.wettedperimeterderivatives[i] = 0.0
784
+ elif d < der.trapezeheights[i]:
785
+ fac.wettedperimeterderivatives[i] = der.perimeterderivatives[i]
786
+ else:
787
+ fac.wettedperimeterderivatives[i] = 2.0
788
+
789
+
790
+ class Calc_SurfaceWidths_V1(modeltools.Method):
791
+ r"""Calculate the surface width for each trapeze range.
792
+
793
+ Basic equation:
794
+ .. math::
795
+ SurfaceWidths_i = \begin{cases}
796
+ 0 &|\ d < 0 \\
797
+ W_B + 2 \cdot S_S \cdot d &|\ 0 \leq d < H_T \\
798
+ W_B + W_S &|\ H_T \leq d \\
799
+ \end{cases}
800
+ \\ \\
801
+ d = WaterDepth - BottomDepth_i \\
802
+ H_T = TrapezeHeights_i \\
803
+ W_B = BottomWidths_i \\
804
+ S_S = SideSlopes_i \\
805
+ W_S = SlopeWidth_i
806
+
807
+ Example:
808
+
809
+ The following convenience function executes |Calc_SurfaceWidths_V1| for
810
+ different water depths and prints the surface widths:
811
+
812
+ >>> from hydpy import print_vector, round_
813
+ >>> def test():
814
+ ... derived.bottomdepths.update()
815
+ ... derived.trapezeheights.update()
816
+ ... derived.slopewidths.update()
817
+ ... for d in [0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0]:
818
+ ... factors.waterdepth = d
819
+ ... model.calc_surfacewidths_v1()
820
+ ... round_(d, end=": ")
821
+ ... print_vector(factors.surfacewidths.values)
822
+
823
+ The first example deals with identical rectangular trapezes. There are no
824
+ differences except those due to the different bottom levels:
825
+
826
+ >>> from hydpy.models.wq import *
827
+ >>> parameterstep()
828
+ >>> nmbtrapezes(3)
829
+ >>> bottomlevels(1.0, 2.0, 3.0)
830
+ >>> bottomwidths(2.0)
831
+ >>> sideslopes(0.0)
832
+ >>> test()
833
+ 0.0: 2.0, 0.0, 0.0
834
+ 0.5: 2.0, 0.0, 0.0
835
+ 1.0: 2.0, 2.0, 0.0
836
+ 1.5: 2.0, 2.0, 0.0
837
+ 2.0: 2.0, 2.0, 2.0
838
+ 2.5: 2.0, 2.0, 2.0
839
+ 3.0: 2.0, 2.0, 2.0
840
+ 3.5: 2.0, 2.0, 2.0
841
+ 4.0: 2.0, 2.0, 2.0
842
+
843
+ The second example deals with identical triangular trapezes. Here, the heights
844
+ of the individual trapezes also matter because they mark where the triangular
845
+ shape switches to a rectangular shape:
846
+
847
+ >>> bottomlevels(1.0, 2.0, 3.0)
848
+ >>> bottomwidths(0.0)
849
+ >>> sideslopes(2.0)
850
+ >>> test()
851
+ 0.0: 0.0, 0.0, 0.0
852
+ 0.5: 2.0, 0.0, 0.0
853
+ 1.0: 4.0, 0.0, 0.0
854
+ 1.5: 4.0, 2.0, 0.0
855
+ 2.0: 4.0, 4.0, 0.0
856
+ 2.5: 4.0, 4.0, 2.0
857
+ 3.0: 4.0, 4.0, 4.0
858
+ 3.5: 4.0, 4.0, 6.0
859
+ 4.0: 4.0, 4.0, 8.0
860
+
861
+ The third example deals with identical "complete" trapezes by combining the
862
+ first two geometries:
863
+
864
+ >>> bottomlevels(1.0, 2.0, 3.0)
865
+ >>> bottomwidths(2.0)
866
+ >>> sideslopes(2.0)
867
+ >>> test()
868
+ 0.0: 2.0, 0.0, 0.0
869
+ 0.5: 4.0, 0.0, 0.0
870
+ 1.0: 6.0, 2.0, 0.0
871
+ 1.5: 6.0, 4.0, 0.0
872
+ 2.0: 6.0, 6.0, 2.0
873
+ 2.5: 6.0, 6.0, 4.0
874
+ 3.0: 6.0, 6.0, 6.0
875
+ 3.5: 6.0, 6.0, 8.0
876
+ 4.0: 6.0, 6.0, 10.0
877
+
878
+ The fourth example mixes three different geometries:
879
+
880
+ >>> bottomlevels(1.0, 3.0, 4.0)
881
+ >>> bottomwidths(2.0, 0.0, 2.0)
882
+ >>> sideslopes(0.0, 2.0, 2.0)
883
+ >>> test()
884
+ 0.0: 2.0, 0.0, 0.0
885
+ 0.5: 2.0, 0.0, 0.0
886
+ 1.0: 2.0, 0.0, 0.0
887
+ 1.5: 2.0, 0.0, 0.0
888
+ 2.0: 2.0, 0.0, 0.0
889
+ 2.5: 2.0, 2.0, 0.0
890
+ 3.0: 2.0, 4.0, 2.0
891
+ 3.5: 2.0, 4.0, 4.0
892
+ 4.0: 2.0, 4.0, 6.0
893
+ """
894
+
895
+ CONTROLPARAMETERS = (
896
+ wq_control.NmbTrapezes,
897
+ wq_control.BottomWidths,
898
+ wq_control.SideSlopes,
899
+ )
900
+ DERIVEDPARAMETERS = (
901
+ wq_derived.BottomDepths,
902
+ wq_derived.TrapezeHeights,
903
+ wq_derived.SlopeWidths,
904
+ )
905
+ REQUIREDSEQUENCES = (wq_factors.WaterDepth,)
906
+ RESULTSEQUENCES = (wq_factors.SurfaceWidths,)
907
+
908
+ @staticmethod
909
+ def __call__(model: modeltools.SegmentModel) -> None:
910
+ con = model.parameters.control.fastaccess
911
+ der = model.parameters.derived.fastaccess
912
+ fac = model.sequences.factors.fastaccess
913
+
914
+ for i in range(con.nmbtrapezes):
915
+ d: float = fac.waterdepth - der.bottomdepths[i]
916
+ if d < 0.0:
917
+ fac.surfacewidths[i] = 0.0
918
+ elif d < der.trapezeheights[i]:
919
+ fac.surfacewidths[i] = con.bottomwidths[i] + 2.0 * con.sideslopes[i] * d
920
+ else:
921
+ fac.surfacewidths[i] = con.bottomwidths[i] + der.slopewidths[i]
922
+
923
+
924
+ class Calc_SurfaceWidth_V1(modeltools.Method):
925
+ r"""Sum the individual trapeze ranges' surface widths.
926
+
927
+ Basic equation:
928
+ :math:`SurfaceWidth = \sum_{i=1}^{NmbTrapezes} SurfaceWidths_i`
929
+
930
+ Examples:
931
+
932
+ >>> from hydpy.models.wq import *
933
+ >>> parameterstep()
934
+ >>> nmbtrapezes(3)
935
+ >>> bottomslope(0.01)
936
+ >>> factors.surfacewidths(2.0, 3.0, 1.0)
937
+ >>> model.calc_surfacewidth_v1()
938
+ >>> factors.surfacewidth
939
+ surfacewidth(6.0)
940
+ """
941
+
942
+ CONTROLPARAMETERS = (wq_control.NmbTrapezes,)
943
+ REQUIREDSEQUENCES = (wq_factors.SurfaceWidths,)
944
+ RESULTSEQUENCES = (wq_factors.SurfaceWidth,)
945
+
946
+ @staticmethod
947
+ def __call__(model: modeltools.Model) -> None:
948
+ con = model.parameters.control.fastaccess
949
+ fac = model.sequences.factors.fastaccess
950
+
951
+ fac.surfacewidth = 0.0
952
+ for i in range(con.nmbtrapezes):
953
+ fac.surfacewidth += fac.surfacewidths[i]
954
+
955
+
956
+ class Calc_Discharges_V1(modeltools.Method):
957
+ r"""Calculate the discharge for each trapeze range.
958
+
959
+ Basic equation:
960
+ .. math::
961
+ Discharges_i = \begin{cases}
962
+ 0 &|\ d < 0 \\
963
+ C \cdot A^{5/3} \cdot P^{-2/3} \cdot \sqrt{S_B} &|\ 0 \leq d
964
+ \end{cases}
965
+ \\ \\
966
+ d = WaterDepth - BottomDepth_i \\
967
+ C = StricklerCoefficient_i \\
968
+ A = WettedAreas_i \\
969
+ P = WettedPerimeters_i \\
970
+ S_B = BottomSlope
971
+
972
+ Example:
973
+
974
+ >>> from hydpy.models.wq import *
975
+ >>> parameterstep()
976
+ >>> nmbtrapezes(4)
977
+ >>> bottomslope(0.01)
978
+ >>> stricklercoefficients(20.0, 40.0, 60.0, 80.0)
979
+ >>> derived.bottomdepths = 1.0, 2.0, 3.0, 4.0
980
+ >>> factors.wettedareas = 1.0, 4.0, 8.0, 16.0
981
+ >>> factors.wettedperimeters = 2.0, 4.0, 6.0, 8.0
982
+ >>> factors.waterdepth = 4.0
983
+ >>> model.calc_discharges_v1()
984
+ >>> fluxes.discharges
985
+ discharges(1.259921, 16.0, 58.147859, 0.0)
986
+ """
987
+
988
+ CONTROLPARAMETERS = (
989
+ wq_control.NmbTrapezes,
990
+ wq_control.BottomSlope,
991
+ wq_control.StricklerCoefficients,
992
+ )
993
+ DERIVEDPARAMETERS = (wq_derived.BottomDepths,)
994
+ REQUIREDSEQUENCES = (
995
+ wq_factors.WaterDepth,
996
+ wq_factors.WettedAreas,
997
+ wq_factors.WettedPerimeters,
998
+ )
999
+ RESULTSEQUENCES = (wq_fluxes.Discharges,)
1000
+
1001
+ @staticmethod
1002
+ def __call__(model: modeltools.Model) -> None:
1003
+ con = model.parameters.control.fastaccess
1004
+ der = model.parameters.derived.fastaccess
1005
+ fac = model.sequences.factors.fastaccess
1006
+ flu = model.sequences.fluxes.fastaccess
1007
+
1008
+ for i in range(con.nmbtrapezes):
1009
+ if fac.waterdepth > der.bottomdepths[i]:
1010
+ flu.discharges[i] = (
1011
+ con.stricklercoefficients[i]
1012
+ * con.bottomslope**0.5
1013
+ * fac.wettedareas[i] ** (5.0 / 3.0)
1014
+ / fac.wettedperimeters[i] ** (2.0 / 3.0)
1015
+ )
1016
+ else:
1017
+ flu.discharges[i] = 0.0
1018
+
1019
+
1020
+ class Calc_Discharge_V2(modeltools.Method):
1021
+ r"""Sum the individual trapeze ranges' discharges.
1022
+
1023
+ Basic equation:
1024
+ :math:`Discharge = \sum_{i=1}^{NmbTrapezes} Discharges_i`
1025
+
1026
+ Example:
1027
+
1028
+ >>> from hydpy.models.wq import *
1029
+ >>> parameterstep()
1030
+ >>> nmbtrapezes(3)
1031
+ >>> bottomslope(0.01)
1032
+ >>> fluxes.discharges(2.0, 3.0, 1.0)
1033
+ >>> model.calc_discharge_v2()
1034
+ >>> fluxes.discharge
1035
+ discharge(6.0)
1036
+ """
1037
+
1038
+ CONTROLPARAMETERS = (wq_control.NmbTrapezes,)
1039
+ REQUIREDSEQUENCES = (wq_fluxes.Discharges,)
1040
+ RESULTSEQUENCES = (wq_fluxes.Discharge,)
1041
+
1042
+ @staticmethod
1043
+ def __call__(model: modeltools.Model) -> None:
1044
+ con = model.parameters.control.fastaccess
1045
+ flu = model.sequences.fluxes.fastaccess
1046
+
1047
+ flu.discharge = 0.0
1048
+ for i in range(con.nmbtrapezes):
1049
+ flu.discharge += flu.discharges[i]
1050
+
1051
+
1052
+ class Calc_DischargeDerivatives_V1(modeltools.Method):
1053
+ r"""Calculate the discharge change for each trapeze range with respect to a water
1054
+ level increase.
1055
+
1056
+ Basic equation:
1057
+ .. math::
1058
+ DischargeDerivatives_i = \begin{cases}
1059
+ 0 &|\ d < 0 \\
1060
+ C \cdot
1061
+ (A / P)^{5/3} \cdot \frac{5 \cdot P \cdot A' - 2 \cdot A \cdot P'}{3 \cdot P}
1062
+ \cdot \sqrt{S_B} &|\ 0 \leq d
1063
+ \end{cases}
1064
+ \\ \\
1065
+ d = WaterDepth - BottomDepth_i \\
1066
+ C = StricklerCoefficient_i \\
1067
+ A = WettedAreas_i \\
1068
+ A' = SurfaceWidth_i \\
1069
+ P = WettedPerimeters_i \\
1070
+ P' = WettedPerimeterDerivatives_i \\
1071
+ S_B = BottomSlope
1072
+
1073
+ Example:
1074
+
1075
+ The given basic equation assumes that the wetted area, the wetted perimeter,
1076
+ and their derivatives are calculated via methods |Calc_WettedAreas_V1|,
1077
+ |Calc_SurfaceWidths_V1|, |Calc_WettedPerimeters_V1|, and
1078
+ |Calc_WettedPerimeterDerivatives_V1|. Hence, we apply these methods and check
1079
+ that, after also executing |Calc_DischargeDerivatives_V1|, the results are
1080
+ sufficiently similar to the numerical approximations gained when applying
1081
+ |NumericalDifferentiator| to the mentioned methods and method
1082
+ |Calc_Discharges_V1|:
1083
+
1084
+ >>> from hydpy.models.wq import *
1085
+ >>> parameterstep()
1086
+ >>> nmbtrapezes(4)
1087
+ >>> bottomlevels(1.0, 3.0, 4.0, 5.0)
1088
+ >>> bottomwidths(2.0, 0.0, 2.0, 2.0)
1089
+ >>> sideslopes(0.0, 2.0, 2.0, 2.0)
1090
+ >>> bottomslope(0.01)
1091
+ >>> stricklercoefficients(20.0, 40.0, 60.0, 60.0)
1092
+ >>> factors.waterdepth = 3.5
1093
+ >>> derived.bottomdepths.update()
1094
+ >>> derived.trapezeheights.update()
1095
+ >>> derived.slopewidths.update()
1096
+ >>> derived.perimeterderivatives.update()
1097
+ >>> model.calc_wettedareas_v1()
1098
+ >>> model.calc_surfacewidths_v1()
1099
+ >>> model.calc_wettedperimeters_v1()
1100
+ >>> model.calc_wettedperimeterderivatives_v1()
1101
+ >>> model.calc_dischargederivatives_v1()
1102
+ >>> factors.dischargederivatives
1103
+ dischargederivatives(3.884141, 18.475494, 16.850223, 0.0)
1104
+
1105
+ >>> from hydpy import NumericalDifferentiator, pub
1106
+ >>> numdiff = NumericalDifferentiator(
1107
+ ... xsequence=factors.waterdepth,
1108
+ ... ysequences=[fluxes.discharges],
1109
+ ... methods=[model.calc_wettedareas_v1,
1110
+ ... model.calc_surfacewidths_v1,
1111
+ ... model.calc_wettedperimeters_v1,
1112
+ ... model.calc_wettedperimeterderivatives_v1,
1113
+ ... model.calc_discharges_v1],
1114
+ ... dx=1e-8)
1115
+ >>> with pub.options.reprdigits(5):
1116
+ ... numdiff()
1117
+ d_discharges/d_waterdepth: 3.88414, 18.47549, 16.85022, 0.0
1118
+ """
1119
+
1120
+ CONTROLPARAMETERS = (
1121
+ wq_control.NmbTrapezes,
1122
+ wq_control.BottomSlope,
1123
+ wq_control.StricklerCoefficients,
1124
+ )
1125
+ DERIVEDPARAMETERS = (wq_derived.BottomDepths,)
1126
+ REQUIREDSEQUENCES = (
1127
+ wq_factors.WaterDepth,
1128
+ wq_factors.WettedAreas,
1129
+ wq_factors.WettedPerimeters,
1130
+ wq_factors.WettedPerimeterDerivatives,
1131
+ wq_factors.SurfaceWidths,
1132
+ )
1133
+ RESULTSEQUENCES = (wq_factors.DischargeDerivatives,)
1134
+
1135
+ @staticmethod
1136
+ def __call__(model: modeltools.Model) -> None:
1137
+ con = model.parameters.control.fastaccess
1138
+ der = model.parameters.derived.fastaccess
1139
+ fac = model.sequences.factors.fastaccess
1140
+
1141
+ for i in range(con.nmbtrapezes):
1142
+ if fac.waterdepth > der.bottomdepths[i]:
1143
+ a: float = fac.wettedareas[i]
1144
+ da: float = fac.surfacewidths[i]
1145
+ p: float = fac.wettedperimeters[i]
1146
+ dp: float = fac.wettedperimeterderivatives[i]
1147
+ fac.dischargederivatives[i] = (
1148
+ con.stricklercoefficients[i]
1149
+ * con.bottomslope**0.5
1150
+ * (a / p) ** (2.0 / 3.0)
1151
+ * (5.0 * p * da - 2.0 * a * dp)
1152
+ / (3.0 * p)
1153
+ )
1154
+ else:
1155
+ fac.dischargederivatives[i] = 0.0
1156
+
1157
+
1158
+ class Calc_DischargeDerivative_V1(modeltools.Method):
1159
+ r"""Sum the individual trapeze ranges' discharge derivatives.
1160
+
1161
+ Basic equation:
1162
+ :math:`DischargeDerivative = \sum_{i=1}^{NmbTrapezes} DischargeDerivatives_i`
1163
+
1164
+ Examples:
1165
+
1166
+ >>> from hydpy.models.wq import *
1167
+ >>> parameterstep()
1168
+ >>> nmbtrapezes(3)
1169
+ >>> bottomslope(0.01)
1170
+ >>> factors.dischargederivatives(2.0, 3.0, 1.0)
1171
+ >>> model.calc_dischargederivative_v1()
1172
+ >>> factors.dischargederivative
1173
+ dischargederivative(6.0)
1174
+ """
1175
+
1176
+ CONTROLPARAMETERS = (wq_control.NmbTrapezes,)
1177
+ REQUIREDSEQUENCES = (wq_factors.DischargeDerivatives,)
1178
+ RESULTSEQUENCES = (wq_factors.DischargeDerivative,)
1179
+
1180
+ @staticmethod
1181
+ def __call__(model: modeltools.Model) -> None:
1182
+ con = model.parameters.control.fastaccess
1183
+ fac = model.sequences.factors.fastaccess
1184
+
1185
+ fac.dischargederivative = 0.0
1186
+ for i in range(con.nmbtrapezes):
1187
+ fac.dischargederivative += fac.dischargederivatives[i]
1188
+
1189
+
1190
+ class Calc_Celerity_V1(modeltools.Method):
1191
+ r"""Calculate the kinematic wave celerity.
1192
+
1193
+ Basic equation:
1194
+ :math:`Celerity = \frac{DischargeDerivative}{SurfaceWidth}`
1195
+
1196
+ Examples:
1197
+
1198
+ >>> from hydpy.models.wq import *
1199
+ >>> parameterstep()
1200
+ >>> factors.dischargederivative = 6.0
1201
+ >>> factors.surfacewidth = 2.0
1202
+ >>> model.calc_celerity_v1()
1203
+ >>> factors.celerity
1204
+ celerity(3.0)
1205
+
1206
+ >>> factors.surfacewidth = 0.0
1207
+ >>> model.calc_celerity_v1()
1208
+ >>> factors.celerity
1209
+ celerity(nan)
1210
+ """
1211
+
1212
+ REQUIREDSEQUENCES = (wq_factors.DischargeDerivative, wq_factors.SurfaceWidth)
1213
+ RESULTSEQUENCES = (wq_factors.Celerity,)
1214
+
1215
+ @staticmethod
1216
+ def __call__(model: modeltools.Model) -> None:
1217
+ fac = model.sequences.factors.fastaccess
1218
+
1219
+ if fac.surfacewidth > 0.0:
1220
+ fac.celerity = fac.dischargederivative / fac.surfacewidth
1221
+ else:
1222
+ fac.celerity = modelutils.nan
1223
+
1224
+
1225
+ class Set_WaterDepth_V1(modeltools.Method):
1226
+ """Set the water depth in m.
1227
+
1228
+ Example:
1229
+
1230
+ >>> from hydpy.models.wq import *
1231
+ >>> parameterstep()
1232
+ >>> model.set_waterdepth_v1(2.0)
1233
+ >>> factors.waterdepth
1234
+ waterdepth(2.0)
1235
+ """
1236
+
1237
+ RESULTSEQUENCES = (wq_factors.WaterDepth,)
1238
+
1239
+ @staticmethod
1240
+ def __call__(model: modeltools.Model, waterdepth: float) -> None:
1241
+ fac = model.sequences.factors.fastaccess
1242
+
1243
+ fac.waterdepth = waterdepth
1244
+
1245
+
1246
+ class Set_WaterLevel_V1(modeltools.Method):
1247
+ """Set the water level in m.
1248
+
1249
+ Example:
1250
+
1251
+ >>> from hydpy.models.wq import *
1252
+ >>> parameterstep()
1253
+ >>> model.set_waterlevel_v1(2.0)
1254
+ >>> factors.waterlevel
1255
+ waterlevel(2.0)
1256
+ """
1257
+
1258
+ RESULTSEQUENCES = (wq_factors.WaterLevel,)
1259
+
1260
+ @staticmethod
1261
+ def __call__(model: modeltools.Model, waterlevel: float) -> None:
1262
+ fac = model.sequences.factors.fastaccess
1263
+
1264
+ fac.waterlevel = waterlevel
1265
+
1266
+
1267
+ class Set_WettedArea_V1(modeltools.Method):
1268
+ """Set the wetted area in m².
1269
+
1270
+ Example:
1271
+
1272
+ >>> from hydpy.models.wq import *
1273
+ >>> parameterstep()
1274
+ >>> model.set_wettedarea_v1(2.0)
1275
+ >>> factors.wettedarea
1276
+ wettedarea(2.0)
1277
+ """
1278
+
1279
+ RESULTSEQUENCES = (wq_factors.WettedArea,)
1280
+
1281
+ @staticmethod
1282
+ def __call__(model: modeltools.Model, wettedarea: float) -> None:
1283
+ fac = model.sequences.factors.fastaccess
1284
+
1285
+ fac.wettedarea = wettedarea
1286
+
1287
+
1288
+ class Use_WaterDepth_V1(modeltools.SetAutoMethod):
1289
+ """Set the water depth in m and use it to calculate all other properties.
1290
+
1291
+ Example:
1292
+
1293
+ >>> from hydpy.models.wq import *
1294
+ >>> parameterstep()
1295
+ >>> nmbtrapezes(2)
1296
+ >>> bottomlevels(1.0, 3.0)
1297
+ >>> bottomwidths(2.0, 2.0)
1298
+ >>> sideslopes(0.0, 0.0)
1299
+ >>> bottomslope(0.01)
1300
+ >>> stricklercoefficients(20.0, 40.0)
1301
+ >>> derived.bottomdepths.update()
1302
+ >>> derived.trapezeheights.update()
1303
+ >>> derived.slopewidths.update()
1304
+ >>> derived.perimeterderivatives.update()
1305
+ >>> model.use_waterdepth_v1(3.0)
1306
+ >>> factors.waterdepth
1307
+ waterdepth(3.0)
1308
+ >>> factors.waterlevel
1309
+ waterlevel(4.0)
1310
+ >>> factors.wettedarea
1311
+ wettedarea(8.0)
1312
+ >>> fluxes.discharge
1313
+ discharge(14.945466)
1314
+ >>> factors.celerity
1315
+ celerity(2.642957)
1316
+ """
1317
+
1318
+ SUBMETHODS = (
1319
+ Set_WaterDepth_V1,
1320
+ Calc_WaterLevel_V1,
1321
+ Calc_WettedAreas_V1,
1322
+ Calc_WettedArea_V1,
1323
+ Calc_WettedPerimeters_V1,
1324
+ Calc_WettedPerimeterDerivatives_V1,
1325
+ Calc_SurfaceWidths_V1,
1326
+ Calc_SurfaceWidth_V1,
1327
+ Calc_Discharges_V1,
1328
+ Calc_Discharge_V2,
1329
+ Calc_DischargeDerivatives_V1,
1330
+ Calc_DischargeDerivative_V1,
1331
+ Calc_Celerity_V1,
1332
+ )
1333
+ CONTROLPARAMETERS = (
1334
+ wq_control.NmbTrapezes,
1335
+ wq_control.BottomLevels,
1336
+ wq_control.BottomWidths,
1337
+ wq_control.SideSlopes,
1338
+ wq_control.StricklerCoefficients,
1339
+ wq_control.BottomSlope,
1340
+ )
1341
+ DERIVEDPARAMETERS = (
1342
+ wq_derived.BottomDepths,
1343
+ wq_derived.TrapezeHeights,
1344
+ wq_derived.SlopeWidths,
1345
+ wq_derived.PerimeterDerivatives,
1346
+ )
1347
+ RESULTSEQUENCES = (
1348
+ wq_factors.WaterDepth,
1349
+ wq_factors.WaterLevel,
1350
+ wq_factors.WettedAreas,
1351
+ wq_factors.WettedArea,
1352
+ wq_factors.WettedPerimeters,
1353
+ wq_factors.WettedPerimeterDerivatives,
1354
+ wq_factors.SurfaceWidths,
1355
+ wq_factors.SurfaceWidth,
1356
+ wq_factors.DischargeDerivatives,
1357
+ wq_factors.DischargeDerivative,
1358
+ wq_factors.Celerity,
1359
+ wq_fluxes.Discharges,
1360
+ wq_fluxes.Discharge,
1361
+ )
1362
+
1363
+
1364
+ class Use_WaterDepth_V2(modeltools.SetAutoMethod):
1365
+ """Set the water depth in m and use it to calculate all other properties.
1366
+
1367
+ Example:
1368
+
1369
+ >>> from hydpy.models.wq import *
1370
+ >>> parameterstep()
1371
+ >>> nmbtrapezes(2)
1372
+ >>> bottomlevels(1.0, 3.0)
1373
+ >>> bottomwidths(2.0, 2.0)
1374
+ >>> sideslopes(0.0, 0.0)
1375
+ >>> derived.bottomdepths.update()
1376
+ >>> derived.trapezeheights.update()
1377
+ >>> derived.slopewidths.update()
1378
+ >>> model.use_waterdepth_v2(3.0)
1379
+ >>> factors.waterdepth
1380
+ waterdepth(3.0)
1381
+ >>> factors.waterlevel
1382
+ waterlevel(4.0)
1383
+ >>> factors.wettedarea
1384
+ wettedarea(8.0)
1385
+ >>> factors.wettedperimeter
1386
+ wettedperimeter(12.0)
1387
+ """
1388
+
1389
+ SUBMETHODS = (
1390
+ Set_WaterDepth_V1,
1391
+ Calc_WaterLevel_V1,
1392
+ Calc_WettedAreas_V1,
1393
+ Calc_WettedArea_V1,
1394
+ Calc_WettedPerimeters_V1,
1395
+ Calc_WettedPerimeter_V1,
1396
+ )
1397
+ CONTROLPARAMETERS = (
1398
+ wq_control.NmbTrapezes,
1399
+ wq_control.BottomLevels,
1400
+ wq_control.BottomWidths,
1401
+ wq_control.SideSlopes,
1402
+ )
1403
+ DERIVEDPARAMETERS = (
1404
+ wq_derived.BottomDepths,
1405
+ wq_derived.TrapezeHeights,
1406
+ wq_derived.SlopeWidths,
1407
+ )
1408
+ RESULTSEQUENCES = (
1409
+ wq_factors.WaterDepth,
1410
+ wq_factors.WaterLevel,
1411
+ wq_factors.WettedAreas,
1412
+ wq_factors.WettedArea,
1413
+ wq_factors.WettedPerimeters,
1414
+ wq_factors.WettedPerimeter,
1415
+ )
1416
+
1417
+
1418
+ class Use_WaterLevel_V1(modeltools.SetAutoMethod):
1419
+ """Set the water level in m and use it to calculate all other properties.
1420
+
1421
+ Example:
1422
+
1423
+ >>> from hydpy.models.wq import *
1424
+ >>> parameterstep()
1425
+ >>> nmbtrapezes(2)
1426
+ >>> bottomlevels(1.0, 3.0)
1427
+ >>> bottomwidths(2.0, 2.0)
1428
+ >>> sideslopes(0.0, 0.0)
1429
+ >>> bottomslope(0.01)
1430
+ >>> stricklercoefficients(20.0, 40.0)
1431
+ >>> derived.bottomdepths.update()
1432
+ >>> derived.trapezeheights.update()
1433
+ >>> derived.slopewidths.update()
1434
+ >>> derived.perimeterderivatives.update()
1435
+ >>> model.use_waterlevel_v1(4.0)
1436
+ >>> factors.waterdepth
1437
+ waterdepth(3.0)
1438
+ >>> factors.waterlevel
1439
+ waterlevel(4.0)
1440
+ >>> factors.wettedarea
1441
+ wettedarea(8.0)
1442
+ >>> fluxes.discharge
1443
+ discharge(14.945466)
1444
+ >>> factors.celerity
1445
+ celerity(2.642957)
1446
+ """
1447
+
1448
+ SUBMETHODS = (
1449
+ Set_WaterLevel_V1,
1450
+ Calc_WaterDepth_V1,
1451
+ Calc_WettedAreas_V1,
1452
+ Calc_WettedArea_V1,
1453
+ Calc_WettedPerimeters_V1,
1454
+ Calc_WettedPerimeterDerivatives_V1,
1455
+ Calc_SurfaceWidths_V1,
1456
+ Calc_SurfaceWidth_V1,
1457
+ Calc_Discharges_V1,
1458
+ Calc_Discharge_V2,
1459
+ Calc_DischargeDerivatives_V1,
1460
+ Calc_DischargeDerivative_V1,
1461
+ Calc_Celerity_V1,
1462
+ )
1463
+ CONTROLPARAMETERS = (
1464
+ wq_control.NmbTrapezes,
1465
+ wq_control.BottomLevels,
1466
+ wq_control.BottomWidths,
1467
+ wq_control.SideSlopes,
1468
+ wq_control.StricklerCoefficients,
1469
+ wq_control.BottomSlope,
1470
+ )
1471
+ DERIVEDPARAMETERS = (
1472
+ wq_derived.BottomDepths,
1473
+ wq_derived.TrapezeHeights,
1474
+ wq_derived.SlopeWidths,
1475
+ wq_derived.PerimeterDerivatives,
1476
+ )
1477
+ RESULTSEQUENCES = (
1478
+ wq_factors.WaterLevel,
1479
+ wq_factors.WaterDepth,
1480
+ wq_factors.WettedAreas,
1481
+ wq_factors.WettedArea,
1482
+ wq_factors.WettedPerimeters,
1483
+ wq_factors.WettedPerimeterDerivatives,
1484
+ wq_factors.SurfaceWidths,
1485
+ wq_factors.SurfaceWidth,
1486
+ wq_factors.DischargeDerivatives,
1487
+ wq_factors.DischargeDerivative,
1488
+ wq_factors.Celerity,
1489
+ wq_fluxes.Discharges,
1490
+ wq_fluxes.Discharge,
1491
+ )
1492
+
1493
+
1494
+ class Use_WaterLevel_V2(modeltools.SetAutoMethod):
1495
+ """Set the water level in m and use it to calculate all other properties.
1496
+
1497
+ Example:
1498
+
1499
+ >>> from hydpy.models.wq import *
1500
+ >>> parameterstep()
1501
+ >>> nmbtrapezes(2)
1502
+ >>> bottomlevels(1.0, 3.0)
1503
+ >>> bottomwidths(2.0, 2.0)
1504
+ >>> sideslopes(0.0, 0.0)
1505
+ >>> derived.bottomdepths.update()
1506
+ >>> derived.trapezeheights.update()
1507
+ >>> derived.slopewidths.update()
1508
+ >>> model.use_waterlevel_v2(4.0)
1509
+ >>> factors.waterdepth
1510
+ waterdepth(3.0)
1511
+ >>> factors.waterlevel
1512
+ waterlevel(4.0)
1513
+ >>> factors.wettedarea
1514
+ wettedarea(8.0)
1515
+ >>> factors.wettedperimeter
1516
+ wettedperimeter(12.0)
1517
+ """
1518
+
1519
+ SUBMETHODS = (
1520
+ Set_WaterLevel_V1,
1521
+ Calc_WaterDepth_V1,
1522
+ Calc_WettedAreas_V1,
1523
+ Calc_WettedArea_V1,
1524
+ Calc_WettedPerimeters_V1,
1525
+ Calc_WettedPerimeter_V1,
1526
+ )
1527
+ CONTROLPARAMETERS = (
1528
+ wq_control.NmbTrapezes,
1529
+ wq_control.BottomLevels,
1530
+ wq_control.BottomWidths,
1531
+ wq_control.SideSlopes,
1532
+ )
1533
+ DERIVEDPARAMETERS = (
1534
+ wq_derived.BottomDepths,
1535
+ wq_derived.TrapezeHeights,
1536
+ wq_derived.SlopeWidths,
1537
+ )
1538
+ RESULTSEQUENCES = (
1539
+ wq_factors.WaterDepth,
1540
+ wq_factors.WaterLevel,
1541
+ wq_factors.WettedAreas,
1542
+ wq_factors.WettedArea,
1543
+ wq_factors.WettedPerimeters,
1544
+ wq_factors.WettedPerimeter,
1545
+ )
1546
+
1547
+
1548
+ class Use_WettedArea_V1(modeltools.SetAutoMethod):
1549
+ """Set the wetted area in m² and use it to calculate all other properties.
1550
+
1551
+ Example:
1552
+
1553
+ >>> from hydpy.models.wq import *
1554
+ >>> parameterstep()
1555
+ >>> nmbtrapezes(2)
1556
+ >>> bottomlevels(1.0, 3.0)
1557
+ >>> bottomwidths(2.0, 2.0)
1558
+ >>> sideslopes(0.0, 0.0)
1559
+ >>> derived.bottomdepths.update()
1560
+ >>> derived.trapezeheights.update()
1561
+ >>> derived.slopewidths.update()
1562
+ >>> derived.trapezeareas.update()
1563
+ >>> model.use_wettedarea_v1(8.0)
1564
+ >>> factors.waterdepth
1565
+ waterdepth(3.0)
1566
+ >>> factors.waterlevel
1567
+ waterlevel(4.0)
1568
+ >>> factors.wettedarea
1569
+ wettedarea(8.0)
1570
+ >>> factors.wettedperimeter
1571
+ wettedperimeter(12.0)
1572
+ """
1573
+
1574
+ SUBMETHODS = (
1575
+ Set_WettedArea_V1,
1576
+ Calc_WaterDepth_V2,
1577
+ Calc_WaterLevel_V1,
1578
+ Calc_WettedAreas_V1,
1579
+ Calc_WettedArea_V1,
1580
+ Calc_WettedPerimeters_V1,
1581
+ Calc_WettedPerimeter_V1,
1582
+ )
1583
+ CONTROLPARAMETERS = (
1584
+ wq_control.NmbTrapezes,
1585
+ wq_control.BottomLevels,
1586
+ wq_control.BottomWidths,
1587
+ wq_control.SideSlopes,
1588
+ )
1589
+ DERIVEDPARAMETERS = (
1590
+ wq_derived.BottomDepths,
1591
+ wq_derived.TrapezeHeights,
1592
+ wq_derived.SlopeWidths,
1593
+ wq_derived.TrapezeAreas,
1594
+ )
1595
+ RESULTSEQUENCES = (
1596
+ wq_factors.WaterDepth,
1597
+ wq_factors.WaterLevel,
1598
+ wq_factors.WettedAreas,
1599
+ wq_factors.WettedArea,
1600
+ wq_factors.WettedPerimeters,
1601
+ wq_factors.WettedPerimeter,
1602
+ )
1603
+
1604
+
1605
+ class Get_WaterDepth_V1(modeltools.Method):
1606
+ """Get the water depth in m.
1607
+
1608
+ Example:
1609
+
1610
+ >>> from hydpy.models.wq import *
1611
+ >>> parameterstep()
1612
+ >>> factors.waterdepth = 2.0
1613
+ >>> model.get_waterdepth_v1()
1614
+ 2.0
1615
+ """
1616
+
1617
+ REQUIREDSEQUENCES = (wq_factors.WaterDepth,)
1618
+
1619
+ @staticmethod
1620
+ def __call__(model: modeltools.Model) -> float:
1621
+ fac = model.sequences.factors.fastaccess
1622
+
1623
+ return fac.waterdepth
1624
+
1625
+
1626
+ class Get_WaterLevel_V1(modeltools.Method):
1627
+ """Get the water level in m.
1628
+
1629
+ Example:
1630
+
1631
+ >>> from hydpy.models.wq import *
1632
+ >>> parameterstep()
1633
+ >>> factors.waterlevel = 2.0
1634
+ >>> model.get_waterlevel_v1()
1635
+ 2.0
1636
+ """
1637
+
1638
+ REQUIREDSEQUENCES = (wq_factors.WaterLevel,)
1639
+
1640
+ @staticmethod
1641
+ def __call__(model: modeltools.Model) -> float:
1642
+ fac = model.sequences.factors.fastaccess
1643
+
1644
+ return fac.waterlevel
1645
+
1646
+
1647
+ class Get_WettedArea_V1(modeltools.Method):
1648
+ """Get the wetted area in m².
1649
+
1650
+ Example:
1651
+
1652
+ >>> from hydpy.models.wq import *
1653
+ >>> parameterstep()
1654
+ >>> factors.wettedarea = 2.0
1655
+ >>> model.get_wettedarea_v1()
1656
+ 2.0
1657
+ """
1658
+
1659
+ REQUIREDSEQUENCES = (wq_factors.WettedArea,)
1660
+
1661
+ @staticmethod
1662
+ def __call__(model: modeltools.Model) -> float:
1663
+ fac = model.sequences.factors.fastaccess
1664
+
1665
+ return fac.wettedarea
1666
+
1667
+
1668
+ class Get_WettedPerimeter_V1(modeltools.Method):
1669
+ """Get the wetted perimeter in m.
1670
+
1671
+ Example:
1672
+
1673
+ >>> from hydpy.models.wq import *
1674
+ >>> parameterstep()
1675
+ >>> factors.wettedperimeter = 2.0
1676
+ >>> model.get_wettedperimeter_v1()
1677
+ 2.0
1678
+ """
1679
+
1680
+ REQUIREDSEQUENCES = (wq_factors.WettedPerimeter,)
1681
+
1682
+ @staticmethod
1683
+ def __call__(model: modeltools.Model) -> float:
1684
+ fac = model.sequences.factors.fastaccess
1685
+
1686
+ return fac.wettedperimeter
1687
+
1688
+
1689
+ class Get_SurfaceWidth_V1(modeltools.Method):
1690
+ """Get the surface width in m.
1691
+
1692
+ Example:
1693
+
1694
+ >>> from hydpy.models.wq import *
1695
+ >>> parameterstep()
1696
+ >>> factors.surfacewidth = 2.0
1697
+ >>> model.get_surfacewidth_v1()
1698
+ 2.0
1699
+ """
1700
+
1701
+ REQUIREDSEQUENCES = (wq_factors.SurfaceWidth,)
1702
+
1703
+ @staticmethod
1704
+ def __call__(model: modeltools.Model) -> float:
1705
+ fac = model.sequences.factors.fastaccess
1706
+
1707
+ return fac.surfacewidth
1708
+
1709
+
1710
+ class Get_Discharge_V1(modeltools.Method):
1711
+ """Get the discharge in m³/s.
1712
+
1713
+ Example:
1714
+
1715
+ >>> from hydpy.models.wq import *
1716
+ >>> parameterstep()
1717
+ >>> fluxes.discharge = 2.0
1718
+ >>> model.get_discharge_v1()
1719
+ 2.0
1720
+ """
1721
+
1722
+ REQUIREDSEQUENCES = (wq_fluxes.Discharge,)
1723
+
1724
+ @staticmethod
1725
+ def __call__(model: modeltools.Model) -> float:
1726
+ flu = model.sequences.fluxes.fastaccess
1727
+
1728
+ return flu.discharge
1729
+
1730
+
1731
+ class Get_Celerity_V1(modeltools.Method):
1732
+ """Get the wave celerity in m/s.
1733
+
1734
+ Example:
1735
+
1736
+ >>> from hydpy.models.wq import *
1737
+ >>> parameterstep()
1738
+ >>> factors.celerity = 2.0
1739
+ >>> model.get_celerity_v1()
1740
+ 2.0
1741
+ """
1742
+
1743
+ REQUIREDSEQUENCES = (wq_factors.Celerity,)
1744
+
1745
+ @staticmethod
1746
+ def __call__(model: modeltools.Model) -> float:
1747
+ fac = model.sequences.factors.fastaccess
1748
+
1749
+ return fac.celerity
1750
+
1751
+
1752
+ class Model(modeltools.AdHocModel, modeltools.SubmodelInterface):
1753
+ """|wq.DOCNAME.complete|."""
1754
+
1755
+ DOCNAME = modeltools.DocName(short="WQ")
1756
+ __HYDPY_ROOTMODEL__ = None
1757
+
1758
+ INLET_METHODS = ()
1759
+ RECEIVER_METHODS = ()
1760
+ RUN_METHODS = ()
1761
+ INTERFACE_METHODS = (
1762
+ Calculate_Discharge_V1,
1763
+ Set_WaterDepth_V1,
1764
+ Set_WaterLevel_V1,
1765
+ Set_WettedArea_V1,
1766
+ Use_WaterDepth_V1,
1767
+ Use_WaterDepth_V2,
1768
+ Use_WaterLevel_V1,
1769
+ Use_WaterLevel_V2,
1770
+ Use_WettedArea_V1,
1771
+ Get_WaterDepth_V1,
1772
+ Get_WaterLevel_V1,
1773
+ Get_WettedArea_V1,
1774
+ Get_WettedPerimeter_V1,
1775
+ Get_SurfaceWidth_V1,
1776
+ Get_Discharge_V1,
1777
+ Get_Celerity_V1,
1778
+ )
1779
+ ADD_METHODS = (
1780
+ Calc_WaterDepth_V1,
1781
+ Calc_WaterDepth_V2,
1782
+ Calc_WaterLevel_V1,
1783
+ Calc_WettedAreas_V1,
1784
+ Calc_WettedArea_V1,
1785
+ Calc_WettedPerimeters_V1,
1786
+ Calc_WettedPerimeter_V1,
1787
+ Calc_WettedPerimeterDerivatives_V1,
1788
+ Calc_SurfaceWidths_V1,
1789
+ Calc_SurfaceWidth_V1,
1790
+ Calc_Discharges_V1,
1791
+ Calc_Discharge_V2,
1792
+ Calc_DischargeDerivatives_V1,
1793
+ Calc_DischargeDerivative_V1,
1794
+ Calc_Celerity_V1,
1795
+ )
1796
+ OUTLET_METHODS = ()
1797
+ SENDER_METHODS = ()
1798
+ SUBMODELINTERFACES = ()
1799
+ SUBMODELS = ()
1800
+
1801
+
1802
+ class TrapezeModel(modeltools.AdHocModel):
1803
+ """Base class for |wq.DOCNAME.long| models that rely on trapezoidal geometries."""
1804
+
1805
+ def plot(
1806
+ self,
1807
+ *,
1808
+ ymax: float | None = None,
1809
+ color: str | None = None,
1810
+ label: bool | str = False
1811
+ ) -> pyplot.Figure:
1812
+ """Plot the channel profile.
1813
+
1814
+ See the main documentation of application model |wq_trapeze| for more
1815
+ information.
1816
+ """
1817
+ con = self.parameters.control
1818
+ der = self.parameters.derived
1819
+ n = con.nmbtrapezes.value
1820
+ bl = con.bottomlevels.values
1821
+ bw = con.bottomwidths.values
1822
+ ss = con.sideslopes.values
1823
+ sw = der.slopewidths.values
1824
+ th = der.trapezeheights.values
1825
+
1826
+ xs = [0.0]
1827
+ ys = [bl[0]]
1828
+
1829
+ def _add(dx: float, dy: float) -> None:
1830
+ xs.append(xs[-1] + dx)
1831
+ ys.append(ys[-1] + dy)
1832
+ xs.insert(0, -xs[-1])
1833
+ ys.insert(0, ys[-1])
1834
+
1835
+ for i in range(n):
1836
+ _add(dx=bw[i] / 2.0, dy=0.0)
1837
+ if i < n - 1:
1838
+ _add(dx=sw[i] / 2.0, dy=th[i])
1839
+
1840
+ if (ymax is None) or (ymax <= ys[-1]):
1841
+ if n == 1:
1842
+ ymax = bl[0] + (bw[0] / 2.0 if bw[0] > 0.0 else 1.0)
1843
+ else:
1844
+ ymax = bl[0] + (bl[-1] - bl[0]) / n * (n + 1)
1845
+
1846
+ dy_ = ymax - bl[-1]
1847
+ dx_ = dy_ * ss[-1]
1848
+ _add(dx=dx_, dy=dy_)
1849
+
1850
+ pyplot.xlabel("distance from centre [m]")
1851
+ pyplot.ylabel("elevation [m]")
1852
+ if isinstance(label, bool) and label:
1853
+ label = objecttools.devicename(self)
1854
+ if isinstance(label, str):
1855
+ pyplot.plot(xs, ys, color=color, label=label)
1856
+ pyplot.legend()
1857
+ else:
1858
+ pyplot.plot(xs, ys, color=color)
1859
+
1860
+ return pyplot.gcf()
1861
+
1862
+
1863
+ class Base_DischargeModel_V2(dischargeinterfaces.DischargeModel_V2):
1864
+ """Base class for |wq.DOCNAME.long| models that comply with the |DischargeModel_V2|
1865
+ submodel interface."""
1866
+
1867
+ @importtools.define_targetparameter(wq_control.ChannelDepth)
1868
+ def prepare_channeldepth(self, channeldepth: float) -> None:
1869
+ """Set the channel depth in m.
1870
+
1871
+ >>> from hydpy.models.wq_walrus import *
1872
+ >>> parameterstep()
1873
+ >>> model.prepare_channeldepth(2.0)
1874
+ >>> channeldepth
1875
+ channeldepth(2.0)
1876
+ """
1877
+ self.parameters.control.channeldepth(channeldepth)
1878
+
1879
+ @importtools.define_targetparameter(wq_control.CrestHeightTolerance)
1880
+ def prepare_tolerance(self, tolerance: float) -> None:
1881
+ """Set the depth-related smoothing parameter in m.
1882
+
1883
+ >>> from hydpy.models.wq_walrus import *
1884
+ >>> parameterstep()
1885
+ >>> model.prepare_tolerance(2.0)
1886
+ >>> crestheighttolerance
1887
+ crestheighttolerance(2.0)
1888
+ """
1889
+ self.parameters.control.crestheighttolerance(tolerance)