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,1724 @@
1
+ #!python
2
+ # distutils: define_macros=NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION
3
+ # cython: language_level=3
4
+ # cython: cpow=True
5
+ # cython: boundscheck=False
6
+ # cython: wraparound=False
7
+ # cython: initializedcheck=False
8
+ # cython: cdivision=True
9
+ from typing import Optional
10
+ import numpy
11
+ cimport numpy
12
+ from libc.math cimport exp, fabs, log, sin, cos, tan, tanh, asin, acos, atan, isnan, isinf
13
+ from libc.math cimport NAN as nan
14
+ from libc.math cimport INFINITY as inf
15
+ import cython
16
+ from cpython.mem cimport PyMem_Malloc
17
+ from cpython.mem cimport PyMem_Realloc
18
+ from cpython.mem cimport PyMem_Free
19
+ from hydpy.cythons.autogen cimport configutils
20
+ from hydpy.cythons.autogen cimport interfaceutils
21
+ from hydpy.cythons.autogen cimport interputils
22
+ from hydpy.cythons.autogen import pointerutils
23
+ from hydpy.cythons.autogen cimport pointerutils
24
+ from hydpy.cythons.autogen cimport quadutils
25
+ from hydpy.cythons.autogen cimport rootutils
26
+ from hydpy.cythons.autogen cimport smoothutils
27
+ from hydpy.cythons.autogen cimport masterinterface
28
+
29
+
30
+ cdef void do_nothing(Model model) noexcept nogil:
31
+ pass
32
+
33
+ cpdef get_wrapper():
34
+ cdef CallbackWrapper wrapper = CallbackWrapper()
35
+ wrapper.callback = do_nothing
36
+ return wrapper
37
+
38
+ cdef public numpy.npy_bool TYPE_CHECKING = False
39
+ cdef public numpy.int64_t FIELD = 1
40
+ cdef public numpy.int64_t FOREST = 2
41
+ cdef public numpy.int64_t GLACIER = 3
42
+ cdef public numpy.int64_t ILAKE = 4
43
+ cdef public numpy.int64_t SEALED = 5
44
+ @cython.final
45
+ cdef class Parameters:
46
+ pass
47
+ @cython.final
48
+ cdef class ControlParameters:
49
+ pass
50
+ @cython.final
51
+ cdef class DerivedParameters:
52
+ pass
53
+ @cython.final
54
+ cdef class FixedParameters:
55
+ pass
56
+ @cython.final
57
+ cdef class Sequences:
58
+ pass
59
+ @cython.final
60
+ cdef class InputSequences:
61
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
62
+ cdef numpy.int64_t k
63
+ if self._p_inputflag:
64
+ self.p = self._p_inputpointer[0]
65
+ elif self._p_diskflag_reading:
66
+ self.p = self._p_ncarray[0]
67
+ elif self._p_ramflag:
68
+ self.p = self._p_array[idx]
69
+ if self._t_inputflag:
70
+ self.t = self._t_inputpointer[0]
71
+ elif self._t_diskflag_reading:
72
+ self.t = self._t_ncarray[0]
73
+ elif self._t_ramflag:
74
+ self.t = self._t_array[idx]
75
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
76
+ cdef numpy.int64_t k
77
+ if self._p_diskflag_writing:
78
+ self._p_ncarray[0] = self.p
79
+ if self._p_ramflag:
80
+ self._p_array[idx] = self.p
81
+ if self._t_diskflag_writing:
82
+ self._t_ncarray[0] = self.t
83
+ if self._t_ramflag:
84
+ self._t_array[idx] = self.t
85
+ cpdef inline set_pointerinput(self, str name, pointerutils.PDouble value):
86
+ if name == "p":
87
+ self._p_inputpointer = value.p_value
88
+ if name == "t":
89
+ self._t_inputpointer = value.p_value
90
+ @cython.final
91
+ cdef class FactorSequences:
92
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
93
+ cdef numpy.int64_t jdx0, jdx1
94
+ cdef numpy.int64_t k
95
+ if self._tc_diskflag_reading:
96
+ k = 0
97
+ for jdx0 in range(self._tc_length_0):
98
+ self.tc[jdx0] = self._tc_ncarray[k]
99
+ k += 1
100
+ elif self._tc_ramflag:
101
+ for jdx0 in range(self._tc_length_0):
102
+ self.tc[jdx0] = self._tc_array[idx, jdx0]
103
+ if self._fracrain_diskflag_reading:
104
+ k = 0
105
+ for jdx0 in range(self._fracrain_length_0):
106
+ self.fracrain[jdx0] = self._fracrain_ncarray[k]
107
+ k += 1
108
+ elif self._fracrain_ramflag:
109
+ for jdx0 in range(self._fracrain_length_0):
110
+ self.fracrain[jdx0] = self._fracrain_array[idx, jdx0]
111
+ if self._rfc_diskflag_reading:
112
+ k = 0
113
+ for jdx0 in range(self._rfc_length_0):
114
+ self.rfc[jdx0] = self._rfc_ncarray[k]
115
+ k += 1
116
+ elif self._rfc_ramflag:
117
+ for jdx0 in range(self._rfc_length_0):
118
+ self.rfc[jdx0] = self._rfc_array[idx, jdx0]
119
+ if self._sfc_diskflag_reading:
120
+ k = 0
121
+ for jdx0 in range(self._sfc_length_0):
122
+ self.sfc[jdx0] = self._sfc_ncarray[k]
123
+ k += 1
124
+ elif self._sfc_ramflag:
125
+ for jdx0 in range(self._sfc_length_0):
126
+ self.sfc[jdx0] = self._sfc_array[idx, jdx0]
127
+ if self._cfact_diskflag_reading:
128
+ k = 0
129
+ for jdx0 in range(self._cfact_length_0):
130
+ self.cfact[jdx0] = self._cfact_ncarray[k]
131
+ k += 1
132
+ elif self._cfact_ramflag:
133
+ for jdx0 in range(self._cfact_length_0):
134
+ self.cfact[jdx0] = self._cfact_array[idx, jdx0]
135
+ if self._swe_diskflag_reading:
136
+ k = 0
137
+ for jdx0 in range(self._swe_length_0):
138
+ for jdx1 in range(self._swe_length_1):
139
+ self.swe[jdx0, jdx1] = self._swe_ncarray[k]
140
+ k += 1
141
+ elif self._swe_ramflag:
142
+ for jdx0 in range(self._swe_length_0):
143
+ for jdx1 in range(self._swe_length_1):
144
+ self.swe[jdx0, jdx1] = self._swe_array[idx, jdx0, jdx1]
145
+ if self._gact_diskflag_reading:
146
+ k = 0
147
+ for jdx0 in range(self._gact_length_0):
148
+ self.gact[jdx0] = self._gact_ncarray[k]
149
+ k += 1
150
+ elif self._gact_ramflag:
151
+ for jdx0 in range(self._gact_length_0):
152
+ self.gact[jdx0] = self._gact_array[idx, jdx0]
153
+ if self._contriarea_diskflag_reading:
154
+ self.contriarea = self._contriarea_ncarray[0]
155
+ elif self._contriarea_ramflag:
156
+ self.contriarea = self._contriarea_array[idx]
157
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
158
+ cdef numpy.int64_t jdx0, jdx1
159
+ cdef numpy.int64_t k
160
+ if self._tc_diskflag_writing:
161
+ k = 0
162
+ for jdx0 in range(self._tc_length_0):
163
+ self._tc_ncarray[k] = self.tc[jdx0]
164
+ k += 1
165
+ if self._tc_ramflag:
166
+ for jdx0 in range(self._tc_length_0):
167
+ self._tc_array[idx, jdx0] = self.tc[jdx0]
168
+ if self._fracrain_diskflag_writing:
169
+ k = 0
170
+ for jdx0 in range(self._fracrain_length_0):
171
+ self._fracrain_ncarray[k] = self.fracrain[jdx0]
172
+ k += 1
173
+ if self._fracrain_ramflag:
174
+ for jdx0 in range(self._fracrain_length_0):
175
+ self._fracrain_array[idx, jdx0] = self.fracrain[jdx0]
176
+ if self._rfc_diskflag_writing:
177
+ k = 0
178
+ for jdx0 in range(self._rfc_length_0):
179
+ self._rfc_ncarray[k] = self.rfc[jdx0]
180
+ k += 1
181
+ if self._rfc_ramflag:
182
+ for jdx0 in range(self._rfc_length_0):
183
+ self._rfc_array[idx, jdx0] = self.rfc[jdx0]
184
+ if self._sfc_diskflag_writing:
185
+ k = 0
186
+ for jdx0 in range(self._sfc_length_0):
187
+ self._sfc_ncarray[k] = self.sfc[jdx0]
188
+ k += 1
189
+ if self._sfc_ramflag:
190
+ for jdx0 in range(self._sfc_length_0):
191
+ self._sfc_array[idx, jdx0] = self.sfc[jdx0]
192
+ if self._cfact_diskflag_writing:
193
+ k = 0
194
+ for jdx0 in range(self._cfact_length_0):
195
+ self._cfact_ncarray[k] = self.cfact[jdx0]
196
+ k += 1
197
+ if self._cfact_ramflag:
198
+ for jdx0 in range(self._cfact_length_0):
199
+ self._cfact_array[idx, jdx0] = self.cfact[jdx0]
200
+ if self._swe_diskflag_writing:
201
+ k = 0
202
+ for jdx0 in range(self._swe_length_0):
203
+ for jdx1 in range(self._swe_length_1):
204
+ self._swe_ncarray[k] = self.swe[jdx0, jdx1]
205
+ k += 1
206
+ if self._swe_ramflag:
207
+ for jdx0 in range(self._swe_length_0):
208
+ for jdx1 in range(self._swe_length_1):
209
+ self._swe_array[idx, jdx0, jdx1] = self.swe[jdx0, jdx1]
210
+ if self._gact_diskflag_writing:
211
+ k = 0
212
+ for jdx0 in range(self._gact_length_0):
213
+ self._gact_ncarray[k] = self.gact[jdx0]
214
+ k += 1
215
+ if self._gact_ramflag:
216
+ for jdx0 in range(self._gact_length_0):
217
+ self._gact_array[idx, jdx0] = self.gact[jdx0]
218
+ if self._contriarea_diskflag_writing:
219
+ self._contriarea_ncarray[0] = self.contriarea
220
+ if self._contriarea_ramflag:
221
+ self._contriarea_array[idx] = self.contriarea
222
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
223
+ if name == "contriarea":
224
+ self._contriarea_outputpointer = value.p_value
225
+ cpdef inline void update_outputs(self) noexcept nogil:
226
+ if self._contriarea_outputflag:
227
+ self._contriarea_outputpointer[0] = self.contriarea
228
+ @cython.final
229
+ cdef class FluxSequences:
230
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
231
+ cdef numpy.int64_t jdx0, jdx1
232
+ cdef numpy.int64_t k
233
+ if self._pc_diskflag_reading:
234
+ k = 0
235
+ for jdx0 in range(self._pc_length_0):
236
+ self.pc[jdx0] = self._pc_ncarray[k]
237
+ k += 1
238
+ elif self._pc_ramflag:
239
+ for jdx0 in range(self._pc_length_0):
240
+ self.pc[jdx0] = self._pc_array[idx, jdx0]
241
+ if self._ei_diskflag_reading:
242
+ k = 0
243
+ for jdx0 in range(self._ei_length_0):
244
+ self.ei[jdx0] = self._ei_ncarray[k]
245
+ k += 1
246
+ elif self._ei_ramflag:
247
+ for jdx0 in range(self._ei_length_0):
248
+ self.ei[jdx0] = self._ei_array[idx, jdx0]
249
+ if self._tf_diskflag_reading:
250
+ k = 0
251
+ for jdx0 in range(self._tf_length_0):
252
+ self.tf[jdx0] = self._tf_ncarray[k]
253
+ k += 1
254
+ elif self._tf_ramflag:
255
+ for jdx0 in range(self._tf_length_0):
256
+ self.tf[jdx0] = self._tf_array[idx, jdx0]
257
+ if self._spl_diskflag_reading:
258
+ k = 0
259
+ for jdx0 in range(self._spl_length_0):
260
+ self.spl[jdx0] = self._spl_ncarray[k]
261
+ k += 1
262
+ elif self._spl_ramflag:
263
+ for jdx0 in range(self._spl_length_0):
264
+ self.spl[jdx0] = self._spl_array[idx, jdx0]
265
+ if self._wcl_diskflag_reading:
266
+ k = 0
267
+ for jdx0 in range(self._wcl_length_0):
268
+ self.wcl[jdx0] = self._wcl_ncarray[k]
269
+ k += 1
270
+ elif self._wcl_ramflag:
271
+ for jdx0 in range(self._wcl_length_0):
272
+ self.wcl[jdx0] = self._wcl_array[idx, jdx0]
273
+ if self._spg_diskflag_reading:
274
+ k = 0
275
+ for jdx0 in range(self._spg_length_0):
276
+ self.spg[jdx0] = self._spg_ncarray[k]
277
+ k += 1
278
+ elif self._spg_ramflag:
279
+ for jdx0 in range(self._spg_length_0):
280
+ self.spg[jdx0] = self._spg_array[idx, jdx0]
281
+ if self._wcg_diskflag_reading:
282
+ k = 0
283
+ for jdx0 in range(self._wcg_length_0):
284
+ self.wcg[jdx0] = self._wcg_ncarray[k]
285
+ k += 1
286
+ elif self._wcg_ramflag:
287
+ for jdx0 in range(self._wcg_length_0):
288
+ self.wcg[jdx0] = self._wcg_array[idx, jdx0]
289
+ if self._glmelt_diskflag_reading:
290
+ k = 0
291
+ for jdx0 in range(self._glmelt_length_0):
292
+ self.glmelt[jdx0] = self._glmelt_ncarray[k]
293
+ k += 1
294
+ elif self._glmelt_ramflag:
295
+ for jdx0 in range(self._glmelt_length_0):
296
+ self.glmelt[jdx0] = self._glmelt_array[idx, jdx0]
297
+ if self._melt_diskflag_reading:
298
+ k = 0
299
+ for jdx0 in range(self._melt_length_0):
300
+ for jdx1 in range(self._melt_length_1):
301
+ self.melt[jdx0, jdx1] = self._melt_ncarray[k]
302
+ k += 1
303
+ elif self._melt_ramflag:
304
+ for jdx0 in range(self._melt_length_0):
305
+ for jdx1 in range(self._melt_length_1):
306
+ self.melt[jdx0, jdx1] = self._melt_array[idx, jdx0, jdx1]
307
+ if self._refr_diskflag_reading:
308
+ k = 0
309
+ for jdx0 in range(self._refr_length_0):
310
+ for jdx1 in range(self._refr_length_1):
311
+ self.refr[jdx0, jdx1] = self._refr_ncarray[k]
312
+ k += 1
313
+ elif self._refr_ramflag:
314
+ for jdx0 in range(self._refr_length_0):
315
+ for jdx1 in range(self._refr_length_1):
316
+ self.refr[jdx0, jdx1] = self._refr_array[idx, jdx0, jdx1]
317
+ if self._in__diskflag_reading:
318
+ k = 0
319
+ for jdx0 in range(self._in__length_0):
320
+ self.in_[jdx0] = self._in__ncarray[k]
321
+ k += 1
322
+ elif self._in__ramflag:
323
+ for jdx0 in range(self._in__length_0):
324
+ self.in_[jdx0] = self._in__array[idx, jdx0]
325
+ if self._r_diskflag_reading:
326
+ k = 0
327
+ for jdx0 in range(self._r_length_0):
328
+ self.r[jdx0] = self._r_ncarray[k]
329
+ k += 1
330
+ elif self._r_ramflag:
331
+ for jdx0 in range(self._r_length_0):
332
+ self.r[jdx0] = self._r_array[idx, jdx0]
333
+ if self._sr_diskflag_reading:
334
+ k = 0
335
+ for jdx0 in range(self._sr_length_0):
336
+ self.sr[jdx0] = self._sr_ncarray[k]
337
+ k += 1
338
+ elif self._sr_ramflag:
339
+ for jdx0 in range(self._sr_length_0):
340
+ self.sr[jdx0] = self._sr_array[idx, jdx0]
341
+ if self._ea_diskflag_reading:
342
+ k = 0
343
+ for jdx0 in range(self._ea_length_0):
344
+ self.ea[jdx0] = self._ea_ncarray[k]
345
+ k += 1
346
+ elif self._ea_ramflag:
347
+ for jdx0 in range(self._ea_length_0):
348
+ self.ea[jdx0] = self._ea_array[idx, jdx0]
349
+ if self._cf_diskflag_reading:
350
+ k = 0
351
+ for jdx0 in range(self._cf_length_0):
352
+ self.cf[jdx0] = self._cf_ncarray[k]
353
+ k += 1
354
+ elif self._cf_ramflag:
355
+ for jdx0 in range(self._cf_length_0):
356
+ self.cf[jdx0] = self._cf_array[idx, jdx0]
357
+ if self._inuz_diskflag_reading:
358
+ self.inuz = self._inuz_ncarray[0]
359
+ elif self._inuz_ramflag:
360
+ self.inuz = self._inuz_array[idx]
361
+ if self._perc_diskflag_reading:
362
+ self.perc = self._perc_ncarray[0]
363
+ elif self._perc_ramflag:
364
+ self.perc = self._perc_array[idx]
365
+ if self._q0_diskflag_reading:
366
+ self.q0 = self._q0_ncarray[0]
367
+ elif self._q0_ramflag:
368
+ self.q0 = self._q0_array[idx]
369
+ if self._el_diskflag_reading:
370
+ k = 0
371
+ for jdx0 in range(self._el_length_0):
372
+ self.el[jdx0] = self._el_ncarray[k]
373
+ k += 1
374
+ elif self._el_ramflag:
375
+ for jdx0 in range(self._el_length_0):
376
+ self.el[jdx0] = self._el_array[idx, jdx0]
377
+ if self._q1_diskflag_reading:
378
+ self.q1 = self._q1_ncarray[0]
379
+ elif self._q1_ramflag:
380
+ self.q1 = self._q1_array[idx]
381
+ if self._inrc_diskflag_reading:
382
+ self.inrc = self._inrc_ncarray[0]
383
+ elif self._inrc_ramflag:
384
+ self.inrc = self._inrc_array[idx]
385
+ if self._outrc_diskflag_reading:
386
+ self.outrc = self._outrc_ncarray[0]
387
+ elif self._outrc_ramflag:
388
+ self.outrc = self._outrc_array[idx]
389
+ if self._rt_diskflag_reading:
390
+ self.rt = self._rt_ncarray[0]
391
+ elif self._rt_ramflag:
392
+ self.rt = self._rt_array[idx]
393
+ if self._qt_diskflag_reading:
394
+ self.qt = self._qt_ncarray[0]
395
+ elif self._qt_ramflag:
396
+ self.qt = self._qt_array[idx]
397
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
398
+ cdef numpy.int64_t jdx0, jdx1
399
+ cdef numpy.int64_t k
400
+ if self._pc_diskflag_writing:
401
+ k = 0
402
+ for jdx0 in range(self._pc_length_0):
403
+ self._pc_ncarray[k] = self.pc[jdx0]
404
+ k += 1
405
+ if self._pc_ramflag:
406
+ for jdx0 in range(self._pc_length_0):
407
+ self._pc_array[idx, jdx0] = self.pc[jdx0]
408
+ if self._ei_diskflag_writing:
409
+ k = 0
410
+ for jdx0 in range(self._ei_length_0):
411
+ self._ei_ncarray[k] = self.ei[jdx0]
412
+ k += 1
413
+ if self._ei_ramflag:
414
+ for jdx0 in range(self._ei_length_0):
415
+ self._ei_array[idx, jdx0] = self.ei[jdx0]
416
+ if self._tf_diskflag_writing:
417
+ k = 0
418
+ for jdx0 in range(self._tf_length_0):
419
+ self._tf_ncarray[k] = self.tf[jdx0]
420
+ k += 1
421
+ if self._tf_ramflag:
422
+ for jdx0 in range(self._tf_length_0):
423
+ self._tf_array[idx, jdx0] = self.tf[jdx0]
424
+ if self._spl_diskflag_writing:
425
+ k = 0
426
+ for jdx0 in range(self._spl_length_0):
427
+ self._spl_ncarray[k] = self.spl[jdx0]
428
+ k += 1
429
+ if self._spl_ramflag:
430
+ for jdx0 in range(self._spl_length_0):
431
+ self._spl_array[idx, jdx0] = self.spl[jdx0]
432
+ if self._wcl_diskflag_writing:
433
+ k = 0
434
+ for jdx0 in range(self._wcl_length_0):
435
+ self._wcl_ncarray[k] = self.wcl[jdx0]
436
+ k += 1
437
+ if self._wcl_ramflag:
438
+ for jdx0 in range(self._wcl_length_0):
439
+ self._wcl_array[idx, jdx0] = self.wcl[jdx0]
440
+ if self._spg_diskflag_writing:
441
+ k = 0
442
+ for jdx0 in range(self._spg_length_0):
443
+ self._spg_ncarray[k] = self.spg[jdx0]
444
+ k += 1
445
+ if self._spg_ramflag:
446
+ for jdx0 in range(self._spg_length_0):
447
+ self._spg_array[idx, jdx0] = self.spg[jdx0]
448
+ if self._wcg_diskflag_writing:
449
+ k = 0
450
+ for jdx0 in range(self._wcg_length_0):
451
+ self._wcg_ncarray[k] = self.wcg[jdx0]
452
+ k += 1
453
+ if self._wcg_ramflag:
454
+ for jdx0 in range(self._wcg_length_0):
455
+ self._wcg_array[idx, jdx0] = self.wcg[jdx0]
456
+ if self._glmelt_diskflag_writing:
457
+ k = 0
458
+ for jdx0 in range(self._glmelt_length_0):
459
+ self._glmelt_ncarray[k] = self.glmelt[jdx0]
460
+ k += 1
461
+ if self._glmelt_ramflag:
462
+ for jdx0 in range(self._glmelt_length_0):
463
+ self._glmelt_array[idx, jdx0] = self.glmelt[jdx0]
464
+ if self._melt_diskflag_writing:
465
+ k = 0
466
+ for jdx0 in range(self._melt_length_0):
467
+ for jdx1 in range(self._melt_length_1):
468
+ self._melt_ncarray[k] = self.melt[jdx0, jdx1]
469
+ k += 1
470
+ if self._melt_ramflag:
471
+ for jdx0 in range(self._melt_length_0):
472
+ for jdx1 in range(self._melt_length_1):
473
+ self._melt_array[idx, jdx0, jdx1] = self.melt[jdx0, jdx1]
474
+ if self._refr_diskflag_writing:
475
+ k = 0
476
+ for jdx0 in range(self._refr_length_0):
477
+ for jdx1 in range(self._refr_length_1):
478
+ self._refr_ncarray[k] = self.refr[jdx0, jdx1]
479
+ k += 1
480
+ if self._refr_ramflag:
481
+ for jdx0 in range(self._refr_length_0):
482
+ for jdx1 in range(self._refr_length_1):
483
+ self._refr_array[idx, jdx0, jdx1] = self.refr[jdx0, jdx1]
484
+ if self._in__diskflag_writing:
485
+ k = 0
486
+ for jdx0 in range(self._in__length_0):
487
+ self._in__ncarray[k] = self.in_[jdx0]
488
+ k += 1
489
+ if self._in__ramflag:
490
+ for jdx0 in range(self._in__length_0):
491
+ self._in__array[idx, jdx0] = self.in_[jdx0]
492
+ if self._r_diskflag_writing:
493
+ k = 0
494
+ for jdx0 in range(self._r_length_0):
495
+ self._r_ncarray[k] = self.r[jdx0]
496
+ k += 1
497
+ if self._r_ramflag:
498
+ for jdx0 in range(self._r_length_0):
499
+ self._r_array[idx, jdx0] = self.r[jdx0]
500
+ if self._sr_diskflag_writing:
501
+ k = 0
502
+ for jdx0 in range(self._sr_length_0):
503
+ self._sr_ncarray[k] = self.sr[jdx0]
504
+ k += 1
505
+ if self._sr_ramflag:
506
+ for jdx0 in range(self._sr_length_0):
507
+ self._sr_array[idx, jdx0] = self.sr[jdx0]
508
+ if self._ea_diskflag_writing:
509
+ k = 0
510
+ for jdx0 in range(self._ea_length_0):
511
+ self._ea_ncarray[k] = self.ea[jdx0]
512
+ k += 1
513
+ if self._ea_ramflag:
514
+ for jdx0 in range(self._ea_length_0):
515
+ self._ea_array[idx, jdx0] = self.ea[jdx0]
516
+ if self._cf_diskflag_writing:
517
+ k = 0
518
+ for jdx0 in range(self._cf_length_0):
519
+ self._cf_ncarray[k] = self.cf[jdx0]
520
+ k += 1
521
+ if self._cf_ramflag:
522
+ for jdx0 in range(self._cf_length_0):
523
+ self._cf_array[idx, jdx0] = self.cf[jdx0]
524
+ if self._inuz_diskflag_writing:
525
+ self._inuz_ncarray[0] = self.inuz
526
+ if self._inuz_ramflag:
527
+ self._inuz_array[idx] = self.inuz
528
+ if self._perc_diskflag_writing:
529
+ self._perc_ncarray[0] = self.perc
530
+ if self._perc_ramflag:
531
+ self._perc_array[idx] = self.perc
532
+ if self._q0_diskflag_writing:
533
+ self._q0_ncarray[0] = self.q0
534
+ if self._q0_ramflag:
535
+ self._q0_array[idx] = self.q0
536
+ if self._el_diskflag_writing:
537
+ k = 0
538
+ for jdx0 in range(self._el_length_0):
539
+ self._el_ncarray[k] = self.el[jdx0]
540
+ k += 1
541
+ if self._el_ramflag:
542
+ for jdx0 in range(self._el_length_0):
543
+ self._el_array[idx, jdx0] = self.el[jdx0]
544
+ if self._q1_diskflag_writing:
545
+ self._q1_ncarray[0] = self.q1
546
+ if self._q1_ramflag:
547
+ self._q1_array[idx] = self.q1
548
+ if self._inrc_diskflag_writing:
549
+ self._inrc_ncarray[0] = self.inrc
550
+ if self._inrc_ramflag:
551
+ self._inrc_array[idx] = self.inrc
552
+ if self._outrc_diskflag_writing:
553
+ self._outrc_ncarray[0] = self.outrc
554
+ if self._outrc_ramflag:
555
+ self._outrc_array[idx] = self.outrc
556
+ if self._rt_diskflag_writing:
557
+ self._rt_ncarray[0] = self.rt
558
+ if self._rt_ramflag:
559
+ self._rt_array[idx] = self.rt
560
+ if self._qt_diskflag_writing:
561
+ self._qt_ncarray[0] = self.qt
562
+ if self._qt_ramflag:
563
+ self._qt_array[idx] = self.qt
564
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
565
+ if name == "inuz":
566
+ self._inuz_outputpointer = value.p_value
567
+ if name == "perc":
568
+ self._perc_outputpointer = value.p_value
569
+ if name == "q0":
570
+ self._q0_outputpointer = value.p_value
571
+ if name == "q1":
572
+ self._q1_outputpointer = value.p_value
573
+ if name == "inrc":
574
+ self._inrc_outputpointer = value.p_value
575
+ if name == "outrc":
576
+ self._outrc_outputpointer = value.p_value
577
+ if name == "rt":
578
+ self._rt_outputpointer = value.p_value
579
+ if name == "qt":
580
+ self._qt_outputpointer = value.p_value
581
+ cpdef inline void update_outputs(self) noexcept nogil:
582
+ if self._inuz_outputflag:
583
+ self._inuz_outputpointer[0] = self.inuz
584
+ if self._perc_outputflag:
585
+ self._perc_outputpointer[0] = self.perc
586
+ if self._q0_outputflag:
587
+ self._q0_outputpointer[0] = self.q0
588
+ if self._q1_outputflag:
589
+ self._q1_outputpointer[0] = self.q1
590
+ if self._inrc_outputflag:
591
+ self._inrc_outputpointer[0] = self.inrc
592
+ if self._outrc_outputflag:
593
+ self._outrc_outputpointer[0] = self.outrc
594
+ if self._rt_outputflag:
595
+ self._rt_outputpointer[0] = self.rt
596
+ if self._qt_outputflag:
597
+ self._qt_outputpointer[0] = self.qt
598
+ @cython.final
599
+ cdef class StateSequences:
600
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
601
+ cdef numpy.int64_t jdx0, jdx1
602
+ cdef numpy.int64_t k
603
+ if self._ic_diskflag_reading:
604
+ k = 0
605
+ for jdx0 in range(self._ic_length_0):
606
+ self.ic[jdx0] = self._ic_ncarray[k]
607
+ k += 1
608
+ elif self._ic_ramflag:
609
+ for jdx0 in range(self._ic_length_0):
610
+ self.ic[jdx0] = self._ic_array[idx, jdx0]
611
+ if self._sp_diskflag_reading:
612
+ k = 0
613
+ for jdx0 in range(self._sp_length_0):
614
+ for jdx1 in range(self._sp_length_1):
615
+ self.sp[jdx0, jdx1] = self._sp_ncarray[k]
616
+ k += 1
617
+ elif self._sp_ramflag:
618
+ for jdx0 in range(self._sp_length_0):
619
+ for jdx1 in range(self._sp_length_1):
620
+ self.sp[jdx0, jdx1] = self._sp_array[idx, jdx0, jdx1]
621
+ if self._wc_diskflag_reading:
622
+ k = 0
623
+ for jdx0 in range(self._wc_length_0):
624
+ for jdx1 in range(self._wc_length_1):
625
+ self.wc[jdx0, jdx1] = self._wc_ncarray[k]
626
+ k += 1
627
+ elif self._wc_ramflag:
628
+ for jdx0 in range(self._wc_length_0):
629
+ for jdx1 in range(self._wc_length_1):
630
+ self.wc[jdx0, jdx1] = self._wc_array[idx, jdx0, jdx1]
631
+ if self._sm_diskflag_reading:
632
+ k = 0
633
+ for jdx0 in range(self._sm_length_0):
634
+ self.sm[jdx0] = self._sm_ncarray[k]
635
+ k += 1
636
+ elif self._sm_ramflag:
637
+ for jdx0 in range(self._sm_length_0):
638
+ self.sm[jdx0] = self._sm_array[idx, jdx0]
639
+ if self._uz_diskflag_reading:
640
+ self.uz = self._uz_ncarray[0]
641
+ elif self._uz_ramflag:
642
+ self.uz = self._uz_array[idx]
643
+ if self._lz_diskflag_reading:
644
+ self.lz = self._lz_ncarray[0]
645
+ elif self._lz_ramflag:
646
+ self.lz = self._lz_array[idx]
647
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
648
+ cdef numpy.int64_t jdx0, jdx1
649
+ cdef numpy.int64_t k
650
+ if self._ic_diskflag_writing:
651
+ k = 0
652
+ for jdx0 in range(self._ic_length_0):
653
+ self._ic_ncarray[k] = self.ic[jdx0]
654
+ k += 1
655
+ if self._ic_ramflag:
656
+ for jdx0 in range(self._ic_length_0):
657
+ self._ic_array[idx, jdx0] = self.ic[jdx0]
658
+ if self._sp_diskflag_writing:
659
+ k = 0
660
+ for jdx0 in range(self._sp_length_0):
661
+ for jdx1 in range(self._sp_length_1):
662
+ self._sp_ncarray[k] = self.sp[jdx0, jdx1]
663
+ k += 1
664
+ if self._sp_ramflag:
665
+ for jdx0 in range(self._sp_length_0):
666
+ for jdx1 in range(self._sp_length_1):
667
+ self._sp_array[idx, jdx0, jdx1] = self.sp[jdx0, jdx1]
668
+ if self._wc_diskflag_writing:
669
+ k = 0
670
+ for jdx0 in range(self._wc_length_0):
671
+ for jdx1 in range(self._wc_length_1):
672
+ self._wc_ncarray[k] = self.wc[jdx0, jdx1]
673
+ k += 1
674
+ if self._wc_ramflag:
675
+ for jdx0 in range(self._wc_length_0):
676
+ for jdx1 in range(self._wc_length_1):
677
+ self._wc_array[idx, jdx0, jdx1] = self.wc[jdx0, jdx1]
678
+ if self._sm_diskflag_writing:
679
+ k = 0
680
+ for jdx0 in range(self._sm_length_0):
681
+ self._sm_ncarray[k] = self.sm[jdx0]
682
+ k += 1
683
+ if self._sm_ramflag:
684
+ for jdx0 in range(self._sm_length_0):
685
+ self._sm_array[idx, jdx0] = self.sm[jdx0]
686
+ if self._uz_diskflag_writing:
687
+ self._uz_ncarray[0] = self.uz
688
+ if self._uz_ramflag:
689
+ self._uz_array[idx] = self.uz
690
+ if self._lz_diskflag_writing:
691
+ self._lz_ncarray[0] = self.lz
692
+ if self._lz_ramflag:
693
+ self._lz_array[idx] = self.lz
694
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
695
+ if name == "uz":
696
+ self._uz_outputpointer = value.p_value
697
+ if name == "lz":
698
+ self._lz_outputpointer = value.p_value
699
+ cpdef inline void update_outputs(self) noexcept nogil:
700
+ if self._uz_outputflag:
701
+ self._uz_outputpointer[0] = self.uz
702
+ if self._lz_outputflag:
703
+ self._lz_outputpointer[0] = self.lz
704
+ @cython.final
705
+ cdef class AideSequences:
706
+ pass
707
+ @cython.final
708
+ cdef class OutletSequences:
709
+ cpdef inline set_pointer0d(self, str name, pointerutils.Double value):
710
+ cdef pointerutils.PDouble pointer = pointerutils.PDouble(value)
711
+ if name == "q":
712
+ self.q = pointer.p_value
713
+ cpdef get_value(self, str name):
714
+ cdef numpy.int64_t idx
715
+ if name == "q":
716
+ return self.q[0]
717
+ cpdef set_value(self, str name, value):
718
+ if name == "q":
719
+ self.q[0] = value
720
+ @cython.final
721
+ cdef class Model(masterinterface.MasterInterface):
722
+ def __init__(self):
723
+ super().__init__()
724
+ self.aetmodel = None
725
+ self.aetmodel_is_mainmodel = False
726
+ self.rconcmodel = None
727
+ self.rconcmodel_is_mainmodel = False
728
+ def get_aetmodel(self) -> masterinterface.MasterInterface | None:
729
+ return self.aetmodel
730
+ def set_aetmodel(self, aetmodel: masterinterface.MasterInterface | None) -> None:
731
+ self.aetmodel = aetmodel
732
+ def get_rconcmodel(self) -> masterinterface.MasterInterface | None:
733
+ return self.rconcmodel
734
+ def set_rconcmodel(self, rconcmodel: masterinterface.MasterInterface | None) -> None:
735
+ self.rconcmodel = rconcmodel
736
+ cpdef inline void simulate(self, numpy.int64_t idx) noexcept nogil:
737
+ self.idx_sim = idx
738
+ self.reset_reuseflags()
739
+ self.load_data(idx)
740
+ self.run()
741
+ self.new2old()
742
+ self.update_outlets()
743
+ self.update_outputs()
744
+ cpdef void reset_reuseflags(self) noexcept nogil:
745
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
746
+ self.aetmodel.reset_reuseflags()
747
+ if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
748
+ self.rconcmodel.reset_reuseflags()
749
+ cpdef void load_data(self, numpy.int64_t idx) noexcept nogil:
750
+ self.idx_sim = idx
751
+ self.sequences.inputs.load_data(idx)
752
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
753
+ self.aetmodel.load_data(idx)
754
+ if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
755
+ self.rconcmodel.load_data(idx)
756
+ cpdef void save_data(self, numpy.int64_t idx) noexcept nogil:
757
+ self.idx_sim = idx
758
+ self.sequences.inputs.save_data(idx)
759
+ self.sequences.factors.save_data(idx)
760
+ self.sequences.fluxes.save_data(idx)
761
+ self.sequences.states.save_data(idx)
762
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
763
+ self.aetmodel.save_data(idx)
764
+ if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
765
+ self.rconcmodel.save_data(idx)
766
+ cpdef void new2old(self) noexcept nogil:
767
+ cdef numpy.int64_t jdx0, jdx1
768
+ for jdx0 in range(self.sequences.states._ic_length_0):
769
+ self.sequences.old_states.ic[jdx0] = self.sequences.new_states.ic[jdx0]
770
+ for jdx0 in range(self.sequences.states._sp_length_0):
771
+ for jdx1 in range(self.sequences.states._sp_length_1):
772
+ self.sequences.old_states.sp[jdx0,jdx1] = self.sequences.new_states.sp[jdx0,jdx1]
773
+ for jdx0 in range(self.sequences.states._wc_length_0):
774
+ for jdx1 in range(self.sequences.states._wc_length_1):
775
+ self.sequences.old_states.wc[jdx0,jdx1] = self.sequences.new_states.wc[jdx0,jdx1]
776
+ for jdx0 in range(self.sequences.states._sm_length_0):
777
+ self.sequences.old_states.sm[jdx0] = self.sequences.new_states.sm[jdx0]
778
+ self.sequences.old_states.uz = self.sequences.new_states.uz
779
+ self.sequences.old_states.lz = self.sequences.new_states.lz
780
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
781
+ self.aetmodel.new2old()
782
+ if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
783
+ self.rconcmodel.new2old()
784
+ cpdef inline void run(self) noexcept nogil:
785
+ self.calc_tc_v1()
786
+ self.calc_fracrain_v1()
787
+ self.calc_rfc_sfc_v1()
788
+ self.calc_pc_v1()
789
+ self.calc_tf_ic_v1()
790
+ self.calc_sp_wc_v1()
791
+ self.calc_spl_wcl_sp_wc_v1()
792
+ self.calc_spg_wcg_sp_wc_v1()
793
+ self.calc_cfact_v1()
794
+ self.calc_melt_sp_wc_v1()
795
+ self.calc_refr_sp_wc_v1()
796
+ self.calc_in_wc_v1()
797
+ self.calc_swe_v1()
798
+ self.calc_sr_v1()
799
+ self.calc_gact_v1()
800
+ self.calc_glmelt_in_v1()
801
+ self.calc_ei_ic_v1()
802
+ self.calc_r_sm_v1()
803
+ self.calc_cf_sm_v1()
804
+ self.calc_ea_sm_v1()
805
+ self.calc_inuz_v1()
806
+ self.calc_contriarea_v1()
807
+ self.calc_q0_perc_uz_v1()
808
+ self.calc_lz_v1()
809
+ self.calc_el_lz_v1()
810
+ self.calc_q1_lz_v1()
811
+ self.calc_inrc_v1()
812
+ self.calc_outrc_v1()
813
+ self.calc_rt_v1()
814
+ self.calc_qt_v1()
815
+ cpdef inline void update_inlets(self) noexcept nogil:
816
+ pass
817
+ cpdef inline void update_outlets(self) noexcept nogil:
818
+ self.pass_q_v1()
819
+ cpdef inline void update_receivers(self, numpy.int64_t idx) noexcept nogil:
820
+ self.idx_sim = idx
821
+ pass
822
+ cpdef inline void update_senders(self, numpy.int64_t idx) noexcept nogil:
823
+ self.idx_sim = idx
824
+ pass
825
+ cpdef inline void update_outputs(self) noexcept nogil:
826
+ self.sequences.factors.update_outputs()
827
+ self.sequences.fluxes.update_outputs()
828
+ self.sequences.states.update_outputs()
829
+ cpdef inline void calc_tc_v1(self) noexcept nogil:
830
+ cdef numpy.int64_t k
831
+ for k in range(self.parameters.control.nmbzones):
832
+ self.sequences.factors.tc[k] = self.sequences.inputs.t + self.parameters.control.tcorr[k] - self.parameters.control.tcalt[k] * (self.parameters.control.zonez[k] - self.parameters.derived.z)
833
+ cpdef inline void calc_fracrain_v1(self) noexcept nogil:
834
+ cdef double d_dt
835
+ cdef numpy.int64_t k
836
+ for k in range(self.parameters.control.nmbzones):
837
+ d_dt = self.parameters.control.ttint[k] / 2.0
838
+ if self.sequences.factors.tc[k] >= (self.parameters.control.tt[k] + d_dt):
839
+ self.sequences.factors.fracrain[k] = 1.0
840
+ elif self.sequences.factors.tc[k] <= (self.parameters.control.tt[k] - d_dt):
841
+ self.sequences.factors.fracrain[k] = 0.0
842
+ else:
843
+ self.sequences.factors.fracrain[k] = (self.sequences.factors.tc[k] - (self.parameters.control.tt[k] - d_dt)) / self.parameters.control.ttint[k]
844
+ cpdef inline void calc_rfc_sfc_v1(self) noexcept nogil:
845
+ cdef numpy.int64_t k
846
+ for k in range(self.parameters.control.nmbzones):
847
+ self.sequences.factors.rfc[k] = self.sequences.factors.fracrain[k] * self.parameters.control.rfcf[k]
848
+ self.sequences.factors.sfc[k] = (1.0 - self.sequences.factors.fracrain[k]) * self.parameters.control.sfcf[k]
849
+ cpdef inline void calc_pc_v1(self) noexcept nogil:
850
+ cdef numpy.int64_t k
851
+ for k in range(self.parameters.control.nmbzones):
852
+ self.sequences.fluxes.pc[k] = self.sequences.inputs.p * (1.0 + self.parameters.control.pcalt[k] * (self.parameters.control.zonez[k] - self.parameters.derived.z))
853
+ if self.sequences.fluxes.pc[k] <= 0.0:
854
+ self.sequences.fluxes.pc[k] = 0.0
855
+ else:
856
+ self.sequences.fluxes.pc[k] = self.sequences.fluxes.pc[k] * (self.parameters.control.pcorr[k] * (self.sequences.factors.rfc[k] + self.sequences.factors.sfc[k]))
857
+ cpdef inline void calc_tf_ic_v1(self) noexcept nogil:
858
+ cdef numpy.int64_t k
859
+ for k in range(self.parameters.control.nmbzones):
860
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
861
+ self.sequences.fluxes.tf[k] = max(self.sequences.fluxes.pc[k] - (self.parameters.control.icmax[k] - self.sequences.states.ic[k]), 0.0)
862
+ self.sequences.states.ic[k] = self.sequences.states.ic[k] + (self.sequences.fluxes.pc[k] - self.sequences.fluxes.tf[k])
863
+ else:
864
+ self.sequences.fluxes.tf[k] = self.sequences.fluxes.pc[k]
865
+ self.sequences.states.ic[k] = 0.0
866
+ cpdef inline void calc_sp_wc_v1(self) noexcept nogil:
867
+ cdef numpy.int64_t c
868
+ cdef double d_snow
869
+ cdef double d_rain
870
+ cdef double d_denom
871
+ cdef numpy.int64_t k
872
+ for k in range(self.parameters.control.nmbzones):
873
+ if self.parameters.control.zonetype[k] != ILAKE:
874
+ d_denom = self.sequences.factors.rfc[k] + self.sequences.factors.sfc[k]
875
+ if d_denom > 0.0:
876
+ d_rain = self.sequences.fluxes.tf[k] * self.sequences.factors.rfc[k] / d_denom
877
+ d_snow = self.sequences.fluxes.tf[k] * self.sequences.factors.sfc[k] / d_denom
878
+ for c in range(self.parameters.control.sclass):
879
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.parameters.control.sfdist[c] * d_rain)
880
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.parameters.control.sfdist[c] * d_snow)
881
+ else:
882
+ for c in range(self.parameters.control.sclass):
883
+ self.sequences.states.wc[c, k] = 0.0
884
+ self.sequences.states.sp[c, k] = 0.0
885
+ cpdef inline void calc_spl_wcl_sp_wc_v1(self) noexcept nogil:
886
+ cdef double d_excess_wc
887
+ cdef double d_excess_sp
888
+ cdef double d_excess
889
+ cdef double d_snow
890
+ cdef numpy.int64_t c
891
+ cdef numpy.int64_t k
892
+ for k in range(self.parameters.control.nmbzones):
893
+ self.sequences.fluxes.spl[k] = 0.0
894
+ self.sequences.fluxes.wcl[k] = 0.0
895
+ if self.parameters.control.zonetype[k] == ILAKE:
896
+ for c in range(self.parameters.control.sclass):
897
+ self.sequences.states.sp[c, k] = 0.0
898
+ self.sequences.states.wc[c, k] = 0.0
899
+ elif not isinf(self.parameters.control.smax[k]):
900
+ for c in range(self.parameters.control.sclass):
901
+ d_snow = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
902
+ d_excess = d_snow - self.parameters.control.smax[k]
903
+ if d_excess > 0.0:
904
+ d_excess_sp = d_excess * self.sequences.states.sp[c, k] / d_snow
905
+ d_excess_wc = d_excess * self.sequences.states.wc[c, k] / d_snow
906
+ self.sequences.fluxes.spl[k] = self.sequences.fluxes.spl[k] + (d_excess_sp / self.parameters.control.sclass)
907
+ self.sequences.fluxes.wcl[k] = self.sequences.fluxes.wcl[k] + (d_excess_wc / self.parameters.control.sclass)
908
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (d_excess_sp)
909
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (d_excess_wc)
910
+ cpdef inline void calc_spg_wcg_sp_wc_v1(self) noexcept nogil:
911
+ cdef double d_excess_liquid_land
912
+ cdef double d_excess_frozen_land
913
+ cdef double d_delta_wc_zone
914
+ cdef double d_delta_sp_zone
915
+ cdef double d_fraction_gain_class
916
+ cdef double d_excess_liquid_zone_actual
917
+ cdef double d_excess_frozen_zone_actual
918
+ cdef double d_fraction_gain_zone
919
+ cdef double d_gain_max_cum
920
+ cdef double d_excess_total_zone
921
+ cdef double d_excess_liquid_zone
922
+ cdef double d_excess_frozen_zone
923
+ cdef double d_excess_liquid_basin
924
+ cdef double d_excess_frozen_basin
925
+ cdef double d_factor_excess
926
+ cdef double d_factor_gain
927
+ cdef double d_fraction_gain
928
+ cdef double d_gain_max
929
+ cdef double d_gain_pot
930
+ cdef double d_gain_total
931
+ cdef double d_gain_liquid
932
+ cdef double d_gain_frozen
933
+ cdef double d_f
934
+ cdef numpy.int64_t t
935
+ cdef numpy.int64_t f
936
+ cdef numpy.int64_t c
937
+ cdef numpy.int64_t i
938
+ for i in range(self.parameters.control.nmbzones):
939
+ self.sequences.fluxes.spg[i] = 0.0
940
+ self.sequences.fluxes.wcg[i] = 0.0
941
+ self.sequences.aides.spe[i] = 0.0
942
+ self.sequences.aides.wce[i] = 0.0
943
+ if self.parameters.control.zonetype[i] == ILAKE:
944
+ for c in range(self.parameters.control.sclass):
945
+ self.sequences.states.sp[c, i] = 0.0
946
+ self.sequences.states.wc[c, i] = 0.0
947
+ for i in range(self.parameters.derived.srednumber):
948
+ f, t = self.parameters.derived.sredorder[i, 0], self.parameters.derived.sredorder[i, 1]
949
+ d_f = self.parameters.derived.zonearearatios[f, t] * self.parameters.control.sred[f, t]
950
+ d_gain_frozen = d_f * (self.sequences.fluxes.spl[f] + self.sequences.aides.spe[f])
951
+ d_gain_liquid = d_f * (self.sequences.fluxes.wcl[f] + self.sequences.aides.wce[f])
952
+ d_gain_total = d_gain_frozen + d_gain_liquid
953
+ for c in range(self.parameters.control.sclass):
954
+ d_gain_pot = self.parameters.control.sfdist[c] * d_gain_total
955
+ if d_gain_pot > 0.0:
956
+ d_gain_max = self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t]
957
+ d_fraction_gain = min(d_gain_max / d_gain_pot, 1.0)
958
+ d_factor_gain = d_fraction_gain * self.parameters.control.sfdist[c]
959
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_factor_gain * d_gain_frozen / self.parameters.control.sclass)
960
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_factor_gain * d_gain_liquid / self.parameters.control.sclass)
961
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_factor_gain * d_gain_frozen)
962
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_factor_gain * d_gain_liquid)
963
+ d_factor_excess = (1.0 - d_fraction_gain) * self.parameters.control.sfdist[c]
964
+ self.sequences.aides.spe[t] = self.sequences.aides.spe[t] + (d_factor_excess * d_gain_frozen / self.parameters.control.sclass)
965
+ self.sequences.aides.wce[t] = self.sequences.aides.wce[t] + (d_factor_excess * d_gain_liquid / self.parameters.control.sclass)
966
+ d_excess_frozen_basin, d_excess_liquid_basin = 0.0, 0.0
967
+ for i in range(self.parameters.control.nmbzones):
968
+ if self.parameters.derived.sredend[i]:
969
+ d_excess_frozen_basin = d_excess_frozen_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.spe[i] + self.sequences.fluxes.spl[i]))
970
+ d_excess_liquid_basin = d_excess_liquid_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.wce[i] + self.sequences.fluxes.wcl[i]))
971
+ if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
972
+ return
973
+ for i in range(self.parameters.control.nmbzones):
974
+ t = self.parameters.derived.indiceszonez[i]
975
+ if self.parameters.control.zonetype[t] == ILAKE:
976
+ continue
977
+ d_excess_frozen_zone = d_excess_frozen_basin / self.parameters.derived.relzoneareas[t]
978
+ d_excess_liquid_zone = d_excess_liquid_basin / self.parameters.derived.relzoneareas[t]
979
+ d_excess_total_zone = d_excess_frozen_zone + d_excess_liquid_zone
980
+ d_gain_max_cum = 0.0
981
+ for c in range(self.parameters.control.sclass):
982
+ d_gain_max_cum = d_gain_max_cum + (self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t])
983
+ if d_gain_max_cum <= 0.0:
984
+ continue
985
+ d_fraction_gain_zone = min( d_gain_max_cum / self.parameters.control.sclass / d_excess_total_zone, 1.0 )
986
+ d_excess_frozen_zone_actual = d_fraction_gain_zone * d_excess_frozen_zone
987
+ d_excess_liquid_zone_actual = d_fraction_gain_zone * d_excess_liquid_zone
988
+ for c in range(self.parameters.control.sclass):
989
+ d_fraction_gain_class = ( self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t] ) / d_gain_max_cum
990
+ d_delta_sp_zone = d_fraction_gain_class * d_excess_frozen_zone_actual
991
+ d_delta_wc_zone = d_fraction_gain_class * d_excess_liquid_zone_actual
992
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_delta_sp_zone)
993
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_delta_wc_zone)
994
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_delta_sp_zone * self.parameters.control.sclass)
995
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_delta_wc_zone * self.parameters.control.sclass)
996
+ d_excess_frozen_basin = d_excess_frozen_basin - (d_excess_frozen_zone_actual * self.parameters.derived.relzoneareas[t])
997
+ d_excess_liquid_basin = d_excess_liquid_basin - (d_excess_liquid_zone_actual * self.parameters.derived.relzoneareas[t])
998
+ if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
999
+ return
1000
+ d_excess_frozen_land = d_excess_frozen_basin / self.parameters.derived.rellandarea
1001
+ d_excess_liquid_land = d_excess_liquid_basin / self.parameters.derived.rellandarea
1002
+ for t in range(self.parameters.control.nmbzones):
1003
+ if self.parameters.control.zonetype[t] != ILAKE:
1004
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_excess_frozen_land)
1005
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_excess_liquid_land)
1006
+ for c in range(self.parameters.control.sclass):
1007
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_excess_frozen_land)
1008
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_excess_liquid_land)
1009
+ return
1010
+ cpdef inline void calc_cfact_v1(self) noexcept nogil:
1011
+ cdef numpy.int64_t k
1012
+ cdef double d_factor
1013
+ d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
1014
+ for k in range(self.parameters.control.nmbzones):
1015
+ if self.parameters.control.zonetype[k] != ILAKE:
1016
+ self.sequences.factors.cfact[k] = max(self.parameters.control.cfmax[k] + d_factor * self.parameters.control.cfvar[k], 0.0)
1017
+ else:
1018
+ self.sequences.factors.cfact[k] = 0.0
1019
+ cpdef inline void calc_melt_sp_wc_v1(self) noexcept nogil:
1020
+ cdef numpy.int64_t c
1021
+ cdef double d_potmelt
1022
+ cdef numpy.int64_t k
1023
+ for k in range(self.parameters.control.nmbzones):
1024
+ if self.parameters.control.zonetype[k] != ILAKE:
1025
+ if self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]:
1026
+ d_potmelt = self.sequences.factors.cfact[k] * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
1027
+ for c in range(self.parameters.control.sclass):
1028
+ self.sequences.fluxes.melt[c, k] = min(d_potmelt, self.sequences.states.sp[c, k])
1029
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (self.sequences.fluxes.melt[c, k])
1030
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.sequences.fluxes.melt[c, k])
1031
+ else:
1032
+ for c in range(self.parameters.control.sclass):
1033
+ self.sequences.fluxes.melt[c, k] = 0.0
1034
+ else:
1035
+ for c in range(self.parameters.control.sclass):
1036
+ self.sequences.fluxes.melt[c, k] = 0.0
1037
+ self.sequences.states.wc[c, k] = 0.0
1038
+ self.sequences.states.sp[c, k] = 0.0
1039
+ cpdef inline void calc_refr_sp_wc_v1(self) noexcept nogil:
1040
+ cdef numpy.int64_t c
1041
+ cdef double d_potrefr
1042
+ cdef numpy.int64_t k
1043
+ for k in range(self.parameters.control.nmbzones):
1044
+ if self.parameters.control.zonetype[k] != ILAKE:
1045
+ if self.sequences.factors.tc[k] < self.parameters.derived.ttm[k]:
1046
+ d_potrefr = self.parameters.control.cfr[k] * self.parameters.control.cfmax[k] * (self.parameters.derived.ttm[k] - self.sequences.factors.tc[k])
1047
+ for c in range(self.parameters.control.sclass):
1048
+ self.sequences.fluxes.refr[c, k] = min(d_potrefr, self.sequences.states.wc[c, k])
1049
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.sequences.fluxes.refr[c, k])
1050
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (self.sequences.fluxes.refr[c, k])
1051
+ else:
1052
+ for c in range(self.parameters.control.sclass):
1053
+ self.sequences.fluxes.refr[c, k] = 0.0
1054
+ else:
1055
+ for c in range(self.parameters.control.sclass):
1056
+ self.sequences.fluxes.refr[c, k] = 0.0
1057
+ self.sequences.states.wc[c, k] = 0.0
1058
+ self.sequences.states.sp[c, k] = 0.0
1059
+ cpdef inline void calc_in_wc_v1(self) noexcept nogil:
1060
+ cdef double d_wc_old
1061
+ cdef numpy.int64_t c
1062
+ cdef numpy.int64_t k
1063
+ for k in range(self.parameters.control.nmbzones):
1064
+ self.sequences.fluxes.in_[k] = 0.0
1065
+ if self.parameters.control.zonetype[k] != ILAKE:
1066
+ for c in range(self.parameters.control.sclass):
1067
+ d_wc_old = self.sequences.states.wc[c, k]
1068
+ self.sequences.states.wc[c, k] = min(d_wc_old, self.parameters.control.whc[k] * self.sequences.states.sp[c, k])
1069
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + ((d_wc_old - self.sequences.states.wc[c, k]) / self.parameters.control.sclass)
1070
+ else:
1071
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.tf[k]
1072
+ for c in range(self.parameters.control.sclass):
1073
+ self.sequences.states.wc[c, k] = 0.0
1074
+ cpdef inline void calc_swe_v1(self) noexcept nogil:
1075
+ cdef numpy.int64_t c
1076
+ cdef numpy.int64_t k
1077
+ for k in range(self.parameters.control.nmbzones):
1078
+ if self.parameters.control.zonetype[k] != ILAKE:
1079
+ for c in range(self.parameters.control.sclass):
1080
+ self.sequences.factors.swe[c, k] = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
1081
+ else:
1082
+ for c in range(self.parameters.control.sclass):
1083
+ self.sequences.factors.swe[c, k] = 0.0
1084
+ cpdef inline void calc_sr_v1(self) noexcept nogil:
1085
+ cdef numpy.int64_t k
1086
+ for k in range(self.parameters.control.nmbzones):
1087
+ if self.parameters.control.zonetype[k] == SEALED:
1088
+ self.sequences.fluxes.sr[k] = self.sequences.fluxes.in_[k]
1089
+ else:
1090
+ self.sequences.fluxes.sr[k] = 0.0
1091
+ cpdef inline void calc_gact_v1(self) noexcept nogil:
1092
+ cdef numpy.int64_t k
1093
+ cdef double d_factor
1094
+ d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
1095
+ for k in range(self.parameters.control.nmbzones):
1096
+ if self.parameters.control.zonetype[k] == GLACIER:
1097
+ self.sequences.factors.gact[k] = max(self.parameters.control.gmelt[k] + d_factor * self.parameters.control.gvar[k], 0.0)
1098
+ else:
1099
+ self.sequences.factors.gact[k] = 0.0
1100
+ cpdef inline void calc_glmelt_in_v1(self) noexcept nogil:
1101
+ cdef numpy.int64_t c
1102
+ cdef double d_glmeltpot
1103
+ cdef numpy.int64_t k
1104
+ for k in range(self.parameters.control.nmbzones):
1105
+ self.sequences.fluxes.glmelt[k] = 0.0
1106
+ if (self.parameters.control.zonetype[k] == GLACIER) and (self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]):
1107
+ d_glmeltpot = self.sequences.factors.gact[k] / self.parameters.control.sclass * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
1108
+ for c in range(self.parameters.control.sclass):
1109
+ if self.sequences.states.sp[c, k] <= 0.0:
1110
+ self.sequences.fluxes.glmelt[k] = self.sequences.fluxes.glmelt[k] + (d_glmeltpot)
1111
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + (d_glmeltpot)
1112
+ cpdef inline void calc_ei_ic_v1(self) noexcept nogil:
1113
+ if self.aetmodel_typeid == 1:
1114
+ self.calc_ei_ic_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1115
+ cpdef inline void calc_r_sm_v1(self) noexcept nogil:
1116
+ cdef numpy.int64_t k
1117
+ for k in range(self.parameters.control.nmbzones):
1118
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1119
+ if self.parameters.control.fc[k] > 0.0:
1120
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k] * (self.sequences.states.sm[k] / self.parameters.control.fc[k]) ** self.parameters.control.beta[k]
1121
+ self.sequences.fluxes.r[k] = max(self.sequences.fluxes.r[k], self.sequences.states.sm[k] + self.sequences.fluxes.in_[k] - self.parameters.control.fc[k])
1122
+ else:
1123
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
1124
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] + (self.sequences.fluxes.in_[k] - self.sequences.fluxes.r[k])
1125
+ else:
1126
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
1127
+ self.sequences.states.sm[k] = 0.0
1128
+ cpdef inline void calc_cf_sm_v1(self) noexcept nogil:
1129
+ cdef numpy.int64_t k
1130
+ for k in range(self.parameters.control.nmbzones):
1131
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1132
+ if self.parameters.control.fc[k] > 0.0:
1133
+ self.sequences.fluxes.cf[k] = self.parameters.control.cflux[k] * (1.0 - self.sequences.states.sm[k] / self.parameters.control.fc[k])
1134
+ self.sequences.fluxes.cf[k] = min(self.sequences.fluxes.cf[k], self.sequences.states.uz + self.sequences.fluxes.r[k])
1135
+ self.sequences.fluxes.cf[k] = min(self.sequences.fluxes.cf[k], self.parameters.control.fc[k] - self.sequences.states.sm[k])
1136
+ else:
1137
+ self.sequences.fluxes.cf[k] = 0.0
1138
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] + (self.sequences.fluxes.cf[k])
1139
+ else:
1140
+ self.sequences.fluxes.cf[k] = 0.0
1141
+ self.sequences.states.sm[k] = 0.0
1142
+ cpdef inline void calc_ea_sm_v1(self) noexcept nogil:
1143
+ if self.aetmodel_typeid == 1:
1144
+ self.calc_ea_sm_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1145
+ cpdef inline void calc_inuz_v1(self) noexcept nogil:
1146
+ cdef numpy.int64_t k
1147
+ self.sequences.fluxes.inuz = 0.0
1148
+ for k in range(self.parameters.control.nmbzones):
1149
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1150
+ self.sequences.fluxes.inuz = self.sequences.fluxes.inuz + (( self.parameters.derived.relzoneareas[k] / self.parameters.derived.relupperzonearea * (self.sequences.fluxes.r[k] - self.sequences.fluxes.cf[k]) ))
1151
+ cpdef inline void calc_contriarea_v1(self) noexcept nogil:
1152
+ cdef double d_weight
1153
+ cdef numpy.int64_t k
1154
+ self.sequences.factors.contriarea = 1.0
1155
+ if self.parameters.control.resparea and (self.parameters.derived.relsoilarea > 0.0):
1156
+ for k in range(self.parameters.control.nmbzones):
1157
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1158
+ if self.parameters.control.fc[k] > 0.0:
1159
+ d_weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.relsoilarea
1160
+ self.sequences.factors.contriarea = self.sequences.factors.contriarea * ((self.sequences.states.sm[k] / self.parameters.control.fc[k]) ** d_weight)
1161
+ self.sequences.factors.contriarea = self.sequences.factors.contriarea ** (self.parameters.control.beta[k])
1162
+ cpdef inline void calc_q0_perc_uz_v1(self) noexcept nogil:
1163
+ cdef double factor
1164
+ cdef double error
1165
+ cdef double q0
1166
+ cdef double perc
1167
+ cdef numpy.int64_t _
1168
+ cdef double uz_old
1169
+ uz_old = self.sequences.states.uz
1170
+ self.sequences.fluxes.perc = 0.0
1171
+ self.sequences.fluxes.q0 = 0.0
1172
+ for _ in range(self.parameters.control.recstep):
1173
+ self.sequences.states.uz = max(self.sequences.states.uz + self.parameters.derived.dt * self.sequences.fluxes.inuz, 0.0)
1174
+ perc = min(self.parameters.derived.dt * self.parameters.control.percmax * self.sequences.factors.contriarea, self.sequences.states.uz)
1175
+ self.sequences.states.uz = self.sequences.states.uz - (perc)
1176
+ self.sequences.fluxes.perc = self.sequences.fluxes.perc + (perc)
1177
+ if self.sequences.states.uz > 0.0:
1178
+ if self.sequences.factors.contriarea > 0.0:
1179
+ q0 = min( self.parameters.derived.dt * self.parameters.control.k * (self.sequences.states.uz / self.sequences.factors.contriarea) ** (1.0 + self.parameters.control.alpha), self.sequences.states.uz, )
1180
+ else:
1181
+ q0 = self.sequences.states.uz
1182
+ self.sequences.states.uz = self.sequences.states.uz - (q0)
1183
+ self.sequences.fluxes.q0 = self.sequences.fluxes.q0 + (q0)
1184
+ error = self.sequences.states.uz - (uz_old + self.sequences.fluxes.inuz - self.sequences.fluxes.perc - self.sequences.fluxes.q0)
1185
+ if error > 0.0:
1186
+ factor = 1.0 - error / (self.sequences.fluxes.perc + self.sequences.fluxes.q0)
1187
+ self.sequences.fluxes.perc = self.sequences.fluxes.perc * (factor)
1188
+ self.sequences.fluxes.q0 = self.sequences.fluxes.q0 * (factor)
1189
+ cpdef inline void calc_lz_v1(self) noexcept nogil:
1190
+ cdef numpy.int64_t k
1191
+ if self.parameters.derived.rellowerzonearea > 0.0:
1192
+ self.sequences.states.lz = self.sequences.states.lz + (self.parameters.derived.relupperzonearea / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.perc)
1193
+ for k in range(self.parameters.control.nmbzones):
1194
+ if self.parameters.control.zonetype[k] == ILAKE:
1195
+ self.sequences.states.lz = self.sequences.states.lz + (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.pc[k])
1196
+ else:
1197
+ self.sequences.states.lz = 0.0
1198
+ cpdef inline void calc_el_lz_v1(self) noexcept nogil:
1199
+ if self.aetmodel_typeid == 1:
1200
+ self.calc_el_lz_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1201
+ cpdef inline void calc_q1_lz_v1(self) noexcept nogil:
1202
+ if self.sequences.states.lz > 0.0:
1203
+ self.sequences.fluxes.q1 = self.parameters.control.k4 * self.sequences.states.lz ** (1.0 + self.parameters.control.gamma)
1204
+ else:
1205
+ self.sequences.fluxes.q1 = 0.0
1206
+ self.sequences.states.lz = self.sequences.states.lz - (self.sequences.fluxes.q1)
1207
+ cpdef inline void calc_inrc_v1(self) noexcept nogil:
1208
+ cdef numpy.int64_t k
1209
+ self.sequences.fluxes.inrc = self.parameters.derived.relupperzonearea * self.sequences.fluxes.q0 + self.parameters.derived.rellowerzonearea * self.sequences.fluxes.q1
1210
+ for k in range(self.parameters.control.nmbzones):
1211
+ if self.parameters.control.zonetype[k] == SEALED:
1212
+ self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (self.parameters.derived.relzoneareas[k] * self.sequences.fluxes.r[k])
1213
+ cpdef inline void calc_outrc_v1(self) noexcept nogil:
1214
+ if self.rconcmodel is None:
1215
+ self.sequences.fluxes.outrc = self.sequences.fluxes.inrc
1216
+ elif self.rconcmodel_typeid == 1:
1217
+ self.calc_outrc_rconcmodel_v1( (<masterinterface.MasterInterface>self.rconcmodel) )
1218
+ cpdef inline void calc_rt_v1(self) noexcept nogil:
1219
+ self.sequences.fluxes.rt = self.sequences.fluxes.outrc
1220
+ cpdef inline void calc_qt_v1(self) noexcept nogil:
1221
+ self.sequences.fluxes.qt = self.parameters.derived.qfactor * self.sequences.fluxes.rt
1222
+ cpdef double get_temperature_v1(self, numpy.int64_t s) noexcept nogil:
1223
+ return self.sequences.factors.tc[s]
1224
+ cpdef double get_meantemperature_v1(self) noexcept nogil:
1225
+ return self.sequences.inputs.t
1226
+ cpdef double get_precipitation_v1(self, numpy.int64_t s) noexcept nogil:
1227
+ return self.sequences.fluxes.pc[s]
1228
+ cpdef double get_interceptedwater_v1(self, numpy.int64_t k) noexcept nogil:
1229
+ return self.sequences.states.ic[k]
1230
+ cpdef double get_soilwater_v1(self, numpy.int64_t k) noexcept nogil:
1231
+ return self.sequences.states.sm[k]
1232
+ cpdef double get_snowcover_v1(self, numpy.int64_t k) noexcept nogil:
1233
+ cdef numpy.int64_t c
1234
+ cdef double snowcovered
1235
+ snowcovered = 0.0
1236
+ for c in range(self.parameters.control.sclass):
1237
+ snowcovered = snowcovered + (self.sequences.states.sp[c, k] > 0.0)
1238
+ return snowcovered / self.parameters.control.sclass
1239
+ cpdef inline void calc_ei_ic_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1240
+ cdef numpy.int64_t k
1241
+ submodel.determine_interceptionevaporation()
1242
+ for k in range(self.parameters.control.nmbzones):
1243
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
1244
+ self.sequences.fluxes.ei[k] = min(submodel.get_interceptionevaporation(k), self.sequences.states.ic[k])
1245
+ self.sequences.states.ic[k] = self.sequences.states.ic[k] - (self.sequences.fluxes.ei[k])
1246
+ else:
1247
+ self.sequences.fluxes.ei[k] = 0.0
1248
+ self.sequences.states.ic[k] = 0.0
1249
+ cpdef inline void calc_ea_sm_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1250
+ cdef numpy.int64_t k
1251
+ submodel.determine_soilevapotranspiration()
1252
+ for k in range(self.parameters.control.nmbzones):
1253
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1254
+ self.sequences.fluxes.ea[k] = min(submodel.get_soilevapotranspiration(k), self.sequences.states.sm[k])
1255
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] - (self.sequences.fluxes.ea[k])
1256
+ if self.sequences.states.sm[k] > self.parameters.control.fc[k]:
1257
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.r[k] + (self.sequences.states.sm[k] - self.parameters.control.fc[k])
1258
+ self.sequences.states.sm[k] = self.parameters.control.fc[k]
1259
+ else:
1260
+ self.sequences.fluxes.ea[k] = 0.0
1261
+ self.sequences.states.sm[k] = 0.0
1262
+ cpdef inline void calc_el_lz_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1263
+ cdef numpy.int64_t k
1264
+ submodel.determine_waterevaporation()
1265
+ for k in range(self.parameters.control.nmbzones):
1266
+ if self.parameters.control.zonetype[k] == ILAKE:
1267
+ self.sequences.fluxes.el[k] = submodel.get_waterevaporation(k)
1268
+ self.sequences.states.lz = self.sequences.states.lz - (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.el[k])
1269
+ else:
1270
+ self.sequences.fluxes.el[k] = 0.0
1271
+ cpdef inline void calc_outrc_rconcmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1272
+ submodel.set_inflow(self.sequences.fluxes.inrc)
1273
+ submodel.determine_outflow()
1274
+ self.sequences.fluxes.outrc = submodel.get_outflow()
1275
+ cpdef inline void pass_q_v1(self) noexcept nogil:
1276
+ self.sequences.outlets.q[0] = self.sequences.outlets.q[0] + (self.sequences.fluxes.qt)
1277
+ cpdef inline void calc_tc(self) noexcept nogil:
1278
+ cdef numpy.int64_t k
1279
+ for k in range(self.parameters.control.nmbzones):
1280
+ self.sequences.factors.tc[k] = self.sequences.inputs.t + self.parameters.control.tcorr[k] - self.parameters.control.tcalt[k] * (self.parameters.control.zonez[k] - self.parameters.derived.z)
1281
+ cpdef inline void calc_fracrain(self) noexcept nogil:
1282
+ cdef double d_dt
1283
+ cdef numpy.int64_t k
1284
+ for k in range(self.parameters.control.nmbzones):
1285
+ d_dt = self.parameters.control.ttint[k] / 2.0
1286
+ if self.sequences.factors.tc[k] >= (self.parameters.control.tt[k] + d_dt):
1287
+ self.sequences.factors.fracrain[k] = 1.0
1288
+ elif self.sequences.factors.tc[k] <= (self.parameters.control.tt[k] - d_dt):
1289
+ self.sequences.factors.fracrain[k] = 0.0
1290
+ else:
1291
+ self.sequences.factors.fracrain[k] = (self.sequences.factors.tc[k] - (self.parameters.control.tt[k] - d_dt)) / self.parameters.control.ttint[k]
1292
+ cpdef inline void calc_rfc_sfc(self) noexcept nogil:
1293
+ cdef numpy.int64_t k
1294
+ for k in range(self.parameters.control.nmbzones):
1295
+ self.sequences.factors.rfc[k] = self.sequences.factors.fracrain[k] * self.parameters.control.rfcf[k]
1296
+ self.sequences.factors.sfc[k] = (1.0 - self.sequences.factors.fracrain[k]) * self.parameters.control.sfcf[k]
1297
+ cpdef inline void calc_pc(self) noexcept nogil:
1298
+ cdef numpy.int64_t k
1299
+ for k in range(self.parameters.control.nmbzones):
1300
+ self.sequences.fluxes.pc[k] = self.sequences.inputs.p * (1.0 + self.parameters.control.pcalt[k] * (self.parameters.control.zonez[k] - self.parameters.derived.z))
1301
+ if self.sequences.fluxes.pc[k] <= 0.0:
1302
+ self.sequences.fluxes.pc[k] = 0.0
1303
+ else:
1304
+ self.sequences.fluxes.pc[k] = self.sequences.fluxes.pc[k] * (self.parameters.control.pcorr[k] * (self.sequences.factors.rfc[k] + self.sequences.factors.sfc[k]))
1305
+ cpdef inline void calc_tf_ic(self) noexcept nogil:
1306
+ cdef numpy.int64_t k
1307
+ for k in range(self.parameters.control.nmbzones):
1308
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
1309
+ self.sequences.fluxes.tf[k] = max(self.sequences.fluxes.pc[k] - (self.parameters.control.icmax[k] - self.sequences.states.ic[k]), 0.0)
1310
+ self.sequences.states.ic[k] = self.sequences.states.ic[k] + (self.sequences.fluxes.pc[k] - self.sequences.fluxes.tf[k])
1311
+ else:
1312
+ self.sequences.fluxes.tf[k] = self.sequences.fluxes.pc[k]
1313
+ self.sequences.states.ic[k] = 0.0
1314
+ cpdef inline void calc_sp_wc(self) noexcept nogil:
1315
+ cdef numpy.int64_t c
1316
+ cdef double d_snow
1317
+ cdef double d_rain
1318
+ cdef double d_denom
1319
+ cdef numpy.int64_t k
1320
+ for k in range(self.parameters.control.nmbzones):
1321
+ if self.parameters.control.zonetype[k] != ILAKE:
1322
+ d_denom = self.sequences.factors.rfc[k] + self.sequences.factors.sfc[k]
1323
+ if d_denom > 0.0:
1324
+ d_rain = self.sequences.fluxes.tf[k] * self.sequences.factors.rfc[k] / d_denom
1325
+ d_snow = self.sequences.fluxes.tf[k] * self.sequences.factors.sfc[k] / d_denom
1326
+ for c in range(self.parameters.control.sclass):
1327
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.parameters.control.sfdist[c] * d_rain)
1328
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.parameters.control.sfdist[c] * d_snow)
1329
+ else:
1330
+ for c in range(self.parameters.control.sclass):
1331
+ self.sequences.states.wc[c, k] = 0.0
1332
+ self.sequences.states.sp[c, k] = 0.0
1333
+ cpdef inline void calc_spl_wcl_sp_wc(self) noexcept nogil:
1334
+ cdef double d_excess_wc
1335
+ cdef double d_excess_sp
1336
+ cdef double d_excess
1337
+ cdef double d_snow
1338
+ cdef numpy.int64_t c
1339
+ cdef numpy.int64_t k
1340
+ for k in range(self.parameters.control.nmbzones):
1341
+ self.sequences.fluxes.spl[k] = 0.0
1342
+ self.sequences.fluxes.wcl[k] = 0.0
1343
+ if self.parameters.control.zonetype[k] == ILAKE:
1344
+ for c in range(self.parameters.control.sclass):
1345
+ self.sequences.states.sp[c, k] = 0.0
1346
+ self.sequences.states.wc[c, k] = 0.0
1347
+ elif not isinf(self.parameters.control.smax[k]):
1348
+ for c in range(self.parameters.control.sclass):
1349
+ d_snow = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
1350
+ d_excess = d_snow - self.parameters.control.smax[k]
1351
+ if d_excess > 0.0:
1352
+ d_excess_sp = d_excess * self.sequences.states.sp[c, k] / d_snow
1353
+ d_excess_wc = d_excess * self.sequences.states.wc[c, k] / d_snow
1354
+ self.sequences.fluxes.spl[k] = self.sequences.fluxes.spl[k] + (d_excess_sp / self.parameters.control.sclass)
1355
+ self.sequences.fluxes.wcl[k] = self.sequences.fluxes.wcl[k] + (d_excess_wc / self.parameters.control.sclass)
1356
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (d_excess_sp)
1357
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (d_excess_wc)
1358
+ cpdef inline void calc_spg_wcg_sp_wc(self) noexcept nogil:
1359
+ cdef double d_excess_liquid_land
1360
+ cdef double d_excess_frozen_land
1361
+ cdef double d_delta_wc_zone
1362
+ cdef double d_delta_sp_zone
1363
+ cdef double d_fraction_gain_class
1364
+ cdef double d_excess_liquid_zone_actual
1365
+ cdef double d_excess_frozen_zone_actual
1366
+ cdef double d_fraction_gain_zone
1367
+ cdef double d_gain_max_cum
1368
+ cdef double d_excess_total_zone
1369
+ cdef double d_excess_liquid_zone
1370
+ cdef double d_excess_frozen_zone
1371
+ cdef double d_excess_liquid_basin
1372
+ cdef double d_excess_frozen_basin
1373
+ cdef double d_factor_excess
1374
+ cdef double d_factor_gain
1375
+ cdef double d_fraction_gain
1376
+ cdef double d_gain_max
1377
+ cdef double d_gain_pot
1378
+ cdef double d_gain_total
1379
+ cdef double d_gain_liquid
1380
+ cdef double d_gain_frozen
1381
+ cdef double d_f
1382
+ cdef numpy.int64_t t
1383
+ cdef numpy.int64_t f
1384
+ cdef numpy.int64_t c
1385
+ cdef numpy.int64_t i
1386
+ for i in range(self.parameters.control.nmbzones):
1387
+ self.sequences.fluxes.spg[i] = 0.0
1388
+ self.sequences.fluxes.wcg[i] = 0.0
1389
+ self.sequences.aides.spe[i] = 0.0
1390
+ self.sequences.aides.wce[i] = 0.0
1391
+ if self.parameters.control.zonetype[i] == ILAKE:
1392
+ for c in range(self.parameters.control.sclass):
1393
+ self.sequences.states.sp[c, i] = 0.0
1394
+ self.sequences.states.wc[c, i] = 0.0
1395
+ for i in range(self.parameters.derived.srednumber):
1396
+ f, t = self.parameters.derived.sredorder[i, 0], self.parameters.derived.sredorder[i, 1]
1397
+ d_f = self.parameters.derived.zonearearatios[f, t] * self.parameters.control.sred[f, t]
1398
+ d_gain_frozen = d_f * (self.sequences.fluxes.spl[f] + self.sequences.aides.spe[f])
1399
+ d_gain_liquid = d_f * (self.sequences.fluxes.wcl[f] + self.sequences.aides.wce[f])
1400
+ d_gain_total = d_gain_frozen + d_gain_liquid
1401
+ for c in range(self.parameters.control.sclass):
1402
+ d_gain_pot = self.parameters.control.sfdist[c] * d_gain_total
1403
+ if d_gain_pot > 0.0:
1404
+ d_gain_max = self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t]
1405
+ d_fraction_gain = min(d_gain_max / d_gain_pot, 1.0)
1406
+ d_factor_gain = d_fraction_gain * self.parameters.control.sfdist[c]
1407
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_factor_gain * d_gain_frozen / self.parameters.control.sclass)
1408
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_factor_gain * d_gain_liquid / self.parameters.control.sclass)
1409
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_factor_gain * d_gain_frozen)
1410
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_factor_gain * d_gain_liquid)
1411
+ d_factor_excess = (1.0 - d_fraction_gain) * self.parameters.control.sfdist[c]
1412
+ self.sequences.aides.spe[t] = self.sequences.aides.spe[t] + (d_factor_excess * d_gain_frozen / self.parameters.control.sclass)
1413
+ self.sequences.aides.wce[t] = self.sequences.aides.wce[t] + (d_factor_excess * d_gain_liquid / self.parameters.control.sclass)
1414
+ d_excess_frozen_basin, d_excess_liquid_basin = 0.0, 0.0
1415
+ for i in range(self.parameters.control.nmbzones):
1416
+ if self.parameters.derived.sredend[i]:
1417
+ d_excess_frozen_basin = d_excess_frozen_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.spe[i] + self.sequences.fluxes.spl[i]))
1418
+ d_excess_liquid_basin = d_excess_liquid_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.wce[i] + self.sequences.fluxes.wcl[i]))
1419
+ if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
1420
+ return
1421
+ for i in range(self.parameters.control.nmbzones):
1422
+ t = self.parameters.derived.indiceszonez[i]
1423
+ if self.parameters.control.zonetype[t] == ILAKE:
1424
+ continue
1425
+ d_excess_frozen_zone = d_excess_frozen_basin / self.parameters.derived.relzoneareas[t]
1426
+ d_excess_liquid_zone = d_excess_liquid_basin / self.parameters.derived.relzoneareas[t]
1427
+ d_excess_total_zone = d_excess_frozen_zone + d_excess_liquid_zone
1428
+ d_gain_max_cum = 0.0
1429
+ for c in range(self.parameters.control.sclass):
1430
+ d_gain_max_cum = d_gain_max_cum + (self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t])
1431
+ if d_gain_max_cum <= 0.0:
1432
+ continue
1433
+ d_fraction_gain_zone = min( d_gain_max_cum / self.parameters.control.sclass / d_excess_total_zone, 1.0 )
1434
+ d_excess_frozen_zone_actual = d_fraction_gain_zone * d_excess_frozen_zone
1435
+ d_excess_liquid_zone_actual = d_fraction_gain_zone * d_excess_liquid_zone
1436
+ for c in range(self.parameters.control.sclass):
1437
+ d_fraction_gain_class = ( self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t] ) / d_gain_max_cum
1438
+ d_delta_sp_zone = d_fraction_gain_class * d_excess_frozen_zone_actual
1439
+ d_delta_wc_zone = d_fraction_gain_class * d_excess_liquid_zone_actual
1440
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_delta_sp_zone)
1441
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_delta_wc_zone)
1442
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_delta_sp_zone * self.parameters.control.sclass)
1443
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_delta_wc_zone * self.parameters.control.sclass)
1444
+ d_excess_frozen_basin = d_excess_frozen_basin - (d_excess_frozen_zone_actual * self.parameters.derived.relzoneareas[t])
1445
+ d_excess_liquid_basin = d_excess_liquid_basin - (d_excess_liquid_zone_actual * self.parameters.derived.relzoneareas[t])
1446
+ if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
1447
+ return
1448
+ d_excess_frozen_land = d_excess_frozen_basin / self.parameters.derived.rellandarea
1449
+ d_excess_liquid_land = d_excess_liquid_basin / self.parameters.derived.rellandarea
1450
+ for t in range(self.parameters.control.nmbzones):
1451
+ if self.parameters.control.zonetype[t] != ILAKE:
1452
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_excess_frozen_land)
1453
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_excess_liquid_land)
1454
+ for c in range(self.parameters.control.sclass):
1455
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_excess_frozen_land)
1456
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_excess_liquid_land)
1457
+ return
1458
+ cpdef inline void calc_cfact(self) noexcept nogil:
1459
+ cdef numpy.int64_t k
1460
+ cdef double d_factor
1461
+ d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
1462
+ for k in range(self.parameters.control.nmbzones):
1463
+ if self.parameters.control.zonetype[k] != ILAKE:
1464
+ self.sequences.factors.cfact[k] = max(self.parameters.control.cfmax[k] + d_factor * self.parameters.control.cfvar[k], 0.0)
1465
+ else:
1466
+ self.sequences.factors.cfact[k] = 0.0
1467
+ cpdef inline void calc_melt_sp_wc(self) noexcept nogil:
1468
+ cdef numpy.int64_t c
1469
+ cdef double d_potmelt
1470
+ cdef numpy.int64_t k
1471
+ for k in range(self.parameters.control.nmbzones):
1472
+ if self.parameters.control.zonetype[k] != ILAKE:
1473
+ if self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]:
1474
+ d_potmelt = self.sequences.factors.cfact[k] * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
1475
+ for c in range(self.parameters.control.sclass):
1476
+ self.sequences.fluxes.melt[c, k] = min(d_potmelt, self.sequences.states.sp[c, k])
1477
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (self.sequences.fluxes.melt[c, k])
1478
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.sequences.fluxes.melt[c, k])
1479
+ else:
1480
+ for c in range(self.parameters.control.sclass):
1481
+ self.sequences.fluxes.melt[c, k] = 0.0
1482
+ else:
1483
+ for c in range(self.parameters.control.sclass):
1484
+ self.sequences.fluxes.melt[c, k] = 0.0
1485
+ self.sequences.states.wc[c, k] = 0.0
1486
+ self.sequences.states.sp[c, k] = 0.0
1487
+ cpdef inline void calc_refr_sp_wc(self) noexcept nogil:
1488
+ cdef numpy.int64_t c
1489
+ cdef double d_potrefr
1490
+ cdef numpy.int64_t k
1491
+ for k in range(self.parameters.control.nmbzones):
1492
+ if self.parameters.control.zonetype[k] != ILAKE:
1493
+ if self.sequences.factors.tc[k] < self.parameters.derived.ttm[k]:
1494
+ d_potrefr = self.parameters.control.cfr[k] * self.parameters.control.cfmax[k] * (self.parameters.derived.ttm[k] - self.sequences.factors.tc[k])
1495
+ for c in range(self.parameters.control.sclass):
1496
+ self.sequences.fluxes.refr[c, k] = min(d_potrefr, self.sequences.states.wc[c, k])
1497
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.sequences.fluxes.refr[c, k])
1498
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (self.sequences.fluxes.refr[c, k])
1499
+ else:
1500
+ for c in range(self.parameters.control.sclass):
1501
+ self.sequences.fluxes.refr[c, k] = 0.0
1502
+ else:
1503
+ for c in range(self.parameters.control.sclass):
1504
+ self.sequences.fluxes.refr[c, k] = 0.0
1505
+ self.sequences.states.wc[c, k] = 0.0
1506
+ self.sequences.states.sp[c, k] = 0.0
1507
+ cpdef inline void calc_in_wc(self) noexcept nogil:
1508
+ cdef double d_wc_old
1509
+ cdef numpy.int64_t c
1510
+ cdef numpy.int64_t k
1511
+ for k in range(self.parameters.control.nmbzones):
1512
+ self.sequences.fluxes.in_[k] = 0.0
1513
+ if self.parameters.control.zonetype[k] != ILAKE:
1514
+ for c in range(self.parameters.control.sclass):
1515
+ d_wc_old = self.sequences.states.wc[c, k]
1516
+ self.sequences.states.wc[c, k] = min(d_wc_old, self.parameters.control.whc[k] * self.sequences.states.sp[c, k])
1517
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + ((d_wc_old - self.sequences.states.wc[c, k]) / self.parameters.control.sclass)
1518
+ else:
1519
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.tf[k]
1520
+ for c in range(self.parameters.control.sclass):
1521
+ self.sequences.states.wc[c, k] = 0.0
1522
+ cpdef inline void calc_swe(self) noexcept nogil:
1523
+ cdef numpy.int64_t c
1524
+ cdef numpy.int64_t k
1525
+ for k in range(self.parameters.control.nmbzones):
1526
+ if self.parameters.control.zonetype[k] != ILAKE:
1527
+ for c in range(self.parameters.control.sclass):
1528
+ self.sequences.factors.swe[c, k] = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
1529
+ else:
1530
+ for c in range(self.parameters.control.sclass):
1531
+ self.sequences.factors.swe[c, k] = 0.0
1532
+ cpdef inline void calc_sr(self) noexcept nogil:
1533
+ cdef numpy.int64_t k
1534
+ for k in range(self.parameters.control.nmbzones):
1535
+ if self.parameters.control.zonetype[k] == SEALED:
1536
+ self.sequences.fluxes.sr[k] = self.sequences.fluxes.in_[k]
1537
+ else:
1538
+ self.sequences.fluxes.sr[k] = 0.0
1539
+ cpdef inline void calc_gact(self) noexcept nogil:
1540
+ cdef numpy.int64_t k
1541
+ cdef double d_factor
1542
+ d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
1543
+ for k in range(self.parameters.control.nmbzones):
1544
+ if self.parameters.control.zonetype[k] == GLACIER:
1545
+ self.sequences.factors.gact[k] = max(self.parameters.control.gmelt[k] + d_factor * self.parameters.control.gvar[k], 0.0)
1546
+ else:
1547
+ self.sequences.factors.gact[k] = 0.0
1548
+ cpdef inline void calc_glmelt_in(self) noexcept nogil:
1549
+ cdef numpy.int64_t c
1550
+ cdef double d_glmeltpot
1551
+ cdef numpy.int64_t k
1552
+ for k in range(self.parameters.control.nmbzones):
1553
+ self.sequences.fluxes.glmelt[k] = 0.0
1554
+ if (self.parameters.control.zonetype[k] == GLACIER) and (self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]):
1555
+ d_glmeltpot = self.sequences.factors.gact[k] / self.parameters.control.sclass * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
1556
+ for c in range(self.parameters.control.sclass):
1557
+ if self.sequences.states.sp[c, k] <= 0.0:
1558
+ self.sequences.fluxes.glmelt[k] = self.sequences.fluxes.glmelt[k] + (d_glmeltpot)
1559
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + (d_glmeltpot)
1560
+ cpdef inline void calc_ei_ic(self) noexcept nogil:
1561
+ if self.aetmodel_typeid == 1:
1562
+ self.calc_ei_ic_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1563
+ cpdef inline void calc_r_sm(self) noexcept nogil:
1564
+ cdef numpy.int64_t k
1565
+ for k in range(self.parameters.control.nmbzones):
1566
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1567
+ if self.parameters.control.fc[k] > 0.0:
1568
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k] * (self.sequences.states.sm[k] / self.parameters.control.fc[k]) ** self.parameters.control.beta[k]
1569
+ self.sequences.fluxes.r[k] = max(self.sequences.fluxes.r[k], self.sequences.states.sm[k] + self.sequences.fluxes.in_[k] - self.parameters.control.fc[k])
1570
+ else:
1571
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
1572
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] + (self.sequences.fluxes.in_[k] - self.sequences.fluxes.r[k])
1573
+ else:
1574
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
1575
+ self.sequences.states.sm[k] = 0.0
1576
+ cpdef inline void calc_cf_sm(self) noexcept nogil:
1577
+ cdef numpy.int64_t k
1578
+ for k in range(self.parameters.control.nmbzones):
1579
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1580
+ if self.parameters.control.fc[k] > 0.0:
1581
+ self.sequences.fluxes.cf[k] = self.parameters.control.cflux[k] * (1.0 - self.sequences.states.sm[k] / self.parameters.control.fc[k])
1582
+ self.sequences.fluxes.cf[k] = min(self.sequences.fluxes.cf[k], self.sequences.states.uz + self.sequences.fluxes.r[k])
1583
+ self.sequences.fluxes.cf[k] = min(self.sequences.fluxes.cf[k], self.parameters.control.fc[k] - self.sequences.states.sm[k])
1584
+ else:
1585
+ self.sequences.fluxes.cf[k] = 0.0
1586
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] + (self.sequences.fluxes.cf[k])
1587
+ else:
1588
+ self.sequences.fluxes.cf[k] = 0.0
1589
+ self.sequences.states.sm[k] = 0.0
1590
+ cpdef inline void calc_ea_sm(self) noexcept nogil:
1591
+ if self.aetmodel_typeid == 1:
1592
+ self.calc_ea_sm_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1593
+ cpdef inline void calc_inuz(self) noexcept nogil:
1594
+ cdef numpy.int64_t k
1595
+ self.sequences.fluxes.inuz = 0.0
1596
+ for k in range(self.parameters.control.nmbzones):
1597
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1598
+ self.sequences.fluxes.inuz = self.sequences.fluxes.inuz + (( self.parameters.derived.relzoneareas[k] / self.parameters.derived.relupperzonearea * (self.sequences.fluxes.r[k] - self.sequences.fluxes.cf[k]) ))
1599
+ cpdef inline void calc_contriarea(self) noexcept nogil:
1600
+ cdef double d_weight
1601
+ cdef numpy.int64_t k
1602
+ self.sequences.factors.contriarea = 1.0
1603
+ if self.parameters.control.resparea and (self.parameters.derived.relsoilarea > 0.0):
1604
+ for k in range(self.parameters.control.nmbzones):
1605
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1606
+ if self.parameters.control.fc[k] > 0.0:
1607
+ d_weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.relsoilarea
1608
+ self.sequences.factors.contriarea = self.sequences.factors.contriarea * ((self.sequences.states.sm[k] / self.parameters.control.fc[k]) ** d_weight)
1609
+ self.sequences.factors.contriarea = self.sequences.factors.contriarea ** (self.parameters.control.beta[k])
1610
+ cpdef inline void calc_q0_perc_uz(self) noexcept nogil:
1611
+ cdef double factor
1612
+ cdef double error
1613
+ cdef double q0
1614
+ cdef double perc
1615
+ cdef numpy.int64_t _
1616
+ cdef double uz_old
1617
+ uz_old = self.sequences.states.uz
1618
+ self.sequences.fluxes.perc = 0.0
1619
+ self.sequences.fluxes.q0 = 0.0
1620
+ for _ in range(self.parameters.control.recstep):
1621
+ self.sequences.states.uz = max(self.sequences.states.uz + self.parameters.derived.dt * self.sequences.fluxes.inuz, 0.0)
1622
+ perc = min(self.parameters.derived.dt * self.parameters.control.percmax * self.sequences.factors.contriarea, self.sequences.states.uz)
1623
+ self.sequences.states.uz = self.sequences.states.uz - (perc)
1624
+ self.sequences.fluxes.perc = self.sequences.fluxes.perc + (perc)
1625
+ if self.sequences.states.uz > 0.0:
1626
+ if self.sequences.factors.contriarea > 0.0:
1627
+ q0 = min( self.parameters.derived.dt * self.parameters.control.k * (self.sequences.states.uz / self.sequences.factors.contriarea) ** (1.0 + self.parameters.control.alpha), self.sequences.states.uz, )
1628
+ else:
1629
+ q0 = self.sequences.states.uz
1630
+ self.sequences.states.uz = self.sequences.states.uz - (q0)
1631
+ self.sequences.fluxes.q0 = self.sequences.fluxes.q0 + (q0)
1632
+ error = self.sequences.states.uz - (uz_old + self.sequences.fluxes.inuz - self.sequences.fluxes.perc - self.sequences.fluxes.q0)
1633
+ if error > 0.0:
1634
+ factor = 1.0 - error / (self.sequences.fluxes.perc + self.sequences.fluxes.q0)
1635
+ self.sequences.fluxes.perc = self.sequences.fluxes.perc * (factor)
1636
+ self.sequences.fluxes.q0 = self.sequences.fluxes.q0 * (factor)
1637
+ cpdef inline void calc_lz(self) noexcept nogil:
1638
+ cdef numpy.int64_t k
1639
+ if self.parameters.derived.rellowerzonearea > 0.0:
1640
+ self.sequences.states.lz = self.sequences.states.lz + (self.parameters.derived.relupperzonearea / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.perc)
1641
+ for k in range(self.parameters.control.nmbzones):
1642
+ if self.parameters.control.zonetype[k] == ILAKE:
1643
+ self.sequences.states.lz = self.sequences.states.lz + (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.pc[k])
1644
+ else:
1645
+ self.sequences.states.lz = 0.0
1646
+ cpdef inline void calc_el_lz(self) noexcept nogil:
1647
+ if self.aetmodel_typeid == 1:
1648
+ self.calc_el_lz_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1649
+ cpdef inline void calc_q1_lz(self) noexcept nogil:
1650
+ if self.sequences.states.lz > 0.0:
1651
+ self.sequences.fluxes.q1 = self.parameters.control.k4 * self.sequences.states.lz ** (1.0 + self.parameters.control.gamma)
1652
+ else:
1653
+ self.sequences.fluxes.q1 = 0.0
1654
+ self.sequences.states.lz = self.sequences.states.lz - (self.sequences.fluxes.q1)
1655
+ cpdef inline void calc_inrc(self) noexcept nogil:
1656
+ cdef numpy.int64_t k
1657
+ self.sequences.fluxes.inrc = self.parameters.derived.relupperzonearea * self.sequences.fluxes.q0 + self.parameters.derived.rellowerzonearea * self.sequences.fluxes.q1
1658
+ for k in range(self.parameters.control.nmbzones):
1659
+ if self.parameters.control.zonetype[k] == SEALED:
1660
+ self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (self.parameters.derived.relzoneareas[k] * self.sequences.fluxes.r[k])
1661
+ cpdef inline void calc_outrc(self) noexcept nogil:
1662
+ if self.rconcmodel is None:
1663
+ self.sequences.fluxes.outrc = self.sequences.fluxes.inrc
1664
+ elif self.rconcmodel_typeid == 1:
1665
+ self.calc_outrc_rconcmodel_v1( (<masterinterface.MasterInterface>self.rconcmodel) )
1666
+ cpdef inline void calc_rt(self) noexcept nogil:
1667
+ self.sequences.fluxes.rt = self.sequences.fluxes.outrc
1668
+ cpdef inline void calc_qt(self) noexcept nogil:
1669
+ self.sequences.fluxes.qt = self.parameters.derived.qfactor * self.sequences.fluxes.rt
1670
+ cpdef double get_temperature(self, numpy.int64_t s) noexcept nogil:
1671
+ return self.sequences.factors.tc[s]
1672
+ cpdef double get_meantemperature(self) noexcept nogil:
1673
+ return self.sequences.inputs.t
1674
+ cpdef double get_precipitation(self, numpy.int64_t s) noexcept nogil:
1675
+ return self.sequences.fluxes.pc[s]
1676
+ cpdef double get_interceptedwater(self, numpy.int64_t k) noexcept nogil:
1677
+ return self.sequences.states.ic[k]
1678
+ cpdef double get_soilwater(self, numpy.int64_t k) noexcept nogil:
1679
+ return self.sequences.states.sm[k]
1680
+ cpdef double get_snowcover(self, numpy.int64_t k) noexcept nogil:
1681
+ cdef numpy.int64_t c
1682
+ cdef double snowcovered
1683
+ snowcovered = 0.0
1684
+ for c in range(self.parameters.control.sclass):
1685
+ snowcovered = snowcovered + (self.sequences.states.sp[c, k] > 0.0)
1686
+ return snowcovered / self.parameters.control.sclass
1687
+ cpdef inline void calc_ei_ic_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
1688
+ cdef numpy.int64_t k
1689
+ submodel.determine_interceptionevaporation()
1690
+ for k in range(self.parameters.control.nmbzones):
1691
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
1692
+ self.sequences.fluxes.ei[k] = min(submodel.get_interceptionevaporation(k), self.sequences.states.ic[k])
1693
+ self.sequences.states.ic[k] = self.sequences.states.ic[k] - (self.sequences.fluxes.ei[k])
1694
+ else:
1695
+ self.sequences.fluxes.ei[k] = 0.0
1696
+ self.sequences.states.ic[k] = 0.0
1697
+ cpdef inline void calc_ea_sm_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
1698
+ cdef numpy.int64_t k
1699
+ submodel.determine_soilevapotranspiration()
1700
+ for k in range(self.parameters.control.nmbzones):
1701
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1702
+ self.sequences.fluxes.ea[k] = min(submodel.get_soilevapotranspiration(k), self.sequences.states.sm[k])
1703
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] - (self.sequences.fluxes.ea[k])
1704
+ if self.sequences.states.sm[k] > self.parameters.control.fc[k]:
1705
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.r[k] + (self.sequences.states.sm[k] - self.parameters.control.fc[k])
1706
+ self.sequences.states.sm[k] = self.parameters.control.fc[k]
1707
+ else:
1708
+ self.sequences.fluxes.ea[k] = 0.0
1709
+ self.sequences.states.sm[k] = 0.0
1710
+ cpdef inline void calc_el_lz_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
1711
+ cdef numpy.int64_t k
1712
+ submodel.determine_waterevaporation()
1713
+ for k in range(self.parameters.control.nmbzones):
1714
+ if self.parameters.control.zonetype[k] == ILAKE:
1715
+ self.sequences.fluxes.el[k] = submodel.get_waterevaporation(k)
1716
+ self.sequences.states.lz = self.sequences.states.lz - (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.el[k])
1717
+ else:
1718
+ self.sequences.fluxes.el[k] = 0.0
1719
+ cpdef inline void calc_outrc_rconcmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
1720
+ submodel.set_inflow(self.sequences.fluxes.inrc)
1721
+ submodel.determine_outflow()
1722
+ self.sequences.fluxes.outrc = submodel.get_outflow()
1723
+ cpdef inline void pass_q(self) noexcept nogil:
1724
+ self.sequences.outlets.q[0] = self.sequences.outlets.q[0] + (self.sequences.fluxes.qt)