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,1439 @@
1
+ # pylint: disable=missing-module-docstring
2
+
3
+ # import...
4
+ # ...from HydPy
5
+ from hydpy.core import importtools
6
+ from hydpy.core import modeltools
7
+ from hydpy.core.typingtools import *
8
+ from hydpy.cythons import modelutils
9
+ from hydpy.interfaces import petinterfaces
10
+ from hydpy.interfaces import rconcinterfaces
11
+
12
+ # ...from gland
13
+ from hydpy.models.gland import gland_control
14
+ from hydpy.models.gland import gland_derived
15
+ from hydpy.models.gland import gland_inputs
16
+ from hydpy.models.gland import gland_fluxes
17
+ from hydpy.models.gland import gland_states
18
+ from hydpy.models.gland import gland_outlets
19
+
20
+
21
+ class Calc_E_PETModel_V1(modeltools.Method):
22
+ """Let a submodel that conforms to the |PETModel_V1| interface calculate the
23
+ potential evapotranspiration.
24
+
25
+ Example:
26
+
27
+ We use |evap_ret_tw2002| as an example:
28
+
29
+ >>> from hydpy.models.gland_gr4 import *
30
+ >>> parameterstep()
31
+ >>> from hydpy import prepare_model
32
+ >>> area(50.0)
33
+ >>> with model.add_petmodel_v1("evap_ret_tw2002"):
34
+ ... hrualtitude(200.0)
35
+ ... coastfactor(0.6)
36
+ ... evapotranspirationfactor(1.1)
37
+ ... with model.add_radiationmodel_v2("meteo_glob_io"):
38
+ ... inputs.globalradiation = 200.0
39
+ ... with model.add_tempmodel_v2("meteo_temp_io"):
40
+ ... temperatureaddend(1.0)
41
+ ... inputs.temperature = 14.0
42
+ >>> model.calc_e_v1()
43
+ >>> fluxes.e
44
+ e(3.07171)
45
+ """
46
+
47
+ RESULTSEQUENCES = (gland_fluxes.E,)
48
+
49
+ @staticmethod
50
+ def __call__(model: modeltools.Model, submodel: petinterfaces.PETModel_V1) -> None:
51
+ flu = model.sequences.fluxes.fastaccess
52
+ submodel.determine_potentialevapotranspiration()
53
+ flu.e = submodel.get_potentialevapotranspiration(0)
54
+
55
+
56
+ class Calc_E_V1(modeltools.Method):
57
+ """Let a submodel that conforms to the |PETModel_V1| interface calculate the
58
+ potential evapotranspiration."""
59
+
60
+ SUBMODELINTERFACES = (petinterfaces.PETModel_V1,)
61
+ SUBMETHODS = (Calc_E_PETModel_V1,)
62
+ RESULTSEQUENCES = (gland_fluxes.E,)
63
+
64
+ @staticmethod
65
+ def __call__(model: modeltools.Model) -> None:
66
+ if model.petmodel_typeid == 1:
67
+ model.calc_e_petmodel_v1(cast(petinterfaces.PETModel_V1, model.petmodel))
68
+
69
+
70
+ class Calc_EI_V1(modeltools.Method):
71
+ r"""Calculate the actual evaporation from the interception store.
72
+
73
+ Basic equation:
74
+
75
+ :math:`EI = min(E, \, I + P)`
76
+
77
+ Examples:
78
+
79
+ >>> from hydpy.models.gland import *
80
+ >>> parameterstep()
81
+
82
+ >>> inputs.p = 1.0
83
+ >>> fluxes.e = 0.5
84
+ >>> states.i = 0.0
85
+ >>> model.calc_ei_v1()
86
+ >>> fluxes.ei
87
+ ei(0.5)
88
+
89
+ >>> inputs.p = 0.5
90
+ >>> fluxes.e = 1.0
91
+ >>> states.i = 0.2
92
+ >>> model.calc_ei_v1()
93
+ >>> fluxes.ei
94
+ ei(0.7)
95
+ """
96
+
97
+ REQUIREDSEQUENCES = (gland_inputs.P, gland_fluxes.E, gland_states.I)
98
+ RESULTSEQUENCES = (gland_fluxes.EI,)
99
+
100
+ @staticmethod
101
+ def __call__(model: modeltools.Model) -> None:
102
+ inp = model.sequences.inputs.fastaccess
103
+ flu = model.sequences.fluxes.fastaccess
104
+ sta = model.sequences.states.fastaccess
105
+ flu.ei = min(flu.e, sta.i + inp.p)
106
+
107
+
108
+ class Calc_PN_V1(modeltools.Method):
109
+ r"""Calculate the net precipitation by considering all interception losses.
110
+
111
+ Basic equation:
112
+
113
+ :math:`PN = max(P - (IMax - I) - EI, \, 0)`
114
+
115
+ Examples:
116
+ >>> from hydpy.models.gland import *
117
+ >>> parameterstep()
118
+ >>> control.imax(10.0)
119
+ >>> inputs.p = 1.0
120
+ >>> states.i = 5.0
121
+ >>> fluxes.ei = 2.0
122
+ >>> model.calc_pn_v1()
123
+ >>> fluxes.pn
124
+ pn(0.0)
125
+
126
+ >>> inputs.p = 8.0
127
+ >>> model.calc_pn_v1()
128
+ >>> fluxes.pn
129
+ pn(1.0)
130
+ """
131
+
132
+ CONTROLPARAMETERS = (gland_control.IMax,)
133
+ REQUIREDSEQUENCES = (gland_inputs.P, gland_fluxes.EI, gland_states.I)
134
+ RESULTSEQUENCES = (gland_fluxes.PN,)
135
+
136
+ @staticmethod
137
+ def __call__(model: modeltools.Model) -> None:
138
+ con = model.parameters.control.fastaccess
139
+ inp = model.sequences.inputs.fastaccess
140
+ flu = model.sequences.fluxes.fastaccess
141
+ sta = model.sequences.states.fastaccess
142
+ flu.pn = max(inp.p - (con.imax - sta.i) - flu.ei, 0.0)
143
+
144
+
145
+ class Calc_EN_V1(modeltools.Method):
146
+ r"""Calculate the net evapotranspiration capacity by considering interception
147
+ evaporation.
148
+
149
+ Basic equation:
150
+
151
+ :math:`EN = max(E - EI, \, 0.0)`
152
+
153
+ Examples:
154
+
155
+ >>> from hydpy.models.gland import *
156
+ >>> parameterstep()
157
+
158
+ >>> fluxes.e = 1.0
159
+ >>> fluxes.ei = 2.0
160
+ >>> model.calc_en_v1()
161
+ >>> fluxes.en
162
+ en(0.0)
163
+
164
+ >>> fluxes.e = 3.0
165
+ >>> model.calc_en_v1()
166
+ >>> fluxes.en
167
+ en(1.0)
168
+ """
169
+
170
+ REQUIREDSEQUENCES = (gland_fluxes.E, gland_fluxes.EI)
171
+ RESULTSEQUENCES = (gland_fluxes.EN,)
172
+
173
+ @staticmethod
174
+ def __call__(model: modeltools.Model) -> None:
175
+ flu = model.sequences.fluxes.fastaccess
176
+ flu.en = max(flu.e - flu.ei, 0.0)
177
+
178
+
179
+ class Update_I_V1(modeltools.Method):
180
+ """Update the interception store based on precipitation, net precipitation, and
181
+ interception evaporation.
182
+
183
+ Basic equation:
184
+
185
+ :math:`I_{new} = I_{old} + P - PN - EI`
186
+
187
+ Example:
188
+
189
+ >>> from hydpy.models.gland import *
190
+ >>> parameterstep("1d")
191
+ >>> states.i = 10.0
192
+ >>> inputs.p = 5.0
193
+ >>> fluxes.ei = 4.0
194
+ >>> fluxes.pn = 3.0
195
+ >>> model.update_i_v1()
196
+ >>> states.i
197
+ i(8.0)
198
+ """
199
+
200
+ REQUIREDSEQUENCES = (gland_inputs.P, gland_fluxes.PN, gland_fluxes.EI)
201
+ UPDATEDSEQUENCES = (gland_states.I,)
202
+
203
+ @staticmethod
204
+ def __call__(model: modeltools.Model) -> None:
205
+ inp = model.sequences.inputs.fastaccess
206
+ flu = model.sequences.fluxes.fastaccess
207
+ sta = model.sequences.states.fastaccess
208
+ sta.i += inp.p - flu.ei - flu.pn
209
+
210
+
211
+ class Calc_PS_V1(modeltools.Method):
212
+ r"""Calculate the part of net precipitation filling the production store.
213
+
214
+ Basic equation:
215
+
216
+ :math:`PS = \frac{
217
+ X1 \cdot \left( 1 - \left( \frac{S}{X1} \right)^2 \right)
218
+ \cdot tanh \left( \frac{PN}{X1} \right)}
219
+ {1 + \frac{S}{X1} \cdot tanh \left( \frac{PN}{X1} \right)}`
220
+
221
+ Examples:
222
+
223
+ If the production store is full, no more precipitation can enter it:
224
+
225
+ >>> from hydpy.models.gland import *
226
+ >>> from hydpy import pub
227
+ >>> parameterstep()
228
+ >>> x1(300.0)
229
+ >>> states.s = 300.0
230
+ >>> fluxes.pn = 50.0
231
+ >>> model.calc_ps_v1()
232
+ >>> fluxes.ps
233
+ ps(0.0)
234
+
235
+ If the production store is empty, nearly all net precipitation enters it:
236
+
237
+ >>> states.s = 0.0
238
+ >>> model.calc_ps_v1()
239
+ >>> fluxes.ps
240
+ ps(49.542124)
241
+
242
+ If net precipitation is zero, there can be no inflow into the production store:
243
+
244
+ >>> fluxes.pn = 0.0
245
+ >>> model.calc_ps_v1()
246
+ >>> fluxes.ps
247
+ ps(0.0)
248
+ """
249
+
250
+ CONTROLPARAMETERS = (gland_control.X1,)
251
+ REQUIREDSEQUENCES = (gland_fluxes.PN, gland_states.S)
252
+ RESULTSEQUENCES = (gland_fluxes.PS,)
253
+
254
+ @staticmethod
255
+ def __call__(model: modeltools.Model) -> None:
256
+ con = model.parameters.control.fastaccess
257
+ flu = model.sequences.fluxes.fastaccess
258
+ sta = model.sequences.states.fastaccess
259
+
260
+ flu.ps = (
261
+ con.x1
262
+ * (1.0 - (sta.s / con.x1) ** 2.0)
263
+ * modelutils.tanh(flu.pn / con.x1)
264
+ / (1.0 + sta.s / con.x1 * modelutils.tanh(flu.pn / con.x1))
265
+ )
266
+
267
+
268
+ class Calc_ES_V1(modeltools.Method):
269
+ r"""Calculate the actual evapotranspiration from the production store.
270
+
271
+ Basic equation:
272
+
273
+ .. math ::
274
+ Es = \frac{S \cdot (2 - r) \cdot t}{1 + (1 - r) \cdot t} \\
275
+ t = tanh \left( EN / X1 \right) \\
276
+ r = S / X1
277
+
278
+ Examples:
279
+
280
+ If the production store is nearly full, actual and potential evapotranspiration
281
+ are almost equal:
282
+
283
+ >>> from hydpy.models.gland import *
284
+ >>> parameterstep()
285
+ >>> x1(300.0)
286
+ >>> states.s = 270.0
287
+ >>> fluxes.en = 2.0
288
+ >>> model.calc_es_v1()
289
+ >>> fluxes.es
290
+ es(1.978652)
291
+
292
+ If the production store is nearly empty, actual evapotranspiration is almost
293
+ zero:
294
+
295
+ >>> states.s = 10.0
296
+ >>> model.calc_es_v1()
297
+ >>> fluxes.es
298
+ es(0.13027)
299
+ """
300
+
301
+ CONTROLPARAMETERS = (gland_control.X1,)
302
+ REQUIREDSEQUENCES = (gland_fluxes.EN, gland_states.S)
303
+ RESULTSEQUENCES = (gland_fluxes.ES,)
304
+
305
+ @staticmethod
306
+ def __call__(model: modeltools.Model) -> None:
307
+ con = model.parameters.control.fastaccess
308
+ flu = model.sequences.fluxes.fastaccess
309
+ sta = model.sequences.states.fastaccess
310
+
311
+ rs: float = sta.s / con.x1
312
+ re: float = flu.en / con.x1
313
+ tre: float = modelutils.tanh(re) # equals (exp(2 * re) - 1) / (exp(2 * re) + 1)
314
+ flu.es = (sta.s * (2.0 - rs) * tre) / (1.0 + (1.0 - rs) * tre)
315
+
316
+
317
+ class Update_S_V1(modeltools.Method):
318
+ """Update the production store by adding precipitation and evapotranspiration.
319
+
320
+ Basic equation:
321
+
322
+ :math:`S_{new} = S_{old} + PS - ES`
323
+
324
+ Examples:
325
+
326
+ >>> from hydpy.models.gland import *
327
+ >>> parameterstep()
328
+ >>> x1(300.0)
329
+ >>> fluxes.ps = 10.0
330
+ >>> fluxes.es = 3.0
331
+ >>> states.s = 270.0
332
+ >>> model.update_s_v1()
333
+ >>> states.s
334
+ s(277.0)
335
+ """
336
+
337
+ REQUIREDSEQUENCES = (gland_fluxes.PS, gland_fluxes.ES)
338
+ UPDATEDSEQUENCES = (gland_states.S,)
339
+
340
+ @staticmethod
341
+ def __call__(model: modeltools.Model) -> None:
342
+ flu = model.sequences.fluxes.fastaccess
343
+ sta = model.sequences.states.fastaccess
344
+ sta.s += flu.ps - flu.es
345
+
346
+
347
+ class Calc_Perc_V1(modeltools.Method):
348
+ r"""Calculate the percolation from the production store.
349
+
350
+ Basic equation:
351
+
352
+ :math:`Perc = S \cdot \left(
353
+ 1 - \left(1 + \left(\frac{S}{Beta \cdot X1} \right)^4 \right)^{-1/4} \right)`
354
+
355
+ Examples:
356
+
357
+ >>> from hydpy.models.gland import *
358
+ >>> simulationstep("1d")
359
+ >>> parameterstep()
360
+ >>> derived.beta.update()
361
+
362
+ >>> x1(300.0)
363
+ >>> states.s = 268.0
364
+ >>> model.calc_perc_v1()
365
+ >>> fluxes.perc
366
+ perc(1.639555)
367
+
368
+ >>> states.s = 50.0
369
+ >>> model.calc_perc_v1()
370
+ >>> fluxes.perc
371
+ perc(0.000376)
372
+ """
373
+
374
+ CONTROLPARAMETERS = (gland_control.X1,)
375
+ DERIVEDPARAMETERS = (gland_derived.Beta,)
376
+ UPDATEDSEQUENCES = (gland_states.S,)
377
+ RESULTSEQUENCES = (gland_fluxes.Perc,)
378
+
379
+ @staticmethod
380
+ def __call__(model: modeltools.Model) -> None:
381
+ con = model.parameters.control.fastaccess
382
+ der = model.parameters.derived.fastaccess
383
+ flu = model.sequences.fluxes.fastaccess
384
+ sta = model.sequences.states.fastaccess
385
+ flu.perc = sta.s * (1.0 - (1.0 + (sta.s / con.x1 / der.beta) ** 4.0) ** -0.25)
386
+
387
+
388
+ class Update_S_V2(modeltools.Method):
389
+ """Update the production store by subtracting percolation.
390
+
391
+ Basic equation:
392
+
393
+ :math:`S_{new} = S_{old} - Perc`
394
+
395
+ Examples:
396
+
397
+ >>> from hydpy.models.gland import *
398
+ >>> parameterstep()
399
+ >>> fluxes.perc = 2.0
400
+ >>> states.s = 20.0
401
+ >>> model.update_s_v2()
402
+ >>> states.s
403
+ s(18.0)
404
+ """
405
+
406
+ REQUIREDSEQUENCES = (gland_fluxes.Perc,)
407
+ UPDATEDSEQUENCES = (gland_states.S,)
408
+
409
+ @staticmethod
410
+ def __call__(model: modeltools.Model) -> None:
411
+ flu = model.sequences.fluxes.fastaccess
412
+ sta = model.sequences.states.fastaccess
413
+ sta.s -= flu.perc
414
+
415
+
416
+ class Calc_AE_V1(modeltools.Method):
417
+ """Calculate the total actual evapotranspiration.
418
+
419
+ Basic equation:
420
+
421
+ :math:`AE = EI + ES`
422
+
423
+ Examples:
424
+
425
+ >>> from hydpy.models.gland import *
426
+ >>> parameterstep()
427
+ >>> fluxes.ei = 2.0
428
+ >>> fluxes.es = 1.0
429
+ >>> model.calc_ae_v1()
430
+ >>> fluxes.ae
431
+ ae(3.0)
432
+ """
433
+
434
+ REQUIREDSEQUENCES = (gland_fluxes.EI, gland_fluxes.ES)
435
+ RESULTSEQUENCES = (gland_fluxes.AE,)
436
+
437
+ @staticmethod
438
+ def __call__(model: modeltools.Model) -> None:
439
+ flu = model.sequences.fluxes.fastaccess
440
+ flu.ae = flu.ei + flu.es
441
+
442
+
443
+ class Calc_Pr_V1(modeltools.Method):
444
+ """Calculate the total inflow into the runoff concentration module.
445
+
446
+ Basic equation:
447
+
448
+ :math:`PR = Perc + (PN - PS)`
449
+
450
+ Example:
451
+
452
+ >>> from hydpy.models.gland import *
453
+ >>> parameterstep()
454
+ >>> fluxes.perc = 1.0
455
+ >>> fluxes.pn = 5.0
456
+ >>> fluxes.ps = 2.0
457
+ >>> model.calc_pr_v1()
458
+ >>> fluxes.pr
459
+ pr(4.0)
460
+ """
461
+
462
+ REQUIREDSEQUENCES = (gland_fluxes.PS, gland_fluxes.PN, gland_fluxes.Perc)
463
+ RESULTSEQUENCES = (gland_fluxes.PR,)
464
+
465
+ @staticmethod
466
+ def __call__(model: modeltools.Model) -> None:
467
+ flu = model.sequences.fluxes.fastaccess
468
+ flu.pr = flu.perc + flu.pn - flu.ps
469
+
470
+
471
+ class Calc_PR1_PR9_V1(modeltools.Method):
472
+ r"""Split |PR| into |PR1| and |PR9|.
473
+
474
+ Basic equations:
475
+
476
+ :math:`PR9 = 0.9 \cdot PR`
477
+
478
+ :math:`PR1 = 0.1 \cdot PR`
479
+
480
+ Examples:
481
+
482
+ >>> from hydpy.models.gland import *
483
+ >>> parameterstep()
484
+ >>> fluxes.pr = 10.0
485
+ >>> model.calc_pr1_pr9_v1()
486
+ >>> fluxes.pr9
487
+ pr9(9.0)
488
+ >>> fluxes.pr1
489
+ pr1(1.0)
490
+ """
491
+
492
+ REQUIREDSEQUENCES = (gland_fluxes.PR,)
493
+ RESULTSEQUENCES = (gland_fluxes.PR9, gland_fluxes.PR1)
494
+
495
+ @staticmethod
496
+ def __call__(model: modeltools.Model) -> None:
497
+ flu = model.sequences.fluxes.fastaccess
498
+ flu.pr9 = 0.9 * flu.pr
499
+ flu.pr1 = 0.1 * flu.pr
500
+
501
+
502
+ class Calc_Q_RConcModel_V1(modeltools.Method):
503
+ """Let a submodel that follows the |RConcModel_V1| submodel interface perform
504
+ runoff concentration."""
505
+
506
+ @staticmethod
507
+ def __call__(
508
+ model: modeltools.Model, submodel: rconcinterfaces.RConcModel_V1, inflow: float
509
+ ) -> float:
510
+ submodel.set_inflow(inflow)
511
+ submodel.determine_outflow()
512
+ return submodel.get_outflow()
513
+
514
+
515
+ class Calc_Q9_V1(modeltools.Method):
516
+ """Transform |PR9| into |Q9|.
517
+
518
+ Examples:
519
+
520
+ Without a `rconcmodel_routingstore` submodel, |Calc_Q9_V1| directs |PR9|
521
+ instantaneously to |Q9|:
522
+
523
+ >>> from hydpy.models.gland_gr4 import *
524
+ >>> simulationstep("1d")
525
+ >>> parameterstep("1d")
526
+ >>> fluxes.pr9 = 1.0
527
+ >>> model.calc_q9_v1()
528
+ >>> fluxes.q9
529
+ q9(1.0)
530
+
531
+ For a GR-compatible calculation of runoff concentration, you can select the
532
+ Unit Hydrograph submodel |rconc_uh| and configure its ordinates via the
533
+ `gr_uh1` option:
534
+
535
+ >>> with model.add_rconcmodel_routingstore_v1("rconc_uh"):
536
+ ... uh("gr_uh1", x4=3.0)
537
+ ... logs.quh = 1.0, 3.0, 0.0
538
+ >>> fluxes.pr9 = 2.0
539
+ >>> model.calc_q9_v1()
540
+ >>> fluxes.q9
541
+ q9(1.1283)
542
+ """
543
+
544
+ SUBMODELINTERFACES = (rconcinterfaces.RConcModel_V1,)
545
+ SUBMETHODS = (Calc_Q_RConcModel_V1,)
546
+ REQUIREDSEQUENCES = (gland_fluxes.PR9,)
547
+ RESULTSEQUENCES = (gland_fluxes.Q9,)
548
+
549
+ @staticmethod
550
+ def __call__(model: modeltools.Model) -> None:
551
+ flu = model.sequences.fluxes.fastaccess
552
+ if model.rconcmodel_routingstore is None:
553
+ flu.q9 = flu.pr9
554
+ elif model.rconcmodel_routingstore_typeid == 1:
555
+ flu.q9 = model.calc_q_rconcmodel_v1(
556
+ cast(rconcinterfaces.RConcModel_V1, model.rconcmodel_routingstore),
557
+ flu.pr9,
558
+ )
559
+
560
+
561
+ class Calc_Q1_V1(modeltools.Method):
562
+ """Transform |PR1| into |Q1|.
563
+
564
+ Examples:
565
+
566
+ Without a `rconcmodel_directflow` submodel, |Calc_Q1_V1| directs |PR1|
567
+ instantaneously to |Q1|:
568
+
569
+ >>> from hydpy.models.gland_gr4 import *
570
+ >>> simulationstep("1d")
571
+ >>> parameterstep("1d")
572
+ >>> fluxes.pr1 = 1.0
573
+ >>> model.calc_q1_v1()
574
+ >>> fluxes.q1
575
+ q1(1.0)
576
+
577
+ For a GR-compatible calculation of runoff concentration, you can select the
578
+ Unit Hydrograph submodel |rconc_uh| and configure its ordinates via the
579
+ `gr_uh2` option:
580
+
581
+ >>> with model.add_rconcmodel_directflow_v1("rconc_uh"):
582
+ ... uh("gr_uh2", x4=1.5)
583
+ ... logs.quh = 1.0, 3.0, 0.0
584
+ >>> fluxes.pr1 = 2.0
585
+ >>> model.calc_q1_v1()
586
+ >>> fluxes.q1
587
+ q1(1.362887)
588
+ """
589
+
590
+ SUBMODELINTERFACES = (rconcinterfaces.RConcModel_V1,)
591
+ SUBMETHODS = (Calc_Q_RConcModel_V1,)
592
+ REQUIREDSEQUENCES = (gland_fluxes.PR1,)
593
+ RESULTSEQUENCES = (gland_fluxes.Q1,)
594
+
595
+ @staticmethod
596
+ def __call__(model: modeltools.Model) -> None:
597
+ flu = model.sequences.fluxes.fastaccess
598
+ if model.rconcmodel_directflow is None:
599
+ flu.q1 = flu.pr1
600
+ elif model.rconcmodel_directflow_typeid == 1:
601
+ flu.q1 = model.calc_q_rconcmodel_v1(
602
+ cast(rconcinterfaces.RConcModel_V1, model.rconcmodel_directflow),
603
+ flu.pr1,
604
+ )
605
+
606
+
607
+ class Calc_Q10_V1(modeltools.Method):
608
+ """Transform |PR| into |Q10|.
609
+
610
+ Examples:
611
+
612
+ Without a `rconcmodel` submodel, |Calc_Q10_V1| directs |PR| instantaneously to
613
+ |Q10|:
614
+
615
+ >>> from hydpy.models.gland_gr5 import *
616
+ >>> simulationstep("1d")
617
+ >>> parameterstep("1d")
618
+ >>> fluxes.pr = 1.0
619
+ >>> model.calc_q10_v1()
620
+ >>> fluxes.q10
621
+ q10(1.0)
622
+
623
+ For a GR-compatible calculation of runoff concentration, you can select the
624
+ Unit Hydrograph submodel |rconc_uh| and configure its ordinates via the
625
+ `gr_uh2` option:
626
+
627
+ >>> with model.add_rconcmodel_v1("rconc_uh"):
628
+ ... uh("gr_uh2", x4=1.5)
629
+ ... logs.quh = 1.0, 3.0, 0.0
630
+ >>> fluxes.pr = 2.0
631
+ >>> model.calc_q10_v1()
632
+ >>> fluxes.q10
633
+ q10(1.362887)
634
+ """
635
+
636
+ SUBMODELINTERFACES = (rconcinterfaces.RConcModel_V1,)
637
+ SUBMETHODS = (Calc_Q_RConcModel_V1,)
638
+ REQUIREDSEQUENCES = (gland_fluxes.PR,)
639
+ RESULTSEQUENCES = (gland_fluxes.Q10,)
640
+
641
+ @staticmethod
642
+ def __call__(model: modeltools.Model) -> None:
643
+ flu = model.sequences.fluxes.fastaccess
644
+ if model.rconcmodel is None:
645
+ flu.q10 = flu.pr
646
+ elif model.rconcmodel_typeid == 1:
647
+ flu.q10 = model.calc_q_rconcmodel_v1(
648
+ cast(rconcinterfaces.RConcModel_V1, model.rconcmodel), flu.pr
649
+ )
650
+
651
+
652
+ class Calc_Q1_Q9_V2(modeltools.Method):
653
+ r"""Calculate |Q1| and |Q9| by splitting |Q10|.
654
+
655
+ Basic equations:
656
+
657
+ :math:`Q9 = 0.9 \cdot Q10`
658
+
659
+ :math:`Q1 = 0.1 \cdot Q10`
660
+
661
+ Example:
662
+
663
+ >>> from hydpy.models.gland import *
664
+ >>> parameterstep()
665
+ >>> fluxes.q10 = 10.0
666
+ >>> model.calc_q1_q9_v2()
667
+ >>> fluxes.q1
668
+ q1(1.0)
669
+ >>> fluxes.q9
670
+ q9(9.0)
671
+ """
672
+
673
+ REQUIREDSEQUENCES = (gland_fluxes.Q10,)
674
+ RESULTSEQUENCES = (gland_fluxes.Q1, gland_fluxes.Q9)
675
+
676
+ @staticmethod
677
+ def __call__(model: modeltools.Model) -> None:
678
+ flu = model.sequences.fluxes.fastaccess
679
+ flu.q1 = 0.1 * flu.q10
680
+ flu.q9 = 0.9 * flu.q10
681
+
682
+
683
+ class Calc_FR_V1(modeltools.Method):
684
+ r"""Calculate the groundwater exchange affecting the routing store according to
685
+ GR4.
686
+
687
+ Basic equation:
688
+
689
+ :math:`FR = X2 \cdot \left( \frac{R}{X3} \right)^{7/2}`
690
+
691
+ Examples:
692
+
693
+ If the routing store is nearly full, groundwater exchange is high and close to
694
+ |X3|:
695
+
696
+ >>> from hydpy.models.gland import *
697
+ >>> from hydpy import pub
698
+ >>> simulationstep("1d")
699
+ >>> parameterstep("1d")
700
+ >>> x2(1.02)
701
+ >>> x3(100.0)
702
+ >>> states.r = 95.0
703
+ >>> model.calc_fr_v1()
704
+ >>> fluxes.fr
705
+ fr(0.852379)
706
+
707
+ If the routing store is almost empty, groundwater exchange is low and near
708
+ zero:
709
+
710
+ >>> states.r = 5.0
711
+ >>> model.calc_fr_v1()
712
+ >>> fluxes.fr
713
+ fr(0.000029)
714
+ """
715
+
716
+ CONTROLPARAMETERS = (gland_control.X2, gland_control.X3)
717
+ REQUIREDSEQUENCES = (gland_states.R,)
718
+ RESULTSEQUENCES = (gland_fluxes.FR,)
719
+
720
+ @staticmethod
721
+ def __call__(model: modeltools.Model) -> None:
722
+ con = model.parameters.control.fastaccess
723
+ flu = model.sequences.fluxes.fastaccess
724
+ sta = model.sequences.states.fastaccess
725
+ flu.fr = con.x2 * (sta.r / con.x3) ** 3.5
726
+
727
+
728
+ class Calc_FR_V2(modeltools.Method):
729
+ r"""Calculate the groundwater exchange affecting the routing store according to
730
+ GR5 and GR6.
731
+
732
+ Basic equation:
733
+
734
+ :math:`FR = X2 \cdot \left( \frac{R}{X3} - X5 \right)`
735
+
736
+ Example:
737
+
738
+ >>> from hydpy.models.gland import *
739
+ >>> simulationstep("1d")
740
+ >>> parameterstep("1d")
741
+ >>> x2(-0.163)
742
+ >>> x3(100.0)
743
+ >>> x5(0.104)
744
+ >>> states.r = 95.0
745
+ >>> model.calc_fr_v2()
746
+ >>> fluxes.fr
747
+ fr(-0.137898)
748
+ """
749
+
750
+ CONTROLPARAMETERS = (gland_control.X2, gland_control.X3, gland_control.X5)
751
+ UPDATEDSEQUENCES = (gland_states.R,)
752
+ RESULTSEQUENCES = (gland_fluxes.FR,)
753
+
754
+ @staticmethod
755
+ def __call__(model: modeltools.Model) -> None:
756
+ con = model.parameters.control.fastaccess
757
+ flu = model.sequences.fluxes.fastaccess
758
+ sta = model.sequences.states.fastaccess
759
+ flu.fr = con.x2 * (sta.r / con.x3 - con.x5)
760
+
761
+
762
+ class Update_R_V1(modeltools.Method):
763
+ """Update the level of the non-linear routing store by adding its inflows according
764
+ to GR4 and GR5.
765
+
766
+ Basic equation:
767
+
768
+ :math:`R_{new} = R_{old} + Q9 + FR`
769
+
770
+ Examples:
771
+
772
+ >>> from hydpy.models.gland import *
773
+ >>> parameterstep()
774
+
775
+ In case of sufficient content of the routing store, the basic equation applies
776
+ without modification:
777
+
778
+ >>> states.r = 4.0
779
+ >>> fluxes.q9 = 1.0
780
+ >>> fluxes.fr = -2.0
781
+ >>> model.update_r_v1()
782
+ >>> states.r
783
+ r(3.0)
784
+ >>> fluxes.fr
785
+ fr(-2.0)
786
+
787
+ For insufficient content, groundwater loss (negative groundwater exchange)
788
+ becomes restricted:
789
+
790
+ >>> fluxes.fr = -5.0
791
+ >>> model.update_r_v1()
792
+ >>> states.r
793
+ r(0.0)
794
+ >>> fluxes.fr
795
+ fr(-4.0)
796
+ """
797
+
798
+ REQUIREDSEQUENCES = (gland_fluxes.Q9, gland_fluxes.FR)
799
+ UPDATEDSEQUENCES = (gland_states.R,)
800
+
801
+ @staticmethod
802
+ def __call__(model: modeltools.Model) -> None:
803
+ flu = model.sequences.fluxes.fastaccess
804
+ sta = model.sequences.states.fastaccess
805
+ sta.r += flu.q9 + flu.fr
806
+ if sta.r < 0.0:
807
+ flu.fr -= sta.r
808
+ sta.r = 0.0
809
+
810
+
811
+ class Update_R_V2(modeltools.Method):
812
+ r"""Update the level of the non-linear routing store by adding its inflows
813
+ according to GR6.
814
+
815
+ Basic equation:
816
+
817
+ :math:`R_{new} = R_{old} + 0.6 \cdot Q9 + FR`
818
+
819
+ Examples:
820
+
821
+ >>> from hydpy.models.gland import *
822
+ >>> from hydpy import pub
823
+ >>> parameterstep()
824
+
825
+ In case of sufficient content of the routing store, the basic equation applies
826
+ without modification:
827
+
828
+ >>> states.r = 4.0
829
+ >>> fluxes.q9 = 1.0 / 0.6
830
+ >>> fluxes.fr = -2.0
831
+ >>> model.update_r_v2()
832
+ >>> states.r
833
+ r(3.0)
834
+ >>> fluxes.fr
835
+ fr(-2.0)
836
+
837
+ For insufficient content, groundwater loss (negative groundwater exchange)
838
+ becomes restricted:
839
+
840
+ >>> fluxes.fr = -5.0
841
+ >>> model.update_r_v2()
842
+ >>> states.r
843
+ r(0.0)
844
+ >>> fluxes.fr
845
+ fr(-4.0)
846
+ """
847
+
848
+ REQUIREDSEQUENCES = (gland_fluxes.Q9, gland_fluxes.FR)
849
+ UPDATEDSEQUENCES = (gland_states.R,)
850
+
851
+ @staticmethod
852
+ def __call__(model: modeltools.Model) -> None:
853
+ flu = model.sequences.fluxes.fastaccess
854
+ sta = model.sequences.states.fastaccess
855
+ sta.r += 0.6 * flu.q9 + flu.fr
856
+ if sta.r < 0.0:
857
+ flu.fr -= sta.r
858
+ sta.r = 0.0
859
+
860
+
861
+ class Calc_QR_V1(modeltools.Method):
862
+ r"""Calculate the outflow of the routing store.
863
+
864
+ Basic equation:
865
+
866
+ :math:`QR = R \cdot \left( 1 - \left[1 + \left( \frac{R}{X3} \right)^{4}
867
+ \right]^{-1/4} \right)`
868
+
869
+ Example:
870
+
871
+ >>> from hydpy.models.gland import *
872
+ >>> from hydpy import pub
873
+ >>> parameterstep("1d")
874
+ >>> simulationstep("1d")
875
+ >>> x3(100.0)
876
+ >>> states.r = 115.852379
877
+ >>> model.calc_qr_v1()
878
+ >>> fluxes.qr
879
+ qr(26.30361)
880
+ """
881
+
882
+ CONTROLPARAMETERS = (gland_control.X3,)
883
+ REQUIREDSEQUENCES = (gland_states.R,)
884
+ RESULTSEQUENCES = (gland_fluxes.QR,)
885
+
886
+ @staticmethod
887
+ def __call__(model: modeltools.Model) -> None:
888
+ con = model.parameters.control.fastaccess
889
+ flu = model.sequences.fluxes.fastaccess
890
+ sta = model.sequences.states.fastaccess
891
+ flu.qr = sta.r * (1.0 - (1.0 + (sta.r / con.x3) ** 4.0) ** -0.25)
892
+
893
+
894
+ class Update_R_V3(modeltools.Method):
895
+ """Update the non-linear routing store by subtracting its outflow.
896
+
897
+ Basic equation:
898
+
899
+ :math:`R_{new} = R_{old} - QR`
900
+
901
+ Example:
902
+
903
+ >>> from hydpy.models.gland import *
904
+ >>> parameterstep()
905
+ >>> fluxes.qr = 2.0
906
+ >>> states.r = 20.0
907
+ >>> model.update_r_v3()
908
+ >>> states.r
909
+ r(18.0)
910
+ """
911
+
912
+ REQUIREDSEQUENCES = (gland_fluxes.QR,)
913
+ UPDATEDSEQUENCES = (gland_states.R,)
914
+
915
+ @staticmethod
916
+ def __call__(model: modeltools.Model) -> None:
917
+ flu = model.sequences.fluxes.fastaccess
918
+ sta = model.sequences.states.fastaccess
919
+ sta.r -= flu.qr
920
+
921
+
922
+ class Calc_FR2_V1(modeltools.Method):
923
+ r"""Calculate the groundwater exchange affecting the exponential routing store.
924
+
925
+ Basic equation:
926
+
927
+ :math:`FR2 = FR`
928
+
929
+ Examples:
930
+
931
+ >>> from hydpy.models.gland import *
932
+ >>> parameterstep()
933
+ >>> fluxes.fr = -0.5
934
+ >>> model.calc_fr2_v1()
935
+ >>> fluxes.fr2
936
+ fr2(-0.5)
937
+ """
938
+
939
+ REQUIREDSEQUENCES = (gland_fluxes.FR,)
940
+ RESULTSEQUENCES = (gland_fluxes.FR2,)
941
+
942
+ @staticmethod
943
+ def __call__(model: modeltools.Model) -> None:
944
+ flu = model.sequences.fluxes.fastaccess
945
+ flu.fr2 = flu.fr
946
+
947
+
948
+ class Update_R2_V1(modeltools.Method):
949
+ r"""Update the exponential routing store by adding its inflows.
950
+
951
+ Basic equation:
952
+
953
+ :math:`R2_{new} = R2_{new} + 0.4 \cdot Q9 + FR2`
954
+
955
+ Examples:
956
+
957
+ >>> from hydpy.models.gland import *
958
+ >>> parameterstep()
959
+ >>> fluxes.q9 = 10.0
960
+ >>> fluxes.fr2 = -0.5
961
+ >>> states.r2 = 40.0
962
+ >>> model.update_r2_v1()
963
+ >>> states.r2
964
+ r2(43.5)
965
+ """
966
+
967
+ REQUIREDSEQUENCES = (gland_fluxes.Q9, gland_fluxes.FR2)
968
+ UPDATEDSEQUENCES = (gland_states.R2,)
969
+
970
+ @staticmethod
971
+ def __call__(model: modeltools.Model) -> None:
972
+ flu = model.sequences.fluxes.fastaccess
973
+ sta = model.sequences.states.fastaccess
974
+ sta.r2 += 0.4 * flu.q9 + flu.fr2
975
+
976
+
977
+ class Calc_QR2_R2_V1(modeltools.Method):
978
+ r"""Calculate the outflow of the exponential routing store and update its content.
979
+
980
+ Basic equations:
981
+
982
+ .. math::
983
+ QR = \begin{cases}
984
+ X6 \cdot exp(ar) &|\ ar < -7
985
+ \\
986
+ X6 \cdot log(exp(ar) + 1) &|\ -7 \leq ar \leq 7
987
+ \\
988
+ R2 + X6 / exp(ar) &|\ ar > 7
989
+ \end{cases}
990
+ \\
991
+ ar = min(max(R2 / X6, \, -33), \, 33)
992
+
993
+ Examples:
994
+
995
+ >>> from hydpy.models.gland import *
996
+ >>> parameterstep()
997
+ >>> x6(4.5)
998
+
999
+ For large negative exponential store levels, its outflow is almost zero:
1000
+
1001
+ >>> states.r2 = -50.0
1002
+ >>> model.calc_qr2_r2_v1()
1003
+ >>> fluxes.qr2
1004
+ qr2(0.000067)
1005
+ >>> states.r2
1006
+ r2(-50.000067)
1007
+
1008
+ For exponential store levels around zero, there is a significant outflow:
1009
+
1010
+ >>> states.r2 = 0.0
1011
+ >>> model.calc_qr2_r2_v1()
1012
+ >>> fluxes.qr2
1013
+ qr2(3.119162)
1014
+ >>> states.r2
1015
+ r2(-3.119162)
1016
+
1017
+ For large positive exponential store levels, its outflow is highest:
1018
+
1019
+ >>> states.r2 = 40.0
1020
+ >>> model.calc_qr2_r2_v1()
1021
+ >>> fluxes.qr2
1022
+ qr2(40.000621)
1023
+ >>> states.r2
1024
+ r2(-0.000621)
1025
+ """
1026
+
1027
+ CONTROLPARAMETERS = (gland_control.X6,)
1028
+ UPDATEDSEQUENCES = (gland_states.R2,)
1029
+ RESULTSEQUENCES = (gland_fluxes.QR2,)
1030
+
1031
+ @staticmethod
1032
+ def __call__(model: modeltools.Model) -> None:
1033
+ con = model.parameters.control.fastaccess
1034
+ flu = model.sequences.fluxes.fastaccess
1035
+ sta = model.sequences.states.fastaccess
1036
+
1037
+ ar: float = min(max(sta.r2 / con.x6, -33.0), 33.0)
1038
+
1039
+ if ar < -7.0:
1040
+ flu.qr2 = con.x6 * modelutils.exp(ar)
1041
+ elif ar <= 7.0:
1042
+ flu.qr2 = con.x6 * modelutils.log(modelutils.exp(ar) + 1.0)
1043
+ else:
1044
+ flu.qr2 = sta.r2 + con.x6 / modelutils.exp(ar)
1045
+
1046
+ sta.r2 -= flu.qr2
1047
+
1048
+
1049
+ class Calc_FD_V1(modeltools.Method):
1050
+ r"""Calculate the groundwater exchange affecting the direct runoff.
1051
+
1052
+ Basic equation:
1053
+
1054
+ .. math::
1055
+ FD = \begin{cases}
1056
+ - Q1 &|\ (Q1 + FR) \leq 0
1057
+ \\
1058
+ FR &|\ (Q1 + FR) > 0
1059
+ \end{cases}
1060
+
1061
+ Examples:
1062
+
1063
+ >>> from hydpy.models.gland import *
1064
+ >>> parameterstep()
1065
+
1066
+ >>> fluxes.q1 = 10.0
1067
+ >>> fluxes.fr = -0.5
1068
+ >>> model.calc_fd_v1()
1069
+ >>> fluxes.fd
1070
+ fd(-0.5)
1071
+
1072
+ >>> fluxes.q1 = 1.0
1073
+ >>> fluxes.fr = -1.5
1074
+ >>> model.calc_fd_v1()
1075
+ >>> fluxes.fd
1076
+ fd(-1.0)
1077
+ """
1078
+
1079
+ REQUIREDSEQUENCES = (gland_fluxes.Q1, gland_fluxes.FR)
1080
+ RESULTSEQUENCES = (gland_fluxes.FD,)
1081
+
1082
+ @staticmethod
1083
+ def __call__(model: modeltools.Model) -> None:
1084
+ flu = model.sequences.fluxes.fastaccess
1085
+ if (flu.q1 + flu.fr) <= 0.0:
1086
+ flu.fd = -flu.q1
1087
+ else:
1088
+ flu.fd = flu.fr
1089
+
1090
+
1091
+ class Calc_QD_V1(modeltools.Method):
1092
+ r"""Calculate the direct runoff.
1093
+
1094
+ Basic equation:
1095
+
1096
+ :math:`QD = max(Q1 + FD, \, 0)`
1097
+
1098
+ Examples:
1099
+
1100
+ >>> from hydpy.models.gland import *
1101
+ >>> parameterstep()
1102
+ >>> fluxes.q1 = 2.0
1103
+
1104
+ >>> fluxes.fd = -1.0
1105
+ >>> model.calc_qd_v1()
1106
+ >>> fluxes.qd
1107
+ qd(1.0)
1108
+
1109
+ >>> fluxes.fd = -3.0
1110
+ >>> model.calc_qd_v1()
1111
+ >>> fluxes.qd
1112
+ qd(0.0)
1113
+ """
1114
+
1115
+ REQUIREDSEQUENCES = (gland_fluxes.Q1, gland_fluxes.FD)
1116
+ RESULTSEQUENCES = (gland_fluxes.QD,)
1117
+
1118
+ @staticmethod
1119
+ def __call__(model: modeltools.Model) -> None:
1120
+ flu = model.sequences.fluxes.fastaccess
1121
+ flu.qd = max(flu.q1 + flu.fd, 0.0)
1122
+
1123
+
1124
+ class Calc_QH_V1(modeltools.Method):
1125
+ """Calculate the total runoff according to GR4 and GR5.
1126
+
1127
+ Basic equation:
1128
+
1129
+ :math:`QH = QR + QD`
1130
+
1131
+ Example:
1132
+
1133
+ >>> from hydpy.models.gland import *
1134
+ >>> parameterstep()
1135
+ >>> fluxes.qr = 2.0
1136
+ >>> fluxes.qd = 1.0
1137
+ >>> model.calc_qh_v1()
1138
+ >>> fluxes.qh
1139
+ qh(3.0)
1140
+ """
1141
+
1142
+ REQUIREDSEQUENCES = (gland_fluxes.QR, gland_fluxes.QD)
1143
+ RESULTSEQUENCES = (gland_fluxes.QH,)
1144
+
1145
+ @staticmethod
1146
+ def __call__(model: modeltools.Model) -> None:
1147
+ flu = model.sequences.fluxes.fastaccess
1148
+ flu.qh = flu.qr + flu.qd
1149
+
1150
+
1151
+ class Calc_QH_V2(modeltools.Method):
1152
+ """Calculate the total runoff according to GR6.
1153
+
1154
+ Basic equation:
1155
+
1156
+ :math:`QH = QR + QR2 + QD`
1157
+
1158
+ Example:
1159
+
1160
+ >>> from hydpy.models.gland import *
1161
+ >>> parameterstep()
1162
+ >>> fluxes.qr = 1.0
1163
+ >>> fluxes.qr2 = 2.0
1164
+ >>> fluxes.qd = 3.0
1165
+ >>> model.calc_qh_v2()
1166
+ >>> fluxes.qh
1167
+ qh(6.0)
1168
+ """
1169
+
1170
+ REQUIREDSEQUENCES = (gland_fluxes.QR, gland_fluxes.QR2, gland_fluxes.QD)
1171
+ RESULTSEQUENCES = (gland_fluxes.QH,)
1172
+
1173
+ @staticmethod
1174
+ def __call__(model: modeltools.Model) -> None:
1175
+ flu = model.sequences.fluxes.fastaccess
1176
+ flu.qh = flu.qr + flu.qr2 + flu.qd
1177
+
1178
+
1179
+ class Calc_QV_V1(modeltools.Method):
1180
+ r"""Calculate total discharge in m³/s.
1181
+
1182
+ Basic equation:
1183
+
1184
+ :math:`QV = QFactor \cdot QH`
1185
+
1186
+ Example:
1187
+
1188
+ >>> from hydpy.models.gland import *
1189
+ >>> parameterstep()
1190
+ >>> derived.qfactor(2.0)
1191
+ >>> fluxes.qh = 3.0
1192
+ >>> model.calc_qv_v1()
1193
+ >>> fluxes.qv
1194
+ qv(6.0)
1195
+ """
1196
+
1197
+ DERIVEDPARAMETERS = (gland_derived.QFactor,)
1198
+ REQUIREDSEQUENCES = (gland_fluxes.QH,)
1199
+ RESULTSEQUENCES = (gland_fluxes.QV,)
1200
+
1201
+ @staticmethod
1202
+ def __call__(model: modeltools.Model) -> None:
1203
+ der = model.parameters.derived.fastaccess
1204
+ flu = model.sequences.fluxes.fastaccess
1205
+ flu.qv = flu.qh * der.qfactor
1206
+
1207
+
1208
+ class Pass_Q_V1(modeltools.Method):
1209
+ """Update the outlet link sequence.
1210
+
1211
+ Basic equation:
1212
+
1213
+ :math:`Q = QV`
1214
+ """
1215
+
1216
+ REQUIREDSEQUENCES = (gland_fluxes.QV,)
1217
+ RESULTSEQUENCES = (gland_outlets.Q,)
1218
+
1219
+ @staticmethod
1220
+ def __call__(model: modeltools.Model) -> None:
1221
+ flu = model.sequences.fluxes.fastaccess
1222
+ out = model.sequences.outlets.fastaccess
1223
+ out.q[0] += flu.qv
1224
+
1225
+
1226
+ class Model(modeltools.AdHocModel):
1227
+ """|gland.DOCNAME.complete|."""
1228
+
1229
+ DOCNAME = modeltools.DocName(short="G")
1230
+ __HYDPY_ROOTMODEL__ = None
1231
+
1232
+ INLET_METHODS = (Calc_E_V1,)
1233
+ RECEIVER_METHODS = ()
1234
+ RUN_METHODS = (
1235
+ Calc_EI_V1,
1236
+ Calc_PN_V1,
1237
+ Calc_EN_V1,
1238
+ Update_I_V1,
1239
+ Calc_PS_V1,
1240
+ Calc_ES_V1,
1241
+ Update_S_V1,
1242
+ Calc_Perc_V1,
1243
+ Update_S_V2,
1244
+ Calc_AE_V1,
1245
+ Calc_Pr_V1,
1246
+ Calc_PR1_PR9_V1,
1247
+ Calc_Q9_V1,
1248
+ Calc_Q1_V1,
1249
+ Calc_Q10_V1,
1250
+ Calc_Q1_Q9_V2,
1251
+ Calc_FR_V1,
1252
+ Calc_FR_V2,
1253
+ Update_R_V1,
1254
+ Update_R_V3,
1255
+ Update_R_V2,
1256
+ Calc_QR_V1,
1257
+ Update_R_V3,
1258
+ Calc_FR2_V1,
1259
+ Update_R2_V1,
1260
+ Calc_QR2_R2_V1,
1261
+ Update_R_V2,
1262
+ Calc_FD_V1,
1263
+ Calc_QD_V1,
1264
+ Calc_QH_V1,
1265
+ Calc_QH_V2,
1266
+ Calc_QV_V1,
1267
+ )
1268
+ ADD_METHODS = (Calc_E_PETModel_V1, Calc_Q_RConcModel_V1)
1269
+ OUTLET_METHODS = (Pass_Q_V1,)
1270
+ SENDER_METHODS = ()
1271
+ SUBMODELINTERFACES = (petinterfaces.PETModel_V1, rconcinterfaces.RConcModel_V1)
1272
+ SUBMODELS = ()
1273
+
1274
+ petmodel = modeltools.SubmodelProperty(petinterfaces.PETModel_V1)
1275
+ petmodel_is_mainmodel = modeltools.SubmodelIsMainmodelProperty()
1276
+ petmodel_typeid = modeltools.SubmodelTypeIDProperty()
1277
+
1278
+ rconcmodel = modeltools.SubmodelProperty(rconcinterfaces.RConcModel_V1)
1279
+ rconcmodel_is_mainmodel = modeltools.SubmodelIsMainmodelProperty()
1280
+ rconcmodel_typeid = modeltools.SubmodelTypeIDProperty()
1281
+
1282
+ rconcmodel_directflow = modeltools.SubmodelProperty(rconcinterfaces.RConcModel_V1)
1283
+ rconcmodel_directflow_is_mainmodel = modeltools.SubmodelIsMainmodelProperty()
1284
+ rconcmodel_directflow_typeid = modeltools.SubmodelTypeIDProperty()
1285
+
1286
+ rconcmodel_routingstore = modeltools.SubmodelProperty(rconcinterfaces.RConcModel_V1)
1287
+ rconcmodel_routingstore_is_mainmodel = modeltools.SubmodelIsMainmodelProperty()
1288
+ rconcmodel_routingstore_typeid = modeltools.SubmodelTypeIDProperty()
1289
+
1290
+
1291
+ class Main_PETModel_V1(modeltools.AdHocModel):
1292
+ """Base class for |gland.DOCNAME.long| models that use submodels that comply with
1293
+ the |PETModel_V1| interface."""
1294
+
1295
+ petmodel: modeltools.SubmodelProperty
1296
+ petmodel_is_mainmodel = modeltools.SubmodelIsMainmodelProperty()
1297
+ petmodel_typeid = modeltools.SubmodelTypeIDProperty()
1298
+
1299
+ @importtools.prepare_submodel(
1300
+ "petmodel",
1301
+ petinterfaces.PETModel_V1,
1302
+ petinterfaces.PETModel_V1.prepare_nmbzones,
1303
+ petinterfaces.PETModel_V1.prepare_subareas,
1304
+ )
1305
+ def add_petmodel_v1(
1306
+ self,
1307
+ petmodel: petinterfaces.PETModel_V1,
1308
+ /,
1309
+ *,
1310
+ refresh: bool, # pylint: disable=unused-argument
1311
+ ) -> None:
1312
+ """Initialise the given `petmodel` that follows the |PETModel_V1| interface.
1313
+
1314
+ >>> from hydpy.models.gland_gr4 import *
1315
+ >>> parameterstep()
1316
+ >>> area(5.0)
1317
+ >>> with model.add_petmodel_v1("evap_ret_tw2002"):
1318
+ ... nmbhru
1319
+ ... hruarea
1320
+ ... evapotranspirationfactor(1.5)
1321
+ nmbhru(1)
1322
+ hruarea(5.0)
1323
+
1324
+ >>> etf = model.petmodel.parameters.control.evapotranspirationfactor
1325
+ >>> etf
1326
+ evapotranspirationfactor(1.5)
1327
+ """
1328
+ control = self.parameters.control
1329
+ petmodel.prepare_nmbzones(1)
1330
+ petmodel.prepare_subareas(control.area.value)
1331
+
1332
+
1333
+ class Main_RConcModel_V1(modeltools.AdHocModel):
1334
+ """Base class for |gland.DOCNAME.long| models that use a single submodel that
1335
+ complies with the |RConcModel_V1| interface."""
1336
+
1337
+ rconcmodel: modeltools.SubmodelProperty
1338
+ rconcmodel_is_mainmodel = modeltools.SubmodelIsMainmodelProperty()
1339
+ rconcmodel_typeid = modeltools.SubmodelTypeIDProperty()
1340
+
1341
+ @importtools.prepare_submodel("rconcmodel", rconcinterfaces.RConcModel_V1)
1342
+ def add_rconcmodel_v1(
1343
+ self, rconcmodel: rconcinterfaces.RConcModel_V1, /, *, refresh: bool
1344
+ ) -> None:
1345
+ """Initialise the given submodel that follows the |RConcModel_V1| interface and
1346
+ is responsible for calculating runoff concentration.
1347
+
1348
+ >>> from hydpy.models.gland_gr5 import *
1349
+ >>> simulationstep("1d")
1350
+ >>> parameterstep("1d")
1351
+ >>> with model.add_rconcmodel_v1("rconc_uh"):
1352
+ ... uh("gr_uh2", x4=3.0)
1353
+ >>> model.rconcmodel.parameters.control.uh
1354
+ uh("gr_uh2", x4=3.0)
1355
+ """
1356
+
1357
+ def _get_rconcmodel_waterbalance(
1358
+ self, initial_conditions: ConditionsModel
1359
+ ) -> float:
1360
+ """Get the water balance of the single runoff concentration submodel if
1361
+ used."""
1362
+ if self.rconcmodel:
1363
+ return self.rconcmodel.get_waterbalance(
1364
+ initial_conditions["model.rconcmodel"]
1365
+ )
1366
+ return 0.0
1367
+
1368
+
1369
+ class Main_RConcModel_V2(modeltools.AdHocModel):
1370
+ """Base class for |gland.DOCNAME.long| models that use two submodels that comply
1371
+ with the |RConcModel_V1| interface."""
1372
+
1373
+ rconcmodel_routingstore: modeltools.SubmodelProperty
1374
+ rconcmodel_routingstore_is_mainmodel = modeltools.SubmodelIsMainmodelProperty()
1375
+ rconcmodel_routingstore_typeid = modeltools.SubmodelTypeIDProperty()
1376
+
1377
+ rconcmodel_directflow: modeltools.SubmodelProperty
1378
+ rconcmodel_directflow_is_mainmodel = modeltools.SubmodelIsMainmodelProperty()
1379
+ rconcmodel_directflow_typeid = modeltools.SubmodelTypeIDProperty()
1380
+
1381
+ @importtools.prepare_submodel(
1382
+ "rconcmodel_routingstore", rconcinterfaces.RConcModel_V1
1383
+ )
1384
+ def add_rconcmodel_routingstore_v1(
1385
+ self, rconcmodel: rconcinterfaces.RConcModel_V1, /, *, refresh: bool
1386
+ ) -> None:
1387
+ """Initialise the given submodel that follows the |RConcModel_V1| interface and
1388
+ is responsible for calculating the runoff concentration related to the routing
1389
+ store.
1390
+
1391
+ >>> from hydpy.models.gland_gr4 import *
1392
+ >>> simulationstep("1d")
1393
+ >>> parameterstep("1d")
1394
+ >>> with model.add_rconcmodel_routingstore_v1("rconc_uh"):
1395
+ ... uh("gr_uh1", x4=2.0)
1396
+ >>> model.rconcmodel_routingstore.parameters.control.uh
1397
+ uh("gr_uh1", x4=2.0)
1398
+ """
1399
+
1400
+ @importtools.prepare_submodel(
1401
+ "rconcmodel_directflow", rconcinterfaces.RConcModel_V1
1402
+ )
1403
+ def add_rconcmodel_directflow_v1(
1404
+ self, rconcmodel: rconcinterfaces.RConcModel_V1, /, *, refresh: bool
1405
+ ) -> None:
1406
+ """Initialise the given submodel that follows the |RConcModel_V1| interface and
1407
+ is responsible for calculating the runoff concentration related to the direct
1408
+ runoff.
1409
+
1410
+ >>> from hydpy.models.gland_gr4 import *
1411
+ >>> simulationstep("1d")
1412
+ >>> parameterstep("1d")
1413
+ >>> with model.add_rconcmodel_directflow_v1("rconc_uh"):
1414
+ ... uh("gr_uh2", x4=3.0)
1415
+ >>> model.rconcmodel_directflow.parameters.control.uh
1416
+ uh("gr_uh2", x4=3.0)
1417
+ """
1418
+
1419
+ def _get_rconcmodel_waterbalance_routingstore(
1420
+ self, initial_conditions: ConditionsModel
1421
+ ) -> float:
1422
+ r"""Get the water balance of the routing store runoff concentration submodel if
1423
+ used."""
1424
+ if self.rconcmodel_routingstore:
1425
+ return self.rconcmodel_routingstore.get_waterbalance(
1426
+ initial_conditions["model.rconcmodel_routingstore"]
1427
+ )
1428
+ return 0.0
1429
+
1430
+ def _get_rconcmodel_waterbalance_directflow(
1431
+ self, initial_conditions: ConditionsModel
1432
+ ) -> float:
1433
+ r"""Get the water balance of the direct flow runoff concentration submodel if
1434
+ used."""
1435
+ if self.rconcmodel_directflow:
1436
+ return self.rconcmodel_directflow.get_waterbalance(
1437
+ initial_conditions["model.rconcmodel_directflow"]
1438
+ )
1439
+ return 0.0