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,1329 @@
1
+ """
2
+ .. _`LARSIM`: http://www.larsim.de/en/the-model/
3
+ """
4
+
5
+ # import...
6
+ # ...from standard library
7
+ from __future__ import annotations
8
+ import warnings
9
+
10
+ # ...from site-packages
11
+ import numpy
12
+
13
+ # ...from HydPy
14
+ import hydpy
15
+ from hydpy import config
16
+ from hydpy.core import exceptiontools
17
+ from hydpy.core import objecttools
18
+ from hydpy.core import parametertools
19
+ from hydpy.core import sequencetools
20
+ from hydpy.core import timetools
21
+ from hydpy.core.typingtools import *
22
+
23
+ # ...from lland
24
+ from hydpy.models.lland.lland_constants import CONSTANTS as CONSTANTS_
25
+ from hydpy.models.lland import lland_parameters
26
+
27
+
28
+ # spatial information
29
+
30
+
31
+ class FT(parametertools.Parameter):
32
+ """Teileinzugsgebietsfläche (subbasin area) [km²]."""
33
+
34
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (1e-10, None)
35
+
36
+
37
+ class NHRU(parametertools.Parameter):
38
+ """Anzahl der Hydrotope (number of hydrological response units) [-].
39
+
40
+ Note that |NHRU| determines the length of most 1-dimensional |lland.DOCNAME.long|
41
+ parameters and sequences. This requires that the value of the respective |NHRU|
42
+ instance is set before any of the values of these 1-dimensional parameters or
43
+ sequences are set. Changing the value of the |NHRU| instance necessitates setting
44
+ their values again:
45
+
46
+ Examples:
47
+
48
+ >>> from hydpy.models.lland import *
49
+ >>> parameterstep("1d")
50
+ >>> nhru(5)
51
+ >>> control.kg.shape
52
+ (5,)
53
+ >>> control.kapgrenz.shape
54
+ (5, 2)
55
+ >>> fluxes.tkor.shape
56
+ (5,)
57
+ >>> control.wg2z.shape
58
+ (12,)
59
+ """
60
+
61
+ NDIM, TYPE, TIME, SPAN = 0, int, None, (1, None)
62
+
63
+ def __call__(self, *args, **kwargs) -> None:
64
+ super().__call__(*args, **kwargs)
65
+
66
+ skippars = (parametertools.MonthParameter, parametertools.MOYParameter)
67
+ for subpars in self.subpars.pars.model.parameters:
68
+ for par in subpars:
69
+ if (par.NDIM == 1) and not isinstance(par, skippars):
70
+ par.shape = self.value
71
+ self.subpars.kapgrenz.shape = self.value, 2
72
+
73
+ skipseqs = (sequencetools.LogSequences, sequencetools.LinkSequences)
74
+ sequences = self.subpars.pars.model.sequences
75
+ for subseqs in sequences:
76
+ if not isinstance(subseqs, skipseqs):
77
+ for seq in subseqs:
78
+ if seq.NDIM == 1:
79
+ seq.shape = self.value
80
+
81
+
82
+ class Lnk(parametertools.NameParameter):
83
+ """Landnutzungsklasse (land use class) [-].
84
+
85
+ For increasing legibility, |lland.DOCNAME.long| constants are used for string
86
+ representions of |Lnk| objects:
87
+
88
+ >>> from hydpy.models.lland import *
89
+ >>> parameterstep("1d")
90
+ >>> lnk
91
+ lnk(?)
92
+ >>> nhru(4)
93
+ >>> lnk(ACKER, ACKER, WASSER, MISCHW)
94
+ >>> from hydpy import print_vector
95
+ >>> print_vector(lnk.values)
96
+ 4, 4, 16, 15
97
+ >>> lnk
98
+ lnk(ACKER, ACKER, WASSER, MISCHW)
99
+ >>> lnk(ACKER)
100
+ >>> lnk
101
+ lnk(ACKER)
102
+ """
103
+
104
+ constants = CONSTANTS_
105
+
106
+
107
+ class FHRU(lland_parameters.ParameterComplete):
108
+ """Flächenanteile der Hydrotope (area percentages of the respective HRUs) [-]."""
109
+
110
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, 1.0)
111
+
112
+
113
+ # input correction
114
+
115
+
116
+ class KG(lland_parameters.ParameterComplete):
117
+ """Niederschlagskorrekturfaktor (adjustment factor for precipitation)
118
+ [-]."""
119
+
120
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
121
+ INIT = 1.0
122
+
123
+
124
+ class KT(lland_parameters.ParameterComplete):
125
+ """Temperaturkorrektursummand (adjustment summand for air temperature)
126
+ [°C]."""
127
+
128
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
129
+ INIT = 0.0
130
+
131
+
132
+ # energy adjustment
133
+
134
+
135
+ class P1Strahl(parametertools.Parameter):
136
+ """Konstante der Globalstrahlungsreduktion für Wald (constant for
137
+ reducing the global radiation in forests) [-]."""
138
+
139
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
140
+ INIT = 0.5
141
+
142
+
143
+ class P2Strahl(parametertools.Parameter):
144
+ """Faktor der Globalstrahlungsreduktion für Wald (factor for
145
+ reducing the global radiation in forests) [-]."""
146
+
147
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
148
+ INIT = 1.0 / 35.0
149
+
150
+
151
+ class Albedo0Snow(parametertools.Parameter):
152
+ """Albedo von Neuschnee (albedo of fresh snow) [-]."""
153
+
154
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
155
+ INIT = 0.8
156
+
157
+
158
+ class SnowAgingFactor(parametertools.Parameter):
159
+ """Wichtungsfaktor für die Sensitivität der Albedo für die Alterung des
160
+ Schnees (weighting factor of albedo sensitivity for snow aging) [-]."""
161
+
162
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
163
+ INIT = 0.35
164
+
165
+
166
+ class Turb0(parametertools.Parameter):
167
+ """Parameter des Übergangskoeffizienten des turbulenten Wärmestroms
168
+ (parameter of transition coefficient for turbulent heat flux)
169
+ [W/m²/K].
170
+
171
+ Parameter |Turb0| corresponds to the LARSIM parameter `A0`.
172
+ """
173
+
174
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
175
+ INIT = 2.0
176
+
177
+
178
+ class Turb1(parametertools.Parameter):
179
+ """Parameter des Übergangskoeffizienten des turbulenten Wärmestroms
180
+ (parameter of transition coefficient for turbulent heat flux)
181
+ [J/m³/K].
182
+
183
+ Parameter |Turb0| corresponds to the LARSIM parameter `A1`.
184
+ """
185
+
186
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
187
+ INIT = 2.0
188
+
189
+
190
+ # wind speed adjustment
191
+
192
+
193
+ class MeasuringHeightWindSpeed(parametertools.Parameter):
194
+ """The height above ground of the wind speed measurements [m]."""
195
+
196
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0, None)
197
+ INIT = 10.0
198
+
199
+
200
+ class P1Wind(parametertools.Parameter):
201
+ """Konstante der Windgeschwindigkeitsreduktion für Wald (constant for
202
+ reducing the wind speed in forests) [-]."""
203
+
204
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
205
+ INIT = 0.6
206
+
207
+
208
+ class P2Wind(parametertools.Parameter):
209
+ """Faktor der Windgeschwindigkeitsreduktion für Wald (factor for
210
+ reducing the wind speed in forests) [-]."""
211
+
212
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
213
+ INIT = 1.0 / 70.0
214
+
215
+
216
+ # interception
217
+
218
+
219
+ class LAI(lland_parameters.LanduseMonthParameter):
220
+ """Blattflächenindex (leaf area index) [-]."""
221
+
222
+ NDIM, TYPE, TIME, SPAN = 2, float, None, (0.0, None)
223
+ INIT = 5.0
224
+
225
+
226
+ class HInz(parametertools.Parameter):
227
+ """Interzeptionskapazität bezogen auf die Blattoberfläche (interception
228
+ capacity normalized to the leaf surface area) [mm]."""
229
+
230
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
231
+ INIT = 0.2
232
+
233
+
234
+ # snow interception
235
+
236
+
237
+ class P1SIMax(parametertools.Parameter):
238
+ """Konstante zur Berechnung der maximalen Schneeinterzeptionskapazität basierend
239
+ auf dem Blattflächenindex (constant for calculating the maximum snow interception
240
+ capacity based on the leaf area index) [mm]."""
241
+
242
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
243
+ INIT = 8.0
244
+
245
+
246
+ class P2SIMax(parametertools.Parameter):
247
+ """Faktor zur Berechnung der maximalen Schneeinterzeptionskapazität basierend
248
+ auf dem Blattflächenindex (factor for calculating the maximum snow interception
249
+ capacity based on the leaf area index) [mm]."""
250
+
251
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
252
+ INIT = 1.5
253
+
254
+
255
+ class P1SIRate(parametertools.Parameter):
256
+ """Konstante zur Berechnung des Verhältnisses von Schneeinerzeptionsrate und
257
+ Niederschlagsintensität basierend auf dem Blattflächenindex (constant for
258
+ calculating the ratio of the snow interception rate and the precipitation
259
+ intensity based on the leaf area index) [-]."""
260
+
261
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
262
+ INIT = 0.2
263
+
264
+
265
+ class P2SIRate(parametertools.Parameter):
266
+ """Faktor zur Berechnung des Verhältnisses von Schneeinerzeptionsrate und
267
+ Niederschlagsintensität basierend auf dem Blattflächenindex (factor for
268
+ calculating the ratio of the snow interception rate and precipitation intensity
269
+ based on the leaf area index) [-]."""
270
+
271
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
272
+ INIT = 0.02
273
+
274
+
275
+ class P3SIRate(parametertools.Parameter):
276
+ """Faktor zur Berechnung des Verhältnisses von Schneeinerzeptionsrate und
277
+ Niederschlagsintensität basierend auf der bereits interzipierten Schneemenge
278
+ (factor for calculating the ratio of the snow interception rate and precipitation
279
+ intensity based on the amount of already intercepted snow) [1/mm]."""
280
+
281
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 0.05)
282
+ INIT = 0.003
283
+
284
+
285
+ # snow
286
+
287
+
288
+ class TRefT(lland_parameters.ParameterLand):
289
+ """Lufttemperaturgrenzwert des Grad-Tag-Verfahrens (air temperature
290
+ threshold of the degree-day method) [°C]."""
291
+
292
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
293
+ INIT = 0.0
294
+
295
+
296
+ class TRefN(lland_parameters.ParameterLand):
297
+ """Niederschlagstemperaturgrenzwert des zur Berechnung des Wärmeeintrags
298
+ durch Regen (precipitation temperature threshold to calculate heat flux
299
+ caused by liquid precipitation on snow) [°C]."""
300
+
301
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
302
+ INIT = 0.0
303
+
304
+
305
+ class TGr(lland_parameters.ParameterLand):
306
+ """Temperaturgrenzwert flüssiger/fester Niederschlag (threshold
307
+ temperature liquid/frozen precipitation) [°C]."""
308
+
309
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
310
+ INIT = 0.0
311
+
312
+
313
+ class TSp(lland_parameters.ParameterLand):
314
+ """Temperaturspanne flüssiger/fester Niederschlag (temperature range
315
+ with mixed precipitation) [°C]."""
316
+
317
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
318
+ INIT = 0.0
319
+
320
+
321
+ class GTF(lland_parameters.ParameterLand):
322
+ """Grad-Tag-Faktor (factor of the degree-day method) [mm/°C/T]."""
323
+
324
+ NDIM, TYPE, TIME, SPAN = 1, float, True, (0.0, None)
325
+ INIT = 3.0
326
+
327
+
328
+ class PWMax(lland_parameters.ParameterLand):
329
+ """Maximalverhältnis Gesamt- zu Trockenschnee (maximum ratio of the
330
+ total and the frozen water equivalent stored in the snow cover) [-].
331
+
332
+ In addition to the |parametertools| call method, it
333
+ is possible to set the value of parameter |PWMax| in accordance to
334
+ the keyword arguments `rhot0` and `rhodkrit`.
335
+
336
+ Basic Equation:
337
+ :math:`PWMax = \\frac{1.474 \\cdot rhodkrit}
338
+ {rhot0 + 0.474 \\cdot rhodkrit}`
339
+
340
+ Example:
341
+
342
+ Using the common values for both `rhot0` and `rhodkrit`...
343
+
344
+ >>> from hydpy.models.lland import *
345
+ >>> parameterstep()
346
+ >>> nhru(1)
347
+ >>> lnk(ACKER)
348
+ >>> pwmax(rhot0=0.2345, rhodkrit=0.42)
349
+
350
+ ...results in:
351
+
352
+ >>> pwmax
353
+ pwmax(1.427833)
354
+
355
+ This is also the default value of |PWMax|, meaning the relative
356
+ portion of liquid water in the snow cover cannot exceed 30 %.
357
+
358
+ Additional error messages try to clarify how to pass parameters:
359
+
360
+ >>> pwmax(rhot0=0.2345)
361
+ Traceback (most recent call last):
362
+ ...
363
+ ValueError: For the calculating parameter `pwmax`, both keyword \
364
+ arguments `rhot0` and `rhodkrit` are required.
365
+
366
+ >>> pwmax(rho_t_0=0.2345)
367
+ Traceback (most recent call last):
368
+ ...
369
+ ValueError: Parameter `pwmax` can be set by directly passing a \
370
+ single value or a list of values, by assigning single values to landuse \
371
+ keywords, or by calculating a value based on the keyword arguments \
372
+ `rhot0` and `rhodkrit`.
373
+
374
+ Passing landuse specific parameter values is also supported
375
+ (but not in combination with `rhot0` and `rhodkrit`):
376
+
377
+ >>> pwmax(acker=2.0, vers=3.0)
378
+ >>> pwmax
379
+ pwmax(2.0)
380
+
381
+ The "normal" input error management still works:
382
+
383
+ >>> pwmax()
384
+ Traceback (most recent call last):
385
+ ...
386
+ ValueError: For parameter `pwmax` of element `?` neither \
387
+ a positional nor a keyword argument is given.
388
+ """
389
+
390
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (1.0, None)
391
+ INIT = 1.4278333871488538
392
+
393
+ def __call__(self, *args, **kwargs) -> None:
394
+ """The prefered way to pass values to |PWMax| instances within parameter
395
+ control files.
396
+ """
397
+ rhot0 = float(kwargs.pop("rhot0", numpy.nan))
398
+ rhodkrit = float(kwargs.pop("rhodkrit", numpy.nan))
399
+ missing = int(numpy.isnan(rhot0)) + int(numpy.isnan(rhodkrit))
400
+ try:
401
+ super().__call__(*args, **kwargs)
402
+ return
403
+ except TypeError:
404
+ pass
405
+ except BaseException as exc:
406
+ if missing == 2:
407
+ raise exc
408
+ if not missing:
409
+ self(1.474 * rhodkrit / (rhot0 + 0.474 * rhodkrit))
410
+ elif missing == 1:
411
+ raise ValueError(
412
+ "For the calculating parameter `pwmax`, both keyword "
413
+ "arguments `rhot0` and `rhodkrit` are required."
414
+ )
415
+ else:
416
+ raise ValueError(
417
+ "Parameter `pwmax` can be set by directly passing a "
418
+ "single value or a list of values, by assigning single "
419
+ "values to landuse keywords, or by calculating a value "
420
+ "based on the keyword arguments `rhot0` and `rhodkrit`."
421
+ )
422
+
423
+
424
+ class RefreezeFlag(parametertools.Parameter):
425
+ """Flag um wiedergefrieren zu aktivieren (flag to activate refreezing)
426
+ [-]."""
427
+
428
+ NDIM, TYPE, TIME, SPAN = 0, int, None, (False, True)
429
+ INIT = 0
430
+
431
+
432
+ class KTSchnee(parametertools.Parameter):
433
+ """Effektive Wärmeleitfähigkeit der obersten Schneeschicht (effective
434
+ thermal conductivity of the top snow layer) [W/m²/K].
435
+
436
+ Note that, at least for application model |lland_knauf|, it is fine to set the
437
+ value of parameter |KTSchnee| to |numpy.inf| to disable the explicit modelling of
438
+ the top snow layer. As a result, the top layer does not dampen the effects of
439
+ atmospheric influences like radiative heating. Another aspect is that the snow
440
+ surface temperature does not need to be determined iteratively, as it is always
441
+ identical with the the snow bulk temperature, which decreases computation times.
442
+ """
443
+
444
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, numpy.inf)
445
+ INIT = 5.0
446
+
447
+
448
+ class WG2Z(parametertools.MonthParameter):
449
+ """Bodenwärmestrom in der Tiefe 2z (soil heat flux at depth 2z)
450
+ [W/m²]."""
451
+
452
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
453
+ INIT = 0.0
454
+
455
+
456
+ # soil properties
457
+
458
+
459
+ class WMax(lland_parameters.ParameterSoil):
460
+ """Maximaler Bodenwasserspeicher (maximum soil water storage) [mm]."""
461
+
462
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
463
+ INIT = 100.0
464
+
465
+ # defined at the bottom of the file:
466
+ CONTROLPARAMETERS: ClassVar[tuple[type[PWP], type[FK]]]
467
+
468
+ def trim(self, lower=None, upper=None) -> bool:
469
+ """Trim values in accordance with :math:`PWP \\leq FK \\leq WMax`.
470
+
471
+ >>> from hydpy.models.lland import *
472
+ >>> parameterstep()
473
+ >>> nhru(3)
474
+ >>> lnk(ACKER)
475
+
476
+ >>> pwp(20.0)
477
+ >>> wmax(10.0, 50.0, 90.0)
478
+ >>> wmax
479
+ wmax(20.0, 50.0, 90.0)
480
+
481
+ >>> fk.values = 60.0
482
+ >>> assert wmax.trim() is True
483
+ >>> wmax
484
+ wmax(60.0, 60.0, 90.0)
485
+ """
486
+ if lower is None:
487
+ lower = exceptiontools.getattr_(self.subpars.fk, "value", None)
488
+ if lower is None:
489
+ lower = exceptiontools.getattr_(self.subpars.pwp, "value", None)
490
+ return super().trim(lower, upper)
491
+
492
+
493
+ class FK(lland_parameters.ParameterSoilThreshold):
494
+ """Feldkapazität / Mindestbodenfeuchte für die Interflowentstehung (field
495
+ capacity / threshold value of soil moisture for interflow generation) [mm].
496
+
497
+ Note that one can define the values of parameter |FK| via the
498
+ keyword argument `relative`, as explained in the documentation
499
+ on class |ParameterSoilThreshold|.
500
+ """
501
+
502
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
503
+ INIT = 0.0
504
+
505
+ # defined at the bottom of the file:
506
+ CONTROLPARAMETERS: ClassVar[tuple[type[PWP], type[WMax]]]
507
+
508
+ def trim(self, lower=None, upper=None) -> bool:
509
+ """Trim upper values in accordance with :math:`PWP \\leq FK \\leq WMax`.
510
+
511
+ >>> from hydpy.models.lland import *
512
+ >>> parameterstep()
513
+ >>> nhru(3)
514
+ >>> lnk(ACKER)
515
+ >>> pwp(20.0)
516
+ >>> wmax(80.0)
517
+ >>> fk(10.0, 50.0, 90.0)
518
+ >>> fk
519
+ fk(20.0, 50.0, 80.0)
520
+ """
521
+ if lower is None:
522
+ lower = exceptiontools.getattr_(self.subpars.pwp, "value", None)
523
+ if upper is None:
524
+ upper = exceptiontools.getattr_(self.subpars.wmax, "value", None)
525
+ return super().trim(lower, upper)
526
+
527
+
528
+ class PWP(lland_parameters.ParameterSoilThreshold):
529
+ """Permanenter Welkepunkt / Mindestbodenfeuchte für die
530
+ Basisabflussentstehung (permanent wilting point threshold value of soil
531
+ moisture for base flow generation) [mm].
532
+
533
+ Note that one can define the values of parameter |PWP| via the
534
+ keyword argument `relative`, as explained in the documentation
535
+ on class |ParameterSoilThreshold|.
536
+ """
537
+
538
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
539
+ INIT = 0.0
540
+
541
+ CONTROLPARAMETERS = (WMax, FK)
542
+
543
+ def trim(self, lower=None, upper=None) -> bool:
544
+ """Trim values in accordance with :math:`PWP \\leq FK \\leq WMax`.
545
+
546
+ >>> from hydpy.models.lland import *
547
+ >>> parameterstep()
548
+ >>> nhru(3)
549
+ >>> lnk(ACKER)
550
+ >>> wmax(100.0)
551
+ >>> pwp(-10.0, 50.0, 110.0)
552
+ >>> pwp
553
+ pwp(0.0, 50.0, 100.0)
554
+
555
+ >>> fk.values = 80.0
556
+ >>> assert pwp.trim() is True
557
+ >>> pwp
558
+ pwp(0.0, 50.0, 80.0)
559
+ """
560
+ if upper is None:
561
+ upper = exceptiontools.getattr_(self.subpars.fk, "value", None)
562
+ if upper is None:
563
+ upper = exceptiontools.getattr_(self.subpars.wmax, "value", None)
564
+ return super().trim(lower, upper)
565
+
566
+
567
+ # runoff generation
568
+
569
+
570
+ class BSf(lland_parameters.ParameterSoil):
571
+ """Bodenfeuchte-Sättigungsfläche-Parameter (shape parameter for the
572
+ relation between the avarage soil moisture and the relative saturated
573
+ area of a subbasin) [-]."""
574
+
575
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
576
+ INIT = 0.4
577
+
578
+
579
+ class FVF(parametertools.Parameter):
580
+ """Frostversiegelungsfaktor zur Ermittelung des Frostversiegelungsgrades
581
+ (frost sealing factor for determination of the degree of frost sealing
582
+ FVG) [-]."""
583
+
584
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
585
+ INIT = 0.5
586
+
587
+
588
+ class BSFF(parametertools.Parameter):
589
+ """Exponent zur Ermittelung des Frostversieglungsgrades (frost sealing
590
+ exponent for determination of degree of frost sealing FVG) [-]."""
591
+
592
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
593
+ INIT = 2.0
594
+
595
+
596
+ class DMin(lland_parameters.ParameterSoil):
597
+ """Drainageindex des mittleren Bodenspeichers (flux rate for
598
+ releasing interflow from the middle soil compartment) [mm/T].
599
+
600
+ In addition to the |ParameterSoil| `__call__` method, it is
601
+ possible to set the value of parameter |DMin| in accordance
602
+ to the keyword argument `r_dmin` due to compatibility reasons
603
+ with the original LARSIM implementation:
604
+
605
+ :math:`Dmin = 0.001008 \\cdot hours \\cdot r_dmin`
606
+
607
+ Example:
608
+
609
+ >>> from hydpy import pub
610
+ >>> pub.timegrids = "2000-01-01", "2000-01-02", "1d"
611
+ >>> from hydpy.models.lland import *
612
+ >>> parameterstep("1h")
613
+ >>> nhru(1)
614
+ >>> lnk(ACKER)
615
+ >>> dmin(r_dmin=10.0)
616
+ >>> dmin
617
+ dmin(0.01008)
618
+ >>> from hydpy import print_vector
619
+ >>> print_vector(dmin.values)
620
+ 0.24192
621
+
622
+ A wrong keyword results in the right answer:
623
+
624
+ >>> dmin(rdmin=10.0)
625
+ Traceback (most recent call last):
626
+ ...
627
+ TypeError: While trying to set the values of parameter `dmin` of \
628
+ element `?` based on keyword arguments `rdmin`, the following error occurred: \
629
+ Keyword `rdmin` is not among the available model constants.
630
+
631
+ .. testsetup::
632
+
633
+ >>> del pub.timegrids
634
+ """
635
+
636
+ NDIM, TYPE, TIME, SPAN = 1, float, True, (0.0, None)
637
+ INIT = 0.0
638
+
639
+ def __call__(self, *args, **kwargs) -> None:
640
+ """The prefered way to pass values to |DMin| instances
641
+ within parameter control files.
642
+ """
643
+ try:
644
+ lland_parameters.ParameterSoil.__call__(self, *args, **kwargs)
645
+ except TypeError:
646
+ if (r := kwargs.get("r_dmin")) is not None:
647
+ hours = hydpy.pub.timegrids.init.stepsize.hours
648
+ self.value = 0.001008 * hours * numpy.array(r)
649
+ self.trim()
650
+ else:
651
+ objecttools.augment_excmessage()
652
+
653
+ def trim(self, lower=None, upper=None) -> bool:
654
+ """Trim upper values in accordance with :math:`DMin \\leq DMax`.
655
+
656
+ >>> from hydpy.models.lland import *
657
+ >>> parameterstep("1d")
658
+ >>> simulationstep("12h")
659
+ >>> nhru(5)
660
+ >>> lnk(ACKER)
661
+ >>> dmax.values = 2.0
662
+ >>> dmin(-2.0, 0.0, 2.0, 4.0, 6.0)
663
+ >>> dmin
664
+ dmin(0.0, 0.0, 2.0, 4.0, 4.0)
665
+ """
666
+ if upper is None:
667
+ upper = exceptiontools.getattr_(self.subpars.dmax, "value", None)
668
+ return super().trim(lower, upper)
669
+
670
+
671
+ class DMax(lland_parameters.ParameterSoil):
672
+ """Drainageindex des oberen Bodenspeichers (additional flux rate for
673
+ releasing interflow from the upper soil compartment) [mm/T].
674
+
675
+ In addition to the |ParameterSoil| `__call__` method, it is
676
+ possible to set the value of parameter |DMax| in accordance
677
+ to the keyword argument `r_dmax` due to compatibility reasons
678
+ with the original LARSIM implemetation.
679
+
680
+ Basic Equation:
681
+ :math:`Dmax = 2.4192 \\cdot r_dmax`
682
+
683
+ Example:
684
+
685
+ >>> from hydpy import print_vector, pub
686
+ >>> pub.timegrids = "2000-01-01", "2000-01-02", "1d"
687
+ >>> from hydpy.models.lland import *
688
+ >>> parameterstep("1h")
689
+ >>> nhru(1)
690
+ >>> lnk(ACKER)
691
+ >>> dmax(r_dmax=10.0)
692
+ >>> dmax
693
+ dmax(1.008)
694
+ >>> print_vector(dmax.values)
695
+ 24.192
696
+
697
+ A wrong keyword results in the right answer:
698
+
699
+ >>> dmax(rdmax=10.0)
700
+ Traceback (most recent call last):
701
+ ...
702
+ TypeError: While trying to set the values of parameter `dmax` of \
703
+ element `?` based on keyword arguments `rdmax`, the following error occurred: \
704
+ Keyword `rdmax` is not among the available model constants.
705
+
706
+ .. testsetup::
707
+
708
+ >>> del pub.timegrids
709
+ """
710
+
711
+ NDIM, TYPE, TIME, SPAN = 1, float, True, (None, None)
712
+ INIT = 1.0
713
+
714
+ def __call__(self, *args, **kwargs) -> None:
715
+ """The prefered way to pass values to |DMax| instances
716
+ within parameter control files.
717
+ """
718
+ try:
719
+ lland_parameters.ParameterSoil.__call__(self, *args, **kwargs)
720
+ except TypeError:
721
+ if (r := kwargs.get("r_dmax")) is not None:
722
+ self.value = (
723
+ 0.1008
724
+ * hydpy.pub.timegrids.init.stepsize.hours
725
+ * numpy.array(r, config.NP_FLOAT)
726
+ )
727
+ self.trim()
728
+ else:
729
+ objecttools.augment_excmessage()
730
+
731
+ def trim(self, lower=None, upper=None) -> bool:
732
+ """Trim upper values in accordance with :math:`DMax \\geq DMin`.
733
+
734
+ >>> from hydpy.models.lland import *
735
+ >>> parameterstep("1d")
736
+ >>> simulationstep("12h")
737
+ >>> nhru(3)
738
+ >>> lnk(ACKER)
739
+ >>> dmin.values = 2.0
740
+ >>> dmax(2.0, 4.0, 6.0)
741
+ >>> dmax
742
+ dmax(4.0, 4.0, 6.0)
743
+ """
744
+ if lower is None:
745
+ lower = exceptiontools.getattr_(self.subpars.dmin, "value", None)
746
+ return super().trim(lower, upper)
747
+
748
+
749
+ class Beta(lland_parameters.ParameterSoil):
750
+ """Drainageindex des tiefen Bodenspeichers (storage coefficient for
751
+ releasing base flow from the lower soil compartment) [1/T]."""
752
+
753
+ NDIM, TYPE, TIME, SPAN = 1, float, True, (0.0, None)
754
+ INIT = 0.01
755
+
756
+
757
+ class FBeta(lland_parameters.ParameterSoil):
758
+ """Faktor zur Erhöhung der Perkolation im Grobporenbereich (factor for
759
+ increasing percolation under wet conditions) [-]."""
760
+
761
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (1.0, None)
762
+ INIT = 1.0
763
+
764
+
765
+ class KapMax(lland_parameters.ParameterSoil):
766
+ """Maximale kapillare Aufstiegsrate (maximum capillary rise) [mm/T]."""
767
+
768
+ NDIM, TYPE, TIME, SPAN = 1, float, True, (0.0, None)
769
+ INIT = 0.0
770
+
771
+
772
+ class KapGrenz(parametertools.Parameter):
773
+ """Grenzwerte für den kapillaren Aufstieg (threshold values related
774
+ to the capillary rise) [mm].
775
+
776
+ Parameter |KapGrenz| actually consists of two types of parameter values.
777
+ Both are thresholds and related to the soil water content. If the
778
+ actual soil water content is smaller than or equal to the first threshold,
779
+ capillary rise reaches its maximum value. If the actual water content
780
+ is larger than or equal to the second threshold, there is no capillary
781
+ rise at all. In between, the soil water content and the capillary rise
782
+ are inversely related (linear interpolation).
783
+
784
+ In the following example, the we set the lower threshold of all three
785
+ hydrological response units to 10 mm and the upper one to 40 mm:
786
+
787
+ >>> from hydpy.models.lland import *
788
+ >>> parameterstep("1d")
789
+ >>> simulationstep ("12h")
790
+ >>> nhru(3)
791
+ >>> kapgrenz(10.0, 40.0)
792
+ >>> kapgrenz
793
+ kapgrenz([[10.0, 40.0],
794
+ [10.0, 40.0],
795
+ [10.0, 40.0]])
796
+
797
+ The next example shows how assign different threshold pairs to each
798
+ response unit:
799
+
800
+ >>> kapgrenz([10.0, 40.0], [20., 60.0], [30., 80.0])
801
+ >>> kapgrenz
802
+ kapgrenz([[10.0, 40.0],
803
+ [20.0, 60.0],
804
+ [30.0, 80.0]])
805
+
806
+ It works equally well to pass a complete matrix, of course:
807
+
808
+ >>> kapgrenz([[10.0, 40.0],
809
+ ... [20.0, 60.0],
810
+ ... [30.0, 80.0]])
811
+ >>> kapgrenz
812
+ kapgrenz([[10.0, 40.0],
813
+ [20.0, 60.0],
814
+ [30.0, 80.0]])
815
+
816
+ It is also fine to pass a single value, in case you prefer a sharp
817
+ transition between zero and maximum capillary rise:
818
+
819
+ >>> kapgrenz(30.0)
820
+ >>> kapgrenz
821
+ kapgrenz(30.0)
822
+
823
+ For convenience and better compatibility with the original `LARSIM`_
824
+ model, we provide the keyword argument `option`. Simply pass an option
825
+ name and then parameter |KapGrenz| itself calculates suitable threshold
826
+ values based on soil properties.
827
+
828
+ The first possible string is `FK`. When passing this string, the current
829
+ value of parameter |FK| serves both as the lower and the upper threshold,
830
+ which is in agreement with the `LARSIM`_ option `KAPILLARER AUFSTIEG`:
831
+
832
+ >>> fk(60.0, 120.0, 180.0)
833
+ >>> kapgrenz(option="FK")
834
+ >>> kapgrenz
835
+ kapgrenz(option="FK")
836
+ >>> from hydpy import print_matrix
837
+ >>> print_matrix(kapgrenz.value)
838
+ | 60.0, 60.0 |
839
+ | 120.0, 120.0 |
840
+ | 180.0, 180.0 |
841
+
842
+ The second possible string is `0_WMax/10`, which corresponds to the
843
+ LARSIM option `KOPPELUNG BODEN/GRUNDWASSER`, where the lower and upper
844
+ threshold are zero and 10 % of the current value of parameter |WMax|,
845
+ respectively:
846
+
847
+ >>> wmax(100.0, 150.0, 200.0)
848
+ >>> kapgrenz(option="0_WMax/10")
849
+ >>> kapgrenz
850
+ kapgrenz(option="0_WMax/10")
851
+ >>> print_matrix(kapgrenz.values)
852
+ | 0.0, 10.0 |
853
+ | 0.0, 15.0 |
854
+ | 0.0, 20.0 |
855
+
856
+ The third possible string is `FK/2_FK` where the lower and the upper
857
+ threshold are 50 % and 100 % of the value of parameter |FK|, which does
858
+ not correspond to any available `LARSIM`_ option:
859
+
860
+ >>> kapgrenz(option="FK/2_FK")
861
+ >>> kapgrenz
862
+ kapgrenz(option="FK/2_FK")
863
+ >>> print_matrix(kapgrenz.values)
864
+ | 30.0, 60.0 |
865
+ | 60.0, 120.0 |
866
+ | 90.0, 180.0 |
867
+
868
+ If we set the values directly and they comply with the previously set option,
869
+ the string representation will show the previously set option:
870
+
871
+ >>> kapgrenz.values = [[30.0, 60.0], [60.0, 120.0], [90.0, 180.0]]
872
+ >>> kapgrenz
873
+ kapgrenz(option="FK/2_FK")
874
+
875
+ If we change the values and they do not comply with the option, the string
876
+ representation will show the modified values instead of the outdated option:
877
+
878
+ >>> kapgrenz.values = 100.0
879
+ >>> kapgrenz
880
+ kapgrenz(100.0)
881
+
882
+ If we change the parameter |FK|, on which |KapGrenz| depends, |KapGrenz| will not
883
+ be updated, but will remain at its old values. The option is no longer printed
884
+ because it is not valid anymore:
885
+
886
+ >>> kapgrenz(option="FK/2_FK")
887
+ >>> kapgrenz
888
+ kapgrenz(option="FK/2_FK")
889
+ >>> print_matrix(kapgrenz.values)
890
+ | 30.0, 60.0 |
891
+ | 60.0, 120.0 |
892
+ | 90.0, 180.0 |
893
+ >>> fk(100)
894
+ >>> kapgrenz
895
+ kapgrenz([[30.0, 60.0],
896
+ [60.0, 120.0],
897
+ [90.0, 180.0]])
898
+
899
+ The option will also not be printed if it leads to |numpy.nan| values:
900
+
901
+ >>> fk(numpy.nan)
902
+ >>> kapgrenz(option="FK/2_FK")
903
+ >>> kapgrenz
904
+ kapgrenz(nan)
905
+
906
+ Wrong keyword arguments result in errors like the following:
907
+
908
+ >>> kapgrenz(option1="FK", option2="0_WMax/10")
909
+ Traceback (most recent call last):
910
+ ...
911
+ NotImplementedError: The value(s) of parameter `kapgrenz` of element `?` \
912
+ could not be set based on the given keyword arguments.
913
+
914
+ >>> kapgrenz(option1="FK")
915
+ Traceback (most recent call last):
916
+ ...
917
+ NotImplementedError: The value(s) of parameter `kapgrenz` of element `?` \
918
+ could not be set based on the given keyword arguments.
919
+
920
+ >>> kapgrenz(option="NFk")
921
+ Traceback (most recent call last):
922
+ ...
923
+ ValueError: Parameter `kapgrenz` of element `?` supports the options \
924
+ `FK`, `0_WMax/10`, and `FK/2_FK`, but `NFk` is given.
925
+ """
926
+
927
+ CONTROLPARAMETERS = (WMax, FK)
928
+ NDIM, TYPE, TIME, SPAN = 2, float, None, (None, None)
929
+ INIT = 0.0
930
+ KEYWORDS = {"option": parametertools.Keyword(name="option")}
931
+
932
+ def __call__(self, *args, **kwargs) -> None:
933
+ self._keywordarguments = parametertools.KeywordArguments(False)
934
+ idx = self._find_kwargscombination(args, kwargs, ({"option"},))
935
+ if idx is None:
936
+ super().__call__(*args, **kwargs)
937
+ else:
938
+ self._keywordarguments = parametertools.KeywordArguments(
939
+ option=kwargs["option"]
940
+ )
941
+ self.values = self._get_values_according_to_option()
942
+
943
+ def _get_values_according_to_option(self) -> MatrixFloat:
944
+ con = self.subpars
945
+ values = numpy.zeros(self.shape)
946
+ kwargs = self._keywordarguments
947
+ if kwargs["option"] == "FK/2_FK":
948
+ values[:, 0] = 0.5 * con.fk
949
+ values[:, 1] = con.fk
950
+ elif kwargs["option"] == "0_WMax/10":
951
+ values[:, 0] = 0.0
952
+ values[:, 1] = 0.1 * con.wmax
953
+ elif kwargs["option"] == "FK":
954
+ values[:, 0] = con.fk
955
+ values[:, 1] = con.fk
956
+ else:
957
+ raise ValueError(
958
+ f"Parameter {objecttools.elementphrase(self)} supports "
959
+ f"the options `FK`, `0_WMax/10`, and `FK/2_FK`, but "
960
+ f"`{kwargs['option']}` is given."
961
+ ) from None
962
+ return values
963
+
964
+ def __repr__(self) -> str:
965
+ if self._keywordarguments.valid:
966
+ values = self._get_values_according_to_option()
967
+ if (values == self.values).all():
968
+ strings = []
969
+ for name, value in self._keywordarguments:
970
+ strings.append(f'{name}="{objecttools.repr_(value)}"')
971
+ return f"{self.name}({', '.join(strings)})"
972
+
973
+ return super().__repr__()
974
+
975
+
976
+ class RBeta(parametertools.Parameter):
977
+ """Boolscher Parameter der steuert, ob the Perkolation unterhalb der
978
+ Feldkapazität auf Null reduziert wird (flag to indicate if seepage is
979
+ reduced to zero below field capacity) [-]."""
980
+
981
+ NDIM, TYPE, TIME, SPAN = 0, bool, None, (False, True)
982
+ INIT = False
983
+
984
+
985
+ class VolBMax(parametertools.Parameter):
986
+ """Maximaler Inhalt des Gebietsspeichers für Basisabfluss (highest possible base
987
+ flow storage) [mm]."""
988
+
989
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
990
+ INIT = numpy.inf
991
+
992
+
993
+ class GSBMax(parametertools.Parameter):
994
+ """Faktor zur Anpassung von |VolBMax| (factor for adjusting |VolBMax|) [-]."""
995
+
996
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
997
+ INIT = 1.0
998
+
999
+
1000
+ class GSBGrad1(parametertools.Parameter):
1001
+ """Höchste Volumenzunahme des Gebietsspeichers für Basisabfluss ohne Begrenzung
1002
+ des Zuflusses (highest possible baseflow storage increase without inflow
1003
+ reductions) [mm/T]."""
1004
+
1005
+ NDIM, TYPE, TIME, SPAN = 0, float, True, (None, None)
1006
+ INIT = numpy.inf
1007
+
1008
+ def trim(self, lower=None, upper=None) -> bool:
1009
+ r"""Trim upper values in accordance with :math:`GSBGrad1 \leq GSBGrad2`.
1010
+
1011
+ >>> from hydpy.models.lland import *
1012
+ >>> simulationstep("1h")
1013
+ >>> parameterstep("1d")
1014
+ >>> gsbgrad2(1.0)
1015
+ >>> gsbgrad1(0.0)
1016
+ >>> gsbgrad1
1017
+ gsbgrad1(0.0)
1018
+ >>> gsbgrad1(1.0)
1019
+ >>> gsbgrad1
1020
+ gsbgrad1(1.0)
1021
+ >>> gsbgrad1(2.0)
1022
+ >>> gsbgrad1
1023
+ gsbgrad1(1.0)
1024
+ """
1025
+ if upper is None:
1026
+ upper = exceptiontools.getattr_(self.subpars.gsbgrad2, "value", None)
1027
+ return super().trim(lower, upper)
1028
+
1029
+
1030
+ class GSBGrad2(parametertools.Parameter):
1031
+ """Volumenzunahme des Gebietsspeichers für Basisabfluss, oberhalb der jeglicher
1032
+ Zufluss ausgeschlossen ist (highest possible baseflow storage increase) [mm/T]."""
1033
+
1034
+ NDIM, TYPE, TIME, SPAN = 0, float, True, (None, None)
1035
+ INIT = numpy.inf
1036
+
1037
+ def trim(self, lower=None, upper=None) -> bool:
1038
+ r"""Trim upper values in accordance with :math:`GSBGrad1 \leq GSBGrad2`.
1039
+
1040
+ >>> from hydpy.models.lland import *
1041
+ >>> simulationstep("1h")
1042
+ >>> parameterstep("1d")
1043
+ >>> gsbgrad1(1.0)
1044
+ >>> gsbgrad2(2.0)
1045
+ >>> gsbgrad2
1046
+ gsbgrad2(2.0)
1047
+ >>> gsbgrad2(1.0)
1048
+ >>> gsbgrad2
1049
+ gsbgrad2(1.0)
1050
+ >>> gsbgrad2(0.0)
1051
+ >>> gsbgrad2
1052
+ gsbgrad2(1.0)
1053
+ """
1054
+ if lower is None:
1055
+ lower = exceptiontools.getattr_(self.subpars.gsbgrad1, "value", None)
1056
+ return super().trim(lower, upper)
1057
+
1058
+
1059
+ # runoff concentration
1060
+
1061
+
1062
+ class A1(parametertools.Parameter):
1063
+ """Parameter für die kontinuierliche Aufteilung der
1064
+ Direktabflusskomponenten (threshold value for the continuous seperation
1065
+ of direct runoff in a slow and a fast component) [mm/T]
1066
+ """
1067
+
1068
+ NDIM, TYPE, TIME, SPAN = 0, float, True, (0.0, None)
1069
+ INIT = numpy.inf
1070
+
1071
+
1072
+ class A2(parametertools.Parameter):
1073
+ """Parameter für die diskontinuierliche Aufteilung der
1074
+ Direktabflusskomponenten (threshold value for the discontinuous seperation
1075
+ of direct runoff in a slow and a fast component) [mm/T]
1076
+ """
1077
+
1078
+ NDIM, TYPE, TIME, SPAN = 0, float, True, (0.0, None)
1079
+ INIT = 0.0
1080
+
1081
+
1082
+ class TInd(parametertools.Parameter):
1083
+ """Fließzeitindex (factor related to the time of concentration) [T].
1084
+
1085
+ In addition to the |Parameter| call method, it
1086
+ is possible to set the value of parameter |TInd| in accordance to
1087
+ the keyword arguments `tal` (talweg, [km]), `hot` (higher reference
1088
+ altitude, [m]), and `hut` (lower reference altitude, [m]). This is
1089
+ supposed to decrease the time of runoff concentration in small and/or
1090
+ steep catchments. Note that |TInd| does not only affect direct
1091
+ runoff, but interflow and base flow as well. Hence it seems advisable
1092
+ to use this regionalization strategy with caution.
1093
+
1094
+ Basic Equation:
1095
+ :math:`TInd[h] = (0.868 \\cdot \\frac{Tal^3}{HOT-HUT})^{0.385}`
1096
+
1097
+ Examples:
1098
+
1099
+ Using typical values:
1100
+
1101
+ >>> from hydpy.models.lland import *
1102
+ >>> parameterstep("1d")
1103
+ >>> simulationstep("12h")
1104
+ >>> tind(tal=5.0, hot=210.0, hut=200.0)
1105
+ >>> tind
1106
+ tind(0.104335)
1107
+
1108
+ Note that this result is related to the selected parameter step size
1109
+ of one day. The value related to the selected simulation step size
1110
+ of 12 hours is:
1111
+
1112
+ >>> from hydpy import round_
1113
+ >>> round_(tind.value)
1114
+ 0.20867
1115
+
1116
+ Unplausible input values lead to the following exceptions:
1117
+
1118
+ >>> tind(tal=5.0, hot=200.0, hut=200.0)
1119
+ Traceback (most recent call last):
1120
+ ...
1121
+ ValueError: For the alternative calculation of parameter `tind`, \
1122
+ the value assigned to keyword argument `tal` must be greater then zero and \
1123
+ the one of `hot` must be greater than the one of `hut`. However, for \
1124
+ element ?, the values `5.0`, `200.0` and `200.0` were given respectively.
1125
+
1126
+ >>> tind(tal=0.0, hot=210.0, hut=200.0)
1127
+ Traceback (most recent call last):
1128
+ ...
1129
+ ValueError: For the alternative calculation of parameter `tind`, \
1130
+ the value assigned to keyword argument `tal` must be greater then zero and \
1131
+ the one of `hot` must be greater than the one of `hut`. However, for \
1132
+ element ?, the values `0.0`, `210.0` and `200.0` were given respectively.
1133
+
1134
+ However, it is hard to define exact bounds for the value of
1135
+ |TInd| itself. Whenever it is below 0.001 or above 1000 days,
1136
+ the following warning is given:
1137
+
1138
+ >>> tind(tal=0.001, hot=210.0, hut=200.0)
1139
+ Traceback (most recent call last):
1140
+ ...
1141
+ UserWarning: Due to the given values for the keyword arguments \
1142
+ `tal` (0.001), `hot` (210.0) and `hut` (200.0), parameter `tind` of \
1143
+ element `?` has been set to an unrealistic value of 0.000134 hours.
1144
+
1145
+ Additionally, exceptions for missing (or wrong) keywords are
1146
+ implemented
1147
+
1148
+ >>> tind(tal=5.0, hot=210.0)
1149
+ Traceback (most recent call last):
1150
+ ...
1151
+ ValueError: For the alternative calculation of parameter `tind`, \
1152
+ values for all three keyword keyword arguments `tal`, `hot`, and `hut` \
1153
+ must be given.
1154
+
1155
+ """
1156
+
1157
+ NDIM, TYPE, TIME, SPAN = 0, float, False, (0.0, None)
1158
+ INIT = 1.0
1159
+
1160
+ def __call__(self, *args, **kwargs) -> None:
1161
+ try:
1162
+ super().__call__(*args, **kwargs)
1163
+ except NotImplementedError:
1164
+ try:
1165
+ tal = float(kwargs["tal"])
1166
+ hot = float(kwargs["hot"])
1167
+ hut = float(kwargs["hut"])
1168
+ except KeyError:
1169
+ raise ValueError(
1170
+ "For the alternative calculation of parameter `tind`, "
1171
+ "values for all three keyword keyword arguments `tal`, "
1172
+ "`hot`, and `hut` must be given."
1173
+ ) from None
1174
+ if (tal <= 0.0) or (hot <= hut):
1175
+ raise ValueError(
1176
+ f"For the alternative calculation of parameter `tind`, "
1177
+ f"the value assigned to keyword argument `tal` must be "
1178
+ f"greater then zero and the one of `hot` must be greater "
1179
+ f"than the one of `hut`. However, for element "
1180
+ f"{objecttools.devicename(self)}, the values `{tal}`, "
1181
+ f"`{hot}` and `{hut}` were given respectively."
1182
+ ) from None
1183
+ self.value = (0.868 * tal**3 / (hot - hut)) ** 0.385
1184
+ if (self > 1000.0) or (self < 0.001):
1185
+ warnings.warn(
1186
+ f"Due to the given values for the keyword arguments "
1187
+ f"`tal` ({tal}), `hot` ({hot}) and `hut` ({hut}), "
1188
+ f"parameter `tind` of element "
1189
+ f"`{objecttools.devicename(self)}` has been set to an "
1190
+ f"unrealistic value of {objecttools.repr_(self.value)} "
1191
+ f"hours."
1192
+ )
1193
+ self.value *= timetools.Period("1h") / hydpy.pub.options.simulationstep
1194
+
1195
+
1196
+ class EQB(parametertools.Parameter):
1197
+ """Kalibrierfaktor für die Basisabflusskonzentration (factor for adjusting
1198
+ the concentration time of baseflow). [-]."""
1199
+
1200
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
1201
+ INIT = 5000.0
1202
+
1203
+
1204
+ class EQI1(parametertools.Parameter):
1205
+ """Kalibrierfaktor für die "untere" Zwischenabflusskonzentration
1206
+ (factor for adjusting the concentration time of the first interflow
1207
+ component) [-]."""
1208
+
1209
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
1210
+ INIT = 2000.0
1211
+
1212
+ def trim(self, lower=None, upper=None) -> bool:
1213
+ """Trim upper values in accordance with :math:`EQI2 \\leq EQI1`.
1214
+
1215
+ >>> from hydpy.models.lland import *
1216
+ >>> parameterstep("1d")
1217
+ >>> eqi2.value = 1.0
1218
+ >>> eqi1(0.0)
1219
+ >>> eqi1
1220
+ eqi1(1.0)
1221
+ >>> eqi1(1.0)
1222
+ >>> eqi1
1223
+ eqi1(1.0)
1224
+ >>> eqi1(2.0)
1225
+ >>> eqi1
1226
+ eqi1(2.0)
1227
+ """
1228
+ if lower is None:
1229
+ lower = exceptiontools.getattr_(self.subpars.eqi2, "value", None)
1230
+ return super().trim(lower, upper)
1231
+
1232
+
1233
+ class EQI2(parametertools.Parameter):
1234
+ """Kalibrierfaktor für die "obere" Zwischenabflusskonzentration
1235
+ (factor for adjusting the concentration time of the second interflow
1236
+ component) [-]."""
1237
+
1238
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
1239
+ INIT = 1000.0
1240
+
1241
+ def trim(self, lower=None, upper=None) -> bool:
1242
+ """Trim upper values in accordance with :math:`EQI2 \\leq EQI1`.
1243
+
1244
+ >>> from hydpy.models.lland import *
1245
+ >>> parameterstep("1d")
1246
+ >>> eqi1.value = 3.0
1247
+ >>> eqi2(2.0)
1248
+ >>> eqi2
1249
+ eqi2(2.0)
1250
+ >>> eqi2(3.0)
1251
+ >>> eqi2
1252
+ eqi2(3.0)
1253
+ >>> eqi2(4.0)
1254
+ >>> eqi2
1255
+ eqi2(3.0)
1256
+ """
1257
+ if upper is None:
1258
+ upper = exceptiontools.getattr_(self.subpars.eqi1, "value", None)
1259
+ return super().trim(lower, upper)
1260
+
1261
+
1262
+ class EQD1(parametertools.Parameter):
1263
+ """Kalibrierfaktor für die langsamere Direktabflusskonzentration (factor
1264
+ for adjusting the concentration time of the slower component of direct
1265
+ runoff). [-]."""
1266
+
1267
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
1268
+ INIT = 100.0
1269
+
1270
+ def trim(self, lower=None, upper=None) -> bool:
1271
+ """Trim upper values in accordance with :math:`EQD2 \\leq EQD1`.
1272
+
1273
+ >>> from hydpy.models.lland import *
1274
+ >>> parameterstep("1d")
1275
+ >>> eqd2.value = 1.0
1276
+ >>> eqd1(0.0)
1277
+ >>> eqd1
1278
+ eqd1(1.0)
1279
+ >>> eqd1(1.0)
1280
+ >>> eqd1
1281
+ eqd1(1.0)
1282
+ >>> eqd1(2.0)
1283
+ >>> eqd1
1284
+ eqd1(2.0)
1285
+ """
1286
+ if lower is None:
1287
+ lower = exceptiontools.getattr_(self.subpars.eqd2, "value", None)
1288
+ return super().trim(lower, upper)
1289
+
1290
+
1291
+ class EQD2(parametertools.Parameter):
1292
+ """Kalibrierfaktor für die schnellere Direktabflusskonzentration (factor
1293
+ for adjusting the concentration time of the faster component of direct
1294
+ runoff). [-]."""
1295
+
1296
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
1297
+ INIT = 50.0
1298
+
1299
+ def trim(self, lower=None, upper=None) -> bool:
1300
+ """Trim upper values in accordance with :math:`EQD2 \\leq EQD1`.
1301
+
1302
+ >>> from hydpy.models.lland import *
1303
+ >>> parameterstep("1d")
1304
+ >>> eqd1.value = 3.0
1305
+ >>> eqd2(2.0)
1306
+ >>> eqd2
1307
+ eqd2(2.0)
1308
+ >>> eqd2(3.0)
1309
+ >>> eqd2
1310
+ eqd2(3.0)
1311
+ >>> eqd2(4.0)
1312
+ >>> eqd2
1313
+ eqd2(3.0)
1314
+ """
1315
+ if upper is None:
1316
+ upper = exceptiontools.getattr_(self.subpars.eqd1, "value", None)
1317
+ return super().trim(lower, upper)
1318
+
1319
+
1320
+ class NegQ(parametertools.Parameter):
1321
+ """Option: sind negative Abflüsse erlaubt (flag that indicated whether
1322
+ negative discharge values are allowed or not) [-]."""
1323
+
1324
+ NDIM, TYPE, TIME, SPAN = 0, bool, None, (0.0, None)
1325
+ INIT = False
1326
+
1327
+
1328
+ WMax.CONTROLPARAMETERS = (PWP, FK)
1329
+ FK.CONTROLPARAMETERS = (PWP, WMax)