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