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,838 @@
1
+ # pylint: disable=missing-module-docstring
2
+
3
+ # import...
4
+ # ...from HydPy
5
+ from hydpy.core import modeltools
6
+ from hydpy.cythons import modelutils
7
+ from hydpy.auxs import roottools
8
+ from hydpy.interfaces import routinginterfaces
9
+ from hydpy.core.typingtools import *
10
+
11
+ from hydpy.models.musk import musk_control
12
+ from hydpy.models.musk import musk_derived
13
+ from hydpy.models.musk import musk_solver
14
+ from hydpy.models.musk import musk_fluxes
15
+ from hydpy.models.musk import musk_factors
16
+ from hydpy.models.musk import musk_states
17
+ from hydpy.models.musk import musk_inlets
18
+ from hydpy.models.musk import musk_outlets
19
+
20
+
21
+ class Pick_Inflow_V1(modeltools.Method):
22
+ """Assign the actual value of the inlet sequence to the inflow sequence."""
23
+
24
+ REQUIREDSEQUENCES = (musk_inlets.Q,)
25
+ RESULTSEQUENCES = (musk_fluxes.Inflow,)
26
+
27
+ @staticmethod
28
+ def __call__(model: modeltools.SegmentModel) -> None:
29
+ inl = model.sequences.inlets.fastaccess
30
+ flu = model.sequences.fluxes.fastaccess
31
+ flu.inflow = 0.0
32
+ for idx in range(inl.len_q):
33
+ flu.inflow += inl.q[idx][0]
34
+
35
+
36
+ class Update_Discharge_V1(modeltools.Method):
37
+ r"""Assign the inflow to the start point of the first channel segment.
38
+
39
+ Example:
40
+
41
+ >>> from hydpy.models.musk import *
42
+ >>> parameterstep()
43
+ >>> nmbsegments(3)
44
+ >>> fluxes.inflow = 2.0
45
+ >>> model.update_discharge_v1()
46
+ >>> states.discharge
47
+ discharge(2.0, nan, nan, nan)
48
+ """
49
+
50
+ REQUIREDSEQUENCES = (musk_fluxes.Inflow,)
51
+ UPDATEDSEQUENCES = (musk_states.Discharge,)
52
+
53
+ @staticmethod
54
+ def __call__(model: modeltools.SegmentModel) -> None:
55
+ flu = model.sequences.fluxes.fastaccess
56
+ sta = model.sequences.states.fastaccess
57
+ sta.discharge[0] = flu.inflow
58
+
59
+
60
+ class Calc_Discharge_V1(modeltools.Method):
61
+ r"""Apply the routing equation with fixed coefficients.
62
+
63
+ Basic equation:
64
+ :math:`Q_{space+1,time+1} =
65
+ Coefficients_0 \cdot Discharge_{space,time+1} +
66
+ Coefficients_1 \cdot Discharge_{space,time} +
67
+ Coefficients_2 \cdot Discharge_{space+1,time}`
68
+
69
+ Examples:
70
+
71
+ First, define a channel divided into four segments:
72
+
73
+ >>> from hydpy.models.musk import *
74
+ >>> parameterstep()
75
+ >>> nmbsegments(4)
76
+
77
+ The following coefficients correspond to pure translation without diffusion:
78
+
79
+ >>> coefficients(0.0, 1.0, 0.0)
80
+
81
+ The initial flow is 2 m³/s:
82
+
83
+ >>> states.discharge.old = 2.0
84
+ >>> states.discharge.new = 2.0
85
+
86
+ Successive invocations of method |Calc_Discharge_V1| shift the given inflows to
87
+ the next lower endpoints at each time step:
88
+
89
+ >>> states.discharge[0] = 5.0
90
+ >>> model.run_segments(model.calc_discharge_v1)
91
+ >>> model.new2old()
92
+ >>> states.discharge
93
+ discharge(5.0, 2.0, 2.0, 2.0, 2.0)
94
+
95
+ >>> states.discharge[0] = 8.0
96
+ >>> model.run_segments(model.calc_discharge_v1)
97
+ >>> model.new2old()
98
+ >>> states.discharge
99
+ discharge(8.0, 5.0, 2.0, 2.0, 2.0)
100
+
101
+ >>> states.discharge[0] = 6.0
102
+ >>> model.run_segments(model.calc_discharge_v1)
103
+ >>> model.new2old()
104
+ >>> states.discharge
105
+ discharge(6.0, 8.0, 5.0, 2.0, 2.0)
106
+
107
+ We repeat the example with strong wave diffusion:
108
+
109
+ >>> coefficients(0.5, 0.0, 0.5)
110
+
111
+ >>> states.discharge.old = 2.0
112
+ >>> states.discharge.new = 2.0
113
+
114
+ >>> states.discharge[0] = 5.0
115
+ >>> model.run_segments(model.calc_discharge_v1)
116
+ >>> model.new2old()
117
+ >>> states.discharge
118
+ discharge(5.0, 3.5, 2.75, 2.375, 2.1875)
119
+
120
+ >>> states.discharge[0] = 8.0
121
+ >>> model.run_segments(model.calc_discharge_v1)
122
+ >>> model.new2old()
123
+ >>> states.discharge
124
+ discharge(8.0, 5.75, 4.25, 3.3125, 2.75)
125
+
126
+ >>> states.discharge[0] = 6.0
127
+ >>> model.run_segments(model.calc_discharge_v1)
128
+ >>> model.new2old()
129
+ >>> states.discharge
130
+ discharge(6.0, 5.875, 5.0625, 4.1875, 3.46875)
131
+ """
132
+
133
+ CONTROLPARAMETERS = (musk_control.Coefficients,)
134
+ UPDATEDSEQUENCES = (musk_states.Discharge,)
135
+
136
+ @staticmethod
137
+ def __call__(model: modeltools.SegmentModel) -> None:
138
+ con = model.parameters.control.fastaccess
139
+ new = model.sequences.states.fastaccess_new
140
+ old = model.sequences.states.fastaccess_old
141
+ i = model.idx_segment
142
+ new.discharge[i + 1] = (
143
+ con.coefficients[0] * new.discharge[i]
144
+ + con.coefficients[1] * old.discharge[i]
145
+ + con.coefficients[2] * old.discharge[i + 1]
146
+ )
147
+
148
+
149
+ class Calc_ReferenceDischarge_V1(modeltools.Method):
150
+ r"""Estimate the reference discharge according to :cite:t:`ref-Todini2007`.
151
+
152
+ Basic equations (equations 45 and 46):
153
+ :math:`ReferenceDischarge_{next, new} =
154
+ \frac{Discharge_{last, new} + Discharge^*_{next, new}}{2}`
155
+
156
+ :math:`Discharge^*_{next, new} = Discharge_{next, old} +
157
+ (Discharge_{last, new} - Discharge_{last, old})`
158
+
159
+ Examples:
160
+
161
+ The Muskingum-Cunge-Todini method requires an initial guess for the new
162
+ discharge value at the segment endpoint, which other methods have to improve
163
+ later. However, the final discharge value will still depend on the initial
164
+ estimate. Hence, :cite:t:`ref-Todini2007` suggests an iterative refinement by
165
+ repeating all relevant methods. Method |Calc_ReferenceDischarge_V1| plays a
166
+ significant role in controlling this refinement. It calculates the initial
167
+ estimate as defined in the basic equationsDuring the first run (when the index
168
+ property |Idx_Run| is zero):
169
+
170
+ >>> from hydpy.models.musk import *
171
+ >>> parameterstep()
172
+ >>> nmbsegments(1)
173
+ >>> states.discharge.old = 3.0, 2.0
174
+ >>> states.discharge.new = 4.0, 5.0
175
+ >>> model.idx_run = 0
176
+ >>> model.calc_referencedischarge_v1()
177
+ >>> fluxes.referencedischarge
178
+ referencedischarge(3.5)
179
+
180
+ However, subsequent runs use the already available estimate calculated in the
181
+ last iteration.:
182
+
183
+ >>> model.idx_run = 1
184
+ >>> model.calc_referencedischarge_v1()
185
+ >>> fluxes.referencedischarge
186
+ referencedischarge(4.5)
187
+ """
188
+
189
+ REQUIREDSEQUENCES = (musk_states.Discharge,)
190
+ RESULTSEQUENCES = (musk_fluxes.ReferenceDischarge,)
191
+
192
+ @staticmethod
193
+ def __call__(model: modeltools.SegmentModel) -> None:
194
+ flu = model.sequences.fluxes.fastaccess
195
+ old = model.sequences.states.fastaccess_old
196
+ new = model.sequences.states.fastaccess_new
197
+ i = model.idx_segment
198
+ if model.idx_run == 0:
199
+ est: float = old.discharge[i + 1] + new.discharge[i] - old.discharge[i]
200
+ else:
201
+ est = new.discharge[i + 1]
202
+ flu.referencedischarge[i] = (new.discharge[i] + est) / 2.0
203
+
204
+
205
+ class Return_Discharge_CrossSectionModel_V1(modeltools.Method):
206
+ """Let a submodel that follows the |CrossSectionModel_V1| submodel interface
207
+ calculate the discharge for the given water depth and return it.
208
+
209
+ See the documentation on method |Return_ReferenceDischargeError_V1| for an example.
210
+ """
211
+
212
+ @staticmethod
213
+ def __call__(
214
+ model: modeltools.SegmentModel,
215
+ wqmodel: routinginterfaces.CrossSectionModel_V1,
216
+ waterdepth: float,
217
+ ) -> float:
218
+ wqmodel.use_waterdepth(waterdepth)
219
+ return wqmodel.get_discharge()
220
+
221
+
222
+ class Return_ReferenceDischargeError_V1(modeltools.Method):
223
+ r"""Calculate the difference between the discharge corresponding to the given water
224
+ depth and the reference discharge.
225
+
226
+ Basic equation:
227
+ :math:`Return\_Discharge\_V1(waterdepth) - ReferenceDischarge`
228
+
229
+ Example:
230
+
231
+ We use the submodel |wq_trapeze_strickler| as an example:
232
+
233
+ >>> from hydpy.models.musk_mct import *
234
+ >>> parameterstep()
235
+ >>> nmbsegments(1)
236
+ >>> bottomslope(0.01)
237
+ >>> with model.add_wqmodel_v1("wq_trapeze_strickler"):
238
+ ... nmbtrapezes(1)
239
+ ... bottomlevels(0.0)
240
+ ... bottomwidths(2.0)
241
+ ... sideslopes(2.0)
242
+ ... stricklercoefficients(20.0)
243
+ >>> fluxes.referencedischarge = 50.0
244
+ >>> from hydpy import round_
245
+ >>> round_(model.return_referencedischargeerror_v1(3.0))
246
+ 14.475285
247
+ """
248
+
249
+ SUBMETHODS = (Return_Discharge_CrossSectionModel_V1,)
250
+ REQUIREDSEQUENCES = (musk_fluxes.ReferenceDischarge,)
251
+
252
+ @staticmethod
253
+ def __call__(model: modeltools.SegmentModel, waterdepth: float) -> float:
254
+ flu = model.sequences.fluxes.fastaccess
255
+ i = model.idx_segment
256
+ return (
257
+ model.return_discharge_crosssectionmodel_v1(
258
+ cast(routinginterfaces.CrossSectionModel_V1, model.wqmodel), waterdepth
259
+ )
260
+ - flu.referencedischarge[i]
261
+ )
262
+
263
+
264
+ class Calc_ReferenceWaterDepth_V1(modeltools.Method):
265
+ r"""Find the reference water depth via |Pegasus| iteration.
266
+
267
+ Examples:
268
+
269
+ The following test calculation extends the example of the documentation on
270
+ method |Return_ReferenceDischargeError_V1|. The first and the last channel
271
+ segments demonstrate that method |Calc_ReferenceWaterDepth_V1| restricts the
272
+ Pegasus search to the lowest water depth of 0 m and the highest water depth of
273
+ 1000 m:
274
+
275
+ >>> from hydpy.models.musk_mct import *
276
+ >>> parameterstep()
277
+ >>> catchmentarea(100.0)
278
+ >>> nmbsegments(5)
279
+ >>> bottomslope(0.01)
280
+ >>> with model.add_wqmodel_v1("wq_trapeze_strickler"):
281
+ ... nmbtrapezes(1)
282
+ ... bottomlevels(0.0)
283
+ ... bottomwidths(2.0)
284
+ ... sideslopes(2.0)
285
+ ... stricklercoefficients(20.0)
286
+ >>> solver.tolerancewaterdepth.update()
287
+ >>> solver.tolerancedischarge.update()
288
+ >>> fluxes.referencedischarge = -10.0, 0.0, 64.475285, 1000.0, 1000000000.0
289
+ >>> model.run_segments(model.calc_referencewaterdepth_v1)
290
+ >>> factors.referencewaterdepth
291
+ referencewaterdepth(0.0, 0.0, 3.0, 9.199035, 1000.0)
292
+
293
+ Repeated applications of |Calc_ReferenceWaterDepth_V1| should always yield the
294
+ same results but are often more efficient than the initial calculation because
295
+ they use old reference water depth estimates to gain more precise initial
296
+ search intervals:
297
+
298
+ >>> model.run_segments(model.calc_referencewaterdepth_v1)
299
+ >>> factors.referencewaterdepth
300
+ referencewaterdepth(0.0, 0.0, 3.0, 9.199035, 1000.0)
301
+
302
+ The Pegasus algorithm stops when the search interval is smaller than the
303
+ tolerance value defined by the |ToleranceWaterDepth| parameter or if the
304
+ difference to the target discharge is less than the tolerance value defined by
305
+ the |ToleranceDischarge| parameter. By default, the water depth-related
306
+ tolerance is zero; hence, the discharge-related tolerance must stop the
307
+ iteration:
308
+
309
+ >>> solver.tolerancewaterdepth
310
+ tolerancewaterdepth(0.0)
311
+ >>> solver.tolerancedischarge
312
+ tolerancedischarge(0.0001)
313
+
314
+ Increase at least one parameter to reduce computation time:
315
+
316
+ >>> solver.tolerancewaterdepth(0.1)
317
+ >>> factors.referencewaterdepth = nan
318
+ >>> model.run_segments(model.calc_referencewaterdepth_v1)
319
+ >>> factors.referencewaterdepth
320
+ referencewaterdepth(0.0, 0.0, 3.000295, 9.196508, 1000.0)
321
+ """
322
+
323
+ SUBMETHODS = (Return_ReferenceDischargeError_V1,)
324
+ SOLVERPARAMETERS = (musk_solver.ToleranceWaterDepth, musk_solver.ToleranceDischarge)
325
+ REQUIREDSEQUENCES = (musk_fluxes.ReferenceDischarge,)
326
+ RESULTSEQUENCES = (musk_factors.ReferenceWaterDepth,)
327
+
328
+ @staticmethod
329
+ def __call__(model: modeltools.SegmentModel) -> None:
330
+ sol = model.parameters.solver.fastaccess
331
+ fac = model.sequences.factors.fastaccess
332
+ flu = model.sequences.fluxes.fastaccess
333
+ i = model.idx_segment
334
+ wl: float = fac.referencewaterdepth[i]
335
+ if modelutils.isnan(wl) or modelutils.isinf(wl):
336
+ mn: float = 0.0
337
+ mx: float = 2.0
338
+ elif wl <= 0.001:
339
+ mn, mx = 0.0, 0.01
340
+ else:
341
+ mn, mx = 0.9 * wl, 1.1 * wl
342
+ tol_q: float = min(sol.tolerancedischarge, flu.referencedischarge[i] / 10.0)
343
+ fac.referencewaterdepth[i] = model.pegasusreferencewaterdepth.find_x(
344
+ mn, mx, 0.0, 1000.0, sol.tolerancewaterdepth, tol_q, 100
345
+ )
346
+
347
+
348
+ class Calc_WettedArea_SurfaceWidth_Celerity_CrossSectionModel_V1(modeltools.Method):
349
+ """Let a submodel that follows the |CrossSectionModel_V1| interface calculate all
350
+ its properties based on the current reference water level and query the wetted
351
+ area, the surface width, and the celerity."""
352
+
353
+ SUBMETHODS = ()
354
+ REQUIREDSEQUENCES = (musk_factors.ReferenceWaterDepth,)
355
+ RESULTSEQUENCES = (
356
+ musk_factors.WettedArea,
357
+ musk_factors.SurfaceWidth,
358
+ musk_factors.Celerity,
359
+ )
360
+
361
+ @staticmethod
362
+ def __call__(
363
+ model: modeltools.SegmentModel, wqmodel: routinginterfaces.CrossSectionModel_V1
364
+ ) -> None:
365
+ fac = model.sequences.factors.fastaccess
366
+ i = model.idx_segment
367
+ wqmodel.use_waterdepth(fac.referencewaterdepth[i])
368
+ fac.wettedarea[i] = wqmodel.get_wettedarea()
369
+ fac.surfacewidth[i] = wqmodel.get_surfacewidth()
370
+ fac.celerity[i] = wqmodel.get_celerity()
371
+
372
+
373
+ class Calc_WettedArea_SurfaceWidth_Celerity_V1(modeltools.Method):
374
+ """Let a submodel that follows the |CrossSectionModel_V1| interface calculate all
375
+ its properties based on the current reference water level and query the wetted
376
+ area, the surface width, and the celerity.
377
+
378
+ Example:
379
+
380
+ We use the submodel |wq_trapeze_strickler| as an example:
381
+
382
+ >>> from hydpy.models.musk_mct import *
383
+ >>> parameterstep()
384
+ >>> nmbsegments(3)
385
+ >>> bottomslope(0.01)
386
+ >>> with model.add_wqmodel_v1("wq_trapeze_strickler"):
387
+ ... nmbtrapezes(1)
388
+ ... bottomlevels(0.0)
389
+ ... bottomwidths(2.0)
390
+ ... sideslopes(0.0)
391
+ ... stricklercoefficients(20.0)
392
+ >>> factors.referencewaterdepth = 1.0, 2.0, 3.0
393
+ >>> model.run_segments(model.calc_wettedarea_surfacewidth_celerity_v1)
394
+ >>> factors.wettedarea
395
+ wettedarea(2.0, 4.0, 6.0)
396
+ >>> factors.surfacewidth
397
+ surfacewidth(2.0, 2.0, 2.0)
398
+ >>> factors.celerity
399
+ celerity(1.679895, 1.86546, 1.926124)
400
+ """
401
+
402
+ SUBMETHODS = (Calc_WettedArea_SurfaceWidth_Celerity_CrossSectionModel_V1,)
403
+ REQUIREDSEQUENCES = (musk_factors.ReferenceWaterDepth,)
404
+ RESULTSEQUENCES = (
405
+ musk_factors.WettedArea,
406
+ musk_factors.SurfaceWidth,
407
+ musk_factors.Celerity,
408
+ )
409
+
410
+ @staticmethod
411
+ def __call__(model: modeltools.SegmentModel) -> None:
412
+ if model.wqmodel_typeid == 1:
413
+ model.calc_wettedarea_surfacewidth_celerity_crosssectionmodel_v1(
414
+ cast(routinginterfaces.CrossSectionModel_V1, model.wqmodel)
415
+ )
416
+
417
+
418
+ class Calc_CorrectingFactor_V1(modeltools.Method):
419
+ r"""Calculate the correcting factor according to :cite:t:`ref-Todini2007`.
420
+
421
+ Basic equation (equation 49):
422
+ :math:`CorrectingFactor = \frac{Celerity \cdot WettedArea}{ReferenceDischarge}`
423
+
424
+ Example:
425
+
426
+ The last segment shows that |Calc_CorrectingFactor_V1| prevents zero divisions
427
+ by setting the correcting factor to one when necessary:
428
+
429
+ >>> from hydpy.models.musk import *
430
+ >>> parameterstep()
431
+ >>> nmbsegments(3)
432
+ >>> factors.celerity = 1.0
433
+ >>> factors.wettedarea = 2.0, 2.0, 2.0
434
+ >>> fluxes.referencedischarge = 4.0, 2.0, 0.0
435
+ >>> model.run_segments(model.calc_correctingfactor_v1)
436
+ >>> factors.correctingfactor
437
+ correctingfactor(0.5, 1.0, 1.0)
438
+ """
439
+
440
+ REQUIREDSEQUENCES = (
441
+ musk_factors.Celerity,
442
+ musk_factors.WettedArea,
443
+ musk_fluxes.ReferenceDischarge,
444
+ )
445
+ RESULTSEQUENCES = (musk_factors.CorrectingFactor,)
446
+
447
+ @staticmethod
448
+ def __call__(model: modeltools.SegmentModel) -> None:
449
+ fac = model.sequences.factors.fastaccess
450
+ flu = model.sequences.fluxes.fastaccess
451
+ i = model.idx_segment
452
+ if flu.referencedischarge[i] == 0.0:
453
+ fac.correctingfactor[i] = 1.0
454
+ else:
455
+ fac.correctingfactor[i] = (
456
+ fac.celerity[i] * fac.wettedarea[i] / flu.referencedischarge[i]
457
+ )
458
+
459
+
460
+ class Calc_CourantNumber_V1(modeltools.Method):
461
+ r"""Calculate the Courant number according to :cite:t:`ref-Todini2007`.
462
+
463
+ Basic equation (equation 50):
464
+ :math:`CourantNumber =
465
+ \frac{Celerity \cdot Seconds}{CorrectingFactor \cdot 1000 \cdot SegmentLength}`
466
+
467
+ Example:
468
+
469
+ The last segment shows that |Calc_CourantNumber_V1| prevents zero divisions by
470
+ setting the courant number to zero when necessary:
471
+
472
+ >>> from hydpy.models.musk import *
473
+ >>> parameterstep()
474
+ >>> nmbsegments(5)
475
+ >>> derived.seconds(1000.0)
476
+ >>> derived.segmentlength(4.0)
477
+ >>> factors.celerity = 2.0
478
+ >>> factors.correctingfactor = 0.0, 0.5, 1.0, 2.0, inf
479
+ >>> fluxes.referencedischarge = 0.0, 1.0, 1.0, 1.0, 1.0
480
+ >>> model.run_segments(model.calc_courantnumber_v1)
481
+ >>> states.courantnumber
482
+ courantnumber(0.0, 1.0, 0.5, 0.25, 0.0)
483
+ """
484
+
485
+ DERIVEDPARAMETERS = (musk_derived.Seconds, musk_derived.SegmentLength)
486
+ REQUIREDSEQUENCES = (
487
+ musk_factors.Celerity,
488
+ musk_factors.CorrectingFactor,
489
+ musk_fluxes.ReferenceDischarge,
490
+ )
491
+ RESULTSEQUENCES = (musk_states.CourantNumber,)
492
+
493
+ @staticmethod
494
+ def __call__(model: modeltools.SegmentModel) -> None:
495
+ der = model.parameters.derived.fastaccess
496
+ fac = model.sequences.factors.fastaccess
497
+ flu = model.sequences.fluxes.fastaccess
498
+ sta = model.sequences.states.fastaccess
499
+ i = model.idx_segment
500
+ if flu.referencedischarge[i] == 0.0:
501
+ sta.courantnumber[i] = 0.0
502
+ else:
503
+ sta.courantnumber[i] = (fac.celerity[i] / fac.correctingfactor[i]) * (
504
+ der.seconds / (1000.0 * der.segmentlength)
505
+ )
506
+
507
+
508
+ class Calc_ReynoldsNumber_V1(modeltools.Method):
509
+ r"""Calculate the cell Reynolds number according to :cite:t:`ref-Todini2007`.
510
+
511
+ Basic equation (equation 51):
512
+ :math:`ReynoldsNumber = \frac{ReferenceDischarge}{CorrectingFactor \cdot
513
+ SurfaceWidth \cdot BottomSlope \cdot Celerity \cdot 1000 \cdot SegmentLength}`
514
+
515
+ Example:
516
+
517
+ The last segment shows that |Calc_ReynoldsNumber_V1| prevents zero divisions by
518
+ setting the cell reynolds number to zero when necessary:
519
+
520
+ >>> from hydpy.models.musk import *
521
+ >>> parameterstep()
522
+ >>> nmbsegments(5)
523
+ >>> bottomslope(0.01)
524
+ >>> derived.segmentlength(4.0)
525
+ >>> factors.surfacewidth = 5.0
526
+ >>> factors.celerity = 2.0
527
+ >>> factors.correctingfactor = 0.0, 0.5, 1.0, 2.0, inf
528
+ >>> fluxes.referencedischarge = 0.0, 10.0, 10.0, 10.0, 10.0
529
+ >>> model.run_segments(model.calc_reynoldsnumber_v1)
530
+ >>> states.reynoldsnumber
531
+ reynoldsnumber(0.0, 0.05, 0.025, 0.0125, 0.0)
532
+ """
533
+
534
+ CONTROLPARAMETERS = (musk_control.BottomSlope,)
535
+ DERIVEDPARAMETERS = (musk_derived.SegmentLength,)
536
+ REQUIREDSEQUENCES = (
537
+ musk_fluxes.ReferenceDischarge,
538
+ musk_factors.CorrectingFactor,
539
+ musk_factors.SurfaceWidth,
540
+ musk_factors.Celerity,
541
+ )
542
+ RESULTSEQUENCES = (musk_states.ReynoldsNumber,)
543
+
544
+ @staticmethod
545
+ def __call__(model: modeltools.SegmentModel) -> None:
546
+ con = model.parameters.control.fastaccess
547
+ der = model.parameters.derived.fastaccess
548
+ fac = model.sequences.factors.fastaccess
549
+ flu = model.sequences.fluxes.fastaccess
550
+ sta = model.sequences.states.fastaccess
551
+ i = model.idx_segment
552
+ if flu.referencedischarge[i] == 0.0:
553
+ sta.reynoldsnumber[i] = 0.0
554
+ else:
555
+ sta.reynoldsnumber[i] = flu.referencedischarge[i] / (
556
+ fac.correctingfactor[i]
557
+ * fac.surfacewidth[i]
558
+ * con.bottomslope
559
+ * fac.celerity[i]
560
+ * (1000.0 * der.segmentlength)
561
+ )
562
+
563
+
564
+ class Calc_Coefficient1_Coefficient2_Coefficient3_V1(modeltools.Method):
565
+ r"""Calculate the coefficients of the Muskingum working formula according to
566
+ :cite:t:`ref-Todini2007`.
567
+
568
+ Basic equations (equation 52, corrigendum):
569
+ :math:`Coefficient1 = \frac
570
+ {-1 + CourantNumber_{new} + ReynoldsNumber_{new}}
571
+ {1 + CourantNumber_{new} + ReynoldsNumber_{new}}`
572
+
573
+ :math:`Coefficient2 = \frac
574
+ {1 + CourantNumber_{old} - ReynoldsNumber_{old}}
575
+ {1 + CourantNumber_{new} + ReynoldsNumber_{new}}
576
+ \cdot \frac{CourantNumber_{new}}{CourantNumber_{old}}`
577
+
578
+ :math:`Coefficient3 = \frac
579
+ {1 - CourantNumber_{old} + ReynoldsNumber_{old}}
580
+ {1 + CourantNumber_{new} + ReynoldsNumber_{new}}
581
+ \cdot \frac{CourantNumber_{new}}{CourantNumber_{old}}`
582
+
583
+ Examples:
584
+
585
+ We make some effort to calculate consistent "old" and "new" Courant and
586
+ Reynolds numbers:
587
+
588
+ >>> from hydpy.models.musk import *
589
+ >>> parameterstep()
590
+ >>> nmbsegments(4)
591
+ >>> bottomslope(0.01)
592
+ >>> derived.seconds(1000.0)
593
+ >>> derived.segmentlength(4.0)
594
+ >>> factors.celerity = 2.0
595
+ >>> factors.surfacewidth = 5.0
596
+ >>> factors.correctingfactor = 0.5, 1.0, 2.0, inf
597
+ >>> fluxes.referencedischarge = 10.0
598
+ >>> model.run_segments(model.calc_courantnumber_v1)
599
+ >>> model.run_segments(model.calc_reynoldsnumber_v1)
600
+ >>> states.courantnumber.new2old()
601
+ >>> states.reynoldsnumber.new2old()
602
+ >>> fluxes.referencedischarge = 11.0
603
+ >>> model.run_segments(model.calc_courantnumber_v1)
604
+ >>> model.run_segments(model.calc_reynoldsnumber_v1)
605
+
606
+ Due to the consistency of its input data,
607
+ |Calc_Coefficient1_Coefficient2_Coefficient3_V1| calculates the three working
608
+ coefficients so that their sum is one:
609
+
610
+ >>> model.run_segments(model.calc_coefficient1_coefficient2_coefficient3_v1)
611
+ >>> factors.coefficient1
612
+ coefficient1(0.026764, -0.309329, -0.582591, -1.0)
613
+ >>> factors.coefficient2
614
+ coefficient2(0.948905, 0.96563, 0.979228, 1.0)
615
+ >>> factors.coefficient3
616
+ coefficient3(0.024331, 0.343699, 0.603363, 1.0)
617
+ >>> from hydpy import print_vector
618
+ >>> print_vector(
619
+ ... factors.coefficient1 + factors.coefficient2 + factors.coefficient3)
620
+ 1.0, 1.0, 1.0, 1.0
621
+
622
+ Note that the "old" Courant numbers of the last segment are zero.
623
+
624
+ >>> print_vector(states.courantnumber.old)
625
+ 1.0, 0.5, 0.25, 0.0
626
+
627
+ To prevent zero divisions, |Calc_Coefficient1_Coefficient2_Coefficient3_V1|
628
+ assumes the ratio between the new and the old Courant number to be one in such
629
+ cases.
630
+ """
631
+
632
+ REQUIREDSEQUENCES = (musk_states.CourantNumber, musk_states.ReynoldsNumber)
633
+ UPDATEDSEQUENCES = (
634
+ musk_factors.Coefficient1,
635
+ musk_factors.Coefficient2,
636
+ musk_factors.Coefficient3,
637
+ )
638
+
639
+ @staticmethod
640
+ def __call__(model: modeltools.SegmentModel) -> None:
641
+ fac = model.sequences.factors.fastaccess
642
+ new = model.sequences.states.fastaccess_new
643
+ old = model.sequences.states.fastaccess_old
644
+ i = model.idx_segment
645
+ f: float = 1.0 / (1.0 + new.courantnumber[i] + new.reynoldsnumber[i])
646
+ fac.coefficient1[i] = (new.courantnumber[i] + new.reynoldsnumber[i] - 1.0) * f
647
+ if old.courantnumber[i] != 0.0:
648
+ f *= new.courantnumber[i] / old.courantnumber[i]
649
+ fac.coefficient2[i] = (1 + old.courantnumber[i] - old.reynoldsnumber[i]) * f
650
+ fac.coefficient3[i] = (1 - old.courantnumber[i] + old.reynoldsnumber[i]) * f
651
+
652
+
653
+ class Calc_Discharge_V2(modeltools.Method):
654
+ r"""Apply the routing equation with discharge-dependent coefficients.
655
+
656
+ Basic equation:
657
+ :math:`Discharge_{next, new} =
658
+ Coefficient0 \cdot Discharge_{last, new} +
659
+ Coefficient1 \cdot Discharge_{last, old} +
660
+ Coefficient2 \cdot Discharge_{next, old}`
661
+
662
+ Examples:
663
+
664
+ First, we define a channel divided into four segments:
665
+
666
+ >>> from hydpy.models.musk import *
667
+ >>> parameterstep()
668
+ >>> nmbsegments(4)
669
+
670
+ The following coefficients correspond to pure translation without diffusion:
671
+
672
+ >>> factors.coefficient1 = 0.0
673
+ >>> factors.coefficient2 = 1.0
674
+ >>> factors.coefficient3 = 0.0
675
+
676
+ The initial flow is 2 m³/s:
677
+
678
+ >>> states.discharge.old = 2.0
679
+ >>> states.discharge.new = 2.0
680
+
681
+ Successive invocations of method |Calc_Discharge_V2| shift the given inflows to
682
+ the next lower endpoints at each time step:
683
+
684
+ >>> states.discharge[0] = 5.0
685
+ >>> model.run_segments(model.calc_discharge_v2)
686
+ >>> model.new2old()
687
+ >>> states.discharge
688
+ discharge(5.0, 2.0, 2.0, 2.0, 2.0)
689
+
690
+ >>> states.discharge[0] = 8.0
691
+ >>> model.run_segments(model.calc_discharge_v2)
692
+ >>> model.new2old()
693
+ >>> states.discharge
694
+ discharge(8.0, 5.0, 2.0, 2.0, 2.0)
695
+
696
+ >>> states.discharge[0] = 6.0
697
+ >>> model.run_segments(model.calc_discharge_v2)
698
+ >>> model.new2old()
699
+ >>> states.discharge
700
+ discharge(6.0, 8.0, 5.0, 2.0, 2.0)
701
+
702
+ We repeat the example with strong wave diffusion:
703
+
704
+ >>> factors.coefficient1 = 0.5
705
+ >>> factors.coefficient2 = 0.0
706
+ >>> factors.coefficient3 = 0.5
707
+
708
+ >>> states.discharge.old = 2.0
709
+ >>> states.discharge.new = 2.0
710
+
711
+ >>> states.discharge[0] = 5.0
712
+ >>> model.run_segments(model.calc_discharge_v2)
713
+ >>> model.new2old()
714
+ >>> states.discharge
715
+ discharge(5.0, 3.5, 2.75, 2.375, 2.1875)
716
+
717
+ >>> states.discharge[0] = 8.0
718
+ >>> model.run_segments(model.calc_discharge_v2)
719
+ >>> model.new2old()
720
+ >>> states.discharge
721
+ discharge(8.0, 5.75, 4.25, 3.3125, 2.75)
722
+
723
+ >>> states.discharge[0] = 6.0
724
+ >>> model.run_segments(model.calc_discharge_v2)
725
+ >>> model.new2old()
726
+ >>> states.discharge
727
+ discharge(6.0, 5.875, 5.0625, 4.1875, 3.46875)
728
+ """
729
+
730
+ REQUIREDSEQUENCES = (
731
+ musk_factors.Coefficient1,
732
+ musk_factors.Coefficient2,
733
+ musk_factors.Coefficient3,
734
+ )
735
+ UPDATEDSEQUENCES = (musk_states.Discharge,)
736
+
737
+ @staticmethod
738
+ def __call__(model: modeltools.SegmentModel) -> None:
739
+ fac = model.sequences.factors.fastaccess
740
+ new = model.sequences.states.fastaccess_new
741
+ old = model.sequences.states.fastaccess_old
742
+ i = model.idx_segment
743
+ if new.discharge[i] == old.discharge[i] == old.discharge[i + 1]:
744
+ new.discharge[i + 1] = new.discharge[i]
745
+ else:
746
+ new.discharge[i + 1] = (
747
+ fac.coefficient1[i] * new.discharge[i]
748
+ + fac.coefficient2[i] * old.discharge[i]
749
+ + fac.coefficient3[i] * old.discharge[i + 1]
750
+ )
751
+ new.discharge[i + 1] = max(new.discharge[i + 1], 0.0)
752
+
753
+
754
+ class Calc_Outflow_V1(modeltools.Method):
755
+ r"""Take the discharge at the last segment endpoint as the channel's outflow.
756
+
757
+ Basic equation:
758
+ :math:`Outflow = Discharge_{NmbSegments}`
759
+
760
+ Example:
761
+
762
+ >>> from hydpy.models.musk import *
763
+ >>> parameterstep()
764
+ >>> nmbsegments(2)
765
+ >>> states.discharge.new = 1.0, 2.0, 3.0
766
+ >>> model.calc_outflow_v1()
767
+ >>> fluxes.outflow
768
+ outflow(3.0)
769
+ """
770
+
771
+ CONTROLPARAMETERS = (musk_control.NmbSegments,)
772
+ REQUIREDSEQUENCES = (musk_states.Discharge,)
773
+ RESULTSEQUENCES = (musk_fluxes.Outflow,)
774
+
775
+ @staticmethod
776
+ def __call__(model: modeltools.SegmentModel) -> None:
777
+ con = model.parameters.control.fastaccess
778
+ flu = model.sequences.fluxes.fastaccess
779
+ sta = model.sequences.states.fastaccess_new
780
+ flu.outflow = sta.discharge[con.nmbsegments]
781
+
782
+
783
+ class Pass_Outflow_V1(modeltools.Method):
784
+ """Pass the channel's outflow to the outlet sequence."""
785
+
786
+ REQUIREDSEQUENCES = (musk_fluxes.Outflow,)
787
+ RESULTSEQUENCES = (musk_outlets.Q,)
788
+
789
+ @staticmethod
790
+ def __call__(model: modeltools.SegmentModel) -> None:
791
+ flu = model.sequences.fluxes.fastaccess
792
+ out = model.sequences.outlets.fastaccess
793
+ out.q[0] += flu.outflow
794
+
795
+
796
+ class PegasusReferenceWaterDepth(roottools.Pegasus):
797
+ """Pegasus iterator for finding the correct reference water depth."""
798
+
799
+ METHODS = (Return_ReferenceDischargeError_V1,)
800
+
801
+
802
+ class Model(modeltools.SegmentModel):
803
+ """|musk.DOCNAME.complete|."""
804
+
805
+ DOCNAME = modeltools.DocName(short="Musk")
806
+ __HYDPY_ROOTMODEL__ = None
807
+
808
+ SOLVERPARAMETERS = (
809
+ musk_solver.NmbRuns,
810
+ musk_solver.ToleranceWaterDepth,
811
+ musk_solver.ToleranceDischarge,
812
+ )
813
+ INLET_METHODS = (Pick_Inflow_V1, Update_Discharge_V1)
814
+ RECEIVER_METHODS = ()
815
+ RUN_METHODS = (
816
+ Calc_Discharge_V1,
817
+ Calc_ReferenceDischarge_V1,
818
+ Calc_ReferenceWaterDepth_V1,
819
+ Calc_WettedArea_SurfaceWidth_Celerity_V1,
820
+ Calc_CorrectingFactor_V1,
821
+ Calc_CourantNumber_V1,
822
+ Calc_ReynoldsNumber_V1,
823
+ Calc_Coefficient1_Coefficient2_Coefficient3_V1,
824
+ Calc_Discharge_V2,
825
+ )
826
+ ADD_METHODS = (
827
+ Return_Discharge_CrossSectionModel_V1,
828
+ Return_ReferenceDischargeError_V1,
829
+ Calc_WettedArea_SurfaceWidth_Celerity_CrossSectionModel_V1,
830
+ )
831
+ OUTLET_METHODS = (Calc_Outflow_V1, Pass_Outflow_V1)
832
+ SENDER_METHODS = ()
833
+ SUBMODELINTERFACES = ()
834
+ SUBMODELS = (PegasusReferenceWaterDepth,)
835
+
836
+ wqmodel = modeltools.SubmodelProperty(routinginterfaces.CrossSectionModel_V1)
837
+ wqmodel_is_mainmodel = modeltools.SubmodelIsMainmodelProperty()
838
+ wqmodel_typeid = modeltools.SubmodelTypeIDProperty()