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