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,3625 @@
1
+ #!python
2
+ # distutils: define_macros=NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION
3
+ # cython: language_level=3
4
+ # cython: cpow=True
5
+ # cython: boundscheck=False
6
+ # cython: wraparound=False
7
+ # cython: initializedcheck=False
8
+ # cython: cdivision=True
9
+ from typing import Optional
10
+ import numpy
11
+ cimport numpy
12
+ from libc.math cimport exp, fabs, log, sin, cos, tan, tanh, asin, acos, atan, isnan, isinf
13
+ from libc.math cimport NAN as nan
14
+ from libc.math cimport INFINITY as inf
15
+ import cython
16
+ from cpython.mem cimport PyMem_Malloc
17
+ from cpython.mem cimport PyMem_Realloc
18
+ from cpython.mem cimport PyMem_Free
19
+ from hydpy.cythons.autogen cimport configutils
20
+ from hydpy.cythons.autogen cimport interfaceutils
21
+ from hydpy.cythons.autogen cimport interputils
22
+ from hydpy.cythons.autogen import pointerutils
23
+ from hydpy.cythons.autogen cimport pointerutils
24
+ from hydpy.cythons.autogen cimport quadutils
25
+ from hydpy.cythons.autogen cimport rootutils
26
+ from hydpy.cythons.autogen cimport smoothutils
27
+ from hydpy.cythons.autogen cimport masterinterface
28
+
29
+
30
+ cdef void do_nothing(Model model) noexcept nogil:
31
+ pass
32
+
33
+ cpdef get_wrapper():
34
+ cdef CallbackWrapper wrapper = CallbackWrapper()
35
+ wrapper.callback = do_nothing
36
+ return wrapper
37
+
38
+ cdef public numpy.npy_bool TYPE_CHECKING = False
39
+ cdef public numpy.int64_t SIED_D = 1
40
+ cdef public numpy.int64_t SIED_L = 2
41
+ cdef public numpy.int64_t VERS = 3
42
+ cdef public numpy.int64_t ACKER = 4
43
+ cdef public numpy.int64_t WEINB = 5
44
+ cdef public numpy.int64_t OBSTB = 6
45
+ cdef public numpy.int64_t BODEN = 7
46
+ cdef public numpy.int64_t GLETS = 8
47
+ cdef public numpy.int64_t GRUE_I = 9
48
+ cdef public numpy.int64_t FEUCHT = 10
49
+ cdef public numpy.int64_t GRUE_E = 11
50
+ cdef public numpy.int64_t BAUMB = 12
51
+ cdef public numpy.int64_t NADELW = 13
52
+ cdef public numpy.int64_t LAUBW = 14
53
+ cdef public numpy.int64_t MISCHW = 15
54
+ cdef public numpy.int64_t WASSER = 16
55
+ cdef public numpy.int64_t FLUSS = 17
56
+ cdef public numpy.int64_t SEE = 18
57
+ @cython.final
58
+ cdef class Parameters:
59
+ pass
60
+ @cython.final
61
+ cdef class ControlParameters:
62
+ pass
63
+ @cython.final
64
+ cdef class DerivedParameters:
65
+ pass
66
+ @cython.final
67
+ cdef class FixedParameters:
68
+ pass
69
+ @cython.final
70
+ cdef class Sequences:
71
+ pass
72
+ @cython.final
73
+ cdef class InletSequences:
74
+ cpdef inline alloc(self, name, numpy.int64_t length):
75
+ if name == "q":
76
+ self._q_length_0 = length
77
+ self._q_ready = numpy.full(length, 0, dtype=numpy.int64)
78
+ self.q = <double**> PyMem_Malloc(length * sizeof(double*))
79
+ cpdef inline dealloc(self, name):
80
+ if name == "q":
81
+ PyMem_Free(self.q)
82
+ cpdef inline set_pointer1d(self, str name, pointerutils.Double value, numpy.int64_t idx):
83
+ cdef pointerutils.PDouble pointer = pointerutils.PDouble(value)
84
+ if name == "q":
85
+ self.q[idx] = pointer.p_value
86
+ self._q_ready[idx] = 1
87
+ cpdef get_value(self, str name):
88
+ cdef numpy.int64_t idx
89
+ if name == "q":
90
+ values = numpy.empty(self.len_q)
91
+ for idx in range(self.len_q):
92
+ pointerutils.check0(self._q_length_0)
93
+ if self._q_ready[idx] == 0:
94
+ pointerutils.check1(self._q_length_0, idx)
95
+ pointerutils.check2(self._q_ready, idx)
96
+ values[idx] = self.q[idx][0]
97
+ return values
98
+ cpdef set_value(self, str name, value):
99
+ if name == "q":
100
+ for idx in range(self.len_q):
101
+ pointerutils.check0(self._q_length_0)
102
+ if self._q_ready[idx] == 0:
103
+ pointerutils.check1(self._q_length_0, idx)
104
+ pointerutils.check2(self._q_ready, idx)
105
+ self.q[idx][0] = value[idx]
106
+ @cython.final
107
+ cdef class InputSequences:
108
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
109
+ cdef numpy.int64_t k
110
+ if self._nied_inputflag:
111
+ self.nied = self._nied_inputpointer[0]
112
+ elif self._nied_diskflag_reading:
113
+ self.nied = self._nied_ncarray[0]
114
+ elif self._nied_ramflag:
115
+ self.nied = self._nied_array[idx]
116
+ if self._teml_inputflag:
117
+ self.teml = self._teml_inputpointer[0]
118
+ elif self._teml_diskflag_reading:
119
+ self.teml = self._teml_ncarray[0]
120
+ elif self._teml_ramflag:
121
+ self.teml = self._teml_array[idx]
122
+ if self._relativehumidity_inputflag:
123
+ self.relativehumidity = self._relativehumidity_inputpointer[0]
124
+ elif self._relativehumidity_diskflag_reading:
125
+ self.relativehumidity = self._relativehumidity_ncarray[0]
126
+ elif self._relativehumidity_ramflag:
127
+ self.relativehumidity = self._relativehumidity_array[idx]
128
+ if self._windspeed_inputflag:
129
+ self.windspeed = self._windspeed_inputpointer[0]
130
+ elif self._windspeed_diskflag_reading:
131
+ self.windspeed = self._windspeed_ncarray[0]
132
+ elif self._windspeed_ramflag:
133
+ self.windspeed = self._windspeed_array[idx]
134
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
135
+ cdef numpy.int64_t k
136
+ if self._nied_diskflag_writing:
137
+ self._nied_ncarray[0] = self.nied
138
+ if self._nied_ramflag:
139
+ self._nied_array[idx] = self.nied
140
+ if self._teml_diskflag_writing:
141
+ self._teml_ncarray[0] = self.teml
142
+ if self._teml_ramflag:
143
+ self._teml_array[idx] = self.teml
144
+ if self._relativehumidity_diskflag_writing:
145
+ self._relativehumidity_ncarray[0] = self.relativehumidity
146
+ if self._relativehumidity_ramflag:
147
+ self._relativehumidity_array[idx] = self.relativehumidity
148
+ if self._windspeed_diskflag_writing:
149
+ self._windspeed_ncarray[0] = self.windspeed
150
+ if self._windspeed_ramflag:
151
+ self._windspeed_array[idx] = self.windspeed
152
+ cpdef inline set_pointerinput(self, str name, pointerutils.PDouble value):
153
+ if name == "nied":
154
+ self._nied_inputpointer = value.p_value
155
+ if name == "teml":
156
+ self._teml_inputpointer = value.p_value
157
+ if name == "relativehumidity":
158
+ self._relativehumidity_inputpointer = value.p_value
159
+ if name == "windspeed":
160
+ self._windspeed_inputpointer = value.p_value
161
+ @cython.final
162
+ cdef class FactorSequences:
163
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
164
+ cdef numpy.int64_t k
165
+ if self._possiblesunshineduration_diskflag_reading:
166
+ self.possiblesunshineduration = self._possiblesunshineduration_ncarray[0]
167
+ elif self._possiblesunshineduration_ramflag:
168
+ self.possiblesunshineduration = self._possiblesunshineduration_array[idx]
169
+ if self._sunshineduration_diskflag_reading:
170
+ self.sunshineduration = self._sunshineduration_ncarray[0]
171
+ elif self._sunshineduration_ramflag:
172
+ self.sunshineduration = self._sunshineduration_array[idx]
173
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
174
+ cdef numpy.int64_t k
175
+ if self._possiblesunshineduration_diskflag_writing:
176
+ self._possiblesunshineduration_ncarray[0] = self.possiblesunshineduration
177
+ if self._possiblesunshineduration_ramflag:
178
+ self._possiblesunshineduration_array[idx] = self.possiblesunshineduration
179
+ if self._sunshineduration_diskflag_writing:
180
+ self._sunshineduration_ncarray[0] = self.sunshineduration
181
+ if self._sunshineduration_ramflag:
182
+ self._sunshineduration_array[idx] = self.sunshineduration
183
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
184
+ if name == "possiblesunshineduration":
185
+ self._possiblesunshineduration_outputpointer = value.p_value
186
+ if name == "sunshineduration":
187
+ self._sunshineduration_outputpointer = value.p_value
188
+ cpdef inline void update_outputs(self) noexcept nogil:
189
+ if self._possiblesunshineduration_outputflag:
190
+ self._possiblesunshineduration_outputpointer[0] = self.possiblesunshineduration
191
+ if self._sunshineduration_outputflag:
192
+ self._sunshineduration_outputpointer[0] = self.sunshineduration
193
+ @cython.final
194
+ cdef class FluxSequences:
195
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
196
+ cdef numpy.int64_t jdx0
197
+ cdef numpy.int64_t k
198
+ if self._qz_diskflag_reading:
199
+ self.qz = self._qz_ncarray[0]
200
+ elif self._qz_ramflag:
201
+ self.qz = self._qz_array[idx]
202
+ if self._qzh_diskflag_reading:
203
+ self.qzh = self._qzh_ncarray[0]
204
+ elif self._qzh_ramflag:
205
+ self.qzh = self._qzh_array[idx]
206
+ if self._dailysunshineduration_diskflag_reading:
207
+ self.dailysunshineduration = self._dailysunshineduration_ncarray[0]
208
+ elif self._dailysunshineduration_ramflag:
209
+ self.dailysunshineduration = self._dailysunshineduration_array[idx]
210
+ if self._dailypossiblesunshineduration_diskflag_reading:
211
+ self.dailypossiblesunshineduration = self._dailypossiblesunshineduration_ncarray[0]
212
+ elif self._dailypossiblesunshineduration_ramflag:
213
+ self.dailypossiblesunshineduration = self._dailypossiblesunshineduration_array[idx]
214
+ if self._globalradiation_diskflag_reading:
215
+ self.globalradiation = self._globalradiation_ncarray[0]
216
+ elif self._globalradiation_ramflag:
217
+ self.globalradiation = self._globalradiation_array[idx]
218
+ if self._nkor_diskflag_reading:
219
+ k = 0
220
+ for jdx0 in range(self._nkor_length_0):
221
+ self.nkor[jdx0] = self._nkor_ncarray[k]
222
+ k += 1
223
+ elif self._nkor_ramflag:
224
+ for jdx0 in range(self._nkor_length_0):
225
+ self.nkor[jdx0] = self._nkor_array[idx, jdx0]
226
+ if self._tkor_diskflag_reading:
227
+ k = 0
228
+ for jdx0 in range(self._tkor_length_0):
229
+ self.tkor[jdx0] = self._tkor_ncarray[k]
230
+ k += 1
231
+ elif self._tkor_ramflag:
232
+ for jdx0 in range(self._tkor_length_0):
233
+ self.tkor[jdx0] = self._tkor_array[idx, jdx0]
234
+ if self._windspeed2m_diskflag_reading:
235
+ self.windspeed2m = self._windspeed2m_ncarray[0]
236
+ elif self._windspeed2m_ramflag:
237
+ self.windspeed2m = self._windspeed2m_array[idx]
238
+ if self._reducedwindspeed2m_diskflag_reading:
239
+ k = 0
240
+ for jdx0 in range(self._reducedwindspeed2m_length_0):
241
+ self.reducedwindspeed2m[jdx0] = self._reducedwindspeed2m_ncarray[k]
242
+ k += 1
243
+ elif self._reducedwindspeed2m_ramflag:
244
+ for jdx0 in range(self._reducedwindspeed2m_length_0):
245
+ self.reducedwindspeed2m[jdx0] = self._reducedwindspeed2m_array[idx, jdx0]
246
+ if self._saturationvapourpressure_diskflag_reading:
247
+ k = 0
248
+ for jdx0 in range(self._saturationvapourpressure_length_0):
249
+ self.saturationvapourpressure[jdx0] = self._saturationvapourpressure_ncarray[k]
250
+ k += 1
251
+ elif self._saturationvapourpressure_ramflag:
252
+ for jdx0 in range(self._saturationvapourpressure_length_0):
253
+ self.saturationvapourpressure[jdx0] = self._saturationvapourpressure_array[idx, jdx0]
254
+ if self._saturationvapourpressureinz_diskflag_reading:
255
+ k = 0
256
+ for jdx0 in range(self._saturationvapourpressureinz_length_0):
257
+ self.saturationvapourpressureinz[jdx0] = self._saturationvapourpressureinz_ncarray[k]
258
+ k += 1
259
+ elif self._saturationvapourpressureinz_ramflag:
260
+ for jdx0 in range(self._saturationvapourpressureinz_length_0):
261
+ self.saturationvapourpressureinz[jdx0] = self._saturationvapourpressureinz_array[idx, jdx0]
262
+ if self._saturationvapourpressuresnow_diskflag_reading:
263
+ k = 0
264
+ for jdx0 in range(self._saturationvapourpressuresnow_length_0):
265
+ self.saturationvapourpressuresnow[jdx0] = self._saturationvapourpressuresnow_ncarray[k]
266
+ k += 1
267
+ elif self._saturationvapourpressuresnow_ramflag:
268
+ for jdx0 in range(self._saturationvapourpressuresnow_length_0):
269
+ self.saturationvapourpressuresnow[jdx0] = self._saturationvapourpressuresnow_array[idx, jdx0]
270
+ if self._actualvapourpressure_diskflag_reading:
271
+ k = 0
272
+ for jdx0 in range(self._actualvapourpressure_length_0):
273
+ self.actualvapourpressure[jdx0] = self._actualvapourpressure_ncarray[k]
274
+ k += 1
275
+ elif self._actualvapourpressure_ramflag:
276
+ for jdx0 in range(self._actualvapourpressure_length_0):
277
+ self.actualvapourpressure[jdx0] = self._actualvapourpressure_array[idx, jdx0]
278
+ if self._tz_diskflag_reading:
279
+ k = 0
280
+ for jdx0 in range(self._tz_length_0):
281
+ self.tz[jdx0] = self._tz_ncarray[k]
282
+ k += 1
283
+ elif self._tz_ramflag:
284
+ for jdx0 in range(self._tz_length_0):
285
+ self.tz[jdx0] = self._tz_array[idx, jdx0]
286
+ if self._wg_diskflag_reading:
287
+ k = 0
288
+ for jdx0 in range(self._wg_length_0):
289
+ self.wg[jdx0] = self._wg_ncarray[k]
290
+ k += 1
291
+ elif self._wg_ramflag:
292
+ for jdx0 in range(self._wg_length_0):
293
+ self.wg[jdx0] = self._wg_array[idx, jdx0]
294
+ if self._netshortwaveradiationinz_diskflag_reading:
295
+ k = 0
296
+ for jdx0 in range(self._netshortwaveradiationinz_length_0):
297
+ self.netshortwaveradiationinz[jdx0] = self._netshortwaveradiationinz_ncarray[k]
298
+ k += 1
299
+ elif self._netshortwaveradiationinz_ramflag:
300
+ for jdx0 in range(self._netshortwaveradiationinz_length_0):
301
+ self.netshortwaveradiationinz[jdx0] = self._netshortwaveradiationinz_array[idx, jdx0]
302
+ if self._netshortwaveradiationsnow_diskflag_reading:
303
+ k = 0
304
+ for jdx0 in range(self._netshortwaveradiationsnow_length_0):
305
+ self.netshortwaveradiationsnow[jdx0] = self._netshortwaveradiationsnow_ncarray[k]
306
+ k += 1
307
+ elif self._netshortwaveradiationsnow_ramflag:
308
+ for jdx0 in range(self._netshortwaveradiationsnow_length_0):
309
+ self.netshortwaveradiationsnow[jdx0] = self._netshortwaveradiationsnow_array[idx, jdx0]
310
+ if self._netlongwaveradiationinz_diskflag_reading:
311
+ k = 0
312
+ for jdx0 in range(self._netlongwaveradiationinz_length_0):
313
+ self.netlongwaveradiationinz[jdx0] = self._netlongwaveradiationinz_ncarray[k]
314
+ k += 1
315
+ elif self._netlongwaveradiationinz_ramflag:
316
+ for jdx0 in range(self._netlongwaveradiationinz_length_0):
317
+ self.netlongwaveradiationinz[jdx0] = self._netlongwaveradiationinz_array[idx, jdx0]
318
+ if self._netlongwaveradiationsnow_diskflag_reading:
319
+ k = 0
320
+ for jdx0 in range(self._netlongwaveradiationsnow_length_0):
321
+ self.netlongwaveradiationsnow[jdx0] = self._netlongwaveradiationsnow_ncarray[k]
322
+ k += 1
323
+ elif self._netlongwaveradiationsnow_ramflag:
324
+ for jdx0 in range(self._netlongwaveradiationsnow_length_0):
325
+ self.netlongwaveradiationsnow[jdx0] = self._netlongwaveradiationsnow_array[idx, jdx0]
326
+ if self._netradiationinz_diskflag_reading:
327
+ k = 0
328
+ for jdx0 in range(self._netradiationinz_length_0):
329
+ self.netradiationinz[jdx0] = self._netradiationinz_ncarray[k]
330
+ k += 1
331
+ elif self._netradiationinz_ramflag:
332
+ for jdx0 in range(self._netradiationinz_length_0):
333
+ self.netradiationinz[jdx0] = self._netradiationinz_array[idx, jdx0]
334
+ if self._netradiationsnow_diskflag_reading:
335
+ k = 0
336
+ for jdx0 in range(self._netradiationsnow_length_0):
337
+ self.netradiationsnow[jdx0] = self._netradiationsnow_ncarray[k]
338
+ k += 1
339
+ elif self._netradiationsnow_ramflag:
340
+ for jdx0 in range(self._netradiationsnow_length_0):
341
+ self.netradiationsnow[jdx0] = self._netradiationsnow_array[idx, jdx0]
342
+ if self._nbes_diskflag_reading:
343
+ k = 0
344
+ for jdx0 in range(self._nbes_length_0):
345
+ self.nbes[jdx0] = self._nbes_ncarray[k]
346
+ k += 1
347
+ elif self._nbes_ramflag:
348
+ for jdx0 in range(self._nbes_length_0):
349
+ self.nbes[jdx0] = self._nbes_array[idx, jdx0]
350
+ if self._sbes_diskflag_reading:
351
+ k = 0
352
+ for jdx0 in range(self._sbes_length_0):
353
+ self.sbes[jdx0] = self._sbes_ncarray[k]
354
+ k += 1
355
+ elif self._sbes_ramflag:
356
+ for jdx0 in range(self._sbes_length_0):
357
+ self.sbes[jdx0] = self._sbes_array[idx, jdx0]
358
+ if self._snowintmax_diskflag_reading:
359
+ k = 0
360
+ for jdx0 in range(self._snowintmax_length_0):
361
+ self.snowintmax[jdx0] = self._snowintmax_ncarray[k]
362
+ k += 1
363
+ elif self._snowintmax_ramflag:
364
+ for jdx0 in range(self._snowintmax_length_0):
365
+ self.snowintmax[jdx0] = self._snowintmax_array[idx, jdx0]
366
+ if self._snowintrate_diskflag_reading:
367
+ k = 0
368
+ for jdx0 in range(self._snowintrate_length_0):
369
+ self.snowintrate[jdx0] = self._snowintrate_ncarray[k]
370
+ k += 1
371
+ elif self._snowintrate_ramflag:
372
+ for jdx0 in range(self._snowintrate_length_0):
373
+ self.snowintrate[jdx0] = self._snowintrate_array[idx, jdx0]
374
+ if self._nbesinz_diskflag_reading:
375
+ k = 0
376
+ for jdx0 in range(self._nbesinz_length_0):
377
+ self.nbesinz[jdx0] = self._nbesinz_ncarray[k]
378
+ k += 1
379
+ elif self._nbesinz_ramflag:
380
+ for jdx0 in range(self._nbesinz_length_0):
381
+ self.nbesinz[jdx0] = self._nbesinz_array[idx, jdx0]
382
+ if self._sbesinz_diskflag_reading:
383
+ k = 0
384
+ for jdx0 in range(self._sbesinz_length_0):
385
+ self.sbesinz[jdx0] = self._sbesinz_ncarray[k]
386
+ k += 1
387
+ elif self._sbesinz_ramflag:
388
+ for jdx0 in range(self._sbesinz_length_0):
389
+ self.sbesinz[jdx0] = self._sbesinz_array[idx, jdx0]
390
+ if self._wniedinz_diskflag_reading:
391
+ k = 0
392
+ for jdx0 in range(self._wniedinz_length_0):
393
+ self.wniedinz[jdx0] = self._wniedinz_ncarray[k]
394
+ k += 1
395
+ elif self._wniedinz_ramflag:
396
+ for jdx0 in range(self._wniedinz_length_0):
397
+ self.wniedinz[jdx0] = self._wniedinz_array[idx, jdx0]
398
+ if self._actualalbedoinz_diskflag_reading:
399
+ k = 0
400
+ for jdx0 in range(self._actualalbedoinz_length_0):
401
+ self.actualalbedoinz[jdx0] = self._actualalbedoinz_ncarray[k]
402
+ k += 1
403
+ elif self._actualalbedoinz_ramflag:
404
+ for jdx0 in range(self._actualalbedoinz_length_0):
405
+ self.actualalbedoinz[jdx0] = self._actualalbedoinz_array[idx, jdx0]
406
+ if self._wadainz_diskflag_reading:
407
+ k = 0
408
+ for jdx0 in range(self._wadainz_length_0):
409
+ self.wadainz[jdx0] = self._wadainz_ncarray[k]
410
+ k += 1
411
+ elif self._wadainz_ramflag:
412
+ for jdx0 in range(self._wadainz_length_0):
413
+ self.wadainz[jdx0] = self._wadainz_array[idx, jdx0]
414
+ if self._schmpotinz_diskflag_reading:
415
+ k = 0
416
+ for jdx0 in range(self._schmpotinz_length_0):
417
+ self.schmpotinz[jdx0] = self._schmpotinz_ncarray[k]
418
+ k += 1
419
+ elif self._schmpotinz_ramflag:
420
+ for jdx0 in range(self._schmpotinz_length_0):
421
+ self.schmpotinz[jdx0] = self._schmpotinz_array[idx, jdx0]
422
+ if self._schminz_diskflag_reading:
423
+ k = 0
424
+ for jdx0 in range(self._schminz_length_0):
425
+ self.schminz[jdx0] = self._schminz_ncarray[k]
426
+ k += 1
427
+ elif self._schminz_ramflag:
428
+ for jdx0 in range(self._schminz_length_0):
429
+ self.schminz[jdx0] = self._schminz_array[idx, jdx0]
430
+ if self._gefrpotinz_diskflag_reading:
431
+ k = 0
432
+ for jdx0 in range(self._gefrpotinz_length_0):
433
+ self.gefrpotinz[jdx0] = self._gefrpotinz_ncarray[k]
434
+ k += 1
435
+ elif self._gefrpotinz_ramflag:
436
+ for jdx0 in range(self._gefrpotinz_length_0):
437
+ self.gefrpotinz[jdx0] = self._gefrpotinz_array[idx, jdx0]
438
+ if self._gefrinz_diskflag_reading:
439
+ k = 0
440
+ for jdx0 in range(self._gefrinz_length_0):
441
+ self.gefrinz[jdx0] = self._gefrinz_ncarray[k]
442
+ k += 1
443
+ elif self._gefrinz_ramflag:
444
+ for jdx0 in range(self._gefrinz_length_0):
445
+ self.gefrinz[jdx0] = self._gefrinz_array[idx, jdx0]
446
+ if self._evsinz_diskflag_reading:
447
+ k = 0
448
+ for jdx0 in range(self._evsinz_length_0):
449
+ self.evsinz[jdx0] = self._evsinz_ncarray[k]
450
+ k += 1
451
+ elif self._evsinz_ramflag:
452
+ for jdx0 in range(self._evsinz_length_0):
453
+ self.evsinz[jdx0] = self._evsinz_array[idx, jdx0]
454
+ if self._evi_diskflag_reading:
455
+ k = 0
456
+ for jdx0 in range(self._evi_length_0):
457
+ self.evi[jdx0] = self._evi_ncarray[k]
458
+ k += 1
459
+ elif self._evi_ramflag:
460
+ for jdx0 in range(self._evi_length_0):
461
+ self.evi[jdx0] = self._evi_array[idx, jdx0]
462
+ if self._evb_diskflag_reading:
463
+ k = 0
464
+ for jdx0 in range(self._evb_length_0):
465
+ self.evb[jdx0] = self._evb_ncarray[k]
466
+ k += 1
467
+ elif self._evb_ramflag:
468
+ for jdx0 in range(self._evb_length_0):
469
+ self.evb[jdx0] = self._evb_array[idx, jdx0]
470
+ if self._evs_diskflag_reading:
471
+ k = 0
472
+ for jdx0 in range(self._evs_length_0):
473
+ self.evs[jdx0] = self._evs_ncarray[k]
474
+ k += 1
475
+ elif self._evs_ramflag:
476
+ for jdx0 in range(self._evs_length_0):
477
+ self.evs[jdx0] = self._evs_array[idx, jdx0]
478
+ if self._wnied_diskflag_reading:
479
+ k = 0
480
+ for jdx0 in range(self._wnied_length_0):
481
+ self.wnied[jdx0] = self._wnied_ncarray[k]
482
+ k += 1
483
+ elif self._wnied_ramflag:
484
+ for jdx0 in range(self._wnied_length_0):
485
+ self.wnied[jdx0] = self._wnied_array[idx, jdx0]
486
+ if self._tempssurface_diskflag_reading:
487
+ k = 0
488
+ for jdx0 in range(self._tempssurface_length_0):
489
+ self.tempssurface[jdx0] = self._tempssurface_ncarray[k]
490
+ k += 1
491
+ elif self._tempssurface_ramflag:
492
+ for jdx0 in range(self._tempssurface_length_0):
493
+ self.tempssurface[jdx0] = self._tempssurface_array[idx, jdx0]
494
+ if self._actualalbedo_diskflag_reading:
495
+ k = 0
496
+ for jdx0 in range(self._actualalbedo_length_0):
497
+ self.actualalbedo[jdx0] = self._actualalbedo_ncarray[k]
498
+ k += 1
499
+ elif self._actualalbedo_ramflag:
500
+ for jdx0 in range(self._actualalbedo_length_0):
501
+ self.actualalbedo[jdx0] = self._actualalbedo_array[idx, jdx0]
502
+ if self._schmpot_diskflag_reading:
503
+ k = 0
504
+ for jdx0 in range(self._schmpot_length_0):
505
+ self.schmpot[jdx0] = self._schmpot_ncarray[k]
506
+ k += 1
507
+ elif self._schmpot_ramflag:
508
+ for jdx0 in range(self._schmpot_length_0):
509
+ self.schmpot[jdx0] = self._schmpot_array[idx, jdx0]
510
+ if self._schm_diskflag_reading:
511
+ k = 0
512
+ for jdx0 in range(self._schm_length_0):
513
+ self.schm[jdx0] = self._schm_ncarray[k]
514
+ k += 1
515
+ elif self._schm_ramflag:
516
+ for jdx0 in range(self._schm_length_0):
517
+ self.schm[jdx0] = self._schm_array[idx, jdx0]
518
+ if self._gefrpot_diskflag_reading:
519
+ k = 0
520
+ for jdx0 in range(self._gefrpot_length_0):
521
+ self.gefrpot[jdx0] = self._gefrpot_ncarray[k]
522
+ k += 1
523
+ elif self._gefrpot_ramflag:
524
+ for jdx0 in range(self._gefrpot_length_0):
525
+ self.gefrpot[jdx0] = self._gefrpot_array[idx, jdx0]
526
+ if self._gefr_diskflag_reading:
527
+ k = 0
528
+ for jdx0 in range(self._gefr_length_0):
529
+ self.gefr[jdx0] = self._gefr_ncarray[k]
530
+ k += 1
531
+ elif self._gefr_ramflag:
532
+ for jdx0 in range(self._gefr_length_0):
533
+ self.gefr[jdx0] = self._gefr_array[idx, jdx0]
534
+ if self._wlatinz_diskflag_reading:
535
+ k = 0
536
+ for jdx0 in range(self._wlatinz_length_0):
537
+ self.wlatinz[jdx0] = self._wlatinz_ncarray[k]
538
+ k += 1
539
+ elif self._wlatinz_ramflag:
540
+ for jdx0 in range(self._wlatinz_length_0):
541
+ self.wlatinz[jdx0] = self._wlatinz_array[idx, jdx0]
542
+ if self._wlatsnow_diskflag_reading:
543
+ k = 0
544
+ for jdx0 in range(self._wlatsnow_length_0):
545
+ self.wlatsnow[jdx0] = self._wlatsnow_ncarray[k]
546
+ k += 1
547
+ elif self._wlatsnow_ramflag:
548
+ for jdx0 in range(self._wlatsnow_length_0):
549
+ self.wlatsnow[jdx0] = self._wlatsnow_array[idx, jdx0]
550
+ if self._wsensinz_diskflag_reading:
551
+ k = 0
552
+ for jdx0 in range(self._wsensinz_length_0):
553
+ self.wsensinz[jdx0] = self._wsensinz_ncarray[k]
554
+ k += 1
555
+ elif self._wsensinz_ramflag:
556
+ for jdx0 in range(self._wsensinz_length_0):
557
+ self.wsensinz[jdx0] = self._wsensinz_array[idx, jdx0]
558
+ if self._wsenssnow_diskflag_reading:
559
+ k = 0
560
+ for jdx0 in range(self._wsenssnow_length_0):
561
+ self.wsenssnow[jdx0] = self._wsenssnow_ncarray[k]
562
+ k += 1
563
+ elif self._wsenssnow_ramflag:
564
+ for jdx0 in range(self._wsenssnow_length_0):
565
+ self.wsenssnow[jdx0] = self._wsenssnow_array[idx, jdx0]
566
+ if self._wsurfinz_diskflag_reading:
567
+ k = 0
568
+ for jdx0 in range(self._wsurfinz_length_0):
569
+ self.wsurfinz[jdx0] = self._wsurfinz_ncarray[k]
570
+ k += 1
571
+ elif self._wsurfinz_ramflag:
572
+ for jdx0 in range(self._wsurfinz_length_0):
573
+ self.wsurfinz[jdx0] = self._wsurfinz_array[idx, jdx0]
574
+ if self._wsurf_diskflag_reading:
575
+ k = 0
576
+ for jdx0 in range(self._wsurf_length_0):
577
+ self.wsurf[jdx0] = self._wsurf_ncarray[k]
578
+ k += 1
579
+ elif self._wsurf_ramflag:
580
+ for jdx0 in range(self._wsurf_length_0):
581
+ self.wsurf[jdx0] = self._wsurf_array[idx, jdx0]
582
+ if self._sff_diskflag_reading:
583
+ k = 0
584
+ for jdx0 in range(self._sff_length_0):
585
+ self.sff[jdx0] = self._sff_ncarray[k]
586
+ k += 1
587
+ elif self._sff_ramflag:
588
+ for jdx0 in range(self._sff_length_0):
589
+ self.sff[jdx0] = self._sff_array[idx, jdx0]
590
+ if self._fvg_diskflag_reading:
591
+ k = 0
592
+ for jdx0 in range(self._fvg_length_0):
593
+ self.fvg[jdx0] = self._fvg_ncarray[k]
594
+ k += 1
595
+ elif self._fvg_ramflag:
596
+ for jdx0 in range(self._fvg_length_0):
597
+ self.fvg[jdx0] = self._fvg_array[idx, jdx0]
598
+ if self._wada_diskflag_reading:
599
+ k = 0
600
+ for jdx0 in range(self._wada_length_0):
601
+ self.wada[jdx0] = self._wada_ncarray[k]
602
+ k += 1
603
+ elif self._wada_ramflag:
604
+ for jdx0 in range(self._wada_length_0):
605
+ self.wada[jdx0] = self._wada_array[idx, jdx0]
606
+ if self._qdb_diskflag_reading:
607
+ k = 0
608
+ for jdx0 in range(self._qdb_length_0):
609
+ self.qdb[jdx0] = self._qdb_ncarray[k]
610
+ k += 1
611
+ elif self._qdb_ramflag:
612
+ for jdx0 in range(self._qdb_length_0):
613
+ self.qdb[jdx0] = self._qdb_array[idx, jdx0]
614
+ if self._qib1_diskflag_reading:
615
+ k = 0
616
+ for jdx0 in range(self._qib1_length_0):
617
+ self.qib1[jdx0] = self._qib1_ncarray[k]
618
+ k += 1
619
+ elif self._qib1_ramflag:
620
+ for jdx0 in range(self._qib1_length_0):
621
+ self.qib1[jdx0] = self._qib1_array[idx, jdx0]
622
+ if self._qib2_diskflag_reading:
623
+ k = 0
624
+ for jdx0 in range(self._qib2_length_0):
625
+ self.qib2[jdx0] = self._qib2_ncarray[k]
626
+ k += 1
627
+ elif self._qib2_ramflag:
628
+ for jdx0 in range(self._qib2_length_0):
629
+ self.qib2[jdx0] = self._qib2_array[idx, jdx0]
630
+ if self._qbb_diskflag_reading:
631
+ k = 0
632
+ for jdx0 in range(self._qbb_length_0):
633
+ self.qbb[jdx0] = self._qbb_ncarray[k]
634
+ k += 1
635
+ elif self._qbb_ramflag:
636
+ for jdx0 in range(self._qbb_length_0):
637
+ self.qbb[jdx0] = self._qbb_array[idx, jdx0]
638
+ if self._qkap_diskflag_reading:
639
+ k = 0
640
+ for jdx0 in range(self._qkap_length_0):
641
+ self.qkap[jdx0] = self._qkap_ncarray[k]
642
+ k += 1
643
+ elif self._qkap_ramflag:
644
+ for jdx0 in range(self._qkap_length_0):
645
+ self.qkap[jdx0] = self._qkap_array[idx, jdx0]
646
+ if self._qdgz_diskflag_reading:
647
+ self.qdgz = self._qdgz_ncarray[0]
648
+ elif self._qdgz_ramflag:
649
+ self.qdgz = self._qdgz_array[idx]
650
+ if self._qdgz1_diskflag_reading:
651
+ self.qdgz1 = self._qdgz1_ncarray[0]
652
+ elif self._qdgz1_ramflag:
653
+ self.qdgz1 = self._qdgz1_array[idx]
654
+ if self._qdgz2_diskflag_reading:
655
+ self.qdgz2 = self._qdgz2_ncarray[0]
656
+ elif self._qdgz2_ramflag:
657
+ self.qdgz2 = self._qdgz2_array[idx]
658
+ if self._qigz1_diskflag_reading:
659
+ self.qigz1 = self._qigz1_ncarray[0]
660
+ elif self._qigz1_ramflag:
661
+ self.qigz1 = self._qigz1_array[idx]
662
+ if self._qigz2_diskflag_reading:
663
+ self.qigz2 = self._qigz2_ncarray[0]
664
+ elif self._qigz2_ramflag:
665
+ self.qigz2 = self._qigz2_array[idx]
666
+ if self._qbgz_diskflag_reading:
667
+ self.qbgz = self._qbgz_ncarray[0]
668
+ elif self._qbgz_ramflag:
669
+ self.qbgz = self._qbgz_array[idx]
670
+ if self._qdga1_diskflag_reading:
671
+ self.qdga1 = self._qdga1_ncarray[0]
672
+ elif self._qdga1_ramflag:
673
+ self.qdga1 = self._qdga1_array[idx]
674
+ if self._qdga2_diskflag_reading:
675
+ self.qdga2 = self._qdga2_ncarray[0]
676
+ elif self._qdga2_ramflag:
677
+ self.qdga2 = self._qdga2_array[idx]
678
+ if self._qiga1_diskflag_reading:
679
+ self.qiga1 = self._qiga1_ncarray[0]
680
+ elif self._qiga1_ramflag:
681
+ self.qiga1 = self._qiga1_array[idx]
682
+ if self._qiga2_diskflag_reading:
683
+ self.qiga2 = self._qiga2_ncarray[0]
684
+ elif self._qiga2_ramflag:
685
+ self.qiga2 = self._qiga2_array[idx]
686
+ if self._qbga_diskflag_reading:
687
+ self.qbga = self._qbga_ncarray[0]
688
+ elif self._qbga_ramflag:
689
+ self.qbga = self._qbga_array[idx]
690
+ if self._qah_diskflag_reading:
691
+ self.qah = self._qah_ncarray[0]
692
+ elif self._qah_ramflag:
693
+ self.qah = self._qah_array[idx]
694
+ if self._qa_diskflag_reading:
695
+ self.qa = self._qa_ncarray[0]
696
+ elif self._qa_ramflag:
697
+ self.qa = self._qa_array[idx]
698
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
699
+ cdef numpy.int64_t jdx0
700
+ cdef numpy.int64_t k
701
+ if self._qz_diskflag_writing:
702
+ self._qz_ncarray[0] = self.qz
703
+ if self._qz_ramflag:
704
+ self._qz_array[idx] = self.qz
705
+ if self._qzh_diskflag_writing:
706
+ self._qzh_ncarray[0] = self.qzh
707
+ if self._qzh_ramflag:
708
+ self._qzh_array[idx] = self.qzh
709
+ if self._dailysunshineduration_diskflag_writing:
710
+ self._dailysunshineduration_ncarray[0] = self.dailysunshineduration
711
+ if self._dailysunshineduration_ramflag:
712
+ self._dailysunshineduration_array[idx] = self.dailysunshineduration
713
+ if self._dailypossiblesunshineduration_diskflag_writing:
714
+ self._dailypossiblesunshineduration_ncarray[0] = self.dailypossiblesunshineduration
715
+ if self._dailypossiblesunshineduration_ramflag:
716
+ self._dailypossiblesunshineduration_array[idx] = self.dailypossiblesunshineduration
717
+ if self._globalradiation_diskflag_writing:
718
+ self._globalradiation_ncarray[0] = self.globalradiation
719
+ if self._globalradiation_ramflag:
720
+ self._globalradiation_array[idx] = self.globalradiation
721
+ if self._nkor_diskflag_writing:
722
+ k = 0
723
+ for jdx0 in range(self._nkor_length_0):
724
+ self._nkor_ncarray[k] = self.nkor[jdx0]
725
+ k += 1
726
+ if self._nkor_ramflag:
727
+ for jdx0 in range(self._nkor_length_0):
728
+ self._nkor_array[idx, jdx0] = self.nkor[jdx0]
729
+ if self._tkor_diskflag_writing:
730
+ k = 0
731
+ for jdx0 in range(self._tkor_length_0):
732
+ self._tkor_ncarray[k] = self.tkor[jdx0]
733
+ k += 1
734
+ if self._tkor_ramflag:
735
+ for jdx0 in range(self._tkor_length_0):
736
+ self._tkor_array[idx, jdx0] = self.tkor[jdx0]
737
+ if self._windspeed2m_diskflag_writing:
738
+ self._windspeed2m_ncarray[0] = self.windspeed2m
739
+ if self._windspeed2m_ramflag:
740
+ self._windspeed2m_array[idx] = self.windspeed2m
741
+ if self._reducedwindspeed2m_diskflag_writing:
742
+ k = 0
743
+ for jdx0 in range(self._reducedwindspeed2m_length_0):
744
+ self._reducedwindspeed2m_ncarray[k] = self.reducedwindspeed2m[jdx0]
745
+ k += 1
746
+ if self._reducedwindspeed2m_ramflag:
747
+ for jdx0 in range(self._reducedwindspeed2m_length_0):
748
+ self._reducedwindspeed2m_array[idx, jdx0] = self.reducedwindspeed2m[jdx0]
749
+ if self._saturationvapourpressure_diskflag_writing:
750
+ k = 0
751
+ for jdx0 in range(self._saturationvapourpressure_length_0):
752
+ self._saturationvapourpressure_ncarray[k] = self.saturationvapourpressure[jdx0]
753
+ k += 1
754
+ if self._saturationvapourpressure_ramflag:
755
+ for jdx0 in range(self._saturationvapourpressure_length_0):
756
+ self._saturationvapourpressure_array[idx, jdx0] = self.saturationvapourpressure[jdx0]
757
+ if self._saturationvapourpressureinz_diskflag_writing:
758
+ k = 0
759
+ for jdx0 in range(self._saturationvapourpressureinz_length_0):
760
+ self._saturationvapourpressureinz_ncarray[k] = self.saturationvapourpressureinz[jdx0]
761
+ k += 1
762
+ if self._saturationvapourpressureinz_ramflag:
763
+ for jdx0 in range(self._saturationvapourpressureinz_length_0):
764
+ self._saturationvapourpressureinz_array[idx, jdx0] = self.saturationvapourpressureinz[jdx0]
765
+ if self._saturationvapourpressuresnow_diskflag_writing:
766
+ k = 0
767
+ for jdx0 in range(self._saturationvapourpressuresnow_length_0):
768
+ self._saturationvapourpressuresnow_ncarray[k] = self.saturationvapourpressuresnow[jdx0]
769
+ k += 1
770
+ if self._saturationvapourpressuresnow_ramflag:
771
+ for jdx0 in range(self._saturationvapourpressuresnow_length_0):
772
+ self._saturationvapourpressuresnow_array[idx, jdx0] = self.saturationvapourpressuresnow[jdx0]
773
+ if self._actualvapourpressure_diskflag_writing:
774
+ k = 0
775
+ for jdx0 in range(self._actualvapourpressure_length_0):
776
+ self._actualvapourpressure_ncarray[k] = self.actualvapourpressure[jdx0]
777
+ k += 1
778
+ if self._actualvapourpressure_ramflag:
779
+ for jdx0 in range(self._actualvapourpressure_length_0):
780
+ self._actualvapourpressure_array[idx, jdx0] = self.actualvapourpressure[jdx0]
781
+ if self._tz_diskflag_writing:
782
+ k = 0
783
+ for jdx0 in range(self._tz_length_0):
784
+ self._tz_ncarray[k] = self.tz[jdx0]
785
+ k += 1
786
+ if self._tz_ramflag:
787
+ for jdx0 in range(self._tz_length_0):
788
+ self._tz_array[idx, jdx0] = self.tz[jdx0]
789
+ if self._wg_diskflag_writing:
790
+ k = 0
791
+ for jdx0 in range(self._wg_length_0):
792
+ self._wg_ncarray[k] = self.wg[jdx0]
793
+ k += 1
794
+ if self._wg_ramflag:
795
+ for jdx0 in range(self._wg_length_0):
796
+ self._wg_array[idx, jdx0] = self.wg[jdx0]
797
+ if self._netshortwaveradiationinz_diskflag_writing:
798
+ k = 0
799
+ for jdx0 in range(self._netshortwaveradiationinz_length_0):
800
+ self._netshortwaveradiationinz_ncarray[k] = self.netshortwaveradiationinz[jdx0]
801
+ k += 1
802
+ if self._netshortwaveradiationinz_ramflag:
803
+ for jdx0 in range(self._netshortwaveradiationinz_length_0):
804
+ self._netshortwaveradiationinz_array[idx, jdx0] = self.netshortwaveradiationinz[jdx0]
805
+ if self._netshortwaveradiationsnow_diskflag_writing:
806
+ k = 0
807
+ for jdx0 in range(self._netshortwaveradiationsnow_length_0):
808
+ self._netshortwaveradiationsnow_ncarray[k] = self.netshortwaveradiationsnow[jdx0]
809
+ k += 1
810
+ if self._netshortwaveradiationsnow_ramflag:
811
+ for jdx0 in range(self._netshortwaveradiationsnow_length_0):
812
+ self._netshortwaveradiationsnow_array[idx, jdx0] = self.netshortwaveradiationsnow[jdx0]
813
+ if self._netlongwaveradiationinz_diskflag_writing:
814
+ k = 0
815
+ for jdx0 in range(self._netlongwaveradiationinz_length_0):
816
+ self._netlongwaveradiationinz_ncarray[k] = self.netlongwaveradiationinz[jdx0]
817
+ k += 1
818
+ if self._netlongwaveradiationinz_ramflag:
819
+ for jdx0 in range(self._netlongwaveradiationinz_length_0):
820
+ self._netlongwaveradiationinz_array[idx, jdx0] = self.netlongwaveradiationinz[jdx0]
821
+ if self._netlongwaveradiationsnow_diskflag_writing:
822
+ k = 0
823
+ for jdx0 in range(self._netlongwaveradiationsnow_length_0):
824
+ self._netlongwaveradiationsnow_ncarray[k] = self.netlongwaveradiationsnow[jdx0]
825
+ k += 1
826
+ if self._netlongwaveradiationsnow_ramflag:
827
+ for jdx0 in range(self._netlongwaveradiationsnow_length_0):
828
+ self._netlongwaveradiationsnow_array[idx, jdx0] = self.netlongwaveradiationsnow[jdx0]
829
+ if self._netradiationinz_diskflag_writing:
830
+ k = 0
831
+ for jdx0 in range(self._netradiationinz_length_0):
832
+ self._netradiationinz_ncarray[k] = self.netradiationinz[jdx0]
833
+ k += 1
834
+ if self._netradiationinz_ramflag:
835
+ for jdx0 in range(self._netradiationinz_length_0):
836
+ self._netradiationinz_array[idx, jdx0] = self.netradiationinz[jdx0]
837
+ if self._netradiationsnow_diskflag_writing:
838
+ k = 0
839
+ for jdx0 in range(self._netradiationsnow_length_0):
840
+ self._netradiationsnow_ncarray[k] = self.netradiationsnow[jdx0]
841
+ k += 1
842
+ if self._netradiationsnow_ramflag:
843
+ for jdx0 in range(self._netradiationsnow_length_0):
844
+ self._netradiationsnow_array[idx, jdx0] = self.netradiationsnow[jdx0]
845
+ if self._nbes_diskflag_writing:
846
+ k = 0
847
+ for jdx0 in range(self._nbes_length_0):
848
+ self._nbes_ncarray[k] = self.nbes[jdx0]
849
+ k += 1
850
+ if self._nbes_ramflag:
851
+ for jdx0 in range(self._nbes_length_0):
852
+ self._nbes_array[idx, jdx0] = self.nbes[jdx0]
853
+ if self._sbes_diskflag_writing:
854
+ k = 0
855
+ for jdx0 in range(self._sbes_length_0):
856
+ self._sbes_ncarray[k] = self.sbes[jdx0]
857
+ k += 1
858
+ if self._sbes_ramflag:
859
+ for jdx0 in range(self._sbes_length_0):
860
+ self._sbes_array[idx, jdx0] = self.sbes[jdx0]
861
+ if self._snowintmax_diskflag_writing:
862
+ k = 0
863
+ for jdx0 in range(self._snowintmax_length_0):
864
+ self._snowintmax_ncarray[k] = self.snowintmax[jdx0]
865
+ k += 1
866
+ if self._snowintmax_ramflag:
867
+ for jdx0 in range(self._snowintmax_length_0):
868
+ self._snowintmax_array[idx, jdx0] = self.snowintmax[jdx0]
869
+ if self._snowintrate_diskflag_writing:
870
+ k = 0
871
+ for jdx0 in range(self._snowintrate_length_0):
872
+ self._snowintrate_ncarray[k] = self.snowintrate[jdx0]
873
+ k += 1
874
+ if self._snowintrate_ramflag:
875
+ for jdx0 in range(self._snowintrate_length_0):
876
+ self._snowintrate_array[idx, jdx0] = self.snowintrate[jdx0]
877
+ if self._nbesinz_diskflag_writing:
878
+ k = 0
879
+ for jdx0 in range(self._nbesinz_length_0):
880
+ self._nbesinz_ncarray[k] = self.nbesinz[jdx0]
881
+ k += 1
882
+ if self._nbesinz_ramflag:
883
+ for jdx0 in range(self._nbesinz_length_0):
884
+ self._nbesinz_array[idx, jdx0] = self.nbesinz[jdx0]
885
+ if self._sbesinz_diskflag_writing:
886
+ k = 0
887
+ for jdx0 in range(self._sbesinz_length_0):
888
+ self._sbesinz_ncarray[k] = self.sbesinz[jdx0]
889
+ k += 1
890
+ if self._sbesinz_ramflag:
891
+ for jdx0 in range(self._sbesinz_length_0):
892
+ self._sbesinz_array[idx, jdx0] = self.sbesinz[jdx0]
893
+ if self._wniedinz_diskflag_writing:
894
+ k = 0
895
+ for jdx0 in range(self._wniedinz_length_0):
896
+ self._wniedinz_ncarray[k] = self.wniedinz[jdx0]
897
+ k += 1
898
+ if self._wniedinz_ramflag:
899
+ for jdx0 in range(self._wniedinz_length_0):
900
+ self._wniedinz_array[idx, jdx0] = self.wniedinz[jdx0]
901
+ if self._actualalbedoinz_diskflag_writing:
902
+ k = 0
903
+ for jdx0 in range(self._actualalbedoinz_length_0):
904
+ self._actualalbedoinz_ncarray[k] = self.actualalbedoinz[jdx0]
905
+ k += 1
906
+ if self._actualalbedoinz_ramflag:
907
+ for jdx0 in range(self._actualalbedoinz_length_0):
908
+ self._actualalbedoinz_array[idx, jdx0] = self.actualalbedoinz[jdx0]
909
+ if self._wadainz_diskflag_writing:
910
+ k = 0
911
+ for jdx0 in range(self._wadainz_length_0):
912
+ self._wadainz_ncarray[k] = self.wadainz[jdx0]
913
+ k += 1
914
+ if self._wadainz_ramflag:
915
+ for jdx0 in range(self._wadainz_length_0):
916
+ self._wadainz_array[idx, jdx0] = self.wadainz[jdx0]
917
+ if self._schmpotinz_diskflag_writing:
918
+ k = 0
919
+ for jdx0 in range(self._schmpotinz_length_0):
920
+ self._schmpotinz_ncarray[k] = self.schmpotinz[jdx0]
921
+ k += 1
922
+ if self._schmpotinz_ramflag:
923
+ for jdx0 in range(self._schmpotinz_length_0):
924
+ self._schmpotinz_array[idx, jdx0] = self.schmpotinz[jdx0]
925
+ if self._schminz_diskflag_writing:
926
+ k = 0
927
+ for jdx0 in range(self._schminz_length_0):
928
+ self._schminz_ncarray[k] = self.schminz[jdx0]
929
+ k += 1
930
+ if self._schminz_ramflag:
931
+ for jdx0 in range(self._schminz_length_0):
932
+ self._schminz_array[idx, jdx0] = self.schminz[jdx0]
933
+ if self._gefrpotinz_diskflag_writing:
934
+ k = 0
935
+ for jdx0 in range(self._gefrpotinz_length_0):
936
+ self._gefrpotinz_ncarray[k] = self.gefrpotinz[jdx0]
937
+ k += 1
938
+ if self._gefrpotinz_ramflag:
939
+ for jdx0 in range(self._gefrpotinz_length_0):
940
+ self._gefrpotinz_array[idx, jdx0] = self.gefrpotinz[jdx0]
941
+ if self._gefrinz_diskflag_writing:
942
+ k = 0
943
+ for jdx0 in range(self._gefrinz_length_0):
944
+ self._gefrinz_ncarray[k] = self.gefrinz[jdx0]
945
+ k += 1
946
+ if self._gefrinz_ramflag:
947
+ for jdx0 in range(self._gefrinz_length_0):
948
+ self._gefrinz_array[idx, jdx0] = self.gefrinz[jdx0]
949
+ if self._evsinz_diskflag_writing:
950
+ k = 0
951
+ for jdx0 in range(self._evsinz_length_0):
952
+ self._evsinz_ncarray[k] = self.evsinz[jdx0]
953
+ k += 1
954
+ if self._evsinz_ramflag:
955
+ for jdx0 in range(self._evsinz_length_0):
956
+ self._evsinz_array[idx, jdx0] = self.evsinz[jdx0]
957
+ if self._evi_diskflag_writing:
958
+ k = 0
959
+ for jdx0 in range(self._evi_length_0):
960
+ self._evi_ncarray[k] = self.evi[jdx0]
961
+ k += 1
962
+ if self._evi_ramflag:
963
+ for jdx0 in range(self._evi_length_0):
964
+ self._evi_array[idx, jdx0] = self.evi[jdx0]
965
+ if self._evb_diskflag_writing:
966
+ k = 0
967
+ for jdx0 in range(self._evb_length_0):
968
+ self._evb_ncarray[k] = self.evb[jdx0]
969
+ k += 1
970
+ if self._evb_ramflag:
971
+ for jdx0 in range(self._evb_length_0):
972
+ self._evb_array[idx, jdx0] = self.evb[jdx0]
973
+ if self._evs_diskflag_writing:
974
+ k = 0
975
+ for jdx0 in range(self._evs_length_0):
976
+ self._evs_ncarray[k] = self.evs[jdx0]
977
+ k += 1
978
+ if self._evs_ramflag:
979
+ for jdx0 in range(self._evs_length_0):
980
+ self._evs_array[idx, jdx0] = self.evs[jdx0]
981
+ if self._wnied_diskflag_writing:
982
+ k = 0
983
+ for jdx0 in range(self._wnied_length_0):
984
+ self._wnied_ncarray[k] = self.wnied[jdx0]
985
+ k += 1
986
+ if self._wnied_ramflag:
987
+ for jdx0 in range(self._wnied_length_0):
988
+ self._wnied_array[idx, jdx0] = self.wnied[jdx0]
989
+ if self._tempssurface_diskflag_writing:
990
+ k = 0
991
+ for jdx0 in range(self._tempssurface_length_0):
992
+ self._tempssurface_ncarray[k] = self.tempssurface[jdx0]
993
+ k += 1
994
+ if self._tempssurface_ramflag:
995
+ for jdx0 in range(self._tempssurface_length_0):
996
+ self._tempssurface_array[idx, jdx0] = self.tempssurface[jdx0]
997
+ if self._actualalbedo_diskflag_writing:
998
+ k = 0
999
+ for jdx0 in range(self._actualalbedo_length_0):
1000
+ self._actualalbedo_ncarray[k] = self.actualalbedo[jdx0]
1001
+ k += 1
1002
+ if self._actualalbedo_ramflag:
1003
+ for jdx0 in range(self._actualalbedo_length_0):
1004
+ self._actualalbedo_array[idx, jdx0] = self.actualalbedo[jdx0]
1005
+ if self._schmpot_diskflag_writing:
1006
+ k = 0
1007
+ for jdx0 in range(self._schmpot_length_0):
1008
+ self._schmpot_ncarray[k] = self.schmpot[jdx0]
1009
+ k += 1
1010
+ if self._schmpot_ramflag:
1011
+ for jdx0 in range(self._schmpot_length_0):
1012
+ self._schmpot_array[idx, jdx0] = self.schmpot[jdx0]
1013
+ if self._schm_diskflag_writing:
1014
+ k = 0
1015
+ for jdx0 in range(self._schm_length_0):
1016
+ self._schm_ncarray[k] = self.schm[jdx0]
1017
+ k += 1
1018
+ if self._schm_ramflag:
1019
+ for jdx0 in range(self._schm_length_0):
1020
+ self._schm_array[idx, jdx0] = self.schm[jdx0]
1021
+ if self._gefrpot_diskflag_writing:
1022
+ k = 0
1023
+ for jdx0 in range(self._gefrpot_length_0):
1024
+ self._gefrpot_ncarray[k] = self.gefrpot[jdx0]
1025
+ k += 1
1026
+ if self._gefrpot_ramflag:
1027
+ for jdx0 in range(self._gefrpot_length_0):
1028
+ self._gefrpot_array[idx, jdx0] = self.gefrpot[jdx0]
1029
+ if self._gefr_diskflag_writing:
1030
+ k = 0
1031
+ for jdx0 in range(self._gefr_length_0):
1032
+ self._gefr_ncarray[k] = self.gefr[jdx0]
1033
+ k += 1
1034
+ if self._gefr_ramflag:
1035
+ for jdx0 in range(self._gefr_length_0):
1036
+ self._gefr_array[idx, jdx0] = self.gefr[jdx0]
1037
+ if self._wlatinz_diskflag_writing:
1038
+ k = 0
1039
+ for jdx0 in range(self._wlatinz_length_0):
1040
+ self._wlatinz_ncarray[k] = self.wlatinz[jdx0]
1041
+ k += 1
1042
+ if self._wlatinz_ramflag:
1043
+ for jdx0 in range(self._wlatinz_length_0):
1044
+ self._wlatinz_array[idx, jdx0] = self.wlatinz[jdx0]
1045
+ if self._wlatsnow_diskflag_writing:
1046
+ k = 0
1047
+ for jdx0 in range(self._wlatsnow_length_0):
1048
+ self._wlatsnow_ncarray[k] = self.wlatsnow[jdx0]
1049
+ k += 1
1050
+ if self._wlatsnow_ramflag:
1051
+ for jdx0 in range(self._wlatsnow_length_0):
1052
+ self._wlatsnow_array[idx, jdx0] = self.wlatsnow[jdx0]
1053
+ if self._wsensinz_diskflag_writing:
1054
+ k = 0
1055
+ for jdx0 in range(self._wsensinz_length_0):
1056
+ self._wsensinz_ncarray[k] = self.wsensinz[jdx0]
1057
+ k += 1
1058
+ if self._wsensinz_ramflag:
1059
+ for jdx0 in range(self._wsensinz_length_0):
1060
+ self._wsensinz_array[idx, jdx0] = self.wsensinz[jdx0]
1061
+ if self._wsenssnow_diskflag_writing:
1062
+ k = 0
1063
+ for jdx0 in range(self._wsenssnow_length_0):
1064
+ self._wsenssnow_ncarray[k] = self.wsenssnow[jdx0]
1065
+ k += 1
1066
+ if self._wsenssnow_ramflag:
1067
+ for jdx0 in range(self._wsenssnow_length_0):
1068
+ self._wsenssnow_array[idx, jdx0] = self.wsenssnow[jdx0]
1069
+ if self._wsurfinz_diskflag_writing:
1070
+ k = 0
1071
+ for jdx0 in range(self._wsurfinz_length_0):
1072
+ self._wsurfinz_ncarray[k] = self.wsurfinz[jdx0]
1073
+ k += 1
1074
+ if self._wsurfinz_ramflag:
1075
+ for jdx0 in range(self._wsurfinz_length_0):
1076
+ self._wsurfinz_array[idx, jdx0] = self.wsurfinz[jdx0]
1077
+ if self._wsurf_diskflag_writing:
1078
+ k = 0
1079
+ for jdx0 in range(self._wsurf_length_0):
1080
+ self._wsurf_ncarray[k] = self.wsurf[jdx0]
1081
+ k += 1
1082
+ if self._wsurf_ramflag:
1083
+ for jdx0 in range(self._wsurf_length_0):
1084
+ self._wsurf_array[idx, jdx0] = self.wsurf[jdx0]
1085
+ if self._sff_diskflag_writing:
1086
+ k = 0
1087
+ for jdx0 in range(self._sff_length_0):
1088
+ self._sff_ncarray[k] = self.sff[jdx0]
1089
+ k += 1
1090
+ if self._sff_ramflag:
1091
+ for jdx0 in range(self._sff_length_0):
1092
+ self._sff_array[idx, jdx0] = self.sff[jdx0]
1093
+ if self._fvg_diskflag_writing:
1094
+ k = 0
1095
+ for jdx0 in range(self._fvg_length_0):
1096
+ self._fvg_ncarray[k] = self.fvg[jdx0]
1097
+ k += 1
1098
+ if self._fvg_ramflag:
1099
+ for jdx0 in range(self._fvg_length_0):
1100
+ self._fvg_array[idx, jdx0] = self.fvg[jdx0]
1101
+ if self._wada_diskflag_writing:
1102
+ k = 0
1103
+ for jdx0 in range(self._wada_length_0):
1104
+ self._wada_ncarray[k] = self.wada[jdx0]
1105
+ k += 1
1106
+ if self._wada_ramflag:
1107
+ for jdx0 in range(self._wada_length_0):
1108
+ self._wada_array[idx, jdx0] = self.wada[jdx0]
1109
+ if self._qdb_diskflag_writing:
1110
+ k = 0
1111
+ for jdx0 in range(self._qdb_length_0):
1112
+ self._qdb_ncarray[k] = self.qdb[jdx0]
1113
+ k += 1
1114
+ if self._qdb_ramflag:
1115
+ for jdx0 in range(self._qdb_length_0):
1116
+ self._qdb_array[idx, jdx0] = self.qdb[jdx0]
1117
+ if self._qib1_diskflag_writing:
1118
+ k = 0
1119
+ for jdx0 in range(self._qib1_length_0):
1120
+ self._qib1_ncarray[k] = self.qib1[jdx0]
1121
+ k += 1
1122
+ if self._qib1_ramflag:
1123
+ for jdx0 in range(self._qib1_length_0):
1124
+ self._qib1_array[idx, jdx0] = self.qib1[jdx0]
1125
+ if self._qib2_diskflag_writing:
1126
+ k = 0
1127
+ for jdx0 in range(self._qib2_length_0):
1128
+ self._qib2_ncarray[k] = self.qib2[jdx0]
1129
+ k += 1
1130
+ if self._qib2_ramflag:
1131
+ for jdx0 in range(self._qib2_length_0):
1132
+ self._qib2_array[idx, jdx0] = self.qib2[jdx0]
1133
+ if self._qbb_diskflag_writing:
1134
+ k = 0
1135
+ for jdx0 in range(self._qbb_length_0):
1136
+ self._qbb_ncarray[k] = self.qbb[jdx0]
1137
+ k += 1
1138
+ if self._qbb_ramflag:
1139
+ for jdx0 in range(self._qbb_length_0):
1140
+ self._qbb_array[idx, jdx0] = self.qbb[jdx0]
1141
+ if self._qkap_diskflag_writing:
1142
+ k = 0
1143
+ for jdx0 in range(self._qkap_length_0):
1144
+ self._qkap_ncarray[k] = self.qkap[jdx0]
1145
+ k += 1
1146
+ if self._qkap_ramflag:
1147
+ for jdx0 in range(self._qkap_length_0):
1148
+ self._qkap_array[idx, jdx0] = self.qkap[jdx0]
1149
+ if self._qdgz_diskflag_writing:
1150
+ self._qdgz_ncarray[0] = self.qdgz
1151
+ if self._qdgz_ramflag:
1152
+ self._qdgz_array[idx] = self.qdgz
1153
+ if self._qdgz1_diskflag_writing:
1154
+ self._qdgz1_ncarray[0] = self.qdgz1
1155
+ if self._qdgz1_ramflag:
1156
+ self._qdgz1_array[idx] = self.qdgz1
1157
+ if self._qdgz2_diskflag_writing:
1158
+ self._qdgz2_ncarray[0] = self.qdgz2
1159
+ if self._qdgz2_ramflag:
1160
+ self._qdgz2_array[idx] = self.qdgz2
1161
+ if self._qigz1_diskflag_writing:
1162
+ self._qigz1_ncarray[0] = self.qigz1
1163
+ if self._qigz1_ramflag:
1164
+ self._qigz1_array[idx] = self.qigz1
1165
+ if self._qigz2_diskflag_writing:
1166
+ self._qigz2_ncarray[0] = self.qigz2
1167
+ if self._qigz2_ramflag:
1168
+ self._qigz2_array[idx] = self.qigz2
1169
+ if self._qbgz_diskflag_writing:
1170
+ self._qbgz_ncarray[0] = self.qbgz
1171
+ if self._qbgz_ramflag:
1172
+ self._qbgz_array[idx] = self.qbgz
1173
+ if self._qdga1_diskflag_writing:
1174
+ self._qdga1_ncarray[0] = self.qdga1
1175
+ if self._qdga1_ramflag:
1176
+ self._qdga1_array[idx] = self.qdga1
1177
+ if self._qdga2_diskflag_writing:
1178
+ self._qdga2_ncarray[0] = self.qdga2
1179
+ if self._qdga2_ramflag:
1180
+ self._qdga2_array[idx] = self.qdga2
1181
+ if self._qiga1_diskflag_writing:
1182
+ self._qiga1_ncarray[0] = self.qiga1
1183
+ if self._qiga1_ramflag:
1184
+ self._qiga1_array[idx] = self.qiga1
1185
+ if self._qiga2_diskflag_writing:
1186
+ self._qiga2_ncarray[0] = self.qiga2
1187
+ if self._qiga2_ramflag:
1188
+ self._qiga2_array[idx] = self.qiga2
1189
+ if self._qbga_diskflag_writing:
1190
+ self._qbga_ncarray[0] = self.qbga
1191
+ if self._qbga_ramflag:
1192
+ self._qbga_array[idx] = self.qbga
1193
+ if self._qah_diskflag_writing:
1194
+ self._qah_ncarray[0] = self.qah
1195
+ if self._qah_ramflag:
1196
+ self._qah_array[idx] = self.qah
1197
+ if self._qa_diskflag_writing:
1198
+ self._qa_ncarray[0] = self.qa
1199
+ if self._qa_ramflag:
1200
+ self._qa_array[idx] = self.qa
1201
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
1202
+ if name == "qz":
1203
+ self._qz_outputpointer = value.p_value
1204
+ if name == "qzh":
1205
+ self._qzh_outputpointer = value.p_value
1206
+ if name == "dailysunshineduration":
1207
+ self._dailysunshineduration_outputpointer = value.p_value
1208
+ if name == "dailypossiblesunshineduration":
1209
+ self._dailypossiblesunshineduration_outputpointer = value.p_value
1210
+ if name == "globalradiation":
1211
+ self._globalradiation_outputpointer = value.p_value
1212
+ if name == "windspeed2m":
1213
+ self._windspeed2m_outputpointer = value.p_value
1214
+ if name == "qdgz":
1215
+ self._qdgz_outputpointer = value.p_value
1216
+ if name == "qdgz1":
1217
+ self._qdgz1_outputpointer = value.p_value
1218
+ if name == "qdgz2":
1219
+ self._qdgz2_outputpointer = value.p_value
1220
+ if name == "qigz1":
1221
+ self._qigz1_outputpointer = value.p_value
1222
+ if name == "qigz2":
1223
+ self._qigz2_outputpointer = value.p_value
1224
+ if name == "qbgz":
1225
+ self._qbgz_outputpointer = value.p_value
1226
+ if name == "qdga1":
1227
+ self._qdga1_outputpointer = value.p_value
1228
+ if name == "qdga2":
1229
+ self._qdga2_outputpointer = value.p_value
1230
+ if name == "qiga1":
1231
+ self._qiga1_outputpointer = value.p_value
1232
+ if name == "qiga2":
1233
+ self._qiga2_outputpointer = value.p_value
1234
+ if name == "qbga":
1235
+ self._qbga_outputpointer = value.p_value
1236
+ if name == "qah":
1237
+ self._qah_outputpointer = value.p_value
1238
+ if name == "qa":
1239
+ self._qa_outputpointer = value.p_value
1240
+ cpdef inline void update_outputs(self) noexcept nogil:
1241
+ if self._qz_outputflag:
1242
+ self._qz_outputpointer[0] = self.qz
1243
+ if self._qzh_outputflag:
1244
+ self._qzh_outputpointer[0] = self.qzh
1245
+ if self._dailysunshineduration_outputflag:
1246
+ self._dailysunshineduration_outputpointer[0] = self.dailysunshineduration
1247
+ if self._dailypossiblesunshineduration_outputflag:
1248
+ self._dailypossiblesunshineduration_outputpointer[0] = self.dailypossiblesunshineduration
1249
+ if self._globalradiation_outputflag:
1250
+ self._globalradiation_outputpointer[0] = self.globalradiation
1251
+ if self._windspeed2m_outputflag:
1252
+ self._windspeed2m_outputpointer[0] = self.windspeed2m
1253
+ if self._qdgz_outputflag:
1254
+ self._qdgz_outputpointer[0] = self.qdgz
1255
+ if self._qdgz1_outputflag:
1256
+ self._qdgz1_outputpointer[0] = self.qdgz1
1257
+ if self._qdgz2_outputflag:
1258
+ self._qdgz2_outputpointer[0] = self.qdgz2
1259
+ if self._qigz1_outputflag:
1260
+ self._qigz1_outputpointer[0] = self.qigz1
1261
+ if self._qigz2_outputflag:
1262
+ self._qigz2_outputpointer[0] = self.qigz2
1263
+ if self._qbgz_outputflag:
1264
+ self._qbgz_outputpointer[0] = self.qbgz
1265
+ if self._qdga1_outputflag:
1266
+ self._qdga1_outputpointer[0] = self.qdga1
1267
+ if self._qdga2_outputflag:
1268
+ self._qdga2_outputpointer[0] = self.qdga2
1269
+ if self._qiga1_outputflag:
1270
+ self._qiga1_outputpointer[0] = self.qiga1
1271
+ if self._qiga2_outputflag:
1272
+ self._qiga2_outputpointer[0] = self.qiga2
1273
+ if self._qbga_outputflag:
1274
+ self._qbga_outputpointer[0] = self.qbga
1275
+ if self._qah_outputflag:
1276
+ self._qah_outputpointer[0] = self.qah
1277
+ if self._qa_outputflag:
1278
+ self._qa_outputpointer[0] = self.qa
1279
+ @cython.final
1280
+ cdef class StateSequences:
1281
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
1282
+ cdef numpy.int64_t jdx0
1283
+ cdef numpy.int64_t k
1284
+ if self._inzp_diskflag_reading:
1285
+ k = 0
1286
+ for jdx0 in range(self._inzp_length_0):
1287
+ self.inzp[jdx0] = self._inzp_ncarray[k]
1288
+ k += 1
1289
+ elif self._inzp_ramflag:
1290
+ for jdx0 in range(self._inzp_length_0):
1291
+ self.inzp[jdx0] = self._inzp_array[idx, jdx0]
1292
+ if self._stinz_diskflag_reading:
1293
+ k = 0
1294
+ for jdx0 in range(self._stinz_length_0):
1295
+ self.stinz[jdx0] = self._stinz_ncarray[k]
1296
+ k += 1
1297
+ elif self._stinz_ramflag:
1298
+ for jdx0 in range(self._stinz_length_0):
1299
+ self.stinz[jdx0] = self._stinz_array[idx, jdx0]
1300
+ if self._sinz_diskflag_reading:
1301
+ k = 0
1302
+ for jdx0 in range(self._sinz_length_0):
1303
+ self.sinz[jdx0] = self._sinz_ncarray[k]
1304
+ k += 1
1305
+ elif self._sinz_ramflag:
1306
+ for jdx0 in range(self._sinz_length_0):
1307
+ self.sinz[jdx0] = self._sinz_array[idx, jdx0]
1308
+ if self._esnowinz_diskflag_reading:
1309
+ k = 0
1310
+ for jdx0 in range(self._esnowinz_length_0):
1311
+ self.esnowinz[jdx0] = self._esnowinz_ncarray[k]
1312
+ k += 1
1313
+ elif self._esnowinz_ramflag:
1314
+ for jdx0 in range(self._esnowinz_length_0):
1315
+ self.esnowinz[jdx0] = self._esnowinz_array[idx, jdx0]
1316
+ if self._asinz_diskflag_reading:
1317
+ k = 0
1318
+ for jdx0 in range(self._asinz_length_0):
1319
+ self.asinz[jdx0] = self._asinz_ncarray[k]
1320
+ k += 1
1321
+ elif self._asinz_ramflag:
1322
+ for jdx0 in range(self._asinz_length_0):
1323
+ self.asinz[jdx0] = self._asinz_array[idx, jdx0]
1324
+ if self._wats_diskflag_reading:
1325
+ k = 0
1326
+ for jdx0 in range(self._wats_length_0):
1327
+ self.wats[jdx0] = self._wats_ncarray[k]
1328
+ k += 1
1329
+ elif self._wats_ramflag:
1330
+ for jdx0 in range(self._wats_length_0):
1331
+ self.wats[jdx0] = self._wats_array[idx, jdx0]
1332
+ if self._waes_diskflag_reading:
1333
+ k = 0
1334
+ for jdx0 in range(self._waes_length_0):
1335
+ self.waes[jdx0] = self._waes_ncarray[k]
1336
+ k += 1
1337
+ elif self._waes_ramflag:
1338
+ for jdx0 in range(self._waes_length_0):
1339
+ self.waes[jdx0] = self._waes_array[idx, jdx0]
1340
+ if self._esnow_diskflag_reading:
1341
+ k = 0
1342
+ for jdx0 in range(self._esnow_length_0):
1343
+ self.esnow[jdx0] = self._esnow_ncarray[k]
1344
+ k += 1
1345
+ elif self._esnow_ramflag:
1346
+ for jdx0 in range(self._esnow_length_0):
1347
+ self.esnow[jdx0] = self._esnow_array[idx, jdx0]
1348
+ if self._taus_diskflag_reading:
1349
+ k = 0
1350
+ for jdx0 in range(self._taus_length_0):
1351
+ self.taus[jdx0] = self._taus_ncarray[k]
1352
+ k += 1
1353
+ elif self._taus_ramflag:
1354
+ for jdx0 in range(self._taus_length_0):
1355
+ self.taus[jdx0] = self._taus_array[idx, jdx0]
1356
+ if self._ebdn_diskflag_reading:
1357
+ k = 0
1358
+ for jdx0 in range(self._ebdn_length_0):
1359
+ self.ebdn[jdx0] = self._ebdn_ncarray[k]
1360
+ k += 1
1361
+ elif self._ebdn_ramflag:
1362
+ for jdx0 in range(self._ebdn_length_0):
1363
+ self.ebdn[jdx0] = self._ebdn_array[idx, jdx0]
1364
+ if self._bowa_diskflag_reading:
1365
+ k = 0
1366
+ for jdx0 in range(self._bowa_length_0):
1367
+ self.bowa[jdx0] = self._bowa_ncarray[k]
1368
+ k += 1
1369
+ elif self._bowa_ramflag:
1370
+ for jdx0 in range(self._bowa_length_0):
1371
+ self.bowa[jdx0] = self._bowa_array[idx, jdx0]
1372
+ if self._sdg1_diskflag_reading:
1373
+ self.sdg1 = self._sdg1_ncarray[0]
1374
+ elif self._sdg1_ramflag:
1375
+ self.sdg1 = self._sdg1_array[idx]
1376
+ if self._sdg2_diskflag_reading:
1377
+ self.sdg2 = self._sdg2_ncarray[0]
1378
+ elif self._sdg2_ramflag:
1379
+ self.sdg2 = self._sdg2_array[idx]
1380
+ if self._sig1_diskflag_reading:
1381
+ self.sig1 = self._sig1_ncarray[0]
1382
+ elif self._sig1_ramflag:
1383
+ self.sig1 = self._sig1_array[idx]
1384
+ if self._sig2_diskflag_reading:
1385
+ self.sig2 = self._sig2_ncarray[0]
1386
+ elif self._sig2_ramflag:
1387
+ self.sig2 = self._sig2_array[idx]
1388
+ if self._sbg_diskflag_reading:
1389
+ self.sbg = self._sbg_ncarray[0]
1390
+ elif self._sbg_ramflag:
1391
+ self.sbg = self._sbg_array[idx]
1392
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
1393
+ cdef numpy.int64_t jdx0
1394
+ cdef numpy.int64_t k
1395
+ if self._inzp_diskflag_writing:
1396
+ k = 0
1397
+ for jdx0 in range(self._inzp_length_0):
1398
+ self._inzp_ncarray[k] = self.inzp[jdx0]
1399
+ k += 1
1400
+ if self._inzp_ramflag:
1401
+ for jdx0 in range(self._inzp_length_0):
1402
+ self._inzp_array[idx, jdx0] = self.inzp[jdx0]
1403
+ if self._stinz_diskflag_writing:
1404
+ k = 0
1405
+ for jdx0 in range(self._stinz_length_0):
1406
+ self._stinz_ncarray[k] = self.stinz[jdx0]
1407
+ k += 1
1408
+ if self._stinz_ramflag:
1409
+ for jdx0 in range(self._stinz_length_0):
1410
+ self._stinz_array[idx, jdx0] = self.stinz[jdx0]
1411
+ if self._sinz_diskflag_writing:
1412
+ k = 0
1413
+ for jdx0 in range(self._sinz_length_0):
1414
+ self._sinz_ncarray[k] = self.sinz[jdx0]
1415
+ k += 1
1416
+ if self._sinz_ramflag:
1417
+ for jdx0 in range(self._sinz_length_0):
1418
+ self._sinz_array[idx, jdx0] = self.sinz[jdx0]
1419
+ if self._esnowinz_diskflag_writing:
1420
+ k = 0
1421
+ for jdx0 in range(self._esnowinz_length_0):
1422
+ self._esnowinz_ncarray[k] = self.esnowinz[jdx0]
1423
+ k += 1
1424
+ if self._esnowinz_ramflag:
1425
+ for jdx0 in range(self._esnowinz_length_0):
1426
+ self._esnowinz_array[idx, jdx0] = self.esnowinz[jdx0]
1427
+ if self._asinz_diskflag_writing:
1428
+ k = 0
1429
+ for jdx0 in range(self._asinz_length_0):
1430
+ self._asinz_ncarray[k] = self.asinz[jdx0]
1431
+ k += 1
1432
+ if self._asinz_ramflag:
1433
+ for jdx0 in range(self._asinz_length_0):
1434
+ self._asinz_array[idx, jdx0] = self.asinz[jdx0]
1435
+ if self._wats_diskflag_writing:
1436
+ k = 0
1437
+ for jdx0 in range(self._wats_length_0):
1438
+ self._wats_ncarray[k] = self.wats[jdx0]
1439
+ k += 1
1440
+ if self._wats_ramflag:
1441
+ for jdx0 in range(self._wats_length_0):
1442
+ self._wats_array[idx, jdx0] = self.wats[jdx0]
1443
+ if self._waes_diskflag_writing:
1444
+ k = 0
1445
+ for jdx0 in range(self._waes_length_0):
1446
+ self._waes_ncarray[k] = self.waes[jdx0]
1447
+ k += 1
1448
+ if self._waes_ramflag:
1449
+ for jdx0 in range(self._waes_length_0):
1450
+ self._waes_array[idx, jdx0] = self.waes[jdx0]
1451
+ if self._esnow_diskflag_writing:
1452
+ k = 0
1453
+ for jdx0 in range(self._esnow_length_0):
1454
+ self._esnow_ncarray[k] = self.esnow[jdx0]
1455
+ k += 1
1456
+ if self._esnow_ramflag:
1457
+ for jdx0 in range(self._esnow_length_0):
1458
+ self._esnow_array[idx, jdx0] = self.esnow[jdx0]
1459
+ if self._taus_diskflag_writing:
1460
+ k = 0
1461
+ for jdx0 in range(self._taus_length_0):
1462
+ self._taus_ncarray[k] = self.taus[jdx0]
1463
+ k += 1
1464
+ if self._taus_ramflag:
1465
+ for jdx0 in range(self._taus_length_0):
1466
+ self._taus_array[idx, jdx0] = self.taus[jdx0]
1467
+ if self._ebdn_diskflag_writing:
1468
+ k = 0
1469
+ for jdx0 in range(self._ebdn_length_0):
1470
+ self._ebdn_ncarray[k] = self.ebdn[jdx0]
1471
+ k += 1
1472
+ if self._ebdn_ramflag:
1473
+ for jdx0 in range(self._ebdn_length_0):
1474
+ self._ebdn_array[idx, jdx0] = self.ebdn[jdx0]
1475
+ if self._bowa_diskflag_writing:
1476
+ k = 0
1477
+ for jdx0 in range(self._bowa_length_0):
1478
+ self._bowa_ncarray[k] = self.bowa[jdx0]
1479
+ k += 1
1480
+ if self._bowa_ramflag:
1481
+ for jdx0 in range(self._bowa_length_0):
1482
+ self._bowa_array[idx, jdx0] = self.bowa[jdx0]
1483
+ if self._sdg1_diskflag_writing:
1484
+ self._sdg1_ncarray[0] = self.sdg1
1485
+ if self._sdg1_ramflag:
1486
+ self._sdg1_array[idx] = self.sdg1
1487
+ if self._sdg2_diskflag_writing:
1488
+ self._sdg2_ncarray[0] = self.sdg2
1489
+ if self._sdg2_ramflag:
1490
+ self._sdg2_array[idx] = self.sdg2
1491
+ if self._sig1_diskflag_writing:
1492
+ self._sig1_ncarray[0] = self.sig1
1493
+ if self._sig1_ramflag:
1494
+ self._sig1_array[idx] = self.sig1
1495
+ if self._sig2_diskflag_writing:
1496
+ self._sig2_ncarray[0] = self.sig2
1497
+ if self._sig2_ramflag:
1498
+ self._sig2_array[idx] = self.sig2
1499
+ if self._sbg_diskflag_writing:
1500
+ self._sbg_ncarray[0] = self.sbg
1501
+ if self._sbg_ramflag:
1502
+ self._sbg_array[idx] = self.sbg
1503
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
1504
+ if name == "sdg1":
1505
+ self._sdg1_outputpointer = value.p_value
1506
+ if name == "sdg2":
1507
+ self._sdg2_outputpointer = value.p_value
1508
+ if name == "sig1":
1509
+ self._sig1_outputpointer = value.p_value
1510
+ if name == "sig2":
1511
+ self._sig2_outputpointer = value.p_value
1512
+ if name == "sbg":
1513
+ self._sbg_outputpointer = value.p_value
1514
+ cpdef inline void update_outputs(self) noexcept nogil:
1515
+ if self._sdg1_outputflag:
1516
+ self._sdg1_outputpointer[0] = self.sdg1
1517
+ if self._sdg2_outputflag:
1518
+ self._sdg2_outputpointer[0] = self.sdg2
1519
+ if self._sig1_outputflag:
1520
+ self._sig1_outputpointer[0] = self.sig1
1521
+ if self._sig2_outputflag:
1522
+ self._sig2_outputpointer[0] = self.sig2
1523
+ if self._sbg_outputflag:
1524
+ self._sbg_outputpointer[0] = self.sbg
1525
+ @cython.final
1526
+ cdef class LogSequences:
1527
+ pass
1528
+ @cython.final
1529
+ cdef class AideSequences:
1530
+ pass
1531
+ @cython.final
1532
+ cdef class OutletSequences:
1533
+ cpdef inline set_pointer0d(self, str name, pointerutils.Double value):
1534
+ cdef pointerutils.PDouble pointer = pointerutils.PDouble(value)
1535
+ if name == "q":
1536
+ self.q = pointer.p_value
1537
+ cpdef get_value(self, str name):
1538
+ cdef numpy.int64_t idx
1539
+ if name == "q":
1540
+ return self.q[0]
1541
+ cpdef set_value(self, str name, value):
1542
+ if name == "q":
1543
+ self.q[0] = value
1544
+ @cython.final
1545
+ cdef class PegasusESnowInz(rootutils.PegasusBase):
1546
+ def __init__(self, Model model):
1547
+ self.model = model
1548
+ cpdef double apply_method0(self, double x) noexcept nogil:
1549
+ return self.model.return_backwardeulererrorinz_v1(x)
1550
+ @cython.final
1551
+ cdef class PegasusESnow(rootutils.PegasusBase):
1552
+ def __init__(self, Model model):
1553
+ self.model = model
1554
+ cpdef double apply_method0(self, double x) noexcept nogil:
1555
+ return self.model.return_backwardeulererror_v1(x)
1556
+ @cython.final
1557
+ cdef class PegasusTempSSurface(rootutils.PegasusBase):
1558
+ def __init__(self, Model model):
1559
+ self.model = model
1560
+ cpdef double apply_method0(self, double x) noexcept nogil:
1561
+ return self.model.return_energygainsnowsurface_v1(x)
1562
+ @cython.final
1563
+ cdef class Model(masterinterface.MasterInterface):
1564
+ def __init__(self):
1565
+ super().__init__()
1566
+ self.aetmodel = None
1567
+ self.aetmodel_is_mainmodel = False
1568
+ self.radiationmodel = None
1569
+ self.radiationmodel_is_mainmodel = False
1570
+ self.soilmodel = None
1571
+ self.soilmodel_is_mainmodel = False
1572
+ self.pegasusesnowinz = PegasusESnowInz(self)
1573
+ self.pegasusesnow = PegasusESnow(self)
1574
+ self.pegasustempssurface = PegasusTempSSurface(self)
1575
+ def get_aetmodel(self) -> masterinterface.MasterInterface | None:
1576
+ return self.aetmodel
1577
+ def set_aetmodel(self, aetmodel: masterinterface.MasterInterface | None) -> None:
1578
+ self.aetmodel = aetmodel
1579
+ def get_radiationmodel(self) -> masterinterface.MasterInterface | None:
1580
+ return self.radiationmodel
1581
+ def set_radiationmodel(self, radiationmodel: masterinterface.MasterInterface | None) -> None:
1582
+ self.radiationmodel = radiationmodel
1583
+ def get_soilmodel(self) -> masterinterface.MasterInterface | None:
1584
+ return self.soilmodel
1585
+ def set_soilmodel(self, soilmodel: masterinterface.MasterInterface | None) -> None:
1586
+ self.soilmodel = soilmodel
1587
+ cpdef inline void simulate(self, numpy.int64_t idx) noexcept nogil:
1588
+ self.idx_sim = idx
1589
+ self.reset_reuseflags()
1590
+ self.load_data(idx)
1591
+ self.update_inlets()
1592
+ self.run()
1593
+ self.new2old()
1594
+ self.update_outlets()
1595
+ self.update_outputs()
1596
+ cpdef void reset_reuseflags(self) noexcept nogil:
1597
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
1598
+ self.aetmodel.reset_reuseflags()
1599
+ if (self.radiationmodel is not None) and not self.radiationmodel_is_mainmodel:
1600
+ self.radiationmodel.reset_reuseflags()
1601
+ if (self.soilmodel is not None) and not self.soilmodel_is_mainmodel:
1602
+ self.soilmodel.reset_reuseflags()
1603
+ cpdef void load_data(self, numpy.int64_t idx) noexcept nogil:
1604
+ self.idx_sim = idx
1605
+ self.sequences.inputs.load_data(idx)
1606
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
1607
+ self.aetmodel.load_data(idx)
1608
+ if (self.radiationmodel is not None) and not self.radiationmodel_is_mainmodel:
1609
+ self.radiationmodel.load_data(idx)
1610
+ if (self.soilmodel is not None) and not self.soilmodel_is_mainmodel:
1611
+ self.soilmodel.load_data(idx)
1612
+ cpdef void save_data(self, numpy.int64_t idx) noexcept nogil:
1613
+ self.idx_sim = idx
1614
+ self.sequences.inputs.save_data(idx)
1615
+ self.sequences.factors.save_data(idx)
1616
+ self.sequences.fluxes.save_data(idx)
1617
+ self.sequences.states.save_data(idx)
1618
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
1619
+ self.aetmodel.save_data(idx)
1620
+ if (self.radiationmodel is not None) and not self.radiationmodel_is_mainmodel:
1621
+ self.radiationmodel.save_data(idx)
1622
+ if (self.soilmodel is not None) and not self.soilmodel_is_mainmodel:
1623
+ self.soilmodel.save_data(idx)
1624
+ cpdef void new2old(self) noexcept nogil:
1625
+ cdef numpy.int64_t jdx0
1626
+ for jdx0 in range(self.sequences.states._inzp_length_0):
1627
+ self.sequences.old_states.inzp[jdx0] = self.sequences.new_states.inzp[jdx0]
1628
+ for jdx0 in range(self.sequences.states._stinz_length_0):
1629
+ self.sequences.old_states.stinz[jdx0] = self.sequences.new_states.stinz[jdx0]
1630
+ for jdx0 in range(self.sequences.states._sinz_length_0):
1631
+ self.sequences.old_states.sinz[jdx0] = self.sequences.new_states.sinz[jdx0]
1632
+ for jdx0 in range(self.sequences.states._esnowinz_length_0):
1633
+ self.sequences.old_states.esnowinz[jdx0] = self.sequences.new_states.esnowinz[jdx0]
1634
+ for jdx0 in range(self.sequences.states._asinz_length_0):
1635
+ self.sequences.old_states.asinz[jdx0] = self.sequences.new_states.asinz[jdx0]
1636
+ for jdx0 in range(self.sequences.states._wats_length_0):
1637
+ self.sequences.old_states.wats[jdx0] = self.sequences.new_states.wats[jdx0]
1638
+ for jdx0 in range(self.sequences.states._waes_length_0):
1639
+ self.sequences.old_states.waes[jdx0] = self.sequences.new_states.waes[jdx0]
1640
+ for jdx0 in range(self.sequences.states._esnow_length_0):
1641
+ self.sequences.old_states.esnow[jdx0] = self.sequences.new_states.esnow[jdx0]
1642
+ for jdx0 in range(self.sequences.states._taus_length_0):
1643
+ self.sequences.old_states.taus[jdx0] = self.sequences.new_states.taus[jdx0]
1644
+ for jdx0 in range(self.sequences.states._ebdn_length_0):
1645
+ self.sequences.old_states.ebdn[jdx0] = self.sequences.new_states.ebdn[jdx0]
1646
+ for jdx0 in range(self.sequences.states._bowa_length_0):
1647
+ self.sequences.old_states.bowa[jdx0] = self.sequences.new_states.bowa[jdx0]
1648
+ self.sequences.old_states.sdg1 = self.sequences.new_states.sdg1
1649
+ self.sequences.old_states.sdg2 = self.sequences.new_states.sdg2
1650
+ self.sequences.old_states.sig1 = self.sequences.new_states.sig1
1651
+ self.sequences.old_states.sig2 = self.sequences.new_states.sig2
1652
+ self.sequences.old_states.sbg = self.sequences.new_states.sbg
1653
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
1654
+ self.aetmodel.new2old()
1655
+ if (self.radiationmodel is not None) and not self.radiationmodel_is_mainmodel:
1656
+ self.radiationmodel.new2old()
1657
+ if (self.soilmodel is not None) and not self.soilmodel_is_mainmodel:
1658
+ self.soilmodel.new2old()
1659
+ cpdef inline void run(self) noexcept nogil:
1660
+ self.process_radiationmodel_v1()
1661
+ self.calc_possiblesunshineduration_v1()
1662
+ self.calc_sunshineduration_v1()
1663
+ self.calc_globalradiation_v1()
1664
+ self.calc_qzh_v1()
1665
+ self.update_loggedsunshineduration_v1()
1666
+ self.calc_dailysunshineduration_v1()
1667
+ self.update_loggedpossiblesunshineduration_v1()
1668
+ self.calc_dailypossiblesunshineduration_v1()
1669
+ self.calc_nkor_v1()
1670
+ self.calc_tkor_v1()
1671
+ self.calc_windspeed2m_v1()
1672
+ self.calc_reducedwindspeed2m_v1()
1673
+ self.calc_saturationvapourpressure_v1()
1674
+ self.calc_actualvapourpressure_v1()
1675
+ self.calc_nbes_inzp_v1()
1676
+ self.calc_snratio_v1()
1677
+ self.calc_sbes_v1()
1678
+ self.calc_snowintmax_v1()
1679
+ self.calc_snowintrate_v1()
1680
+ self.calc_nbesinz_v1()
1681
+ self.calc_sbesinz_v1()
1682
+ self.calc_stinz_v1()
1683
+ self.calc_wadainz_sinz_v1()
1684
+ self.calc_wniedinz_esnowinz_v1()
1685
+ self.calc_tempsinz_v1()
1686
+ self.update_asinz_v1()
1687
+ self.calc_actualalbedoinz_v1()
1688
+ self.calc_netshortwaveradiationinz_v1()
1689
+ self.calc_rlatm_v1()
1690
+ self.update_esnowinz_v1()
1691
+ self.calc_schmpotinz_v1()
1692
+ self.calc_schminz_stinz_v1()
1693
+ self.calc_gefrpotinz_v1()
1694
+ self.calc_gefrinz_stinz_v1()
1695
+ self.calc_evsinz_sinz_stinz_v1()
1696
+ self.update_wadainz_sinz_v1()
1697
+ self.update_esnowinz_v2()
1698
+ self.calc_wats_v2()
1699
+ self.calc_wada_waes_v2()
1700
+ self.calc_wnied_esnow_v1()
1701
+ self.calc_temps_v1()
1702
+ self.update_taus_v1()
1703
+ self.calc_actualalbedo_v1()
1704
+ self.calc_netshortwaveradiationsnow_v1()
1705
+ self.calc_tz_v1()
1706
+ self.calc_wg_v1()
1707
+ self.update_esnow_v1()
1708
+ self.calc_schmpot_v2()
1709
+ self.calc_schm_wats_v1()
1710
+ self.calc_gefrpot_v1()
1711
+ self.calc_gefr_wats_v1()
1712
+ self.calc_evs_waes_wats_v1()
1713
+ self.update_wada_waes_v1()
1714
+ self.update_esnow_v2()
1715
+ self.calc_evi_inzp_v1()
1716
+ self.calc_evb_v1()
1717
+ self.update_ebdn_v1()
1718
+ self.calc_sff_v1()
1719
+ self.calc_fvg_v1()
1720
+ self.calc_qkap_v1()
1721
+ self.calc_qbb_v1()
1722
+ self.calc_qib1_v1()
1723
+ self.calc_qib2_v1()
1724
+ self.calc_qdb_v1()
1725
+ self.update_qdb_v1()
1726
+ self.calc_bowa_v1()
1727
+ self.calc_qbgz_v1()
1728
+ self.calc_qigz1_v1()
1729
+ self.calc_qigz2_v1()
1730
+ self.calc_qdgz_v1()
1731
+ self.calc_qbga_sbg_qbgz_qdgz_v1()
1732
+ self.calc_qiga1_sig1_v1()
1733
+ self.calc_qiga2_sig2_v1()
1734
+ self.calc_qdgz1_qdgz2_v1()
1735
+ self.calc_qdga1_sdg1_v1()
1736
+ self.calc_qdga2_sdg2_v1()
1737
+ self.calc_qah_v1()
1738
+ self.calc_qa_v1()
1739
+ cpdef inline void update_inlets(self) noexcept nogil:
1740
+ self.pick_qz_v1()
1741
+ cpdef inline void update_outlets(self) noexcept nogil:
1742
+ self.pass_qa_v1()
1743
+ cpdef inline void update_receivers(self, numpy.int64_t idx) noexcept nogil:
1744
+ self.idx_sim = idx
1745
+ pass
1746
+ cpdef inline void update_senders(self, numpy.int64_t idx) noexcept nogil:
1747
+ self.idx_sim = idx
1748
+ pass
1749
+ cpdef inline void update_outputs(self) noexcept nogil:
1750
+ self.sequences.factors.update_outputs()
1751
+ self.sequences.fluxes.update_outputs()
1752
+ self.sequences.states.update_outputs()
1753
+ cpdef inline void pick_qz_v1(self) noexcept nogil:
1754
+ cdef numpy.int64_t idx
1755
+ self.sequences.fluxes.qz = 0.0
1756
+ for idx in range(self.sequences.inlets.len_q):
1757
+ self.sequences.fluxes.qz = self.sequences.fluxes.qz + (self.sequences.inlets.q[idx][0])
1758
+ cpdef inline void process_radiationmodel_v1(self) noexcept nogil:
1759
+ if self.radiationmodel_typeid == 1:
1760
+ (<masterinterface.MasterInterface>self.radiationmodel).process_radiation()
1761
+ cpdef inline void calc_possiblesunshineduration_v1(self) noexcept nogil:
1762
+ if self.radiationmodel_typeid == 1:
1763
+ self.sequences.factors.possiblesunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_possiblesunshineduration()
1764
+ elif self.radiationmodel_typeid == 4:
1765
+ self.sequences.factors.possiblesunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_possiblesunshineduration()
1766
+ cpdef inline void calc_sunshineduration_v1(self) noexcept nogil:
1767
+ if self.radiationmodel_typeid == 1:
1768
+ self.sequences.factors.sunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_sunshineduration()
1769
+ elif self.radiationmodel_typeid == 4:
1770
+ self.sequences.factors.sunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_sunshineduration()
1771
+ cpdef inline void calc_globalradiation_v1(self) noexcept nogil:
1772
+ if self.radiationmodel_typeid == 1:
1773
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
1774
+ elif self.radiationmodel_typeid == 4:
1775
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
1776
+ cpdef inline void calc_qzh_v1(self) noexcept nogil:
1777
+ self.sequences.fluxes.qzh = self.sequences.fluxes.qz / self.parameters.derived.qfactor
1778
+ cpdef inline void update_loggedsunshineduration_v1(self) noexcept nogil:
1779
+ cdef numpy.int64_t idx
1780
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
1781
+ self.sequences.logs.loggedsunshineduration[idx] = self.sequences.logs.loggedsunshineduration[idx - 1]
1782
+ self.sequences.logs.loggedsunshineduration[0] = self.sequences.factors.sunshineduration
1783
+ cpdef inline void calc_dailysunshineduration_v1(self) noexcept nogil:
1784
+ cdef numpy.int64_t idx
1785
+ self.sequences.fluxes.dailysunshineduration = 0.0
1786
+ for idx in range(self.parameters.derived.nmblogentries):
1787
+ self.sequences.fluxes.dailysunshineduration = self.sequences.fluxes.dailysunshineduration + (self.sequences.logs.loggedsunshineduration[idx])
1788
+ cpdef inline void update_loggedpossiblesunshineduration_v1(self) noexcept nogil:
1789
+ cdef numpy.int64_t idx
1790
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
1791
+ self.sequences.logs.loggedpossiblesunshineduration[idx] = ( self.sequences.logs.loggedpossiblesunshineduration[idx - 1] )
1792
+ self.sequences.logs.loggedpossiblesunshineduration[0] = self.sequences.factors.possiblesunshineduration
1793
+ cpdef inline void calc_dailypossiblesunshineduration_v1(self) noexcept nogil:
1794
+ cdef numpy.int64_t idx
1795
+ self.sequences.fluxes.dailypossiblesunshineduration = 0.0
1796
+ for idx in range(self.parameters.derived.nmblogentries):
1797
+ self.sequences.fluxes.dailypossiblesunshineduration = self.sequences.fluxes.dailypossiblesunshineduration + (self.sequences.logs.loggedpossiblesunshineduration[idx])
1798
+ cpdef inline void calc_nkor_v1(self) noexcept nogil:
1799
+ cdef numpy.int64_t k
1800
+ for k in range(self.parameters.control.nhru):
1801
+ self.sequences.fluxes.nkor[k] = self.parameters.control.kg[k] * self.sequences.inputs.nied
1802
+ cpdef inline void calc_tkor_v1(self) noexcept nogil:
1803
+ cdef numpy.int64_t k
1804
+ for k in range(self.parameters.control.nhru):
1805
+ self.sequences.fluxes.tkor[k] = self.parameters.control.kt[k] + self.sequences.inputs.teml
1806
+ cpdef inline void calc_windspeed2m_v1(self) noexcept nogil:
1807
+ self.sequences.fluxes.windspeed2m = self.sequences.inputs.windspeed * ( log(2.0 / self.parameters.fixed.z0) / log(self.parameters.control.measuringheightwindspeed / self.parameters.fixed.z0) )
1808
+ cpdef inline void calc_reducedwindspeed2m_v1(self) noexcept nogil:
1809
+ cdef double d_lai
1810
+ cdef numpy.int64_t k
1811
+ for k in range(self.parameters.control.nhru):
1812
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
1813
+ d_lai = self.parameters.control.lai[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]]
1814
+ self.sequences.fluxes.reducedwindspeed2m[k] = ( max(self.parameters.control.p1wind - self.parameters.control.p2wind * d_lai, 0.0) * self.sequences.fluxes.windspeed2m )
1815
+ else:
1816
+ self.sequences.fluxes.reducedwindspeed2m[k] = self.sequences.fluxes.windspeed2m
1817
+ cpdef inline void calc_saturationvapourpressure_v1(self) noexcept nogil:
1818
+ cdef numpy.int64_t k
1819
+ for k in range(self.parameters.control.nhru):
1820
+ self.sequences.fluxes.saturationvapourpressure[k] = self.return_saturationvapourpressure_v1( self.sequences.fluxes.tkor[k] )
1821
+ cpdef inline void calc_actualvapourpressure_v1(self) noexcept nogil:
1822
+ cdef numpy.int64_t k
1823
+ for k in range(self.parameters.control.nhru):
1824
+ self.sequences.fluxes.actualvapourpressure[k] = ( self.sequences.fluxes.saturationvapourpressure[k] * self.sequences.inputs.relativehumidity / 100.0 )
1825
+ cpdef inline void calc_nbes_inzp_v1(self) noexcept nogil:
1826
+ cdef numpy.int64_t k
1827
+ for k in range(self.parameters.control.nhru):
1828
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
1829
+ self.sequences.fluxes.nbes[k] = 0.0
1830
+ self.sequences.states.inzp[k] = 0.0
1831
+ else:
1832
+ self.sequences.fluxes.nbes[k] = max( self.sequences.fluxes.nkor[k] + self.sequences.states.inzp[k] - self.parameters.derived.kinz[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]], 0.0, )
1833
+ self.sequences.states.inzp[k] = self.sequences.states.inzp[k] + (self.sequences.fluxes.nkor[k] - self.sequences.fluxes.nbes[k])
1834
+ cpdef inline void calc_snratio_v1(self) noexcept nogil:
1835
+ cdef numpy.int64_t k
1836
+ for k in range(self.parameters.control.nhru):
1837
+ if self.sequences.fluxes.tkor[k] >= (self.parameters.control.tgr[k] + self.parameters.control.tsp[k] / 2.0):
1838
+ self.sequences.aides.snratio[k] = 0.0
1839
+ elif self.sequences.fluxes.tkor[k] <= (self.parameters.control.tgr[k] - self.parameters.control.tsp[k] / 2.0):
1840
+ self.sequences.aides.snratio[k] = 1.0
1841
+ else:
1842
+ self.sequences.aides.snratio[k] = ( (self.parameters.control.tgr[k] + self.parameters.control.tsp[k] / 2.0) - self.sequences.fluxes.tkor[k] ) / self.parameters.control.tsp[k]
1843
+ cpdef inline void calc_sbes_v1(self) noexcept nogil:
1844
+ cdef numpy.int64_t k
1845
+ for k in range(self.parameters.control.nhru):
1846
+ self.sequences.fluxes.sbes[k] = self.sequences.aides.snratio[k] * self.sequences.fluxes.nbes[k]
1847
+ cpdef inline void calc_snowintmax_v1(self) noexcept nogil:
1848
+ cdef double d_lai
1849
+ cdef numpy.int64_t k
1850
+ cdef numpy.int64_t idx
1851
+ idx = self.parameters.derived.moy[self.idx_sim]
1852
+ for k in range(self.parameters.control.nhru):
1853
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
1854
+ d_lai = self.parameters.control.lai[self.parameters.control.lnk[k] - 1, idx]
1855
+ self.sequences.fluxes.snowintmax[k] = self.parameters.control.p1simax + self.parameters.control.p2simax * d_lai
1856
+ if self.sequences.fluxes.tkor[k] >= -1.0:
1857
+ self.sequences.fluxes.snowintmax[k] = self.sequences.fluxes.snowintmax[k] * (2)
1858
+ elif self.sequences.fluxes.tkor[k] > -3.0:
1859
+ self.sequences.fluxes.snowintmax[k] = self.sequences.fluxes.snowintmax[k] * (2.5 + 0.5 * self.sequences.fluxes.tkor[k])
1860
+ else:
1861
+ self.sequences.fluxes.snowintmax[k] = 0.0
1862
+ cpdef inline void calc_snowintrate_v1(self) noexcept nogil:
1863
+ cdef double d_lai
1864
+ cdef numpy.int64_t k
1865
+ cdef numpy.int64_t idx
1866
+ idx = self.parameters.derived.moy[self.idx_sim]
1867
+ for k in range(self.parameters.control.nhru):
1868
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
1869
+ d_lai = self.parameters.control.lai[self.parameters.control.lnk[k] - 1, idx]
1870
+ self.sequences.fluxes.snowintrate[k] = min( self.parameters.control.p1sirate + self.parameters.control.p2sirate * d_lai + self.parameters.control.p3sirate * self.sequences.states.sinz[k], 1.0, )
1871
+ else:
1872
+ self.sequences.fluxes.snowintrate[k] = 0.0
1873
+ cpdef inline void calc_nbesinz_v1(self) noexcept nogil:
1874
+ cdef numpy.int64_t k
1875
+ for k in range(self.parameters.control.nhru):
1876
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
1877
+ self.sequences.fluxes.nbesinz[k] = min( self.sequences.fluxes.snowintrate[k] * self.sequences.fluxes.nbes[k], max(self.sequences.fluxes.snowintmax[k] - self.sequences.states.sinz[k], 0.0), )
1878
+ else:
1879
+ self.sequences.fluxes.nbesinz[k] = 0.0
1880
+ cpdef inline void calc_sbesinz_v1(self) noexcept nogil:
1881
+ cdef numpy.int64_t k
1882
+ for k in range(self.parameters.control.nhru):
1883
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
1884
+ self.sequences.fluxes.sbesinz[k] = self.sequences.aides.snratio[k] * self.sequences.fluxes.nbesinz[k]
1885
+ else:
1886
+ self.sequences.fluxes.sbesinz[k] = 0.0
1887
+ cpdef inline void calc_stinz_v1(self) noexcept nogil:
1888
+ cdef numpy.int64_t k
1889
+ for k in range(self.parameters.control.nhru):
1890
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
1891
+ self.sequences.states.stinz[k] = self.sequences.states.stinz[k] + (self.sequences.fluxes.sbesinz[k])
1892
+ else:
1893
+ self.sequences.states.stinz[k] = 0.0
1894
+ cpdef inline void calc_wadainz_sinz_v1(self) noexcept nogil:
1895
+ cdef numpy.int64_t k
1896
+ for k in range(self.parameters.control.nhru):
1897
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
1898
+ self.sequences.states.sinz[k] = self.sequences.states.sinz[k] + (self.sequences.fluxes.nbesinz[k])
1899
+ self.sequences.fluxes.wadainz[k] = max(self.sequences.states.sinz[k] - self.parameters.control.pwmax[k] * self.sequences.states.stinz[k], 0.0)
1900
+ self.sequences.states.sinz[k] = self.sequences.states.sinz[k] - (self.sequences.fluxes.wadainz[k])
1901
+ else:
1902
+ self.sequences.fluxes.wadainz[k] = 0.0
1903
+ self.sequences.states.sinz[k] = 0.0
1904
+ cpdef inline void calc_wniedinz_esnowinz_v1(self) noexcept nogil:
1905
+ cdef double d_water
1906
+ cdef double d_ice
1907
+ cdef numpy.int64_t k
1908
+ for k in range(self.parameters.control.nhru):
1909
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
1910
+ d_ice = self.parameters.fixed.cpeis * self.sequences.fluxes.sbesinz[k]
1911
+ d_water = self.parameters.fixed.cpwasser * ( self.sequences.fluxes.nbesinz[k] - self.sequences.fluxes.sbesinz[k] - self.sequences.fluxes.wadainz[k] )
1912
+ self.sequences.fluxes.wniedinz[k] = (self.sequences.fluxes.tkor[k] - self.parameters.control.trefn[k]) * (d_ice + d_water)
1913
+ self.sequences.states.esnowinz[k] = self.sequences.states.esnowinz[k] + (self.sequences.fluxes.wniedinz[k])
1914
+ else:
1915
+ self.sequences.fluxes.wniedinz[k] = 0.0
1916
+ self.sequences.states.esnowinz[k] = 0.0
1917
+ cpdef inline void calc_tempsinz_v1(self) noexcept nogil:
1918
+ cdef numpy.int64_t k
1919
+ for k in range(self.parameters.control.nhru):
1920
+ self.sequences.aides.tempsinz[k] = self.return_tempsinz_v1(k)
1921
+ cpdef inline void update_asinz_v1(self) noexcept nogil:
1922
+ cdef double d_r2
1923
+ cdef double d_r1
1924
+ cdef numpy.int64_t k
1925
+ for k in range(self.parameters.control.nhru):
1926
+ if self.sequences.states.sinz[k] > 0:
1927
+ if isnan(self.sequences.states.asinz[k]):
1928
+ self.sequences.states.asinz[k] = 0.0
1929
+ d_r1 = exp( 5000.0 * (1 / 273.15 - 1.0 / (273.15 + self.sequences.aides.tempsinz[k])) )
1930
+ d_r2 = min(d_r1**10, 1.0)
1931
+ self.sequences.states.asinz[k] = self.sequences.states.asinz[k] * (max(1 - 0.1 * self.sequences.fluxes.sbesinz[k], 0.0))
1932
+ self.sequences.states.asinz[k] = self.sequences.states.asinz[k] + ((d_r1 + d_r2 + 0.03) / 1e6 * self.parameters.derived.seconds)
1933
+ else:
1934
+ self.sequences.states.asinz[k] = nan
1935
+ cpdef inline void calc_actualalbedoinz_v1(self) noexcept nogil:
1936
+ cdef numpy.int64_t k
1937
+ for k in range(self.parameters.control.nhru):
1938
+ if self.sequences.states.sinz[k] > 0.0:
1939
+ self.sequences.fluxes.actualalbedoinz[k] = self.parameters.control.albedo0snow * ( 1.0 - self.parameters.control.snowagingfactor * self.sequences.states.asinz[k] / (1.0 + self.sequences.states.asinz[k]) )
1940
+ else:
1941
+ self.sequences.fluxes.actualalbedoinz[k] = nan
1942
+ cpdef inline void calc_netshortwaveradiationinz_v1(self) noexcept nogil:
1943
+ cdef numpy.int64_t k
1944
+ for k in range(self.parameters.control.nhru):
1945
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
1946
+ self.sequences.fluxes.netshortwaveradiationinz[k] = ( (1.0 - self.parameters.derived.fr[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]]) * (1.0 - self.sequences.fluxes.actualalbedoinz[k]) * self.sequences.fluxes.globalradiation )
1947
+ else:
1948
+ self.sequences.fluxes.netshortwaveradiationinz[k] = 0.0
1949
+ cpdef inline void calc_rlatm_v1(self) noexcept nogil:
1950
+ cdef double d_t
1951
+ cdef numpy.int64_t k
1952
+ cdef double d_common
1953
+ cdef double d_rs
1954
+ d_rs = self.sequences.fluxes.dailysunshineduration / self.sequences.fluxes.dailypossiblesunshineduration
1955
+ d_common = self.parameters.fixed.fratm * self.parameters.fixed.sigma * (1.0 + 0.22 * (1.0 - d_rs) ** 2)
1956
+ for k in range(self.parameters.control.nhru):
1957
+ d_t = self.sequences.fluxes.tkor[k] + 273.15
1958
+ self.sequences.aides.rlatm[k] = d_common * ( d_t**4 * (self.sequences.fluxes.actualvapourpressure[k] / d_t) ** (1.0 / 7.0) )
1959
+ cpdef inline void update_esnowinz_v1(self) noexcept nogil:
1960
+ cdef double d_esnowinz
1961
+ cdef numpy.int64_t k
1962
+ for k in range(self.parameters.control.nhru):
1963
+ if self.sequences.states.sinz[k] > 0.0:
1964
+ self.idx_hru = k
1965
+ d_esnowinz = self.sequences.states.esnowinz[k]
1966
+ self.sequences.states.esnowinz[k] = self.pegasusesnowinz.find_x( self.return_esnowinz_v1(k, -30.0), self.return_esnowinz_v1(k, 30.0), self.return_esnowinz_v1(k, -100.0), self.return_esnowinz_v1(k, 100.0), 0.0, 1e-8, 10, )
1967
+ if self.sequences.states.esnowinz[k] > 0.0:
1968
+ self.sequences.aides.tempsinz[k] = 0.0
1969
+ self.sequences.states.esnowinz[k] = d_esnowinz - self.return_wsurfinz_v1(k)
1970
+ else:
1971
+ self.sequences.states.esnowinz[k] = 0.0
1972
+ self.sequences.aides.tempsinz[k] = nan
1973
+ self.sequences.fluxes.netlongwaveradiationinz[k] = 0.0
1974
+ self.sequences.fluxes.netradiationinz[k] = 0.0
1975
+ self.sequences.fluxes.saturationvapourpressureinz[k] = 0.0
1976
+ self.sequences.fluxes.wsensinz[k] = 0.0
1977
+ self.sequences.fluxes.wlatinz[k] = 0.0
1978
+ self.sequences.fluxes.wsurfinz[k] = 0.0
1979
+ cpdef inline void calc_schmpotinz_v1(self) noexcept nogil:
1980
+ cdef numpy.int64_t k
1981
+ for k in range(self.parameters.control.nhru):
1982
+ if self.sequences.states.sinz[k] > 0.0:
1983
+ self.sequences.fluxes.schmpotinz[k] = max(self.sequences.states.esnowinz[k] / self.parameters.fixed.rschmelz, 0.0)
1984
+ else:
1985
+ self.sequences.fluxes.schmpotinz[k] = 0.0
1986
+ cpdef inline void calc_schminz_stinz_v1(self) noexcept nogil:
1987
+ cdef numpy.int64_t k
1988
+ for k in range(self.parameters.control.nhru):
1989
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
1990
+ self.sequences.fluxes.schminz[k] = min(self.sequences.fluxes.schmpotinz[k], self.sequences.states.stinz[k])
1991
+ self.sequences.states.stinz[k] = self.sequences.states.stinz[k] - (self.sequences.fluxes.schminz[k])
1992
+ else:
1993
+ self.sequences.fluxes.schminz[k] = 0.0
1994
+ cpdef inline void calc_gefrpotinz_v1(self) noexcept nogil:
1995
+ cdef numpy.int64_t k
1996
+ for k in range(self.parameters.control.nhru):
1997
+ if self.sequences.states.sinz[k] > 0:
1998
+ self.sequences.fluxes.gefrpotinz[k] = max(-self.sequences.states.esnowinz[k] / self.parameters.fixed.rschmelz, 0)
1999
+ else:
2000
+ self.sequences.fluxes.gefrpotinz[k] = 0.0
2001
+ cpdef inline void calc_gefrinz_stinz_v1(self) noexcept nogil:
2002
+ cdef numpy.int64_t k
2003
+ for k in range(self.parameters.control.nhru):
2004
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW) and self.parameters.control.refreezeflag:
2005
+ self.sequences.fluxes.gefrinz[k] = min(self.sequences.fluxes.gefrpotinz[k], (self.sequences.states.sinz[k] - self.sequences.states.stinz[k]))
2006
+ self.sequences.states.stinz[k] = self.sequences.states.stinz[k] + (self.sequences.fluxes.gefrinz[k])
2007
+ else:
2008
+ self.sequences.fluxes.gefrinz[k] = 0.0
2009
+ cpdef inline void calc_evsinz_sinz_stinz_v1(self) noexcept nogil:
2010
+ cdef double d_frac
2011
+ cdef numpy.int64_t k
2012
+ for k in range(self.parameters.control.nhru):
2013
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW) and (self.sequences.states.sinz[k] > 0.0):
2014
+ self.sequences.fluxes.evsinz[k] = min(self.sequences.fluxes.wlatinz[k] / self.parameters.fixed.lwe, self.sequences.states.sinz[k])
2015
+ d_frac = (self.sequences.states.sinz[k] - self.sequences.fluxes.evsinz[k]) / self.sequences.states.sinz[k]
2016
+ self.sequences.states.sinz[k] = self.sequences.states.sinz[k] * (d_frac)
2017
+ self.sequences.states.stinz[k] = self.sequences.states.stinz[k] * (d_frac)
2018
+ else:
2019
+ self.sequences.fluxes.evsinz[k] = 0.0
2020
+ self.sequences.states.sinz[k] = 0.0
2021
+ self.sequences.states.stinz[k] = 0.0
2022
+ cpdef inline void update_wadainz_sinz_v1(self) noexcept nogil:
2023
+ cdef double d_wadainz_corr
2024
+ cdef numpy.int64_t k
2025
+ for k in range(self.parameters.control.nhru):
2026
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2027
+ d_wadainz_corr = max(self.sequences.states.sinz[k] - self.parameters.control.pwmax[k] * self.sequences.states.stinz[k], 0.0)
2028
+ self.sequences.fluxes.wadainz[k] = self.sequences.fluxes.wadainz[k] + (d_wadainz_corr)
2029
+ self.sequences.states.sinz[k] = self.sequences.states.sinz[k] - (d_wadainz_corr)
2030
+ cpdef inline void update_esnowinz_v2(self) noexcept nogil:
2031
+ cdef numpy.int64_t k
2032
+ for k in range(self.parameters.control.nhru):
2033
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW) and self.sequences.states.sinz[k] > 0.0:
2034
+ self.sequences.states.esnowinz[k] = self.sequences.states.esnowinz[k] + (self.parameters.fixed.rschmelz * (self.sequences.fluxes.gefrinz[k] - self.sequences.fluxes.schminz[k]))
2035
+ else:
2036
+ self.sequences.states.esnowinz[k] = 0.0
2037
+ cpdef inline void calc_wats_v2(self) noexcept nogil:
2038
+ cdef numpy.int64_t k
2039
+ for k in range(self.parameters.control.nhru):
2040
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2041
+ self.sequences.states.wats[k] = 0.0
2042
+ elif self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2043
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] + (self.sequences.fluxes.sbes[k] - self.sequences.fluxes.sbesinz[k])
2044
+ else:
2045
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] + (self.sequences.fluxes.sbes[k])
2046
+ cpdef inline void calc_wada_waes_v2(self) noexcept nogil:
2047
+ cdef numpy.int64_t k
2048
+ for k in range(self.parameters.control.nhru):
2049
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2050
+ self.sequences.states.waes[k] = 0.0
2051
+ self.sequences.fluxes.wada[k] = self.sequences.fluxes.nbes[k]
2052
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2053
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] + (self.sequences.fluxes.nbes[k] - self.sequences.fluxes.nbesinz[k] + self.sequences.fluxes.wadainz[k])
2054
+ self.sequences.fluxes.wada[k] = max(self.sequences.states.waes[k] - self.parameters.control.pwmax[k] * self.sequences.states.wats[k], 0.0)
2055
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] - (self.sequences.fluxes.wada[k])
2056
+ else:
2057
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] + (self.sequences.fluxes.nbes[k])
2058
+ self.sequences.fluxes.wada[k] = max(self.sequences.states.waes[k] - self.parameters.control.pwmax[k] * self.sequences.states.wats[k], 0.0)
2059
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] - (self.sequences.fluxes.wada[k])
2060
+ cpdef inline void calc_wnied_esnow_v1(self) noexcept nogil:
2061
+ cdef double d_water
2062
+ cdef double d_ice
2063
+ cdef numpy.int64_t k
2064
+ for k in range(self.parameters.control.nhru):
2065
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2066
+ self.sequences.fluxes.wnied[k] = 0.0
2067
+ self.sequences.states.esnow[k] = 0.0
2068
+ else:
2069
+ d_ice = self.parameters.fixed.cpeis * self.sequences.fluxes.sbes[k]
2070
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.fluxes.nbes[k] - self.sequences.fluxes.sbes[k] - self.sequences.fluxes.wada[k])
2071
+ self.sequences.fluxes.wnied[k] = (self.sequences.fluxes.tkor[k] - self.parameters.control.trefn[k]) * (d_ice + d_water)
2072
+ self.sequences.states.esnow[k] = self.sequences.states.esnow[k] + (self.sequences.fluxes.wnied[k])
2073
+ cpdef inline void calc_temps_v1(self) noexcept nogil:
2074
+ cdef numpy.int64_t k
2075
+ for k in range(self.parameters.control.nhru):
2076
+ self.sequences.aides.temps[k] = self.return_temps_v1(k)
2077
+ cpdef inline void update_taus_v1(self) noexcept nogil:
2078
+ cdef double d_r2
2079
+ cdef double d_r1
2080
+ cdef numpy.int64_t k
2081
+ for k in range(self.parameters.control.nhru):
2082
+ if self.sequences.states.waes[k] > 0:
2083
+ if isnan(self.sequences.states.taus[k]):
2084
+ self.sequences.states.taus[k] = 0.0
2085
+ d_r1 = exp( 5000.0 * (1 / 273.15 - 1.0 / (273.15 + self.sequences.aides.temps[k])) )
2086
+ d_r2 = min(d_r1**10, 1.0)
2087
+ self.sequences.states.taus[k] = self.sequences.states.taus[k] * (max(1 - 0.1 * self.sequences.fluxes.sbes[k], 0.0))
2088
+ self.sequences.states.taus[k] = self.sequences.states.taus[k] + ((d_r1 + d_r2 + 0.03) / 1e6 * self.parameters.derived.seconds)
2089
+ else:
2090
+ self.sequences.states.taus[k] = nan
2091
+ cpdef inline void calc_actualalbedo_v1(self) noexcept nogil:
2092
+ cdef numpy.int64_t k
2093
+ for k in range(self.parameters.control.nhru):
2094
+ if self.sequences.states.waes[k] > 0.0:
2095
+ self.sequences.fluxes.actualalbedo[k] = self.parameters.control.albedo0snow * ( 1.0 - self.parameters.control.snowagingfactor * self.sequences.states.taus[k] / (1.0 + self.sequences.states.taus[k]) )
2096
+ else:
2097
+ self.sequences.fluxes.actualalbedo[k] = nan
2098
+ cpdef inline void calc_netshortwaveradiationsnow_v1(self) noexcept nogil:
2099
+ cdef numpy.int64_t k
2100
+ for k in range(self.parameters.control.nhru):
2101
+ if isnan(self.sequences.fluxes.actualalbedo[k]):
2102
+ self.sequences.fluxes.netshortwaveradiationsnow[k] = 0.0
2103
+ else:
2104
+ self.sequences.fluxes.netshortwaveradiationsnow[k] = ( self.parameters.derived.fr[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]] * (1.0 - self.sequences.fluxes.actualalbedo[k]) * self.sequences.fluxes.globalradiation )
2105
+ cpdef inline void calc_tz_v1(self) noexcept nogil:
2106
+ cdef numpy.int64_t k
2107
+ for k in range(self.parameters.control.nhru):
2108
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2109
+ self.sequences.fluxes.tz[k] = nan
2110
+ elif self.sequences.states.ebdn[k] < 0.0:
2111
+ self.sequences.fluxes.tz[k] = self.sequences.states.ebdn[k] / (2.0 * self.parameters.fixed.z * self.parameters.fixed.cg)
2112
+ elif self.sequences.states.ebdn[k] < self.parameters.derived.heatoffusion[k]:
2113
+ self.sequences.fluxes.tz[k] = 0.0
2114
+ else:
2115
+ self.sequences.fluxes.tz[k] = (self.sequences.states.ebdn[k] - self.parameters.derived.heatoffusion[k]) / (2.0 * self.parameters.fixed.z * self.parameters.fixed.cg)
2116
+ cpdef inline void calc_wg_v1(self) noexcept nogil:
2117
+ cdef numpy.int64_t k
2118
+ for k in range(self.parameters.control.nhru):
2119
+ if self.parameters.control.lnk[k] in (FLUSS, SEE, WASSER):
2120
+ self.sequences.fluxes.wg[k] = 0.0
2121
+ else:
2122
+ self.sequences.fluxes.wg[k] = self.return_wg_v1(k)
2123
+ cpdef inline void update_esnow_v1(self) noexcept nogil:
2124
+ cdef double d_esnow
2125
+ cdef numpy.int64_t k
2126
+ for k in range(self.parameters.control.nhru):
2127
+ if self.sequences.states.waes[k] > 0.0:
2128
+ self.idx_hru = k
2129
+ d_esnow = self.sequences.states.esnow[k]
2130
+ self.sequences.states.esnow[k] = self.pegasusesnow.find_x( self.return_esnow_v1(k, -30.0), self.return_esnow_v1(k, 30.0), self.return_esnow_v1(k, -100.0), self.return_esnow_v1(k, 100.0), 0.0, 1e-8, 10, )
2131
+ if self.sequences.states.esnow[k] > 0.0:
2132
+ self.sequences.aides.temps[k] = 0.0
2133
+ self.sequences.fluxes.tempssurface[k] = self.return_tempssurface(k)
2134
+ self.sequences.fluxes.wg[k] = self.return_wg_v1(k)
2135
+ self.sequences.states.esnow[k] = d_esnow + self.sequences.fluxes.wg[k] - self.sequences.fluxes.wsurf[k]
2136
+ else:
2137
+ self.sequences.states.esnow[k] = 0.0
2138
+ self.sequences.aides.temps[k] = nan
2139
+ self.sequences.fluxes.tempssurface[k] = nan
2140
+ self.sequences.fluxes.netlongwaveradiationsnow[k] = 0.0
2141
+ self.sequences.fluxes.netradiationsnow[k] = 0.0
2142
+ self.sequences.fluxes.saturationvapourpressuresnow[k] = 0.0
2143
+ self.sequences.fluxes.wsenssnow[k] = 0.0
2144
+ self.sequences.fluxes.wlatsnow[k] = 0.0
2145
+ self.sequences.fluxes.wsurf[k] = 0.0
2146
+ cpdef inline void calc_schmpot_v2(self) noexcept nogil:
2147
+ cdef numpy.int64_t k
2148
+ for k in range(self.parameters.control.nhru):
2149
+ if self.sequences.states.waes[k] > 0.0:
2150
+ self.sequences.fluxes.schmpot[k] = max(self.sequences.states.esnow[k] / self.parameters.fixed.rschmelz, 0.0)
2151
+ else:
2152
+ self.sequences.fluxes.schmpot[k] = 0.0
2153
+ cpdef inline void calc_schm_wats_v1(self) noexcept nogil:
2154
+ cdef numpy.int64_t k
2155
+ for k in range(self.parameters.control.nhru):
2156
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2157
+ self.sequences.fluxes.schm[k] = 0.0
2158
+ else:
2159
+ self.sequences.fluxes.schm[k] = min(self.sequences.fluxes.schmpot[k], self.sequences.states.wats[k])
2160
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] - (self.sequences.fluxes.schm[k])
2161
+ cpdef inline void calc_gefrpot_v1(self) noexcept nogil:
2162
+ cdef numpy.int64_t k
2163
+ for k in range(self.parameters.control.nhru):
2164
+ if self.sequences.states.waes[k] > 0:
2165
+ self.sequences.fluxes.gefrpot[k] = max(-self.sequences.states.esnow[k] / self.parameters.fixed.rschmelz, 0)
2166
+ else:
2167
+ self.sequences.fluxes.gefrpot[k] = 0.0
2168
+ cpdef inline void calc_gefr_wats_v1(self) noexcept nogil:
2169
+ cdef numpy.int64_t k
2170
+ for k in range(self.parameters.control.nhru):
2171
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE) or not self.parameters.control.refreezeflag:
2172
+ self.sequences.fluxes.gefr[k] = 0.0
2173
+ else:
2174
+ self.sequences.fluxes.gefr[k] = min(self.sequences.fluxes.gefrpot[k], (self.sequences.states.waes[k] - self.sequences.states.wats[k]))
2175
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] + (self.sequences.fluxes.gefr[k])
2176
+ cpdef inline void calc_evs_waes_wats_v1(self) noexcept nogil:
2177
+ cdef double d_frac
2178
+ cdef numpy.int64_t k
2179
+ for k in range(self.parameters.control.nhru):
2180
+ if self.parameters.control.lnk[k] in (WASSER, SEE, FLUSS) or (self.sequences.states.waes[k] <= 0.0):
2181
+ self.sequences.fluxes.evs[k] = 0.0
2182
+ self.sequences.states.waes[k] = 0.0
2183
+ self.sequences.states.wats[k] = 0.0
2184
+ else:
2185
+ self.sequences.fluxes.evs[k] = min(self.sequences.fluxes.wlatsnow[k] / self.parameters.fixed.lwe, self.sequences.states.waes[k])
2186
+ d_frac = (self.sequences.states.waes[k] - self.sequences.fluxes.evs[k]) / self.sequences.states.waes[k]
2187
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] * (d_frac)
2188
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] * (d_frac)
2189
+ cpdef inline void update_wada_waes_v1(self) noexcept nogil:
2190
+ cdef double d_wada_corr
2191
+ cdef numpy.int64_t k
2192
+ for k in range(self.parameters.control.nhru):
2193
+ if self.parameters.control.lnk[k] not in (WASSER, FLUSS, SEE):
2194
+ d_wada_corr = max(self.sequences.states.waes[k] - self.parameters.control.pwmax[k] * self.sequences.states.wats[k], 0.0)
2195
+ self.sequences.fluxes.wada[k] = self.sequences.fluxes.wada[k] + (d_wada_corr)
2196
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] - (d_wada_corr)
2197
+ cpdef inline void update_esnow_v2(self) noexcept nogil:
2198
+ cdef numpy.int64_t k
2199
+ for k in range(self.parameters.control.nhru):
2200
+ if (self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE)) or (self.sequences.states.waes[k] <= 0.0):
2201
+ self.sequences.states.esnow[k] = 0.0
2202
+ else:
2203
+ self.sequences.states.esnow[k] = self.sequences.states.esnow[k] + (self.parameters.fixed.rschmelz * (self.sequences.fluxes.gefr[k] - self.sequences.fluxes.schm[k]))
2204
+ cpdef inline void calc_evi_inzp_v1(self) noexcept nogil:
2205
+ if self.aetmodel_typeid == 1:
2206
+ self.calc_evi_inzp_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
2207
+ cpdef inline void calc_evb_v1(self) noexcept nogil:
2208
+ if self.aetmodel_typeid == 1:
2209
+ self.calc_evb_aetmodel_v1((<masterinterface.MasterInterface>self.aetmodel))
2210
+ cpdef inline void update_ebdn_v1(self) noexcept nogil:
2211
+ cdef numpy.int64_t k
2212
+ for k in range(self.parameters.control.nhru):
2213
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2214
+ self.sequences.states.ebdn[k] = 0.0
2215
+ else:
2216
+ self.sequences.states.ebdn[k] = self.sequences.states.ebdn[k] + (self.parameters.control.wg2z[self.parameters.derived.moy[self.idx_sim]] - self.sequences.fluxes.wg[k])
2217
+ cpdef inline void calc_sff_v1(self) noexcept nogil:
2218
+ cdef double d_sff
2219
+ cdef numpy.int64_t k
2220
+ for k in range(self.parameters.control.nhru):
2221
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
2222
+ self.sequences.fluxes.sff[k] = 0.0
2223
+ else:
2224
+ d_sff = 1.0 - self.sequences.states.ebdn[k] / (self.parameters.fixed.bowa2z[k] * self.parameters.fixed.rschmelz)
2225
+ self.sequences.fluxes.sff[k] = min(max(d_sff, 0.0), 1.0)
2226
+ cpdef inline void calc_fvg_v1(self) noexcept nogil:
2227
+ cdef numpy.int64_t k
2228
+ for k in range(self.parameters.control.nhru):
2229
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
2230
+ self.sequences.fluxes.fvg[k] = 0.0
2231
+ else:
2232
+ self.sequences.fluxes.fvg[k] = min(self.parameters.control.fvf * self.sequences.fluxes.sff[k] ** self.parameters.control.bsff, 1.0)
2233
+ cpdef inline void calc_qkap_v1(self) noexcept nogil:
2234
+ cdef numpy.int64_t k
2235
+ for k in range(self.parameters.control.nhru):
2236
+ if (self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE)) or (self.parameters.control.wmax[k] <= 0.0):
2237
+ self.sequences.fluxes.qkap[k] = 0.0
2238
+ elif self.sequences.states.bowa[k] <= self.parameters.control.kapgrenz[k, 0]:
2239
+ self.sequences.fluxes.qkap[k] = self.parameters.control.kapmax[k]
2240
+ elif self.sequences.states.bowa[k] <= self.parameters.control.kapgrenz[k, 1]:
2241
+ self.sequences.fluxes.qkap[k] = self.parameters.control.kapmax[k] * ( 1.0 - (self.sequences.states.bowa[k] - self.parameters.control.kapgrenz[k, 0]) / (self.parameters.control.kapgrenz[k, 1] - self.parameters.control.kapgrenz[k, 0]) )
2242
+ else:
2243
+ self.sequences.fluxes.qkap[k] = 0
2244
+ cpdef inline void calc_qbb_v1(self) noexcept nogil:
2245
+ cdef numpy.int64_t k
2246
+ for k in range(self.parameters.control.nhru):
2247
+ if ( (self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE)) or (self.sequences.states.bowa[k] <= self.parameters.control.pwp[k]) or (self.parameters.control.wmax[k] <= 0.0) ):
2248
+ self.sequences.fluxes.qbb[k] = 0.0
2249
+ elif self.sequences.states.bowa[k] <= self.parameters.control.fk[k]:
2250
+ if self.parameters.control.rbeta:
2251
+ self.sequences.fluxes.qbb[k] = 0.0
2252
+ else:
2253
+ self.sequences.fluxes.qbb[k] = self.parameters.control.beta[k] * (self.sequences.states.bowa[k] - self.parameters.control.pwp[k])
2254
+ else:
2255
+ self.sequences.fluxes.qbb[k] = ( self.parameters.control.beta[k] * (self.sequences.states.bowa[k] - self.parameters.control.pwp[k]) * ( 1.0 + (self.parameters.control.fbeta[k] - 1.0) * (self.sequences.states.bowa[k] - self.parameters.control.fk[k]) / (self.parameters.control.wmax[k] - self.parameters.control.fk[k]) ) )
2256
+ cpdef inline void calc_qib1_v1(self) noexcept nogil:
2257
+ cdef numpy.int64_t k
2258
+ for k in range(self.parameters.control.nhru):
2259
+ if (self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE)) or ( self.sequences.states.bowa[k] <= self.parameters.control.pwp[k] ):
2260
+ self.sequences.fluxes.qib1[k] = 0.0
2261
+ else:
2262
+ self.sequences.fluxes.qib1[k] = self.parameters.control.dmin[k] * (self.sequences.states.bowa[k] / self.parameters.control.wmax[k])
2263
+ cpdef inline void calc_qib2_v1(self) noexcept nogil:
2264
+ cdef numpy.int64_t k
2265
+ for k in range(self.parameters.control.nhru):
2266
+ if ( (self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE)) or (self.sequences.states.bowa[k] <= self.parameters.control.fk[k]) or (self.parameters.control.wmax[k] <= self.parameters.control.fk[k]) ):
2267
+ self.sequences.fluxes.qib2[k] = 0.0
2268
+ else:
2269
+ self.sequences.fluxes.qib2[k] = (self.parameters.control.dmax[k] - self.parameters.control.dmin[k]) * ( (self.sequences.states.bowa[k] - self.parameters.control.fk[k]) / (self.parameters.control.wmax[k] - self.parameters.control.fk[k]) ) ** 1.5
2270
+ cpdef inline void calc_qdb_v1(self) noexcept nogil:
2271
+ cdef double d_exz
2272
+ cdef double d_sfa
2273
+ cdef numpy.int64_t k
2274
+ for k in range(self.parameters.control.nhru):
2275
+ if self.parameters.control.lnk[k] == WASSER:
2276
+ self.sequences.fluxes.qdb[k] = 0.0
2277
+ elif (self.parameters.control.lnk[k] in (VERS, FLUSS, SEE)) or (self.parameters.control.wmax[k] <= 0.0):
2278
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.wada[k]
2279
+ else:
2280
+ if self.sequences.states.bowa[k] < self.parameters.control.wmax[k]:
2281
+ d_sfa = (1.0 - self.sequences.states.bowa[k] / self.parameters.control.wmax[k]) ** ( 1.0 / (self.parameters.control.bsf[k] + 1.0) ) - (self.sequences.fluxes.wada[k] / ((self.parameters.control.bsf[k] + 1.0) * self.parameters.control.wmax[k]))
2282
+ else:
2283
+ d_sfa = 0.0
2284
+ d_exz = self.sequences.states.bowa[k] + self.sequences.fluxes.wada[k] - self.parameters.control.wmax[k]
2285
+ self.sequences.fluxes.qdb[k] = d_exz
2286
+ if d_sfa > 0.0:
2287
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.qdb[k] + (d_sfa ** (self.parameters.control.bsf[k] + 1.0) * self.parameters.control.wmax[k])
2288
+ self.sequences.fluxes.qdb[k] = max(self.sequences.fluxes.qdb[k], 0.0)
2289
+ cpdef inline void update_qdb_v1(self) noexcept nogil:
2290
+ cdef numpy.int64_t k
2291
+ for k in range(self.parameters.control.nhru):
2292
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.qdb[k] + (self.sequences.fluxes.fvg[k] * (self.sequences.fluxes.wada[k] - self.sequences.fluxes.qdb[k]))
2293
+ cpdef inline void calc_bowa_v1(self) noexcept nogil:
2294
+ if self.soilmodel is None:
2295
+ self.calc_bowa_default_v1()
2296
+ elif self.soilmodel_typeid == 1:
2297
+ self.calc_bowa_soilmodel_v1( (<masterinterface.MasterInterface>self.soilmodel) )
2298
+ cpdef inline void calc_qbgz_v1(self) noexcept nogil:
2299
+ cdef numpy.int64_t k
2300
+ self.sequences.fluxes.qbgz = 0.0
2301
+ for k in range(self.parameters.control.nhru):
2302
+ if self.parameters.control.lnk[k] == SEE:
2303
+ self.sequences.fluxes.qbgz = self.sequences.fluxes.qbgz + (self.parameters.control.fhru[k] * (self.sequences.fluxes.nkor[k] - self.sequences.fluxes.evi[k]))
2304
+ elif self.parameters.control.lnk[k] not in (WASSER, FLUSS, VERS):
2305
+ self.sequences.fluxes.qbgz = self.sequences.fluxes.qbgz + (self.parameters.control.fhru[k] * (self.sequences.fluxes.qbb[k] - self.sequences.fluxes.qkap[k]))
2306
+ cpdef inline void calc_qigz1_v1(self) noexcept nogil:
2307
+ cdef numpy.int64_t k
2308
+ self.sequences.fluxes.qigz1 = 0.0
2309
+ for k in range(self.parameters.control.nhru):
2310
+ self.sequences.fluxes.qigz1 = self.sequences.fluxes.qigz1 + (self.parameters.control.fhru[k] * self.sequences.fluxes.qib1[k])
2311
+ cpdef inline void calc_qigz2_v1(self) noexcept nogil:
2312
+ cdef numpy.int64_t k
2313
+ self.sequences.fluxes.qigz2 = 0.0
2314
+ for k in range(self.parameters.control.nhru):
2315
+ self.sequences.fluxes.qigz2 = self.sequences.fluxes.qigz2 + (self.parameters.control.fhru[k] * self.sequences.fluxes.qib2[k])
2316
+ cpdef inline void calc_qdgz_v1(self) noexcept nogil:
2317
+ cdef numpy.int64_t k
2318
+ self.sequences.fluxes.qdgz = 0.0
2319
+ for k in range(self.parameters.control.nhru):
2320
+ if self.parameters.control.lnk[k] == FLUSS:
2321
+ self.sequences.fluxes.qdgz = self.sequences.fluxes.qdgz + (self.parameters.control.fhru[k] * (self.sequences.fluxes.nkor[k] - self.sequences.fluxes.evi[k]))
2322
+ elif self.parameters.control.lnk[k] not in (WASSER, SEE):
2323
+ self.sequences.fluxes.qdgz = self.sequences.fluxes.qdgz + (self.parameters.control.fhru[k] * self.sequences.fluxes.qdb[k])
2324
+ cpdef inline void calc_qbga_sbg_qbgz_qdgz_v1(self) noexcept nogil:
2325
+ cdef double qbgz
2326
+ cdef double tt
2327
+ cdef double c2
2328
+ cdef double c1
2329
+ cdef double st
2330
+ cdef double fraction
2331
+ cdef double t
2332
+ cdef double excess
2333
+ cdef double z
2334
+ cdef double s0
2335
+ cdef double g2
2336
+ cdef double g1
2337
+ cdef double sm
2338
+ cdef double k
2339
+ k = self.parameters.derived.kb
2340
+ sm = self.parameters.control.gsbmax * self.parameters.control.volbmax
2341
+ g1 = self.parameters.control.gsbgrad1
2342
+ g2 = self.parameters.control.gsbgrad2
2343
+ s0 = self.sequences.old_states.sbg
2344
+ z = self.sequences.fluxes.qbgz
2345
+ if s0 > sm:
2346
+ excess = s0 - sm
2347
+ s0 = sm
2348
+ else:
2349
+ excess = 0.0
2350
+ if k == 0.0:
2351
+ self.sequences.new_states.sbg = 0.0
2352
+ self.sequences.fluxes.qbga = s0 + self.sequences.fluxes.qbgz
2353
+ elif z - s0 / k <= g1:
2354
+ if isinf(k):
2355
+ self.sequences.new_states.sbg = min(s0 + z, sm)
2356
+ self.sequences.fluxes.qbga = 0.0
2357
+ else:
2358
+ if isinf(sm):
2359
+ t = 1.0
2360
+ else:
2361
+ fraction = (k * z - sm) / (k * z - s0)
2362
+ if fraction > 0.0:
2363
+ t = -k * log(fraction)
2364
+ else:
2365
+ t = 1.0
2366
+ if t < 1.0:
2367
+ self.sequences.new_states.sbg = sm
2368
+ self.sequences.fluxes.qbga = s0 - sm + t * self.sequences.fluxes.qbgz
2369
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + ((1.0 - t) * sm / k)
2370
+ else:
2371
+ self.sequences.new_states.sbg = self.return_sg_v1(k, s0, z, 1.0)
2372
+ self.sequences.fluxes.qbga = s0 - self.sequences.new_states.sbg + self.sequences.fluxes.qbgz
2373
+ elif g2 == 0.0:
2374
+ self.sequences.fluxes.qbga = s0 / k
2375
+ self.sequences.new_states.sbg = s0
2376
+ else:
2377
+ if isinf(k) and (g2 > g1):
2378
+ self.sequences.fluxes.qbga = 0.0
2379
+ self.sequences.new_states.sbg = s0 + g2 / ((g2 - g1) / z + 1.0)
2380
+ else:
2381
+ st = min(k * (z - g1), sm)
2382
+ if g1 == g2:
2383
+ t = min((st - s0) / g1, 1.0)
2384
+ self.sequences.fluxes.qbga = t * (g1 * t + 2.0 * s0) / (2.0 * k)
2385
+ else:
2386
+ c1 = (g2 - g1) / (g1 - g2 - z)
2387
+ c2 = (g2 * k * z) / (g1 - g2)
2388
+ t = min(k / c1 * log((st + c2) / (s0 + c2)), 1.0)
2389
+ self.sequences.fluxes.qbga = (s0 + c2) * ( exp(c1 * t / k) - 1.0 ) / c1 - c2 * t / k
2390
+ if t < 1.0:
2391
+ if st == sm:
2392
+ self.sequences.new_states.sbg = sm
2393
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + ((1.0 - t) * sm / k)
2394
+ else:
2395
+ fraction = (k * z - sm) / (k * z - st)
2396
+ if fraction > 0.0:
2397
+ tt = -k * log(fraction)
2398
+ else:
2399
+ tt = 1.0
2400
+ if t + tt < 1.0:
2401
+ self.sequences.new_states.sbg = sm
2402
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + (st - sm + tt * self.sequences.fluxes.qbgz)
2403
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + ((1.0 - t - tt) * sm / k)
2404
+ else:
2405
+ self.sequences.new_states.sbg = self.return_sg_v1(k, st, z, 1.0 - t)
2406
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + (st - self.sequences.new_states.sbg + (1.0 - t) * self.sequences.fluxes.qbgz)
2407
+ elif g1 == g2:
2408
+ self.sequences.new_states.sbg = s0 + g1
2409
+ else:
2410
+ self.sequences.new_states.sbg = (s0 + c2) * exp(1.0 / k * c1) - c2
2411
+ qbgz = self.sequences.fluxes.qbgz
2412
+ self.sequences.fluxes.qbgz = self.sequences.new_states.sbg - s0 + self.sequences.fluxes.qbga
2413
+ self.sequences.fluxes.qdgz = self.sequences.fluxes.qdgz + (qbgz - self.sequences.fluxes.qbgz)
2414
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + (excess)
2415
+ cpdef inline void calc_qiga1_sig1_v1(self) noexcept nogil:
2416
+ self.sequences.new_states.sig1 = self.return_sg_v1(self.parameters.derived.ki1, self.sequences.old_states.sig1, self.sequences.fluxes.qigz1, 1.0)
2417
+ self.sequences.fluxes.qiga1 = self.sequences.old_states.sig1 - self.sequences.new_states.sig1 + self.sequences.fluxes.qigz1
2418
+ cpdef inline void calc_qiga2_sig2_v1(self) noexcept nogil:
2419
+ self.sequences.new_states.sig2 = self.return_sg_v1(self.parameters.derived.ki2, self.sequences.old_states.sig2, self.sequences.fluxes.qigz2, 1.0)
2420
+ self.sequences.fluxes.qiga2 = self.sequences.old_states.sig2 - self.sequences.new_states.sig2 + self.sequences.fluxes.qigz2
2421
+ cpdef inline void calc_qdgz1_qdgz2_v1(self) noexcept nogil:
2422
+ if self.sequences.fluxes.qdgz > self.parameters.control.a2:
2423
+ self.sequences.fluxes.qdgz2 = (self.sequences.fluxes.qdgz - self.parameters.control.a2) ** 2 / (self.sequences.fluxes.qdgz + self.parameters.control.a1 - self.parameters.control.a2)
2424
+ self.sequences.fluxes.qdgz1 = self.sequences.fluxes.qdgz - self.sequences.fluxes.qdgz2
2425
+ else:
2426
+ self.sequences.fluxes.qdgz2 = 0.0
2427
+ self.sequences.fluxes.qdgz1 = self.sequences.fluxes.qdgz
2428
+ cpdef inline void calc_qdga1_sdg1_v1(self) noexcept nogil:
2429
+ self.sequences.new_states.sdg1 = self.return_sg_v1(self.parameters.derived.kd1, self.sequences.old_states.sdg1, self.sequences.fluxes.qdgz1, 1.0)
2430
+ self.sequences.fluxes.qdga1 = self.sequences.old_states.sdg1 - self.sequences.new_states.sdg1 + self.sequences.fluxes.qdgz1
2431
+ cpdef inline void calc_qdga2_sdg2_v1(self) noexcept nogil:
2432
+ self.sequences.new_states.sdg2 = self.return_sg_v1(self.parameters.derived.kd2, self.sequences.old_states.sdg2, self.sequences.fluxes.qdgz2, 1.0)
2433
+ self.sequences.fluxes.qdga2 = self.sequences.old_states.sdg2 - self.sequences.new_states.sdg2 + self.sequences.fluxes.qdgz2
2434
+ cpdef inline void calc_qah_v1(self) noexcept nogil:
2435
+ cdef double d_epw
2436
+ cdef numpy.int64_t k
2437
+ cdef double d_area
2438
+ self.sequences.fluxes.qah = self.sequences.fluxes.qzh + self.sequences.fluxes.qbga + self.sequences.fluxes.qiga1 + self.sequences.fluxes.qiga2 + self.sequences.fluxes.qdga1 + self.sequences.fluxes.qdga2
2439
+ if (not self.parameters.control.negq) and (self.sequences.fluxes.qah < 0.0):
2440
+ d_area = 0.0
2441
+ for k in range(self.parameters.control.nhru):
2442
+ if self.parameters.control.lnk[k] in (FLUSS, SEE):
2443
+ d_area = d_area + (self.parameters.control.fhru[k])
2444
+ if d_area > 0.0:
2445
+ for k in range(self.parameters.control.nhru):
2446
+ if self.parameters.control.lnk[k] in (FLUSS, SEE):
2447
+ self.sequences.fluxes.evi[k] = self.sequences.fluxes.evi[k] + (self.sequences.fluxes.qah / d_area)
2448
+ self.sequences.fluxes.qah = 0.0
2449
+ d_epw = 0.0
2450
+ for k in range(self.parameters.control.nhru):
2451
+ if self.parameters.control.lnk[k] == WASSER:
2452
+ self.sequences.fluxes.qah = self.sequences.fluxes.qah + (self.parameters.control.fhru[k] * self.sequences.fluxes.nkor[k])
2453
+ d_epw = d_epw + (self.parameters.control.fhru[k] * self.sequences.fluxes.evi[k])
2454
+ if (self.sequences.fluxes.qah > d_epw) or self.parameters.control.negq:
2455
+ self.sequences.fluxes.qah = self.sequences.fluxes.qah - (d_epw)
2456
+ elif d_epw > 0.0:
2457
+ for k in range(self.parameters.control.nhru):
2458
+ if self.parameters.control.lnk[k] == WASSER:
2459
+ self.sequences.fluxes.evi[k] = self.sequences.fluxes.evi[k] * (self.sequences.fluxes.qah / d_epw)
2460
+ self.sequences.fluxes.qah = 0.0
2461
+ cpdef inline void calc_qa_v1(self) noexcept nogil:
2462
+ self.sequences.fluxes.qa = self.parameters.derived.qfactor * self.sequences.fluxes.qah
2463
+ cpdef double get_temperature_v1(self, numpy.int64_t s) noexcept nogil:
2464
+ return self.sequences.fluxes.tkor[s]
2465
+ cpdef double get_meantemperature_v1(self) noexcept nogil:
2466
+ return self.sequences.inputs.teml
2467
+ cpdef double get_precipitation_v1(self, numpy.int64_t s) noexcept nogil:
2468
+ return self.sequences.fluxes.nkor[s]
2469
+ cpdef double get_interceptedwater_v1(self, numpy.int64_t k) noexcept nogil:
2470
+ return self.sequences.states.inzp[k]
2471
+ cpdef double get_soilwater_v1(self, numpy.int64_t k) noexcept nogil:
2472
+ return self.sequences.states.bowa[k]
2473
+ cpdef double get_snowcover_v1(self, numpy.int64_t k) noexcept nogil:
2474
+ if self.sequences.states.wats[k] > 0.0:
2475
+ return 1.0
2476
+ return 0.0
2477
+ cpdef double get_snowycanopy_v1(self, numpy.int64_t k) noexcept nogil:
2478
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2479
+ return float(self.sequences.states.stinz[k] > 0.0)
2480
+ return nan
2481
+ cpdef double get_snowalbedo_v1(self, numpy.int64_t k) noexcept nogil:
2482
+ return self.sequences.fluxes.actualalbedo[k]
2483
+ cpdef inline double return_netlongwaveradiationinz_v1(self, numpy.int64_t k) noexcept nogil:
2484
+ cdef double d_rlsnow
2485
+ cdef double d_fr
2486
+ d_fr = self.parameters.derived.fr[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]]
2487
+ d_rlsnow = self.parameters.fixed.sigma * (self.sequences.aides.tempsinz[k] + 273.15) ** 4
2488
+ return (1.0 - d_fr) * (d_rlsnow - self.sequences.aides.rlatm[k])
2489
+ cpdef inline double return_netlongwaveradiationsnow_v1(self, numpy.int64_t k) noexcept nogil:
2490
+ cdef double d_fr
2491
+ cdef double d_counter
2492
+ cdef double d_temp
2493
+ d_temp = self.sequences.fluxes.tkor[k] + 273.15
2494
+ d_counter = self.sequences.aides.rlatm[k]
2495
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2496
+ d_fr = self.parameters.derived.fr[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]]
2497
+ d_counter = d_fr * d_counter + (1.0 - d_fr) * 0.97 * self.parameters.fixed.sigma * d_temp**4
2498
+ return self.parameters.fixed.sigma * (self.sequences.fluxes.tempssurface[k] + 273.15) ** 4 - d_counter
2499
+ cpdef inline double return_energygainsnowsurface_v1(self, double tempssurface) noexcept nogil:
2500
+ cdef numpy.int64_t k
2501
+ k = self.idx_hru
2502
+ self.sequences.fluxes.tempssurface[k] = tempssurface
2503
+ self.sequences.fluxes.saturationvapourpressuresnow[k] = self.return_saturationvapourpressure_v1( self.sequences.fluxes.tempssurface[k] )
2504
+ self.sequences.fluxes.wlatsnow[k] = self.return_wlatsnow_v1(k)
2505
+ self.sequences.fluxes.wsenssnow[k] = self.return_wsenssnow_v1(k)
2506
+ self.sequences.fluxes.netlongwaveradiationsnow[k] = self.return_netlongwaveradiationsnow_v1(k)
2507
+ self.sequences.fluxes.netradiationsnow[k] = self.return_netradiation_v1( self.sequences.fluxes.netshortwaveradiationsnow[k], self.sequences.fluxes.netlongwaveradiationsnow[k] )
2508
+ self.sequences.fluxes.wsurf[k] = self.return_wsurf_v1(k)
2509
+ return ( self.sequences.fluxes.wsurf[k] + self.sequences.fluxes.netradiationsnow[k] - self.sequences.fluxes.wsenssnow[k] - self.sequences.fluxes.wlatsnow[k] )
2510
+ cpdef inline double return_saturationvapourpressure_v1(self, double temperature) noexcept nogil:
2511
+ return 6.1078 * 2.71828 ** (17.08085 * temperature / (temperature + 234.175))
2512
+ cpdef inline double return_netradiation_v1(self, double netshortwaveradiation, double netlongwaveradiation) noexcept nogil:
2513
+ return netshortwaveradiation - netlongwaveradiation
2514
+ cpdef inline double return_wsensinz_v1(self, numpy.int64_t k) noexcept nogil:
2515
+ return (self.parameters.control.turb0 + self.parameters.control.turb1 * self.sequences.fluxes.reducedwindspeed2m[k]) * ( self.sequences.aides.tempsinz[k] - self.sequences.fluxes.tkor[k] )
2516
+ cpdef inline double return_wsenssnow_v1(self, numpy.int64_t k) noexcept nogil:
2517
+ return (self.parameters.control.turb0 + self.parameters.control.turb1 * self.sequences.fluxes.reducedwindspeed2m[k]) * ( self.sequences.fluxes.tempssurface[k] - self.sequences.fluxes.tkor[k] )
2518
+ cpdef inline double return_wlatinz_v1(self, numpy.int64_t k) noexcept nogil:
2519
+ return ( (self.parameters.control.turb0 + self.parameters.control.turb1 * self.sequences.fluxes.reducedwindspeed2m[k]) * self.parameters.fixed.psyinv * (self.sequences.fluxes.saturationvapourpressureinz[k] - self.sequences.fluxes.actualvapourpressure[k]) )
2520
+ cpdef inline double return_wlatsnow_v1(self, numpy.int64_t k) noexcept nogil:
2521
+ return ( (self.parameters.control.turb0 + self.parameters.control.turb1 * self.sequences.fluxes.reducedwindspeed2m[k]) * self.parameters.fixed.psyinv * (self.sequences.fluxes.saturationvapourpressuresnow[k] - self.sequences.fluxes.actualvapourpressure[k]) )
2522
+ cpdef inline double return_wsurfinz_v1(self, numpy.int64_t k) noexcept nogil:
2523
+ self.sequences.fluxes.saturationvapourpressureinz[k] = self.return_saturationvapourpressure_v1( max(self.sequences.aides.tempsinz[k], self.sequences.fluxes.tkor[k]) )
2524
+ self.sequences.fluxes.wlatinz[k] = self.return_wlatinz_v1(k)
2525
+ self.sequences.fluxes.wsensinz[k] = self.return_wsensinz_v1(k)
2526
+ self.sequences.fluxes.netlongwaveradiationinz[k] = self.return_netlongwaveradiationinz_v1(k)
2527
+ self.sequences.fluxes.netradiationinz[k] = self.return_netradiation_v1( self.sequences.fluxes.netshortwaveradiationinz[k], self.sequences.fluxes.netlongwaveradiationinz[k] )
2528
+ self.sequences.fluxes.wsurfinz[k] = self.sequences.fluxes.wsensinz[k] + self.sequences.fluxes.wlatinz[k] - self.sequences.fluxes.netradiationinz[k]
2529
+ return self.sequences.fluxes.wsurfinz[k]
2530
+ cpdef inline double return_wsurf_v1(self, numpy.int64_t k) noexcept nogil:
2531
+ if isinf(self.parameters.control.ktschnee):
2532
+ return inf
2533
+ return self.parameters.control.ktschnee * (self.sequences.aides.temps[k] - self.sequences.fluxes.tempssurface[k])
2534
+ cpdef inline double return_temps_v1(self, numpy.int64_t k) noexcept nogil:
2535
+ cdef double d_water
2536
+ cdef double d_ice
2537
+ if self.sequences.states.waes[k] > 0.0:
2538
+ d_ice = self.parameters.fixed.cpeis * self.sequences.states.wats[k]
2539
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.states.waes[k] - self.sequences.states.wats[k])
2540
+ return max(self.sequences.states.esnow[k] / (d_ice + d_water), -273.0)
2541
+ return nan
2542
+ cpdef inline double return_tempsinz_v1(self, numpy.int64_t k) noexcept nogil:
2543
+ cdef double d_water
2544
+ cdef double d_ice
2545
+ if self.sequences.states.sinz[k] > 0.0:
2546
+ d_ice = self.parameters.fixed.cpeis * self.sequences.states.stinz[k]
2547
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.states.sinz[k] - self.sequences.states.stinz[k])
2548
+ return max(self.sequences.states.esnowinz[k] / (d_ice + d_water), -273.0)
2549
+ return nan
2550
+ cpdef inline double return_wg_v1(self, numpy.int64_t k) noexcept nogil:
2551
+ cdef double d_temp
2552
+ if self.sequences.states.waes[k] > 0.0:
2553
+ d_temp = self.sequences.aides.temps[k]
2554
+ else:
2555
+ d_temp = self.sequences.fluxes.tkor[k]
2556
+ return self.parameters.fixed.lambdag * (self.sequences.fluxes.tz[k] - d_temp) / self.parameters.fixed.z
2557
+ cpdef inline double return_backwardeulererrorinz_v1(self, double esnowinz) noexcept nogil:
2558
+ cdef double d_esnowinz_old
2559
+ cdef numpy.int64_t k
2560
+ k = self.idx_hru
2561
+ if self.sequences.states.sinz[k] > 0.0:
2562
+ d_esnowinz_old = self.sequences.states.esnowinz[k]
2563
+ self.sequences.states.esnowinz[k] = esnowinz
2564
+ self.sequences.aides.tempsinz[k] = self.return_tempsinz_v1(k)
2565
+ self.sequences.states.esnowinz[k] = d_esnowinz_old
2566
+ return d_esnowinz_old - esnowinz - self.return_wsurfinz_v1(k)
2567
+ return nan
2568
+ cpdef inline double return_backwardeulererror_v1(self, double esnow) noexcept nogil:
2569
+ cdef double d_esnow_old
2570
+ cdef numpy.int64_t k
2571
+ k = self.idx_hru
2572
+ if self.sequences.states.waes[k] > 0.0:
2573
+ d_esnow_old = self.sequences.states.esnow[k]
2574
+ self.sequences.states.esnow[k] = esnow
2575
+ self.sequences.aides.temps[k] = self.return_temps_v1(k)
2576
+ self.sequences.states.esnow[k] = d_esnow_old
2577
+ self.return_tempssurface_v1(k)
2578
+ self.sequences.fluxes.wg[k] = self.return_wg_v1(k)
2579
+ return d_esnow_old - esnow + self.sequences.fluxes.wg[k] - self.sequences.fluxes.wsurf[k]
2580
+ return nan
2581
+ cpdef inline double return_esnowinz_v1(self, numpy.int64_t k, double temps) noexcept nogil:
2582
+ cdef double d_water
2583
+ cdef double d_ice
2584
+ d_ice = self.parameters.fixed.cpeis * self.sequences.states.stinz[k]
2585
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.states.sinz[k] - self.sequences.states.stinz[k])
2586
+ return temps * (d_ice + d_water)
2587
+ cpdef inline double return_esnow_v1(self, numpy.int64_t k, double temps) noexcept nogil:
2588
+ cdef double d_water
2589
+ cdef double d_ice
2590
+ d_ice = self.parameters.fixed.cpeis * self.sequences.states.wats[k]
2591
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.states.waes[k] - self.sequences.states.wats[k])
2592
+ return temps * (d_ice + d_water)
2593
+ cpdef inline double return_tempssurface_v1(self, numpy.int64_t k) noexcept nogil:
2594
+ if self.sequences.states.waes[k] > 0.0:
2595
+ if isinf(self.parameters.control.ktschnee):
2596
+ self.idx_hru = k
2597
+ self.return_energygainsnowsurface_v1(self.sequences.aides.temps[k])
2598
+ self.sequences.fluxes.wsurf[k] = ( self.sequences.fluxes.wsenssnow[k] + self.sequences.fluxes.wlatsnow[k] - self.sequences.fluxes.netradiationsnow[k] )
2599
+ else:
2600
+ self.idx_hru = k
2601
+ self.pegasustempssurface.find_x(-50.0, 0.0, -100.0, 0.0, 0.0, 1e-8, 10)
2602
+ self.sequences.fluxes.wsurf[k] = self.sequences.fluxes.wsurf[k] - (self.return_energygainsnowsurface_v1( self.sequences.fluxes.tempssurface[k] ))
2603
+ else:
2604
+ self.sequences.fluxes.tempssurface[k] = nan
2605
+ self.sequences.fluxes.saturationvapourpressuresnow[k] = 0.0
2606
+ self.sequences.fluxes.wsenssnow[k] = 0.0
2607
+ self.sequences.fluxes.wlatsnow[k] = 0.0
2608
+ self.sequences.fluxes.wsurf[k] = 0.0
2609
+ return self.sequences.fluxes.tempssurface[k]
2610
+ cpdef inline double return_sg_v1(self, double k, double s, double qz, double dt) noexcept nogil:
2611
+ if k <= 0.0:
2612
+ return 0.0
2613
+ if isinf(k):
2614
+ return s + qz
2615
+ return k * qz - (k * qz - s) * exp(-dt / k)
2616
+ cpdef inline void calc_bowa_default_v1(self) noexcept nogil:
2617
+ cdef double d_factor
2618
+ cdef double d_rvl
2619
+ cdef double d_incr
2620
+ cdef double d_decr
2621
+ cdef numpy.int64_t k
2622
+ for k in range(self.parameters.control.nhru):
2623
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
2624
+ self.sequences.states.bowa[k] = 0.0
2625
+ else:
2626
+ d_decr = self.sequences.fluxes.qbb[k] + self.sequences.fluxes.qib1[k] + self.sequences.fluxes.qib2[k] + self.sequences.fluxes.qdb[k]
2627
+ d_incr = self.sequences.fluxes.wada[k] + self.sequences.fluxes.qkap[k]
2628
+ if self.sequences.fluxes.evb[k] > 0.0:
2629
+ d_decr = d_decr + (self.sequences.fluxes.evb[k])
2630
+ else:
2631
+ d_incr = d_incr - (self.sequences.fluxes.evb[k])
2632
+ if d_decr > self.sequences.states.bowa[k] + d_incr:
2633
+ d_rvl = (self.sequences.states.bowa[k] + d_incr) / d_decr
2634
+ if self.sequences.fluxes.evb[k] > 0.0:
2635
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (d_rvl)
2636
+ self.sequences.fluxes.qbb[k] = self.sequences.fluxes.qbb[k] * (d_rvl)
2637
+ self.sequences.fluxes.qib1[k] = self.sequences.fluxes.qib1[k] * (d_rvl)
2638
+ self.sequences.fluxes.qib2[k] = self.sequences.fluxes.qib2[k] * (d_rvl)
2639
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.qdb[k] * (d_rvl)
2640
+ self.sequences.states.bowa[k] = 0.0
2641
+ else:
2642
+ self.sequences.states.bowa[k] = (self.sequences.states.bowa[k] + d_incr) - d_decr
2643
+ if self.sequences.states.bowa[k] > self.parameters.control.wmax[k]:
2644
+ d_factor = (self.sequences.states.bowa[k] - self.parameters.control.wmax[k]) / d_incr
2645
+ if self.sequences.fluxes.evb[k] < 0.0:
2646
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (d_factor)
2647
+ self.sequences.fluxes.wada[k] = self.sequences.fluxes.wada[k] * (d_factor)
2648
+ self.sequences.fluxes.qkap[k] = self.sequences.fluxes.qkap[k] * (d_factor)
2649
+ self.sequences.states.bowa[k] = self.parameters.control.wmax[k]
2650
+ cpdef inline void calc_bowa_soilmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
2651
+ cdef double removal
2652
+ cdef double demand
2653
+ cdef double factor
2654
+ cdef double addition
2655
+ cdef double supply
2656
+ cdef double qbb_soilmodel
2657
+ cdef double infiltration
2658
+ cdef numpy.int64_t k
2659
+ for k in range(self.parameters.control.nhru):
2660
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
2661
+ self.sequences.states.bowa[k] = 0.0
2662
+ else:
2663
+ submodel.set_initialsurfacewater(k, self.sequences.fluxes.wada[k])
2664
+ submodel.set_actualsurfacewater(k, self.sequences.fluxes.wada[k] - self.sequences.fluxes.qdb[k])
2665
+ submodel.set_soilwatersupply(k, 0.0)
2666
+ submodel.set_soilwaterdemand(k, 0.0)
2667
+ submodel.execute_infiltration(k)
2668
+ infiltration = submodel.get_infiltration(k)
2669
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.qdb[k] + ((self.sequences.fluxes.wada[k] - self.sequences.fluxes.qdb[k]) - infiltration)
2670
+ qbb_soilmodel = submodel.get_percolation(k)
2671
+ supply = self.sequences.fluxes.qkap[k]
2672
+ if self.sequences.fluxes.evb[k] < 0.0:
2673
+ supply = supply - (self.sequences.fluxes.evb[k])
2674
+ submodel.set_soilwatersupply(k, supply)
2675
+ submodel.add_soilwater(k)
2676
+ addition = submodel.get_soilwateraddition(k)
2677
+ if addition < supply:
2678
+ factor = addition / supply
2679
+ self.sequences.fluxes.qkap[k] = self.sequences.fluxes.qkap[k] * (factor)
2680
+ if self.sequences.fluxes.evb[k] < 0.0:
2681
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (factor)
2682
+ demand = self.sequences.fluxes.qbb[k] + self.sequences.fluxes.qib1[k] + self.sequences.fluxes.qib2[k]
2683
+ if self.sequences.fluxes.evb[k] > 0.0:
2684
+ demand = demand + (self.sequences.fluxes.evb[k])
2685
+ submodel.set_soilwaterdemand(k, demand)
2686
+ submodel.remove_soilwater(k)
2687
+ removal = submodel.get_soilwaterremoval(k)
2688
+ if removal < demand:
2689
+ factor = removal / demand
2690
+ self.sequences.fluxes.qbb[k] = self.sequences.fluxes.qbb[k] * (factor)
2691
+ self.sequences.fluxes.qib1[k] = self.sequences.fluxes.qib1[k] * (factor)
2692
+ self.sequences.fluxes.qib2[k] = self.sequences.fluxes.qib2[k] * (factor)
2693
+ if self.sequences.fluxes.evb[k] > 0.0:
2694
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (factor)
2695
+ self.sequences.states.bowa[k] = submodel.get_soilwatercontent(k)
2696
+ self.sequences.fluxes.qbb[k] = self.sequences.fluxes.qbb[k] + (qbb_soilmodel)
2697
+ cpdef inline void calc_evi_inzp_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
2698
+ cdef numpy.int64_t k
2699
+ submodel.determine_interceptionevaporation()
2700
+ submodel.determine_waterevaporation()
2701
+ for k in range(self.parameters.control.nhru):
2702
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2703
+ self.sequences.fluxes.evi[k] = submodel.get_waterevaporation(k)
2704
+ self.sequences.states.inzp[k] = 0.0
2705
+ else:
2706
+ self.sequences.fluxes.evi[k] = min(submodel.get_interceptionevaporation(k), self.sequences.states.inzp[k])
2707
+ self.sequences.states.inzp[k] = self.sequences.states.inzp[k] - (self.sequences.fluxes.evi[k])
2708
+ cpdef inline void calc_evb_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
2709
+ cdef numpy.int64_t k
2710
+ submodel.determine_soilevapotranspiration()
2711
+ for k in range(self.parameters.control.nhru):
2712
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
2713
+ self.sequences.fluxes.evb[k] = 0.0
2714
+ else:
2715
+ self.sequences.fluxes.evb[k] = submodel.get_soilevapotranspiration(k)
2716
+ cpdef inline void pass_qa_v1(self) noexcept nogil:
2717
+ self.sequences.outlets.q[0] = self.sequences.outlets.q[0] + (self.sequences.fluxes.qa)
2718
+ cpdef inline void pick_qz(self) noexcept nogil:
2719
+ cdef numpy.int64_t idx
2720
+ self.sequences.fluxes.qz = 0.0
2721
+ for idx in range(self.sequences.inlets.len_q):
2722
+ self.sequences.fluxes.qz = self.sequences.fluxes.qz + (self.sequences.inlets.q[idx][0])
2723
+ cpdef inline void process_radiationmodel(self) noexcept nogil:
2724
+ if self.radiationmodel_typeid == 1:
2725
+ (<masterinterface.MasterInterface>self.radiationmodel).process_radiation()
2726
+ cpdef inline void calc_possiblesunshineduration(self) noexcept nogil:
2727
+ if self.radiationmodel_typeid == 1:
2728
+ self.sequences.factors.possiblesunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_possiblesunshineduration()
2729
+ elif self.radiationmodel_typeid == 4:
2730
+ self.sequences.factors.possiblesunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_possiblesunshineduration()
2731
+ cpdef inline void calc_sunshineduration(self) noexcept nogil:
2732
+ if self.radiationmodel_typeid == 1:
2733
+ self.sequences.factors.sunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_sunshineduration()
2734
+ elif self.radiationmodel_typeid == 4:
2735
+ self.sequences.factors.sunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_sunshineduration()
2736
+ cpdef inline void calc_globalradiation(self) noexcept nogil:
2737
+ if self.radiationmodel_typeid == 1:
2738
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
2739
+ elif self.radiationmodel_typeid == 4:
2740
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
2741
+ cpdef inline void calc_qzh(self) noexcept nogil:
2742
+ self.sequences.fluxes.qzh = self.sequences.fluxes.qz / self.parameters.derived.qfactor
2743
+ cpdef inline void update_loggedsunshineduration(self) noexcept nogil:
2744
+ cdef numpy.int64_t idx
2745
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
2746
+ self.sequences.logs.loggedsunshineduration[idx] = self.sequences.logs.loggedsunshineduration[idx - 1]
2747
+ self.sequences.logs.loggedsunshineduration[0] = self.sequences.factors.sunshineduration
2748
+ cpdef inline void calc_dailysunshineduration(self) noexcept nogil:
2749
+ cdef numpy.int64_t idx
2750
+ self.sequences.fluxes.dailysunshineduration = 0.0
2751
+ for idx in range(self.parameters.derived.nmblogentries):
2752
+ self.sequences.fluxes.dailysunshineduration = self.sequences.fluxes.dailysunshineduration + (self.sequences.logs.loggedsunshineduration[idx])
2753
+ cpdef inline void update_loggedpossiblesunshineduration(self) noexcept nogil:
2754
+ cdef numpy.int64_t idx
2755
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
2756
+ self.sequences.logs.loggedpossiblesunshineduration[idx] = ( self.sequences.logs.loggedpossiblesunshineduration[idx - 1] )
2757
+ self.sequences.logs.loggedpossiblesunshineduration[0] = self.sequences.factors.possiblesunshineduration
2758
+ cpdef inline void calc_dailypossiblesunshineduration(self) noexcept nogil:
2759
+ cdef numpy.int64_t idx
2760
+ self.sequences.fluxes.dailypossiblesunshineduration = 0.0
2761
+ for idx in range(self.parameters.derived.nmblogentries):
2762
+ self.sequences.fluxes.dailypossiblesunshineduration = self.sequences.fluxes.dailypossiblesunshineduration + (self.sequences.logs.loggedpossiblesunshineduration[idx])
2763
+ cpdef inline void calc_nkor(self) noexcept nogil:
2764
+ cdef numpy.int64_t k
2765
+ for k in range(self.parameters.control.nhru):
2766
+ self.sequences.fluxes.nkor[k] = self.parameters.control.kg[k] * self.sequences.inputs.nied
2767
+ cpdef inline void calc_tkor(self) noexcept nogil:
2768
+ cdef numpy.int64_t k
2769
+ for k in range(self.parameters.control.nhru):
2770
+ self.sequences.fluxes.tkor[k] = self.parameters.control.kt[k] + self.sequences.inputs.teml
2771
+ cpdef inline void calc_windspeed2m(self) noexcept nogil:
2772
+ self.sequences.fluxes.windspeed2m = self.sequences.inputs.windspeed * ( log(2.0 / self.parameters.fixed.z0) / log(self.parameters.control.measuringheightwindspeed / self.parameters.fixed.z0) )
2773
+ cpdef inline void calc_reducedwindspeed2m(self) noexcept nogil:
2774
+ cdef double d_lai
2775
+ cdef numpy.int64_t k
2776
+ for k in range(self.parameters.control.nhru):
2777
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2778
+ d_lai = self.parameters.control.lai[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]]
2779
+ self.sequences.fluxes.reducedwindspeed2m[k] = ( max(self.parameters.control.p1wind - self.parameters.control.p2wind * d_lai, 0.0) * self.sequences.fluxes.windspeed2m )
2780
+ else:
2781
+ self.sequences.fluxes.reducedwindspeed2m[k] = self.sequences.fluxes.windspeed2m
2782
+ cpdef inline void calc_saturationvapourpressure(self) noexcept nogil:
2783
+ cdef numpy.int64_t k
2784
+ for k in range(self.parameters.control.nhru):
2785
+ self.sequences.fluxes.saturationvapourpressure[k] = self.return_saturationvapourpressure_v1( self.sequences.fluxes.tkor[k] )
2786
+ cpdef inline void calc_actualvapourpressure(self) noexcept nogil:
2787
+ cdef numpy.int64_t k
2788
+ for k in range(self.parameters.control.nhru):
2789
+ self.sequences.fluxes.actualvapourpressure[k] = ( self.sequences.fluxes.saturationvapourpressure[k] * self.sequences.inputs.relativehumidity / 100.0 )
2790
+ cpdef inline void calc_nbes_inzp(self) noexcept nogil:
2791
+ cdef numpy.int64_t k
2792
+ for k in range(self.parameters.control.nhru):
2793
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2794
+ self.sequences.fluxes.nbes[k] = 0.0
2795
+ self.sequences.states.inzp[k] = 0.0
2796
+ else:
2797
+ self.sequences.fluxes.nbes[k] = max( self.sequences.fluxes.nkor[k] + self.sequences.states.inzp[k] - self.parameters.derived.kinz[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]], 0.0, )
2798
+ self.sequences.states.inzp[k] = self.sequences.states.inzp[k] + (self.sequences.fluxes.nkor[k] - self.sequences.fluxes.nbes[k])
2799
+ cpdef inline void calc_snratio(self) noexcept nogil:
2800
+ cdef numpy.int64_t k
2801
+ for k in range(self.parameters.control.nhru):
2802
+ if self.sequences.fluxes.tkor[k] >= (self.parameters.control.tgr[k] + self.parameters.control.tsp[k] / 2.0):
2803
+ self.sequences.aides.snratio[k] = 0.0
2804
+ elif self.sequences.fluxes.tkor[k] <= (self.parameters.control.tgr[k] - self.parameters.control.tsp[k] / 2.0):
2805
+ self.sequences.aides.snratio[k] = 1.0
2806
+ else:
2807
+ self.sequences.aides.snratio[k] = ( (self.parameters.control.tgr[k] + self.parameters.control.tsp[k] / 2.0) - self.sequences.fluxes.tkor[k] ) / self.parameters.control.tsp[k]
2808
+ cpdef inline void calc_sbes(self) noexcept nogil:
2809
+ cdef numpy.int64_t k
2810
+ for k in range(self.parameters.control.nhru):
2811
+ self.sequences.fluxes.sbes[k] = self.sequences.aides.snratio[k] * self.sequences.fluxes.nbes[k]
2812
+ cpdef inline void calc_snowintmax(self) noexcept nogil:
2813
+ cdef double d_lai
2814
+ cdef numpy.int64_t k
2815
+ cdef numpy.int64_t idx
2816
+ idx = self.parameters.derived.moy[self.idx_sim]
2817
+ for k in range(self.parameters.control.nhru):
2818
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2819
+ d_lai = self.parameters.control.lai[self.parameters.control.lnk[k] - 1, idx]
2820
+ self.sequences.fluxes.snowintmax[k] = self.parameters.control.p1simax + self.parameters.control.p2simax * d_lai
2821
+ if self.sequences.fluxes.tkor[k] >= -1.0:
2822
+ self.sequences.fluxes.snowintmax[k] = self.sequences.fluxes.snowintmax[k] * (2)
2823
+ elif self.sequences.fluxes.tkor[k] > -3.0:
2824
+ self.sequences.fluxes.snowintmax[k] = self.sequences.fluxes.snowintmax[k] * (2.5 + 0.5 * self.sequences.fluxes.tkor[k])
2825
+ else:
2826
+ self.sequences.fluxes.snowintmax[k] = 0.0
2827
+ cpdef inline void calc_snowintrate(self) noexcept nogil:
2828
+ cdef double d_lai
2829
+ cdef numpy.int64_t k
2830
+ cdef numpy.int64_t idx
2831
+ idx = self.parameters.derived.moy[self.idx_sim]
2832
+ for k in range(self.parameters.control.nhru):
2833
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2834
+ d_lai = self.parameters.control.lai[self.parameters.control.lnk[k] - 1, idx]
2835
+ self.sequences.fluxes.snowintrate[k] = min( self.parameters.control.p1sirate + self.parameters.control.p2sirate * d_lai + self.parameters.control.p3sirate * self.sequences.states.sinz[k], 1.0, )
2836
+ else:
2837
+ self.sequences.fluxes.snowintrate[k] = 0.0
2838
+ cpdef inline void calc_nbesinz(self) noexcept nogil:
2839
+ cdef numpy.int64_t k
2840
+ for k in range(self.parameters.control.nhru):
2841
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2842
+ self.sequences.fluxes.nbesinz[k] = min( self.sequences.fluxes.snowintrate[k] * self.sequences.fluxes.nbes[k], max(self.sequences.fluxes.snowintmax[k] - self.sequences.states.sinz[k], 0.0), )
2843
+ else:
2844
+ self.sequences.fluxes.nbesinz[k] = 0.0
2845
+ cpdef inline void calc_sbesinz(self) noexcept nogil:
2846
+ cdef numpy.int64_t k
2847
+ for k in range(self.parameters.control.nhru):
2848
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2849
+ self.sequences.fluxes.sbesinz[k] = self.sequences.aides.snratio[k] * self.sequences.fluxes.nbesinz[k]
2850
+ else:
2851
+ self.sequences.fluxes.sbesinz[k] = 0.0
2852
+ cpdef inline void calc_stinz(self) noexcept nogil:
2853
+ cdef numpy.int64_t k
2854
+ for k in range(self.parameters.control.nhru):
2855
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2856
+ self.sequences.states.stinz[k] = self.sequences.states.stinz[k] + (self.sequences.fluxes.sbesinz[k])
2857
+ else:
2858
+ self.sequences.states.stinz[k] = 0.0
2859
+ cpdef inline void calc_wadainz_sinz(self) noexcept nogil:
2860
+ cdef numpy.int64_t k
2861
+ for k in range(self.parameters.control.nhru):
2862
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2863
+ self.sequences.states.sinz[k] = self.sequences.states.sinz[k] + (self.sequences.fluxes.nbesinz[k])
2864
+ self.sequences.fluxes.wadainz[k] = max(self.sequences.states.sinz[k] - self.parameters.control.pwmax[k] * self.sequences.states.stinz[k], 0.0)
2865
+ self.sequences.states.sinz[k] = self.sequences.states.sinz[k] - (self.sequences.fluxes.wadainz[k])
2866
+ else:
2867
+ self.sequences.fluxes.wadainz[k] = 0.0
2868
+ self.sequences.states.sinz[k] = 0.0
2869
+ cpdef inline void calc_wniedinz_esnowinz(self) noexcept nogil:
2870
+ cdef double d_water
2871
+ cdef double d_ice
2872
+ cdef numpy.int64_t k
2873
+ for k in range(self.parameters.control.nhru):
2874
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2875
+ d_ice = self.parameters.fixed.cpeis * self.sequences.fluxes.sbesinz[k]
2876
+ d_water = self.parameters.fixed.cpwasser * ( self.sequences.fluxes.nbesinz[k] - self.sequences.fluxes.sbesinz[k] - self.sequences.fluxes.wadainz[k] )
2877
+ self.sequences.fluxes.wniedinz[k] = (self.sequences.fluxes.tkor[k] - self.parameters.control.trefn[k]) * (d_ice + d_water)
2878
+ self.sequences.states.esnowinz[k] = self.sequences.states.esnowinz[k] + (self.sequences.fluxes.wniedinz[k])
2879
+ else:
2880
+ self.sequences.fluxes.wniedinz[k] = 0.0
2881
+ self.sequences.states.esnowinz[k] = 0.0
2882
+ cpdef inline void calc_tempsinz(self) noexcept nogil:
2883
+ cdef numpy.int64_t k
2884
+ for k in range(self.parameters.control.nhru):
2885
+ self.sequences.aides.tempsinz[k] = self.return_tempsinz_v1(k)
2886
+ cpdef inline void update_asinz(self) noexcept nogil:
2887
+ cdef double d_r2
2888
+ cdef double d_r1
2889
+ cdef numpy.int64_t k
2890
+ for k in range(self.parameters.control.nhru):
2891
+ if self.sequences.states.sinz[k] > 0:
2892
+ if isnan(self.sequences.states.asinz[k]):
2893
+ self.sequences.states.asinz[k] = 0.0
2894
+ d_r1 = exp( 5000.0 * (1 / 273.15 - 1.0 / (273.15 + self.sequences.aides.tempsinz[k])) )
2895
+ d_r2 = min(d_r1**10, 1.0)
2896
+ self.sequences.states.asinz[k] = self.sequences.states.asinz[k] * (max(1 - 0.1 * self.sequences.fluxes.sbesinz[k], 0.0))
2897
+ self.sequences.states.asinz[k] = self.sequences.states.asinz[k] + ((d_r1 + d_r2 + 0.03) / 1e6 * self.parameters.derived.seconds)
2898
+ else:
2899
+ self.sequences.states.asinz[k] = nan
2900
+ cpdef inline void calc_actualalbedoinz(self) noexcept nogil:
2901
+ cdef numpy.int64_t k
2902
+ for k in range(self.parameters.control.nhru):
2903
+ if self.sequences.states.sinz[k] > 0.0:
2904
+ self.sequences.fluxes.actualalbedoinz[k] = self.parameters.control.albedo0snow * ( 1.0 - self.parameters.control.snowagingfactor * self.sequences.states.asinz[k] / (1.0 + self.sequences.states.asinz[k]) )
2905
+ else:
2906
+ self.sequences.fluxes.actualalbedoinz[k] = nan
2907
+ cpdef inline void calc_netshortwaveradiationinz(self) noexcept nogil:
2908
+ cdef numpy.int64_t k
2909
+ for k in range(self.parameters.control.nhru):
2910
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2911
+ self.sequences.fluxes.netshortwaveradiationinz[k] = ( (1.0 - self.parameters.derived.fr[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]]) * (1.0 - self.sequences.fluxes.actualalbedoinz[k]) * self.sequences.fluxes.globalradiation )
2912
+ else:
2913
+ self.sequences.fluxes.netshortwaveradiationinz[k] = 0.0
2914
+ cpdef inline void calc_rlatm(self) noexcept nogil:
2915
+ cdef double d_t
2916
+ cdef numpy.int64_t k
2917
+ cdef double d_common
2918
+ cdef double d_rs
2919
+ d_rs = self.sequences.fluxes.dailysunshineduration / self.sequences.fluxes.dailypossiblesunshineduration
2920
+ d_common = self.parameters.fixed.fratm * self.parameters.fixed.sigma * (1.0 + 0.22 * (1.0 - d_rs) ** 2)
2921
+ for k in range(self.parameters.control.nhru):
2922
+ d_t = self.sequences.fluxes.tkor[k] + 273.15
2923
+ self.sequences.aides.rlatm[k] = d_common * ( d_t**4 * (self.sequences.fluxes.actualvapourpressure[k] / d_t) ** (1.0 / 7.0) )
2924
+ cpdef inline void calc_schmpotinz(self) noexcept nogil:
2925
+ cdef numpy.int64_t k
2926
+ for k in range(self.parameters.control.nhru):
2927
+ if self.sequences.states.sinz[k] > 0.0:
2928
+ self.sequences.fluxes.schmpotinz[k] = max(self.sequences.states.esnowinz[k] / self.parameters.fixed.rschmelz, 0.0)
2929
+ else:
2930
+ self.sequences.fluxes.schmpotinz[k] = 0.0
2931
+ cpdef inline void calc_schminz_stinz(self) noexcept nogil:
2932
+ cdef numpy.int64_t k
2933
+ for k in range(self.parameters.control.nhru):
2934
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2935
+ self.sequences.fluxes.schminz[k] = min(self.sequences.fluxes.schmpotinz[k], self.sequences.states.stinz[k])
2936
+ self.sequences.states.stinz[k] = self.sequences.states.stinz[k] - (self.sequences.fluxes.schminz[k])
2937
+ else:
2938
+ self.sequences.fluxes.schminz[k] = 0.0
2939
+ cpdef inline void calc_gefrpotinz(self) noexcept nogil:
2940
+ cdef numpy.int64_t k
2941
+ for k in range(self.parameters.control.nhru):
2942
+ if self.sequences.states.sinz[k] > 0:
2943
+ self.sequences.fluxes.gefrpotinz[k] = max(-self.sequences.states.esnowinz[k] / self.parameters.fixed.rschmelz, 0)
2944
+ else:
2945
+ self.sequences.fluxes.gefrpotinz[k] = 0.0
2946
+ cpdef inline void calc_gefrinz_stinz(self) noexcept nogil:
2947
+ cdef numpy.int64_t k
2948
+ for k in range(self.parameters.control.nhru):
2949
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW) and self.parameters.control.refreezeflag:
2950
+ self.sequences.fluxes.gefrinz[k] = min(self.sequences.fluxes.gefrpotinz[k], (self.sequences.states.sinz[k] - self.sequences.states.stinz[k]))
2951
+ self.sequences.states.stinz[k] = self.sequences.states.stinz[k] + (self.sequences.fluxes.gefrinz[k])
2952
+ else:
2953
+ self.sequences.fluxes.gefrinz[k] = 0.0
2954
+ cpdef inline void calc_evsinz_sinz_stinz(self) noexcept nogil:
2955
+ cdef double d_frac
2956
+ cdef numpy.int64_t k
2957
+ for k in range(self.parameters.control.nhru):
2958
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW) and (self.sequences.states.sinz[k] > 0.0):
2959
+ self.sequences.fluxes.evsinz[k] = min(self.sequences.fluxes.wlatinz[k] / self.parameters.fixed.lwe, self.sequences.states.sinz[k])
2960
+ d_frac = (self.sequences.states.sinz[k] - self.sequences.fluxes.evsinz[k]) / self.sequences.states.sinz[k]
2961
+ self.sequences.states.sinz[k] = self.sequences.states.sinz[k] * (d_frac)
2962
+ self.sequences.states.stinz[k] = self.sequences.states.stinz[k] * (d_frac)
2963
+ else:
2964
+ self.sequences.fluxes.evsinz[k] = 0.0
2965
+ self.sequences.states.sinz[k] = 0.0
2966
+ self.sequences.states.stinz[k] = 0.0
2967
+ cpdef inline void update_wadainz_sinz(self) noexcept nogil:
2968
+ cdef double d_wadainz_corr
2969
+ cdef numpy.int64_t k
2970
+ for k in range(self.parameters.control.nhru):
2971
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2972
+ d_wadainz_corr = max(self.sequences.states.sinz[k] - self.parameters.control.pwmax[k] * self.sequences.states.stinz[k], 0.0)
2973
+ self.sequences.fluxes.wadainz[k] = self.sequences.fluxes.wadainz[k] + (d_wadainz_corr)
2974
+ self.sequences.states.sinz[k] = self.sequences.states.sinz[k] - (d_wadainz_corr)
2975
+ cpdef inline void calc_wats(self) noexcept nogil:
2976
+ cdef numpy.int64_t k
2977
+ for k in range(self.parameters.control.nhru):
2978
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2979
+ self.sequences.states.wats[k] = 0.0
2980
+ elif self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2981
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] + (self.sequences.fluxes.sbes[k] - self.sequences.fluxes.sbesinz[k])
2982
+ else:
2983
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] + (self.sequences.fluxes.sbes[k])
2984
+ cpdef inline void calc_wada_waes(self) noexcept nogil:
2985
+ cdef numpy.int64_t k
2986
+ for k in range(self.parameters.control.nhru):
2987
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2988
+ self.sequences.states.waes[k] = 0.0
2989
+ self.sequences.fluxes.wada[k] = self.sequences.fluxes.nbes[k]
2990
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2991
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] + (self.sequences.fluxes.nbes[k] - self.sequences.fluxes.nbesinz[k] + self.sequences.fluxes.wadainz[k])
2992
+ self.sequences.fluxes.wada[k] = max(self.sequences.states.waes[k] - self.parameters.control.pwmax[k] * self.sequences.states.wats[k], 0.0)
2993
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] - (self.sequences.fluxes.wada[k])
2994
+ else:
2995
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] + (self.sequences.fluxes.nbes[k])
2996
+ self.sequences.fluxes.wada[k] = max(self.sequences.states.waes[k] - self.parameters.control.pwmax[k] * self.sequences.states.wats[k], 0.0)
2997
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] - (self.sequences.fluxes.wada[k])
2998
+ cpdef inline void calc_wnied_esnow(self) noexcept nogil:
2999
+ cdef double d_water
3000
+ cdef double d_ice
3001
+ cdef numpy.int64_t k
3002
+ for k in range(self.parameters.control.nhru):
3003
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
3004
+ self.sequences.fluxes.wnied[k] = 0.0
3005
+ self.sequences.states.esnow[k] = 0.0
3006
+ else:
3007
+ d_ice = self.parameters.fixed.cpeis * self.sequences.fluxes.sbes[k]
3008
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.fluxes.nbes[k] - self.sequences.fluxes.sbes[k] - self.sequences.fluxes.wada[k])
3009
+ self.sequences.fluxes.wnied[k] = (self.sequences.fluxes.tkor[k] - self.parameters.control.trefn[k]) * (d_ice + d_water)
3010
+ self.sequences.states.esnow[k] = self.sequences.states.esnow[k] + (self.sequences.fluxes.wnied[k])
3011
+ cpdef inline void calc_temps(self) noexcept nogil:
3012
+ cdef numpy.int64_t k
3013
+ for k in range(self.parameters.control.nhru):
3014
+ self.sequences.aides.temps[k] = self.return_temps_v1(k)
3015
+ cpdef inline void update_taus(self) noexcept nogil:
3016
+ cdef double d_r2
3017
+ cdef double d_r1
3018
+ cdef numpy.int64_t k
3019
+ for k in range(self.parameters.control.nhru):
3020
+ if self.sequences.states.waes[k] > 0:
3021
+ if isnan(self.sequences.states.taus[k]):
3022
+ self.sequences.states.taus[k] = 0.0
3023
+ d_r1 = exp( 5000.0 * (1 / 273.15 - 1.0 / (273.15 + self.sequences.aides.temps[k])) )
3024
+ d_r2 = min(d_r1**10, 1.0)
3025
+ self.sequences.states.taus[k] = self.sequences.states.taus[k] * (max(1 - 0.1 * self.sequences.fluxes.sbes[k], 0.0))
3026
+ self.sequences.states.taus[k] = self.sequences.states.taus[k] + ((d_r1 + d_r2 + 0.03) / 1e6 * self.parameters.derived.seconds)
3027
+ else:
3028
+ self.sequences.states.taus[k] = nan
3029
+ cpdef inline void calc_actualalbedo(self) noexcept nogil:
3030
+ cdef numpy.int64_t k
3031
+ for k in range(self.parameters.control.nhru):
3032
+ if self.sequences.states.waes[k] > 0.0:
3033
+ self.sequences.fluxes.actualalbedo[k] = self.parameters.control.albedo0snow * ( 1.0 - self.parameters.control.snowagingfactor * self.sequences.states.taus[k] / (1.0 + self.sequences.states.taus[k]) )
3034
+ else:
3035
+ self.sequences.fluxes.actualalbedo[k] = nan
3036
+ cpdef inline void calc_netshortwaveradiationsnow(self) noexcept nogil:
3037
+ cdef numpy.int64_t k
3038
+ for k in range(self.parameters.control.nhru):
3039
+ if isnan(self.sequences.fluxes.actualalbedo[k]):
3040
+ self.sequences.fluxes.netshortwaveradiationsnow[k] = 0.0
3041
+ else:
3042
+ self.sequences.fluxes.netshortwaveradiationsnow[k] = ( self.parameters.derived.fr[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]] * (1.0 - self.sequences.fluxes.actualalbedo[k]) * self.sequences.fluxes.globalradiation )
3043
+ cpdef inline void calc_tz(self) noexcept nogil:
3044
+ cdef numpy.int64_t k
3045
+ for k in range(self.parameters.control.nhru):
3046
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
3047
+ self.sequences.fluxes.tz[k] = nan
3048
+ elif self.sequences.states.ebdn[k] < 0.0:
3049
+ self.sequences.fluxes.tz[k] = self.sequences.states.ebdn[k] / (2.0 * self.parameters.fixed.z * self.parameters.fixed.cg)
3050
+ elif self.sequences.states.ebdn[k] < self.parameters.derived.heatoffusion[k]:
3051
+ self.sequences.fluxes.tz[k] = 0.0
3052
+ else:
3053
+ self.sequences.fluxes.tz[k] = (self.sequences.states.ebdn[k] - self.parameters.derived.heatoffusion[k]) / (2.0 * self.parameters.fixed.z * self.parameters.fixed.cg)
3054
+ cpdef inline void calc_wg(self) noexcept nogil:
3055
+ cdef numpy.int64_t k
3056
+ for k in range(self.parameters.control.nhru):
3057
+ if self.parameters.control.lnk[k] in (FLUSS, SEE, WASSER):
3058
+ self.sequences.fluxes.wg[k] = 0.0
3059
+ else:
3060
+ self.sequences.fluxes.wg[k] = self.return_wg_v1(k)
3061
+ cpdef inline void calc_schmpot(self) noexcept nogil:
3062
+ cdef numpy.int64_t k
3063
+ for k in range(self.parameters.control.nhru):
3064
+ if self.sequences.states.waes[k] > 0.0:
3065
+ self.sequences.fluxes.schmpot[k] = max(self.sequences.states.esnow[k] / self.parameters.fixed.rschmelz, 0.0)
3066
+ else:
3067
+ self.sequences.fluxes.schmpot[k] = 0.0
3068
+ cpdef inline void calc_schm_wats(self) noexcept nogil:
3069
+ cdef numpy.int64_t k
3070
+ for k in range(self.parameters.control.nhru):
3071
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
3072
+ self.sequences.fluxes.schm[k] = 0.0
3073
+ else:
3074
+ self.sequences.fluxes.schm[k] = min(self.sequences.fluxes.schmpot[k], self.sequences.states.wats[k])
3075
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] - (self.sequences.fluxes.schm[k])
3076
+ cpdef inline void calc_gefrpot(self) noexcept nogil:
3077
+ cdef numpy.int64_t k
3078
+ for k in range(self.parameters.control.nhru):
3079
+ if self.sequences.states.waes[k] > 0:
3080
+ self.sequences.fluxes.gefrpot[k] = max(-self.sequences.states.esnow[k] / self.parameters.fixed.rschmelz, 0)
3081
+ else:
3082
+ self.sequences.fluxes.gefrpot[k] = 0.0
3083
+ cpdef inline void calc_gefr_wats(self) noexcept nogil:
3084
+ cdef numpy.int64_t k
3085
+ for k in range(self.parameters.control.nhru):
3086
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE) or not self.parameters.control.refreezeflag:
3087
+ self.sequences.fluxes.gefr[k] = 0.0
3088
+ else:
3089
+ self.sequences.fluxes.gefr[k] = min(self.sequences.fluxes.gefrpot[k], (self.sequences.states.waes[k] - self.sequences.states.wats[k]))
3090
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] + (self.sequences.fluxes.gefr[k])
3091
+ cpdef inline void calc_evs_waes_wats(self) noexcept nogil:
3092
+ cdef double d_frac
3093
+ cdef numpy.int64_t k
3094
+ for k in range(self.parameters.control.nhru):
3095
+ if self.parameters.control.lnk[k] in (WASSER, SEE, FLUSS) or (self.sequences.states.waes[k] <= 0.0):
3096
+ self.sequences.fluxes.evs[k] = 0.0
3097
+ self.sequences.states.waes[k] = 0.0
3098
+ self.sequences.states.wats[k] = 0.0
3099
+ else:
3100
+ self.sequences.fluxes.evs[k] = min(self.sequences.fluxes.wlatsnow[k] / self.parameters.fixed.lwe, self.sequences.states.waes[k])
3101
+ d_frac = (self.sequences.states.waes[k] - self.sequences.fluxes.evs[k]) / self.sequences.states.waes[k]
3102
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] * (d_frac)
3103
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] * (d_frac)
3104
+ cpdef inline void update_wada_waes(self) noexcept nogil:
3105
+ cdef double d_wada_corr
3106
+ cdef numpy.int64_t k
3107
+ for k in range(self.parameters.control.nhru):
3108
+ if self.parameters.control.lnk[k] not in (WASSER, FLUSS, SEE):
3109
+ d_wada_corr = max(self.sequences.states.waes[k] - self.parameters.control.pwmax[k] * self.sequences.states.wats[k], 0.0)
3110
+ self.sequences.fluxes.wada[k] = self.sequences.fluxes.wada[k] + (d_wada_corr)
3111
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] - (d_wada_corr)
3112
+ cpdef inline void calc_evi_inzp(self) noexcept nogil:
3113
+ if self.aetmodel_typeid == 1:
3114
+ self.calc_evi_inzp_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
3115
+ cpdef inline void calc_evb(self) noexcept nogil:
3116
+ if self.aetmodel_typeid == 1:
3117
+ self.calc_evb_aetmodel_v1((<masterinterface.MasterInterface>self.aetmodel))
3118
+ cpdef inline void update_ebdn(self) noexcept nogil:
3119
+ cdef numpy.int64_t k
3120
+ for k in range(self.parameters.control.nhru):
3121
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
3122
+ self.sequences.states.ebdn[k] = 0.0
3123
+ else:
3124
+ self.sequences.states.ebdn[k] = self.sequences.states.ebdn[k] + (self.parameters.control.wg2z[self.parameters.derived.moy[self.idx_sim]] - self.sequences.fluxes.wg[k])
3125
+ cpdef inline void calc_sff(self) noexcept nogil:
3126
+ cdef double d_sff
3127
+ cdef numpy.int64_t k
3128
+ for k in range(self.parameters.control.nhru):
3129
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
3130
+ self.sequences.fluxes.sff[k] = 0.0
3131
+ else:
3132
+ d_sff = 1.0 - self.sequences.states.ebdn[k] / (self.parameters.fixed.bowa2z[k] * self.parameters.fixed.rschmelz)
3133
+ self.sequences.fluxes.sff[k] = min(max(d_sff, 0.0), 1.0)
3134
+ cpdef inline void calc_fvg(self) noexcept nogil:
3135
+ cdef numpy.int64_t k
3136
+ for k in range(self.parameters.control.nhru):
3137
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
3138
+ self.sequences.fluxes.fvg[k] = 0.0
3139
+ else:
3140
+ self.sequences.fluxes.fvg[k] = min(self.parameters.control.fvf * self.sequences.fluxes.sff[k] ** self.parameters.control.bsff, 1.0)
3141
+ cpdef inline void calc_qkap(self) noexcept nogil:
3142
+ cdef numpy.int64_t k
3143
+ for k in range(self.parameters.control.nhru):
3144
+ if (self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE)) or (self.parameters.control.wmax[k] <= 0.0):
3145
+ self.sequences.fluxes.qkap[k] = 0.0
3146
+ elif self.sequences.states.bowa[k] <= self.parameters.control.kapgrenz[k, 0]:
3147
+ self.sequences.fluxes.qkap[k] = self.parameters.control.kapmax[k]
3148
+ elif self.sequences.states.bowa[k] <= self.parameters.control.kapgrenz[k, 1]:
3149
+ self.sequences.fluxes.qkap[k] = self.parameters.control.kapmax[k] * ( 1.0 - (self.sequences.states.bowa[k] - self.parameters.control.kapgrenz[k, 0]) / (self.parameters.control.kapgrenz[k, 1] - self.parameters.control.kapgrenz[k, 0]) )
3150
+ else:
3151
+ self.sequences.fluxes.qkap[k] = 0
3152
+ cpdef inline void calc_qbb(self) noexcept nogil:
3153
+ cdef numpy.int64_t k
3154
+ for k in range(self.parameters.control.nhru):
3155
+ if ( (self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE)) or (self.sequences.states.bowa[k] <= self.parameters.control.pwp[k]) or (self.parameters.control.wmax[k] <= 0.0) ):
3156
+ self.sequences.fluxes.qbb[k] = 0.0
3157
+ elif self.sequences.states.bowa[k] <= self.parameters.control.fk[k]:
3158
+ if self.parameters.control.rbeta:
3159
+ self.sequences.fluxes.qbb[k] = 0.0
3160
+ else:
3161
+ self.sequences.fluxes.qbb[k] = self.parameters.control.beta[k] * (self.sequences.states.bowa[k] - self.parameters.control.pwp[k])
3162
+ else:
3163
+ self.sequences.fluxes.qbb[k] = ( self.parameters.control.beta[k] * (self.sequences.states.bowa[k] - self.parameters.control.pwp[k]) * ( 1.0 + (self.parameters.control.fbeta[k] - 1.0) * (self.sequences.states.bowa[k] - self.parameters.control.fk[k]) / (self.parameters.control.wmax[k] - self.parameters.control.fk[k]) ) )
3164
+ cpdef inline void calc_qib1(self) noexcept nogil:
3165
+ cdef numpy.int64_t k
3166
+ for k in range(self.parameters.control.nhru):
3167
+ if (self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE)) or ( self.sequences.states.bowa[k] <= self.parameters.control.pwp[k] ):
3168
+ self.sequences.fluxes.qib1[k] = 0.0
3169
+ else:
3170
+ self.sequences.fluxes.qib1[k] = self.parameters.control.dmin[k] * (self.sequences.states.bowa[k] / self.parameters.control.wmax[k])
3171
+ cpdef inline void calc_qib2(self) noexcept nogil:
3172
+ cdef numpy.int64_t k
3173
+ for k in range(self.parameters.control.nhru):
3174
+ if ( (self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE)) or (self.sequences.states.bowa[k] <= self.parameters.control.fk[k]) or (self.parameters.control.wmax[k] <= self.parameters.control.fk[k]) ):
3175
+ self.sequences.fluxes.qib2[k] = 0.0
3176
+ else:
3177
+ self.sequences.fluxes.qib2[k] = (self.parameters.control.dmax[k] - self.parameters.control.dmin[k]) * ( (self.sequences.states.bowa[k] - self.parameters.control.fk[k]) / (self.parameters.control.wmax[k] - self.parameters.control.fk[k]) ) ** 1.5
3178
+ cpdef inline void calc_qdb(self) noexcept nogil:
3179
+ cdef double d_exz
3180
+ cdef double d_sfa
3181
+ cdef numpy.int64_t k
3182
+ for k in range(self.parameters.control.nhru):
3183
+ if self.parameters.control.lnk[k] == WASSER:
3184
+ self.sequences.fluxes.qdb[k] = 0.0
3185
+ elif (self.parameters.control.lnk[k] in (VERS, FLUSS, SEE)) or (self.parameters.control.wmax[k] <= 0.0):
3186
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.wada[k]
3187
+ else:
3188
+ if self.sequences.states.bowa[k] < self.parameters.control.wmax[k]:
3189
+ d_sfa = (1.0 - self.sequences.states.bowa[k] / self.parameters.control.wmax[k]) ** ( 1.0 / (self.parameters.control.bsf[k] + 1.0) ) - (self.sequences.fluxes.wada[k] / ((self.parameters.control.bsf[k] + 1.0) * self.parameters.control.wmax[k]))
3190
+ else:
3191
+ d_sfa = 0.0
3192
+ d_exz = self.sequences.states.bowa[k] + self.sequences.fluxes.wada[k] - self.parameters.control.wmax[k]
3193
+ self.sequences.fluxes.qdb[k] = d_exz
3194
+ if d_sfa > 0.0:
3195
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.qdb[k] + (d_sfa ** (self.parameters.control.bsf[k] + 1.0) * self.parameters.control.wmax[k])
3196
+ self.sequences.fluxes.qdb[k] = max(self.sequences.fluxes.qdb[k], 0.0)
3197
+ cpdef inline void update_qdb(self) noexcept nogil:
3198
+ cdef numpy.int64_t k
3199
+ for k in range(self.parameters.control.nhru):
3200
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.qdb[k] + (self.sequences.fluxes.fvg[k] * (self.sequences.fluxes.wada[k] - self.sequences.fluxes.qdb[k]))
3201
+ cpdef inline void calc_bowa(self) noexcept nogil:
3202
+ if self.soilmodel is None:
3203
+ self.calc_bowa_default_v1()
3204
+ elif self.soilmodel_typeid == 1:
3205
+ self.calc_bowa_soilmodel_v1( (<masterinterface.MasterInterface>self.soilmodel) )
3206
+ cpdef inline void calc_qbgz(self) noexcept nogil:
3207
+ cdef numpy.int64_t k
3208
+ self.sequences.fluxes.qbgz = 0.0
3209
+ for k in range(self.parameters.control.nhru):
3210
+ if self.parameters.control.lnk[k] == SEE:
3211
+ self.sequences.fluxes.qbgz = self.sequences.fluxes.qbgz + (self.parameters.control.fhru[k] * (self.sequences.fluxes.nkor[k] - self.sequences.fluxes.evi[k]))
3212
+ elif self.parameters.control.lnk[k] not in (WASSER, FLUSS, VERS):
3213
+ self.sequences.fluxes.qbgz = self.sequences.fluxes.qbgz + (self.parameters.control.fhru[k] * (self.sequences.fluxes.qbb[k] - self.sequences.fluxes.qkap[k]))
3214
+ cpdef inline void calc_qigz1(self) noexcept nogil:
3215
+ cdef numpy.int64_t k
3216
+ self.sequences.fluxes.qigz1 = 0.0
3217
+ for k in range(self.parameters.control.nhru):
3218
+ self.sequences.fluxes.qigz1 = self.sequences.fluxes.qigz1 + (self.parameters.control.fhru[k] * self.sequences.fluxes.qib1[k])
3219
+ cpdef inline void calc_qigz2(self) noexcept nogil:
3220
+ cdef numpy.int64_t k
3221
+ self.sequences.fluxes.qigz2 = 0.0
3222
+ for k in range(self.parameters.control.nhru):
3223
+ self.sequences.fluxes.qigz2 = self.sequences.fluxes.qigz2 + (self.parameters.control.fhru[k] * self.sequences.fluxes.qib2[k])
3224
+ cpdef inline void calc_qdgz(self) noexcept nogil:
3225
+ cdef numpy.int64_t k
3226
+ self.sequences.fluxes.qdgz = 0.0
3227
+ for k in range(self.parameters.control.nhru):
3228
+ if self.parameters.control.lnk[k] == FLUSS:
3229
+ self.sequences.fluxes.qdgz = self.sequences.fluxes.qdgz + (self.parameters.control.fhru[k] * (self.sequences.fluxes.nkor[k] - self.sequences.fluxes.evi[k]))
3230
+ elif self.parameters.control.lnk[k] not in (WASSER, SEE):
3231
+ self.sequences.fluxes.qdgz = self.sequences.fluxes.qdgz + (self.parameters.control.fhru[k] * self.sequences.fluxes.qdb[k])
3232
+ cpdef inline void calc_qbga_sbg_qbgz_qdgz(self) noexcept nogil:
3233
+ cdef double qbgz
3234
+ cdef double tt
3235
+ cdef double c2
3236
+ cdef double c1
3237
+ cdef double st
3238
+ cdef double fraction
3239
+ cdef double t
3240
+ cdef double excess
3241
+ cdef double z
3242
+ cdef double s0
3243
+ cdef double g2
3244
+ cdef double g1
3245
+ cdef double sm
3246
+ cdef double k
3247
+ k = self.parameters.derived.kb
3248
+ sm = self.parameters.control.gsbmax * self.parameters.control.volbmax
3249
+ g1 = self.parameters.control.gsbgrad1
3250
+ g2 = self.parameters.control.gsbgrad2
3251
+ s0 = self.sequences.old_states.sbg
3252
+ z = self.sequences.fluxes.qbgz
3253
+ if s0 > sm:
3254
+ excess = s0 - sm
3255
+ s0 = sm
3256
+ else:
3257
+ excess = 0.0
3258
+ if k == 0.0:
3259
+ self.sequences.new_states.sbg = 0.0
3260
+ self.sequences.fluxes.qbga = s0 + self.sequences.fluxes.qbgz
3261
+ elif z - s0 / k <= g1:
3262
+ if isinf(k):
3263
+ self.sequences.new_states.sbg = min(s0 + z, sm)
3264
+ self.sequences.fluxes.qbga = 0.0
3265
+ else:
3266
+ if isinf(sm):
3267
+ t = 1.0
3268
+ else:
3269
+ fraction = (k * z - sm) / (k * z - s0)
3270
+ if fraction > 0.0:
3271
+ t = -k * log(fraction)
3272
+ else:
3273
+ t = 1.0
3274
+ if t < 1.0:
3275
+ self.sequences.new_states.sbg = sm
3276
+ self.sequences.fluxes.qbga = s0 - sm + t * self.sequences.fluxes.qbgz
3277
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + ((1.0 - t) * sm / k)
3278
+ else:
3279
+ self.sequences.new_states.sbg = self.return_sg_v1(k, s0, z, 1.0)
3280
+ self.sequences.fluxes.qbga = s0 - self.sequences.new_states.sbg + self.sequences.fluxes.qbgz
3281
+ elif g2 == 0.0:
3282
+ self.sequences.fluxes.qbga = s0 / k
3283
+ self.sequences.new_states.sbg = s0
3284
+ else:
3285
+ if isinf(k) and (g2 > g1):
3286
+ self.sequences.fluxes.qbga = 0.0
3287
+ self.sequences.new_states.sbg = s0 + g2 / ((g2 - g1) / z + 1.0)
3288
+ else:
3289
+ st = min(k * (z - g1), sm)
3290
+ if g1 == g2:
3291
+ t = min((st - s0) / g1, 1.0)
3292
+ self.sequences.fluxes.qbga = t * (g1 * t + 2.0 * s0) / (2.0 * k)
3293
+ else:
3294
+ c1 = (g2 - g1) / (g1 - g2 - z)
3295
+ c2 = (g2 * k * z) / (g1 - g2)
3296
+ t = min(k / c1 * log((st + c2) / (s0 + c2)), 1.0)
3297
+ self.sequences.fluxes.qbga = (s0 + c2) * ( exp(c1 * t / k) - 1.0 ) / c1 - c2 * t / k
3298
+ if t < 1.0:
3299
+ if st == sm:
3300
+ self.sequences.new_states.sbg = sm
3301
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + ((1.0 - t) * sm / k)
3302
+ else:
3303
+ fraction = (k * z - sm) / (k * z - st)
3304
+ if fraction > 0.0:
3305
+ tt = -k * log(fraction)
3306
+ else:
3307
+ tt = 1.0
3308
+ if t + tt < 1.0:
3309
+ self.sequences.new_states.sbg = sm
3310
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + (st - sm + tt * self.sequences.fluxes.qbgz)
3311
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + ((1.0 - t - tt) * sm / k)
3312
+ else:
3313
+ self.sequences.new_states.sbg = self.return_sg_v1(k, st, z, 1.0 - t)
3314
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + (st - self.sequences.new_states.sbg + (1.0 - t) * self.sequences.fluxes.qbgz)
3315
+ elif g1 == g2:
3316
+ self.sequences.new_states.sbg = s0 + g1
3317
+ else:
3318
+ self.sequences.new_states.sbg = (s0 + c2) * exp(1.0 / k * c1) - c2
3319
+ qbgz = self.sequences.fluxes.qbgz
3320
+ self.sequences.fluxes.qbgz = self.sequences.new_states.sbg - s0 + self.sequences.fluxes.qbga
3321
+ self.sequences.fluxes.qdgz = self.sequences.fluxes.qdgz + (qbgz - self.sequences.fluxes.qbgz)
3322
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + (excess)
3323
+ cpdef inline void calc_qiga1_sig1(self) noexcept nogil:
3324
+ self.sequences.new_states.sig1 = self.return_sg_v1(self.parameters.derived.ki1, self.sequences.old_states.sig1, self.sequences.fluxes.qigz1, 1.0)
3325
+ self.sequences.fluxes.qiga1 = self.sequences.old_states.sig1 - self.sequences.new_states.sig1 + self.sequences.fluxes.qigz1
3326
+ cpdef inline void calc_qiga2_sig2(self) noexcept nogil:
3327
+ self.sequences.new_states.sig2 = self.return_sg_v1(self.parameters.derived.ki2, self.sequences.old_states.sig2, self.sequences.fluxes.qigz2, 1.0)
3328
+ self.sequences.fluxes.qiga2 = self.sequences.old_states.sig2 - self.sequences.new_states.sig2 + self.sequences.fluxes.qigz2
3329
+ cpdef inline void calc_qdgz1_qdgz2(self) noexcept nogil:
3330
+ if self.sequences.fluxes.qdgz > self.parameters.control.a2:
3331
+ self.sequences.fluxes.qdgz2 = (self.sequences.fluxes.qdgz - self.parameters.control.a2) ** 2 / (self.sequences.fluxes.qdgz + self.parameters.control.a1 - self.parameters.control.a2)
3332
+ self.sequences.fluxes.qdgz1 = self.sequences.fluxes.qdgz - self.sequences.fluxes.qdgz2
3333
+ else:
3334
+ self.sequences.fluxes.qdgz2 = 0.0
3335
+ self.sequences.fluxes.qdgz1 = self.sequences.fluxes.qdgz
3336
+ cpdef inline void calc_qdga1_sdg1(self) noexcept nogil:
3337
+ self.sequences.new_states.sdg1 = self.return_sg_v1(self.parameters.derived.kd1, self.sequences.old_states.sdg1, self.sequences.fluxes.qdgz1, 1.0)
3338
+ self.sequences.fluxes.qdga1 = self.sequences.old_states.sdg1 - self.sequences.new_states.sdg1 + self.sequences.fluxes.qdgz1
3339
+ cpdef inline void calc_qdga2_sdg2(self) noexcept nogil:
3340
+ self.sequences.new_states.sdg2 = self.return_sg_v1(self.parameters.derived.kd2, self.sequences.old_states.sdg2, self.sequences.fluxes.qdgz2, 1.0)
3341
+ self.sequences.fluxes.qdga2 = self.sequences.old_states.sdg2 - self.sequences.new_states.sdg2 + self.sequences.fluxes.qdgz2
3342
+ cpdef inline void calc_qah(self) noexcept nogil:
3343
+ cdef double d_epw
3344
+ cdef numpy.int64_t k
3345
+ cdef double d_area
3346
+ self.sequences.fluxes.qah = self.sequences.fluxes.qzh + self.sequences.fluxes.qbga + self.sequences.fluxes.qiga1 + self.sequences.fluxes.qiga2 + self.sequences.fluxes.qdga1 + self.sequences.fluxes.qdga2
3347
+ if (not self.parameters.control.negq) and (self.sequences.fluxes.qah < 0.0):
3348
+ d_area = 0.0
3349
+ for k in range(self.parameters.control.nhru):
3350
+ if self.parameters.control.lnk[k] in (FLUSS, SEE):
3351
+ d_area = d_area + (self.parameters.control.fhru[k])
3352
+ if d_area > 0.0:
3353
+ for k in range(self.parameters.control.nhru):
3354
+ if self.parameters.control.lnk[k] in (FLUSS, SEE):
3355
+ self.sequences.fluxes.evi[k] = self.sequences.fluxes.evi[k] + (self.sequences.fluxes.qah / d_area)
3356
+ self.sequences.fluxes.qah = 0.0
3357
+ d_epw = 0.0
3358
+ for k in range(self.parameters.control.nhru):
3359
+ if self.parameters.control.lnk[k] == WASSER:
3360
+ self.sequences.fluxes.qah = self.sequences.fluxes.qah + (self.parameters.control.fhru[k] * self.sequences.fluxes.nkor[k])
3361
+ d_epw = d_epw + (self.parameters.control.fhru[k] * self.sequences.fluxes.evi[k])
3362
+ if (self.sequences.fluxes.qah > d_epw) or self.parameters.control.negq:
3363
+ self.sequences.fluxes.qah = self.sequences.fluxes.qah - (d_epw)
3364
+ elif d_epw > 0.0:
3365
+ for k in range(self.parameters.control.nhru):
3366
+ if self.parameters.control.lnk[k] == WASSER:
3367
+ self.sequences.fluxes.evi[k] = self.sequences.fluxes.evi[k] * (self.sequences.fluxes.qah / d_epw)
3368
+ self.sequences.fluxes.qah = 0.0
3369
+ cpdef inline void calc_qa(self) noexcept nogil:
3370
+ self.sequences.fluxes.qa = self.parameters.derived.qfactor * self.sequences.fluxes.qah
3371
+ cpdef double get_temperature(self, numpy.int64_t s) noexcept nogil:
3372
+ return self.sequences.fluxes.tkor[s]
3373
+ cpdef double get_meantemperature(self) noexcept nogil:
3374
+ return self.sequences.inputs.teml
3375
+ cpdef double get_precipitation(self, numpy.int64_t s) noexcept nogil:
3376
+ return self.sequences.fluxes.nkor[s]
3377
+ cpdef double get_interceptedwater(self, numpy.int64_t k) noexcept nogil:
3378
+ return self.sequences.states.inzp[k]
3379
+ cpdef double get_soilwater(self, numpy.int64_t k) noexcept nogil:
3380
+ return self.sequences.states.bowa[k]
3381
+ cpdef double get_snowcover(self, numpy.int64_t k) noexcept nogil:
3382
+ if self.sequences.states.wats[k] > 0.0:
3383
+ return 1.0
3384
+ return 0.0
3385
+ cpdef double get_snowycanopy(self, numpy.int64_t k) noexcept nogil:
3386
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
3387
+ return float(self.sequences.states.stinz[k] > 0.0)
3388
+ return nan
3389
+ cpdef double get_snowalbedo(self, numpy.int64_t k) noexcept nogil:
3390
+ return self.sequences.fluxes.actualalbedo[k]
3391
+ cpdef inline double return_netlongwaveradiationinz(self, numpy.int64_t k) noexcept nogil:
3392
+ cdef double d_rlsnow
3393
+ cdef double d_fr
3394
+ d_fr = self.parameters.derived.fr[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]]
3395
+ d_rlsnow = self.parameters.fixed.sigma * (self.sequences.aides.tempsinz[k] + 273.15) ** 4
3396
+ return (1.0 - d_fr) * (d_rlsnow - self.sequences.aides.rlatm[k])
3397
+ cpdef inline double return_netlongwaveradiationsnow(self, numpy.int64_t k) noexcept nogil:
3398
+ cdef double d_fr
3399
+ cdef double d_counter
3400
+ cdef double d_temp
3401
+ d_temp = self.sequences.fluxes.tkor[k] + 273.15
3402
+ d_counter = self.sequences.aides.rlatm[k]
3403
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
3404
+ d_fr = self.parameters.derived.fr[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]]
3405
+ d_counter = d_fr * d_counter + (1.0 - d_fr) * 0.97 * self.parameters.fixed.sigma * d_temp**4
3406
+ return self.parameters.fixed.sigma * (self.sequences.fluxes.tempssurface[k] + 273.15) ** 4 - d_counter
3407
+ cpdef inline double return_energygainsnowsurface(self, double tempssurface) noexcept nogil:
3408
+ cdef numpy.int64_t k
3409
+ k = self.idx_hru
3410
+ self.sequences.fluxes.tempssurface[k] = tempssurface
3411
+ self.sequences.fluxes.saturationvapourpressuresnow[k] = self.return_saturationvapourpressure_v1( self.sequences.fluxes.tempssurface[k] )
3412
+ self.sequences.fluxes.wlatsnow[k] = self.return_wlatsnow_v1(k)
3413
+ self.sequences.fluxes.wsenssnow[k] = self.return_wsenssnow_v1(k)
3414
+ self.sequences.fluxes.netlongwaveradiationsnow[k] = self.return_netlongwaveradiationsnow_v1(k)
3415
+ self.sequences.fluxes.netradiationsnow[k] = self.return_netradiation_v1( self.sequences.fluxes.netshortwaveradiationsnow[k], self.sequences.fluxes.netlongwaveradiationsnow[k] )
3416
+ self.sequences.fluxes.wsurf[k] = self.return_wsurf_v1(k)
3417
+ return ( self.sequences.fluxes.wsurf[k] + self.sequences.fluxes.netradiationsnow[k] - self.sequences.fluxes.wsenssnow[k] - self.sequences.fluxes.wlatsnow[k] )
3418
+ cpdef inline double return_saturationvapourpressure(self, double temperature) noexcept nogil:
3419
+ return 6.1078 * 2.71828 ** (17.08085 * temperature / (temperature + 234.175))
3420
+ cpdef inline double return_netradiation(self, double netshortwaveradiation, double netlongwaveradiation) noexcept nogil:
3421
+ return netshortwaveradiation - netlongwaveradiation
3422
+ cpdef inline double return_wsensinz(self, numpy.int64_t k) noexcept nogil:
3423
+ return (self.parameters.control.turb0 + self.parameters.control.turb1 * self.sequences.fluxes.reducedwindspeed2m[k]) * ( self.sequences.aides.tempsinz[k] - self.sequences.fluxes.tkor[k] )
3424
+ cpdef inline double return_wsenssnow(self, numpy.int64_t k) noexcept nogil:
3425
+ return (self.parameters.control.turb0 + self.parameters.control.turb1 * self.sequences.fluxes.reducedwindspeed2m[k]) * ( self.sequences.fluxes.tempssurface[k] - self.sequences.fluxes.tkor[k] )
3426
+ cpdef inline double return_wlatinz(self, numpy.int64_t k) noexcept nogil:
3427
+ return ( (self.parameters.control.turb0 + self.parameters.control.turb1 * self.sequences.fluxes.reducedwindspeed2m[k]) * self.parameters.fixed.psyinv * (self.sequences.fluxes.saturationvapourpressureinz[k] - self.sequences.fluxes.actualvapourpressure[k]) )
3428
+ cpdef inline double return_wlatsnow(self, numpy.int64_t k) noexcept nogil:
3429
+ return ( (self.parameters.control.turb0 + self.parameters.control.turb1 * self.sequences.fluxes.reducedwindspeed2m[k]) * self.parameters.fixed.psyinv * (self.sequences.fluxes.saturationvapourpressuresnow[k] - self.sequences.fluxes.actualvapourpressure[k]) )
3430
+ cpdef inline double return_wsurfinz(self, numpy.int64_t k) noexcept nogil:
3431
+ self.sequences.fluxes.saturationvapourpressureinz[k] = self.return_saturationvapourpressure_v1( max(self.sequences.aides.tempsinz[k], self.sequences.fluxes.tkor[k]) )
3432
+ self.sequences.fluxes.wlatinz[k] = self.return_wlatinz_v1(k)
3433
+ self.sequences.fluxes.wsensinz[k] = self.return_wsensinz_v1(k)
3434
+ self.sequences.fluxes.netlongwaveradiationinz[k] = self.return_netlongwaveradiationinz_v1(k)
3435
+ self.sequences.fluxes.netradiationinz[k] = self.return_netradiation_v1( self.sequences.fluxes.netshortwaveradiationinz[k], self.sequences.fluxes.netlongwaveradiationinz[k] )
3436
+ self.sequences.fluxes.wsurfinz[k] = self.sequences.fluxes.wsensinz[k] + self.sequences.fluxes.wlatinz[k] - self.sequences.fluxes.netradiationinz[k]
3437
+ return self.sequences.fluxes.wsurfinz[k]
3438
+ cpdef inline double return_wsurf(self, numpy.int64_t k) noexcept nogil:
3439
+ if isinf(self.parameters.control.ktschnee):
3440
+ return inf
3441
+ return self.parameters.control.ktschnee * (self.sequences.aides.temps[k] - self.sequences.fluxes.tempssurface[k])
3442
+ cpdef inline double return_temps(self, numpy.int64_t k) noexcept nogil:
3443
+ cdef double d_water
3444
+ cdef double d_ice
3445
+ if self.sequences.states.waes[k] > 0.0:
3446
+ d_ice = self.parameters.fixed.cpeis * self.sequences.states.wats[k]
3447
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.states.waes[k] - self.sequences.states.wats[k])
3448
+ return max(self.sequences.states.esnow[k] / (d_ice + d_water), -273.0)
3449
+ return nan
3450
+ cpdef inline double return_tempsinz(self, numpy.int64_t k) noexcept nogil:
3451
+ cdef double d_water
3452
+ cdef double d_ice
3453
+ if self.sequences.states.sinz[k] > 0.0:
3454
+ d_ice = self.parameters.fixed.cpeis * self.sequences.states.stinz[k]
3455
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.states.sinz[k] - self.sequences.states.stinz[k])
3456
+ return max(self.sequences.states.esnowinz[k] / (d_ice + d_water), -273.0)
3457
+ return nan
3458
+ cpdef inline double return_wg(self, numpy.int64_t k) noexcept nogil:
3459
+ cdef double d_temp
3460
+ if self.sequences.states.waes[k] > 0.0:
3461
+ d_temp = self.sequences.aides.temps[k]
3462
+ else:
3463
+ d_temp = self.sequences.fluxes.tkor[k]
3464
+ return self.parameters.fixed.lambdag * (self.sequences.fluxes.tz[k] - d_temp) / self.parameters.fixed.z
3465
+ cpdef inline double return_backwardeulererrorinz(self, double esnowinz) noexcept nogil:
3466
+ cdef double d_esnowinz_old
3467
+ cdef numpy.int64_t k
3468
+ k = self.idx_hru
3469
+ if self.sequences.states.sinz[k] > 0.0:
3470
+ d_esnowinz_old = self.sequences.states.esnowinz[k]
3471
+ self.sequences.states.esnowinz[k] = esnowinz
3472
+ self.sequences.aides.tempsinz[k] = self.return_tempsinz_v1(k)
3473
+ self.sequences.states.esnowinz[k] = d_esnowinz_old
3474
+ return d_esnowinz_old - esnowinz - self.return_wsurfinz_v1(k)
3475
+ return nan
3476
+ cpdef inline double return_backwardeulererror(self, double esnow) noexcept nogil:
3477
+ cdef double d_esnow_old
3478
+ cdef numpy.int64_t k
3479
+ k = self.idx_hru
3480
+ if self.sequences.states.waes[k] > 0.0:
3481
+ d_esnow_old = self.sequences.states.esnow[k]
3482
+ self.sequences.states.esnow[k] = esnow
3483
+ self.sequences.aides.temps[k] = self.return_temps_v1(k)
3484
+ self.sequences.states.esnow[k] = d_esnow_old
3485
+ self.return_tempssurface_v1(k)
3486
+ self.sequences.fluxes.wg[k] = self.return_wg_v1(k)
3487
+ return d_esnow_old - esnow + self.sequences.fluxes.wg[k] - self.sequences.fluxes.wsurf[k]
3488
+ return nan
3489
+ cpdef inline double return_esnowinz(self, numpy.int64_t k, double temps) noexcept nogil:
3490
+ cdef double d_water
3491
+ cdef double d_ice
3492
+ d_ice = self.parameters.fixed.cpeis * self.sequences.states.stinz[k]
3493
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.states.sinz[k] - self.sequences.states.stinz[k])
3494
+ return temps * (d_ice + d_water)
3495
+ cpdef inline double return_esnow(self, numpy.int64_t k, double temps) noexcept nogil:
3496
+ cdef double d_water
3497
+ cdef double d_ice
3498
+ d_ice = self.parameters.fixed.cpeis * self.sequences.states.wats[k]
3499
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.states.waes[k] - self.sequences.states.wats[k])
3500
+ return temps * (d_ice + d_water)
3501
+ cpdef inline double return_tempssurface(self, numpy.int64_t k) noexcept nogil:
3502
+ if self.sequences.states.waes[k] > 0.0:
3503
+ if isinf(self.parameters.control.ktschnee):
3504
+ self.idx_hru = k
3505
+ self.return_energygainsnowsurface_v1(self.sequences.aides.temps[k])
3506
+ self.sequences.fluxes.wsurf[k] = ( self.sequences.fluxes.wsenssnow[k] + self.sequences.fluxes.wlatsnow[k] - self.sequences.fluxes.netradiationsnow[k] )
3507
+ else:
3508
+ self.idx_hru = k
3509
+ self.pegasustempssurface.find_x(-50.0, 0.0, -100.0, 0.0, 0.0, 1e-8, 10)
3510
+ self.sequences.fluxes.wsurf[k] = self.sequences.fluxes.wsurf[k] - (self.return_energygainsnowsurface_v1( self.sequences.fluxes.tempssurface[k] ))
3511
+ else:
3512
+ self.sequences.fluxes.tempssurface[k] = nan
3513
+ self.sequences.fluxes.saturationvapourpressuresnow[k] = 0.0
3514
+ self.sequences.fluxes.wsenssnow[k] = 0.0
3515
+ self.sequences.fluxes.wlatsnow[k] = 0.0
3516
+ self.sequences.fluxes.wsurf[k] = 0.0
3517
+ return self.sequences.fluxes.tempssurface[k]
3518
+ cpdef inline double return_sg(self, double k, double s, double qz, double dt) noexcept nogil:
3519
+ if k <= 0.0:
3520
+ return 0.0
3521
+ if isinf(k):
3522
+ return s + qz
3523
+ return k * qz - (k * qz - s) * exp(-dt / k)
3524
+ cpdef inline void calc_bowa_default(self) noexcept nogil:
3525
+ cdef double d_factor
3526
+ cdef double d_rvl
3527
+ cdef double d_incr
3528
+ cdef double d_decr
3529
+ cdef numpy.int64_t k
3530
+ for k in range(self.parameters.control.nhru):
3531
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
3532
+ self.sequences.states.bowa[k] = 0.0
3533
+ else:
3534
+ d_decr = self.sequences.fluxes.qbb[k] + self.sequences.fluxes.qib1[k] + self.sequences.fluxes.qib2[k] + self.sequences.fluxes.qdb[k]
3535
+ d_incr = self.sequences.fluxes.wada[k] + self.sequences.fluxes.qkap[k]
3536
+ if self.sequences.fluxes.evb[k] > 0.0:
3537
+ d_decr = d_decr + (self.sequences.fluxes.evb[k])
3538
+ else:
3539
+ d_incr = d_incr - (self.sequences.fluxes.evb[k])
3540
+ if d_decr > self.sequences.states.bowa[k] + d_incr:
3541
+ d_rvl = (self.sequences.states.bowa[k] + d_incr) / d_decr
3542
+ if self.sequences.fluxes.evb[k] > 0.0:
3543
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (d_rvl)
3544
+ self.sequences.fluxes.qbb[k] = self.sequences.fluxes.qbb[k] * (d_rvl)
3545
+ self.sequences.fluxes.qib1[k] = self.sequences.fluxes.qib1[k] * (d_rvl)
3546
+ self.sequences.fluxes.qib2[k] = self.sequences.fluxes.qib2[k] * (d_rvl)
3547
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.qdb[k] * (d_rvl)
3548
+ self.sequences.states.bowa[k] = 0.0
3549
+ else:
3550
+ self.sequences.states.bowa[k] = (self.sequences.states.bowa[k] + d_incr) - d_decr
3551
+ if self.sequences.states.bowa[k] > self.parameters.control.wmax[k]:
3552
+ d_factor = (self.sequences.states.bowa[k] - self.parameters.control.wmax[k]) / d_incr
3553
+ if self.sequences.fluxes.evb[k] < 0.0:
3554
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (d_factor)
3555
+ self.sequences.fluxes.wada[k] = self.sequences.fluxes.wada[k] * (d_factor)
3556
+ self.sequences.fluxes.qkap[k] = self.sequences.fluxes.qkap[k] * (d_factor)
3557
+ self.sequences.states.bowa[k] = self.parameters.control.wmax[k]
3558
+ cpdef inline void calc_bowa_soilmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
3559
+ cdef double removal
3560
+ cdef double demand
3561
+ cdef double factor
3562
+ cdef double addition
3563
+ cdef double supply
3564
+ cdef double qbb_soilmodel
3565
+ cdef double infiltration
3566
+ cdef numpy.int64_t k
3567
+ for k in range(self.parameters.control.nhru):
3568
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
3569
+ self.sequences.states.bowa[k] = 0.0
3570
+ else:
3571
+ submodel.set_initialsurfacewater(k, self.sequences.fluxes.wada[k])
3572
+ submodel.set_actualsurfacewater(k, self.sequences.fluxes.wada[k] - self.sequences.fluxes.qdb[k])
3573
+ submodel.set_soilwatersupply(k, 0.0)
3574
+ submodel.set_soilwaterdemand(k, 0.0)
3575
+ submodel.execute_infiltration(k)
3576
+ infiltration = submodel.get_infiltration(k)
3577
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.qdb[k] + ((self.sequences.fluxes.wada[k] - self.sequences.fluxes.qdb[k]) - infiltration)
3578
+ qbb_soilmodel = submodel.get_percolation(k)
3579
+ supply = self.sequences.fluxes.qkap[k]
3580
+ if self.sequences.fluxes.evb[k] < 0.0:
3581
+ supply = supply - (self.sequences.fluxes.evb[k])
3582
+ submodel.set_soilwatersupply(k, supply)
3583
+ submodel.add_soilwater(k)
3584
+ addition = submodel.get_soilwateraddition(k)
3585
+ if addition < supply:
3586
+ factor = addition / supply
3587
+ self.sequences.fluxes.qkap[k] = self.sequences.fluxes.qkap[k] * (factor)
3588
+ if self.sequences.fluxes.evb[k] < 0.0:
3589
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (factor)
3590
+ demand = self.sequences.fluxes.qbb[k] + self.sequences.fluxes.qib1[k] + self.sequences.fluxes.qib2[k]
3591
+ if self.sequences.fluxes.evb[k] > 0.0:
3592
+ demand = demand + (self.sequences.fluxes.evb[k])
3593
+ submodel.set_soilwaterdemand(k, demand)
3594
+ submodel.remove_soilwater(k)
3595
+ removal = submodel.get_soilwaterremoval(k)
3596
+ if removal < demand:
3597
+ factor = removal / demand
3598
+ self.sequences.fluxes.qbb[k] = self.sequences.fluxes.qbb[k] * (factor)
3599
+ self.sequences.fluxes.qib1[k] = self.sequences.fluxes.qib1[k] * (factor)
3600
+ self.sequences.fluxes.qib2[k] = self.sequences.fluxes.qib2[k] * (factor)
3601
+ if self.sequences.fluxes.evb[k] > 0.0:
3602
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (factor)
3603
+ self.sequences.states.bowa[k] = submodel.get_soilwatercontent(k)
3604
+ self.sequences.fluxes.qbb[k] = self.sequences.fluxes.qbb[k] + (qbb_soilmodel)
3605
+ cpdef inline void calc_evi_inzp_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
3606
+ cdef numpy.int64_t k
3607
+ submodel.determine_interceptionevaporation()
3608
+ submodel.determine_waterevaporation()
3609
+ for k in range(self.parameters.control.nhru):
3610
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
3611
+ self.sequences.fluxes.evi[k] = submodel.get_waterevaporation(k)
3612
+ self.sequences.states.inzp[k] = 0.0
3613
+ else:
3614
+ self.sequences.fluxes.evi[k] = min(submodel.get_interceptionevaporation(k), self.sequences.states.inzp[k])
3615
+ self.sequences.states.inzp[k] = self.sequences.states.inzp[k] - (self.sequences.fluxes.evi[k])
3616
+ cpdef inline void calc_evb_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
3617
+ cdef numpy.int64_t k
3618
+ submodel.determine_soilevapotranspiration()
3619
+ for k in range(self.parameters.control.nhru):
3620
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
3621
+ self.sequences.fluxes.evb[k] = 0.0
3622
+ else:
3623
+ self.sequences.fluxes.evb[k] = submodel.get_soilevapotranspiration(k)
3624
+ cpdef inline void pass_qa(self) noexcept nogil:
3625
+ self.sequences.outlets.q[0] = self.sequences.outlets.q[0] + (self.sequences.fluxes.qa)