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,1911 @@
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._dp_diskflag_reading:
340
+ k = 0
341
+ for jdx0 in range(self._dp_length_0):
342
+ self.dp[jdx0] = self._dp_ncarray[k]
343
+ k += 1
344
+ elif self._dp_ramflag:
345
+ for jdx0 in range(self._dp_length_0):
346
+ self.dp[jdx0] = self._dp_array[idx, jdx0]
347
+ if self._el_diskflag_reading:
348
+ k = 0
349
+ for jdx0 in range(self._el_length_0):
350
+ self.el[jdx0] = self._el_ncarray[k]
351
+ k += 1
352
+ elif self._el_ramflag:
353
+ for jdx0 in range(self._el_length_0):
354
+ self.el[jdx0] = self._el_array[idx, jdx0]
355
+ if self._rs_diskflag_reading:
356
+ k = 0
357
+ for jdx0 in range(self._rs_length_0):
358
+ self.rs[jdx0] = self._rs_ncarray[k]
359
+ k += 1
360
+ elif self._rs_ramflag:
361
+ for jdx0 in range(self._rs_length_0):
362
+ self.rs[jdx0] = self._rs_array[idx, jdx0]
363
+ if self._ri_diskflag_reading:
364
+ k = 0
365
+ for jdx0 in range(self._ri_length_0):
366
+ self.ri[jdx0] = self._ri_ncarray[k]
367
+ k += 1
368
+ elif self._ri_ramflag:
369
+ for jdx0 in range(self._ri_length_0):
370
+ self.ri[jdx0] = self._ri_array[idx, jdx0]
371
+ if self._gr1_diskflag_reading:
372
+ k = 0
373
+ for jdx0 in range(self._gr1_length_0):
374
+ self.gr1[jdx0] = self._gr1_ncarray[k]
375
+ k += 1
376
+ elif self._gr1_ramflag:
377
+ for jdx0 in range(self._gr1_length_0):
378
+ self.gr1[jdx0] = self._gr1_array[idx, jdx0]
379
+ if self._rg1_diskflag_reading:
380
+ k = 0
381
+ for jdx0 in range(self._rg1_length_0):
382
+ self.rg1[jdx0] = self._rg1_ncarray[k]
383
+ k += 1
384
+ elif self._rg1_ramflag:
385
+ for jdx0 in range(self._rg1_length_0):
386
+ self.rg1[jdx0] = self._rg1_array[idx, jdx0]
387
+ if self._gr2_diskflag_reading:
388
+ self.gr2 = self._gr2_ncarray[0]
389
+ elif self._gr2_ramflag:
390
+ self.gr2 = self._gr2_array[idx]
391
+ if self._rg2_diskflag_reading:
392
+ self.rg2 = self._rg2_ncarray[0]
393
+ elif self._rg2_ramflag:
394
+ self.rg2 = self._rg2_array[idx]
395
+ if self._gr3_diskflag_reading:
396
+ self.gr3 = self._gr3_ncarray[0]
397
+ elif self._gr3_ramflag:
398
+ self.gr3 = self._gr3_array[idx]
399
+ if self._rg3_diskflag_reading:
400
+ self.rg3 = self._rg3_ncarray[0]
401
+ elif self._rg3_ramflag:
402
+ self.rg3 = self._rg3_array[idx]
403
+ if self._inrc_diskflag_reading:
404
+ self.inrc = self._inrc_ncarray[0]
405
+ elif self._inrc_ramflag:
406
+ self.inrc = self._inrc_array[idx]
407
+ if self._outrc_diskflag_reading:
408
+ self.outrc = self._outrc_ncarray[0]
409
+ elif self._outrc_ramflag:
410
+ self.outrc = self._outrc_array[idx]
411
+ if self._rt_diskflag_reading:
412
+ self.rt = self._rt_ncarray[0]
413
+ elif self._rt_ramflag:
414
+ self.rt = self._rt_array[idx]
415
+ if self._qt_diskflag_reading:
416
+ self.qt = self._qt_ncarray[0]
417
+ elif self._qt_ramflag:
418
+ self.qt = self._qt_array[idx]
419
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
420
+ cdef numpy.int64_t jdx0, jdx1
421
+ cdef numpy.int64_t k
422
+ if self._pc_diskflag_writing:
423
+ k = 0
424
+ for jdx0 in range(self._pc_length_0):
425
+ self._pc_ncarray[k] = self.pc[jdx0]
426
+ k += 1
427
+ if self._pc_ramflag:
428
+ for jdx0 in range(self._pc_length_0):
429
+ self._pc_array[idx, jdx0] = self.pc[jdx0]
430
+ if self._ei_diskflag_writing:
431
+ k = 0
432
+ for jdx0 in range(self._ei_length_0):
433
+ self._ei_ncarray[k] = self.ei[jdx0]
434
+ k += 1
435
+ if self._ei_ramflag:
436
+ for jdx0 in range(self._ei_length_0):
437
+ self._ei_array[idx, jdx0] = self.ei[jdx0]
438
+ if self._tf_diskflag_writing:
439
+ k = 0
440
+ for jdx0 in range(self._tf_length_0):
441
+ self._tf_ncarray[k] = self.tf[jdx0]
442
+ k += 1
443
+ if self._tf_ramflag:
444
+ for jdx0 in range(self._tf_length_0):
445
+ self._tf_array[idx, jdx0] = self.tf[jdx0]
446
+ if self._spl_diskflag_writing:
447
+ k = 0
448
+ for jdx0 in range(self._spl_length_0):
449
+ self._spl_ncarray[k] = self.spl[jdx0]
450
+ k += 1
451
+ if self._spl_ramflag:
452
+ for jdx0 in range(self._spl_length_0):
453
+ self._spl_array[idx, jdx0] = self.spl[jdx0]
454
+ if self._wcl_diskflag_writing:
455
+ k = 0
456
+ for jdx0 in range(self._wcl_length_0):
457
+ self._wcl_ncarray[k] = self.wcl[jdx0]
458
+ k += 1
459
+ if self._wcl_ramflag:
460
+ for jdx0 in range(self._wcl_length_0):
461
+ self._wcl_array[idx, jdx0] = self.wcl[jdx0]
462
+ if self._spg_diskflag_writing:
463
+ k = 0
464
+ for jdx0 in range(self._spg_length_0):
465
+ self._spg_ncarray[k] = self.spg[jdx0]
466
+ k += 1
467
+ if self._spg_ramflag:
468
+ for jdx0 in range(self._spg_length_0):
469
+ self._spg_array[idx, jdx0] = self.spg[jdx0]
470
+ if self._wcg_diskflag_writing:
471
+ k = 0
472
+ for jdx0 in range(self._wcg_length_0):
473
+ self._wcg_ncarray[k] = self.wcg[jdx0]
474
+ k += 1
475
+ if self._wcg_ramflag:
476
+ for jdx0 in range(self._wcg_length_0):
477
+ self._wcg_array[idx, jdx0] = self.wcg[jdx0]
478
+ if self._glmelt_diskflag_writing:
479
+ k = 0
480
+ for jdx0 in range(self._glmelt_length_0):
481
+ self._glmelt_ncarray[k] = self.glmelt[jdx0]
482
+ k += 1
483
+ if self._glmelt_ramflag:
484
+ for jdx0 in range(self._glmelt_length_0):
485
+ self._glmelt_array[idx, jdx0] = self.glmelt[jdx0]
486
+ if self._melt_diskflag_writing:
487
+ k = 0
488
+ for jdx0 in range(self._melt_length_0):
489
+ for jdx1 in range(self._melt_length_1):
490
+ self._melt_ncarray[k] = self.melt[jdx0, jdx1]
491
+ k += 1
492
+ if self._melt_ramflag:
493
+ for jdx0 in range(self._melt_length_0):
494
+ for jdx1 in range(self._melt_length_1):
495
+ self._melt_array[idx, jdx0, jdx1] = self.melt[jdx0, jdx1]
496
+ if self._refr_diskflag_writing:
497
+ k = 0
498
+ for jdx0 in range(self._refr_length_0):
499
+ for jdx1 in range(self._refr_length_1):
500
+ self._refr_ncarray[k] = self.refr[jdx0, jdx1]
501
+ k += 1
502
+ if self._refr_ramflag:
503
+ for jdx0 in range(self._refr_length_0):
504
+ for jdx1 in range(self._refr_length_1):
505
+ self._refr_array[idx, jdx0, jdx1] = self.refr[jdx0, jdx1]
506
+ if self._in__diskflag_writing:
507
+ k = 0
508
+ for jdx0 in range(self._in__length_0):
509
+ self._in__ncarray[k] = self.in_[jdx0]
510
+ k += 1
511
+ if self._in__ramflag:
512
+ for jdx0 in range(self._in__length_0):
513
+ self._in__array[idx, jdx0] = self.in_[jdx0]
514
+ if self._r_diskflag_writing:
515
+ k = 0
516
+ for jdx0 in range(self._r_length_0):
517
+ self._r_ncarray[k] = self.r[jdx0]
518
+ k += 1
519
+ if self._r_ramflag:
520
+ for jdx0 in range(self._r_length_0):
521
+ self._r_array[idx, jdx0] = self.r[jdx0]
522
+ if self._sr_diskflag_writing:
523
+ k = 0
524
+ for jdx0 in range(self._sr_length_0):
525
+ self._sr_ncarray[k] = self.sr[jdx0]
526
+ k += 1
527
+ if self._sr_ramflag:
528
+ for jdx0 in range(self._sr_length_0):
529
+ self._sr_array[idx, jdx0] = self.sr[jdx0]
530
+ if self._ea_diskflag_writing:
531
+ k = 0
532
+ for jdx0 in range(self._ea_length_0):
533
+ self._ea_ncarray[k] = self.ea[jdx0]
534
+ k += 1
535
+ if self._ea_ramflag:
536
+ for jdx0 in range(self._ea_length_0):
537
+ self._ea_array[idx, jdx0] = self.ea[jdx0]
538
+ if self._dp_diskflag_writing:
539
+ k = 0
540
+ for jdx0 in range(self._dp_length_0):
541
+ self._dp_ncarray[k] = self.dp[jdx0]
542
+ k += 1
543
+ if self._dp_ramflag:
544
+ for jdx0 in range(self._dp_length_0):
545
+ self._dp_array[idx, jdx0] = self.dp[jdx0]
546
+ if self._el_diskflag_writing:
547
+ k = 0
548
+ for jdx0 in range(self._el_length_0):
549
+ self._el_ncarray[k] = self.el[jdx0]
550
+ k += 1
551
+ if self._el_ramflag:
552
+ for jdx0 in range(self._el_length_0):
553
+ self._el_array[idx, jdx0] = self.el[jdx0]
554
+ if self._rs_diskflag_writing:
555
+ k = 0
556
+ for jdx0 in range(self._rs_length_0):
557
+ self._rs_ncarray[k] = self.rs[jdx0]
558
+ k += 1
559
+ if self._rs_ramflag:
560
+ for jdx0 in range(self._rs_length_0):
561
+ self._rs_array[idx, jdx0] = self.rs[jdx0]
562
+ if self._ri_diskflag_writing:
563
+ k = 0
564
+ for jdx0 in range(self._ri_length_0):
565
+ self._ri_ncarray[k] = self.ri[jdx0]
566
+ k += 1
567
+ if self._ri_ramflag:
568
+ for jdx0 in range(self._ri_length_0):
569
+ self._ri_array[idx, jdx0] = self.ri[jdx0]
570
+ if self._gr1_diskflag_writing:
571
+ k = 0
572
+ for jdx0 in range(self._gr1_length_0):
573
+ self._gr1_ncarray[k] = self.gr1[jdx0]
574
+ k += 1
575
+ if self._gr1_ramflag:
576
+ for jdx0 in range(self._gr1_length_0):
577
+ self._gr1_array[idx, jdx0] = self.gr1[jdx0]
578
+ if self._rg1_diskflag_writing:
579
+ k = 0
580
+ for jdx0 in range(self._rg1_length_0):
581
+ self._rg1_ncarray[k] = self.rg1[jdx0]
582
+ k += 1
583
+ if self._rg1_ramflag:
584
+ for jdx0 in range(self._rg1_length_0):
585
+ self._rg1_array[idx, jdx0] = self.rg1[jdx0]
586
+ if self._gr2_diskflag_writing:
587
+ self._gr2_ncarray[0] = self.gr2
588
+ if self._gr2_ramflag:
589
+ self._gr2_array[idx] = self.gr2
590
+ if self._rg2_diskflag_writing:
591
+ self._rg2_ncarray[0] = self.rg2
592
+ if self._rg2_ramflag:
593
+ self._rg2_array[idx] = self.rg2
594
+ if self._gr3_diskflag_writing:
595
+ self._gr3_ncarray[0] = self.gr3
596
+ if self._gr3_ramflag:
597
+ self._gr3_array[idx] = self.gr3
598
+ if self._rg3_diskflag_writing:
599
+ self._rg3_ncarray[0] = self.rg3
600
+ if self._rg3_ramflag:
601
+ self._rg3_array[idx] = self.rg3
602
+ if self._inrc_diskflag_writing:
603
+ self._inrc_ncarray[0] = self.inrc
604
+ if self._inrc_ramflag:
605
+ self._inrc_array[idx] = self.inrc
606
+ if self._outrc_diskflag_writing:
607
+ self._outrc_ncarray[0] = self.outrc
608
+ if self._outrc_ramflag:
609
+ self._outrc_array[idx] = self.outrc
610
+ if self._rt_diskflag_writing:
611
+ self._rt_ncarray[0] = self.rt
612
+ if self._rt_ramflag:
613
+ self._rt_array[idx] = self.rt
614
+ if self._qt_diskflag_writing:
615
+ self._qt_ncarray[0] = self.qt
616
+ if self._qt_ramflag:
617
+ self._qt_array[idx] = self.qt
618
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
619
+ if name == "gr2":
620
+ self._gr2_outputpointer = value.p_value
621
+ if name == "rg2":
622
+ self._rg2_outputpointer = value.p_value
623
+ if name == "gr3":
624
+ self._gr3_outputpointer = value.p_value
625
+ if name == "rg3":
626
+ self._rg3_outputpointer = value.p_value
627
+ if name == "inrc":
628
+ self._inrc_outputpointer = value.p_value
629
+ if name == "outrc":
630
+ self._outrc_outputpointer = value.p_value
631
+ if name == "rt":
632
+ self._rt_outputpointer = value.p_value
633
+ if name == "qt":
634
+ self._qt_outputpointer = value.p_value
635
+ cpdef inline void update_outputs(self) noexcept nogil:
636
+ if self._gr2_outputflag:
637
+ self._gr2_outputpointer[0] = self.gr2
638
+ if self._rg2_outputflag:
639
+ self._rg2_outputpointer[0] = self.rg2
640
+ if self._gr3_outputflag:
641
+ self._gr3_outputpointer[0] = self.gr3
642
+ if self._rg3_outputflag:
643
+ self._rg3_outputpointer[0] = self.rg3
644
+ if self._inrc_outputflag:
645
+ self._inrc_outputpointer[0] = self.inrc
646
+ if self._outrc_outputflag:
647
+ self._outrc_outputpointer[0] = self.outrc
648
+ if self._rt_outputflag:
649
+ self._rt_outputpointer[0] = self.rt
650
+ if self._qt_outputflag:
651
+ self._qt_outputpointer[0] = self.qt
652
+ @cython.final
653
+ cdef class StateSequences:
654
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
655
+ cdef numpy.int64_t jdx0, jdx1
656
+ cdef numpy.int64_t k
657
+ if self._ic_diskflag_reading:
658
+ k = 0
659
+ for jdx0 in range(self._ic_length_0):
660
+ self.ic[jdx0] = self._ic_ncarray[k]
661
+ k += 1
662
+ elif self._ic_ramflag:
663
+ for jdx0 in range(self._ic_length_0):
664
+ self.ic[jdx0] = self._ic_array[idx, jdx0]
665
+ if self._sp_diskflag_reading:
666
+ k = 0
667
+ for jdx0 in range(self._sp_length_0):
668
+ for jdx1 in range(self._sp_length_1):
669
+ self.sp[jdx0, jdx1] = self._sp_ncarray[k]
670
+ k += 1
671
+ elif self._sp_ramflag:
672
+ for jdx0 in range(self._sp_length_0):
673
+ for jdx1 in range(self._sp_length_1):
674
+ self.sp[jdx0, jdx1] = self._sp_array[idx, jdx0, jdx1]
675
+ if self._wc_diskflag_reading:
676
+ k = 0
677
+ for jdx0 in range(self._wc_length_0):
678
+ for jdx1 in range(self._wc_length_1):
679
+ self.wc[jdx0, jdx1] = self._wc_ncarray[k]
680
+ k += 1
681
+ elif self._wc_ramflag:
682
+ for jdx0 in range(self._wc_length_0):
683
+ for jdx1 in range(self._wc_length_1):
684
+ self.wc[jdx0, jdx1] = self._wc_array[idx, jdx0, jdx1]
685
+ if self._sm_diskflag_reading:
686
+ k = 0
687
+ for jdx0 in range(self._sm_length_0):
688
+ self.sm[jdx0] = self._sm_ncarray[k]
689
+ k += 1
690
+ elif self._sm_ramflag:
691
+ for jdx0 in range(self._sm_length_0):
692
+ self.sm[jdx0] = self._sm_array[idx, jdx0]
693
+ if self._suz_diskflag_reading:
694
+ k = 0
695
+ for jdx0 in range(self._suz_length_0):
696
+ self.suz[jdx0] = self._suz_ncarray[k]
697
+ k += 1
698
+ elif self._suz_ramflag:
699
+ for jdx0 in range(self._suz_length_0):
700
+ self.suz[jdx0] = self._suz_array[idx, jdx0]
701
+ if self._sg1_diskflag_reading:
702
+ k = 0
703
+ for jdx0 in range(self._sg1_length_0):
704
+ self.sg1[jdx0] = self._sg1_ncarray[k]
705
+ k += 1
706
+ elif self._sg1_ramflag:
707
+ for jdx0 in range(self._sg1_length_0):
708
+ self.sg1[jdx0] = self._sg1_array[idx, jdx0]
709
+ if self._sg2_diskflag_reading:
710
+ self.sg2 = self._sg2_ncarray[0]
711
+ elif self._sg2_ramflag:
712
+ self.sg2 = self._sg2_array[idx]
713
+ if self._sg3_diskflag_reading:
714
+ self.sg3 = self._sg3_ncarray[0]
715
+ elif self._sg3_ramflag:
716
+ self.sg3 = self._sg3_array[idx]
717
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
718
+ cdef numpy.int64_t jdx0, jdx1
719
+ cdef numpy.int64_t k
720
+ if self._ic_diskflag_writing:
721
+ k = 0
722
+ for jdx0 in range(self._ic_length_0):
723
+ self._ic_ncarray[k] = self.ic[jdx0]
724
+ k += 1
725
+ if self._ic_ramflag:
726
+ for jdx0 in range(self._ic_length_0):
727
+ self._ic_array[idx, jdx0] = self.ic[jdx0]
728
+ if self._sp_diskflag_writing:
729
+ k = 0
730
+ for jdx0 in range(self._sp_length_0):
731
+ for jdx1 in range(self._sp_length_1):
732
+ self._sp_ncarray[k] = self.sp[jdx0, jdx1]
733
+ k += 1
734
+ if self._sp_ramflag:
735
+ for jdx0 in range(self._sp_length_0):
736
+ for jdx1 in range(self._sp_length_1):
737
+ self._sp_array[idx, jdx0, jdx1] = self.sp[jdx0, jdx1]
738
+ if self._wc_diskflag_writing:
739
+ k = 0
740
+ for jdx0 in range(self._wc_length_0):
741
+ for jdx1 in range(self._wc_length_1):
742
+ self._wc_ncarray[k] = self.wc[jdx0, jdx1]
743
+ k += 1
744
+ if self._wc_ramflag:
745
+ for jdx0 in range(self._wc_length_0):
746
+ for jdx1 in range(self._wc_length_1):
747
+ self._wc_array[idx, jdx0, jdx1] = self.wc[jdx0, jdx1]
748
+ if self._sm_diskflag_writing:
749
+ k = 0
750
+ for jdx0 in range(self._sm_length_0):
751
+ self._sm_ncarray[k] = self.sm[jdx0]
752
+ k += 1
753
+ if self._sm_ramflag:
754
+ for jdx0 in range(self._sm_length_0):
755
+ self._sm_array[idx, jdx0] = self.sm[jdx0]
756
+ if self._suz_diskflag_writing:
757
+ k = 0
758
+ for jdx0 in range(self._suz_length_0):
759
+ self._suz_ncarray[k] = self.suz[jdx0]
760
+ k += 1
761
+ if self._suz_ramflag:
762
+ for jdx0 in range(self._suz_length_0):
763
+ self._suz_array[idx, jdx0] = self.suz[jdx0]
764
+ if self._sg1_diskflag_writing:
765
+ k = 0
766
+ for jdx0 in range(self._sg1_length_0):
767
+ self._sg1_ncarray[k] = self.sg1[jdx0]
768
+ k += 1
769
+ if self._sg1_ramflag:
770
+ for jdx0 in range(self._sg1_length_0):
771
+ self._sg1_array[idx, jdx0] = self.sg1[jdx0]
772
+ if self._sg2_diskflag_writing:
773
+ self._sg2_ncarray[0] = self.sg2
774
+ if self._sg2_ramflag:
775
+ self._sg2_array[idx] = self.sg2
776
+ if self._sg3_diskflag_writing:
777
+ self._sg3_ncarray[0] = self.sg3
778
+ if self._sg3_ramflag:
779
+ self._sg3_array[idx] = self.sg3
780
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
781
+ if name == "sg2":
782
+ self._sg2_outputpointer = value.p_value
783
+ if name == "sg3":
784
+ self._sg3_outputpointer = value.p_value
785
+ cpdef inline void update_outputs(self) noexcept nogil:
786
+ if self._sg2_outputflag:
787
+ self._sg2_outputpointer[0] = self.sg2
788
+ if self._sg3_outputflag:
789
+ self._sg3_outputpointer[0] = self.sg3
790
+ @cython.final
791
+ cdef class AideSequences:
792
+ pass
793
+ @cython.final
794
+ cdef class OutletSequences:
795
+ cpdef inline set_pointer0d(self, str name, pointerutils.Double value):
796
+ cdef pointerutils.PDouble pointer = pointerutils.PDouble(value)
797
+ if name == "q":
798
+ self.q = pointer.p_value
799
+ cpdef get_value(self, str name):
800
+ cdef numpy.int64_t idx
801
+ if name == "q":
802
+ return self.q[0]
803
+ cpdef set_value(self, str name, value):
804
+ if name == "q":
805
+ self.q[0] = value
806
+ @cython.final
807
+ cdef class Model(masterinterface.MasterInterface):
808
+ def __init__(self):
809
+ super().__init__()
810
+ self.aetmodel = None
811
+ self.aetmodel_is_mainmodel = False
812
+ self.rconcmodel = None
813
+ self.rconcmodel_is_mainmodel = False
814
+ def get_aetmodel(self) -> masterinterface.MasterInterface | None:
815
+ return self.aetmodel
816
+ def set_aetmodel(self, aetmodel: masterinterface.MasterInterface | None) -> None:
817
+ self.aetmodel = aetmodel
818
+ def get_rconcmodel(self) -> masterinterface.MasterInterface | None:
819
+ return self.rconcmodel
820
+ def set_rconcmodel(self, rconcmodel: masterinterface.MasterInterface | None) -> None:
821
+ self.rconcmodel = rconcmodel
822
+ cpdef inline void simulate(self, numpy.int64_t idx) noexcept nogil:
823
+ self.idx_sim = idx
824
+ self.reset_reuseflags()
825
+ self.load_data(idx)
826
+ self.run()
827
+ self.new2old()
828
+ self.update_outlets()
829
+ self.update_outputs()
830
+ cpdef void reset_reuseflags(self) noexcept nogil:
831
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
832
+ self.aetmodel.reset_reuseflags()
833
+ if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
834
+ self.rconcmodel.reset_reuseflags()
835
+ cpdef void load_data(self, numpy.int64_t idx) noexcept nogil:
836
+ self.idx_sim = idx
837
+ self.sequences.inputs.load_data(idx)
838
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
839
+ self.aetmodel.load_data(idx)
840
+ if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
841
+ self.rconcmodel.load_data(idx)
842
+ cpdef void save_data(self, numpy.int64_t idx) noexcept nogil:
843
+ self.idx_sim = idx
844
+ self.sequences.inputs.save_data(idx)
845
+ self.sequences.factors.save_data(idx)
846
+ self.sequences.fluxes.save_data(idx)
847
+ self.sequences.states.save_data(idx)
848
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
849
+ self.aetmodel.save_data(idx)
850
+ if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
851
+ self.rconcmodel.save_data(idx)
852
+ cpdef void new2old(self) noexcept nogil:
853
+ cdef numpy.int64_t jdx0, jdx1
854
+ for jdx0 in range(self.sequences.states._ic_length_0):
855
+ self.sequences.old_states.ic[jdx0] = self.sequences.new_states.ic[jdx0]
856
+ for jdx0 in range(self.sequences.states._sp_length_0):
857
+ for jdx1 in range(self.sequences.states._sp_length_1):
858
+ self.sequences.old_states.sp[jdx0,jdx1] = self.sequences.new_states.sp[jdx0,jdx1]
859
+ for jdx0 in range(self.sequences.states._wc_length_0):
860
+ for jdx1 in range(self.sequences.states._wc_length_1):
861
+ self.sequences.old_states.wc[jdx0,jdx1] = self.sequences.new_states.wc[jdx0,jdx1]
862
+ for jdx0 in range(self.sequences.states._sm_length_0):
863
+ self.sequences.old_states.sm[jdx0] = self.sequences.new_states.sm[jdx0]
864
+ for jdx0 in range(self.sequences.states._suz_length_0):
865
+ self.sequences.old_states.suz[jdx0] = self.sequences.new_states.suz[jdx0]
866
+ for jdx0 in range(self.sequences.states._sg1_length_0):
867
+ self.sequences.old_states.sg1[jdx0] = self.sequences.new_states.sg1[jdx0]
868
+ self.sequences.old_states.sg2 = self.sequences.new_states.sg2
869
+ self.sequences.old_states.sg3 = self.sequences.new_states.sg3
870
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
871
+ self.aetmodel.new2old()
872
+ if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
873
+ self.rconcmodel.new2old()
874
+ cpdef inline void run(self) noexcept nogil:
875
+ self.calc_tc_v1()
876
+ self.calc_fracrain_v1()
877
+ self.calc_rfc_sfc_v1()
878
+ self.calc_pc_v1()
879
+ self.calc_tf_ic_v1()
880
+ self.calc_sp_wc_v1()
881
+ self.calc_spl_wcl_sp_wc_v1()
882
+ self.calc_spg_wcg_sp_wc_v1()
883
+ self.calc_cfact_v1()
884
+ self.calc_melt_sp_wc_v1()
885
+ self.calc_refr_sp_wc_v1()
886
+ self.calc_in_wc_v1()
887
+ self.calc_swe_v1()
888
+ self.calc_sr_v1()
889
+ self.calc_gact_v1()
890
+ self.calc_glmelt_in_v1()
891
+ self.calc_ei_ic_v1()
892
+ self.calc_r_sm_v1()
893
+ self.calc_ea_sm_v1()
894
+ self.calc_suz_v1()
895
+ self.calc_dp_suz_v1()
896
+ self.calc_rs_ri_suz_v1()
897
+ self.calc_gr1_v1()
898
+ self.calc_rg1_sg1_v1()
899
+ self.calc_gr2_gr3_v1()
900
+ self.calc_rg2_sg2_v1()
901
+ self.calc_rg3_sg3_v1()
902
+ self.calc_el_sg2_sg3_v1()
903
+ self.calc_inrc_v2()
904
+ self.calc_outrc_v1()
905
+ self.calc_rt_v1()
906
+ self.calc_qt_v1()
907
+ cpdef inline void update_inlets(self) noexcept nogil:
908
+ pass
909
+ cpdef inline void update_outlets(self) noexcept nogil:
910
+ self.pass_q_v1()
911
+ cpdef inline void update_receivers(self, numpy.int64_t idx) noexcept nogil:
912
+ self.idx_sim = idx
913
+ pass
914
+ cpdef inline void update_senders(self, numpy.int64_t idx) noexcept nogil:
915
+ self.idx_sim = idx
916
+ pass
917
+ cpdef inline void update_outputs(self) noexcept nogil:
918
+ self.sequences.fluxes.update_outputs()
919
+ self.sequences.states.update_outputs()
920
+ cpdef inline void calc_tc_v1(self) noexcept nogil:
921
+ cdef numpy.int64_t k
922
+ for k in range(self.parameters.control.nmbzones):
923
+ 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)
924
+ cpdef inline void calc_fracrain_v1(self) noexcept nogil:
925
+ cdef double d_dt
926
+ cdef numpy.int64_t k
927
+ for k in range(self.parameters.control.nmbzones):
928
+ d_dt = self.parameters.control.ttint[k] / 2.0
929
+ if self.sequences.factors.tc[k] >= (self.parameters.control.tt[k] + d_dt):
930
+ self.sequences.factors.fracrain[k] = 1.0
931
+ elif self.sequences.factors.tc[k] <= (self.parameters.control.tt[k] - d_dt):
932
+ self.sequences.factors.fracrain[k] = 0.0
933
+ else:
934
+ self.sequences.factors.fracrain[k] = (self.sequences.factors.tc[k] - (self.parameters.control.tt[k] - d_dt)) / self.parameters.control.ttint[k]
935
+ cpdef inline void calc_rfc_sfc_v1(self) noexcept nogil:
936
+ cdef numpy.int64_t k
937
+ for k in range(self.parameters.control.nmbzones):
938
+ self.sequences.factors.rfc[k] = self.sequences.factors.fracrain[k] * self.parameters.control.rfcf[k]
939
+ self.sequences.factors.sfc[k] = (1.0 - self.sequences.factors.fracrain[k]) * self.parameters.control.sfcf[k]
940
+ cpdef inline void calc_pc_v1(self) noexcept nogil:
941
+ cdef numpy.int64_t k
942
+ for k in range(self.parameters.control.nmbzones):
943
+ 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))
944
+ if self.sequences.fluxes.pc[k] <= 0.0:
945
+ self.sequences.fluxes.pc[k] = 0.0
946
+ else:
947
+ 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]))
948
+ cpdef inline void calc_tf_ic_v1(self) noexcept nogil:
949
+ cdef numpy.int64_t k
950
+ for k in range(self.parameters.control.nmbzones):
951
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
952
+ self.sequences.fluxes.tf[k] = max(self.sequences.fluxes.pc[k] - (self.parameters.control.icmax[k] - self.sequences.states.ic[k]), 0.0)
953
+ self.sequences.states.ic[k] = self.sequences.states.ic[k] + (self.sequences.fluxes.pc[k] - self.sequences.fluxes.tf[k])
954
+ else:
955
+ self.sequences.fluxes.tf[k] = self.sequences.fluxes.pc[k]
956
+ self.sequences.states.ic[k] = 0.0
957
+ cpdef inline void calc_sp_wc_v1(self) noexcept nogil:
958
+ cdef numpy.int64_t c
959
+ cdef double d_snow
960
+ cdef double d_rain
961
+ cdef double d_denom
962
+ cdef numpy.int64_t k
963
+ for k in range(self.parameters.control.nmbzones):
964
+ if self.parameters.control.zonetype[k] != ILAKE:
965
+ d_denom = self.sequences.factors.rfc[k] + self.sequences.factors.sfc[k]
966
+ if d_denom > 0.0:
967
+ d_rain = self.sequences.fluxes.tf[k] * self.sequences.factors.rfc[k] / d_denom
968
+ d_snow = self.sequences.fluxes.tf[k] * self.sequences.factors.sfc[k] / d_denom
969
+ for c in range(self.parameters.control.sclass):
970
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.parameters.control.sfdist[c] * d_rain)
971
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.parameters.control.sfdist[c] * d_snow)
972
+ else:
973
+ for c in range(self.parameters.control.sclass):
974
+ self.sequences.states.wc[c, k] = 0.0
975
+ self.sequences.states.sp[c, k] = 0.0
976
+ cpdef inline void calc_spl_wcl_sp_wc_v1(self) noexcept nogil:
977
+ cdef double d_excess_wc
978
+ cdef double d_excess_sp
979
+ cdef double d_excess
980
+ cdef double d_snow
981
+ cdef numpy.int64_t c
982
+ cdef numpy.int64_t k
983
+ for k in range(self.parameters.control.nmbzones):
984
+ self.sequences.fluxes.spl[k] = 0.0
985
+ self.sequences.fluxes.wcl[k] = 0.0
986
+ if self.parameters.control.zonetype[k] == ILAKE:
987
+ for c in range(self.parameters.control.sclass):
988
+ self.sequences.states.sp[c, k] = 0.0
989
+ self.sequences.states.wc[c, k] = 0.0
990
+ elif not isinf(self.parameters.control.smax[k]):
991
+ for c in range(self.parameters.control.sclass):
992
+ d_snow = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
993
+ d_excess = d_snow - self.parameters.control.smax[k]
994
+ if d_excess > 0.0:
995
+ d_excess_sp = d_excess * self.sequences.states.sp[c, k] / d_snow
996
+ d_excess_wc = d_excess * self.sequences.states.wc[c, k] / d_snow
997
+ self.sequences.fluxes.spl[k] = self.sequences.fluxes.spl[k] + (d_excess_sp / self.parameters.control.sclass)
998
+ self.sequences.fluxes.wcl[k] = self.sequences.fluxes.wcl[k] + (d_excess_wc / self.parameters.control.sclass)
999
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (d_excess_sp)
1000
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (d_excess_wc)
1001
+ cpdef inline void calc_spg_wcg_sp_wc_v1(self) noexcept nogil:
1002
+ cdef double d_excess_liquid_land
1003
+ cdef double d_excess_frozen_land
1004
+ cdef double d_delta_wc_zone
1005
+ cdef double d_delta_sp_zone
1006
+ cdef double d_fraction_gain_class
1007
+ cdef double d_excess_liquid_zone_actual
1008
+ cdef double d_excess_frozen_zone_actual
1009
+ cdef double d_fraction_gain_zone
1010
+ cdef double d_gain_max_cum
1011
+ cdef double d_excess_total_zone
1012
+ cdef double d_excess_liquid_zone
1013
+ cdef double d_excess_frozen_zone
1014
+ cdef double d_excess_liquid_basin
1015
+ cdef double d_excess_frozen_basin
1016
+ cdef double d_factor_excess
1017
+ cdef double d_factor_gain
1018
+ cdef double d_fraction_gain
1019
+ cdef double d_gain_max
1020
+ cdef double d_gain_pot
1021
+ cdef double d_gain_total
1022
+ cdef double d_gain_liquid
1023
+ cdef double d_gain_frozen
1024
+ cdef double d_f
1025
+ cdef numpy.int64_t t
1026
+ cdef numpy.int64_t f
1027
+ cdef numpy.int64_t c
1028
+ cdef numpy.int64_t i
1029
+ for i in range(self.parameters.control.nmbzones):
1030
+ self.sequences.fluxes.spg[i] = 0.0
1031
+ self.sequences.fluxes.wcg[i] = 0.0
1032
+ self.sequences.aides.spe[i] = 0.0
1033
+ self.sequences.aides.wce[i] = 0.0
1034
+ if self.parameters.control.zonetype[i] == ILAKE:
1035
+ for c in range(self.parameters.control.sclass):
1036
+ self.sequences.states.sp[c, i] = 0.0
1037
+ self.sequences.states.wc[c, i] = 0.0
1038
+ for i in range(self.parameters.derived.srednumber):
1039
+ f, t = self.parameters.derived.sredorder[i, 0], self.parameters.derived.sredorder[i, 1]
1040
+ d_f = self.parameters.derived.zonearearatios[f, t] * self.parameters.control.sred[f, t]
1041
+ d_gain_frozen = d_f * (self.sequences.fluxes.spl[f] + self.sequences.aides.spe[f])
1042
+ d_gain_liquid = d_f * (self.sequences.fluxes.wcl[f] + self.sequences.aides.wce[f])
1043
+ d_gain_total = d_gain_frozen + d_gain_liquid
1044
+ for c in range(self.parameters.control.sclass):
1045
+ d_gain_pot = self.parameters.control.sfdist[c] * d_gain_total
1046
+ if d_gain_pot > 0.0:
1047
+ d_gain_max = self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t]
1048
+ d_fraction_gain = min(d_gain_max / d_gain_pot, 1.0)
1049
+ d_factor_gain = d_fraction_gain * self.parameters.control.sfdist[c]
1050
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_factor_gain * d_gain_frozen / self.parameters.control.sclass)
1051
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_factor_gain * d_gain_liquid / self.parameters.control.sclass)
1052
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_factor_gain * d_gain_frozen)
1053
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_factor_gain * d_gain_liquid)
1054
+ d_factor_excess = (1.0 - d_fraction_gain) * self.parameters.control.sfdist[c]
1055
+ self.sequences.aides.spe[t] = self.sequences.aides.spe[t] + (d_factor_excess * d_gain_frozen / self.parameters.control.sclass)
1056
+ self.sequences.aides.wce[t] = self.sequences.aides.wce[t] + (d_factor_excess * d_gain_liquid / self.parameters.control.sclass)
1057
+ d_excess_frozen_basin, d_excess_liquid_basin = 0.0, 0.0
1058
+ for i in range(self.parameters.control.nmbzones):
1059
+ if self.parameters.derived.sredend[i]:
1060
+ d_excess_frozen_basin = d_excess_frozen_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.spe[i] + self.sequences.fluxes.spl[i]))
1061
+ d_excess_liquid_basin = d_excess_liquid_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.wce[i] + self.sequences.fluxes.wcl[i]))
1062
+ if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
1063
+ return
1064
+ for i in range(self.parameters.control.nmbzones):
1065
+ t = self.parameters.derived.indiceszonez[i]
1066
+ if self.parameters.control.zonetype[t] == ILAKE:
1067
+ continue
1068
+ d_excess_frozen_zone = d_excess_frozen_basin / self.parameters.derived.relzoneareas[t]
1069
+ d_excess_liquid_zone = d_excess_liquid_basin / self.parameters.derived.relzoneareas[t]
1070
+ d_excess_total_zone = d_excess_frozen_zone + d_excess_liquid_zone
1071
+ d_gain_max_cum = 0.0
1072
+ for c in range(self.parameters.control.sclass):
1073
+ 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])
1074
+ if d_gain_max_cum <= 0.0:
1075
+ continue
1076
+ d_fraction_gain_zone = min( d_gain_max_cum / self.parameters.control.sclass / d_excess_total_zone, 1.0 )
1077
+ d_excess_frozen_zone_actual = d_fraction_gain_zone * d_excess_frozen_zone
1078
+ d_excess_liquid_zone_actual = d_fraction_gain_zone * d_excess_liquid_zone
1079
+ for c in range(self.parameters.control.sclass):
1080
+ 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
1081
+ d_delta_sp_zone = d_fraction_gain_class * d_excess_frozen_zone_actual
1082
+ d_delta_wc_zone = d_fraction_gain_class * d_excess_liquid_zone_actual
1083
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_delta_sp_zone)
1084
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_delta_wc_zone)
1085
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_delta_sp_zone * self.parameters.control.sclass)
1086
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_delta_wc_zone * self.parameters.control.sclass)
1087
+ d_excess_frozen_basin = d_excess_frozen_basin - (d_excess_frozen_zone_actual * self.parameters.derived.relzoneareas[t])
1088
+ d_excess_liquid_basin = d_excess_liquid_basin - (d_excess_liquid_zone_actual * self.parameters.derived.relzoneareas[t])
1089
+ if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
1090
+ return
1091
+ d_excess_frozen_land = d_excess_frozen_basin / self.parameters.derived.rellandarea
1092
+ d_excess_liquid_land = d_excess_liquid_basin / self.parameters.derived.rellandarea
1093
+ for t in range(self.parameters.control.nmbzones):
1094
+ if self.parameters.control.zonetype[t] != ILAKE:
1095
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_excess_frozen_land)
1096
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_excess_liquid_land)
1097
+ for c in range(self.parameters.control.sclass):
1098
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_excess_frozen_land)
1099
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_excess_liquid_land)
1100
+ return
1101
+ cpdef inline void calc_cfact_v1(self) noexcept nogil:
1102
+ cdef numpy.int64_t k
1103
+ cdef double d_factor
1104
+ d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
1105
+ for k in range(self.parameters.control.nmbzones):
1106
+ if self.parameters.control.zonetype[k] != ILAKE:
1107
+ self.sequences.factors.cfact[k] = max(self.parameters.control.cfmax[k] + d_factor * self.parameters.control.cfvar[k], 0.0)
1108
+ else:
1109
+ self.sequences.factors.cfact[k] = 0.0
1110
+ cpdef inline void calc_melt_sp_wc_v1(self) noexcept nogil:
1111
+ cdef numpy.int64_t c
1112
+ cdef double d_potmelt
1113
+ cdef numpy.int64_t k
1114
+ for k in range(self.parameters.control.nmbzones):
1115
+ if self.parameters.control.zonetype[k] != ILAKE:
1116
+ if self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]:
1117
+ d_potmelt = self.sequences.factors.cfact[k] * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
1118
+ for c in range(self.parameters.control.sclass):
1119
+ self.sequences.fluxes.melt[c, k] = min(d_potmelt, self.sequences.states.sp[c, k])
1120
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (self.sequences.fluxes.melt[c, k])
1121
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.sequences.fluxes.melt[c, k])
1122
+ else:
1123
+ for c in range(self.parameters.control.sclass):
1124
+ self.sequences.fluxes.melt[c, k] = 0.0
1125
+ else:
1126
+ for c in range(self.parameters.control.sclass):
1127
+ self.sequences.fluxes.melt[c, k] = 0.0
1128
+ self.sequences.states.wc[c, k] = 0.0
1129
+ self.sequences.states.sp[c, k] = 0.0
1130
+ cpdef inline void calc_refr_sp_wc_v1(self) noexcept nogil:
1131
+ cdef numpy.int64_t c
1132
+ cdef double d_potrefr
1133
+ cdef numpy.int64_t k
1134
+ for k in range(self.parameters.control.nmbzones):
1135
+ if self.parameters.control.zonetype[k] != ILAKE:
1136
+ if self.sequences.factors.tc[k] < self.parameters.derived.ttm[k]:
1137
+ d_potrefr = self.parameters.control.cfr[k] * self.parameters.control.cfmax[k] * (self.parameters.derived.ttm[k] - self.sequences.factors.tc[k])
1138
+ for c in range(self.parameters.control.sclass):
1139
+ self.sequences.fluxes.refr[c, k] = min(d_potrefr, self.sequences.states.wc[c, k])
1140
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.sequences.fluxes.refr[c, k])
1141
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (self.sequences.fluxes.refr[c, k])
1142
+ else:
1143
+ for c in range(self.parameters.control.sclass):
1144
+ self.sequences.fluxes.refr[c, k] = 0.0
1145
+ else:
1146
+ for c in range(self.parameters.control.sclass):
1147
+ self.sequences.fluxes.refr[c, k] = 0.0
1148
+ self.sequences.states.wc[c, k] = 0.0
1149
+ self.sequences.states.sp[c, k] = 0.0
1150
+ cpdef inline void calc_in_wc_v1(self) noexcept nogil:
1151
+ cdef double d_wc_old
1152
+ cdef numpy.int64_t c
1153
+ cdef numpy.int64_t k
1154
+ for k in range(self.parameters.control.nmbzones):
1155
+ self.sequences.fluxes.in_[k] = 0.0
1156
+ if self.parameters.control.zonetype[k] != ILAKE:
1157
+ for c in range(self.parameters.control.sclass):
1158
+ d_wc_old = self.sequences.states.wc[c, k]
1159
+ self.sequences.states.wc[c, k] = min(d_wc_old, self.parameters.control.whc[k] * self.sequences.states.sp[c, k])
1160
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + ((d_wc_old - self.sequences.states.wc[c, k]) / self.parameters.control.sclass)
1161
+ else:
1162
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.tf[k]
1163
+ for c in range(self.parameters.control.sclass):
1164
+ self.sequences.states.wc[c, k] = 0.0
1165
+ cpdef inline void calc_swe_v1(self) noexcept nogil:
1166
+ cdef numpy.int64_t c
1167
+ cdef numpy.int64_t k
1168
+ for k in range(self.parameters.control.nmbzones):
1169
+ if self.parameters.control.zonetype[k] != ILAKE:
1170
+ for c in range(self.parameters.control.sclass):
1171
+ self.sequences.factors.swe[c, k] = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
1172
+ else:
1173
+ for c in range(self.parameters.control.sclass):
1174
+ self.sequences.factors.swe[c, k] = 0.0
1175
+ cpdef inline void calc_sr_v1(self) noexcept nogil:
1176
+ cdef numpy.int64_t k
1177
+ for k in range(self.parameters.control.nmbzones):
1178
+ if self.parameters.control.zonetype[k] == SEALED:
1179
+ self.sequences.fluxes.sr[k] = self.sequences.fluxes.in_[k]
1180
+ else:
1181
+ self.sequences.fluxes.sr[k] = 0.0
1182
+ cpdef inline void calc_gact_v1(self) noexcept nogil:
1183
+ cdef numpy.int64_t k
1184
+ cdef double d_factor
1185
+ d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
1186
+ for k in range(self.parameters.control.nmbzones):
1187
+ if self.parameters.control.zonetype[k] == GLACIER:
1188
+ self.sequences.factors.gact[k] = max(self.parameters.control.gmelt[k] + d_factor * self.parameters.control.gvar[k], 0.0)
1189
+ else:
1190
+ self.sequences.factors.gact[k] = 0.0
1191
+ cpdef inline void calc_glmelt_in_v1(self) noexcept nogil:
1192
+ cdef numpy.int64_t c
1193
+ cdef double d_glmeltpot
1194
+ cdef numpy.int64_t k
1195
+ for k in range(self.parameters.control.nmbzones):
1196
+ self.sequences.fluxes.glmelt[k] = 0.0
1197
+ if (self.parameters.control.zonetype[k] == GLACIER) and (self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]):
1198
+ d_glmeltpot = self.sequences.factors.gact[k] / self.parameters.control.sclass * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
1199
+ for c in range(self.parameters.control.sclass):
1200
+ if self.sequences.states.sp[c, k] <= 0.0:
1201
+ self.sequences.fluxes.glmelt[k] = self.sequences.fluxes.glmelt[k] + (d_glmeltpot)
1202
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + (d_glmeltpot)
1203
+ cpdef inline void calc_ei_ic_v1(self) noexcept nogil:
1204
+ if self.aetmodel_typeid == 1:
1205
+ self.calc_ei_ic_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1206
+ cpdef inline void calc_r_sm_v1(self) noexcept nogil:
1207
+ cdef numpy.int64_t k
1208
+ for k in range(self.parameters.control.nmbzones):
1209
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1210
+ if self.parameters.control.fc[k] > 0.0:
1211
+ 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]
1212
+ 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])
1213
+ else:
1214
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
1215
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] + (self.sequences.fluxes.in_[k] - self.sequences.fluxes.r[k])
1216
+ else:
1217
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
1218
+ self.sequences.states.sm[k] = 0.0
1219
+ cpdef inline void calc_ea_sm_v1(self) noexcept nogil:
1220
+ if self.aetmodel_typeid == 1:
1221
+ self.calc_ea_sm_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1222
+ cpdef inline void calc_suz_v1(self) noexcept nogil:
1223
+ cdef numpy.int64_t k
1224
+ for k in range(self.parameters.control.nmbzones):
1225
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1226
+ self.sequences.states.suz[k] = self.sequences.states.suz[k] + (self.sequences.fluxes.r[k])
1227
+ else:
1228
+ self.sequences.states.suz[k] = 0.0
1229
+ cpdef inline void calc_dp_suz_v1(self) noexcept nogil:
1230
+ cdef numpy.int64_t k
1231
+ for k in range(self.parameters.control.nmbzones):
1232
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1233
+ self.sequences.fluxes.dp[k] = min(self.sequences.states.suz[k], self.parameters.control.percmax)
1234
+ self.sequences.states.suz[k] = self.sequences.states.suz[k] - (self.sequences.fluxes.dp[k])
1235
+ else:
1236
+ self.sequences.fluxes.dp[k] = 0.0
1237
+ self.sequences.states.suz[k] = 0.0
1238
+ cpdef inline void calc_rs_ri_suz_v1(self) noexcept nogil:
1239
+ cdef double d_f
1240
+ cdef numpy.int64_t k
1241
+ for k in range(self.parameters.control.nmbzones):
1242
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1243
+ if self.sequences.states.suz[k] > self.parameters.control.sgr[k]:
1244
+ self.sequences.fluxes.rs[k] = (self.sequences.states.suz[k] - self.parameters.control.sgr[k]) * (1.0 - self.parameters.derived.w0[k])
1245
+ else:
1246
+ self.sequences.fluxes.rs[k] = 0.0
1247
+ self.sequences.fluxes.ri[k] = self.sequences.states.suz[k] * (1.0 - self.parameters.derived.w1[k])
1248
+ self.sequences.states.suz[k] = self.sequences.states.suz[k] - (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k])
1249
+ if self.sequences.states.suz[k] < 0.0:
1250
+ d_f = 1.0 - self.sequences.states.suz[k] / (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k])
1251
+ self.sequences.fluxes.rs[k] = self.sequences.fluxes.rs[k] * (d_f)
1252
+ self.sequences.fluxes.ri[k] = self.sequences.fluxes.ri[k] * (d_f)
1253
+ self.sequences.states.suz[k] = 0.0
1254
+ else:
1255
+ self.sequences.states.suz[k] = 0.0
1256
+ self.sequences.fluxes.rs[k] = 0.0
1257
+ self.sequences.fluxes.ri[k] = 0.0
1258
+ cpdef inline void calc_gr1_v1(self) noexcept nogil:
1259
+ cdef numpy.int64_t k
1260
+ for k in range(self.parameters.control.nmbzones):
1261
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1262
+ self.sequences.fluxes.gr1[k] = min(self.sequences.fluxes.dp[k], (self.parameters.control.sg1max[k] - self.sequences.states.sg1[k]) / self.parameters.control.k2[k])
1263
+ self.sequences.fluxes.gr1[k] = self.sequences.fluxes.gr1[k] - (max(self.sequences.states.sg1[k] + self.sequences.fluxes.gr1[k] - self.parameters.control.sg1max[k], 0.0))
1264
+ else:
1265
+ self.sequences.states.sg1[k] = 0.0
1266
+ self.sequences.fluxes.gr1[k] = 0.0
1267
+ cpdef inline void calc_rg1_sg1_v1(self) noexcept nogil:
1268
+ cdef double d_sg1
1269
+ cdef numpy.int64_t k
1270
+ for k in range(self.parameters.control.nmbzones):
1271
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1272
+ d_sg1 = self.sequences.states.sg1[k]
1273
+ self.sequences.states.sg1[k] = ( self.parameters.derived.w2[k] * d_sg1 + (1.0 - self.parameters.derived.w2[k]) * self.parameters.control.k2[k] * self.sequences.fluxes.gr1[k] )
1274
+ self.sequences.fluxes.rg1[k] = d_sg1 + self.sequences.fluxes.gr1[k] - self.sequences.states.sg1[k]
1275
+ else:
1276
+ self.sequences.states.sg1[k] = 0.0
1277
+ self.sequences.fluxes.rg1[k] = 0.0
1278
+ cpdef inline void calc_gr2_gr3_v1(self) noexcept nogil:
1279
+ cdef double d_total
1280
+ cdef double d_weight
1281
+ cdef numpy.int64_t k
1282
+ self.sequences.fluxes.gr2 = 0.0
1283
+ self.sequences.fluxes.gr3 = 0.0
1284
+ for k in range(self.parameters.control.nmbzones):
1285
+ if self.parameters.control.zonetype[k] == SEALED:
1286
+ continue
1287
+ d_weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea
1288
+ if self.parameters.control.zonetype[k] == ILAKE:
1289
+ d_total = d_weight * self.sequences.fluxes.pc[k]
1290
+ else:
1291
+ d_total = d_weight * (self.sequences.fluxes.dp[k] - self.sequences.fluxes.gr1[k])
1292
+ self.sequences.fluxes.gr2 = self.sequences.fluxes.gr2 + (self.parameters.fixed.fsg * d_total)
1293
+ self.sequences.fluxes.gr3 = self.sequences.fluxes.gr3 + ((1.0 - self.parameters.fixed.fsg) * d_total)
1294
+ cpdef inline void calc_rg2_sg2_v1(self) noexcept nogil:
1295
+ cdef double d_add
1296
+ cdef double d_w3
1297
+ cdef double d_k3
1298
+ cdef double d_gr2
1299
+ cdef double d_sg2
1300
+ d_sg2 = self.sequences.states.sg2
1301
+ d_gr2 = self.sequences.fluxes.gr2
1302
+ d_k3 = self.parameters.control.k3
1303
+ d_w3 = self.parameters.derived.w3
1304
+ if d_sg2 < 0.0 < d_gr2:
1305
+ d_add = min(-self.sequences.states.sg2, d_gr2)
1306
+ d_k3 = d_k3 * (d_gr2 / d_add)
1307
+ d_w3 = exp(-1.0 / d_k3)
1308
+ d_sg2 = d_sg2 + (d_add)
1309
+ d_gr2 = d_gr2 - (d_add)
1310
+ if d_sg2 >= 0.0:
1311
+ self.sequences.states.sg2 = d_w3 * d_sg2 + (1.0 - d_w3) * d_k3 * d_gr2
1312
+ self.sequences.fluxes.rg2 = d_sg2 + d_gr2 - self.sequences.states.sg2
1313
+ else:
1314
+ self.sequences.states.sg2 = d_sg2
1315
+ self.sequences.fluxes.rg2 = 0.0
1316
+ cpdef inline void calc_rg3_sg3_v1(self) noexcept nogil:
1317
+ cdef double d_add
1318
+ cdef double d_w4
1319
+ cdef double d_k4
1320
+ cdef double d_gr3
1321
+ cdef double d_sg3
1322
+ d_sg3 = self.sequences.states.sg3
1323
+ d_gr3 = self.sequences.fluxes.gr3
1324
+ d_k4 = self.parameters.derived.k4
1325
+ d_w4 = self.parameters.derived.w4
1326
+ if d_sg3 < 0.0 < d_gr3:
1327
+ d_add = min(-self.sequences.states.sg3, d_gr3)
1328
+ d_k4 = d_k4 * (d_gr3 / d_add)
1329
+ d_w4 = exp(-1.0 / d_k4)
1330
+ d_sg3 = d_sg3 + (d_add)
1331
+ d_gr3 = d_gr3 - (d_add)
1332
+ if d_sg3 >= 0.0:
1333
+ self.sequences.states.sg3 = d_w4 * d_sg3 + (1.0 - d_w4) * d_k4 * d_gr3
1334
+ self.sequences.fluxes.rg3 = d_sg3 + d_gr3 - self.sequences.states.sg3
1335
+ else:
1336
+ self.sequences.states.sg3 = d_sg3
1337
+ self.sequences.fluxes.rg3 = 0.0
1338
+ cpdef inline void calc_el_sg2_sg3_v1(self) noexcept nogil:
1339
+ if self.aetmodel_typeid == 1:
1340
+ self.calc_el_sg2_sg3_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1341
+ cpdef inline void calc_inrc_v2(self) noexcept nogil:
1342
+ cdef numpy.int64_t k
1343
+ self.sequences.fluxes.inrc = self.parameters.derived.rellowerzonearea * (self.sequences.fluxes.rg2 + self.sequences.fluxes.rg3)
1344
+ for k in range(self.parameters.control.nmbzones):
1345
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1346
+ self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (self.parameters.derived.relzoneareas[k] * (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k] + self.sequences.fluxes.rg1[k]))
1347
+ elif self.parameters.control.zonetype[k] == SEALED:
1348
+ self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (self.parameters.derived.relzoneareas[k] * self.sequences.fluxes.r[k])
1349
+ cpdef inline void calc_outrc_v1(self) noexcept nogil:
1350
+ if self.rconcmodel is None:
1351
+ self.sequences.fluxes.outrc = self.sequences.fluxes.inrc
1352
+ elif self.rconcmodel_typeid == 1:
1353
+ self.calc_outrc_rconcmodel_v1( (<masterinterface.MasterInterface>self.rconcmodel) )
1354
+ cpdef inline void calc_rt_v1(self) noexcept nogil:
1355
+ self.sequences.fluxes.rt = self.sequences.fluxes.outrc
1356
+ cpdef inline void calc_qt_v1(self) noexcept nogil:
1357
+ self.sequences.fluxes.qt = self.parameters.derived.qfactor * self.sequences.fluxes.rt
1358
+ cpdef double get_temperature_v1(self, numpy.int64_t s) noexcept nogil:
1359
+ return self.sequences.factors.tc[s]
1360
+ cpdef double get_meantemperature_v1(self) noexcept nogil:
1361
+ return self.sequences.inputs.t
1362
+ cpdef double get_precipitation_v1(self, numpy.int64_t s) noexcept nogil:
1363
+ return self.sequences.fluxes.pc[s]
1364
+ cpdef double get_interceptedwater_v1(self, numpy.int64_t k) noexcept nogil:
1365
+ return self.sequences.states.ic[k]
1366
+ cpdef double get_soilwater_v1(self, numpy.int64_t k) noexcept nogil:
1367
+ return self.sequences.states.sm[k]
1368
+ cpdef double get_snowcover_v1(self, numpy.int64_t k) noexcept nogil:
1369
+ cdef numpy.int64_t c
1370
+ cdef double snowcovered
1371
+ snowcovered = 0.0
1372
+ for c in range(self.parameters.control.sclass):
1373
+ snowcovered = snowcovered + (self.sequences.states.sp[c, k] > 0.0)
1374
+ return snowcovered / self.parameters.control.sclass
1375
+ cpdef inline void calc_ei_ic_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1376
+ cdef numpy.int64_t k
1377
+ submodel.determine_interceptionevaporation()
1378
+ for k in range(self.parameters.control.nmbzones):
1379
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
1380
+ self.sequences.fluxes.ei[k] = min(submodel.get_interceptionevaporation(k), self.sequences.states.ic[k])
1381
+ self.sequences.states.ic[k] = self.sequences.states.ic[k] - (self.sequences.fluxes.ei[k])
1382
+ else:
1383
+ self.sequences.fluxes.ei[k] = 0.0
1384
+ self.sequences.states.ic[k] = 0.0
1385
+ cpdef inline void calc_ea_sm_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1386
+ cdef numpy.int64_t k
1387
+ submodel.determine_soilevapotranspiration()
1388
+ for k in range(self.parameters.control.nmbzones):
1389
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1390
+ self.sequences.fluxes.ea[k] = min(submodel.get_soilevapotranspiration(k), self.sequences.states.sm[k])
1391
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] - (self.sequences.fluxes.ea[k])
1392
+ if self.sequences.states.sm[k] > self.parameters.control.fc[k]:
1393
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.r[k] + (self.sequences.states.sm[k] - self.parameters.control.fc[k])
1394
+ self.sequences.states.sm[k] = self.parameters.control.fc[k]
1395
+ else:
1396
+ self.sequences.fluxes.ea[k] = 0.0
1397
+ self.sequences.states.sm[k] = 0.0
1398
+ cpdef inline void calc_el_sg2_sg3_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1399
+ cdef double weight
1400
+ cdef numpy.int64_t k
1401
+ submodel.determine_waterevaporation()
1402
+ for k in range(self.parameters.control.nmbzones):
1403
+ if self.parameters.control.zonetype[k] == ILAKE:
1404
+ self.sequences.fluxes.el[k] = submodel.get_waterevaporation(k)
1405
+ weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea
1406
+ self.sequences.states.sg2 = self.sequences.states.sg2 - (self.parameters.fixed.fsg * weight * self.sequences.fluxes.el[k])
1407
+ self.sequences.states.sg3 = self.sequences.states.sg3 - ((1.0 - self.parameters.fixed.fsg) * weight * self.sequences.fluxes.el[k])
1408
+ else:
1409
+ self.sequences.fluxes.el[k] = 0.0
1410
+ cpdef inline void calc_outrc_rconcmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1411
+ submodel.set_inflow(self.sequences.fluxes.inrc)
1412
+ submodel.determine_outflow()
1413
+ self.sequences.fluxes.outrc = submodel.get_outflow()
1414
+ cpdef inline void pass_q_v1(self) noexcept nogil:
1415
+ self.sequences.outlets.q[0] = self.sequences.outlets.q[0] + (self.sequences.fluxes.qt)
1416
+ cpdef inline void calc_tc(self) noexcept nogil:
1417
+ cdef numpy.int64_t k
1418
+ for k in range(self.parameters.control.nmbzones):
1419
+ 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)
1420
+ cpdef inline void calc_fracrain(self) noexcept nogil:
1421
+ cdef double d_dt
1422
+ cdef numpy.int64_t k
1423
+ for k in range(self.parameters.control.nmbzones):
1424
+ d_dt = self.parameters.control.ttint[k] / 2.0
1425
+ if self.sequences.factors.tc[k] >= (self.parameters.control.tt[k] + d_dt):
1426
+ self.sequences.factors.fracrain[k] = 1.0
1427
+ elif self.sequences.factors.tc[k] <= (self.parameters.control.tt[k] - d_dt):
1428
+ self.sequences.factors.fracrain[k] = 0.0
1429
+ else:
1430
+ self.sequences.factors.fracrain[k] = (self.sequences.factors.tc[k] - (self.parameters.control.tt[k] - d_dt)) / self.parameters.control.ttint[k]
1431
+ cpdef inline void calc_rfc_sfc(self) noexcept nogil:
1432
+ cdef numpy.int64_t k
1433
+ for k in range(self.parameters.control.nmbzones):
1434
+ self.sequences.factors.rfc[k] = self.sequences.factors.fracrain[k] * self.parameters.control.rfcf[k]
1435
+ self.sequences.factors.sfc[k] = (1.0 - self.sequences.factors.fracrain[k]) * self.parameters.control.sfcf[k]
1436
+ cpdef inline void calc_pc(self) noexcept nogil:
1437
+ cdef numpy.int64_t k
1438
+ for k in range(self.parameters.control.nmbzones):
1439
+ 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))
1440
+ if self.sequences.fluxes.pc[k] <= 0.0:
1441
+ self.sequences.fluxes.pc[k] = 0.0
1442
+ else:
1443
+ 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]))
1444
+ cpdef inline void calc_tf_ic(self) noexcept nogil:
1445
+ cdef numpy.int64_t k
1446
+ for k in range(self.parameters.control.nmbzones):
1447
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
1448
+ self.sequences.fluxes.tf[k] = max(self.sequences.fluxes.pc[k] - (self.parameters.control.icmax[k] - self.sequences.states.ic[k]), 0.0)
1449
+ self.sequences.states.ic[k] = self.sequences.states.ic[k] + (self.sequences.fluxes.pc[k] - self.sequences.fluxes.tf[k])
1450
+ else:
1451
+ self.sequences.fluxes.tf[k] = self.sequences.fluxes.pc[k]
1452
+ self.sequences.states.ic[k] = 0.0
1453
+ cpdef inline void calc_sp_wc(self) noexcept nogil:
1454
+ cdef numpy.int64_t c
1455
+ cdef double d_snow
1456
+ cdef double d_rain
1457
+ cdef double d_denom
1458
+ cdef numpy.int64_t k
1459
+ for k in range(self.parameters.control.nmbzones):
1460
+ if self.parameters.control.zonetype[k] != ILAKE:
1461
+ d_denom = self.sequences.factors.rfc[k] + self.sequences.factors.sfc[k]
1462
+ if d_denom > 0.0:
1463
+ d_rain = self.sequences.fluxes.tf[k] * self.sequences.factors.rfc[k] / d_denom
1464
+ d_snow = self.sequences.fluxes.tf[k] * self.sequences.factors.sfc[k] / d_denom
1465
+ for c in range(self.parameters.control.sclass):
1466
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.parameters.control.sfdist[c] * d_rain)
1467
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.parameters.control.sfdist[c] * d_snow)
1468
+ else:
1469
+ for c in range(self.parameters.control.sclass):
1470
+ self.sequences.states.wc[c, k] = 0.0
1471
+ self.sequences.states.sp[c, k] = 0.0
1472
+ cpdef inline void calc_spl_wcl_sp_wc(self) noexcept nogil:
1473
+ cdef double d_excess_wc
1474
+ cdef double d_excess_sp
1475
+ cdef double d_excess
1476
+ cdef double d_snow
1477
+ cdef numpy.int64_t c
1478
+ cdef numpy.int64_t k
1479
+ for k in range(self.parameters.control.nmbzones):
1480
+ self.sequences.fluxes.spl[k] = 0.0
1481
+ self.sequences.fluxes.wcl[k] = 0.0
1482
+ if self.parameters.control.zonetype[k] == ILAKE:
1483
+ for c in range(self.parameters.control.sclass):
1484
+ self.sequences.states.sp[c, k] = 0.0
1485
+ self.sequences.states.wc[c, k] = 0.0
1486
+ elif not isinf(self.parameters.control.smax[k]):
1487
+ for c in range(self.parameters.control.sclass):
1488
+ d_snow = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
1489
+ d_excess = d_snow - self.parameters.control.smax[k]
1490
+ if d_excess > 0.0:
1491
+ d_excess_sp = d_excess * self.sequences.states.sp[c, k] / d_snow
1492
+ d_excess_wc = d_excess * self.sequences.states.wc[c, k] / d_snow
1493
+ self.sequences.fluxes.spl[k] = self.sequences.fluxes.spl[k] + (d_excess_sp / self.parameters.control.sclass)
1494
+ self.sequences.fluxes.wcl[k] = self.sequences.fluxes.wcl[k] + (d_excess_wc / self.parameters.control.sclass)
1495
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (d_excess_sp)
1496
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (d_excess_wc)
1497
+ cpdef inline void calc_spg_wcg_sp_wc(self) noexcept nogil:
1498
+ cdef double d_excess_liquid_land
1499
+ cdef double d_excess_frozen_land
1500
+ cdef double d_delta_wc_zone
1501
+ cdef double d_delta_sp_zone
1502
+ cdef double d_fraction_gain_class
1503
+ cdef double d_excess_liquid_zone_actual
1504
+ cdef double d_excess_frozen_zone_actual
1505
+ cdef double d_fraction_gain_zone
1506
+ cdef double d_gain_max_cum
1507
+ cdef double d_excess_total_zone
1508
+ cdef double d_excess_liquid_zone
1509
+ cdef double d_excess_frozen_zone
1510
+ cdef double d_excess_liquid_basin
1511
+ cdef double d_excess_frozen_basin
1512
+ cdef double d_factor_excess
1513
+ cdef double d_factor_gain
1514
+ cdef double d_fraction_gain
1515
+ cdef double d_gain_max
1516
+ cdef double d_gain_pot
1517
+ cdef double d_gain_total
1518
+ cdef double d_gain_liquid
1519
+ cdef double d_gain_frozen
1520
+ cdef double d_f
1521
+ cdef numpy.int64_t t
1522
+ cdef numpy.int64_t f
1523
+ cdef numpy.int64_t c
1524
+ cdef numpy.int64_t i
1525
+ for i in range(self.parameters.control.nmbzones):
1526
+ self.sequences.fluxes.spg[i] = 0.0
1527
+ self.sequences.fluxes.wcg[i] = 0.0
1528
+ self.sequences.aides.spe[i] = 0.0
1529
+ self.sequences.aides.wce[i] = 0.0
1530
+ if self.parameters.control.zonetype[i] == ILAKE:
1531
+ for c in range(self.parameters.control.sclass):
1532
+ self.sequences.states.sp[c, i] = 0.0
1533
+ self.sequences.states.wc[c, i] = 0.0
1534
+ for i in range(self.parameters.derived.srednumber):
1535
+ f, t = self.parameters.derived.sredorder[i, 0], self.parameters.derived.sredorder[i, 1]
1536
+ d_f = self.parameters.derived.zonearearatios[f, t] * self.parameters.control.sred[f, t]
1537
+ d_gain_frozen = d_f * (self.sequences.fluxes.spl[f] + self.sequences.aides.spe[f])
1538
+ d_gain_liquid = d_f * (self.sequences.fluxes.wcl[f] + self.sequences.aides.wce[f])
1539
+ d_gain_total = d_gain_frozen + d_gain_liquid
1540
+ for c in range(self.parameters.control.sclass):
1541
+ d_gain_pot = self.parameters.control.sfdist[c] * d_gain_total
1542
+ if d_gain_pot > 0.0:
1543
+ d_gain_max = self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t]
1544
+ d_fraction_gain = min(d_gain_max / d_gain_pot, 1.0)
1545
+ d_factor_gain = d_fraction_gain * self.parameters.control.sfdist[c]
1546
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_factor_gain * d_gain_frozen / self.parameters.control.sclass)
1547
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_factor_gain * d_gain_liquid / self.parameters.control.sclass)
1548
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_factor_gain * d_gain_frozen)
1549
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_factor_gain * d_gain_liquid)
1550
+ d_factor_excess = (1.0 - d_fraction_gain) * self.parameters.control.sfdist[c]
1551
+ self.sequences.aides.spe[t] = self.sequences.aides.spe[t] + (d_factor_excess * d_gain_frozen / self.parameters.control.sclass)
1552
+ self.sequences.aides.wce[t] = self.sequences.aides.wce[t] + (d_factor_excess * d_gain_liquid / self.parameters.control.sclass)
1553
+ d_excess_frozen_basin, d_excess_liquid_basin = 0.0, 0.0
1554
+ for i in range(self.parameters.control.nmbzones):
1555
+ if self.parameters.derived.sredend[i]:
1556
+ d_excess_frozen_basin = d_excess_frozen_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.spe[i] + self.sequences.fluxes.spl[i]))
1557
+ d_excess_liquid_basin = d_excess_liquid_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.wce[i] + self.sequences.fluxes.wcl[i]))
1558
+ if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
1559
+ return
1560
+ for i in range(self.parameters.control.nmbzones):
1561
+ t = self.parameters.derived.indiceszonez[i]
1562
+ if self.parameters.control.zonetype[t] == ILAKE:
1563
+ continue
1564
+ d_excess_frozen_zone = d_excess_frozen_basin / self.parameters.derived.relzoneareas[t]
1565
+ d_excess_liquid_zone = d_excess_liquid_basin / self.parameters.derived.relzoneareas[t]
1566
+ d_excess_total_zone = d_excess_frozen_zone + d_excess_liquid_zone
1567
+ d_gain_max_cum = 0.0
1568
+ for c in range(self.parameters.control.sclass):
1569
+ 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])
1570
+ if d_gain_max_cum <= 0.0:
1571
+ continue
1572
+ d_fraction_gain_zone = min( d_gain_max_cum / self.parameters.control.sclass / d_excess_total_zone, 1.0 )
1573
+ d_excess_frozen_zone_actual = d_fraction_gain_zone * d_excess_frozen_zone
1574
+ d_excess_liquid_zone_actual = d_fraction_gain_zone * d_excess_liquid_zone
1575
+ for c in range(self.parameters.control.sclass):
1576
+ 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
1577
+ d_delta_sp_zone = d_fraction_gain_class * d_excess_frozen_zone_actual
1578
+ d_delta_wc_zone = d_fraction_gain_class * d_excess_liquid_zone_actual
1579
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_delta_sp_zone)
1580
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_delta_wc_zone)
1581
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_delta_sp_zone * self.parameters.control.sclass)
1582
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_delta_wc_zone * self.parameters.control.sclass)
1583
+ d_excess_frozen_basin = d_excess_frozen_basin - (d_excess_frozen_zone_actual * self.parameters.derived.relzoneareas[t])
1584
+ d_excess_liquid_basin = d_excess_liquid_basin - (d_excess_liquid_zone_actual * self.parameters.derived.relzoneareas[t])
1585
+ if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
1586
+ return
1587
+ d_excess_frozen_land = d_excess_frozen_basin / self.parameters.derived.rellandarea
1588
+ d_excess_liquid_land = d_excess_liquid_basin / self.parameters.derived.rellandarea
1589
+ for t in range(self.parameters.control.nmbzones):
1590
+ if self.parameters.control.zonetype[t] != ILAKE:
1591
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_excess_frozen_land)
1592
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_excess_liquid_land)
1593
+ for c in range(self.parameters.control.sclass):
1594
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_excess_frozen_land)
1595
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_excess_liquid_land)
1596
+ return
1597
+ cpdef inline void calc_cfact(self) noexcept nogil:
1598
+ cdef numpy.int64_t k
1599
+ cdef double d_factor
1600
+ d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
1601
+ for k in range(self.parameters.control.nmbzones):
1602
+ if self.parameters.control.zonetype[k] != ILAKE:
1603
+ self.sequences.factors.cfact[k] = max(self.parameters.control.cfmax[k] + d_factor * self.parameters.control.cfvar[k], 0.0)
1604
+ else:
1605
+ self.sequences.factors.cfact[k] = 0.0
1606
+ cpdef inline void calc_melt_sp_wc(self) noexcept nogil:
1607
+ cdef numpy.int64_t c
1608
+ cdef double d_potmelt
1609
+ cdef numpy.int64_t k
1610
+ for k in range(self.parameters.control.nmbzones):
1611
+ if self.parameters.control.zonetype[k] != ILAKE:
1612
+ if self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]:
1613
+ d_potmelt = self.sequences.factors.cfact[k] * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
1614
+ for c in range(self.parameters.control.sclass):
1615
+ self.sequences.fluxes.melt[c, k] = min(d_potmelt, self.sequences.states.sp[c, k])
1616
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (self.sequences.fluxes.melt[c, k])
1617
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.sequences.fluxes.melt[c, k])
1618
+ else:
1619
+ for c in range(self.parameters.control.sclass):
1620
+ self.sequences.fluxes.melt[c, k] = 0.0
1621
+ else:
1622
+ for c in range(self.parameters.control.sclass):
1623
+ self.sequences.fluxes.melt[c, k] = 0.0
1624
+ self.sequences.states.wc[c, k] = 0.0
1625
+ self.sequences.states.sp[c, k] = 0.0
1626
+ cpdef inline void calc_refr_sp_wc(self) noexcept nogil:
1627
+ cdef numpy.int64_t c
1628
+ cdef double d_potrefr
1629
+ cdef numpy.int64_t k
1630
+ for k in range(self.parameters.control.nmbzones):
1631
+ if self.parameters.control.zonetype[k] != ILAKE:
1632
+ if self.sequences.factors.tc[k] < self.parameters.derived.ttm[k]:
1633
+ d_potrefr = self.parameters.control.cfr[k] * self.parameters.control.cfmax[k] * (self.parameters.derived.ttm[k] - self.sequences.factors.tc[k])
1634
+ for c in range(self.parameters.control.sclass):
1635
+ self.sequences.fluxes.refr[c, k] = min(d_potrefr, self.sequences.states.wc[c, k])
1636
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.sequences.fluxes.refr[c, k])
1637
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (self.sequences.fluxes.refr[c, k])
1638
+ else:
1639
+ for c in range(self.parameters.control.sclass):
1640
+ self.sequences.fluxes.refr[c, k] = 0.0
1641
+ else:
1642
+ for c in range(self.parameters.control.sclass):
1643
+ self.sequences.fluxes.refr[c, k] = 0.0
1644
+ self.sequences.states.wc[c, k] = 0.0
1645
+ self.sequences.states.sp[c, k] = 0.0
1646
+ cpdef inline void calc_in_wc(self) noexcept nogil:
1647
+ cdef double d_wc_old
1648
+ cdef numpy.int64_t c
1649
+ cdef numpy.int64_t k
1650
+ for k in range(self.parameters.control.nmbzones):
1651
+ self.sequences.fluxes.in_[k] = 0.0
1652
+ if self.parameters.control.zonetype[k] != ILAKE:
1653
+ for c in range(self.parameters.control.sclass):
1654
+ d_wc_old = self.sequences.states.wc[c, k]
1655
+ self.sequences.states.wc[c, k] = min(d_wc_old, self.parameters.control.whc[k] * self.sequences.states.sp[c, k])
1656
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + ((d_wc_old - self.sequences.states.wc[c, k]) / self.parameters.control.sclass)
1657
+ else:
1658
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.tf[k]
1659
+ for c in range(self.parameters.control.sclass):
1660
+ self.sequences.states.wc[c, k] = 0.0
1661
+ cpdef inline void calc_swe(self) noexcept nogil:
1662
+ cdef numpy.int64_t c
1663
+ cdef numpy.int64_t k
1664
+ for k in range(self.parameters.control.nmbzones):
1665
+ if self.parameters.control.zonetype[k] != ILAKE:
1666
+ for c in range(self.parameters.control.sclass):
1667
+ self.sequences.factors.swe[c, k] = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
1668
+ else:
1669
+ for c in range(self.parameters.control.sclass):
1670
+ self.sequences.factors.swe[c, k] = 0.0
1671
+ cpdef inline void calc_sr(self) noexcept nogil:
1672
+ cdef numpy.int64_t k
1673
+ for k in range(self.parameters.control.nmbzones):
1674
+ if self.parameters.control.zonetype[k] == SEALED:
1675
+ self.sequences.fluxes.sr[k] = self.sequences.fluxes.in_[k]
1676
+ else:
1677
+ self.sequences.fluxes.sr[k] = 0.0
1678
+ cpdef inline void calc_gact(self) noexcept nogil:
1679
+ cdef numpy.int64_t k
1680
+ cdef double d_factor
1681
+ d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
1682
+ for k in range(self.parameters.control.nmbzones):
1683
+ if self.parameters.control.zonetype[k] == GLACIER:
1684
+ self.sequences.factors.gact[k] = max(self.parameters.control.gmelt[k] + d_factor * self.parameters.control.gvar[k], 0.0)
1685
+ else:
1686
+ self.sequences.factors.gact[k] = 0.0
1687
+ cpdef inline void calc_glmelt_in(self) noexcept nogil:
1688
+ cdef numpy.int64_t c
1689
+ cdef double d_glmeltpot
1690
+ cdef numpy.int64_t k
1691
+ for k in range(self.parameters.control.nmbzones):
1692
+ self.sequences.fluxes.glmelt[k] = 0.0
1693
+ if (self.parameters.control.zonetype[k] == GLACIER) and (self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]):
1694
+ d_glmeltpot = self.sequences.factors.gact[k] / self.parameters.control.sclass * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
1695
+ for c in range(self.parameters.control.sclass):
1696
+ if self.sequences.states.sp[c, k] <= 0.0:
1697
+ self.sequences.fluxes.glmelt[k] = self.sequences.fluxes.glmelt[k] + (d_glmeltpot)
1698
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + (d_glmeltpot)
1699
+ cpdef inline void calc_ei_ic(self) noexcept nogil:
1700
+ if self.aetmodel_typeid == 1:
1701
+ self.calc_ei_ic_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1702
+ cpdef inline void calc_r_sm(self) noexcept nogil:
1703
+ cdef numpy.int64_t k
1704
+ for k in range(self.parameters.control.nmbzones):
1705
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1706
+ if self.parameters.control.fc[k] > 0.0:
1707
+ 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]
1708
+ 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])
1709
+ else:
1710
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
1711
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] + (self.sequences.fluxes.in_[k] - self.sequences.fluxes.r[k])
1712
+ else:
1713
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
1714
+ self.sequences.states.sm[k] = 0.0
1715
+ cpdef inline void calc_ea_sm(self) noexcept nogil:
1716
+ if self.aetmodel_typeid == 1:
1717
+ self.calc_ea_sm_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1718
+ cpdef inline void calc_suz(self) noexcept nogil:
1719
+ cdef numpy.int64_t k
1720
+ for k in range(self.parameters.control.nmbzones):
1721
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1722
+ self.sequences.states.suz[k] = self.sequences.states.suz[k] + (self.sequences.fluxes.r[k])
1723
+ else:
1724
+ self.sequences.states.suz[k] = 0.0
1725
+ cpdef inline void calc_dp_suz(self) noexcept nogil:
1726
+ cdef numpy.int64_t k
1727
+ for k in range(self.parameters.control.nmbzones):
1728
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1729
+ self.sequences.fluxes.dp[k] = min(self.sequences.states.suz[k], self.parameters.control.percmax)
1730
+ self.sequences.states.suz[k] = self.sequences.states.suz[k] - (self.sequences.fluxes.dp[k])
1731
+ else:
1732
+ self.sequences.fluxes.dp[k] = 0.0
1733
+ self.sequences.states.suz[k] = 0.0
1734
+ cpdef inline void calc_rs_ri_suz(self) noexcept nogil:
1735
+ cdef double d_f
1736
+ cdef numpy.int64_t k
1737
+ for k in range(self.parameters.control.nmbzones):
1738
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1739
+ if self.sequences.states.suz[k] > self.parameters.control.sgr[k]:
1740
+ self.sequences.fluxes.rs[k] = (self.sequences.states.suz[k] - self.parameters.control.sgr[k]) * (1.0 - self.parameters.derived.w0[k])
1741
+ else:
1742
+ self.sequences.fluxes.rs[k] = 0.0
1743
+ self.sequences.fluxes.ri[k] = self.sequences.states.suz[k] * (1.0 - self.parameters.derived.w1[k])
1744
+ self.sequences.states.suz[k] = self.sequences.states.suz[k] - (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k])
1745
+ if self.sequences.states.suz[k] < 0.0:
1746
+ d_f = 1.0 - self.sequences.states.suz[k] / (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k])
1747
+ self.sequences.fluxes.rs[k] = self.sequences.fluxes.rs[k] * (d_f)
1748
+ self.sequences.fluxes.ri[k] = self.sequences.fluxes.ri[k] * (d_f)
1749
+ self.sequences.states.suz[k] = 0.0
1750
+ else:
1751
+ self.sequences.states.suz[k] = 0.0
1752
+ self.sequences.fluxes.rs[k] = 0.0
1753
+ self.sequences.fluxes.ri[k] = 0.0
1754
+ cpdef inline void calc_gr1(self) noexcept nogil:
1755
+ cdef numpy.int64_t k
1756
+ for k in range(self.parameters.control.nmbzones):
1757
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1758
+ self.sequences.fluxes.gr1[k] = min(self.sequences.fluxes.dp[k], (self.parameters.control.sg1max[k] - self.sequences.states.sg1[k]) / self.parameters.control.k2[k])
1759
+ self.sequences.fluxes.gr1[k] = self.sequences.fluxes.gr1[k] - (max(self.sequences.states.sg1[k] + self.sequences.fluxes.gr1[k] - self.parameters.control.sg1max[k], 0.0))
1760
+ else:
1761
+ self.sequences.states.sg1[k] = 0.0
1762
+ self.sequences.fluxes.gr1[k] = 0.0
1763
+ cpdef inline void calc_rg1_sg1(self) noexcept nogil:
1764
+ cdef double d_sg1
1765
+ cdef numpy.int64_t k
1766
+ for k in range(self.parameters.control.nmbzones):
1767
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1768
+ d_sg1 = self.sequences.states.sg1[k]
1769
+ self.sequences.states.sg1[k] = ( self.parameters.derived.w2[k] * d_sg1 + (1.0 - self.parameters.derived.w2[k]) * self.parameters.control.k2[k] * self.sequences.fluxes.gr1[k] )
1770
+ self.sequences.fluxes.rg1[k] = d_sg1 + self.sequences.fluxes.gr1[k] - self.sequences.states.sg1[k]
1771
+ else:
1772
+ self.sequences.states.sg1[k] = 0.0
1773
+ self.sequences.fluxes.rg1[k] = 0.0
1774
+ cpdef inline void calc_gr2_gr3(self) noexcept nogil:
1775
+ cdef double d_total
1776
+ cdef double d_weight
1777
+ cdef numpy.int64_t k
1778
+ self.sequences.fluxes.gr2 = 0.0
1779
+ self.sequences.fluxes.gr3 = 0.0
1780
+ for k in range(self.parameters.control.nmbzones):
1781
+ if self.parameters.control.zonetype[k] == SEALED:
1782
+ continue
1783
+ d_weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea
1784
+ if self.parameters.control.zonetype[k] == ILAKE:
1785
+ d_total = d_weight * self.sequences.fluxes.pc[k]
1786
+ else:
1787
+ d_total = d_weight * (self.sequences.fluxes.dp[k] - self.sequences.fluxes.gr1[k])
1788
+ self.sequences.fluxes.gr2 = self.sequences.fluxes.gr2 + (self.parameters.fixed.fsg * d_total)
1789
+ self.sequences.fluxes.gr3 = self.sequences.fluxes.gr3 + ((1.0 - self.parameters.fixed.fsg) * d_total)
1790
+ cpdef inline void calc_rg2_sg2(self) noexcept nogil:
1791
+ cdef double d_add
1792
+ cdef double d_w3
1793
+ cdef double d_k3
1794
+ cdef double d_gr2
1795
+ cdef double d_sg2
1796
+ d_sg2 = self.sequences.states.sg2
1797
+ d_gr2 = self.sequences.fluxes.gr2
1798
+ d_k3 = self.parameters.control.k3
1799
+ d_w3 = self.parameters.derived.w3
1800
+ if d_sg2 < 0.0 < d_gr2:
1801
+ d_add = min(-self.sequences.states.sg2, d_gr2)
1802
+ d_k3 = d_k3 * (d_gr2 / d_add)
1803
+ d_w3 = exp(-1.0 / d_k3)
1804
+ d_sg2 = d_sg2 + (d_add)
1805
+ d_gr2 = d_gr2 - (d_add)
1806
+ if d_sg2 >= 0.0:
1807
+ self.sequences.states.sg2 = d_w3 * d_sg2 + (1.0 - d_w3) * d_k3 * d_gr2
1808
+ self.sequences.fluxes.rg2 = d_sg2 + d_gr2 - self.sequences.states.sg2
1809
+ else:
1810
+ self.sequences.states.sg2 = d_sg2
1811
+ self.sequences.fluxes.rg2 = 0.0
1812
+ cpdef inline void calc_rg3_sg3(self) noexcept nogil:
1813
+ cdef double d_add
1814
+ cdef double d_w4
1815
+ cdef double d_k4
1816
+ cdef double d_gr3
1817
+ cdef double d_sg3
1818
+ d_sg3 = self.sequences.states.sg3
1819
+ d_gr3 = self.sequences.fluxes.gr3
1820
+ d_k4 = self.parameters.derived.k4
1821
+ d_w4 = self.parameters.derived.w4
1822
+ if d_sg3 < 0.0 < d_gr3:
1823
+ d_add = min(-self.sequences.states.sg3, d_gr3)
1824
+ d_k4 = d_k4 * (d_gr3 / d_add)
1825
+ d_w4 = exp(-1.0 / d_k4)
1826
+ d_sg3 = d_sg3 + (d_add)
1827
+ d_gr3 = d_gr3 - (d_add)
1828
+ if d_sg3 >= 0.0:
1829
+ self.sequences.states.sg3 = d_w4 * d_sg3 + (1.0 - d_w4) * d_k4 * d_gr3
1830
+ self.sequences.fluxes.rg3 = d_sg3 + d_gr3 - self.sequences.states.sg3
1831
+ else:
1832
+ self.sequences.states.sg3 = d_sg3
1833
+ self.sequences.fluxes.rg3 = 0.0
1834
+ cpdef inline void calc_el_sg2_sg3(self) noexcept nogil:
1835
+ if self.aetmodel_typeid == 1:
1836
+ self.calc_el_sg2_sg3_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1837
+ cpdef inline void calc_inrc(self) noexcept nogil:
1838
+ cdef numpy.int64_t k
1839
+ self.sequences.fluxes.inrc = self.parameters.derived.rellowerzonearea * (self.sequences.fluxes.rg2 + self.sequences.fluxes.rg3)
1840
+ for k in range(self.parameters.control.nmbzones):
1841
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1842
+ self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (self.parameters.derived.relzoneareas[k] * (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k] + self.sequences.fluxes.rg1[k]))
1843
+ elif self.parameters.control.zonetype[k] == SEALED:
1844
+ self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (self.parameters.derived.relzoneareas[k] * self.sequences.fluxes.r[k])
1845
+ cpdef inline void calc_outrc(self) noexcept nogil:
1846
+ if self.rconcmodel is None:
1847
+ self.sequences.fluxes.outrc = self.sequences.fluxes.inrc
1848
+ elif self.rconcmodel_typeid == 1:
1849
+ self.calc_outrc_rconcmodel_v1( (<masterinterface.MasterInterface>self.rconcmodel) )
1850
+ cpdef inline void calc_rt(self) noexcept nogil:
1851
+ self.sequences.fluxes.rt = self.sequences.fluxes.outrc
1852
+ cpdef inline void calc_qt(self) noexcept nogil:
1853
+ self.sequences.fluxes.qt = self.parameters.derived.qfactor * self.sequences.fluxes.rt
1854
+ cpdef double get_temperature(self, numpy.int64_t s) noexcept nogil:
1855
+ return self.sequences.factors.tc[s]
1856
+ cpdef double get_meantemperature(self) noexcept nogil:
1857
+ return self.sequences.inputs.t
1858
+ cpdef double get_precipitation(self, numpy.int64_t s) noexcept nogil:
1859
+ return self.sequences.fluxes.pc[s]
1860
+ cpdef double get_interceptedwater(self, numpy.int64_t k) noexcept nogil:
1861
+ return self.sequences.states.ic[k]
1862
+ cpdef double get_soilwater(self, numpy.int64_t k) noexcept nogil:
1863
+ return self.sequences.states.sm[k]
1864
+ cpdef double get_snowcover(self, numpy.int64_t k) noexcept nogil:
1865
+ cdef numpy.int64_t c
1866
+ cdef double snowcovered
1867
+ snowcovered = 0.0
1868
+ for c in range(self.parameters.control.sclass):
1869
+ snowcovered = snowcovered + (self.sequences.states.sp[c, k] > 0.0)
1870
+ return snowcovered / self.parameters.control.sclass
1871
+ cpdef inline void calc_ei_ic_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
1872
+ cdef numpy.int64_t k
1873
+ submodel.determine_interceptionevaporation()
1874
+ for k in range(self.parameters.control.nmbzones):
1875
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
1876
+ self.sequences.fluxes.ei[k] = min(submodel.get_interceptionevaporation(k), self.sequences.states.ic[k])
1877
+ self.sequences.states.ic[k] = self.sequences.states.ic[k] - (self.sequences.fluxes.ei[k])
1878
+ else:
1879
+ self.sequences.fluxes.ei[k] = 0.0
1880
+ self.sequences.states.ic[k] = 0.0
1881
+ cpdef inline void calc_ea_sm_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
1882
+ cdef numpy.int64_t k
1883
+ submodel.determine_soilevapotranspiration()
1884
+ for k in range(self.parameters.control.nmbzones):
1885
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1886
+ self.sequences.fluxes.ea[k] = min(submodel.get_soilevapotranspiration(k), self.sequences.states.sm[k])
1887
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] - (self.sequences.fluxes.ea[k])
1888
+ if self.sequences.states.sm[k] > self.parameters.control.fc[k]:
1889
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.r[k] + (self.sequences.states.sm[k] - self.parameters.control.fc[k])
1890
+ self.sequences.states.sm[k] = self.parameters.control.fc[k]
1891
+ else:
1892
+ self.sequences.fluxes.ea[k] = 0.0
1893
+ self.sequences.states.sm[k] = 0.0
1894
+ cpdef inline void calc_el_sg2_sg3_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
1895
+ cdef double weight
1896
+ cdef numpy.int64_t k
1897
+ submodel.determine_waterevaporation()
1898
+ for k in range(self.parameters.control.nmbzones):
1899
+ if self.parameters.control.zonetype[k] == ILAKE:
1900
+ self.sequences.fluxes.el[k] = submodel.get_waterevaporation(k)
1901
+ weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea
1902
+ self.sequences.states.sg2 = self.sequences.states.sg2 - (self.parameters.fixed.fsg * weight * self.sequences.fluxes.el[k])
1903
+ self.sequences.states.sg3 = self.sequences.states.sg3 - ((1.0 - self.parameters.fixed.fsg) * weight * self.sequences.fluxes.el[k])
1904
+ else:
1905
+ self.sequences.fluxes.el[k] = 0.0
1906
+ cpdef inline void calc_outrc_rconcmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
1907
+ submodel.set_inflow(self.sequences.fluxes.inrc)
1908
+ submodel.determine_outflow()
1909
+ self.sequences.fluxes.outrc = submodel.get_outflow()
1910
+ cpdef inline void pass_q(self) noexcept nogil:
1911
+ self.sequences.outlets.q[0] = self.sequences.outlets.q[0] + (self.sequences.fluxes.qt)