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,2486 @@
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.int64_t FIELD = 1
39
+ cdef public numpy.int64_t FOREST = 2
40
+ cdef public numpy.int64_t GLACIER = 3
41
+ cdef public numpy.int64_t ILAKE = 4
42
+ cdef public numpy.int64_t SEALED = 5
43
+ @cython.final
44
+ cdef class Parameters:
45
+ pass
46
+ @cython.final
47
+ cdef class ControlParameters:
48
+ pass
49
+ @cython.final
50
+ cdef class DerivedParameters:
51
+ pass
52
+ @cython.final
53
+ cdef class FixedParameters:
54
+ pass
55
+ @cython.final
56
+ cdef class Sequences:
57
+ pass
58
+ @cython.final
59
+ cdef class InputSequences:
60
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
61
+ cdef numpy.int64_t k
62
+ if self._p_inputflag:
63
+ self.p = self._p_inputpointer[0]
64
+ elif self._p_diskflag_reading:
65
+ self.p = self._p_ncarray[0]
66
+ elif self._p_ramflag:
67
+ self.p = self._p_array[idx]
68
+ if self._t_inputflag:
69
+ self.t = self._t_inputpointer[0]
70
+ elif self._t_diskflag_reading:
71
+ self.t = self._t_ncarray[0]
72
+ elif self._t_ramflag:
73
+ self.t = self._t_array[idx]
74
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
75
+ cdef numpy.int64_t k
76
+ if self._p_diskflag_writing:
77
+ self._p_ncarray[0] = self.p
78
+ if self._p_ramflag:
79
+ self._p_array[idx] = self.p
80
+ if self._t_diskflag_writing:
81
+ self._t_ncarray[0] = self.t
82
+ if self._t_ramflag:
83
+ self._t_array[idx] = self.t
84
+ cpdef inline set_pointerinput(self, str name, pointerutils.PDouble value):
85
+ if name == "p":
86
+ self._p_inputpointer = value.p_value
87
+ if name == "t":
88
+ self._t_inputpointer = value.p_value
89
+ @cython.final
90
+ cdef class FactorSequences:
91
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
92
+ cdef numpy.int64_t jdx0, jdx1
93
+ cdef numpy.int64_t k
94
+ if self._tc_diskflag_reading:
95
+ k = 0
96
+ for jdx0 in range(self._tc_length_0):
97
+ self.tc[jdx0] = self._tc_ncarray[k]
98
+ k += 1
99
+ elif self._tc_ramflag:
100
+ for jdx0 in range(self._tc_length_0):
101
+ self.tc[jdx0] = self._tc_array[idx, jdx0]
102
+ if self._fracrain_diskflag_reading:
103
+ k = 0
104
+ for jdx0 in range(self._fracrain_length_0):
105
+ self.fracrain[jdx0] = self._fracrain_ncarray[k]
106
+ k += 1
107
+ elif self._fracrain_ramflag:
108
+ for jdx0 in range(self._fracrain_length_0):
109
+ self.fracrain[jdx0] = self._fracrain_array[idx, jdx0]
110
+ if self._rfc_diskflag_reading:
111
+ k = 0
112
+ for jdx0 in range(self._rfc_length_0):
113
+ self.rfc[jdx0] = self._rfc_ncarray[k]
114
+ k += 1
115
+ elif self._rfc_ramflag:
116
+ for jdx0 in range(self._rfc_length_0):
117
+ self.rfc[jdx0] = self._rfc_array[idx, jdx0]
118
+ if self._sfc_diskflag_reading:
119
+ k = 0
120
+ for jdx0 in range(self._sfc_length_0):
121
+ self.sfc[jdx0] = self._sfc_ncarray[k]
122
+ k += 1
123
+ elif self._sfc_ramflag:
124
+ for jdx0 in range(self._sfc_length_0):
125
+ self.sfc[jdx0] = self._sfc_array[idx, jdx0]
126
+ if self._cfact_diskflag_reading:
127
+ k = 0
128
+ for jdx0 in range(self._cfact_length_0):
129
+ self.cfact[jdx0] = self._cfact_ncarray[k]
130
+ k += 1
131
+ elif self._cfact_ramflag:
132
+ for jdx0 in range(self._cfact_length_0):
133
+ self.cfact[jdx0] = self._cfact_array[idx, jdx0]
134
+ if self._swe_diskflag_reading:
135
+ k = 0
136
+ for jdx0 in range(self._swe_length_0):
137
+ for jdx1 in range(self._swe_length_1):
138
+ self.swe[jdx0, jdx1] = self._swe_ncarray[k]
139
+ k += 1
140
+ elif self._swe_ramflag:
141
+ for jdx0 in range(self._swe_length_0):
142
+ for jdx1 in range(self._swe_length_1):
143
+ self.swe[jdx0, jdx1] = self._swe_array[idx, jdx0, jdx1]
144
+ if self._gact_diskflag_reading:
145
+ k = 0
146
+ for jdx0 in range(self._gact_length_0):
147
+ self.gact[jdx0] = self._gact_ncarray[k]
148
+ k += 1
149
+ elif self._gact_ramflag:
150
+ for jdx0 in range(self._gact_length_0):
151
+ self.gact[jdx0] = self._gact_array[idx, jdx0]
152
+ if self._contriarea_diskflag_reading:
153
+ self.contriarea = self._contriarea_ncarray[0]
154
+ elif self._contriarea_ramflag:
155
+ self.contriarea = self._contriarea_array[idx]
156
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
157
+ cdef numpy.int64_t jdx0, jdx1
158
+ cdef numpy.int64_t k
159
+ if self._tc_diskflag_writing:
160
+ k = 0
161
+ for jdx0 in range(self._tc_length_0):
162
+ self._tc_ncarray[k] = self.tc[jdx0]
163
+ k += 1
164
+ if self._tc_ramflag:
165
+ for jdx0 in range(self._tc_length_0):
166
+ self._tc_array[idx, jdx0] = self.tc[jdx0]
167
+ if self._fracrain_diskflag_writing:
168
+ k = 0
169
+ for jdx0 in range(self._fracrain_length_0):
170
+ self._fracrain_ncarray[k] = self.fracrain[jdx0]
171
+ k += 1
172
+ if self._fracrain_ramflag:
173
+ for jdx0 in range(self._fracrain_length_0):
174
+ self._fracrain_array[idx, jdx0] = self.fracrain[jdx0]
175
+ if self._rfc_diskflag_writing:
176
+ k = 0
177
+ for jdx0 in range(self._rfc_length_0):
178
+ self._rfc_ncarray[k] = self.rfc[jdx0]
179
+ k += 1
180
+ if self._rfc_ramflag:
181
+ for jdx0 in range(self._rfc_length_0):
182
+ self._rfc_array[idx, jdx0] = self.rfc[jdx0]
183
+ if self._sfc_diskflag_writing:
184
+ k = 0
185
+ for jdx0 in range(self._sfc_length_0):
186
+ self._sfc_ncarray[k] = self.sfc[jdx0]
187
+ k += 1
188
+ if self._sfc_ramflag:
189
+ for jdx0 in range(self._sfc_length_0):
190
+ self._sfc_array[idx, jdx0] = self.sfc[jdx0]
191
+ if self._cfact_diskflag_writing:
192
+ k = 0
193
+ for jdx0 in range(self._cfact_length_0):
194
+ self._cfact_ncarray[k] = self.cfact[jdx0]
195
+ k += 1
196
+ if self._cfact_ramflag:
197
+ for jdx0 in range(self._cfact_length_0):
198
+ self._cfact_array[idx, jdx0] = self.cfact[jdx0]
199
+ if self._swe_diskflag_writing:
200
+ k = 0
201
+ for jdx0 in range(self._swe_length_0):
202
+ for jdx1 in range(self._swe_length_1):
203
+ self._swe_ncarray[k] = self.swe[jdx0, jdx1]
204
+ k += 1
205
+ if self._swe_ramflag:
206
+ for jdx0 in range(self._swe_length_0):
207
+ for jdx1 in range(self._swe_length_1):
208
+ self._swe_array[idx, jdx0, jdx1] = self.swe[jdx0, jdx1]
209
+ if self._gact_diskflag_writing:
210
+ k = 0
211
+ for jdx0 in range(self._gact_length_0):
212
+ self._gact_ncarray[k] = self.gact[jdx0]
213
+ k += 1
214
+ if self._gact_ramflag:
215
+ for jdx0 in range(self._gact_length_0):
216
+ self._gact_array[idx, jdx0] = self.gact[jdx0]
217
+ if self._contriarea_diskflag_writing:
218
+ self._contriarea_ncarray[0] = self.contriarea
219
+ if self._contriarea_ramflag:
220
+ self._contriarea_array[idx] = self.contriarea
221
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
222
+ if name == "contriarea":
223
+ self._contriarea_outputpointer = value.p_value
224
+ cpdef inline void update_outputs(self) noexcept nogil:
225
+ if self._contriarea_outputflag:
226
+ self._contriarea_outputpointer[0] = self.contriarea
227
+ @cython.final
228
+ cdef class FluxSequences:
229
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
230
+ cdef numpy.int64_t jdx0, jdx1
231
+ cdef numpy.int64_t k
232
+ if self._pc_diskflag_reading:
233
+ k = 0
234
+ for jdx0 in range(self._pc_length_0):
235
+ self.pc[jdx0] = self._pc_ncarray[k]
236
+ k += 1
237
+ elif self._pc_ramflag:
238
+ for jdx0 in range(self._pc_length_0):
239
+ self.pc[jdx0] = self._pc_array[idx, jdx0]
240
+ if self._ei_diskflag_reading:
241
+ k = 0
242
+ for jdx0 in range(self._ei_length_0):
243
+ self.ei[jdx0] = self._ei_ncarray[k]
244
+ k += 1
245
+ elif self._ei_ramflag:
246
+ for jdx0 in range(self._ei_length_0):
247
+ self.ei[jdx0] = self._ei_array[idx, jdx0]
248
+ if self._tf_diskflag_reading:
249
+ k = 0
250
+ for jdx0 in range(self._tf_length_0):
251
+ self.tf[jdx0] = self._tf_ncarray[k]
252
+ k += 1
253
+ elif self._tf_ramflag:
254
+ for jdx0 in range(self._tf_length_0):
255
+ self.tf[jdx0] = self._tf_array[idx, jdx0]
256
+ if self._spl_diskflag_reading:
257
+ k = 0
258
+ for jdx0 in range(self._spl_length_0):
259
+ self.spl[jdx0] = self._spl_ncarray[k]
260
+ k += 1
261
+ elif self._spl_ramflag:
262
+ for jdx0 in range(self._spl_length_0):
263
+ self.spl[jdx0] = self._spl_array[idx, jdx0]
264
+ if self._wcl_diskflag_reading:
265
+ k = 0
266
+ for jdx0 in range(self._wcl_length_0):
267
+ self.wcl[jdx0] = self._wcl_ncarray[k]
268
+ k += 1
269
+ elif self._wcl_ramflag:
270
+ for jdx0 in range(self._wcl_length_0):
271
+ self.wcl[jdx0] = self._wcl_array[idx, jdx0]
272
+ if self._spg_diskflag_reading:
273
+ k = 0
274
+ for jdx0 in range(self._spg_length_0):
275
+ self.spg[jdx0] = self._spg_ncarray[k]
276
+ k += 1
277
+ elif self._spg_ramflag:
278
+ for jdx0 in range(self._spg_length_0):
279
+ self.spg[jdx0] = self._spg_array[idx, jdx0]
280
+ if self._wcg_diskflag_reading:
281
+ k = 0
282
+ for jdx0 in range(self._wcg_length_0):
283
+ self.wcg[jdx0] = self._wcg_ncarray[k]
284
+ k += 1
285
+ elif self._wcg_ramflag:
286
+ for jdx0 in range(self._wcg_length_0):
287
+ self.wcg[jdx0] = self._wcg_array[idx, jdx0]
288
+ if self._glmelt_diskflag_reading:
289
+ k = 0
290
+ for jdx0 in range(self._glmelt_length_0):
291
+ self.glmelt[jdx0] = self._glmelt_ncarray[k]
292
+ k += 1
293
+ elif self._glmelt_ramflag:
294
+ for jdx0 in range(self._glmelt_length_0):
295
+ self.glmelt[jdx0] = self._glmelt_array[idx, jdx0]
296
+ if self._melt_diskflag_reading:
297
+ k = 0
298
+ for jdx0 in range(self._melt_length_0):
299
+ for jdx1 in range(self._melt_length_1):
300
+ self.melt[jdx0, jdx1] = self._melt_ncarray[k]
301
+ k += 1
302
+ elif self._melt_ramflag:
303
+ for jdx0 in range(self._melt_length_0):
304
+ for jdx1 in range(self._melt_length_1):
305
+ self.melt[jdx0, jdx1] = self._melt_array[idx, jdx0, jdx1]
306
+ if self._refr_diskflag_reading:
307
+ k = 0
308
+ for jdx0 in range(self._refr_length_0):
309
+ for jdx1 in range(self._refr_length_1):
310
+ self.refr[jdx0, jdx1] = self._refr_ncarray[k]
311
+ k += 1
312
+ elif self._refr_ramflag:
313
+ for jdx0 in range(self._refr_length_0):
314
+ for jdx1 in range(self._refr_length_1):
315
+ self.refr[jdx0, jdx1] = self._refr_array[idx, jdx0, jdx1]
316
+ if self._in__diskflag_reading:
317
+ k = 0
318
+ for jdx0 in range(self._in__length_0):
319
+ self.in_[jdx0] = self._in__ncarray[k]
320
+ k += 1
321
+ elif self._in__ramflag:
322
+ for jdx0 in range(self._in__length_0):
323
+ self.in_[jdx0] = self._in__array[idx, jdx0]
324
+ if self._r_diskflag_reading:
325
+ k = 0
326
+ for jdx0 in range(self._r_length_0):
327
+ self.r[jdx0] = self._r_ncarray[k]
328
+ k += 1
329
+ elif self._r_ramflag:
330
+ for jdx0 in range(self._r_length_0):
331
+ self.r[jdx0] = self._r_array[idx, jdx0]
332
+ if self._sr_diskflag_reading:
333
+ k = 0
334
+ for jdx0 in range(self._sr_length_0):
335
+ self.sr[jdx0] = self._sr_ncarray[k]
336
+ k += 1
337
+ elif self._sr_ramflag:
338
+ for jdx0 in range(self._sr_length_0):
339
+ self.sr[jdx0] = self._sr_array[idx, jdx0]
340
+ if self._ea_diskflag_reading:
341
+ k = 0
342
+ for jdx0 in range(self._ea_length_0):
343
+ self.ea[jdx0] = self._ea_ncarray[k]
344
+ k += 1
345
+ elif self._ea_ramflag:
346
+ for jdx0 in range(self._ea_length_0):
347
+ self.ea[jdx0] = self._ea_array[idx, jdx0]
348
+ if self._cf_diskflag_reading:
349
+ k = 0
350
+ for jdx0 in range(self._cf_length_0):
351
+ self.cf[jdx0] = self._cf_ncarray[k]
352
+ k += 1
353
+ elif self._cf_ramflag:
354
+ for jdx0 in range(self._cf_length_0):
355
+ self.cf[jdx0] = self._cf_array[idx, jdx0]
356
+ if self._inuz_diskflag_reading:
357
+ self.inuz = self._inuz_ncarray[0]
358
+ elif self._inuz_ramflag:
359
+ self.inuz = self._inuz_array[idx]
360
+ if self._perc_diskflag_reading:
361
+ self.perc = self._perc_ncarray[0]
362
+ elif self._perc_ramflag:
363
+ self.perc = self._perc_array[idx]
364
+ if self._dp_diskflag_reading:
365
+ k = 0
366
+ for jdx0 in range(self._dp_length_0):
367
+ self.dp[jdx0] = self._dp_ncarray[k]
368
+ k += 1
369
+ elif self._dp_ramflag:
370
+ for jdx0 in range(self._dp_length_0):
371
+ self.dp[jdx0] = self._dp_array[idx, jdx0]
372
+ if self._q0_diskflag_reading:
373
+ self.q0 = self._q0_ncarray[0]
374
+ elif self._q0_ramflag:
375
+ self.q0 = self._q0_array[idx]
376
+ if self._qvs1_diskflag_reading:
377
+ k = 0
378
+ for jdx0 in range(self._qvs1_length_0):
379
+ self.qvs1[jdx0] = self._qvs1_ncarray[k]
380
+ k += 1
381
+ elif self._qvs1_ramflag:
382
+ for jdx0 in range(self._qvs1_length_0):
383
+ self.qvs1[jdx0] = self._qvs1_array[idx, jdx0]
384
+ if self._qab1_diskflag_reading:
385
+ k = 0
386
+ for jdx0 in range(self._qab1_length_0):
387
+ self.qab1[jdx0] = self._qab1_ncarray[k]
388
+ k += 1
389
+ elif self._qab1_ramflag:
390
+ for jdx0 in range(self._qab1_length_0):
391
+ self.qab1[jdx0] = self._qab1_array[idx, jdx0]
392
+ if self._qvs2_diskflag_reading:
393
+ k = 0
394
+ for jdx0 in range(self._qvs2_length_0):
395
+ self.qvs2[jdx0] = self._qvs2_ncarray[k]
396
+ k += 1
397
+ elif self._qvs2_ramflag:
398
+ for jdx0 in range(self._qvs2_length_0):
399
+ self.qvs2[jdx0] = self._qvs2_array[idx, jdx0]
400
+ if self._qab2_diskflag_reading:
401
+ k = 0
402
+ for jdx0 in range(self._qab2_length_0):
403
+ self.qab2[jdx0] = self._qab2_ncarray[k]
404
+ k += 1
405
+ elif self._qab2_ramflag:
406
+ for jdx0 in range(self._qab2_length_0):
407
+ self.qab2[jdx0] = self._qab2_array[idx, jdx0]
408
+ if self._el_diskflag_reading:
409
+ k = 0
410
+ for jdx0 in range(self._el_length_0):
411
+ self.el[jdx0] = self._el_ncarray[k]
412
+ k += 1
413
+ elif self._el_ramflag:
414
+ for jdx0 in range(self._el_length_0):
415
+ self.el[jdx0] = self._el_array[idx, jdx0]
416
+ if self._q1_diskflag_reading:
417
+ self.q1 = self._q1_ncarray[0]
418
+ elif self._q1_ramflag:
419
+ self.q1 = self._q1_array[idx]
420
+ if self._rs_diskflag_reading:
421
+ k = 0
422
+ for jdx0 in range(self._rs_length_0):
423
+ self.rs[jdx0] = self._rs_ncarray[k]
424
+ k += 1
425
+ elif self._rs_ramflag:
426
+ for jdx0 in range(self._rs_length_0):
427
+ self.rs[jdx0] = self._rs_array[idx, jdx0]
428
+ if self._ri_diskflag_reading:
429
+ k = 0
430
+ for jdx0 in range(self._ri_length_0):
431
+ self.ri[jdx0] = self._ri_ncarray[k]
432
+ k += 1
433
+ elif self._ri_ramflag:
434
+ for jdx0 in range(self._ri_length_0):
435
+ self.ri[jdx0] = self._ri_array[idx, jdx0]
436
+ if self._gr1_diskflag_reading:
437
+ k = 0
438
+ for jdx0 in range(self._gr1_length_0):
439
+ self.gr1[jdx0] = self._gr1_ncarray[k]
440
+ k += 1
441
+ elif self._gr1_ramflag:
442
+ for jdx0 in range(self._gr1_length_0):
443
+ self.gr1[jdx0] = self._gr1_array[idx, jdx0]
444
+ if self._rg1_diskflag_reading:
445
+ k = 0
446
+ for jdx0 in range(self._rg1_length_0):
447
+ self.rg1[jdx0] = self._rg1_ncarray[k]
448
+ k += 1
449
+ elif self._rg1_ramflag:
450
+ for jdx0 in range(self._rg1_length_0):
451
+ self.rg1[jdx0] = self._rg1_array[idx, jdx0]
452
+ if self._gr2_diskflag_reading:
453
+ self.gr2 = self._gr2_ncarray[0]
454
+ elif self._gr2_ramflag:
455
+ self.gr2 = self._gr2_array[idx]
456
+ if self._rg2_diskflag_reading:
457
+ self.rg2 = self._rg2_ncarray[0]
458
+ elif self._rg2_ramflag:
459
+ self.rg2 = self._rg2_array[idx]
460
+ if self._gr3_diskflag_reading:
461
+ self.gr3 = self._gr3_ncarray[0]
462
+ elif self._gr3_ramflag:
463
+ self.gr3 = self._gr3_array[idx]
464
+ if self._rg3_diskflag_reading:
465
+ self.rg3 = self._rg3_ncarray[0]
466
+ elif self._rg3_ramflag:
467
+ self.rg3 = self._rg3_array[idx]
468
+ if self._inrc_diskflag_reading:
469
+ self.inrc = self._inrc_ncarray[0]
470
+ elif self._inrc_ramflag:
471
+ self.inrc = self._inrc_array[idx]
472
+ if self._outrc_diskflag_reading:
473
+ self.outrc = self._outrc_ncarray[0]
474
+ elif self._outrc_ramflag:
475
+ self.outrc = self._outrc_array[idx]
476
+ if self._rt_diskflag_reading:
477
+ self.rt = self._rt_ncarray[0]
478
+ elif self._rt_ramflag:
479
+ self.rt = self._rt_array[idx]
480
+ if self._qt_diskflag_reading:
481
+ self.qt = self._qt_ncarray[0]
482
+ elif self._qt_ramflag:
483
+ self.qt = self._qt_array[idx]
484
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
485
+ cdef numpy.int64_t jdx0, jdx1
486
+ cdef numpy.int64_t k
487
+ if self._pc_diskflag_writing:
488
+ k = 0
489
+ for jdx0 in range(self._pc_length_0):
490
+ self._pc_ncarray[k] = self.pc[jdx0]
491
+ k += 1
492
+ if self._pc_ramflag:
493
+ for jdx0 in range(self._pc_length_0):
494
+ self._pc_array[idx, jdx0] = self.pc[jdx0]
495
+ if self._ei_diskflag_writing:
496
+ k = 0
497
+ for jdx0 in range(self._ei_length_0):
498
+ self._ei_ncarray[k] = self.ei[jdx0]
499
+ k += 1
500
+ if self._ei_ramflag:
501
+ for jdx0 in range(self._ei_length_0):
502
+ self._ei_array[idx, jdx0] = self.ei[jdx0]
503
+ if self._tf_diskflag_writing:
504
+ k = 0
505
+ for jdx0 in range(self._tf_length_0):
506
+ self._tf_ncarray[k] = self.tf[jdx0]
507
+ k += 1
508
+ if self._tf_ramflag:
509
+ for jdx0 in range(self._tf_length_0):
510
+ self._tf_array[idx, jdx0] = self.tf[jdx0]
511
+ if self._spl_diskflag_writing:
512
+ k = 0
513
+ for jdx0 in range(self._spl_length_0):
514
+ self._spl_ncarray[k] = self.spl[jdx0]
515
+ k += 1
516
+ if self._spl_ramflag:
517
+ for jdx0 in range(self._spl_length_0):
518
+ self._spl_array[idx, jdx0] = self.spl[jdx0]
519
+ if self._wcl_diskflag_writing:
520
+ k = 0
521
+ for jdx0 in range(self._wcl_length_0):
522
+ self._wcl_ncarray[k] = self.wcl[jdx0]
523
+ k += 1
524
+ if self._wcl_ramflag:
525
+ for jdx0 in range(self._wcl_length_0):
526
+ self._wcl_array[idx, jdx0] = self.wcl[jdx0]
527
+ if self._spg_diskflag_writing:
528
+ k = 0
529
+ for jdx0 in range(self._spg_length_0):
530
+ self._spg_ncarray[k] = self.spg[jdx0]
531
+ k += 1
532
+ if self._spg_ramflag:
533
+ for jdx0 in range(self._spg_length_0):
534
+ self._spg_array[idx, jdx0] = self.spg[jdx0]
535
+ if self._wcg_diskflag_writing:
536
+ k = 0
537
+ for jdx0 in range(self._wcg_length_0):
538
+ self._wcg_ncarray[k] = self.wcg[jdx0]
539
+ k += 1
540
+ if self._wcg_ramflag:
541
+ for jdx0 in range(self._wcg_length_0):
542
+ self._wcg_array[idx, jdx0] = self.wcg[jdx0]
543
+ if self._glmelt_diskflag_writing:
544
+ k = 0
545
+ for jdx0 in range(self._glmelt_length_0):
546
+ self._glmelt_ncarray[k] = self.glmelt[jdx0]
547
+ k += 1
548
+ if self._glmelt_ramflag:
549
+ for jdx0 in range(self._glmelt_length_0):
550
+ self._glmelt_array[idx, jdx0] = self.glmelt[jdx0]
551
+ if self._melt_diskflag_writing:
552
+ k = 0
553
+ for jdx0 in range(self._melt_length_0):
554
+ for jdx1 in range(self._melt_length_1):
555
+ self._melt_ncarray[k] = self.melt[jdx0, jdx1]
556
+ k += 1
557
+ if self._melt_ramflag:
558
+ for jdx0 in range(self._melt_length_0):
559
+ for jdx1 in range(self._melt_length_1):
560
+ self._melt_array[idx, jdx0, jdx1] = self.melt[jdx0, jdx1]
561
+ if self._refr_diskflag_writing:
562
+ k = 0
563
+ for jdx0 in range(self._refr_length_0):
564
+ for jdx1 in range(self._refr_length_1):
565
+ self._refr_ncarray[k] = self.refr[jdx0, jdx1]
566
+ k += 1
567
+ if self._refr_ramflag:
568
+ for jdx0 in range(self._refr_length_0):
569
+ for jdx1 in range(self._refr_length_1):
570
+ self._refr_array[idx, jdx0, jdx1] = self.refr[jdx0, jdx1]
571
+ if self._in__diskflag_writing:
572
+ k = 0
573
+ for jdx0 in range(self._in__length_0):
574
+ self._in__ncarray[k] = self.in_[jdx0]
575
+ k += 1
576
+ if self._in__ramflag:
577
+ for jdx0 in range(self._in__length_0):
578
+ self._in__array[idx, jdx0] = self.in_[jdx0]
579
+ if self._r_diskflag_writing:
580
+ k = 0
581
+ for jdx0 in range(self._r_length_0):
582
+ self._r_ncarray[k] = self.r[jdx0]
583
+ k += 1
584
+ if self._r_ramflag:
585
+ for jdx0 in range(self._r_length_0):
586
+ self._r_array[idx, jdx0] = self.r[jdx0]
587
+ if self._sr_diskflag_writing:
588
+ k = 0
589
+ for jdx0 in range(self._sr_length_0):
590
+ self._sr_ncarray[k] = self.sr[jdx0]
591
+ k += 1
592
+ if self._sr_ramflag:
593
+ for jdx0 in range(self._sr_length_0):
594
+ self._sr_array[idx, jdx0] = self.sr[jdx0]
595
+ if self._ea_diskflag_writing:
596
+ k = 0
597
+ for jdx0 in range(self._ea_length_0):
598
+ self._ea_ncarray[k] = self.ea[jdx0]
599
+ k += 1
600
+ if self._ea_ramflag:
601
+ for jdx0 in range(self._ea_length_0):
602
+ self._ea_array[idx, jdx0] = self.ea[jdx0]
603
+ if self._cf_diskflag_writing:
604
+ k = 0
605
+ for jdx0 in range(self._cf_length_0):
606
+ self._cf_ncarray[k] = self.cf[jdx0]
607
+ k += 1
608
+ if self._cf_ramflag:
609
+ for jdx0 in range(self._cf_length_0):
610
+ self._cf_array[idx, jdx0] = self.cf[jdx0]
611
+ if self._inuz_diskflag_writing:
612
+ self._inuz_ncarray[0] = self.inuz
613
+ if self._inuz_ramflag:
614
+ self._inuz_array[idx] = self.inuz
615
+ if self._perc_diskflag_writing:
616
+ self._perc_ncarray[0] = self.perc
617
+ if self._perc_ramflag:
618
+ self._perc_array[idx] = self.perc
619
+ if self._dp_diskflag_writing:
620
+ k = 0
621
+ for jdx0 in range(self._dp_length_0):
622
+ self._dp_ncarray[k] = self.dp[jdx0]
623
+ k += 1
624
+ if self._dp_ramflag:
625
+ for jdx0 in range(self._dp_length_0):
626
+ self._dp_array[idx, jdx0] = self.dp[jdx0]
627
+ if self._q0_diskflag_writing:
628
+ self._q0_ncarray[0] = self.q0
629
+ if self._q0_ramflag:
630
+ self._q0_array[idx] = self.q0
631
+ if self._qvs1_diskflag_writing:
632
+ k = 0
633
+ for jdx0 in range(self._qvs1_length_0):
634
+ self._qvs1_ncarray[k] = self.qvs1[jdx0]
635
+ k += 1
636
+ if self._qvs1_ramflag:
637
+ for jdx0 in range(self._qvs1_length_0):
638
+ self._qvs1_array[idx, jdx0] = self.qvs1[jdx0]
639
+ if self._qab1_diskflag_writing:
640
+ k = 0
641
+ for jdx0 in range(self._qab1_length_0):
642
+ self._qab1_ncarray[k] = self.qab1[jdx0]
643
+ k += 1
644
+ if self._qab1_ramflag:
645
+ for jdx0 in range(self._qab1_length_0):
646
+ self._qab1_array[idx, jdx0] = self.qab1[jdx0]
647
+ if self._qvs2_diskflag_writing:
648
+ k = 0
649
+ for jdx0 in range(self._qvs2_length_0):
650
+ self._qvs2_ncarray[k] = self.qvs2[jdx0]
651
+ k += 1
652
+ if self._qvs2_ramflag:
653
+ for jdx0 in range(self._qvs2_length_0):
654
+ self._qvs2_array[idx, jdx0] = self.qvs2[jdx0]
655
+ if self._qab2_diskflag_writing:
656
+ k = 0
657
+ for jdx0 in range(self._qab2_length_0):
658
+ self._qab2_ncarray[k] = self.qab2[jdx0]
659
+ k += 1
660
+ if self._qab2_ramflag:
661
+ for jdx0 in range(self._qab2_length_0):
662
+ self._qab2_array[idx, jdx0] = self.qab2[jdx0]
663
+ if self._el_diskflag_writing:
664
+ k = 0
665
+ for jdx0 in range(self._el_length_0):
666
+ self._el_ncarray[k] = self.el[jdx0]
667
+ k += 1
668
+ if self._el_ramflag:
669
+ for jdx0 in range(self._el_length_0):
670
+ self._el_array[idx, jdx0] = self.el[jdx0]
671
+ if self._q1_diskflag_writing:
672
+ self._q1_ncarray[0] = self.q1
673
+ if self._q1_ramflag:
674
+ self._q1_array[idx] = self.q1
675
+ if self._rs_diskflag_writing:
676
+ k = 0
677
+ for jdx0 in range(self._rs_length_0):
678
+ self._rs_ncarray[k] = self.rs[jdx0]
679
+ k += 1
680
+ if self._rs_ramflag:
681
+ for jdx0 in range(self._rs_length_0):
682
+ self._rs_array[idx, jdx0] = self.rs[jdx0]
683
+ if self._ri_diskflag_writing:
684
+ k = 0
685
+ for jdx0 in range(self._ri_length_0):
686
+ self._ri_ncarray[k] = self.ri[jdx0]
687
+ k += 1
688
+ if self._ri_ramflag:
689
+ for jdx0 in range(self._ri_length_0):
690
+ self._ri_array[idx, jdx0] = self.ri[jdx0]
691
+ if self._gr1_diskflag_writing:
692
+ k = 0
693
+ for jdx0 in range(self._gr1_length_0):
694
+ self._gr1_ncarray[k] = self.gr1[jdx0]
695
+ k += 1
696
+ if self._gr1_ramflag:
697
+ for jdx0 in range(self._gr1_length_0):
698
+ self._gr1_array[idx, jdx0] = self.gr1[jdx0]
699
+ if self._rg1_diskflag_writing:
700
+ k = 0
701
+ for jdx0 in range(self._rg1_length_0):
702
+ self._rg1_ncarray[k] = self.rg1[jdx0]
703
+ k += 1
704
+ if self._rg1_ramflag:
705
+ for jdx0 in range(self._rg1_length_0):
706
+ self._rg1_array[idx, jdx0] = self.rg1[jdx0]
707
+ if self._gr2_diskflag_writing:
708
+ self._gr2_ncarray[0] = self.gr2
709
+ if self._gr2_ramflag:
710
+ self._gr2_array[idx] = self.gr2
711
+ if self._rg2_diskflag_writing:
712
+ self._rg2_ncarray[0] = self.rg2
713
+ if self._rg2_ramflag:
714
+ self._rg2_array[idx] = self.rg2
715
+ if self._gr3_diskflag_writing:
716
+ self._gr3_ncarray[0] = self.gr3
717
+ if self._gr3_ramflag:
718
+ self._gr3_array[idx] = self.gr3
719
+ if self._rg3_diskflag_writing:
720
+ self._rg3_ncarray[0] = self.rg3
721
+ if self._rg3_ramflag:
722
+ self._rg3_array[idx] = self.rg3
723
+ if self._inrc_diskflag_writing:
724
+ self._inrc_ncarray[0] = self.inrc
725
+ if self._inrc_ramflag:
726
+ self._inrc_array[idx] = self.inrc
727
+ if self._outrc_diskflag_writing:
728
+ self._outrc_ncarray[0] = self.outrc
729
+ if self._outrc_ramflag:
730
+ self._outrc_array[idx] = self.outrc
731
+ if self._rt_diskflag_writing:
732
+ self._rt_ncarray[0] = self.rt
733
+ if self._rt_ramflag:
734
+ self._rt_array[idx] = self.rt
735
+ if self._qt_diskflag_writing:
736
+ self._qt_ncarray[0] = self.qt
737
+ if self._qt_ramflag:
738
+ self._qt_array[idx] = self.qt
739
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
740
+ if name == "inuz":
741
+ self._inuz_outputpointer = value.p_value
742
+ if name == "perc":
743
+ self._perc_outputpointer = value.p_value
744
+ if name == "q0":
745
+ self._q0_outputpointer = value.p_value
746
+ if name == "q1":
747
+ self._q1_outputpointer = value.p_value
748
+ if name == "gr2":
749
+ self._gr2_outputpointer = value.p_value
750
+ if name == "rg2":
751
+ self._rg2_outputpointer = value.p_value
752
+ if name == "gr3":
753
+ self._gr3_outputpointer = value.p_value
754
+ if name == "rg3":
755
+ self._rg3_outputpointer = value.p_value
756
+ if name == "inrc":
757
+ self._inrc_outputpointer = value.p_value
758
+ if name == "outrc":
759
+ self._outrc_outputpointer = value.p_value
760
+ if name == "rt":
761
+ self._rt_outputpointer = value.p_value
762
+ if name == "qt":
763
+ self._qt_outputpointer = value.p_value
764
+ cpdef inline void update_outputs(self) noexcept nogil:
765
+ if self._inuz_outputflag:
766
+ self._inuz_outputpointer[0] = self.inuz
767
+ if self._perc_outputflag:
768
+ self._perc_outputpointer[0] = self.perc
769
+ if self._q0_outputflag:
770
+ self._q0_outputpointer[0] = self.q0
771
+ if self._q1_outputflag:
772
+ self._q1_outputpointer[0] = self.q1
773
+ if self._gr2_outputflag:
774
+ self._gr2_outputpointer[0] = self.gr2
775
+ if self._rg2_outputflag:
776
+ self._rg2_outputpointer[0] = self.rg2
777
+ if self._gr3_outputflag:
778
+ self._gr3_outputpointer[0] = self.gr3
779
+ if self._rg3_outputflag:
780
+ self._rg3_outputpointer[0] = self.rg3
781
+ if self._inrc_outputflag:
782
+ self._inrc_outputpointer[0] = self.inrc
783
+ if self._outrc_outputflag:
784
+ self._outrc_outputpointer[0] = self.outrc
785
+ if self._rt_outputflag:
786
+ self._rt_outputpointer[0] = self.rt
787
+ if self._qt_outputflag:
788
+ self._qt_outputpointer[0] = self.qt
789
+ @cython.final
790
+ cdef class StateSequences:
791
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
792
+ cdef numpy.int64_t jdx0, jdx1
793
+ cdef numpy.int64_t k
794
+ if self._ic_diskflag_reading:
795
+ k = 0
796
+ for jdx0 in range(self._ic_length_0):
797
+ self.ic[jdx0] = self._ic_ncarray[k]
798
+ k += 1
799
+ elif self._ic_ramflag:
800
+ for jdx0 in range(self._ic_length_0):
801
+ self.ic[jdx0] = self._ic_array[idx, jdx0]
802
+ if self._sp_diskflag_reading:
803
+ k = 0
804
+ for jdx0 in range(self._sp_length_0):
805
+ for jdx1 in range(self._sp_length_1):
806
+ self.sp[jdx0, jdx1] = self._sp_ncarray[k]
807
+ k += 1
808
+ elif self._sp_ramflag:
809
+ for jdx0 in range(self._sp_length_0):
810
+ for jdx1 in range(self._sp_length_1):
811
+ self.sp[jdx0, jdx1] = self._sp_array[idx, jdx0, jdx1]
812
+ if self._wc_diskflag_reading:
813
+ k = 0
814
+ for jdx0 in range(self._wc_length_0):
815
+ for jdx1 in range(self._wc_length_1):
816
+ self.wc[jdx0, jdx1] = self._wc_ncarray[k]
817
+ k += 1
818
+ elif self._wc_ramflag:
819
+ for jdx0 in range(self._wc_length_0):
820
+ for jdx1 in range(self._wc_length_1):
821
+ self.wc[jdx0, jdx1] = self._wc_array[idx, jdx0, jdx1]
822
+ if self._sm_diskflag_reading:
823
+ k = 0
824
+ for jdx0 in range(self._sm_length_0):
825
+ self.sm[jdx0] = self._sm_ncarray[k]
826
+ k += 1
827
+ elif self._sm_ramflag:
828
+ for jdx0 in range(self._sm_length_0):
829
+ self.sm[jdx0] = self._sm_array[idx, jdx0]
830
+ if self._uz_diskflag_reading:
831
+ self.uz = self._uz_ncarray[0]
832
+ elif self._uz_ramflag:
833
+ self.uz = self._uz_array[idx]
834
+ if self._suz_diskflag_reading:
835
+ k = 0
836
+ for jdx0 in range(self._suz_length_0):
837
+ self.suz[jdx0] = self._suz_ncarray[k]
838
+ k += 1
839
+ elif self._suz_ramflag:
840
+ for jdx0 in range(self._suz_length_0):
841
+ self.suz[jdx0] = self._suz_array[idx, jdx0]
842
+ if self._bw1_diskflag_reading:
843
+ k = 0
844
+ for jdx0 in range(self._bw1_length_0):
845
+ self.bw1[jdx0] = self._bw1_ncarray[k]
846
+ k += 1
847
+ elif self._bw1_ramflag:
848
+ for jdx0 in range(self._bw1_length_0):
849
+ self.bw1[jdx0] = self._bw1_array[idx, jdx0]
850
+ if self._bw2_diskflag_reading:
851
+ k = 0
852
+ for jdx0 in range(self._bw2_length_0):
853
+ self.bw2[jdx0] = self._bw2_ncarray[k]
854
+ k += 1
855
+ elif self._bw2_ramflag:
856
+ for jdx0 in range(self._bw2_length_0):
857
+ self.bw2[jdx0] = self._bw2_array[idx, jdx0]
858
+ if self._lz_diskflag_reading:
859
+ self.lz = self._lz_ncarray[0]
860
+ elif self._lz_ramflag:
861
+ self.lz = self._lz_array[idx]
862
+ if self._sg1_diskflag_reading:
863
+ k = 0
864
+ for jdx0 in range(self._sg1_length_0):
865
+ self.sg1[jdx0] = self._sg1_ncarray[k]
866
+ k += 1
867
+ elif self._sg1_ramflag:
868
+ for jdx0 in range(self._sg1_length_0):
869
+ self.sg1[jdx0] = self._sg1_array[idx, jdx0]
870
+ if self._sg2_diskflag_reading:
871
+ self.sg2 = self._sg2_ncarray[0]
872
+ elif self._sg2_ramflag:
873
+ self.sg2 = self._sg2_array[idx]
874
+ if self._sg3_diskflag_reading:
875
+ self.sg3 = self._sg3_ncarray[0]
876
+ elif self._sg3_ramflag:
877
+ self.sg3 = self._sg3_array[idx]
878
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
879
+ cdef numpy.int64_t jdx0, jdx1
880
+ cdef numpy.int64_t k
881
+ if self._ic_diskflag_writing:
882
+ k = 0
883
+ for jdx0 in range(self._ic_length_0):
884
+ self._ic_ncarray[k] = self.ic[jdx0]
885
+ k += 1
886
+ if self._ic_ramflag:
887
+ for jdx0 in range(self._ic_length_0):
888
+ self._ic_array[idx, jdx0] = self.ic[jdx0]
889
+ if self._sp_diskflag_writing:
890
+ k = 0
891
+ for jdx0 in range(self._sp_length_0):
892
+ for jdx1 in range(self._sp_length_1):
893
+ self._sp_ncarray[k] = self.sp[jdx0, jdx1]
894
+ k += 1
895
+ if self._sp_ramflag:
896
+ for jdx0 in range(self._sp_length_0):
897
+ for jdx1 in range(self._sp_length_1):
898
+ self._sp_array[idx, jdx0, jdx1] = self.sp[jdx0, jdx1]
899
+ if self._wc_diskflag_writing:
900
+ k = 0
901
+ for jdx0 in range(self._wc_length_0):
902
+ for jdx1 in range(self._wc_length_1):
903
+ self._wc_ncarray[k] = self.wc[jdx0, jdx1]
904
+ k += 1
905
+ if self._wc_ramflag:
906
+ for jdx0 in range(self._wc_length_0):
907
+ for jdx1 in range(self._wc_length_1):
908
+ self._wc_array[idx, jdx0, jdx1] = self.wc[jdx0, jdx1]
909
+ if self._sm_diskflag_writing:
910
+ k = 0
911
+ for jdx0 in range(self._sm_length_0):
912
+ self._sm_ncarray[k] = self.sm[jdx0]
913
+ k += 1
914
+ if self._sm_ramflag:
915
+ for jdx0 in range(self._sm_length_0):
916
+ self._sm_array[idx, jdx0] = self.sm[jdx0]
917
+ if self._uz_diskflag_writing:
918
+ self._uz_ncarray[0] = self.uz
919
+ if self._uz_ramflag:
920
+ self._uz_array[idx] = self.uz
921
+ if self._suz_diskflag_writing:
922
+ k = 0
923
+ for jdx0 in range(self._suz_length_0):
924
+ self._suz_ncarray[k] = self.suz[jdx0]
925
+ k += 1
926
+ if self._suz_ramflag:
927
+ for jdx0 in range(self._suz_length_0):
928
+ self._suz_array[idx, jdx0] = self.suz[jdx0]
929
+ if self._bw1_diskflag_writing:
930
+ k = 0
931
+ for jdx0 in range(self._bw1_length_0):
932
+ self._bw1_ncarray[k] = self.bw1[jdx0]
933
+ k += 1
934
+ if self._bw1_ramflag:
935
+ for jdx0 in range(self._bw1_length_0):
936
+ self._bw1_array[idx, jdx0] = self.bw1[jdx0]
937
+ if self._bw2_diskflag_writing:
938
+ k = 0
939
+ for jdx0 in range(self._bw2_length_0):
940
+ self._bw2_ncarray[k] = self.bw2[jdx0]
941
+ k += 1
942
+ if self._bw2_ramflag:
943
+ for jdx0 in range(self._bw2_length_0):
944
+ self._bw2_array[idx, jdx0] = self.bw2[jdx0]
945
+ if self._lz_diskflag_writing:
946
+ self._lz_ncarray[0] = self.lz
947
+ if self._lz_ramflag:
948
+ self._lz_array[idx] = self.lz
949
+ if self._sg1_diskflag_writing:
950
+ k = 0
951
+ for jdx0 in range(self._sg1_length_0):
952
+ self._sg1_ncarray[k] = self.sg1[jdx0]
953
+ k += 1
954
+ if self._sg1_ramflag:
955
+ for jdx0 in range(self._sg1_length_0):
956
+ self._sg1_array[idx, jdx0] = self.sg1[jdx0]
957
+ if self._sg2_diskflag_writing:
958
+ self._sg2_ncarray[0] = self.sg2
959
+ if self._sg2_ramflag:
960
+ self._sg2_array[idx] = self.sg2
961
+ if self._sg3_diskflag_writing:
962
+ self._sg3_ncarray[0] = self.sg3
963
+ if self._sg3_ramflag:
964
+ self._sg3_array[idx] = self.sg3
965
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
966
+ if name == "uz":
967
+ self._uz_outputpointer = value.p_value
968
+ if name == "lz":
969
+ self._lz_outputpointer = value.p_value
970
+ if name == "sg2":
971
+ self._sg2_outputpointer = value.p_value
972
+ if name == "sg3":
973
+ self._sg3_outputpointer = value.p_value
974
+ cpdef inline void update_outputs(self) noexcept nogil:
975
+ if self._uz_outputflag:
976
+ self._uz_outputpointer[0] = self.uz
977
+ if self._lz_outputflag:
978
+ self._lz_outputpointer[0] = self.lz
979
+ if self._sg2_outputflag:
980
+ self._sg2_outputpointer[0] = self.sg2
981
+ if self._sg3_outputflag:
982
+ self._sg3_outputpointer[0] = self.sg3
983
+ @cython.final
984
+ cdef class AideSequences:
985
+ pass
986
+ @cython.final
987
+ cdef class OutletSequences:
988
+ cpdef inline set_pointer0d(self, str name, pointerutils.Double value):
989
+ cdef pointerutils.PDouble pointer = pointerutils.PDouble(value)
990
+ if name == "q":
991
+ self.q = pointer.p_value
992
+ cpdef get_value(self, str name):
993
+ cdef numpy.int64_t idx
994
+ if name == "q":
995
+ return self.q[0]
996
+ cpdef set_value(self, str name, value):
997
+ if name == "q":
998
+ self.q[0] = value
999
+ @cython.final
1000
+ cdef class Model:
1001
+ def __init__(self):
1002
+ super().__init__()
1003
+ self.aetmodel = None
1004
+ self.aetmodel_is_mainmodel = False
1005
+ self.rconcmodel = None
1006
+ self.rconcmodel_is_mainmodel = False
1007
+ def get_aetmodel(self) -> masterinterface.MasterInterface | None:
1008
+ return self.aetmodel
1009
+ def set_aetmodel(self, aetmodel: masterinterface.MasterInterface | None) -> None:
1010
+ self.aetmodel = aetmodel
1011
+ def get_rconcmodel(self) -> masterinterface.MasterInterface | None:
1012
+ return self.rconcmodel
1013
+ def set_rconcmodel(self, rconcmodel: masterinterface.MasterInterface | None) -> None:
1014
+ self.rconcmodel = rconcmodel
1015
+ cpdef inline void simulate(self, numpy.int64_t idx) noexcept nogil:
1016
+ self.idx_sim = idx
1017
+ self.reset_reuseflags()
1018
+ self.load_data(idx)
1019
+ self.run()
1020
+ self.new2old()
1021
+ self.update_outlets()
1022
+ self.update_outputs()
1023
+ cpdef void reset_reuseflags(self) noexcept nogil:
1024
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
1025
+ self.aetmodel.reset_reuseflags()
1026
+ if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
1027
+ self.rconcmodel.reset_reuseflags()
1028
+ cpdef void load_data(self, numpy.int64_t idx) noexcept nogil:
1029
+ self.idx_sim = idx
1030
+ self.sequences.inputs.load_data(idx)
1031
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
1032
+ self.aetmodel.load_data(idx)
1033
+ if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
1034
+ self.rconcmodel.load_data(idx)
1035
+ cpdef void save_data(self, numpy.int64_t idx) noexcept nogil:
1036
+ self.idx_sim = idx
1037
+ self.sequences.inputs.save_data(idx)
1038
+ self.sequences.factors.save_data(idx)
1039
+ self.sequences.fluxes.save_data(idx)
1040
+ self.sequences.states.save_data(idx)
1041
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
1042
+ self.aetmodel.save_data(idx)
1043
+ if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
1044
+ self.rconcmodel.save_data(idx)
1045
+ cpdef void new2old(self) noexcept nogil:
1046
+ cdef numpy.int64_t jdx0, jdx1
1047
+ for jdx0 in range(self.sequences.states._ic_length_0):
1048
+ self.sequences.old_states.ic[jdx0] = self.sequences.new_states.ic[jdx0]
1049
+ for jdx0 in range(self.sequences.states._sp_length_0):
1050
+ for jdx1 in range(self.sequences.states._sp_length_1):
1051
+ self.sequences.old_states.sp[jdx0,jdx1] = self.sequences.new_states.sp[jdx0,jdx1]
1052
+ for jdx0 in range(self.sequences.states._wc_length_0):
1053
+ for jdx1 in range(self.sequences.states._wc_length_1):
1054
+ self.sequences.old_states.wc[jdx0,jdx1] = self.sequences.new_states.wc[jdx0,jdx1]
1055
+ for jdx0 in range(self.sequences.states._sm_length_0):
1056
+ self.sequences.old_states.sm[jdx0] = self.sequences.new_states.sm[jdx0]
1057
+ self.sequences.old_states.uz = self.sequences.new_states.uz
1058
+ for jdx0 in range(self.sequences.states._suz_length_0):
1059
+ self.sequences.old_states.suz[jdx0] = self.sequences.new_states.suz[jdx0]
1060
+ for jdx0 in range(self.sequences.states._bw1_length_0):
1061
+ self.sequences.old_states.bw1[jdx0] = self.sequences.new_states.bw1[jdx0]
1062
+ for jdx0 in range(self.sequences.states._bw2_length_0):
1063
+ self.sequences.old_states.bw2[jdx0] = self.sequences.new_states.bw2[jdx0]
1064
+ self.sequences.old_states.lz = self.sequences.new_states.lz
1065
+ for jdx0 in range(self.sequences.states._sg1_length_0):
1066
+ self.sequences.old_states.sg1[jdx0] = self.sequences.new_states.sg1[jdx0]
1067
+ self.sequences.old_states.sg2 = self.sequences.new_states.sg2
1068
+ self.sequences.old_states.sg3 = self.sequences.new_states.sg3
1069
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
1070
+ self.aetmodel.new2old()
1071
+ if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
1072
+ self.rconcmodel.new2old()
1073
+ cpdef inline void run(self) noexcept nogil:
1074
+ self.calc_tc_v1()
1075
+ self.calc_fracrain_v1()
1076
+ self.calc_rfc_sfc_v1()
1077
+ self.calc_pc_v1()
1078
+ self.calc_tf_ic_v1()
1079
+ self.calc_ei_ic_v1()
1080
+ self.calc_sp_wc_v1()
1081
+ self.calc_spl_wcl_sp_wc_v1()
1082
+ self.calc_spg_wcg_sp_wc_v1()
1083
+ self.calc_cfact_v1()
1084
+ self.calc_melt_sp_wc_v1()
1085
+ self.calc_refr_sp_wc_v1()
1086
+ self.calc_in_wc_v1()
1087
+ self.calc_swe_v1()
1088
+ self.calc_sr_v1()
1089
+ self.calc_gact_v1()
1090
+ self.calc_glmelt_in_v1()
1091
+ self.calc_r_sm_v1()
1092
+ self.calc_cf_sm_v1()
1093
+ self.calc_ea_sm_v1()
1094
+ self.calc_inuz_v1()
1095
+ self.calc_suz_v1()
1096
+ self.calc_contriarea_v1()
1097
+ self.calc_q0_perc_uz_v1()
1098
+ self.calc_dp_suz_v1()
1099
+ self.calc_qab1_qvs1_bw1_v1()
1100
+ self.calc_qab2_qvs2_bw2_v1()
1101
+ self.calc_rs_ri_suz_v1()
1102
+ self.calc_lz_v1()
1103
+ self.calc_lz_v2()
1104
+ self.calc_gr1_v1()
1105
+ self.calc_rg1_sg1_v1()
1106
+ self.calc_gr2_gr3_v1()
1107
+ self.calc_rg2_sg2_v1()
1108
+ self.calc_rg3_sg3_v1()
1109
+ self.calc_el_sg2_sg3_v1()
1110
+ self.calc_el_lz_v1()
1111
+ self.calc_q1_lz_v1()
1112
+ self.calc_inrc_v1()
1113
+ self.calc_inrc_v3()
1114
+ self.calc_outrc_v1()
1115
+ self.calc_inrc_v2()
1116
+ self.calc_rt_v1()
1117
+ self.calc_rt_v2()
1118
+ self.calc_qt_v1()
1119
+ cpdef inline void update_inlets(self) noexcept nogil:
1120
+ pass
1121
+ cpdef inline void update_outlets(self) noexcept nogil:
1122
+ self.pass_q_v1()
1123
+ cpdef inline void update_receivers(self, numpy.int64_t idx) noexcept nogil:
1124
+ self.idx_sim = idx
1125
+ pass
1126
+ cpdef inline void update_senders(self, numpy.int64_t idx) noexcept nogil:
1127
+ self.idx_sim = idx
1128
+ pass
1129
+ cpdef inline void update_outputs(self) noexcept nogil:
1130
+ self.sequences.factors.update_outputs()
1131
+ self.sequences.fluxes.update_outputs()
1132
+ self.sequences.states.update_outputs()
1133
+ cpdef inline void calc_tc_v1(self) noexcept nogil:
1134
+ cdef numpy.int64_t k
1135
+ for k in range(self.parameters.control.nmbzones):
1136
+ 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)
1137
+ cpdef inline void calc_fracrain_v1(self) noexcept nogil:
1138
+ cdef double d_dt
1139
+ cdef numpy.int64_t k
1140
+ for k in range(self.parameters.control.nmbzones):
1141
+ d_dt = self.parameters.control.ttint[k] / 2.0
1142
+ if self.sequences.factors.tc[k] >= (self.parameters.control.tt[k] + d_dt):
1143
+ self.sequences.factors.fracrain[k] = 1.0
1144
+ elif self.sequences.factors.tc[k] <= (self.parameters.control.tt[k] - d_dt):
1145
+ self.sequences.factors.fracrain[k] = 0.0
1146
+ else:
1147
+ self.sequences.factors.fracrain[k] = (self.sequences.factors.tc[k] - (self.parameters.control.tt[k] - d_dt)) / self.parameters.control.ttint[k]
1148
+ cpdef inline void calc_rfc_sfc_v1(self) noexcept nogil:
1149
+ cdef numpy.int64_t k
1150
+ for k in range(self.parameters.control.nmbzones):
1151
+ self.sequences.factors.rfc[k] = self.sequences.factors.fracrain[k] * self.parameters.control.rfcf[k]
1152
+ self.sequences.factors.sfc[k] = (1.0 - self.sequences.factors.fracrain[k]) * self.parameters.control.sfcf[k]
1153
+ cpdef inline void calc_pc_v1(self) noexcept nogil:
1154
+ cdef numpy.int64_t k
1155
+ for k in range(self.parameters.control.nmbzones):
1156
+ 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))
1157
+ if self.sequences.fluxes.pc[k] <= 0.0:
1158
+ self.sequences.fluxes.pc[k] = 0.0
1159
+ else:
1160
+ 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]))
1161
+ cpdef inline void calc_tf_ic_v1(self) noexcept nogil:
1162
+ cdef numpy.int64_t k
1163
+ for k in range(self.parameters.control.nmbzones):
1164
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
1165
+ self.sequences.fluxes.tf[k] = max(self.sequences.fluxes.pc[k] - (self.parameters.control.icmax[k] - self.sequences.states.ic[k]), 0.0)
1166
+ self.sequences.states.ic[k] = self.sequences.states.ic[k] + (self.sequences.fluxes.pc[k] - self.sequences.fluxes.tf[k])
1167
+ else:
1168
+ self.sequences.fluxes.tf[k] = self.sequences.fluxes.pc[k]
1169
+ self.sequences.states.ic[k] = 0.0
1170
+ cpdef inline void calc_ei_ic_v1(self) noexcept nogil:
1171
+ if self.aetmodel_typeid == 1:
1172
+ self.calc_ei_ic_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1173
+ cpdef inline void calc_sp_wc_v1(self) noexcept nogil:
1174
+ cdef numpy.int64_t c
1175
+ cdef double d_snow
1176
+ cdef double d_rain
1177
+ cdef double d_denom
1178
+ cdef numpy.int64_t k
1179
+ for k in range(self.parameters.control.nmbzones):
1180
+ if self.parameters.control.zonetype[k] != ILAKE:
1181
+ d_denom = self.sequences.factors.rfc[k] + self.sequences.factors.sfc[k]
1182
+ if d_denom > 0.0:
1183
+ d_rain = self.sequences.fluxes.tf[k] * self.sequences.factors.rfc[k] / d_denom
1184
+ d_snow = self.sequences.fluxes.tf[k] * self.sequences.factors.sfc[k] / d_denom
1185
+ for c in range(self.parameters.control.sclass):
1186
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.parameters.control.sfdist[c] * d_rain)
1187
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.parameters.control.sfdist[c] * d_snow)
1188
+ else:
1189
+ for c in range(self.parameters.control.sclass):
1190
+ self.sequences.states.wc[c, k] = 0.0
1191
+ self.sequences.states.sp[c, k] = 0.0
1192
+ cpdef inline void calc_spl_wcl_sp_wc_v1(self) noexcept nogil:
1193
+ cdef double d_excess_wc
1194
+ cdef double d_excess_sp
1195
+ cdef double d_excess
1196
+ cdef double d_snow
1197
+ cdef numpy.int64_t c
1198
+ cdef numpy.int64_t k
1199
+ for k in range(self.parameters.control.nmbzones):
1200
+ self.sequences.fluxes.spl[k] = 0.0
1201
+ self.sequences.fluxes.wcl[k] = 0.0
1202
+ if self.parameters.control.zonetype[k] == ILAKE:
1203
+ for c in range(self.parameters.control.sclass):
1204
+ self.sequences.states.sp[c, k] = 0.0
1205
+ self.sequences.states.wc[c, k] = 0.0
1206
+ elif not isinf(self.parameters.control.smax[k]):
1207
+ for c in range(self.parameters.control.sclass):
1208
+ d_snow = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
1209
+ d_excess = d_snow - self.parameters.control.smax[k]
1210
+ if d_excess > 0.0:
1211
+ d_excess_sp = d_excess * self.sequences.states.sp[c, k] / d_snow
1212
+ d_excess_wc = d_excess * self.sequences.states.wc[c, k] / d_snow
1213
+ self.sequences.fluxes.spl[k] = self.sequences.fluxes.spl[k] + (d_excess_sp / self.parameters.control.sclass)
1214
+ self.sequences.fluxes.wcl[k] = self.sequences.fluxes.wcl[k] + (d_excess_wc / self.parameters.control.sclass)
1215
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (d_excess_sp)
1216
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (d_excess_wc)
1217
+ cpdef inline void calc_spg_wcg_sp_wc_v1(self) noexcept nogil:
1218
+ cdef double d_excess_liquid_land
1219
+ cdef double d_excess_frozen_land
1220
+ cdef double d_delta_wc_zone
1221
+ cdef double d_delta_sp_zone
1222
+ cdef double d_fraction_gain_class
1223
+ cdef double d_excess_liquid_zone_actual
1224
+ cdef double d_excess_frozen_zone_actual
1225
+ cdef double d_fraction_gain_zone
1226
+ cdef double d_gain_max_cum
1227
+ cdef double d_excess_total_zone
1228
+ cdef double d_excess_liquid_zone
1229
+ cdef double d_excess_frozen_zone
1230
+ cdef double d_excess_liquid_basin
1231
+ cdef double d_excess_frozen_basin
1232
+ cdef double d_factor_excess
1233
+ cdef double d_factor_gain
1234
+ cdef double d_fraction_gain
1235
+ cdef double d_gain_max
1236
+ cdef double d_gain_pot
1237
+ cdef double d_gain_total
1238
+ cdef double d_gain_liquid
1239
+ cdef double d_gain_frozen
1240
+ cdef double d_f
1241
+ cdef numpy.int64_t t
1242
+ cdef numpy.int64_t f
1243
+ cdef numpy.int64_t c
1244
+ cdef numpy.int64_t i
1245
+ for i in range(self.parameters.control.nmbzones):
1246
+ self.sequences.fluxes.spg[i] = 0.0
1247
+ self.sequences.fluxes.wcg[i] = 0.0
1248
+ self.sequences.aides.spe[i] = 0.0
1249
+ self.sequences.aides.wce[i] = 0.0
1250
+ if self.parameters.control.zonetype[i] == ILAKE:
1251
+ for c in range(self.parameters.control.sclass):
1252
+ self.sequences.states.sp[c, i] = 0.0
1253
+ self.sequences.states.wc[c, i] = 0.0
1254
+ for i in range(self.parameters.derived.srednumber):
1255
+ f, t = self.parameters.derived.sredorder[i, 0], self.parameters.derived.sredorder[i, 1]
1256
+ d_f = self.parameters.derived.zonearearatios[f, t] * self.parameters.control.sred[f, t]
1257
+ d_gain_frozen = d_f * (self.sequences.fluxes.spl[f] + self.sequences.aides.spe[f])
1258
+ d_gain_liquid = d_f * (self.sequences.fluxes.wcl[f] + self.sequences.aides.wce[f])
1259
+ d_gain_total = d_gain_frozen + d_gain_liquid
1260
+ for c in range(self.parameters.control.sclass):
1261
+ d_gain_pot = self.parameters.control.sfdist[c] * d_gain_total
1262
+ if d_gain_pot > 0.0:
1263
+ d_gain_max = self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t]
1264
+ d_fraction_gain = min(d_gain_max / d_gain_pot, 1.0)
1265
+ d_factor_gain = d_fraction_gain * self.parameters.control.sfdist[c]
1266
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_factor_gain * d_gain_frozen / self.parameters.control.sclass)
1267
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_factor_gain * d_gain_liquid / self.parameters.control.sclass)
1268
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_factor_gain * d_gain_frozen)
1269
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_factor_gain * d_gain_liquid)
1270
+ d_factor_excess = (1.0 - d_fraction_gain) * self.parameters.control.sfdist[c]
1271
+ self.sequences.aides.spe[t] = self.sequences.aides.spe[t] + (d_factor_excess * d_gain_frozen / self.parameters.control.sclass)
1272
+ self.sequences.aides.wce[t] = self.sequences.aides.wce[t] + (d_factor_excess * d_gain_liquid / self.parameters.control.sclass)
1273
+ d_excess_frozen_basin, d_excess_liquid_basin = 0.0, 0.0
1274
+ for i in range(self.parameters.control.nmbzones):
1275
+ if self.parameters.derived.sredend[i]:
1276
+ d_excess_frozen_basin = d_excess_frozen_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.spe[i] + self.sequences.fluxes.spl[i]))
1277
+ d_excess_liquid_basin = d_excess_liquid_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.wce[i] + self.sequences.fluxes.wcl[i]))
1278
+ if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
1279
+ return
1280
+ for i in range(self.parameters.control.nmbzones):
1281
+ t = self.parameters.derived.indiceszonez[i]
1282
+ if self.parameters.control.zonetype[t] == ILAKE:
1283
+ continue
1284
+ d_excess_frozen_zone = d_excess_frozen_basin / self.parameters.derived.relzoneareas[t]
1285
+ d_excess_liquid_zone = d_excess_liquid_basin / self.parameters.derived.relzoneareas[t]
1286
+ d_excess_total_zone = d_excess_frozen_zone + d_excess_liquid_zone
1287
+ d_gain_max_cum = 0.0
1288
+ for c in range(self.parameters.control.sclass):
1289
+ 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])
1290
+ if d_gain_max_cum <= 0.0:
1291
+ continue
1292
+ d_fraction_gain_zone = min( d_gain_max_cum / self.parameters.control.sclass / d_excess_total_zone, 1.0 )
1293
+ d_excess_frozen_zone_actual = d_fraction_gain_zone * d_excess_frozen_zone
1294
+ d_excess_liquid_zone_actual = d_fraction_gain_zone * d_excess_liquid_zone
1295
+ for c in range(self.parameters.control.sclass):
1296
+ 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
1297
+ d_delta_sp_zone = d_fraction_gain_class * d_excess_frozen_zone_actual
1298
+ d_delta_wc_zone = d_fraction_gain_class * d_excess_liquid_zone_actual
1299
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_delta_sp_zone)
1300
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_delta_wc_zone)
1301
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_delta_sp_zone * self.parameters.control.sclass)
1302
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_delta_wc_zone * self.parameters.control.sclass)
1303
+ d_excess_frozen_basin = d_excess_frozen_basin - (d_excess_frozen_zone_actual * self.parameters.derived.relzoneareas[t])
1304
+ d_excess_liquid_basin = d_excess_liquid_basin - (d_excess_liquid_zone_actual * self.parameters.derived.relzoneareas[t])
1305
+ if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
1306
+ return
1307
+ d_excess_frozen_land = d_excess_frozen_basin / self.parameters.derived.rellandarea
1308
+ d_excess_liquid_land = d_excess_liquid_basin / self.parameters.derived.rellandarea
1309
+ for t in range(self.parameters.control.nmbzones):
1310
+ if self.parameters.control.zonetype[t] != ILAKE:
1311
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_excess_frozen_land)
1312
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_excess_liquid_land)
1313
+ for c in range(self.parameters.control.sclass):
1314
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_excess_frozen_land)
1315
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_excess_liquid_land)
1316
+ return
1317
+ cpdef inline void calc_cfact_v1(self) noexcept nogil:
1318
+ cdef numpy.int64_t k
1319
+ cdef double d_factor
1320
+ d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
1321
+ for k in range(self.parameters.control.nmbzones):
1322
+ if self.parameters.control.zonetype[k] != ILAKE:
1323
+ self.sequences.factors.cfact[k] = max(self.parameters.control.cfmax[k] + d_factor * self.parameters.control.cfvar[k], 0.0)
1324
+ else:
1325
+ self.sequences.factors.cfact[k] = 0.0
1326
+ cpdef inline void calc_melt_sp_wc_v1(self) noexcept nogil:
1327
+ cdef numpy.int64_t c
1328
+ cdef double d_potmelt
1329
+ cdef numpy.int64_t k
1330
+ for k in range(self.parameters.control.nmbzones):
1331
+ if self.parameters.control.zonetype[k] != ILAKE:
1332
+ if self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]:
1333
+ d_potmelt = self.sequences.factors.cfact[k] * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
1334
+ for c in range(self.parameters.control.sclass):
1335
+ self.sequences.fluxes.melt[c, k] = min(d_potmelt, self.sequences.states.sp[c, k])
1336
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (self.sequences.fluxes.melt[c, k])
1337
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.sequences.fluxes.melt[c, k])
1338
+ else:
1339
+ for c in range(self.parameters.control.sclass):
1340
+ self.sequences.fluxes.melt[c, k] = 0.0
1341
+ else:
1342
+ for c in range(self.parameters.control.sclass):
1343
+ self.sequences.fluxes.melt[c, k] = 0.0
1344
+ self.sequences.states.wc[c, k] = 0.0
1345
+ self.sequences.states.sp[c, k] = 0.0
1346
+ cpdef inline void calc_refr_sp_wc_v1(self) noexcept nogil:
1347
+ cdef numpy.int64_t c
1348
+ cdef double d_potrefr
1349
+ cdef numpy.int64_t k
1350
+ for k in range(self.parameters.control.nmbzones):
1351
+ if self.parameters.control.zonetype[k] != ILAKE:
1352
+ if self.sequences.factors.tc[k] < self.parameters.derived.ttm[k]:
1353
+ d_potrefr = self.parameters.control.cfr[k] * self.parameters.control.cfmax[k] * (self.parameters.derived.ttm[k] - self.sequences.factors.tc[k])
1354
+ for c in range(self.parameters.control.sclass):
1355
+ self.sequences.fluxes.refr[c, k] = min(d_potrefr, self.sequences.states.wc[c, k])
1356
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.sequences.fluxes.refr[c, k])
1357
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (self.sequences.fluxes.refr[c, k])
1358
+ else:
1359
+ for c in range(self.parameters.control.sclass):
1360
+ self.sequences.fluxes.refr[c, k] = 0.0
1361
+ else:
1362
+ for c in range(self.parameters.control.sclass):
1363
+ self.sequences.fluxes.refr[c, k] = 0.0
1364
+ self.sequences.states.wc[c, k] = 0.0
1365
+ self.sequences.states.sp[c, k] = 0.0
1366
+ cpdef inline void calc_in_wc_v1(self) noexcept nogil:
1367
+ cdef double d_wc_old
1368
+ cdef numpy.int64_t c
1369
+ cdef numpy.int64_t k
1370
+ for k in range(self.parameters.control.nmbzones):
1371
+ self.sequences.fluxes.in_[k] = 0.0
1372
+ if self.parameters.control.zonetype[k] != ILAKE:
1373
+ for c in range(self.parameters.control.sclass):
1374
+ d_wc_old = self.sequences.states.wc[c, k]
1375
+ self.sequences.states.wc[c, k] = min(d_wc_old, self.parameters.control.whc[k] * self.sequences.states.sp[c, k])
1376
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + ((d_wc_old - self.sequences.states.wc[c, k]) / self.parameters.control.sclass)
1377
+ else:
1378
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.tf[k]
1379
+ for c in range(self.parameters.control.sclass):
1380
+ self.sequences.states.wc[c, k] = 0.0
1381
+ cpdef inline void calc_swe_v1(self) noexcept nogil:
1382
+ cdef numpy.int64_t c
1383
+ cdef numpy.int64_t k
1384
+ for k in range(self.parameters.control.nmbzones):
1385
+ if self.parameters.control.zonetype[k] != ILAKE:
1386
+ for c in range(self.parameters.control.sclass):
1387
+ self.sequences.factors.swe[c, k] = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
1388
+ else:
1389
+ for c in range(self.parameters.control.sclass):
1390
+ self.sequences.factors.swe[c, k] = 0.0
1391
+ cpdef inline void calc_sr_v1(self) noexcept nogil:
1392
+ cdef numpy.int64_t k
1393
+ for k in range(self.parameters.control.nmbzones):
1394
+ if self.parameters.control.zonetype[k] == SEALED:
1395
+ self.sequences.fluxes.sr[k] = self.sequences.fluxes.in_[k]
1396
+ else:
1397
+ self.sequences.fluxes.sr[k] = 0.0
1398
+ cpdef inline void calc_gact_v1(self) noexcept nogil:
1399
+ cdef numpy.int64_t k
1400
+ cdef double d_factor
1401
+ d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
1402
+ for k in range(self.parameters.control.nmbzones):
1403
+ if self.parameters.control.zonetype[k] == GLACIER:
1404
+ self.sequences.factors.gact[k] = max(self.parameters.control.gmelt[k] + d_factor * self.parameters.control.gvar[k], 0.0)
1405
+ else:
1406
+ self.sequences.factors.gact[k] = 0.0
1407
+ cpdef inline void calc_glmelt_in_v1(self) noexcept nogil:
1408
+ cdef numpy.int64_t c
1409
+ cdef double d_glmeltpot
1410
+ cdef numpy.int64_t k
1411
+ for k in range(self.parameters.control.nmbzones):
1412
+ self.sequences.fluxes.glmelt[k] = 0.0
1413
+ if (self.parameters.control.zonetype[k] == GLACIER) and (self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]):
1414
+ d_glmeltpot = self.sequences.factors.gact[k] / self.parameters.control.sclass * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
1415
+ for c in range(self.parameters.control.sclass):
1416
+ if self.sequences.states.sp[c, k] <= 0.0:
1417
+ self.sequences.fluxes.glmelt[k] = self.sequences.fluxes.glmelt[k] + (d_glmeltpot)
1418
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + (d_glmeltpot)
1419
+ cpdef inline void calc_r_sm_v1(self) noexcept nogil:
1420
+ cdef numpy.int64_t k
1421
+ for k in range(self.parameters.control.nmbzones):
1422
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1423
+ if self.parameters.control.fc[k] > 0.0:
1424
+ 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]
1425
+ 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])
1426
+ else:
1427
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
1428
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] + (self.sequences.fluxes.in_[k] - self.sequences.fluxes.r[k])
1429
+ else:
1430
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
1431
+ self.sequences.states.sm[k] = 0.0
1432
+ cpdef inline void calc_cf_sm_v1(self) noexcept nogil:
1433
+ cdef numpy.int64_t k
1434
+ for k in range(self.parameters.control.nmbzones):
1435
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1436
+ if self.parameters.control.fc[k] > 0.0:
1437
+ self.sequences.fluxes.cf[k] = self.parameters.control.cflux[k] * (1.0 - self.sequences.states.sm[k] / self.parameters.control.fc[k])
1438
+ self.sequences.fluxes.cf[k] = min(self.sequences.fluxes.cf[k], self.sequences.states.uz + self.sequences.fluxes.r[k])
1439
+ self.sequences.fluxes.cf[k] = min(self.sequences.fluxes.cf[k], self.parameters.control.fc[k] - self.sequences.states.sm[k])
1440
+ else:
1441
+ self.sequences.fluxes.cf[k] = 0.0
1442
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] + (self.sequences.fluxes.cf[k])
1443
+ else:
1444
+ self.sequences.fluxes.cf[k] = 0.0
1445
+ self.sequences.states.sm[k] = 0.0
1446
+ cpdef inline void calc_ea_sm_v1(self) noexcept nogil:
1447
+ if self.aetmodel_typeid == 1:
1448
+ self.calc_ea_sm_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1449
+ cpdef inline void calc_inuz_v1(self) noexcept nogil:
1450
+ cdef numpy.int64_t k
1451
+ self.sequences.fluxes.inuz = 0.0
1452
+ for k in range(self.parameters.control.nmbzones):
1453
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1454
+ self.sequences.fluxes.inuz = self.sequences.fluxes.inuz + (( self.parameters.derived.relzoneareas[k] / self.parameters.derived.relupperzonearea * (self.sequences.fluxes.r[k] - self.sequences.fluxes.cf[k]) ))
1455
+ cpdef inline void calc_suz_v1(self) noexcept nogil:
1456
+ cdef numpy.int64_t k
1457
+ for k in range(self.parameters.control.nmbzones):
1458
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1459
+ self.sequences.states.suz[k] = self.sequences.states.suz[k] + (self.sequences.fluxes.r[k])
1460
+ else:
1461
+ self.sequences.states.suz[k] = 0.0
1462
+ cpdef inline void calc_contriarea_v1(self) noexcept nogil:
1463
+ cdef double d_weight
1464
+ cdef numpy.int64_t k
1465
+ self.sequences.factors.contriarea = 1.0
1466
+ if self.parameters.control.resparea and (self.parameters.derived.relsoilarea > 0.0):
1467
+ for k in range(self.parameters.control.nmbzones):
1468
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1469
+ if self.parameters.control.fc[k] > 0.0:
1470
+ d_weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.relsoilarea
1471
+ self.sequences.factors.contriarea = self.sequences.factors.contriarea * ((self.sequences.states.sm[k] / self.parameters.control.fc[k]) ** d_weight)
1472
+ self.sequences.factors.contriarea = self.sequences.factors.contriarea ** (self.parameters.control.beta[k])
1473
+ cpdef inline void calc_q0_perc_uz_v1(self) noexcept nogil:
1474
+ cdef double factor
1475
+ cdef double error
1476
+ cdef double q0
1477
+ cdef double perc
1478
+ cdef numpy.int64_t _
1479
+ cdef double uz_old
1480
+ uz_old = self.sequences.states.uz
1481
+ self.sequences.fluxes.perc = 0.0
1482
+ self.sequences.fluxes.q0 = 0.0
1483
+ for _ in range(self.parameters.control.recstep):
1484
+ self.sequences.states.uz = max(self.sequences.states.uz + self.parameters.derived.dt * self.sequences.fluxes.inuz, 0.0)
1485
+ perc = min(self.parameters.derived.dt * self.parameters.control.percmax * self.sequences.factors.contriarea, self.sequences.states.uz)
1486
+ self.sequences.states.uz = self.sequences.states.uz - (perc)
1487
+ self.sequences.fluxes.perc = self.sequences.fluxes.perc + (perc)
1488
+ if self.sequences.states.uz > 0.0:
1489
+ if self.sequences.factors.contriarea > 0.0:
1490
+ q0 = min( self.parameters.derived.dt * self.parameters.control.k * (self.sequences.states.uz / self.sequences.factors.contriarea) ** (1.0 + self.parameters.control.alpha), self.sequences.states.uz, )
1491
+ else:
1492
+ q0 = self.sequences.states.uz
1493
+ self.sequences.states.uz = self.sequences.states.uz - (q0)
1494
+ self.sequences.fluxes.q0 = self.sequences.fluxes.q0 + (q0)
1495
+ error = self.sequences.states.uz - (uz_old + self.sequences.fluxes.inuz - self.sequences.fluxes.perc - self.sequences.fluxes.q0)
1496
+ if error > 0.0:
1497
+ factor = 1.0 - error / (self.sequences.fluxes.perc + self.sequences.fluxes.q0)
1498
+ self.sequences.fluxes.perc = self.sequences.fluxes.perc * (factor)
1499
+ self.sequences.fluxes.q0 = self.sequences.fluxes.q0 * (factor)
1500
+ cpdef inline void calc_dp_suz_v1(self) noexcept nogil:
1501
+ cdef numpy.int64_t k
1502
+ for k in range(self.parameters.control.nmbzones):
1503
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1504
+ self.sequences.fluxes.dp[k] = min(self.sequences.states.suz[k], self.parameters.control.percmax)
1505
+ self.sequences.states.suz[k] = self.sequences.states.suz[k] - (self.sequences.fluxes.dp[k])
1506
+ else:
1507
+ self.sequences.fluxes.dp[k] = 0.0
1508
+ self.sequences.states.suz[k] = 0.0
1509
+ cpdef inline void calc_qab1_qvs1_bw1_v1(self) noexcept nogil:
1510
+ cdef numpy.int64_t k
1511
+ for k in range(self.parameters.control.nmbzones):
1512
+ self.sequences.fluxes.qab1[k] = 0.0
1513
+ self.sequences.fluxes.qvs1[k] = 0.0
1514
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1515
+ self.calc_qab_qvs_bw_v1( k, self.parameters.control.h1, self.parameters.control.tab1, self.parameters.control.tvs1, self.sequences.states.bw1, self.sequences.fluxes.r, self.sequences.fluxes.qab1, self.sequences.fluxes.qvs1, 0.0, )
1516
+ else:
1517
+ self.sequences.states.bw1[k] = 0.0
1518
+ cpdef inline void calc_qab2_qvs2_bw2_v1(self) noexcept nogil:
1519
+ cdef numpy.int64_t k
1520
+ for k in range(self.parameters.control.nmbzones):
1521
+ self.sequences.fluxes.qab2[k] = 0.0
1522
+ self.sequences.fluxes.qvs2[k] = 0.0
1523
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1524
+ self.calc_qab_qvs_bw_v1( k, self.parameters.control.h2, self.parameters.control.tab2, self.parameters.control.tvs2, self.sequences.states.bw2, self.sequences.fluxes.qvs1, self.sequences.fluxes.qab2, self.sequences.fluxes.qvs2, 0.0, )
1525
+ else:
1526
+ self.sequences.states.bw2[k] = 0.0
1527
+ cpdef inline void calc_rs_ri_suz_v1(self) noexcept nogil:
1528
+ cdef double d_f
1529
+ cdef numpy.int64_t k
1530
+ for k in range(self.parameters.control.nmbzones):
1531
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1532
+ if self.sequences.states.suz[k] > self.parameters.control.sgr[k]:
1533
+ self.sequences.fluxes.rs[k] = (self.sequences.states.suz[k] - self.parameters.control.sgr[k]) * (1.0 - self.parameters.derived.w0[k])
1534
+ else:
1535
+ self.sequences.fluxes.rs[k] = 0.0
1536
+ self.sequences.fluxes.ri[k] = self.sequences.states.suz[k] * (1.0 - self.parameters.derived.w1[k])
1537
+ self.sequences.states.suz[k] = self.sequences.states.suz[k] - (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k])
1538
+ if self.sequences.states.suz[k] < 0.0:
1539
+ d_f = 1.0 - self.sequences.states.suz[k] / (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k])
1540
+ self.sequences.fluxes.rs[k] = self.sequences.fluxes.rs[k] * (d_f)
1541
+ self.sequences.fluxes.ri[k] = self.sequences.fluxes.ri[k] * (d_f)
1542
+ self.sequences.states.suz[k] = 0.0
1543
+ else:
1544
+ self.sequences.states.suz[k] = 0.0
1545
+ self.sequences.fluxes.rs[k] = 0.0
1546
+ self.sequences.fluxes.ri[k] = 0.0
1547
+ cpdef inline void calc_lz_v1(self) noexcept nogil:
1548
+ cdef numpy.int64_t k
1549
+ if self.parameters.derived.rellowerzonearea > 0.0:
1550
+ self.sequences.states.lz = self.sequences.states.lz + (self.parameters.derived.relupperzonearea / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.perc)
1551
+ for k in range(self.parameters.control.nmbzones):
1552
+ if self.parameters.control.zonetype[k] == ILAKE:
1553
+ self.sequences.states.lz = self.sequences.states.lz + (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.pc[k])
1554
+ else:
1555
+ self.sequences.states.lz = 0.0
1556
+ cpdef inline void calc_lz_v2(self) noexcept nogil:
1557
+ cdef numpy.int64_t k
1558
+ for k in range(self.parameters.control.nmbzones):
1559
+ if self.parameters.control.zonetype[k] == ILAKE:
1560
+ self.sequences.states.lz = self.sequences.states.lz + (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.pc[k])
1561
+ elif self.parameters.control.zonetype[k] != SEALED:
1562
+ self.sequences.states.lz = self.sequences.states.lz + (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.qvs2[k])
1563
+ cpdef inline void calc_gr1_v1(self) noexcept nogil:
1564
+ cdef numpy.int64_t k
1565
+ for k in range(self.parameters.control.nmbzones):
1566
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1567
+ 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])
1568
+ 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))
1569
+ else:
1570
+ self.sequences.states.sg1[k] = 0.0
1571
+ self.sequences.fluxes.gr1[k] = 0.0
1572
+ cpdef inline void calc_rg1_sg1_v1(self) noexcept nogil:
1573
+ cdef double d_sg1
1574
+ cdef numpy.int64_t k
1575
+ for k in range(self.parameters.control.nmbzones):
1576
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1577
+ d_sg1 = self.sequences.states.sg1[k]
1578
+ 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] )
1579
+ self.sequences.fluxes.rg1[k] = d_sg1 + self.sequences.fluxes.gr1[k] - self.sequences.states.sg1[k]
1580
+ else:
1581
+ self.sequences.states.sg1[k] = 0.0
1582
+ self.sequences.fluxes.rg1[k] = 0.0
1583
+ cpdef inline void calc_gr2_gr3_v1(self) noexcept nogil:
1584
+ cdef double d_total
1585
+ cdef double d_weight
1586
+ cdef numpy.int64_t k
1587
+ self.sequences.fluxes.gr2 = 0.0
1588
+ self.sequences.fluxes.gr3 = 0.0
1589
+ for k in range(self.parameters.control.nmbzones):
1590
+ if self.parameters.control.zonetype[k] == SEALED:
1591
+ continue
1592
+ d_weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea
1593
+ if self.parameters.control.zonetype[k] == ILAKE:
1594
+ d_total = d_weight * self.sequences.fluxes.pc[k]
1595
+ else:
1596
+ d_total = d_weight * (self.sequences.fluxes.dp[k] - self.sequences.fluxes.gr1[k])
1597
+ self.sequences.fluxes.gr2 = self.sequences.fluxes.gr2 + (self.parameters.fixed.fsg * d_total)
1598
+ self.sequences.fluxes.gr3 = self.sequences.fluxes.gr3 + ((1.0 - self.parameters.fixed.fsg) * d_total)
1599
+ cpdef inline void calc_rg2_sg2_v1(self) noexcept nogil:
1600
+ cdef double d_add
1601
+ cdef double d_w3
1602
+ cdef double d_k3
1603
+ cdef double d_gr2
1604
+ cdef double d_sg2
1605
+ d_sg2 = self.sequences.states.sg2
1606
+ d_gr2 = self.sequences.fluxes.gr2
1607
+ d_k3 = self.parameters.control.k3
1608
+ d_w3 = self.parameters.derived.w3
1609
+ if d_sg2 < 0.0 < d_gr2:
1610
+ d_add = min(-self.sequences.states.sg2, d_gr2)
1611
+ d_k3 = d_k3 * (d_gr2 / d_add)
1612
+ d_w3 = exp(-1.0 / d_k3)
1613
+ d_sg2 = d_sg2 + (d_add)
1614
+ d_gr2 = d_gr2 - (d_add)
1615
+ if d_sg2 >= 0.0:
1616
+ self.sequences.states.sg2 = d_w3 * d_sg2 + (1.0 - d_w3) * d_k3 * d_gr2
1617
+ self.sequences.fluxes.rg2 = d_sg2 + d_gr2 - self.sequences.states.sg2
1618
+ else:
1619
+ self.sequences.states.sg2 = d_sg2
1620
+ self.sequences.fluxes.rg2 = 0.0
1621
+ cpdef inline void calc_rg3_sg3_v1(self) noexcept nogil:
1622
+ cdef double d_add
1623
+ cdef double d_w4
1624
+ cdef double d_k4
1625
+ cdef double d_gr3
1626
+ cdef double d_sg3
1627
+ d_sg3 = self.sequences.states.sg3
1628
+ d_gr3 = self.sequences.fluxes.gr3
1629
+ d_k4 = self.parameters.derived.k4
1630
+ d_w4 = self.parameters.derived.w4
1631
+ if d_sg3 < 0.0 < d_gr3:
1632
+ d_add = min(-self.sequences.states.sg3, d_gr3)
1633
+ d_k4 = d_k4 * (d_gr3 / d_add)
1634
+ d_w4 = exp(-1.0 / d_k4)
1635
+ d_sg3 = d_sg3 + (d_add)
1636
+ d_gr3 = d_gr3 - (d_add)
1637
+ if d_sg3 >= 0.0:
1638
+ self.sequences.states.sg3 = d_w4 * d_sg3 + (1.0 - d_w4) * d_k4 * d_gr3
1639
+ self.sequences.fluxes.rg3 = d_sg3 + d_gr3 - self.sequences.states.sg3
1640
+ else:
1641
+ self.sequences.states.sg3 = d_sg3
1642
+ self.sequences.fluxes.rg3 = 0.0
1643
+ cpdef inline void calc_el_sg2_sg3_v1(self) noexcept nogil:
1644
+ if self.aetmodel_typeid == 1:
1645
+ self.calc_el_sg2_sg3_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1646
+ cpdef inline void calc_el_lz_v1(self) noexcept nogil:
1647
+ if self.aetmodel_typeid == 1:
1648
+ self.calc_el_lz_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1649
+ cpdef inline void calc_q1_lz_v1(self) noexcept nogil:
1650
+ if self.sequences.states.lz > 0.0:
1651
+ self.sequences.fluxes.q1 = self.parameters.control.k4 * self.sequences.states.lz ** (1.0 + self.parameters.control.gamma)
1652
+ else:
1653
+ self.sequences.fluxes.q1 = 0.0
1654
+ self.sequences.states.lz = self.sequences.states.lz - (self.sequences.fluxes.q1)
1655
+ cpdef inline void calc_inrc_v1(self) noexcept nogil:
1656
+ cdef numpy.int64_t k
1657
+ self.sequences.fluxes.inrc = self.parameters.derived.relupperzonearea * self.sequences.fluxes.q0 + self.parameters.derived.rellowerzonearea * self.sequences.fluxes.q1
1658
+ for k in range(self.parameters.control.nmbzones):
1659
+ if self.parameters.control.zonetype[k] == SEALED:
1660
+ self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (self.parameters.derived.relzoneareas[k] * self.sequences.fluxes.r[k])
1661
+ cpdef inline void calc_inrc_v3(self) noexcept nogil:
1662
+ cdef double d_weight
1663
+ cdef numpy.int64_t k
1664
+ self.sequences.fluxes.inrc = 0.0
1665
+ for k in range(self.parameters.control.nmbzones):
1666
+ if self.parameters.control.zonetype[k] == ILAKE:
1667
+ continue
1668
+ d_weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellandarea
1669
+ if self.parameters.control.zonetype[k] == SEALED:
1670
+ self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (d_weight * self.sequences.fluxes.r[k])
1671
+ else:
1672
+ self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (d_weight * (self.sequences.fluxes.qab1[k] + self.sequences.fluxes.qab2[k]))
1673
+ cpdef inline void calc_outrc_v1(self) noexcept nogil:
1674
+ if self.rconcmodel is None:
1675
+ self.sequences.fluxes.outrc = self.sequences.fluxes.inrc
1676
+ elif self.rconcmodel_typeid == 1:
1677
+ self.calc_outrc_rconcmodel_v1( (<masterinterface.MasterInterface>self.rconcmodel) )
1678
+ cpdef inline void calc_inrc_v2(self) noexcept nogil:
1679
+ cdef numpy.int64_t k
1680
+ self.sequences.fluxes.inrc = self.parameters.derived.rellowerzonearea * (self.sequences.fluxes.rg2 + self.sequences.fluxes.rg3)
1681
+ for k in range(self.parameters.control.nmbzones):
1682
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
1683
+ 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]))
1684
+ elif self.parameters.control.zonetype[k] == SEALED:
1685
+ self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (self.parameters.derived.relzoneareas[k] * self.sequences.fluxes.r[k])
1686
+ cpdef inline void calc_rt_v1(self) noexcept nogil:
1687
+ self.sequences.fluxes.rt = self.sequences.fluxes.outrc
1688
+ cpdef inline void calc_rt_v2(self) noexcept nogil:
1689
+ self.sequences.fluxes.rt = self.parameters.derived.rellandarea * self.sequences.fluxes.outrc + self.parameters.derived.rellowerzonearea * self.sequences.fluxes.q1
1690
+ cpdef inline void calc_qt_v1(self) noexcept nogil:
1691
+ self.sequences.fluxes.qt = self.parameters.derived.qfactor * self.sequences.fluxes.rt
1692
+ cpdef double get_temperature_v1(self, numpy.int64_t s) noexcept nogil:
1693
+ return self.sequences.factors.tc[s]
1694
+ cpdef double get_meantemperature_v1(self) noexcept nogil:
1695
+ return self.sequences.inputs.t
1696
+ cpdef double get_precipitation_v1(self, numpy.int64_t s) noexcept nogil:
1697
+ return self.sequences.fluxes.pc[s]
1698
+ cpdef double get_interceptedwater_v1(self, numpy.int64_t k) noexcept nogil:
1699
+ return self.sequences.states.ic[k]
1700
+ cpdef double get_soilwater_v1(self, numpy.int64_t k) noexcept nogil:
1701
+ return self.sequences.states.sm[k]
1702
+ cpdef double get_snowcover_v1(self, numpy.int64_t k) noexcept nogil:
1703
+ cdef numpy.int64_t c
1704
+ cdef double snowcovered
1705
+ snowcovered = 0.0
1706
+ for c in range(self.parameters.control.sclass):
1707
+ snowcovered = snowcovered + (self.sequences.states.sp[c, k] > 0.0)
1708
+ return snowcovered / self.parameters.control.sclass
1709
+ cpdef inline void calc_ei_ic_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1710
+ cdef numpy.int64_t k
1711
+ submodel.determine_interceptionevaporation()
1712
+ for k in range(self.parameters.control.nmbzones):
1713
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
1714
+ self.sequences.fluxes.ei[k] = min(submodel.get_interceptionevaporation(k), self.sequences.states.ic[k])
1715
+ self.sequences.states.ic[k] = self.sequences.states.ic[k] - (self.sequences.fluxes.ei[k])
1716
+ else:
1717
+ self.sequences.fluxes.ei[k] = 0.0
1718
+ self.sequences.states.ic[k] = 0.0
1719
+ cpdef inline void calc_ea_sm_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1720
+ cdef numpy.int64_t k
1721
+ submodel.determine_soilevapotranspiration()
1722
+ for k in range(self.parameters.control.nmbzones):
1723
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
1724
+ self.sequences.fluxes.ea[k] = min(submodel.get_soilevapotranspiration(k), self.sequences.states.sm[k])
1725
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] - (self.sequences.fluxes.ea[k])
1726
+ if self.sequences.states.sm[k] > self.parameters.control.fc[k]:
1727
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.r[k] + (self.sequences.states.sm[k] - self.parameters.control.fc[k])
1728
+ self.sequences.states.sm[k] = self.parameters.control.fc[k]
1729
+ else:
1730
+ self.sequences.fluxes.ea[k] = 0.0
1731
+ self.sequences.states.sm[k] = 0.0
1732
+ cpdef inline void calc_el_lz_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1733
+ cdef numpy.int64_t k
1734
+ submodel.determine_waterevaporation()
1735
+ for k in range(self.parameters.control.nmbzones):
1736
+ if self.parameters.control.zonetype[k] == ILAKE:
1737
+ self.sequences.fluxes.el[k] = submodel.get_waterevaporation(k)
1738
+ self.sequences.states.lz = self.sequences.states.lz - (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.el[k])
1739
+ else:
1740
+ self.sequences.fluxes.el[k] = 0.0
1741
+ cpdef inline void calc_el_sg2_sg3_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1742
+ cdef double weight
1743
+ cdef numpy.int64_t k
1744
+ submodel.determine_waterevaporation()
1745
+ for k in range(self.parameters.control.nmbzones):
1746
+ if self.parameters.control.zonetype[k] == ILAKE:
1747
+ self.sequences.fluxes.el[k] = submodel.get_waterevaporation(k)
1748
+ weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea
1749
+ self.sequences.states.sg2 = self.sequences.states.sg2 - (self.parameters.fixed.fsg * weight * self.sequences.fluxes.el[k])
1750
+ self.sequences.states.sg3 = self.sequences.states.sg3 - ((1.0 - self.parameters.fixed.fsg) * weight * self.sequences.fluxes.el[k])
1751
+ else:
1752
+ self.sequences.fluxes.el[k] = 0.0
1753
+ cpdef inline void calc_qab_qvs_bw_v1(self, numpy.int64_t k, double[:] h, double[:] k1, double[:] k2, double[:] s0, double[:] qz, double[:] qa1, double[:] qa2, double t0) noexcept nogil:
1754
+ cdef double d_qa1
1755
+ cdef double d_v4
1756
+ cdef double d_v3
1757
+ cdef double d_denom
1758
+ cdef double d_nom
1759
+ cdef double d_v2
1760
+ cdef double d_v1
1761
+ cdef double d_k2qz
1762
+ cdef double d_t1
1763
+ cdef double d_dt
1764
+ cdef double d_qa2
1765
+ cdef double d_s0
1766
+ cdef double d_qz
1767
+ cdef double d_k2
1768
+ cdef double d_k1
1769
+ cdef double d_h
1770
+ d_h = h[k]
1771
+ d_k1 = k1[k]
1772
+ d_k2 = k2[k]
1773
+ d_qz = qz[k]
1774
+ d_s0 = s0[k]
1775
+ if (d_k1 == 0.0) and (d_s0 > d_h):
1776
+ qa1[k] = qa1[k] + (d_s0 - d_h)
1777
+ s0[k] = d_s0 = d_h
1778
+ if (d_k1 == 0.0) and (d_s0 == d_h) and (d_qz > d_h / d_k2):
1779
+ d_qa2 = d_h / d_k2
1780
+ d_dt = 1.0 - t0
1781
+ qa2[k] = qa2[k] + (d_dt * d_qa2)
1782
+ qa1[k] = qa1[k] + (d_dt * (d_qz - d_qa2))
1783
+ elif d_k2 == 0.0:
1784
+ qa2[k] = qa2[k] + (d_s0 + d_qz)
1785
+ s0[k] = 0.0
1786
+ elif (d_s0 < d_h) or (d_s0 == d_h and d_qz <= d_h / d_k2):
1787
+ if (d_s0 == d_h) or (d_qz <= d_h / d_k2):
1788
+ d_t1 = 1.0
1789
+ elif isinf(d_k2):
1790
+ d_t1 = (d_h - d_s0) / d_qz
1791
+ else:
1792
+ d_t1 = t0 + d_k2 * log( (d_qz - d_s0 / d_k2) / (d_qz - d_h / d_k2) )
1793
+ if 0.0 < d_t1 < 1.0:
1794
+ qa2[k] = qa2[k] + ((d_t1 - t0) * d_qz - (d_h - d_s0))
1795
+ s0[k] = d_h
1796
+ self.calc_qab_qvs_bw_v1(k, h, k1, k2, s0, qz, qa1, qa2, d_t1)
1797
+ elif isinf(d_k2):
1798
+ s0[k] = s0[k] + ((1.0 - t0) * d_qz)
1799
+ else:
1800
+ d_dt = 1.0 - t0
1801
+ d_k2qz = d_k2 * d_qz
1802
+ s0[k] = d_k2qz - (d_k2qz - d_s0) * exp(-d_dt / d_k2)
1803
+ qa2[k] = qa2[k] + (d_s0 - s0[k] + d_dt * d_qz)
1804
+ else:
1805
+ d_v1 = 1.0 / d_k1 + 1.0 / d_k2
1806
+ d_v2 = d_qz + d_h / d_k1
1807
+ d_nom = d_v2 - d_h * d_v1
1808
+ d_denom = d_v2 - d_s0 * d_v1
1809
+ if (d_s0 == d_h) or (d_denom == 0.0) or (not 0 < d_nom / d_denom <= 1):
1810
+ d_t1 = 1.0
1811
+ else:
1812
+ d_t1 = t0 - 1.0 / d_v1 * log(d_nom / d_denom)
1813
+ d_t1 = min(d_t1, 1.0)
1814
+ d_dt = d_t1 - t0
1815
+ d_v3 = (d_v2 * d_dt) / d_v1
1816
+ d_v4 = d_denom / d_v1**2 * (1.0 - exp(-d_dt * d_v1))
1817
+ d_qa1 = (d_v3 - d_v4 - d_h * d_dt) / d_k1
1818
+ d_qa2 = (d_v3 - d_v4) / d_k2
1819
+ qa1[k] = qa1[k] + (d_qa1)
1820
+ qa2[k] = qa2[k] + (d_qa2)
1821
+ if d_t1 == 1.0:
1822
+ s0[k] = s0[k] + (d_dt * d_qz - d_qa1 - d_qa2)
1823
+ else:
1824
+ s0[k] = d_h
1825
+ if d_t1 < 1.0:
1826
+ self.calc_qab_qvs_bw_v1(k, h, k1, k2, s0, qz, qa1, qa2, d_t1)
1827
+ cpdef inline void calc_outrc_rconcmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1828
+ submodel.set_inflow(self.sequences.fluxes.inrc)
1829
+ submodel.determine_outflow()
1830
+ self.sequences.fluxes.outrc = submodel.get_outflow()
1831
+ cpdef inline void pass_q_v1(self) noexcept nogil:
1832
+ self.sequences.outlets.q[0] = self.sequences.outlets.q[0] + (self.sequences.fluxes.qt)
1833
+ cpdef inline void calc_tc(self) noexcept nogil:
1834
+ cdef numpy.int64_t k
1835
+ for k in range(self.parameters.control.nmbzones):
1836
+ 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)
1837
+ cpdef inline void calc_fracrain(self) noexcept nogil:
1838
+ cdef double d_dt
1839
+ cdef numpy.int64_t k
1840
+ for k in range(self.parameters.control.nmbzones):
1841
+ d_dt = self.parameters.control.ttint[k] / 2.0
1842
+ if self.sequences.factors.tc[k] >= (self.parameters.control.tt[k] + d_dt):
1843
+ self.sequences.factors.fracrain[k] = 1.0
1844
+ elif self.sequences.factors.tc[k] <= (self.parameters.control.tt[k] - d_dt):
1845
+ self.sequences.factors.fracrain[k] = 0.0
1846
+ else:
1847
+ self.sequences.factors.fracrain[k] = (self.sequences.factors.tc[k] - (self.parameters.control.tt[k] - d_dt)) / self.parameters.control.ttint[k]
1848
+ cpdef inline void calc_rfc_sfc(self) noexcept nogil:
1849
+ cdef numpy.int64_t k
1850
+ for k in range(self.parameters.control.nmbzones):
1851
+ self.sequences.factors.rfc[k] = self.sequences.factors.fracrain[k] * self.parameters.control.rfcf[k]
1852
+ self.sequences.factors.sfc[k] = (1.0 - self.sequences.factors.fracrain[k]) * self.parameters.control.sfcf[k]
1853
+ cpdef inline void calc_pc(self) noexcept nogil:
1854
+ cdef numpy.int64_t k
1855
+ for k in range(self.parameters.control.nmbzones):
1856
+ 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))
1857
+ if self.sequences.fluxes.pc[k] <= 0.0:
1858
+ self.sequences.fluxes.pc[k] = 0.0
1859
+ else:
1860
+ 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]))
1861
+ cpdef inline void calc_tf_ic(self) noexcept nogil:
1862
+ cdef numpy.int64_t k
1863
+ for k in range(self.parameters.control.nmbzones):
1864
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
1865
+ self.sequences.fluxes.tf[k] = max(self.sequences.fluxes.pc[k] - (self.parameters.control.icmax[k] - self.sequences.states.ic[k]), 0.0)
1866
+ self.sequences.states.ic[k] = self.sequences.states.ic[k] + (self.sequences.fluxes.pc[k] - self.sequences.fluxes.tf[k])
1867
+ else:
1868
+ self.sequences.fluxes.tf[k] = self.sequences.fluxes.pc[k]
1869
+ self.sequences.states.ic[k] = 0.0
1870
+ cpdef inline void calc_ei_ic(self) noexcept nogil:
1871
+ if self.aetmodel_typeid == 1:
1872
+ self.calc_ei_ic_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1873
+ cpdef inline void calc_sp_wc(self) noexcept nogil:
1874
+ cdef numpy.int64_t c
1875
+ cdef double d_snow
1876
+ cdef double d_rain
1877
+ cdef double d_denom
1878
+ cdef numpy.int64_t k
1879
+ for k in range(self.parameters.control.nmbzones):
1880
+ if self.parameters.control.zonetype[k] != ILAKE:
1881
+ d_denom = self.sequences.factors.rfc[k] + self.sequences.factors.sfc[k]
1882
+ if d_denom > 0.0:
1883
+ d_rain = self.sequences.fluxes.tf[k] * self.sequences.factors.rfc[k] / d_denom
1884
+ d_snow = self.sequences.fluxes.tf[k] * self.sequences.factors.sfc[k] / d_denom
1885
+ for c in range(self.parameters.control.sclass):
1886
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.parameters.control.sfdist[c] * d_rain)
1887
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.parameters.control.sfdist[c] * d_snow)
1888
+ else:
1889
+ for c in range(self.parameters.control.sclass):
1890
+ self.sequences.states.wc[c, k] = 0.0
1891
+ self.sequences.states.sp[c, k] = 0.0
1892
+ cpdef inline void calc_spl_wcl_sp_wc(self) noexcept nogil:
1893
+ cdef double d_excess_wc
1894
+ cdef double d_excess_sp
1895
+ cdef double d_excess
1896
+ cdef double d_snow
1897
+ cdef numpy.int64_t c
1898
+ cdef numpy.int64_t k
1899
+ for k in range(self.parameters.control.nmbzones):
1900
+ self.sequences.fluxes.spl[k] = 0.0
1901
+ self.sequences.fluxes.wcl[k] = 0.0
1902
+ if self.parameters.control.zonetype[k] == ILAKE:
1903
+ for c in range(self.parameters.control.sclass):
1904
+ self.sequences.states.sp[c, k] = 0.0
1905
+ self.sequences.states.wc[c, k] = 0.0
1906
+ elif not isinf(self.parameters.control.smax[k]):
1907
+ for c in range(self.parameters.control.sclass):
1908
+ d_snow = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
1909
+ d_excess = d_snow - self.parameters.control.smax[k]
1910
+ if d_excess > 0.0:
1911
+ d_excess_sp = d_excess * self.sequences.states.sp[c, k] / d_snow
1912
+ d_excess_wc = d_excess * self.sequences.states.wc[c, k] / d_snow
1913
+ self.sequences.fluxes.spl[k] = self.sequences.fluxes.spl[k] + (d_excess_sp / self.parameters.control.sclass)
1914
+ self.sequences.fluxes.wcl[k] = self.sequences.fluxes.wcl[k] + (d_excess_wc / self.parameters.control.sclass)
1915
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (d_excess_sp)
1916
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (d_excess_wc)
1917
+ cpdef inline void calc_spg_wcg_sp_wc(self) noexcept nogil:
1918
+ cdef double d_excess_liquid_land
1919
+ cdef double d_excess_frozen_land
1920
+ cdef double d_delta_wc_zone
1921
+ cdef double d_delta_sp_zone
1922
+ cdef double d_fraction_gain_class
1923
+ cdef double d_excess_liquid_zone_actual
1924
+ cdef double d_excess_frozen_zone_actual
1925
+ cdef double d_fraction_gain_zone
1926
+ cdef double d_gain_max_cum
1927
+ cdef double d_excess_total_zone
1928
+ cdef double d_excess_liquid_zone
1929
+ cdef double d_excess_frozen_zone
1930
+ cdef double d_excess_liquid_basin
1931
+ cdef double d_excess_frozen_basin
1932
+ cdef double d_factor_excess
1933
+ cdef double d_factor_gain
1934
+ cdef double d_fraction_gain
1935
+ cdef double d_gain_max
1936
+ cdef double d_gain_pot
1937
+ cdef double d_gain_total
1938
+ cdef double d_gain_liquid
1939
+ cdef double d_gain_frozen
1940
+ cdef double d_f
1941
+ cdef numpy.int64_t t
1942
+ cdef numpy.int64_t f
1943
+ cdef numpy.int64_t c
1944
+ cdef numpy.int64_t i
1945
+ for i in range(self.parameters.control.nmbzones):
1946
+ self.sequences.fluxes.spg[i] = 0.0
1947
+ self.sequences.fluxes.wcg[i] = 0.0
1948
+ self.sequences.aides.spe[i] = 0.0
1949
+ self.sequences.aides.wce[i] = 0.0
1950
+ if self.parameters.control.zonetype[i] == ILAKE:
1951
+ for c in range(self.parameters.control.sclass):
1952
+ self.sequences.states.sp[c, i] = 0.0
1953
+ self.sequences.states.wc[c, i] = 0.0
1954
+ for i in range(self.parameters.derived.srednumber):
1955
+ f, t = self.parameters.derived.sredorder[i, 0], self.parameters.derived.sredorder[i, 1]
1956
+ d_f = self.parameters.derived.zonearearatios[f, t] * self.parameters.control.sred[f, t]
1957
+ d_gain_frozen = d_f * (self.sequences.fluxes.spl[f] + self.sequences.aides.spe[f])
1958
+ d_gain_liquid = d_f * (self.sequences.fluxes.wcl[f] + self.sequences.aides.wce[f])
1959
+ d_gain_total = d_gain_frozen + d_gain_liquid
1960
+ for c in range(self.parameters.control.sclass):
1961
+ d_gain_pot = self.parameters.control.sfdist[c] * d_gain_total
1962
+ if d_gain_pot > 0.0:
1963
+ d_gain_max = self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t]
1964
+ d_fraction_gain = min(d_gain_max / d_gain_pot, 1.0)
1965
+ d_factor_gain = d_fraction_gain * self.parameters.control.sfdist[c]
1966
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_factor_gain * d_gain_frozen / self.parameters.control.sclass)
1967
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_factor_gain * d_gain_liquid / self.parameters.control.sclass)
1968
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_factor_gain * d_gain_frozen)
1969
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_factor_gain * d_gain_liquid)
1970
+ d_factor_excess = (1.0 - d_fraction_gain) * self.parameters.control.sfdist[c]
1971
+ self.sequences.aides.spe[t] = self.sequences.aides.spe[t] + (d_factor_excess * d_gain_frozen / self.parameters.control.sclass)
1972
+ self.sequences.aides.wce[t] = self.sequences.aides.wce[t] + (d_factor_excess * d_gain_liquid / self.parameters.control.sclass)
1973
+ d_excess_frozen_basin, d_excess_liquid_basin = 0.0, 0.0
1974
+ for i in range(self.parameters.control.nmbzones):
1975
+ if self.parameters.derived.sredend[i]:
1976
+ d_excess_frozen_basin = d_excess_frozen_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.spe[i] + self.sequences.fluxes.spl[i]))
1977
+ d_excess_liquid_basin = d_excess_liquid_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.wce[i] + self.sequences.fluxes.wcl[i]))
1978
+ if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
1979
+ return
1980
+ for i in range(self.parameters.control.nmbzones):
1981
+ t = self.parameters.derived.indiceszonez[i]
1982
+ if self.parameters.control.zonetype[t] == ILAKE:
1983
+ continue
1984
+ d_excess_frozen_zone = d_excess_frozen_basin / self.parameters.derived.relzoneareas[t]
1985
+ d_excess_liquid_zone = d_excess_liquid_basin / self.parameters.derived.relzoneareas[t]
1986
+ d_excess_total_zone = d_excess_frozen_zone + d_excess_liquid_zone
1987
+ d_gain_max_cum = 0.0
1988
+ for c in range(self.parameters.control.sclass):
1989
+ 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])
1990
+ if d_gain_max_cum <= 0.0:
1991
+ continue
1992
+ d_fraction_gain_zone = min( d_gain_max_cum / self.parameters.control.sclass / d_excess_total_zone, 1.0 )
1993
+ d_excess_frozen_zone_actual = d_fraction_gain_zone * d_excess_frozen_zone
1994
+ d_excess_liquid_zone_actual = d_fraction_gain_zone * d_excess_liquid_zone
1995
+ for c in range(self.parameters.control.sclass):
1996
+ 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
1997
+ d_delta_sp_zone = d_fraction_gain_class * d_excess_frozen_zone_actual
1998
+ d_delta_wc_zone = d_fraction_gain_class * d_excess_liquid_zone_actual
1999
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_delta_sp_zone)
2000
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_delta_wc_zone)
2001
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_delta_sp_zone * self.parameters.control.sclass)
2002
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_delta_wc_zone * self.parameters.control.sclass)
2003
+ d_excess_frozen_basin = d_excess_frozen_basin - (d_excess_frozen_zone_actual * self.parameters.derived.relzoneareas[t])
2004
+ d_excess_liquid_basin = d_excess_liquid_basin - (d_excess_liquid_zone_actual * self.parameters.derived.relzoneareas[t])
2005
+ if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
2006
+ return
2007
+ d_excess_frozen_land = d_excess_frozen_basin / self.parameters.derived.rellandarea
2008
+ d_excess_liquid_land = d_excess_liquid_basin / self.parameters.derived.rellandarea
2009
+ for t in range(self.parameters.control.nmbzones):
2010
+ if self.parameters.control.zonetype[t] != ILAKE:
2011
+ self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_excess_frozen_land)
2012
+ self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_excess_liquid_land)
2013
+ for c in range(self.parameters.control.sclass):
2014
+ self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_excess_frozen_land)
2015
+ self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_excess_liquid_land)
2016
+ return
2017
+ cpdef inline void calc_cfact(self) noexcept nogil:
2018
+ cdef numpy.int64_t k
2019
+ cdef double d_factor
2020
+ d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
2021
+ for k in range(self.parameters.control.nmbzones):
2022
+ if self.parameters.control.zonetype[k] != ILAKE:
2023
+ self.sequences.factors.cfact[k] = max(self.parameters.control.cfmax[k] + d_factor * self.parameters.control.cfvar[k], 0.0)
2024
+ else:
2025
+ self.sequences.factors.cfact[k] = 0.0
2026
+ cpdef inline void calc_melt_sp_wc(self) noexcept nogil:
2027
+ cdef numpy.int64_t c
2028
+ cdef double d_potmelt
2029
+ cdef numpy.int64_t k
2030
+ for k in range(self.parameters.control.nmbzones):
2031
+ if self.parameters.control.zonetype[k] != ILAKE:
2032
+ if self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]:
2033
+ d_potmelt = self.sequences.factors.cfact[k] * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
2034
+ for c in range(self.parameters.control.sclass):
2035
+ self.sequences.fluxes.melt[c, k] = min(d_potmelt, self.sequences.states.sp[c, k])
2036
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (self.sequences.fluxes.melt[c, k])
2037
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.sequences.fluxes.melt[c, k])
2038
+ else:
2039
+ for c in range(self.parameters.control.sclass):
2040
+ self.sequences.fluxes.melt[c, k] = 0.0
2041
+ else:
2042
+ for c in range(self.parameters.control.sclass):
2043
+ self.sequences.fluxes.melt[c, k] = 0.0
2044
+ self.sequences.states.wc[c, k] = 0.0
2045
+ self.sequences.states.sp[c, k] = 0.0
2046
+ cpdef inline void calc_refr_sp_wc(self) noexcept nogil:
2047
+ cdef numpy.int64_t c
2048
+ cdef double d_potrefr
2049
+ cdef numpy.int64_t k
2050
+ for k in range(self.parameters.control.nmbzones):
2051
+ if self.parameters.control.zonetype[k] != ILAKE:
2052
+ if self.sequences.factors.tc[k] < self.parameters.derived.ttm[k]:
2053
+ d_potrefr = self.parameters.control.cfr[k] * self.parameters.control.cfmax[k] * (self.parameters.derived.ttm[k] - self.sequences.factors.tc[k])
2054
+ for c in range(self.parameters.control.sclass):
2055
+ self.sequences.fluxes.refr[c, k] = min(d_potrefr, self.sequences.states.wc[c, k])
2056
+ self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.sequences.fluxes.refr[c, k])
2057
+ self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (self.sequences.fluxes.refr[c, k])
2058
+ else:
2059
+ for c in range(self.parameters.control.sclass):
2060
+ self.sequences.fluxes.refr[c, k] = 0.0
2061
+ else:
2062
+ for c in range(self.parameters.control.sclass):
2063
+ self.sequences.fluxes.refr[c, k] = 0.0
2064
+ self.sequences.states.wc[c, k] = 0.0
2065
+ self.sequences.states.sp[c, k] = 0.0
2066
+ cpdef inline void calc_in_wc(self) noexcept nogil:
2067
+ cdef double d_wc_old
2068
+ cdef numpy.int64_t c
2069
+ cdef numpy.int64_t k
2070
+ for k in range(self.parameters.control.nmbzones):
2071
+ self.sequences.fluxes.in_[k] = 0.0
2072
+ if self.parameters.control.zonetype[k] != ILAKE:
2073
+ for c in range(self.parameters.control.sclass):
2074
+ d_wc_old = self.sequences.states.wc[c, k]
2075
+ self.sequences.states.wc[c, k] = min(d_wc_old, self.parameters.control.whc[k] * self.sequences.states.sp[c, k])
2076
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + ((d_wc_old - self.sequences.states.wc[c, k]) / self.parameters.control.sclass)
2077
+ else:
2078
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.tf[k]
2079
+ for c in range(self.parameters.control.sclass):
2080
+ self.sequences.states.wc[c, k] = 0.0
2081
+ cpdef inline void calc_swe(self) noexcept nogil:
2082
+ cdef numpy.int64_t c
2083
+ cdef numpy.int64_t k
2084
+ for k in range(self.parameters.control.nmbzones):
2085
+ if self.parameters.control.zonetype[k] != ILAKE:
2086
+ for c in range(self.parameters.control.sclass):
2087
+ self.sequences.factors.swe[c, k] = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
2088
+ else:
2089
+ for c in range(self.parameters.control.sclass):
2090
+ self.sequences.factors.swe[c, k] = 0.0
2091
+ cpdef inline void calc_sr(self) noexcept nogil:
2092
+ cdef numpy.int64_t k
2093
+ for k in range(self.parameters.control.nmbzones):
2094
+ if self.parameters.control.zonetype[k] == SEALED:
2095
+ self.sequences.fluxes.sr[k] = self.sequences.fluxes.in_[k]
2096
+ else:
2097
+ self.sequences.fluxes.sr[k] = 0.0
2098
+ cpdef inline void calc_gact(self) noexcept nogil:
2099
+ cdef numpy.int64_t k
2100
+ cdef double d_factor
2101
+ d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
2102
+ for k in range(self.parameters.control.nmbzones):
2103
+ if self.parameters.control.zonetype[k] == GLACIER:
2104
+ self.sequences.factors.gact[k] = max(self.parameters.control.gmelt[k] + d_factor * self.parameters.control.gvar[k], 0.0)
2105
+ else:
2106
+ self.sequences.factors.gact[k] = 0.0
2107
+ cpdef inline void calc_glmelt_in(self) noexcept nogil:
2108
+ cdef numpy.int64_t c
2109
+ cdef double d_glmeltpot
2110
+ cdef numpy.int64_t k
2111
+ for k in range(self.parameters.control.nmbzones):
2112
+ self.sequences.fluxes.glmelt[k] = 0.0
2113
+ if (self.parameters.control.zonetype[k] == GLACIER) and (self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]):
2114
+ d_glmeltpot = self.sequences.factors.gact[k] / self.parameters.control.sclass * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
2115
+ for c in range(self.parameters.control.sclass):
2116
+ if self.sequences.states.sp[c, k] <= 0.0:
2117
+ self.sequences.fluxes.glmelt[k] = self.sequences.fluxes.glmelt[k] + (d_glmeltpot)
2118
+ self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + (d_glmeltpot)
2119
+ cpdef inline void calc_r_sm(self) noexcept nogil:
2120
+ cdef numpy.int64_t k
2121
+ for k in range(self.parameters.control.nmbzones):
2122
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
2123
+ if self.parameters.control.fc[k] > 0.0:
2124
+ 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]
2125
+ 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])
2126
+ else:
2127
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
2128
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] + (self.sequences.fluxes.in_[k] - self.sequences.fluxes.r[k])
2129
+ else:
2130
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
2131
+ self.sequences.states.sm[k] = 0.0
2132
+ cpdef inline void calc_cf_sm(self) noexcept nogil:
2133
+ cdef numpy.int64_t k
2134
+ for k in range(self.parameters.control.nmbzones):
2135
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
2136
+ if self.parameters.control.fc[k] > 0.0:
2137
+ self.sequences.fluxes.cf[k] = self.parameters.control.cflux[k] * (1.0 - self.sequences.states.sm[k] / self.parameters.control.fc[k])
2138
+ self.sequences.fluxes.cf[k] = min(self.sequences.fluxes.cf[k], self.sequences.states.uz + self.sequences.fluxes.r[k])
2139
+ self.sequences.fluxes.cf[k] = min(self.sequences.fluxes.cf[k], self.parameters.control.fc[k] - self.sequences.states.sm[k])
2140
+ else:
2141
+ self.sequences.fluxes.cf[k] = 0.0
2142
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] + (self.sequences.fluxes.cf[k])
2143
+ else:
2144
+ self.sequences.fluxes.cf[k] = 0.0
2145
+ self.sequences.states.sm[k] = 0.0
2146
+ cpdef inline void calc_ea_sm(self) noexcept nogil:
2147
+ if self.aetmodel_typeid == 1:
2148
+ self.calc_ea_sm_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
2149
+ cpdef inline void calc_inuz(self) noexcept nogil:
2150
+ cdef numpy.int64_t k
2151
+ self.sequences.fluxes.inuz = 0.0
2152
+ for k in range(self.parameters.control.nmbzones):
2153
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
2154
+ self.sequences.fluxes.inuz = self.sequences.fluxes.inuz + (( self.parameters.derived.relzoneareas[k] / self.parameters.derived.relupperzonearea * (self.sequences.fluxes.r[k] - self.sequences.fluxes.cf[k]) ))
2155
+ cpdef inline void calc_suz(self) noexcept nogil:
2156
+ cdef numpy.int64_t k
2157
+ for k in range(self.parameters.control.nmbzones):
2158
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
2159
+ self.sequences.states.suz[k] = self.sequences.states.suz[k] + (self.sequences.fluxes.r[k])
2160
+ else:
2161
+ self.sequences.states.suz[k] = 0.0
2162
+ cpdef inline void calc_contriarea(self) noexcept nogil:
2163
+ cdef double d_weight
2164
+ cdef numpy.int64_t k
2165
+ self.sequences.factors.contriarea = 1.0
2166
+ if self.parameters.control.resparea and (self.parameters.derived.relsoilarea > 0.0):
2167
+ for k in range(self.parameters.control.nmbzones):
2168
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
2169
+ if self.parameters.control.fc[k] > 0.0:
2170
+ d_weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.relsoilarea
2171
+ self.sequences.factors.contriarea = self.sequences.factors.contriarea * ((self.sequences.states.sm[k] / self.parameters.control.fc[k]) ** d_weight)
2172
+ self.sequences.factors.contriarea = self.sequences.factors.contriarea ** (self.parameters.control.beta[k])
2173
+ cpdef inline void calc_q0_perc_uz(self) noexcept nogil:
2174
+ cdef double factor
2175
+ cdef double error
2176
+ cdef double q0
2177
+ cdef double perc
2178
+ cdef numpy.int64_t _
2179
+ cdef double uz_old
2180
+ uz_old = self.sequences.states.uz
2181
+ self.sequences.fluxes.perc = 0.0
2182
+ self.sequences.fluxes.q0 = 0.0
2183
+ for _ in range(self.parameters.control.recstep):
2184
+ self.sequences.states.uz = max(self.sequences.states.uz + self.parameters.derived.dt * self.sequences.fluxes.inuz, 0.0)
2185
+ perc = min(self.parameters.derived.dt * self.parameters.control.percmax * self.sequences.factors.contriarea, self.sequences.states.uz)
2186
+ self.sequences.states.uz = self.sequences.states.uz - (perc)
2187
+ self.sequences.fluxes.perc = self.sequences.fluxes.perc + (perc)
2188
+ if self.sequences.states.uz > 0.0:
2189
+ if self.sequences.factors.contriarea > 0.0:
2190
+ q0 = min( self.parameters.derived.dt * self.parameters.control.k * (self.sequences.states.uz / self.sequences.factors.contriarea) ** (1.0 + self.parameters.control.alpha), self.sequences.states.uz, )
2191
+ else:
2192
+ q0 = self.sequences.states.uz
2193
+ self.sequences.states.uz = self.sequences.states.uz - (q0)
2194
+ self.sequences.fluxes.q0 = self.sequences.fluxes.q0 + (q0)
2195
+ error = self.sequences.states.uz - (uz_old + self.sequences.fluxes.inuz - self.sequences.fluxes.perc - self.sequences.fluxes.q0)
2196
+ if error > 0.0:
2197
+ factor = 1.0 - error / (self.sequences.fluxes.perc + self.sequences.fluxes.q0)
2198
+ self.sequences.fluxes.perc = self.sequences.fluxes.perc * (factor)
2199
+ self.sequences.fluxes.q0 = self.sequences.fluxes.q0 * (factor)
2200
+ cpdef inline void calc_dp_suz(self) noexcept nogil:
2201
+ cdef numpy.int64_t k
2202
+ for k in range(self.parameters.control.nmbzones):
2203
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
2204
+ self.sequences.fluxes.dp[k] = min(self.sequences.states.suz[k], self.parameters.control.percmax)
2205
+ self.sequences.states.suz[k] = self.sequences.states.suz[k] - (self.sequences.fluxes.dp[k])
2206
+ else:
2207
+ self.sequences.fluxes.dp[k] = 0.0
2208
+ self.sequences.states.suz[k] = 0.0
2209
+ cpdef inline void calc_qab1_qvs1_bw1(self) noexcept nogil:
2210
+ cdef numpy.int64_t k
2211
+ for k in range(self.parameters.control.nmbzones):
2212
+ self.sequences.fluxes.qab1[k] = 0.0
2213
+ self.sequences.fluxes.qvs1[k] = 0.0
2214
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
2215
+ self.calc_qab_qvs_bw_v1( k, self.parameters.control.h1, self.parameters.control.tab1, self.parameters.control.tvs1, self.sequences.states.bw1, self.sequences.fluxes.r, self.sequences.fluxes.qab1, self.sequences.fluxes.qvs1, 0.0, )
2216
+ else:
2217
+ self.sequences.states.bw1[k] = 0.0
2218
+ cpdef inline void calc_qab2_qvs2_bw2(self) noexcept nogil:
2219
+ cdef numpy.int64_t k
2220
+ for k in range(self.parameters.control.nmbzones):
2221
+ self.sequences.fluxes.qab2[k] = 0.0
2222
+ self.sequences.fluxes.qvs2[k] = 0.0
2223
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
2224
+ self.calc_qab_qvs_bw_v1( k, self.parameters.control.h2, self.parameters.control.tab2, self.parameters.control.tvs2, self.sequences.states.bw2, self.sequences.fluxes.qvs1, self.sequences.fluxes.qab2, self.sequences.fluxes.qvs2, 0.0, )
2225
+ else:
2226
+ self.sequences.states.bw2[k] = 0.0
2227
+ cpdef inline void calc_rs_ri_suz(self) noexcept nogil:
2228
+ cdef double d_f
2229
+ cdef numpy.int64_t k
2230
+ for k in range(self.parameters.control.nmbzones):
2231
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
2232
+ if self.sequences.states.suz[k] > self.parameters.control.sgr[k]:
2233
+ self.sequences.fluxes.rs[k] = (self.sequences.states.suz[k] - self.parameters.control.sgr[k]) * (1.0 - self.parameters.derived.w0[k])
2234
+ else:
2235
+ self.sequences.fluxes.rs[k] = 0.0
2236
+ self.sequences.fluxes.ri[k] = self.sequences.states.suz[k] * (1.0 - self.parameters.derived.w1[k])
2237
+ self.sequences.states.suz[k] = self.sequences.states.suz[k] - (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k])
2238
+ if self.sequences.states.suz[k] < 0.0:
2239
+ d_f = 1.0 - self.sequences.states.suz[k] / (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k])
2240
+ self.sequences.fluxes.rs[k] = self.sequences.fluxes.rs[k] * (d_f)
2241
+ self.sequences.fluxes.ri[k] = self.sequences.fluxes.ri[k] * (d_f)
2242
+ self.sequences.states.suz[k] = 0.0
2243
+ else:
2244
+ self.sequences.states.suz[k] = 0.0
2245
+ self.sequences.fluxes.rs[k] = 0.0
2246
+ self.sequences.fluxes.ri[k] = 0.0
2247
+ cpdef inline void calc_gr1(self) noexcept nogil:
2248
+ cdef numpy.int64_t k
2249
+ for k in range(self.parameters.control.nmbzones):
2250
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
2251
+ 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])
2252
+ 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))
2253
+ else:
2254
+ self.sequences.states.sg1[k] = 0.0
2255
+ self.sequences.fluxes.gr1[k] = 0.0
2256
+ cpdef inline void calc_rg1_sg1(self) noexcept nogil:
2257
+ cdef double d_sg1
2258
+ cdef numpy.int64_t k
2259
+ for k in range(self.parameters.control.nmbzones):
2260
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
2261
+ d_sg1 = self.sequences.states.sg1[k]
2262
+ 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] )
2263
+ self.sequences.fluxes.rg1[k] = d_sg1 + self.sequences.fluxes.gr1[k] - self.sequences.states.sg1[k]
2264
+ else:
2265
+ self.sequences.states.sg1[k] = 0.0
2266
+ self.sequences.fluxes.rg1[k] = 0.0
2267
+ cpdef inline void calc_gr2_gr3(self) noexcept nogil:
2268
+ cdef double d_total
2269
+ cdef double d_weight
2270
+ cdef numpy.int64_t k
2271
+ self.sequences.fluxes.gr2 = 0.0
2272
+ self.sequences.fluxes.gr3 = 0.0
2273
+ for k in range(self.parameters.control.nmbzones):
2274
+ if self.parameters.control.zonetype[k] == SEALED:
2275
+ continue
2276
+ d_weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea
2277
+ if self.parameters.control.zonetype[k] == ILAKE:
2278
+ d_total = d_weight * self.sequences.fluxes.pc[k]
2279
+ else:
2280
+ d_total = d_weight * (self.sequences.fluxes.dp[k] - self.sequences.fluxes.gr1[k])
2281
+ self.sequences.fluxes.gr2 = self.sequences.fluxes.gr2 + (self.parameters.fixed.fsg * d_total)
2282
+ self.sequences.fluxes.gr3 = self.sequences.fluxes.gr3 + ((1.0 - self.parameters.fixed.fsg) * d_total)
2283
+ cpdef inline void calc_rg2_sg2(self) noexcept nogil:
2284
+ cdef double d_add
2285
+ cdef double d_w3
2286
+ cdef double d_k3
2287
+ cdef double d_gr2
2288
+ cdef double d_sg2
2289
+ d_sg2 = self.sequences.states.sg2
2290
+ d_gr2 = self.sequences.fluxes.gr2
2291
+ d_k3 = self.parameters.control.k3
2292
+ d_w3 = self.parameters.derived.w3
2293
+ if d_sg2 < 0.0 < d_gr2:
2294
+ d_add = min(-self.sequences.states.sg2, d_gr2)
2295
+ d_k3 = d_k3 * (d_gr2 / d_add)
2296
+ d_w3 = exp(-1.0 / d_k3)
2297
+ d_sg2 = d_sg2 + (d_add)
2298
+ d_gr2 = d_gr2 - (d_add)
2299
+ if d_sg2 >= 0.0:
2300
+ self.sequences.states.sg2 = d_w3 * d_sg2 + (1.0 - d_w3) * d_k3 * d_gr2
2301
+ self.sequences.fluxes.rg2 = d_sg2 + d_gr2 - self.sequences.states.sg2
2302
+ else:
2303
+ self.sequences.states.sg2 = d_sg2
2304
+ self.sequences.fluxes.rg2 = 0.0
2305
+ cpdef inline void calc_rg3_sg3(self) noexcept nogil:
2306
+ cdef double d_add
2307
+ cdef double d_w4
2308
+ cdef double d_k4
2309
+ cdef double d_gr3
2310
+ cdef double d_sg3
2311
+ d_sg3 = self.sequences.states.sg3
2312
+ d_gr3 = self.sequences.fluxes.gr3
2313
+ d_k4 = self.parameters.derived.k4
2314
+ d_w4 = self.parameters.derived.w4
2315
+ if d_sg3 < 0.0 < d_gr3:
2316
+ d_add = min(-self.sequences.states.sg3, d_gr3)
2317
+ d_k4 = d_k4 * (d_gr3 / d_add)
2318
+ d_w4 = exp(-1.0 / d_k4)
2319
+ d_sg3 = d_sg3 + (d_add)
2320
+ d_gr3 = d_gr3 - (d_add)
2321
+ if d_sg3 >= 0.0:
2322
+ self.sequences.states.sg3 = d_w4 * d_sg3 + (1.0 - d_w4) * d_k4 * d_gr3
2323
+ self.sequences.fluxes.rg3 = d_sg3 + d_gr3 - self.sequences.states.sg3
2324
+ else:
2325
+ self.sequences.states.sg3 = d_sg3
2326
+ self.sequences.fluxes.rg3 = 0.0
2327
+ cpdef inline void calc_el_sg2_sg3(self) noexcept nogil:
2328
+ if self.aetmodel_typeid == 1:
2329
+ self.calc_el_sg2_sg3_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
2330
+ cpdef inline void calc_el_lz(self) noexcept nogil:
2331
+ if self.aetmodel_typeid == 1:
2332
+ self.calc_el_lz_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
2333
+ cpdef inline void calc_q1_lz(self) noexcept nogil:
2334
+ if self.sequences.states.lz > 0.0:
2335
+ self.sequences.fluxes.q1 = self.parameters.control.k4 * self.sequences.states.lz ** (1.0 + self.parameters.control.gamma)
2336
+ else:
2337
+ self.sequences.fluxes.q1 = 0.0
2338
+ self.sequences.states.lz = self.sequences.states.lz - (self.sequences.fluxes.q1)
2339
+ cpdef inline void calc_outrc(self) noexcept nogil:
2340
+ if self.rconcmodel is None:
2341
+ self.sequences.fluxes.outrc = self.sequences.fluxes.inrc
2342
+ elif self.rconcmodel_typeid == 1:
2343
+ self.calc_outrc_rconcmodel_v1( (<masterinterface.MasterInterface>self.rconcmodel) )
2344
+ cpdef inline void calc_qt(self) noexcept nogil:
2345
+ self.sequences.fluxes.qt = self.parameters.derived.qfactor * self.sequences.fluxes.rt
2346
+ cpdef double get_temperature(self, numpy.int64_t s) noexcept nogil:
2347
+ return self.sequences.factors.tc[s]
2348
+ cpdef double get_meantemperature(self) noexcept nogil:
2349
+ return self.sequences.inputs.t
2350
+ cpdef double get_precipitation(self, numpy.int64_t s) noexcept nogil:
2351
+ return self.sequences.fluxes.pc[s]
2352
+ cpdef double get_interceptedwater(self, numpy.int64_t k) noexcept nogil:
2353
+ return self.sequences.states.ic[k]
2354
+ cpdef double get_soilwater(self, numpy.int64_t k) noexcept nogil:
2355
+ return self.sequences.states.sm[k]
2356
+ cpdef double get_snowcover(self, numpy.int64_t k) noexcept nogil:
2357
+ cdef numpy.int64_t c
2358
+ cdef double snowcovered
2359
+ snowcovered = 0.0
2360
+ for c in range(self.parameters.control.sclass):
2361
+ snowcovered = snowcovered + (self.sequences.states.sp[c, k] > 0.0)
2362
+ return snowcovered / self.parameters.control.sclass
2363
+ cpdef inline void calc_ei_ic_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
2364
+ cdef numpy.int64_t k
2365
+ submodel.determine_interceptionevaporation()
2366
+ for k in range(self.parameters.control.nmbzones):
2367
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
2368
+ self.sequences.fluxes.ei[k] = min(submodel.get_interceptionevaporation(k), self.sequences.states.ic[k])
2369
+ self.sequences.states.ic[k] = self.sequences.states.ic[k] - (self.sequences.fluxes.ei[k])
2370
+ else:
2371
+ self.sequences.fluxes.ei[k] = 0.0
2372
+ self.sequences.states.ic[k] = 0.0
2373
+ cpdef inline void calc_ea_sm_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
2374
+ cdef numpy.int64_t k
2375
+ submodel.determine_soilevapotranspiration()
2376
+ for k in range(self.parameters.control.nmbzones):
2377
+ if self.parameters.control.zonetype[k] in (FIELD, FOREST):
2378
+ self.sequences.fluxes.ea[k] = min(submodel.get_soilevapotranspiration(k), self.sequences.states.sm[k])
2379
+ self.sequences.states.sm[k] = self.sequences.states.sm[k] - (self.sequences.fluxes.ea[k])
2380
+ if self.sequences.states.sm[k] > self.parameters.control.fc[k]:
2381
+ self.sequences.fluxes.r[k] = self.sequences.fluxes.r[k] + (self.sequences.states.sm[k] - self.parameters.control.fc[k])
2382
+ self.sequences.states.sm[k] = self.parameters.control.fc[k]
2383
+ else:
2384
+ self.sequences.fluxes.ea[k] = 0.0
2385
+ self.sequences.states.sm[k] = 0.0
2386
+ cpdef inline void calc_el_lz_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
2387
+ cdef numpy.int64_t k
2388
+ submodel.determine_waterevaporation()
2389
+ for k in range(self.parameters.control.nmbzones):
2390
+ if self.parameters.control.zonetype[k] == ILAKE:
2391
+ self.sequences.fluxes.el[k] = submodel.get_waterevaporation(k)
2392
+ self.sequences.states.lz = self.sequences.states.lz - (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.el[k])
2393
+ else:
2394
+ self.sequences.fluxes.el[k] = 0.0
2395
+ cpdef inline void calc_el_sg2_sg3_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
2396
+ cdef double weight
2397
+ cdef numpy.int64_t k
2398
+ submodel.determine_waterevaporation()
2399
+ for k in range(self.parameters.control.nmbzones):
2400
+ if self.parameters.control.zonetype[k] == ILAKE:
2401
+ self.sequences.fluxes.el[k] = submodel.get_waterevaporation(k)
2402
+ weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea
2403
+ self.sequences.states.sg2 = self.sequences.states.sg2 - (self.parameters.fixed.fsg * weight * self.sequences.fluxes.el[k])
2404
+ self.sequences.states.sg3 = self.sequences.states.sg3 - ((1.0 - self.parameters.fixed.fsg) * weight * self.sequences.fluxes.el[k])
2405
+ else:
2406
+ self.sequences.fluxes.el[k] = 0.0
2407
+ cpdef inline void calc_qab_qvs_bw(self, numpy.int64_t k, double[:] h, double[:] k1, double[:] k2, double[:] s0, double[:] qz, double[:] qa1, double[:] qa2, double t0) noexcept nogil:
2408
+ cdef double d_qa1
2409
+ cdef double d_v4
2410
+ cdef double d_v3
2411
+ cdef double d_denom
2412
+ cdef double d_nom
2413
+ cdef double d_v2
2414
+ cdef double d_v1
2415
+ cdef double d_k2qz
2416
+ cdef double d_t1
2417
+ cdef double d_dt
2418
+ cdef double d_qa2
2419
+ cdef double d_s0
2420
+ cdef double d_qz
2421
+ cdef double d_k2
2422
+ cdef double d_k1
2423
+ cdef double d_h
2424
+ d_h = h[k]
2425
+ d_k1 = k1[k]
2426
+ d_k2 = k2[k]
2427
+ d_qz = qz[k]
2428
+ d_s0 = s0[k]
2429
+ if (d_k1 == 0.0) and (d_s0 > d_h):
2430
+ qa1[k] = qa1[k] + (d_s0 - d_h)
2431
+ s0[k] = d_s0 = d_h
2432
+ if (d_k1 == 0.0) and (d_s0 == d_h) and (d_qz > d_h / d_k2):
2433
+ d_qa2 = d_h / d_k2
2434
+ d_dt = 1.0 - t0
2435
+ qa2[k] = qa2[k] + (d_dt * d_qa2)
2436
+ qa1[k] = qa1[k] + (d_dt * (d_qz - d_qa2))
2437
+ elif d_k2 == 0.0:
2438
+ qa2[k] = qa2[k] + (d_s0 + d_qz)
2439
+ s0[k] = 0.0
2440
+ elif (d_s0 < d_h) or (d_s0 == d_h and d_qz <= d_h / d_k2):
2441
+ if (d_s0 == d_h) or (d_qz <= d_h / d_k2):
2442
+ d_t1 = 1.0
2443
+ elif isinf(d_k2):
2444
+ d_t1 = (d_h - d_s0) / d_qz
2445
+ else:
2446
+ d_t1 = t0 + d_k2 * log( (d_qz - d_s0 / d_k2) / (d_qz - d_h / d_k2) )
2447
+ if 0.0 < d_t1 < 1.0:
2448
+ qa2[k] = qa2[k] + ((d_t1 - t0) * d_qz - (d_h - d_s0))
2449
+ s0[k] = d_h
2450
+ self.calc_qab_qvs_bw_v1(k, h, k1, k2, s0, qz, qa1, qa2, d_t1)
2451
+ elif isinf(d_k2):
2452
+ s0[k] = s0[k] + ((1.0 - t0) * d_qz)
2453
+ else:
2454
+ d_dt = 1.0 - t0
2455
+ d_k2qz = d_k2 * d_qz
2456
+ s0[k] = d_k2qz - (d_k2qz - d_s0) * exp(-d_dt / d_k2)
2457
+ qa2[k] = qa2[k] + (d_s0 - s0[k] + d_dt * d_qz)
2458
+ else:
2459
+ d_v1 = 1.0 / d_k1 + 1.0 / d_k2
2460
+ d_v2 = d_qz + d_h / d_k1
2461
+ d_nom = d_v2 - d_h * d_v1
2462
+ d_denom = d_v2 - d_s0 * d_v1
2463
+ if (d_s0 == d_h) or (d_denom == 0.0) or (not 0 < d_nom / d_denom <= 1):
2464
+ d_t1 = 1.0
2465
+ else:
2466
+ d_t1 = t0 - 1.0 / d_v1 * log(d_nom / d_denom)
2467
+ d_t1 = min(d_t1, 1.0)
2468
+ d_dt = d_t1 - t0
2469
+ d_v3 = (d_v2 * d_dt) / d_v1
2470
+ d_v4 = d_denom / d_v1**2 * (1.0 - exp(-d_dt * d_v1))
2471
+ d_qa1 = (d_v3 - d_v4 - d_h * d_dt) / d_k1
2472
+ d_qa2 = (d_v3 - d_v4) / d_k2
2473
+ qa1[k] = qa1[k] + (d_qa1)
2474
+ qa2[k] = qa2[k] + (d_qa2)
2475
+ if d_t1 == 1.0:
2476
+ s0[k] = s0[k] + (d_dt * d_qz - d_qa1 - d_qa2)
2477
+ else:
2478
+ s0[k] = d_h
2479
+ if d_t1 < 1.0:
2480
+ self.calc_qab_qvs_bw_v1(k, h, k1, k2, s0, qz, qa1, qa2, d_t1)
2481
+ cpdef inline void calc_outrc_rconcmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
2482
+ submodel.set_inflow(self.sequences.fluxes.inrc)
2483
+ submodel.determine_outflow()
2484
+ self.sequences.fluxes.outrc = submodel.get_outflow()
2485
+ cpdef inline void pass_q(self) noexcept nogil:
2486
+ self.sequences.outlets.q[0] = self.sequences.outlets.q[0] + (self.sequences.fluxes.qt)