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,2784 @@
1
+ #!python
2
+ # distutils: define_macros=NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION
3
+ # cython: language_level=3
4
+ # cython: cpow=True
5
+ # cython: boundscheck=False
6
+ # cython: wraparound=False
7
+ # cython: initializedcheck=False
8
+ # cython: cdivision=True
9
+ from typing import Optional
10
+ import numpy
11
+ cimport numpy
12
+ from libc.math cimport exp, fabs, log, sin, cos, tan, tanh, asin, acos, atan, isnan, isinf
13
+ from libc.math cimport NAN as nan
14
+ from libc.math cimport INFINITY as inf
15
+ import cython
16
+ from cpython.mem cimport PyMem_Malloc
17
+ from cpython.mem cimport PyMem_Realloc
18
+ from cpython.mem cimport PyMem_Free
19
+ from hydpy.cythons.autogen cimport configutils
20
+ from hydpy.cythons.autogen cimport interfaceutils
21
+ from hydpy.cythons.autogen cimport interputils
22
+ from hydpy.cythons.autogen import pointerutils
23
+ from hydpy.cythons.autogen cimport pointerutils
24
+ from hydpy.cythons.autogen cimport quadutils
25
+ from hydpy.cythons.autogen cimport rootutils
26
+ from hydpy.cythons.autogen cimport smoothutils
27
+ from hydpy.cythons.autogen cimport masterinterface
28
+
29
+
30
+ cdef void do_nothing(Model model) noexcept nogil:
31
+ pass
32
+
33
+ cpdef get_wrapper():
34
+ cdef CallbackWrapper wrapper = CallbackWrapper()
35
+ wrapper.callback = do_nothing
36
+ return wrapper
37
+
38
+ cdef public numpy.npy_bool TYPE_CHECKING = False
39
+ cdef public numpy.int64_t SIED_D = 1
40
+ cdef public numpy.int64_t SIED_L = 2
41
+ cdef public numpy.int64_t VERS = 3
42
+ cdef public numpy.int64_t ACKER = 4
43
+ cdef public numpy.int64_t WEINB = 5
44
+ cdef public numpy.int64_t OBSTB = 6
45
+ cdef public numpy.int64_t BODEN = 7
46
+ cdef public numpy.int64_t GLETS = 8
47
+ cdef public numpy.int64_t GRUE_I = 9
48
+ cdef public numpy.int64_t FEUCHT = 10
49
+ cdef public numpy.int64_t GRUE_E = 11
50
+ cdef public numpy.int64_t BAUMB = 12
51
+ cdef public numpy.int64_t NADELW = 13
52
+ cdef public numpy.int64_t LAUBW = 14
53
+ cdef public numpy.int64_t MISCHW = 15
54
+ cdef public numpy.int64_t WASSER = 16
55
+ cdef public numpy.int64_t FLUSS = 17
56
+ cdef public numpy.int64_t SEE = 18
57
+ @cython.final
58
+ cdef class Parameters:
59
+ pass
60
+ @cython.final
61
+ cdef class ControlParameters:
62
+ pass
63
+ @cython.final
64
+ cdef class DerivedParameters:
65
+ pass
66
+ @cython.final
67
+ cdef class FixedParameters:
68
+ pass
69
+ @cython.final
70
+ cdef class Sequences:
71
+ pass
72
+ @cython.final
73
+ cdef class InletSequences:
74
+ cpdef inline alloc(self, name, numpy.int64_t length):
75
+ if name == "q":
76
+ self._q_length_0 = length
77
+ self._q_ready = numpy.full(length, 0, dtype=numpy.int64)
78
+ self.q = <double**> PyMem_Malloc(length * sizeof(double*))
79
+ cpdef inline dealloc(self, name):
80
+ if name == "q":
81
+ PyMem_Free(self.q)
82
+ cpdef inline set_pointer1d(self, str name, pointerutils.Double value, numpy.int64_t idx):
83
+ cdef pointerutils.PDouble pointer = pointerutils.PDouble(value)
84
+ if name == "q":
85
+ self.q[idx] = pointer.p_value
86
+ self._q_ready[idx] = 1
87
+ cpdef get_value(self, str name):
88
+ cdef numpy.int64_t idx
89
+ if name == "q":
90
+ values = numpy.empty(self.len_q)
91
+ for idx in range(self.len_q):
92
+ pointerutils.check0(self._q_length_0)
93
+ if self._q_ready[idx] == 0:
94
+ pointerutils.check1(self._q_length_0, idx)
95
+ pointerutils.check2(self._q_ready, idx)
96
+ values[idx] = self.q[idx][0]
97
+ return values
98
+ cpdef set_value(self, str name, value):
99
+ if name == "q":
100
+ for idx in range(self.len_q):
101
+ pointerutils.check0(self._q_length_0)
102
+ if self._q_ready[idx] == 0:
103
+ pointerutils.check1(self._q_length_0, idx)
104
+ pointerutils.check2(self._q_ready, idx)
105
+ self.q[idx][0] = value[idx]
106
+ @cython.final
107
+ cdef class InputSequences:
108
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
109
+ cdef numpy.int64_t k
110
+ if self._nied_inputflag:
111
+ self.nied = self._nied_inputpointer[0]
112
+ elif self._nied_diskflag_reading:
113
+ self.nied = self._nied_ncarray[0]
114
+ elif self._nied_ramflag:
115
+ self.nied = self._nied_array[idx]
116
+ if self._teml_inputflag:
117
+ self.teml = self._teml_inputpointer[0]
118
+ elif self._teml_diskflag_reading:
119
+ self.teml = self._teml_ncarray[0]
120
+ elif self._teml_ramflag:
121
+ self.teml = self._teml_array[idx]
122
+ if self._relativehumidity_inputflag:
123
+ self.relativehumidity = self._relativehumidity_inputpointer[0]
124
+ elif self._relativehumidity_diskflag_reading:
125
+ self.relativehumidity = self._relativehumidity_ncarray[0]
126
+ elif self._relativehumidity_ramflag:
127
+ self.relativehumidity = self._relativehumidity_array[idx]
128
+ if self._windspeed_inputflag:
129
+ self.windspeed = self._windspeed_inputpointer[0]
130
+ elif self._windspeed_diskflag_reading:
131
+ self.windspeed = self._windspeed_ncarray[0]
132
+ elif self._windspeed_ramflag:
133
+ self.windspeed = self._windspeed_array[idx]
134
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
135
+ cdef numpy.int64_t k
136
+ if self._nied_diskflag_writing:
137
+ self._nied_ncarray[0] = self.nied
138
+ if self._nied_ramflag:
139
+ self._nied_array[idx] = self.nied
140
+ if self._teml_diskflag_writing:
141
+ self._teml_ncarray[0] = self.teml
142
+ if self._teml_ramflag:
143
+ self._teml_array[idx] = self.teml
144
+ if self._relativehumidity_diskflag_writing:
145
+ self._relativehumidity_ncarray[0] = self.relativehumidity
146
+ if self._relativehumidity_ramflag:
147
+ self._relativehumidity_array[idx] = self.relativehumidity
148
+ if self._windspeed_diskflag_writing:
149
+ self._windspeed_ncarray[0] = self.windspeed
150
+ if self._windspeed_ramflag:
151
+ self._windspeed_array[idx] = self.windspeed
152
+ cpdef inline set_pointerinput(self, str name, pointerutils.PDouble value):
153
+ if name == "nied":
154
+ self._nied_inputpointer = value.p_value
155
+ if name == "teml":
156
+ self._teml_inputpointer = value.p_value
157
+ if name == "relativehumidity":
158
+ self._relativehumidity_inputpointer = value.p_value
159
+ if name == "windspeed":
160
+ self._windspeed_inputpointer = value.p_value
161
+ @cython.final
162
+ cdef class FactorSequences:
163
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
164
+ cdef numpy.int64_t k
165
+ if self._possiblesunshineduration_diskflag_reading:
166
+ self.possiblesunshineduration = self._possiblesunshineduration_ncarray[0]
167
+ elif self._possiblesunshineduration_ramflag:
168
+ self.possiblesunshineduration = self._possiblesunshineduration_array[idx]
169
+ if self._sunshineduration_diskflag_reading:
170
+ self.sunshineduration = self._sunshineduration_ncarray[0]
171
+ elif self._sunshineduration_ramflag:
172
+ self.sunshineduration = self._sunshineduration_array[idx]
173
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
174
+ cdef numpy.int64_t k
175
+ if self._possiblesunshineduration_diskflag_writing:
176
+ self._possiblesunshineduration_ncarray[0] = self.possiblesunshineduration
177
+ if self._possiblesunshineduration_ramflag:
178
+ self._possiblesunshineduration_array[idx] = self.possiblesunshineduration
179
+ if self._sunshineduration_diskflag_writing:
180
+ self._sunshineduration_ncarray[0] = self.sunshineduration
181
+ if self._sunshineduration_ramflag:
182
+ self._sunshineduration_array[idx] = self.sunshineduration
183
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
184
+ if name == "possiblesunshineduration":
185
+ self._possiblesunshineduration_outputpointer = value.p_value
186
+ if name == "sunshineduration":
187
+ self._sunshineduration_outputpointer = value.p_value
188
+ cpdef inline void update_outputs(self) noexcept nogil:
189
+ if self._possiblesunshineduration_outputflag:
190
+ self._possiblesunshineduration_outputpointer[0] = self.possiblesunshineduration
191
+ if self._sunshineduration_outputflag:
192
+ self._sunshineduration_outputpointer[0] = self.sunshineduration
193
+ @cython.final
194
+ cdef class FluxSequences:
195
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
196
+ cdef numpy.int64_t jdx0
197
+ cdef numpy.int64_t k
198
+ if self._qz_diskflag_reading:
199
+ self.qz = self._qz_ncarray[0]
200
+ elif self._qz_ramflag:
201
+ self.qz = self._qz_array[idx]
202
+ if self._qzh_diskflag_reading:
203
+ self.qzh = self._qzh_ncarray[0]
204
+ elif self._qzh_ramflag:
205
+ self.qzh = self._qzh_array[idx]
206
+ if self._dailysunshineduration_diskflag_reading:
207
+ self.dailysunshineduration = self._dailysunshineduration_ncarray[0]
208
+ elif self._dailysunshineduration_ramflag:
209
+ self.dailysunshineduration = self._dailysunshineduration_array[idx]
210
+ if self._dailypossiblesunshineduration_diskflag_reading:
211
+ self.dailypossiblesunshineduration = self._dailypossiblesunshineduration_ncarray[0]
212
+ elif self._dailypossiblesunshineduration_ramflag:
213
+ self.dailypossiblesunshineduration = self._dailypossiblesunshineduration_array[idx]
214
+ if self._globalradiation_diskflag_reading:
215
+ self.globalradiation = self._globalradiation_ncarray[0]
216
+ elif self._globalradiation_ramflag:
217
+ self.globalradiation = self._globalradiation_array[idx]
218
+ if self._nkor_diskflag_reading:
219
+ k = 0
220
+ for jdx0 in range(self._nkor_length_0):
221
+ self.nkor[jdx0] = self._nkor_ncarray[k]
222
+ k += 1
223
+ elif self._nkor_ramflag:
224
+ for jdx0 in range(self._nkor_length_0):
225
+ self.nkor[jdx0] = self._nkor_array[idx, jdx0]
226
+ if self._tkor_diskflag_reading:
227
+ k = 0
228
+ for jdx0 in range(self._tkor_length_0):
229
+ self.tkor[jdx0] = self._tkor_ncarray[k]
230
+ k += 1
231
+ elif self._tkor_ramflag:
232
+ for jdx0 in range(self._tkor_length_0):
233
+ self.tkor[jdx0] = self._tkor_array[idx, jdx0]
234
+ if self._windspeed2m_diskflag_reading:
235
+ self.windspeed2m = self._windspeed2m_ncarray[0]
236
+ elif self._windspeed2m_ramflag:
237
+ self.windspeed2m = self._windspeed2m_array[idx]
238
+ if self._reducedwindspeed2m_diskflag_reading:
239
+ k = 0
240
+ for jdx0 in range(self._reducedwindspeed2m_length_0):
241
+ self.reducedwindspeed2m[jdx0] = self._reducedwindspeed2m_ncarray[k]
242
+ k += 1
243
+ elif self._reducedwindspeed2m_ramflag:
244
+ for jdx0 in range(self._reducedwindspeed2m_length_0):
245
+ self.reducedwindspeed2m[jdx0] = self._reducedwindspeed2m_array[idx, jdx0]
246
+ if self._saturationvapourpressure_diskflag_reading:
247
+ k = 0
248
+ for jdx0 in range(self._saturationvapourpressure_length_0):
249
+ self.saturationvapourpressure[jdx0] = self._saturationvapourpressure_ncarray[k]
250
+ k += 1
251
+ elif self._saturationvapourpressure_ramflag:
252
+ for jdx0 in range(self._saturationvapourpressure_length_0):
253
+ self.saturationvapourpressure[jdx0] = self._saturationvapourpressure_array[idx, jdx0]
254
+ if self._saturationvapourpressuresnow_diskflag_reading:
255
+ k = 0
256
+ for jdx0 in range(self._saturationvapourpressuresnow_length_0):
257
+ self.saturationvapourpressuresnow[jdx0] = self._saturationvapourpressuresnow_ncarray[k]
258
+ k += 1
259
+ elif self._saturationvapourpressuresnow_ramflag:
260
+ for jdx0 in range(self._saturationvapourpressuresnow_length_0):
261
+ self.saturationvapourpressuresnow[jdx0] = self._saturationvapourpressuresnow_array[idx, jdx0]
262
+ if self._actualvapourpressure_diskflag_reading:
263
+ k = 0
264
+ for jdx0 in range(self._actualvapourpressure_length_0):
265
+ self.actualvapourpressure[jdx0] = self._actualvapourpressure_ncarray[k]
266
+ k += 1
267
+ elif self._actualvapourpressure_ramflag:
268
+ for jdx0 in range(self._actualvapourpressure_length_0):
269
+ self.actualvapourpressure[jdx0] = self._actualvapourpressure_array[idx, jdx0]
270
+ if self._tz_diskflag_reading:
271
+ k = 0
272
+ for jdx0 in range(self._tz_length_0):
273
+ self.tz[jdx0] = self._tz_ncarray[k]
274
+ k += 1
275
+ elif self._tz_ramflag:
276
+ for jdx0 in range(self._tz_length_0):
277
+ self.tz[jdx0] = self._tz_array[idx, jdx0]
278
+ if self._wg_diskflag_reading:
279
+ k = 0
280
+ for jdx0 in range(self._wg_length_0):
281
+ self.wg[jdx0] = self._wg_ncarray[k]
282
+ k += 1
283
+ elif self._wg_ramflag:
284
+ for jdx0 in range(self._wg_length_0):
285
+ self.wg[jdx0] = self._wg_array[idx, jdx0]
286
+ if self._netshortwaveradiationsnow_diskflag_reading:
287
+ k = 0
288
+ for jdx0 in range(self._netshortwaveradiationsnow_length_0):
289
+ self.netshortwaveradiationsnow[jdx0] = self._netshortwaveradiationsnow_ncarray[k]
290
+ k += 1
291
+ elif self._netshortwaveradiationsnow_ramflag:
292
+ for jdx0 in range(self._netshortwaveradiationsnow_length_0):
293
+ self.netshortwaveradiationsnow[jdx0] = self._netshortwaveradiationsnow_array[idx, jdx0]
294
+ if self._netlongwaveradiationsnow_diskflag_reading:
295
+ k = 0
296
+ for jdx0 in range(self._netlongwaveradiationsnow_length_0):
297
+ self.netlongwaveradiationsnow[jdx0] = self._netlongwaveradiationsnow_ncarray[k]
298
+ k += 1
299
+ elif self._netlongwaveradiationsnow_ramflag:
300
+ for jdx0 in range(self._netlongwaveradiationsnow_length_0):
301
+ self.netlongwaveradiationsnow[jdx0] = self._netlongwaveradiationsnow_array[idx, jdx0]
302
+ if self._netradiationsnow_diskflag_reading:
303
+ k = 0
304
+ for jdx0 in range(self._netradiationsnow_length_0):
305
+ self.netradiationsnow[jdx0] = self._netradiationsnow_ncarray[k]
306
+ k += 1
307
+ elif self._netradiationsnow_ramflag:
308
+ for jdx0 in range(self._netradiationsnow_length_0):
309
+ self.netradiationsnow[jdx0] = self._netradiationsnow_array[idx, jdx0]
310
+ if self._nbes_diskflag_reading:
311
+ k = 0
312
+ for jdx0 in range(self._nbes_length_0):
313
+ self.nbes[jdx0] = self._nbes_ncarray[k]
314
+ k += 1
315
+ elif self._nbes_ramflag:
316
+ for jdx0 in range(self._nbes_length_0):
317
+ self.nbes[jdx0] = self._nbes_array[idx, jdx0]
318
+ if self._sbes_diskflag_reading:
319
+ k = 0
320
+ for jdx0 in range(self._sbes_length_0):
321
+ self.sbes[jdx0] = self._sbes_ncarray[k]
322
+ k += 1
323
+ elif self._sbes_ramflag:
324
+ for jdx0 in range(self._sbes_length_0):
325
+ self.sbes[jdx0] = self._sbes_array[idx, jdx0]
326
+ if self._evi_diskflag_reading:
327
+ k = 0
328
+ for jdx0 in range(self._evi_length_0):
329
+ self.evi[jdx0] = self._evi_ncarray[k]
330
+ k += 1
331
+ elif self._evi_ramflag:
332
+ for jdx0 in range(self._evi_length_0):
333
+ self.evi[jdx0] = self._evi_array[idx, jdx0]
334
+ if self._evb_diskflag_reading:
335
+ k = 0
336
+ for jdx0 in range(self._evb_length_0):
337
+ self.evb[jdx0] = self._evb_ncarray[k]
338
+ k += 1
339
+ elif self._evb_ramflag:
340
+ for jdx0 in range(self._evb_length_0):
341
+ self.evb[jdx0] = self._evb_array[idx, jdx0]
342
+ if self._evs_diskflag_reading:
343
+ k = 0
344
+ for jdx0 in range(self._evs_length_0):
345
+ self.evs[jdx0] = self._evs_ncarray[k]
346
+ k += 1
347
+ elif self._evs_ramflag:
348
+ for jdx0 in range(self._evs_length_0):
349
+ self.evs[jdx0] = self._evs_array[idx, jdx0]
350
+ if self._wnied_diskflag_reading:
351
+ k = 0
352
+ for jdx0 in range(self._wnied_length_0):
353
+ self.wnied[jdx0] = self._wnied_ncarray[k]
354
+ k += 1
355
+ elif self._wnied_ramflag:
356
+ for jdx0 in range(self._wnied_length_0):
357
+ self.wnied[jdx0] = self._wnied_array[idx, jdx0]
358
+ if self._tempssurface_diskflag_reading:
359
+ k = 0
360
+ for jdx0 in range(self._tempssurface_length_0):
361
+ self.tempssurface[jdx0] = self._tempssurface_ncarray[k]
362
+ k += 1
363
+ elif self._tempssurface_ramflag:
364
+ for jdx0 in range(self._tempssurface_length_0):
365
+ self.tempssurface[jdx0] = self._tempssurface_array[idx, jdx0]
366
+ if self._actualalbedo_diskflag_reading:
367
+ k = 0
368
+ for jdx0 in range(self._actualalbedo_length_0):
369
+ self.actualalbedo[jdx0] = self._actualalbedo_ncarray[k]
370
+ k += 1
371
+ elif self._actualalbedo_ramflag:
372
+ for jdx0 in range(self._actualalbedo_length_0):
373
+ self.actualalbedo[jdx0] = self._actualalbedo_array[idx, jdx0]
374
+ if self._schmpot_diskflag_reading:
375
+ k = 0
376
+ for jdx0 in range(self._schmpot_length_0):
377
+ self.schmpot[jdx0] = self._schmpot_ncarray[k]
378
+ k += 1
379
+ elif self._schmpot_ramflag:
380
+ for jdx0 in range(self._schmpot_length_0):
381
+ self.schmpot[jdx0] = self._schmpot_array[idx, jdx0]
382
+ if self._schm_diskflag_reading:
383
+ k = 0
384
+ for jdx0 in range(self._schm_length_0):
385
+ self.schm[jdx0] = self._schm_ncarray[k]
386
+ k += 1
387
+ elif self._schm_ramflag:
388
+ for jdx0 in range(self._schm_length_0):
389
+ self.schm[jdx0] = self._schm_array[idx, jdx0]
390
+ if self._gefrpot_diskflag_reading:
391
+ k = 0
392
+ for jdx0 in range(self._gefrpot_length_0):
393
+ self.gefrpot[jdx0] = self._gefrpot_ncarray[k]
394
+ k += 1
395
+ elif self._gefrpot_ramflag:
396
+ for jdx0 in range(self._gefrpot_length_0):
397
+ self.gefrpot[jdx0] = self._gefrpot_array[idx, jdx0]
398
+ if self._gefr_diskflag_reading:
399
+ k = 0
400
+ for jdx0 in range(self._gefr_length_0):
401
+ self.gefr[jdx0] = self._gefr_ncarray[k]
402
+ k += 1
403
+ elif self._gefr_ramflag:
404
+ for jdx0 in range(self._gefr_length_0):
405
+ self.gefr[jdx0] = self._gefr_array[idx, jdx0]
406
+ if self._wlatsnow_diskflag_reading:
407
+ k = 0
408
+ for jdx0 in range(self._wlatsnow_length_0):
409
+ self.wlatsnow[jdx0] = self._wlatsnow_ncarray[k]
410
+ k += 1
411
+ elif self._wlatsnow_ramflag:
412
+ for jdx0 in range(self._wlatsnow_length_0):
413
+ self.wlatsnow[jdx0] = self._wlatsnow_array[idx, jdx0]
414
+ if self._wsenssnow_diskflag_reading:
415
+ k = 0
416
+ for jdx0 in range(self._wsenssnow_length_0):
417
+ self.wsenssnow[jdx0] = self._wsenssnow_ncarray[k]
418
+ k += 1
419
+ elif self._wsenssnow_ramflag:
420
+ for jdx0 in range(self._wsenssnow_length_0):
421
+ self.wsenssnow[jdx0] = self._wsenssnow_array[idx, jdx0]
422
+ if self._wsurf_diskflag_reading:
423
+ k = 0
424
+ for jdx0 in range(self._wsurf_length_0):
425
+ self.wsurf[jdx0] = self._wsurf_ncarray[k]
426
+ k += 1
427
+ elif self._wsurf_ramflag:
428
+ for jdx0 in range(self._wsurf_length_0):
429
+ self.wsurf[jdx0] = self._wsurf_array[idx, jdx0]
430
+ if self._sff_diskflag_reading:
431
+ k = 0
432
+ for jdx0 in range(self._sff_length_0):
433
+ self.sff[jdx0] = self._sff_ncarray[k]
434
+ k += 1
435
+ elif self._sff_ramflag:
436
+ for jdx0 in range(self._sff_length_0):
437
+ self.sff[jdx0] = self._sff_array[idx, jdx0]
438
+ if self._fvg_diskflag_reading:
439
+ k = 0
440
+ for jdx0 in range(self._fvg_length_0):
441
+ self.fvg[jdx0] = self._fvg_ncarray[k]
442
+ k += 1
443
+ elif self._fvg_ramflag:
444
+ for jdx0 in range(self._fvg_length_0):
445
+ self.fvg[jdx0] = self._fvg_array[idx, jdx0]
446
+ if self._wada_diskflag_reading:
447
+ k = 0
448
+ for jdx0 in range(self._wada_length_0):
449
+ self.wada[jdx0] = self._wada_ncarray[k]
450
+ k += 1
451
+ elif self._wada_ramflag:
452
+ for jdx0 in range(self._wada_length_0):
453
+ self.wada[jdx0] = self._wada_array[idx, jdx0]
454
+ if self._qdb_diskflag_reading:
455
+ k = 0
456
+ for jdx0 in range(self._qdb_length_0):
457
+ self.qdb[jdx0] = self._qdb_ncarray[k]
458
+ k += 1
459
+ elif self._qdb_ramflag:
460
+ for jdx0 in range(self._qdb_length_0):
461
+ self.qdb[jdx0] = self._qdb_array[idx, jdx0]
462
+ if self._qib1_diskflag_reading:
463
+ k = 0
464
+ for jdx0 in range(self._qib1_length_0):
465
+ self.qib1[jdx0] = self._qib1_ncarray[k]
466
+ k += 1
467
+ elif self._qib1_ramflag:
468
+ for jdx0 in range(self._qib1_length_0):
469
+ self.qib1[jdx0] = self._qib1_array[idx, jdx0]
470
+ if self._qib2_diskflag_reading:
471
+ k = 0
472
+ for jdx0 in range(self._qib2_length_0):
473
+ self.qib2[jdx0] = self._qib2_ncarray[k]
474
+ k += 1
475
+ elif self._qib2_ramflag:
476
+ for jdx0 in range(self._qib2_length_0):
477
+ self.qib2[jdx0] = self._qib2_array[idx, jdx0]
478
+ if self._qbb_diskflag_reading:
479
+ k = 0
480
+ for jdx0 in range(self._qbb_length_0):
481
+ self.qbb[jdx0] = self._qbb_ncarray[k]
482
+ k += 1
483
+ elif self._qbb_ramflag:
484
+ for jdx0 in range(self._qbb_length_0):
485
+ self.qbb[jdx0] = self._qbb_array[idx, jdx0]
486
+ if self._qkap_diskflag_reading:
487
+ k = 0
488
+ for jdx0 in range(self._qkap_length_0):
489
+ self.qkap[jdx0] = self._qkap_ncarray[k]
490
+ k += 1
491
+ elif self._qkap_ramflag:
492
+ for jdx0 in range(self._qkap_length_0):
493
+ self.qkap[jdx0] = self._qkap_array[idx, jdx0]
494
+ if self._qdgz_diskflag_reading:
495
+ self.qdgz = self._qdgz_ncarray[0]
496
+ elif self._qdgz_ramflag:
497
+ self.qdgz = self._qdgz_array[idx]
498
+ if self._qdgz1_diskflag_reading:
499
+ self.qdgz1 = self._qdgz1_ncarray[0]
500
+ elif self._qdgz1_ramflag:
501
+ self.qdgz1 = self._qdgz1_array[idx]
502
+ if self._qdgz2_diskflag_reading:
503
+ self.qdgz2 = self._qdgz2_ncarray[0]
504
+ elif self._qdgz2_ramflag:
505
+ self.qdgz2 = self._qdgz2_array[idx]
506
+ if self._qigz1_diskflag_reading:
507
+ self.qigz1 = self._qigz1_ncarray[0]
508
+ elif self._qigz1_ramflag:
509
+ self.qigz1 = self._qigz1_array[idx]
510
+ if self._qigz2_diskflag_reading:
511
+ self.qigz2 = self._qigz2_ncarray[0]
512
+ elif self._qigz2_ramflag:
513
+ self.qigz2 = self._qigz2_array[idx]
514
+ if self._qbgz_diskflag_reading:
515
+ self.qbgz = self._qbgz_ncarray[0]
516
+ elif self._qbgz_ramflag:
517
+ self.qbgz = self._qbgz_array[idx]
518
+ if self._qdga1_diskflag_reading:
519
+ self.qdga1 = self._qdga1_ncarray[0]
520
+ elif self._qdga1_ramflag:
521
+ self.qdga1 = self._qdga1_array[idx]
522
+ if self._qdga2_diskflag_reading:
523
+ self.qdga2 = self._qdga2_ncarray[0]
524
+ elif self._qdga2_ramflag:
525
+ self.qdga2 = self._qdga2_array[idx]
526
+ if self._qiga1_diskflag_reading:
527
+ self.qiga1 = self._qiga1_ncarray[0]
528
+ elif self._qiga1_ramflag:
529
+ self.qiga1 = self._qiga1_array[idx]
530
+ if self._qiga2_diskflag_reading:
531
+ self.qiga2 = self._qiga2_ncarray[0]
532
+ elif self._qiga2_ramflag:
533
+ self.qiga2 = self._qiga2_array[idx]
534
+ if self._qbga_diskflag_reading:
535
+ self.qbga = self._qbga_ncarray[0]
536
+ elif self._qbga_ramflag:
537
+ self.qbga = self._qbga_array[idx]
538
+ if self._qah_diskflag_reading:
539
+ self.qah = self._qah_ncarray[0]
540
+ elif self._qah_ramflag:
541
+ self.qah = self._qah_array[idx]
542
+ if self._qa_diskflag_reading:
543
+ self.qa = self._qa_ncarray[0]
544
+ elif self._qa_ramflag:
545
+ self.qa = self._qa_array[idx]
546
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
547
+ cdef numpy.int64_t jdx0
548
+ cdef numpy.int64_t k
549
+ if self._qz_diskflag_writing:
550
+ self._qz_ncarray[0] = self.qz
551
+ if self._qz_ramflag:
552
+ self._qz_array[idx] = self.qz
553
+ if self._qzh_diskflag_writing:
554
+ self._qzh_ncarray[0] = self.qzh
555
+ if self._qzh_ramflag:
556
+ self._qzh_array[idx] = self.qzh
557
+ if self._dailysunshineduration_diskflag_writing:
558
+ self._dailysunshineduration_ncarray[0] = self.dailysunshineduration
559
+ if self._dailysunshineduration_ramflag:
560
+ self._dailysunshineduration_array[idx] = self.dailysunshineduration
561
+ if self._dailypossiblesunshineduration_diskflag_writing:
562
+ self._dailypossiblesunshineduration_ncarray[0] = self.dailypossiblesunshineduration
563
+ if self._dailypossiblesunshineduration_ramflag:
564
+ self._dailypossiblesunshineduration_array[idx] = self.dailypossiblesunshineduration
565
+ if self._globalradiation_diskflag_writing:
566
+ self._globalradiation_ncarray[0] = self.globalradiation
567
+ if self._globalradiation_ramflag:
568
+ self._globalradiation_array[idx] = self.globalradiation
569
+ if self._nkor_diskflag_writing:
570
+ k = 0
571
+ for jdx0 in range(self._nkor_length_0):
572
+ self._nkor_ncarray[k] = self.nkor[jdx0]
573
+ k += 1
574
+ if self._nkor_ramflag:
575
+ for jdx0 in range(self._nkor_length_0):
576
+ self._nkor_array[idx, jdx0] = self.nkor[jdx0]
577
+ if self._tkor_diskflag_writing:
578
+ k = 0
579
+ for jdx0 in range(self._tkor_length_0):
580
+ self._tkor_ncarray[k] = self.tkor[jdx0]
581
+ k += 1
582
+ if self._tkor_ramflag:
583
+ for jdx0 in range(self._tkor_length_0):
584
+ self._tkor_array[idx, jdx0] = self.tkor[jdx0]
585
+ if self._windspeed2m_diskflag_writing:
586
+ self._windspeed2m_ncarray[0] = self.windspeed2m
587
+ if self._windspeed2m_ramflag:
588
+ self._windspeed2m_array[idx] = self.windspeed2m
589
+ if self._reducedwindspeed2m_diskflag_writing:
590
+ k = 0
591
+ for jdx0 in range(self._reducedwindspeed2m_length_0):
592
+ self._reducedwindspeed2m_ncarray[k] = self.reducedwindspeed2m[jdx0]
593
+ k += 1
594
+ if self._reducedwindspeed2m_ramflag:
595
+ for jdx0 in range(self._reducedwindspeed2m_length_0):
596
+ self._reducedwindspeed2m_array[idx, jdx0] = self.reducedwindspeed2m[jdx0]
597
+ if self._saturationvapourpressure_diskflag_writing:
598
+ k = 0
599
+ for jdx0 in range(self._saturationvapourpressure_length_0):
600
+ self._saturationvapourpressure_ncarray[k] = self.saturationvapourpressure[jdx0]
601
+ k += 1
602
+ if self._saturationvapourpressure_ramflag:
603
+ for jdx0 in range(self._saturationvapourpressure_length_0):
604
+ self._saturationvapourpressure_array[idx, jdx0] = self.saturationvapourpressure[jdx0]
605
+ if self._saturationvapourpressuresnow_diskflag_writing:
606
+ k = 0
607
+ for jdx0 in range(self._saturationvapourpressuresnow_length_0):
608
+ self._saturationvapourpressuresnow_ncarray[k] = self.saturationvapourpressuresnow[jdx0]
609
+ k += 1
610
+ if self._saturationvapourpressuresnow_ramflag:
611
+ for jdx0 in range(self._saturationvapourpressuresnow_length_0):
612
+ self._saturationvapourpressuresnow_array[idx, jdx0] = self.saturationvapourpressuresnow[jdx0]
613
+ if self._actualvapourpressure_diskflag_writing:
614
+ k = 0
615
+ for jdx0 in range(self._actualvapourpressure_length_0):
616
+ self._actualvapourpressure_ncarray[k] = self.actualvapourpressure[jdx0]
617
+ k += 1
618
+ if self._actualvapourpressure_ramflag:
619
+ for jdx0 in range(self._actualvapourpressure_length_0):
620
+ self._actualvapourpressure_array[idx, jdx0] = self.actualvapourpressure[jdx0]
621
+ if self._tz_diskflag_writing:
622
+ k = 0
623
+ for jdx0 in range(self._tz_length_0):
624
+ self._tz_ncarray[k] = self.tz[jdx0]
625
+ k += 1
626
+ if self._tz_ramflag:
627
+ for jdx0 in range(self._tz_length_0):
628
+ self._tz_array[idx, jdx0] = self.tz[jdx0]
629
+ if self._wg_diskflag_writing:
630
+ k = 0
631
+ for jdx0 in range(self._wg_length_0):
632
+ self._wg_ncarray[k] = self.wg[jdx0]
633
+ k += 1
634
+ if self._wg_ramflag:
635
+ for jdx0 in range(self._wg_length_0):
636
+ self._wg_array[idx, jdx0] = self.wg[jdx0]
637
+ if self._netshortwaveradiationsnow_diskflag_writing:
638
+ k = 0
639
+ for jdx0 in range(self._netshortwaveradiationsnow_length_0):
640
+ self._netshortwaveradiationsnow_ncarray[k] = self.netshortwaveradiationsnow[jdx0]
641
+ k += 1
642
+ if self._netshortwaveradiationsnow_ramflag:
643
+ for jdx0 in range(self._netshortwaveradiationsnow_length_0):
644
+ self._netshortwaveradiationsnow_array[idx, jdx0] = self.netshortwaveradiationsnow[jdx0]
645
+ if self._netlongwaveradiationsnow_diskflag_writing:
646
+ k = 0
647
+ for jdx0 in range(self._netlongwaveradiationsnow_length_0):
648
+ self._netlongwaveradiationsnow_ncarray[k] = self.netlongwaveradiationsnow[jdx0]
649
+ k += 1
650
+ if self._netlongwaveradiationsnow_ramflag:
651
+ for jdx0 in range(self._netlongwaveradiationsnow_length_0):
652
+ self._netlongwaveradiationsnow_array[idx, jdx0] = self.netlongwaveradiationsnow[jdx0]
653
+ if self._netradiationsnow_diskflag_writing:
654
+ k = 0
655
+ for jdx0 in range(self._netradiationsnow_length_0):
656
+ self._netradiationsnow_ncarray[k] = self.netradiationsnow[jdx0]
657
+ k += 1
658
+ if self._netradiationsnow_ramflag:
659
+ for jdx0 in range(self._netradiationsnow_length_0):
660
+ self._netradiationsnow_array[idx, jdx0] = self.netradiationsnow[jdx0]
661
+ if self._nbes_diskflag_writing:
662
+ k = 0
663
+ for jdx0 in range(self._nbes_length_0):
664
+ self._nbes_ncarray[k] = self.nbes[jdx0]
665
+ k += 1
666
+ if self._nbes_ramflag:
667
+ for jdx0 in range(self._nbes_length_0):
668
+ self._nbes_array[idx, jdx0] = self.nbes[jdx0]
669
+ if self._sbes_diskflag_writing:
670
+ k = 0
671
+ for jdx0 in range(self._sbes_length_0):
672
+ self._sbes_ncarray[k] = self.sbes[jdx0]
673
+ k += 1
674
+ if self._sbes_ramflag:
675
+ for jdx0 in range(self._sbes_length_0):
676
+ self._sbes_array[idx, jdx0] = self.sbes[jdx0]
677
+ if self._evi_diskflag_writing:
678
+ k = 0
679
+ for jdx0 in range(self._evi_length_0):
680
+ self._evi_ncarray[k] = self.evi[jdx0]
681
+ k += 1
682
+ if self._evi_ramflag:
683
+ for jdx0 in range(self._evi_length_0):
684
+ self._evi_array[idx, jdx0] = self.evi[jdx0]
685
+ if self._evb_diskflag_writing:
686
+ k = 0
687
+ for jdx0 in range(self._evb_length_0):
688
+ self._evb_ncarray[k] = self.evb[jdx0]
689
+ k += 1
690
+ if self._evb_ramflag:
691
+ for jdx0 in range(self._evb_length_0):
692
+ self._evb_array[idx, jdx0] = self.evb[jdx0]
693
+ if self._evs_diskflag_writing:
694
+ k = 0
695
+ for jdx0 in range(self._evs_length_0):
696
+ self._evs_ncarray[k] = self.evs[jdx0]
697
+ k += 1
698
+ if self._evs_ramflag:
699
+ for jdx0 in range(self._evs_length_0):
700
+ self._evs_array[idx, jdx0] = self.evs[jdx0]
701
+ if self._wnied_diskflag_writing:
702
+ k = 0
703
+ for jdx0 in range(self._wnied_length_0):
704
+ self._wnied_ncarray[k] = self.wnied[jdx0]
705
+ k += 1
706
+ if self._wnied_ramflag:
707
+ for jdx0 in range(self._wnied_length_0):
708
+ self._wnied_array[idx, jdx0] = self.wnied[jdx0]
709
+ if self._tempssurface_diskflag_writing:
710
+ k = 0
711
+ for jdx0 in range(self._tempssurface_length_0):
712
+ self._tempssurface_ncarray[k] = self.tempssurface[jdx0]
713
+ k += 1
714
+ if self._tempssurface_ramflag:
715
+ for jdx0 in range(self._tempssurface_length_0):
716
+ self._tempssurface_array[idx, jdx0] = self.tempssurface[jdx0]
717
+ if self._actualalbedo_diskflag_writing:
718
+ k = 0
719
+ for jdx0 in range(self._actualalbedo_length_0):
720
+ self._actualalbedo_ncarray[k] = self.actualalbedo[jdx0]
721
+ k += 1
722
+ if self._actualalbedo_ramflag:
723
+ for jdx0 in range(self._actualalbedo_length_0):
724
+ self._actualalbedo_array[idx, jdx0] = self.actualalbedo[jdx0]
725
+ if self._schmpot_diskflag_writing:
726
+ k = 0
727
+ for jdx0 in range(self._schmpot_length_0):
728
+ self._schmpot_ncarray[k] = self.schmpot[jdx0]
729
+ k += 1
730
+ if self._schmpot_ramflag:
731
+ for jdx0 in range(self._schmpot_length_0):
732
+ self._schmpot_array[idx, jdx0] = self.schmpot[jdx0]
733
+ if self._schm_diskflag_writing:
734
+ k = 0
735
+ for jdx0 in range(self._schm_length_0):
736
+ self._schm_ncarray[k] = self.schm[jdx0]
737
+ k += 1
738
+ if self._schm_ramflag:
739
+ for jdx0 in range(self._schm_length_0):
740
+ self._schm_array[idx, jdx0] = self.schm[jdx0]
741
+ if self._gefrpot_diskflag_writing:
742
+ k = 0
743
+ for jdx0 in range(self._gefrpot_length_0):
744
+ self._gefrpot_ncarray[k] = self.gefrpot[jdx0]
745
+ k += 1
746
+ if self._gefrpot_ramflag:
747
+ for jdx0 in range(self._gefrpot_length_0):
748
+ self._gefrpot_array[idx, jdx0] = self.gefrpot[jdx0]
749
+ if self._gefr_diskflag_writing:
750
+ k = 0
751
+ for jdx0 in range(self._gefr_length_0):
752
+ self._gefr_ncarray[k] = self.gefr[jdx0]
753
+ k += 1
754
+ if self._gefr_ramflag:
755
+ for jdx0 in range(self._gefr_length_0):
756
+ self._gefr_array[idx, jdx0] = self.gefr[jdx0]
757
+ if self._wlatsnow_diskflag_writing:
758
+ k = 0
759
+ for jdx0 in range(self._wlatsnow_length_0):
760
+ self._wlatsnow_ncarray[k] = self.wlatsnow[jdx0]
761
+ k += 1
762
+ if self._wlatsnow_ramflag:
763
+ for jdx0 in range(self._wlatsnow_length_0):
764
+ self._wlatsnow_array[idx, jdx0] = self.wlatsnow[jdx0]
765
+ if self._wsenssnow_diskflag_writing:
766
+ k = 0
767
+ for jdx0 in range(self._wsenssnow_length_0):
768
+ self._wsenssnow_ncarray[k] = self.wsenssnow[jdx0]
769
+ k += 1
770
+ if self._wsenssnow_ramflag:
771
+ for jdx0 in range(self._wsenssnow_length_0):
772
+ self._wsenssnow_array[idx, jdx0] = self.wsenssnow[jdx0]
773
+ if self._wsurf_diskflag_writing:
774
+ k = 0
775
+ for jdx0 in range(self._wsurf_length_0):
776
+ self._wsurf_ncarray[k] = self.wsurf[jdx0]
777
+ k += 1
778
+ if self._wsurf_ramflag:
779
+ for jdx0 in range(self._wsurf_length_0):
780
+ self._wsurf_array[idx, jdx0] = self.wsurf[jdx0]
781
+ if self._sff_diskflag_writing:
782
+ k = 0
783
+ for jdx0 in range(self._sff_length_0):
784
+ self._sff_ncarray[k] = self.sff[jdx0]
785
+ k += 1
786
+ if self._sff_ramflag:
787
+ for jdx0 in range(self._sff_length_0):
788
+ self._sff_array[idx, jdx0] = self.sff[jdx0]
789
+ if self._fvg_diskflag_writing:
790
+ k = 0
791
+ for jdx0 in range(self._fvg_length_0):
792
+ self._fvg_ncarray[k] = self.fvg[jdx0]
793
+ k += 1
794
+ if self._fvg_ramflag:
795
+ for jdx0 in range(self._fvg_length_0):
796
+ self._fvg_array[idx, jdx0] = self.fvg[jdx0]
797
+ if self._wada_diskflag_writing:
798
+ k = 0
799
+ for jdx0 in range(self._wada_length_0):
800
+ self._wada_ncarray[k] = self.wada[jdx0]
801
+ k += 1
802
+ if self._wada_ramflag:
803
+ for jdx0 in range(self._wada_length_0):
804
+ self._wada_array[idx, jdx0] = self.wada[jdx0]
805
+ if self._qdb_diskflag_writing:
806
+ k = 0
807
+ for jdx0 in range(self._qdb_length_0):
808
+ self._qdb_ncarray[k] = self.qdb[jdx0]
809
+ k += 1
810
+ if self._qdb_ramflag:
811
+ for jdx0 in range(self._qdb_length_0):
812
+ self._qdb_array[idx, jdx0] = self.qdb[jdx0]
813
+ if self._qib1_diskflag_writing:
814
+ k = 0
815
+ for jdx0 in range(self._qib1_length_0):
816
+ self._qib1_ncarray[k] = self.qib1[jdx0]
817
+ k += 1
818
+ if self._qib1_ramflag:
819
+ for jdx0 in range(self._qib1_length_0):
820
+ self._qib1_array[idx, jdx0] = self.qib1[jdx0]
821
+ if self._qib2_diskflag_writing:
822
+ k = 0
823
+ for jdx0 in range(self._qib2_length_0):
824
+ self._qib2_ncarray[k] = self.qib2[jdx0]
825
+ k += 1
826
+ if self._qib2_ramflag:
827
+ for jdx0 in range(self._qib2_length_0):
828
+ self._qib2_array[idx, jdx0] = self.qib2[jdx0]
829
+ if self._qbb_diskflag_writing:
830
+ k = 0
831
+ for jdx0 in range(self._qbb_length_0):
832
+ self._qbb_ncarray[k] = self.qbb[jdx0]
833
+ k += 1
834
+ if self._qbb_ramflag:
835
+ for jdx0 in range(self._qbb_length_0):
836
+ self._qbb_array[idx, jdx0] = self.qbb[jdx0]
837
+ if self._qkap_diskflag_writing:
838
+ k = 0
839
+ for jdx0 in range(self._qkap_length_0):
840
+ self._qkap_ncarray[k] = self.qkap[jdx0]
841
+ k += 1
842
+ if self._qkap_ramflag:
843
+ for jdx0 in range(self._qkap_length_0):
844
+ self._qkap_array[idx, jdx0] = self.qkap[jdx0]
845
+ if self._qdgz_diskflag_writing:
846
+ self._qdgz_ncarray[0] = self.qdgz
847
+ if self._qdgz_ramflag:
848
+ self._qdgz_array[idx] = self.qdgz
849
+ if self._qdgz1_diskflag_writing:
850
+ self._qdgz1_ncarray[0] = self.qdgz1
851
+ if self._qdgz1_ramflag:
852
+ self._qdgz1_array[idx] = self.qdgz1
853
+ if self._qdgz2_diskflag_writing:
854
+ self._qdgz2_ncarray[0] = self.qdgz2
855
+ if self._qdgz2_ramflag:
856
+ self._qdgz2_array[idx] = self.qdgz2
857
+ if self._qigz1_diskflag_writing:
858
+ self._qigz1_ncarray[0] = self.qigz1
859
+ if self._qigz1_ramflag:
860
+ self._qigz1_array[idx] = self.qigz1
861
+ if self._qigz2_diskflag_writing:
862
+ self._qigz2_ncarray[0] = self.qigz2
863
+ if self._qigz2_ramflag:
864
+ self._qigz2_array[idx] = self.qigz2
865
+ if self._qbgz_diskflag_writing:
866
+ self._qbgz_ncarray[0] = self.qbgz
867
+ if self._qbgz_ramflag:
868
+ self._qbgz_array[idx] = self.qbgz
869
+ if self._qdga1_diskflag_writing:
870
+ self._qdga1_ncarray[0] = self.qdga1
871
+ if self._qdga1_ramflag:
872
+ self._qdga1_array[idx] = self.qdga1
873
+ if self._qdga2_diskflag_writing:
874
+ self._qdga2_ncarray[0] = self.qdga2
875
+ if self._qdga2_ramflag:
876
+ self._qdga2_array[idx] = self.qdga2
877
+ if self._qiga1_diskflag_writing:
878
+ self._qiga1_ncarray[0] = self.qiga1
879
+ if self._qiga1_ramflag:
880
+ self._qiga1_array[idx] = self.qiga1
881
+ if self._qiga2_diskflag_writing:
882
+ self._qiga2_ncarray[0] = self.qiga2
883
+ if self._qiga2_ramflag:
884
+ self._qiga2_array[idx] = self.qiga2
885
+ if self._qbga_diskflag_writing:
886
+ self._qbga_ncarray[0] = self.qbga
887
+ if self._qbga_ramflag:
888
+ self._qbga_array[idx] = self.qbga
889
+ if self._qah_diskflag_writing:
890
+ self._qah_ncarray[0] = self.qah
891
+ if self._qah_ramflag:
892
+ self._qah_array[idx] = self.qah
893
+ if self._qa_diskflag_writing:
894
+ self._qa_ncarray[0] = self.qa
895
+ if self._qa_ramflag:
896
+ self._qa_array[idx] = self.qa
897
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
898
+ if name == "qz":
899
+ self._qz_outputpointer = value.p_value
900
+ if name == "qzh":
901
+ self._qzh_outputpointer = value.p_value
902
+ if name == "dailysunshineduration":
903
+ self._dailysunshineduration_outputpointer = value.p_value
904
+ if name == "dailypossiblesunshineduration":
905
+ self._dailypossiblesunshineduration_outputpointer = value.p_value
906
+ if name == "globalradiation":
907
+ self._globalradiation_outputpointer = value.p_value
908
+ if name == "windspeed2m":
909
+ self._windspeed2m_outputpointer = value.p_value
910
+ if name == "qdgz":
911
+ self._qdgz_outputpointer = value.p_value
912
+ if name == "qdgz1":
913
+ self._qdgz1_outputpointer = value.p_value
914
+ if name == "qdgz2":
915
+ self._qdgz2_outputpointer = value.p_value
916
+ if name == "qigz1":
917
+ self._qigz1_outputpointer = value.p_value
918
+ if name == "qigz2":
919
+ self._qigz2_outputpointer = value.p_value
920
+ if name == "qbgz":
921
+ self._qbgz_outputpointer = value.p_value
922
+ if name == "qdga1":
923
+ self._qdga1_outputpointer = value.p_value
924
+ if name == "qdga2":
925
+ self._qdga2_outputpointer = value.p_value
926
+ if name == "qiga1":
927
+ self._qiga1_outputpointer = value.p_value
928
+ if name == "qiga2":
929
+ self._qiga2_outputpointer = value.p_value
930
+ if name == "qbga":
931
+ self._qbga_outputpointer = value.p_value
932
+ if name == "qah":
933
+ self._qah_outputpointer = value.p_value
934
+ if name == "qa":
935
+ self._qa_outputpointer = value.p_value
936
+ cpdef inline void update_outputs(self) noexcept nogil:
937
+ if self._qz_outputflag:
938
+ self._qz_outputpointer[0] = self.qz
939
+ if self._qzh_outputflag:
940
+ self._qzh_outputpointer[0] = self.qzh
941
+ if self._dailysunshineduration_outputflag:
942
+ self._dailysunshineduration_outputpointer[0] = self.dailysunshineduration
943
+ if self._dailypossiblesunshineduration_outputflag:
944
+ self._dailypossiblesunshineduration_outputpointer[0] = self.dailypossiblesunshineduration
945
+ if self._globalradiation_outputflag:
946
+ self._globalradiation_outputpointer[0] = self.globalradiation
947
+ if self._windspeed2m_outputflag:
948
+ self._windspeed2m_outputpointer[0] = self.windspeed2m
949
+ if self._qdgz_outputflag:
950
+ self._qdgz_outputpointer[0] = self.qdgz
951
+ if self._qdgz1_outputflag:
952
+ self._qdgz1_outputpointer[0] = self.qdgz1
953
+ if self._qdgz2_outputflag:
954
+ self._qdgz2_outputpointer[0] = self.qdgz2
955
+ if self._qigz1_outputflag:
956
+ self._qigz1_outputpointer[0] = self.qigz1
957
+ if self._qigz2_outputflag:
958
+ self._qigz2_outputpointer[0] = self.qigz2
959
+ if self._qbgz_outputflag:
960
+ self._qbgz_outputpointer[0] = self.qbgz
961
+ if self._qdga1_outputflag:
962
+ self._qdga1_outputpointer[0] = self.qdga1
963
+ if self._qdga2_outputflag:
964
+ self._qdga2_outputpointer[0] = self.qdga2
965
+ if self._qiga1_outputflag:
966
+ self._qiga1_outputpointer[0] = self.qiga1
967
+ if self._qiga2_outputflag:
968
+ self._qiga2_outputpointer[0] = self.qiga2
969
+ if self._qbga_outputflag:
970
+ self._qbga_outputpointer[0] = self.qbga
971
+ if self._qah_outputflag:
972
+ self._qah_outputpointer[0] = self.qah
973
+ if self._qa_outputflag:
974
+ self._qa_outputpointer[0] = self.qa
975
+ @cython.final
976
+ cdef class StateSequences:
977
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
978
+ cdef numpy.int64_t jdx0
979
+ cdef numpy.int64_t k
980
+ if self._inzp_diskflag_reading:
981
+ k = 0
982
+ for jdx0 in range(self._inzp_length_0):
983
+ self.inzp[jdx0] = self._inzp_ncarray[k]
984
+ k += 1
985
+ elif self._inzp_ramflag:
986
+ for jdx0 in range(self._inzp_length_0):
987
+ self.inzp[jdx0] = self._inzp_array[idx, jdx0]
988
+ if self._wats_diskflag_reading:
989
+ k = 0
990
+ for jdx0 in range(self._wats_length_0):
991
+ self.wats[jdx0] = self._wats_ncarray[k]
992
+ k += 1
993
+ elif self._wats_ramflag:
994
+ for jdx0 in range(self._wats_length_0):
995
+ self.wats[jdx0] = self._wats_array[idx, jdx0]
996
+ if self._waes_diskflag_reading:
997
+ k = 0
998
+ for jdx0 in range(self._waes_length_0):
999
+ self.waes[jdx0] = self._waes_ncarray[k]
1000
+ k += 1
1001
+ elif self._waes_ramflag:
1002
+ for jdx0 in range(self._waes_length_0):
1003
+ self.waes[jdx0] = self._waes_array[idx, jdx0]
1004
+ if self._esnow_diskflag_reading:
1005
+ k = 0
1006
+ for jdx0 in range(self._esnow_length_0):
1007
+ self.esnow[jdx0] = self._esnow_ncarray[k]
1008
+ k += 1
1009
+ elif self._esnow_ramflag:
1010
+ for jdx0 in range(self._esnow_length_0):
1011
+ self.esnow[jdx0] = self._esnow_array[idx, jdx0]
1012
+ if self._taus_diskflag_reading:
1013
+ k = 0
1014
+ for jdx0 in range(self._taus_length_0):
1015
+ self.taus[jdx0] = self._taus_ncarray[k]
1016
+ k += 1
1017
+ elif self._taus_ramflag:
1018
+ for jdx0 in range(self._taus_length_0):
1019
+ self.taus[jdx0] = self._taus_array[idx, jdx0]
1020
+ if self._ebdn_diskflag_reading:
1021
+ k = 0
1022
+ for jdx0 in range(self._ebdn_length_0):
1023
+ self.ebdn[jdx0] = self._ebdn_ncarray[k]
1024
+ k += 1
1025
+ elif self._ebdn_ramflag:
1026
+ for jdx0 in range(self._ebdn_length_0):
1027
+ self.ebdn[jdx0] = self._ebdn_array[idx, jdx0]
1028
+ if self._bowa_diskflag_reading:
1029
+ k = 0
1030
+ for jdx0 in range(self._bowa_length_0):
1031
+ self.bowa[jdx0] = self._bowa_ncarray[k]
1032
+ k += 1
1033
+ elif self._bowa_ramflag:
1034
+ for jdx0 in range(self._bowa_length_0):
1035
+ self.bowa[jdx0] = self._bowa_array[idx, jdx0]
1036
+ if self._sdg1_diskflag_reading:
1037
+ self.sdg1 = self._sdg1_ncarray[0]
1038
+ elif self._sdg1_ramflag:
1039
+ self.sdg1 = self._sdg1_array[idx]
1040
+ if self._sdg2_diskflag_reading:
1041
+ self.sdg2 = self._sdg2_ncarray[0]
1042
+ elif self._sdg2_ramflag:
1043
+ self.sdg2 = self._sdg2_array[idx]
1044
+ if self._sig1_diskflag_reading:
1045
+ self.sig1 = self._sig1_ncarray[0]
1046
+ elif self._sig1_ramflag:
1047
+ self.sig1 = self._sig1_array[idx]
1048
+ if self._sig2_diskflag_reading:
1049
+ self.sig2 = self._sig2_ncarray[0]
1050
+ elif self._sig2_ramflag:
1051
+ self.sig2 = self._sig2_array[idx]
1052
+ if self._sbg_diskflag_reading:
1053
+ self.sbg = self._sbg_ncarray[0]
1054
+ elif self._sbg_ramflag:
1055
+ self.sbg = self._sbg_array[idx]
1056
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
1057
+ cdef numpy.int64_t jdx0
1058
+ cdef numpy.int64_t k
1059
+ if self._inzp_diskflag_writing:
1060
+ k = 0
1061
+ for jdx0 in range(self._inzp_length_0):
1062
+ self._inzp_ncarray[k] = self.inzp[jdx0]
1063
+ k += 1
1064
+ if self._inzp_ramflag:
1065
+ for jdx0 in range(self._inzp_length_0):
1066
+ self._inzp_array[idx, jdx0] = self.inzp[jdx0]
1067
+ if self._wats_diskflag_writing:
1068
+ k = 0
1069
+ for jdx0 in range(self._wats_length_0):
1070
+ self._wats_ncarray[k] = self.wats[jdx0]
1071
+ k += 1
1072
+ if self._wats_ramflag:
1073
+ for jdx0 in range(self._wats_length_0):
1074
+ self._wats_array[idx, jdx0] = self.wats[jdx0]
1075
+ if self._waes_diskflag_writing:
1076
+ k = 0
1077
+ for jdx0 in range(self._waes_length_0):
1078
+ self._waes_ncarray[k] = self.waes[jdx0]
1079
+ k += 1
1080
+ if self._waes_ramflag:
1081
+ for jdx0 in range(self._waes_length_0):
1082
+ self._waes_array[idx, jdx0] = self.waes[jdx0]
1083
+ if self._esnow_diskflag_writing:
1084
+ k = 0
1085
+ for jdx0 in range(self._esnow_length_0):
1086
+ self._esnow_ncarray[k] = self.esnow[jdx0]
1087
+ k += 1
1088
+ if self._esnow_ramflag:
1089
+ for jdx0 in range(self._esnow_length_0):
1090
+ self._esnow_array[idx, jdx0] = self.esnow[jdx0]
1091
+ if self._taus_diskflag_writing:
1092
+ k = 0
1093
+ for jdx0 in range(self._taus_length_0):
1094
+ self._taus_ncarray[k] = self.taus[jdx0]
1095
+ k += 1
1096
+ if self._taus_ramflag:
1097
+ for jdx0 in range(self._taus_length_0):
1098
+ self._taus_array[idx, jdx0] = self.taus[jdx0]
1099
+ if self._ebdn_diskflag_writing:
1100
+ k = 0
1101
+ for jdx0 in range(self._ebdn_length_0):
1102
+ self._ebdn_ncarray[k] = self.ebdn[jdx0]
1103
+ k += 1
1104
+ if self._ebdn_ramflag:
1105
+ for jdx0 in range(self._ebdn_length_0):
1106
+ self._ebdn_array[idx, jdx0] = self.ebdn[jdx0]
1107
+ if self._bowa_diskflag_writing:
1108
+ k = 0
1109
+ for jdx0 in range(self._bowa_length_0):
1110
+ self._bowa_ncarray[k] = self.bowa[jdx0]
1111
+ k += 1
1112
+ if self._bowa_ramflag:
1113
+ for jdx0 in range(self._bowa_length_0):
1114
+ self._bowa_array[idx, jdx0] = self.bowa[jdx0]
1115
+ if self._sdg1_diskflag_writing:
1116
+ self._sdg1_ncarray[0] = self.sdg1
1117
+ if self._sdg1_ramflag:
1118
+ self._sdg1_array[idx] = self.sdg1
1119
+ if self._sdg2_diskflag_writing:
1120
+ self._sdg2_ncarray[0] = self.sdg2
1121
+ if self._sdg2_ramflag:
1122
+ self._sdg2_array[idx] = self.sdg2
1123
+ if self._sig1_diskflag_writing:
1124
+ self._sig1_ncarray[0] = self.sig1
1125
+ if self._sig1_ramflag:
1126
+ self._sig1_array[idx] = self.sig1
1127
+ if self._sig2_diskflag_writing:
1128
+ self._sig2_ncarray[0] = self.sig2
1129
+ if self._sig2_ramflag:
1130
+ self._sig2_array[idx] = self.sig2
1131
+ if self._sbg_diskflag_writing:
1132
+ self._sbg_ncarray[0] = self.sbg
1133
+ if self._sbg_ramflag:
1134
+ self._sbg_array[idx] = self.sbg
1135
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
1136
+ if name == "sdg1":
1137
+ self._sdg1_outputpointer = value.p_value
1138
+ if name == "sdg2":
1139
+ self._sdg2_outputpointer = value.p_value
1140
+ if name == "sig1":
1141
+ self._sig1_outputpointer = value.p_value
1142
+ if name == "sig2":
1143
+ self._sig2_outputpointer = value.p_value
1144
+ if name == "sbg":
1145
+ self._sbg_outputpointer = value.p_value
1146
+ cpdef inline void update_outputs(self) noexcept nogil:
1147
+ if self._sdg1_outputflag:
1148
+ self._sdg1_outputpointer[0] = self.sdg1
1149
+ if self._sdg2_outputflag:
1150
+ self._sdg2_outputpointer[0] = self.sdg2
1151
+ if self._sig1_outputflag:
1152
+ self._sig1_outputpointer[0] = self.sig1
1153
+ if self._sig2_outputflag:
1154
+ self._sig2_outputpointer[0] = self.sig2
1155
+ if self._sbg_outputflag:
1156
+ self._sbg_outputpointer[0] = self.sbg
1157
+ @cython.final
1158
+ cdef class LogSequences:
1159
+ pass
1160
+ @cython.final
1161
+ cdef class AideSequences:
1162
+ pass
1163
+ @cython.final
1164
+ cdef class OutletSequences:
1165
+ cpdef inline set_pointer0d(self, str name, pointerutils.Double value):
1166
+ cdef pointerutils.PDouble pointer = pointerutils.PDouble(value)
1167
+ if name == "q":
1168
+ self.q = pointer.p_value
1169
+ cpdef get_value(self, str name):
1170
+ cdef numpy.int64_t idx
1171
+ if name == "q":
1172
+ return self.q[0]
1173
+ cpdef set_value(self, str name, value):
1174
+ if name == "q":
1175
+ self.q[0] = value
1176
+ @cython.final
1177
+ cdef class PegasusESnow(rootutils.PegasusBase):
1178
+ def __init__(self, Model model):
1179
+ self.model = model
1180
+ cpdef double apply_method0(self, double x) noexcept nogil:
1181
+ return self.model.return_backwardeulererror_v1(x)
1182
+ @cython.final
1183
+ cdef class PegasusTempSSurface(rootutils.PegasusBase):
1184
+ def __init__(self, Model model):
1185
+ self.model = model
1186
+ cpdef double apply_method0(self, double x) noexcept nogil:
1187
+ return self.model.return_energygainsnowsurface_v1(x)
1188
+ @cython.final
1189
+ cdef class Model(masterinterface.MasterInterface):
1190
+ def __init__(self):
1191
+ super().__init__()
1192
+ self.aetmodel = None
1193
+ self.aetmodel_is_mainmodel = False
1194
+ self.radiationmodel = None
1195
+ self.radiationmodel_is_mainmodel = False
1196
+ self.soilmodel = None
1197
+ self.soilmodel_is_mainmodel = False
1198
+ self.pegasusesnow = PegasusESnow(self)
1199
+ self.pegasustempssurface = PegasusTempSSurface(self)
1200
+ def get_aetmodel(self) -> masterinterface.MasterInterface | None:
1201
+ return self.aetmodel
1202
+ def set_aetmodel(self, aetmodel: masterinterface.MasterInterface | None) -> None:
1203
+ self.aetmodel = aetmodel
1204
+ def get_radiationmodel(self) -> masterinterface.MasterInterface | None:
1205
+ return self.radiationmodel
1206
+ def set_radiationmodel(self, radiationmodel: masterinterface.MasterInterface | None) -> None:
1207
+ self.radiationmodel = radiationmodel
1208
+ def get_soilmodel(self) -> masterinterface.MasterInterface | None:
1209
+ return self.soilmodel
1210
+ def set_soilmodel(self, soilmodel: masterinterface.MasterInterface | None) -> None:
1211
+ self.soilmodel = soilmodel
1212
+ cpdef inline void simulate(self, numpy.int64_t idx) noexcept nogil:
1213
+ self.idx_sim = idx
1214
+ self.reset_reuseflags()
1215
+ self.load_data(idx)
1216
+ self.update_inlets()
1217
+ self.run()
1218
+ self.new2old()
1219
+ self.update_outlets()
1220
+ self.update_outputs()
1221
+ cpdef void reset_reuseflags(self) noexcept nogil:
1222
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
1223
+ self.aetmodel.reset_reuseflags()
1224
+ if (self.radiationmodel is not None) and not self.radiationmodel_is_mainmodel:
1225
+ self.radiationmodel.reset_reuseflags()
1226
+ if (self.soilmodel is not None) and not self.soilmodel_is_mainmodel:
1227
+ self.soilmodel.reset_reuseflags()
1228
+ cpdef void load_data(self, numpy.int64_t idx) noexcept nogil:
1229
+ self.idx_sim = idx
1230
+ self.sequences.inputs.load_data(idx)
1231
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
1232
+ self.aetmodel.load_data(idx)
1233
+ if (self.radiationmodel is not None) and not self.radiationmodel_is_mainmodel:
1234
+ self.radiationmodel.load_data(idx)
1235
+ if (self.soilmodel is not None) and not self.soilmodel_is_mainmodel:
1236
+ self.soilmodel.load_data(idx)
1237
+ cpdef void save_data(self, numpy.int64_t idx) noexcept nogil:
1238
+ self.idx_sim = idx
1239
+ self.sequences.inputs.save_data(idx)
1240
+ self.sequences.factors.save_data(idx)
1241
+ self.sequences.fluxes.save_data(idx)
1242
+ self.sequences.states.save_data(idx)
1243
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
1244
+ self.aetmodel.save_data(idx)
1245
+ if (self.radiationmodel is not None) and not self.radiationmodel_is_mainmodel:
1246
+ self.radiationmodel.save_data(idx)
1247
+ if (self.soilmodel is not None) and not self.soilmodel_is_mainmodel:
1248
+ self.soilmodel.save_data(idx)
1249
+ cpdef void new2old(self) noexcept nogil:
1250
+ cdef numpy.int64_t jdx0
1251
+ for jdx0 in range(self.sequences.states._inzp_length_0):
1252
+ self.sequences.old_states.inzp[jdx0] = self.sequences.new_states.inzp[jdx0]
1253
+ for jdx0 in range(self.sequences.states._wats_length_0):
1254
+ self.sequences.old_states.wats[jdx0] = self.sequences.new_states.wats[jdx0]
1255
+ for jdx0 in range(self.sequences.states._waes_length_0):
1256
+ self.sequences.old_states.waes[jdx0] = self.sequences.new_states.waes[jdx0]
1257
+ for jdx0 in range(self.sequences.states._esnow_length_0):
1258
+ self.sequences.old_states.esnow[jdx0] = self.sequences.new_states.esnow[jdx0]
1259
+ for jdx0 in range(self.sequences.states._taus_length_0):
1260
+ self.sequences.old_states.taus[jdx0] = self.sequences.new_states.taus[jdx0]
1261
+ for jdx0 in range(self.sequences.states._ebdn_length_0):
1262
+ self.sequences.old_states.ebdn[jdx0] = self.sequences.new_states.ebdn[jdx0]
1263
+ for jdx0 in range(self.sequences.states._bowa_length_0):
1264
+ self.sequences.old_states.bowa[jdx0] = self.sequences.new_states.bowa[jdx0]
1265
+ self.sequences.old_states.sdg1 = self.sequences.new_states.sdg1
1266
+ self.sequences.old_states.sdg2 = self.sequences.new_states.sdg2
1267
+ self.sequences.old_states.sig1 = self.sequences.new_states.sig1
1268
+ self.sequences.old_states.sig2 = self.sequences.new_states.sig2
1269
+ self.sequences.old_states.sbg = self.sequences.new_states.sbg
1270
+ if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
1271
+ self.aetmodel.new2old()
1272
+ if (self.radiationmodel is not None) and not self.radiationmodel_is_mainmodel:
1273
+ self.radiationmodel.new2old()
1274
+ if (self.soilmodel is not None) and not self.soilmodel_is_mainmodel:
1275
+ self.soilmodel.new2old()
1276
+ cpdef inline void run(self) noexcept nogil:
1277
+ self.process_radiationmodel_v1()
1278
+ self.calc_possiblesunshineduration_v1()
1279
+ self.calc_sunshineduration_v1()
1280
+ self.calc_globalradiation_v1()
1281
+ self.calc_qzh_v1()
1282
+ self.update_loggedsunshineduration_v1()
1283
+ self.calc_dailysunshineduration_v1()
1284
+ self.update_loggedpossiblesunshineduration_v1()
1285
+ self.calc_dailypossiblesunshineduration_v1()
1286
+ self.calc_nkor_v1()
1287
+ self.calc_tkor_v1()
1288
+ self.calc_windspeed2m_v1()
1289
+ self.calc_reducedwindspeed2m_v1()
1290
+ self.calc_saturationvapourpressure_v1()
1291
+ self.calc_actualvapourpressure_v1()
1292
+ self.calc_nbes_inzp_v1()
1293
+ self.calc_snratio_v1()
1294
+ self.calc_sbes_v1()
1295
+ self.calc_wats_v1()
1296
+ self.calc_wada_waes_v1()
1297
+ self.calc_wnied_esnow_v1()
1298
+ self.calc_temps_v1()
1299
+ self.update_taus_v1()
1300
+ self.calc_actualalbedo_v1()
1301
+ self.calc_netshortwaveradiationsnow_v1()
1302
+ self.calc_rlatm_v1()
1303
+ self.calc_tz_v1()
1304
+ self.calc_wg_v1()
1305
+ self.update_esnow_v1()
1306
+ self.calc_schmpot_v2()
1307
+ self.calc_schm_wats_v1()
1308
+ self.calc_gefrpot_v1()
1309
+ self.calc_gefr_wats_v1()
1310
+ self.calc_evs_waes_wats_v1()
1311
+ self.update_wada_waes_v1()
1312
+ self.update_esnow_v2()
1313
+ self.calc_evi_inzp_v1()
1314
+ self.calc_evb_v1()
1315
+ self.update_ebdn_v1()
1316
+ self.calc_sff_v1()
1317
+ self.calc_fvg_v1()
1318
+ self.calc_qkap_v1()
1319
+ self.calc_qbb_v1()
1320
+ self.calc_qib1_v1()
1321
+ self.calc_qib2_v1()
1322
+ self.calc_qdb_v1()
1323
+ self.update_qdb_v1()
1324
+ self.calc_bowa_v1()
1325
+ self.calc_qbgz_v1()
1326
+ self.calc_qigz1_v1()
1327
+ self.calc_qigz2_v1()
1328
+ self.calc_qdgz_v1()
1329
+ self.calc_qbga_sbg_qbgz_qdgz_v1()
1330
+ self.calc_qiga1_sig1_v1()
1331
+ self.calc_qiga2_sig2_v1()
1332
+ self.calc_qdgz1_qdgz2_v1()
1333
+ self.calc_qdga1_sdg1_v1()
1334
+ self.calc_qdga2_sdg2_v1()
1335
+ self.calc_qah_v1()
1336
+ self.calc_qa_v1()
1337
+ cpdef inline void update_inlets(self) noexcept nogil:
1338
+ self.pick_qz_v1()
1339
+ cpdef inline void update_outlets(self) noexcept nogil:
1340
+ self.pass_qa_v1()
1341
+ cpdef inline void update_receivers(self, numpy.int64_t idx) noexcept nogil:
1342
+ self.idx_sim = idx
1343
+ pass
1344
+ cpdef inline void update_senders(self, numpy.int64_t idx) noexcept nogil:
1345
+ self.idx_sim = idx
1346
+ pass
1347
+ cpdef inline void update_outputs(self) noexcept nogil:
1348
+ self.sequences.factors.update_outputs()
1349
+ self.sequences.fluxes.update_outputs()
1350
+ self.sequences.states.update_outputs()
1351
+ cpdef inline void pick_qz_v1(self) noexcept nogil:
1352
+ cdef numpy.int64_t idx
1353
+ self.sequences.fluxes.qz = 0.0
1354
+ for idx in range(self.sequences.inlets.len_q):
1355
+ self.sequences.fluxes.qz = self.sequences.fluxes.qz + (self.sequences.inlets.q[idx][0])
1356
+ cpdef inline void process_radiationmodel_v1(self) noexcept nogil:
1357
+ if self.radiationmodel_typeid == 1:
1358
+ (<masterinterface.MasterInterface>self.radiationmodel).process_radiation()
1359
+ cpdef inline void calc_possiblesunshineduration_v1(self) noexcept nogil:
1360
+ if self.radiationmodel_typeid == 1:
1361
+ self.sequences.factors.possiblesunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_possiblesunshineduration()
1362
+ elif self.radiationmodel_typeid == 4:
1363
+ self.sequences.factors.possiblesunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_possiblesunshineduration()
1364
+ cpdef inline void calc_sunshineduration_v1(self) noexcept nogil:
1365
+ if self.radiationmodel_typeid == 1:
1366
+ self.sequences.factors.sunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_sunshineduration()
1367
+ elif self.radiationmodel_typeid == 4:
1368
+ self.sequences.factors.sunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_sunshineduration()
1369
+ cpdef inline void calc_globalradiation_v1(self) noexcept nogil:
1370
+ if self.radiationmodel_typeid == 1:
1371
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
1372
+ elif self.radiationmodel_typeid == 4:
1373
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
1374
+ cpdef inline void calc_qzh_v1(self) noexcept nogil:
1375
+ self.sequences.fluxes.qzh = self.sequences.fluxes.qz / self.parameters.derived.qfactor
1376
+ cpdef inline void update_loggedsunshineduration_v1(self) noexcept nogil:
1377
+ cdef numpy.int64_t idx
1378
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
1379
+ self.sequences.logs.loggedsunshineduration[idx] = self.sequences.logs.loggedsunshineduration[idx - 1]
1380
+ self.sequences.logs.loggedsunshineduration[0] = self.sequences.factors.sunshineduration
1381
+ cpdef inline void calc_dailysunshineduration_v1(self) noexcept nogil:
1382
+ cdef numpy.int64_t idx
1383
+ self.sequences.fluxes.dailysunshineduration = 0.0
1384
+ for idx in range(self.parameters.derived.nmblogentries):
1385
+ self.sequences.fluxes.dailysunshineduration = self.sequences.fluxes.dailysunshineduration + (self.sequences.logs.loggedsunshineduration[idx])
1386
+ cpdef inline void update_loggedpossiblesunshineduration_v1(self) noexcept nogil:
1387
+ cdef numpy.int64_t idx
1388
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
1389
+ self.sequences.logs.loggedpossiblesunshineduration[idx] = ( self.sequences.logs.loggedpossiblesunshineduration[idx - 1] )
1390
+ self.sequences.logs.loggedpossiblesunshineduration[0] = self.sequences.factors.possiblesunshineduration
1391
+ cpdef inline void calc_dailypossiblesunshineduration_v1(self) noexcept nogil:
1392
+ cdef numpy.int64_t idx
1393
+ self.sequences.fluxes.dailypossiblesunshineduration = 0.0
1394
+ for idx in range(self.parameters.derived.nmblogentries):
1395
+ self.sequences.fluxes.dailypossiblesunshineduration = self.sequences.fluxes.dailypossiblesunshineduration + (self.sequences.logs.loggedpossiblesunshineduration[idx])
1396
+ cpdef inline void calc_nkor_v1(self) noexcept nogil:
1397
+ cdef numpy.int64_t k
1398
+ for k in range(self.parameters.control.nhru):
1399
+ self.sequences.fluxes.nkor[k] = self.parameters.control.kg[k] * self.sequences.inputs.nied
1400
+ cpdef inline void calc_tkor_v1(self) noexcept nogil:
1401
+ cdef numpy.int64_t k
1402
+ for k in range(self.parameters.control.nhru):
1403
+ self.sequences.fluxes.tkor[k] = self.parameters.control.kt[k] + self.sequences.inputs.teml
1404
+ cpdef inline void calc_windspeed2m_v1(self) noexcept nogil:
1405
+ self.sequences.fluxes.windspeed2m = self.sequences.inputs.windspeed * ( log(2.0 / self.parameters.fixed.z0) / log(self.parameters.control.measuringheightwindspeed / self.parameters.fixed.z0) )
1406
+ cpdef inline void calc_reducedwindspeed2m_v1(self) noexcept nogil:
1407
+ cdef double d_lai
1408
+ cdef numpy.int64_t k
1409
+ for k in range(self.parameters.control.nhru):
1410
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
1411
+ d_lai = self.parameters.control.lai[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]]
1412
+ self.sequences.fluxes.reducedwindspeed2m[k] = ( max(self.parameters.control.p1wind - self.parameters.control.p2wind * d_lai, 0.0) * self.sequences.fluxes.windspeed2m )
1413
+ else:
1414
+ self.sequences.fluxes.reducedwindspeed2m[k] = self.sequences.fluxes.windspeed2m
1415
+ cpdef inline void calc_saturationvapourpressure_v1(self) noexcept nogil:
1416
+ cdef numpy.int64_t k
1417
+ for k in range(self.parameters.control.nhru):
1418
+ self.sequences.fluxes.saturationvapourpressure[k] = self.return_saturationvapourpressure_v1( self.sequences.fluxes.tkor[k] )
1419
+ cpdef inline void calc_actualvapourpressure_v1(self) noexcept nogil:
1420
+ cdef numpy.int64_t k
1421
+ for k in range(self.parameters.control.nhru):
1422
+ self.sequences.fluxes.actualvapourpressure[k] = ( self.sequences.fluxes.saturationvapourpressure[k] * self.sequences.inputs.relativehumidity / 100.0 )
1423
+ cpdef inline void calc_nbes_inzp_v1(self) noexcept nogil:
1424
+ cdef numpy.int64_t k
1425
+ for k in range(self.parameters.control.nhru):
1426
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
1427
+ self.sequences.fluxes.nbes[k] = 0.0
1428
+ self.sequences.states.inzp[k] = 0.0
1429
+ else:
1430
+ 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, )
1431
+ self.sequences.states.inzp[k] = self.sequences.states.inzp[k] + (self.sequences.fluxes.nkor[k] - self.sequences.fluxes.nbes[k])
1432
+ cpdef inline void calc_snratio_v1(self) noexcept nogil:
1433
+ cdef numpy.int64_t k
1434
+ for k in range(self.parameters.control.nhru):
1435
+ if self.sequences.fluxes.tkor[k] >= (self.parameters.control.tgr[k] + self.parameters.control.tsp[k] / 2.0):
1436
+ self.sequences.aides.snratio[k] = 0.0
1437
+ elif self.sequences.fluxes.tkor[k] <= (self.parameters.control.tgr[k] - self.parameters.control.tsp[k] / 2.0):
1438
+ self.sequences.aides.snratio[k] = 1.0
1439
+ else:
1440
+ 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]
1441
+ cpdef inline void calc_sbes_v1(self) noexcept nogil:
1442
+ cdef numpy.int64_t k
1443
+ for k in range(self.parameters.control.nhru):
1444
+ self.sequences.fluxes.sbes[k] = self.sequences.aides.snratio[k] * self.sequences.fluxes.nbes[k]
1445
+ cpdef inline void calc_wats_v1(self) noexcept nogil:
1446
+ cdef numpy.int64_t k
1447
+ for k in range(self.parameters.control.nhru):
1448
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
1449
+ self.sequences.states.wats[k] = 0.0
1450
+ else:
1451
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] + (self.sequences.fluxes.sbes[k])
1452
+ cpdef inline void calc_wada_waes_v1(self) noexcept nogil:
1453
+ cdef numpy.int64_t k
1454
+ for k in range(self.parameters.control.nhru):
1455
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
1456
+ self.sequences.states.waes[k] = 0.0
1457
+ self.sequences.fluxes.wada[k] = self.sequences.fluxes.nbes[k]
1458
+ else:
1459
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] + (self.sequences.fluxes.nbes[k])
1460
+ self.sequences.fluxes.wada[k] = max(self.sequences.states.waes[k] - self.parameters.control.pwmax[k] * self.sequences.states.wats[k], 0.0)
1461
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] - (self.sequences.fluxes.wada[k])
1462
+ cpdef inline void calc_wnied_esnow_v1(self) noexcept nogil:
1463
+ cdef double d_water
1464
+ cdef double d_ice
1465
+ cdef numpy.int64_t k
1466
+ for k in range(self.parameters.control.nhru):
1467
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
1468
+ self.sequences.fluxes.wnied[k] = 0.0
1469
+ self.sequences.states.esnow[k] = 0.0
1470
+ else:
1471
+ d_ice = self.parameters.fixed.cpeis * self.sequences.fluxes.sbes[k]
1472
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.fluxes.nbes[k] - self.sequences.fluxes.sbes[k] - self.sequences.fluxes.wada[k])
1473
+ self.sequences.fluxes.wnied[k] = (self.sequences.fluxes.tkor[k] - self.parameters.control.trefn[k]) * (d_ice + d_water)
1474
+ self.sequences.states.esnow[k] = self.sequences.states.esnow[k] + (self.sequences.fluxes.wnied[k])
1475
+ cpdef inline void calc_temps_v1(self) noexcept nogil:
1476
+ cdef numpy.int64_t k
1477
+ for k in range(self.parameters.control.nhru):
1478
+ self.sequences.aides.temps[k] = self.return_temps_v1(k)
1479
+ cpdef inline void update_taus_v1(self) noexcept nogil:
1480
+ cdef double d_r2
1481
+ cdef double d_r1
1482
+ cdef numpy.int64_t k
1483
+ for k in range(self.parameters.control.nhru):
1484
+ if self.sequences.states.waes[k] > 0:
1485
+ if isnan(self.sequences.states.taus[k]):
1486
+ self.sequences.states.taus[k] = 0.0
1487
+ d_r1 = exp( 5000.0 * (1 / 273.15 - 1.0 / (273.15 + self.sequences.aides.temps[k])) )
1488
+ d_r2 = min(d_r1**10, 1.0)
1489
+ self.sequences.states.taus[k] = self.sequences.states.taus[k] * (max(1 - 0.1 * self.sequences.fluxes.sbes[k], 0.0))
1490
+ self.sequences.states.taus[k] = self.sequences.states.taus[k] + ((d_r1 + d_r2 + 0.03) / 1e6 * self.parameters.derived.seconds)
1491
+ else:
1492
+ self.sequences.states.taus[k] = nan
1493
+ cpdef inline void calc_actualalbedo_v1(self) noexcept nogil:
1494
+ cdef numpy.int64_t k
1495
+ for k in range(self.parameters.control.nhru):
1496
+ if self.sequences.states.waes[k] > 0.0:
1497
+ 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]) )
1498
+ else:
1499
+ self.sequences.fluxes.actualalbedo[k] = nan
1500
+ cpdef inline void calc_netshortwaveradiationsnow_v1(self) noexcept nogil:
1501
+ cdef numpy.int64_t k
1502
+ for k in range(self.parameters.control.nhru):
1503
+ if isnan(self.sequences.fluxes.actualalbedo[k]):
1504
+ self.sequences.fluxes.netshortwaveradiationsnow[k] = 0.0
1505
+ else:
1506
+ 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 )
1507
+ cpdef inline void calc_rlatm_v1(self) noexcept nogil:
1508
+ cdef double d_t
1509
+ cdef numpy.int64_t k
1510
+ cdef double d_common
1511
+ cdef double d_rs
1512
+ d_rs = self.sequences.fluxes.dailysunshineduration / self.sequences.fluxes.dailypossiblesunshineduration
1513
+ d_common = self.parameters.fixed.fratm * self.parameters.fixed.sigma * (1.0 + 0.22 * (1.0 - d_rs) ** 2)
1514
+ for k in range(self.parameters.control.nhru):
1515
+ d_t = self.sequences.fluxes.tkor[k] + 273.15
1516
+ self.sequences.aides.rlatm[k] = d_common * ( d_t**4 * (self.sequences.fluxes.actualvapourpressure[k] / d_t) ** (1.0 / 7.0) )
1517
+ cpdef inline void calc_tz_v1(self) noexcept nogil:
1518
+ cdef numpy.int64_t k
1519
+ for k in range(self.parameters.control.nhru):
1520
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
1521
+ self.sequences.fluxes.tz[k] = nan
1522
+ elif self.sequences.states.ebdn[k] < 0.0:
1523
+ self.sequences.fluxes.tz[k] = self.sequences.states.ebdn[k] / (2.0 * self.parameters.fixed.z * self.parameters.fixed.cg)
1524
+ elif self.sequences.states.ebdn[k] < self.parameters.derived.heatoffusion[k]:
1525
+ self.sequences.fluxes.tz[k] = 0.0
1526
+ else:
1527
+ 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)
1528
+ cpdef inline void calc_wg_v1(self) noexcept nogil:
1529
+ cdef numpy.int64_t k
1530
+ for k in range(self.parameters.control.nhru):
1531
+ if self.parameters.control.lnk[k] in (FLUSS, SEE, WASSER):
1532
+ self.sequences.fluxes.wg[k] = 0.0
1533
+ else:
1534
+ self.sequences.fluxes.wg[k] = self.return_wg_v1(k)
1535
+ cpdef inline void update_esnow_v1(self) noexcept nogil:
1536
+ cdef double d_esnow
1537
+ cdef numpy.int64_t k
1538
+ for k in range(self.parameters.control.nhru):
1539
+ if self.sequences.states.waes[k] > 0.0:
1540
+ self.idx_hru = k
1541
+ d_esnow = self.sequences.states.esnow[k]
1542
+ 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, )
1543
+ if self.sequences.states.esnow[k] > 0.0:
1544
+ self.sequences.aides.temps[k] = 0.0
1545
+ self.sequences.fluxes.tempssurface[k] = self.return_tempssurface(k)
1546
+ self.sequences.fluxes.wg[k] = self.return_wg_v1(k)
1547
+ self.sequences.states.esnow[k] = d_esnow + self.sequences.fluxes.wg[k] - self.sequences.fluxes.wsurf[k]
1548
+ else:
1549
+ self.sequences.states.esnow[k] = 0.0
1550
+ self.sequences.aides.temps[k] = nan
1551
+ self.sequences.fluxes.tempssurface[k] = nan
1552
+ self.sequences.fluxes.netlongwaveradiationsnow[k] = 0.0
1553
+ self.sequences.fluxes.netradiationsnow[k] = 0.0
1554
+ self.sequences.fluxes.saturationvapourpressuresnow[k] = 0.0
1555
+ self.sequences.fluxes.wsenssnow[k] = 0.0
1556
+ self.sequences.fluxes.wlatsnow[k] = 0.0
1557
+ self.sequences.fluxes.wsurf[k] = 0.0
1558
+ cpdef inline void calc_schmpot_v2(self) noexcept nogil:
1559
+ cdef numpy.int64_t k
1560
+ for k in range(self.parameters.control.nhru):
1561
+ if self.sequences.states.waes[k] > 0.0:
1562
+ self.sequences.fluxes.schmpot[k] = max(self.sequences.states.esnow[k] / self.parameters.fixed.rschmelz, 0.0)
1563
+ else:
1564
+ self.sequences.fluxes.schmpot[k] = 0.0
1565
+ cpdef inline void calc_schm_wats_v1(self) noexcept nogil:
1566
+ cdef numpy.int64_t k
1567
+ for k in range(self.parameters.control.nhru):
1568
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
1569
+ self.sequences.fluxes.schm[k] = 0.0
1570
+ else:
1571
+ self.sequences.fluxes.schm[k] = min(self.sequences.fluxes.schmpot[k], self.sequences.states.wats[k])
1572
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] - (self.sequences.fluxes.schm[k])
1573
+ cpdef inline void calc_gefrpot_v1(self) noexcept nogil:
1574
+ cdef numpy.int64_t k
1575
+ for k in range(self.parameters.control.nhru):
1576
+ if self.sequences.states.waes[k] > 0:
1577
+ self.sequences.fluxes.gefrpot[k] = max(-self.sequences.states.esnow[k] / self.parameters.fixed.rschmelz, 0)
1578
+ else:
1579
+ self.sequences.fluxes.gefrpot[k] = 0.0
1580
+ cpdef inline void calc_gefr_wats_v1(self) noexcept nogil:
1581
+ cdef numpy.int64_t k
1582
+ for k in range(self.parameters.control.nhru):
1583
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE) or not self.parameters.control.refreezeflag:
1584
+ self.sequences.fluxes.gefr[k] = 0.0
1585
+ else:
1586
+ self.sequences.fluxes.gefr[k] = min(self.sequences.fluxes.gefrpot[k], (self.sequences.states.waes[k] - self.sequences.states.wats[k]))
1587
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] + (self.sequences.fluxes.gefr[k])
1588
+ cpdef inline void calc_evs_waes_wats_v1(self) noexcept nogil:
1589
+ cdef double d_frac
1590
+ cdef numpy.int64_t k
1591
+ for k in range(self.parameters.control.nhru):
1592
+ if self.parameters.control.lnk[k] in (WASSER, SEE, FLUSS) or (self.sequences.states.waes[k] <= 0.0):
1593
+ self.sequences.fluxes.evs[k] = 0.0
1594
+ self.sequences.states.waes[k] = 0.0
1595
+ self.sequences.states.wats[k] = 0.0
1596
+ else:
1597
+ self.sequences.fluxes.evs[k] = min(self.sequences.fluxes.wlatsnow[k] / self.parameters.fixed.lwe, self.sequences.states.waes[k])
1598
+ d_frac = (self.sequences.states.waes[k] - self.sequences.fluxes.evs[k]) / self.sequences.states.waes[k]
1599
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] * (d_frac)
1600
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] * (d_frac)
1601
+ cpdef inline void update_wada_waes_v1(self) noexcept nogil:
1602
+ cdef double d_wada_corr
1603
+ cdef numpy.int64_t k
1604
+ for k in range(self.parameters.control.nhru):
1605
+ if self.parameters.control.lnk[k] not in (WASSER, FLUSS, SEE):
1606
+ d_wada_corr = max(self.sequences.states.waes[k] - self.parameters.control.pwmax[k] * self.sequences.states.wats[k], 0.0)
1607
+ self.sequences.fluxes.wada[k] = self.sequences.fluxes.wada[k] + (d_wada_corr)
1608
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] - (d_wada_corr)
1609
+ cpdef inline void update_esnow_v2(self) noexcept nogil:
1610
+ cdef numpy.int64_t k
1611
+ for k in range(self.parameters.control.nhru):
1612
+ if (self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE)) or (self.sequences.states.waes[k] <= 0.0):
1613
+ self.sequences.states.esnow[k] = 0.0
1614
+ else:
1615
+ self.sequences.states.esnow[k] = self.sequences.states.esnow[k] + (self.parameters.fixed.rschmelz * (self.sequences.fluxes.gefr[k] - self.sequences.fluxes.schm[k]))
1616
+ cpdef inline void calc_evi_inzp_v1(self) noexcept nogil:
1617
+ if self.aetmodel_typeid == 1:
1618
+ self.calc_evi_inzp_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
1619
+ cpdef inline void calc_evb_v1(self) noexcept nogil:
1620
+ if self.aetmodel_typeid == 1:
1621
+ self.calc_evb_aetmodel_v1((<masterinterface.MasterInterface>self.aetmodel))
1622
+ cpdef inline void update_ebdn_v1(self) noexcept nogil:
1623
+ cdef numpy.int64_t k
1624
+ for k in range(self.parameters.control.nhru):
1625
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
1626
+ self.sequences.states.ebdn[k] = 0.0
1627
+ else:
1628
+ 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])
1629
+ cpdef inline void calc_sff_v1(self) noexcept nogil:
1630
+ cdef double d_sff
1631
+ cdef numpy.int64_t k
1632
+ for k in range(self.parameters.control.nhru):
1633
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
1634
+ self.sequences.fluxes.sff[k] = 0.0
1635
+ else:
1636
+ d_sff = 1.0 - self.sequences.states.ebdn[k] / (self.parameters.fixed.bowa2z[k] * self.parameters.fixed.rschmelz)
1637
+ self.sequences.fluxes.sff[k] = min(max(d_sff, 0.0), 1.0)
1638
+ cpdef inline void calc_fvg_v1(self) noexcept nogil:
1639
+ cdef numpy.int64_t k
1640
+ for k in range(self.parameters.control.nhru):
1641
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
1642
+ self.sequences.fluxes.fvg[k] = 0.0
1643
+ else:
1644
+ self.sequences.fluxes.fvg[k] = min(self.parameters.control.fvf * self.sequences.fluxes.sff[k] ** self.parameters.control.bsff, 1.0)
1645
+ cpdef inline void calc_qkap_v1(self) noexcept nogil:
1646
+ cdef numpy.int64_t k
1647
+ for k in range(self.parameters.control.nhru):
1648
+ if (self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE)) or (self.parameters.control.wmax[k] <= 0.0):
1649
+ self.sequences.fluxes.qkap[k] = 0.0
1650
+ elif self.sequences.states.bowa[k] <= self.parameters.control.kapgrenz[k, 0]:
1651
+ self.sequences.fluxes.qkap[k] = self.parameters.control.kapmax[k]
1652
+ elif self.sequences.states.bowa[k] <= self.parameters.control.kapgrenz[k, 1]:
1653
+ 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]) )
1654
+ else:
1655
+ self.sequences.fluxes.qkap[k] = 0
1656
+ cpdef inline void calc_qbb_v1(self) noexcept nogil:
1657
+ cdef numpy.int64_t k
1658
+ for k in range(self.parameters.control.nhru):
1659
+ 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) ):
1660
+ self.sequences.fluxes.qbb[k] = 0.0
1661
+ elif self.sequences.states.bowa[k] <= self.parameters.control.fk[k]:
1662
+ if self.parameters.control.rbeta:
1663
+ self.sequences.fluxes.qbb[k] = 0.0
1664
+ else:
1665
+ self.sequences.fluxes.qbb[k] = self.parameters.control.beta[k] * (self.sequences.states.bowa[k] - self.parameters.control.pwp[k])
1666
+ else:
1667
+ 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]) ) )
1668
+ cpdef inline void calc_qib1_v1(self) noexcept nogil:
1669
+ cdef numpy.int64_t k
1670
+ for k in range(self.parameters.control.nhru):
1671
+ if (self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE)) or ( self.sequences.states.bowa[k] <= self.parameters.control.pwp[k] ):
1672
+ self.sequences.fluxes.qib1[k] = 0.0
1673
+ else:
1674
+ self.sequences.fluxes.qib1[k] = self.parameters.control.dmin[k] * (self.sequences.states.bowa[k] / self.parameters.control.wmax[k])
1675
+ cpdef inline void calc_qib2_v1(self) noexcept nogil:
1676
+ cdef numpy.int64_t k
1677
+ for k in range(self.parameters.control.nhru):
1678
+ 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]) ):
1679
+ self.sequences.fluxes.qib2[k] = 0.0
1680
+ else:
1681
+ 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
1682
+ cpdef inline void calc_qdb_v1(self) noexcept nogil:
1683
+ cdef double d_exz
1684
+ cdef double d_sfa
1685
+ cdef numpy.int64_t k
1686
+ for k in range(self.parameters.control.nhru):
1687
+ if self.parameters.control.lnk[k] == WASSER:
1688
+ self.sequences.fluxes.qdb[k] = 0.0
1689
+ elif (self.parameters.control.lnk[k] in (VERS, FLUSS, SEE)) or (self.parameters.control.wmax[k] <= 0.0):
1690
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.wada[k]
1691
+ else:
1692
+ if self.sequences.states.bowa[k] < self.parameters.control.wmax[k]:
1693
+ 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]))
1694
+ else:
1695
+ d_sfa = 0.0
1696
+ d_exz = self.sequences.states.bowa[k] + self.sequences.fluxes.wada[k] - self.parameters.control.wmax[k]
1697
+ self.sequences.fluxes.qdb[k] = d_exz
1698
+ if d_sfa > 0.0:
1699
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.qdb[k] + (d_sfa ** (self.parameters.control.bsf[k] + 1.0) * self.parameters.control.wmax[k])
1700
+ self.sequences.fluxes.qdb[k] = max(self.sequences.fluxes.qdb[k], 0.0)
1701
+ cpdef inline void update_qdb_v1(self) noexcept nogil:
1702
+ cdef numpy.int64_t k
1703
+ for k in range(self.parameters.control.nhru):
1704
+ 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]))
1705
+ cpdef inline void calc_bowa_v1(self) noexcept nogil:
1706
+ if self.soilmodel is None:
1707
+ self.calc_bowa_default_v1()
1708
+ elif self.soilmodel_typeid == 1:
1709
+ self.calc_bowa_soilmodel_v1( (<masterinterface.MasterInterface>self.soilmodel) )
1710
+ cpdef inline void calc_qbgz_v1(self) noexcept nogil:
1711
+ cdef numpy.int64_t k
1712
+ self.sequences.fluxes.qbgz = 0.0
1713
+ for k in range(self.parameters.control.nhru):
1714
+ if self.parameters.control.lnk[k] == SEE:
1715
+ self.sequences.fluxes.qbgz = self.sequences.fluxes.qbgz + (self.parameters.control.fhru[k] * (self.sequences.fluxes.nkor[k] - self.sequences.fluxes.evi[k]))
1716
+ elif self.parameters.control.lnk[k] not in (WASSER, FLUSS, VERS):
1717
+ self.sequences.fluxes.qbgz = self.sequences.fluxes.qbgz + (self.parameters.control.fhru[k] * (self.sequences.fluxes.qbb[k] - self.sequences.fluxes.qkap[k]))
1718
+ cpdef inline void calc_qigz1_v1(self) noexcept nogil:
1719
+ cdef numpy.int64_t k
1720
+ self.sequences.fluxes.qigz1 = 0.0
1721
+ for k in range(self.parameters.control.nhru):
1722
+ self.sequences.fluxes.qigz1 = self.sequences.fluxes.qigz1 + (self.parameters.control.fhru[k] * self.sequences.fluxes.qib1[k])
1723
+ cpdef inline void calc_qigz2_v1(self) noexcept nogil:
1724
+ cdef numpy.int64_t k
1725
+ self.sequences.fluxes.qigz2 = 0.0
1726
+ for k in range(self.parameters.control.nhru):
1727
+ self.sequences.fluxes.qigz2 = self.sequences.fluxes.qigz2 + (self.parameters.control.fhru[k] * self.sequences.fluxes.qib2[k])
1728
+ cpdef inline void calc_qdgz_v1(self) noexcept nogil:
1729
+ cdef numpy.int64_t k
1730
+ self.sequences.fluxes.qdgz = 0.0
1731
+ for k in range(self.parameters.control.nhru):
1732
+ if self.parameters.control.lnk[k] == FLUSS:
1733
+ self.sequences.fluxes.qdgz = self.sequences.fluxes.qdgz + (self.parameters.control.fhru[k] * (self.sequences.fluxes.nkor[k] - self.sequences.fluxes.evi[k]))
1734
+ elif self.parameters.control.lnk[k] not in (WASSER, SEE):
1735
+ self.sequences.fluxes.qdgz = self.sequences.fluxes.qdgz + (self.parameters.control.fhru[k] * self.sequences.fluxes.qdb[k])
1736
+ cpdef inline void calc_qbga_sbg_qbgz_qdgz_v1(self) noexcept nogil:
1737
+ cdef double qbgz
1738
+ cdef double tt
1739
+ cdef double c2
1740
+ cdef double c1
1741
+ cdef double st
1742
+ cdef double fraction
1743
+ cdef double t
1744
+ cdef double excess
1745
+ cdef double z
1746
+ cdef double s0
1747
+ cdef double g2
1748
+ cdef double g1
1749
+ cdef double sm
1750
+ cdef double k
1751
+ k = self.parameters.derived.kb
1752
+ sm = self.parameters.control.gsbmax * self.parameters.control.volbmax
1753
+ g1 = self.parameters.control.gsbgrad1
1754
+ g2 = self.parameters.control.gsbgrad2
1755
+ s0 = self.sequences.old_states.sbg
1756
+ z = self.sequences.fluxes.qbgz
1757
+ if s0 > sm:
1758
+ excess = s0 - sm
1759
+ s0 = sm
1760
+ else:
1761
+ excess = 0.0
1762
+ if k == 0.0:
1763
+ self.sequences.new_states.sbg = 0.0
1764
+ self.sequences.fluxes.qbga = s0 + self.sequences.fluxes.qbgz
1765
+ elif z - s0 / k <= g1:
1766
+ if isinf(k):
1767
+ self.sequences.new_states.sbg = min(s0 + z, sm)
1768
+ self.sequences.fluxes.qbga = 0.0
1769
+ else:
1770
+ if isinf(sm):
1771
+ t = 1.0
1772
+ else:
1773
+ fraction = (k * z - sm) / (k * z - s0)
1774
+ if fraction > 0.0:
1775
+ t = -k * log(fraction)
1776
+ else:
1777
+ t = 1.0
1778
+ if t < 1.0:
1779
+ self.sequences.new_states.sbg = sm
1780
+ self.sequences.fluxes.qbga = s0 - sm + t * self.sequences.fluxes.qbgz
1781
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + ((1.0 - t) * sm / k)
1782
+ else:
1783
+ self.sequences.new_states.sbg = self.return_sg_v1(k, s0, z, 1.0)
1784
+ self.sequences.fluxes.qbga = s0 - self.sequences.new_states.sbg + self.sequences.fluxes.qbgz
1785
+ elif g2 == 0.0:
1786
+ self.sequences.fluxes.qbga = s0 / k
1787
+ self.sequences.new_states.sbg = s0
1788
+ else:
1789
+ if isinf(k) and (g2 > g1):
1790
+ self.sequences.fluxes.qbga = 0.0
1791
+ self.sequences.new_states.sbg = s0 + g2 / ((g2 - g1) / z + 1.0)
1792
+ else:
1793
+ st = min(k * (z - g1), sm)
1794
+ if g1 == g2:
1795
+ t = min((st - s0) / g1, 1.0)
1796
+ self.sequences.fluxes.qbga = t * (g1 * t + 2.0 * s0) / (2.0 * k)
1797
+ else:
1798
+ c1 = (g2 - g1) / (g1 - g2 - z)
1799
+ c2 = (g2 * k * z) / (g1 - g2)
1800
+ t = min(k / c1 * log((st + c2) / (s0 + c2)), 1.0)
1801
+ self.sequences.fluxes.qbga = (s0 + c2) * ( exp(c1 * t / k) - 1.0 ) / c1 - c2 * t / k
1802
+ if t < 1.0:
1803
+ if st == sm:
1804
+ self.sequences.new_states.sbg = sm
1805
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + ((1.0 - t) * sm / k)
1806
+ else:
1807
+ fraction = (k * z - sm) / (k * z - st)
1808
+ if fraction > 0.0:
1809
+ tt = -k * log(fraction)
1810
+ else:
1811
+ tt = 1.0
1812
+ if t + tt < 1.0:
1813
+ self.sequences.new_states.sbg = sm
1814
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + (st - sm + tt * self.sequences.fluxes.qbgz)
1815
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + ((1.0 - t - tt) * sm / k)
1816
+ else:
1817
+ self.sequences.new_states.sbg = self.return_sg_v1(k, st, z, 1.0 - t)
1818
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + (st - self.sequences.new_states.sbg + (1.0 - t) * self.sequences.fluxes.qbgz)
1819
+ elif g1 == g2:
1820
+ self.sequences.new_states.sbg = s0 + g1
1821
+ else:
1822
+ self.sequences.new_states.sbg = (s0 + c2) * exp(1.0 / k * c1) - c2
1823
+ qbgz = self.sequences.fluxes.qbgz
1824
+ self.sequences.fluxes.qbgz = self.sequences.new_states.sbg - s0 + self.sequences.fluxes.qbga
1825
+ self.sequences.fluxes.qdgz = self.sequences.fluxes.qdgz + (qbgz - self.sequences.fluxes.qbgz)
1826
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + (excess)
1827
+ cpdef inline void calc_qiga1_sig1_v1(self) noexcept nogil:
1828
+ self.sequences.new_states.sig1 = self.return_sg_v1(self.parameters.derived.ki1, self.sequences.old_states.sig1, self.sequences.fluxes.qigz1, 1.0)
1829
+ self.sequences.fluxes.qiga1 = self.sequences.old_states.sig1 - self.sequences.new_states.sig1 + self.sequences.fluxes.qigz1
1830
+ cpdef inline void calc_qiga2_sig2_v1(self) noexcept nogil:
1831
+ self.sequences.new_states.sig2 = self.return_sg_v1(self.parameters.derived.ki2, self.sequences.old_states.sig2, self.sequences.fluxes.qigz2, 1.0)
1832
+ self.sequences.fluxes.qiga2 = self.sequences.old_states.sig2 - self.sequences.new_states.sig2 + self.sequences.fluxes.qigz2
1833
+ cpdef inline void calc_qdgz1_qdgz2_v1(self) noexcept nogil:
1834
+ if self.sequences.fluxes.qdgz > self.parameters.control.a2:
1835
+ 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)
1836
+ self.sequences.fluxes.qdgz1 = self.sequences.fluxes.qdgz - self.sequences.fluxes.qdgz2
1837
+ else:
1838
+ self.sequences.fluxes.qdgz2 = 0.0
1839
+ self.sequences.fluxes.qdgz1 = self.sequences.fluxes.qdgz
1840
+ cpdef inline void calc_qdga1_sdg1_v1(self) noexcept nogil:
1841
+ self.sequences.new_states.sdg1 = self.return_sg_v1(self.parameters.derived.kd1, self.sequences.old_states.sdg1, self.sequences.fluxes.qdgz1, 1.0)
1842
+ self.sequences.fluxes.qdga1 = self.sequences.old_states.sdg1 - self.sequences.new_states.sdg1 + self.sequences.fluxes.qdgz1
1843
+ cpdef inline void calc_qdga2_sdg2_v1(self) noexcept nogil:
1844
+ self.sequences.new_states.sdg2 = self.return_sg_v1(self.parameters.derived.kd2, self.sequences.old_states.sdg2, self.sequences.fluxes.qdgz2, 1.0)
1845
+ self.sequences.fluxes.qdga2 = self.sequences.old_states.sdg2 - self.sequences.new_states.sdg2 + self.sequences.fluxes.qdgz2
1846
+ cpdef inline void calc_qah_v1(self) noexcept nogil:
1847
+ cdef double d_epw
1848
+ cdef numpy.int64_t k
1849
+ cdef double d_area
1850
+ 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
1851
+ if (not self.parameters.control.negq) and (self.sequences.fluxes.qah < 0.0):
1852
+ d_area = 0.0
1853
+ for k in range(self.parameters.control.nhru):
1854
+ if self.parameters.control.lnk[k] in (FLUSS, SEE):
1855
+ d_area = d_area + (self.parameters.control.fhru[k])
1856
+ if d_area > 0.0:
1857
+ for k in range(self.parameters.control.nhru):
1858
+ if self.parameters.control.lnk[k] in (FLUSS, SEE):
1859
+ self.sequences.fluxes.evi[k] = self.sequences.fluxes.evi[k] + (self.sequences.fluxes.qah / d_area)
1860
+ self.sequences.fluxes.qah = 0.0
1861
+ d_epw = 0.0
1862
+ for k in range(self.parameters.control.nhru):
1863
+ if self.parameters.control.lnk[k] == WASSER:
1864
+ self.sequences.fluxes.qah = self.sequences.fluxes.qah + (self.parameters.control.fhru[k] * self.sequences.fluxes.nkor[k])
1865
+ d_epw = d_epw + (self.parameters.control.fhru[k] * self.sequences.fluxes.evi[k])
1866
+ if (self.sequences.fluxes.qah > d_epw) or self.parameters.control.negq:
1867
+ self.sequences.fluxes.qah = self.sequences.fluxes.qah - (d_epw)
1868
+ elif d_epw > 0.0:
1869
+ for k in range(self.parameters.control.nhru):
1870
+ if self.parameters.control.lnk[k] == WASSER:
1871
+ self.sequences.fluxes.evi[k] = self.sequences.fluxes.evi[k] * (self.sequences.fluxes.qah / d_epw)
1872
+ self.sequences.fluxes.qah = 0.0
1873
+ cpdef inline void calc_qa_v1(self) noexcept nogil:
1874
+ self.sequences.fluxes.qa = self.parameters.derived.qfactor * self.sequences.fluxes.qah
1875
+ cpdef double get_temperature_v1(self, numpy.int64_t s) noexcept nogil:
1876
+ return self.sequences.fluxes.tkor[s]
1877
+ cpdef double get_meantemperature_v1(self) noexcept nogil:
1878
+ return self.sequences.inputs.teml
1879
+ cpdef double get_precipitation_v1(self, numpy.int64_t s) noexcept nogil:
1880
+ return self.sequences.fluxes.nkor[s]
1881
+ cpdef double get_interceptedwater_v1(self, numpy.int64_t k) noexcept nogil:
1882
+ return self.sequences.states.inzp[k]
1883
+ cpdef double get_soilwater_v1(self, numpy.int64_t k) noexcept nogil:
1884
+ return self.sequences.states.bowa[k]
1885
+ cpdef double get_snowcover_v1(self, numpy.int64_t k) noexcept nogil:
1886
+ if self.sequences.states.wats[k] > 0.0:
1887
+ return 1.0
1888
+ return 0.0
1889
+ cpdef double get_snowalbedo_v1(self, numpy.int64_t k) noexcept nogil:
1890
+ return self.sequences.fluxes.actualalbedo[k]
1891
+ cpdef inline double return_netlongwaveradiationsnow_v1(self, numpy.int64_t k) noexcept nogil:
1892
+ cdef double d_fr
1893
+ cdef double d_counter
1894
+ cdef double d_temp
1895
+ d_temp = self.sequences.fluxes.tkor[k] + 273.15
1896
+ d_counter = self.sequences.aides.rlatm[k]
1897
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
1898
+ d_fr = self.parameters.derived.fr[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]]
1899
+ d_counter = d_fr * d_counter + (1.0 - d_fr) * 0.97 * self.parameters.fixed.sigma * d_temp**4
1900
+ return self.parameters.fixed.sigma * (self.sequences.fluxes.tempssurface[k] + 273.15) ** 4 - d_counter
1901
+ cpdef inline double return_energygainsnowsurface_v1(self, double tempssurface) noexcept nogil:
1902
+ cdef numpy.int64_t k
1903
+ k = self.idx_hru
1904
+ self.sequences.fluxes.tempssurface[k] = tempssurface
1905
+ self.sequences.fluxes.saturationvapourpressuresnow[k] = self.return_saturationvapourpressure_v1( self.sequences.fluxes.tempssurface[k] )
1906
+ self.sequences.fluxes.wlatsnow[k] = self.return_wlatsnow_v1(k)
1907
+ self.sequences.fluxes.wsenssnow[k] = self.return_wsenssnow_v1(k)
1908
+ self.sequences.fluxes.netlongwaveradiationsnow[k] = self.return_netlongwaveradiationsnow_v1(k)
1909
+ self.sequences.fluxes.netradiationsnow[k] = self.return_netradiation_v1( self.sequences.fluxes.netshortwaveradiationsnow[k], self.sequences.fluxes.netlongwaveradiationsnow[k] )
1910
+ self.sequences.fluxes.wsurf[k] = self.return_wsurf_v1(k)
1911
+ return ( self.sequences.fluxes.wsurf[k] + self.sequences.fluxes.netradiationsnow[k] - self.sequences.fluxes.wsenssnow[k] - self.sequences.fluxes.wlatsnow[k] )
1912
+ cpdef inline double return_saturationvapourpressure_v1(self, double temperature) noexcept nogil:
1913
+ return 6.1078 * 2.71828 ** (17.08085 * temperature / (temperature + 234.175))
1914
+ cpdef inline double return_netradiation_v1(self, double netshortwaveradiation, double netlongwaveradiation) noexcept nogil:
1915
+ return netshortwaveradiation - netlongwaveradiation
1916
+ cpdef inline double return_wsenssnow_v1(self, numpy.int64_t k) noexcept nogil:
1917
+ return (self.parameters.control.turb0 + self.parameters.control.turb1 * self.sequences.fluxes.reducedwindspeed2m[k]) * ( self.sequences.fluxes.tempssurface[k] - self.sequences.fluxes.tkor[k] )
1918
+ cpdef inline double return_wlatsnow_v1(self, numpy.int64_t k) noexcept nogil:
1919
+ 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]) )
1920
+ cpdef inline double return_wsurf_v1(self, numpy.int64_t k) noexcept nogil:
1921
+ if isinf(self.parameters.control.ktschnee):
1922
+ return inf
1923
+ return self.parameters.control.ktschnee * (self.sequences.aides.temps[k] - self.sequences.fluxes.tempssurface[k])
1924
+ cpdef inline double return_temps_v1(self, numpy.int64_t k) noexcept nogil:
1925
+ cdef double d_water
1926
+ cdef double d_ice
1927
+ if self.sequences.states.waes[k] > 0.0:
1928
+ d_ice = self.parameters.fixed.cpeis * self.sequences.states.wats[k]
1929
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.states.waes[k] - self.sequences.states.wats[k])
1930
+ return max(self.sequences.states.esnow[k] / (d_ice + d_water), -273.0)
1931
+ return nan
1932
+ cpdef inline double return_wg_v1(self, numpy.int64_t k) noexcept nogil:
1933
+ cdef double d_temp
1934
+ if self.sequences.states.waes[k] > 0.0:
1935
+ d_temp = self.sequences.aides.temps[k]
1936
+ else:
1937
+ d_temp = self.sequences.fluxes.tkor[k]
1938
+ return self.parameters.fixed.lambdag * (self.sequences.fluxes.tz[k] - d_temp) / self.parameters.fixed.z
1939
+ cpdef inline double return_backwardeulererror_v1(self, double esnow) noexcept nogil:
1940
+ cdef double d_esnow_old
1941
+ cdef numpy.int64_t k
1942
+ k = self.idx_hru
1943
+ if self.sequences.states.waes[k] > 0.0:
1944
+ d_esnow_old = self.sequences.states.esnow[k]
1945
+ self.sequences.states.esnow[k] = esnow
1946
+ self.sequences.aides.temps[k] = self.return_temps_v1(k)
1947
+ self.sequences.states.esnow[k] = d_esnow_old
1948
+ self.return_tempssurface_v1(k)
1949
+ self.sequences.fluxes.wg[k] = self.return_wg_v1(k)
1950
+ return d_esnow_old - esnow + self.sequences.fluxes.wg[k] - self.sequences.fluxes.wsurf[k]
1951
+ return nan
1952
+ cpdef inline double return_esnow_v1(self, numpy.int64_t k, double temps) noexcept nogil:
1953
+ cdef double d_water
1954
+ cdef double d_ice
1955
+ d_ice = self.parameters.fixed.cpeis * self.sequences.states.wats[k]
1956
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.states.waes[k] - self.sequences.states.wats[k])
1957
+ return temps * (d_ice + d_water)
1958
+ cpdef inline double return_tempssurface_v1(self, numpy.int64_t k) noexcept nogil:
1959
+ if self.sequences.states.waes[k] > 0.0:
1960
+ if isinf(self.parameters.control.ktschnee):
1961
+ self.idx_hru = k
1962
+ self.return_energygainsnowsurface_v1(self.sequences.aides.temps[k])
1963
+ self.sequences.fluxes.wsurf[k] = ( self.sequences.fluxes.wsenssnow[k] + self.sequences.fluxes.wlatsnow[k] - self.sequences.fluxes.netradiationsnow[k] )
1964
+ else:
1965
+ self.idx_hru = k
1966
+ self.pegasustempssurface.find_x(-50.0, 0.0, -100.0, 0.0, 0.0, 1e-8, 10)
1967
+ self.sequences.fluxes.wsurf[k] = self.sequences.fluxes.wsurf[k] - (self.return_energygainsnowsurface_v1( self.sequences.fluxes.tempssurface[k] ))
1968
+ else:
1969
+ self.sequences.fluxes.tempssurface[k] = nan
1970
+ self.sequences.fluxes.saturationvapourpressuresnow[k] = 0.0
1971
+ self.sequences.fluxes.wsenssnow[k] = 0.0
1972
+ self.sequences.fluxes.wlatsnow[k] = 0.0
1973
+ self.sequences.fluxes.wsurf[k] = 0.0
1974
+ return self.sequences.fluxes.tempssurface[k]
1975
+ cpdef inline double return_sg_v1(self, double k, double s, double qz, double dt) noexcept nogil:
1976
+ if k <= 0.0:
1977
+ return 0.0
1978
+ if isinf(k):
1979
+ return s + qz
1980
+ return k * qz - (k * qz - s) * exp(-dt / k)
1981
+ cpdef inline void calc_bowa_default_v1(self) noexcept nogil:
1982
+ cdef double d_factor
1983
+ cdef double d_rvl
1984
+ cdef double d_incr
1985
+ cdef double d_decr
1986
+ cdef numpy.int64_t k
1987
+ for k in range(self.parameters.control.nhru):
1988
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
1989
+ self.sequences.states.bowa[k] = 0.0
1990
+ else:
1991
+ d_decr = self.sequences.fluxes.qbb[k] + self.sequences.fluxes.qib1[k] + self.sequences.fluxes.qib2[k] + self.sequences.fluxes.qdb[k]
1992
+ d_incr = self.sequences.fluxes.wada[k] + self.sequences.fluxes.qkap[k]
1993
+ if self.sequences.fluxes.evb[k] > 0.0:
1994
+ d_decr = d_decr + (self.sequences.fluxes.evb[k])
1995
+ else:
1996
+ d_incr = d_incr - (self.sequences.fluxes.evb[k])
1997
+ if d_decr > self.sequences.states.bowa[k] + d_incr:
1998
+ d_rvl = (self.sequences.states.bowa[k] + d_incr) / d_decr
1999
+ if self.sequences.fluxes.evb[k] > 0.0:
2000
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (d_rvl)
2001
+ self.sequences.fluxes.qbb[k] = self.sequences.fluxes.qbb[k] * (d_rvl)
2002
+ self.sequences.fluxes.qib1[k] = self.sequences.fluxes.qib1[k] * (d_rvl)
2003
+ self.sequences.fluxes.qib2[k] = self.sequences.fluxes.qib2[k] * (d_rvl)
2004
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.qdb[k] * (d_rvl)
2005
+ self.sequences.states.bowa[k] = 0.0
2006
+ else:
2007
+ self.sequences.states.bowa[k] = (self.sequences.states.bowa[k] + d_incr) - d_decr
2008
+ if self.sequences.states.bowa[k] > self.parameters.control.wmax[k]:
2009
+ d_factor = (self.sequences.states.bowa[k] - self.parameters.control.wmax[k]) / d_incr
2010
+ if self.sequences.fluxes.evb[k] < 0.0:
2011
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (d_factor)
2012
+ self.sequences.fluxes.wada[k] = self.sequences.fluxes.wada[k] * (d_factor)
2013
+ self.sequences.fluxes.qkap[k] = self.sequences.fluxes.qkap[k] * (d_factor)
2014
+ self.sequences.states.bowa[k] = self.parameters.control.wmax[k]
2015
+ cpdef inline void calc_bowa_soilmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
2016
+ cdef double removal
2017
+ cdef double demand
2018
+ cdef double factor
2019
+ cdef double addition
2020
+ cdef double supply
2021
+ cdef double qbb_soilmodel
2022
+ cdef double infiltration
2023
+ cdef numpy.int64_t k
2024
+ for k in range(self.parameters.control.nhru):
2025
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
2026
+ self.sequences.states.bowa[k] = 0.0
2027
+ else:
2028
+ submodel.set_initialsurfacewater(k, self.sequences.fluxes.wada[k])
2029
+ submodel.set_actualsurfacewater(k, self.sequences.fluxes.wada[k] - self.sequences.fluxes.qdb[k])
2030
+ submodel.set_soilwatersupply(k, 0.0)
2031
+ submodel.set_soilwaterdemand(k, 0.0)
2032
+ submodel.execute_infiltration(k)
2033
+ infiltration = submodel.get_infiltration(k)
2034
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.qdb[k] + ((self.sequences.fluxes.wada[k] - self.sequences.fluxes.qdb[k]) - infiltration)
2035
+ qbb_soilmodel = submodel.get_percolation(k)
2036
+ supply = self.sequences.fluxes.qkap[k]
2037
+ if self.sequences.fluxes.evb[k] < 0.0:
2038
+ supply = supply - (self.sequences.fluxes.evb[k])
2039
+ submodel.set_soilwatersupply(k, supply)
2040
+ submodel.add_soilwater(k)
2041
+ addition = submodel.get_soilwateraddition(k)
2042
+ if addition < supply:
2043
+ factor = addition / supply
2044
+ self.sequences.fluxes.qkap[k] = self.sequences.fluxes.qkap[k] * (factor)
2045
+ if self.sequences.fluxes.evb[k] < 0.0:
2046
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (factor)
2047
+ demand = self.sequences.fluxes.qbb[k] + self.sequences.fluxes.qib1[k] + self.sequences.fluxes.qib2[k]
2048
+ if self.sequences.fluxes.evb[k] > 0.0:
2049
+ demand = demand + (self.sequences.fluxes.evb[k])
2050
+ submodel.set_soilwaterdemand(k, demand)
2051
+ submodel.remove_soilwater(k)
2052
+ removal = submodel.get_soilwaterremoval(k)
2053
+ if removal < demand:
2054
+ factor = removal / demand
2055
+ self.sequences.fluxes.qbb[k] = self.sequences.fluxes.qbb[k] * (factor)
2056
+ self.sequences.fluxes.qib1[k] = self.sequences.fluxes.qib1[k] * (factor)
2057
+ self.sequences.fluxes.qib2[k] = self.sequences.fluxes.qib2[k] * (factor)
2058
+ if self.sequences.fluxes.evb[k] > 0.0:
2059
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (factor)
2060
+ self.sequences.states.bowa[k] = submodel.get_soilwatercontent(k)
2061
+ self.sequences.fluxes.qbb[k] = self.sequences.fluxes.qbb[k] + (qbb_soilmodel)
2062
+ cpdef inline void calc_evi_inzp_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
2063
+ cdef numpy.int64_t k
2064
+ submodel.determine_interceptionevaporation()
2065
+ submodel.determine_waterevaporation()
2066
+ for k in range(self.parameters.control.nhru):
2067
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2068
+ self.sequences.fluxes.evi[k] = submodel.get_waterevaporation(k)
2069
+ self.sequences.states.inzp[k] = 0.0
2070
+ else:
2071
+ self.sequences.fluxes.evi[k] = min(submodel.get_interceptionevaporation(k), self.sequences.states.inzp[k])
2072
+ self.sequences.states.inzp[k] = self.sequences.states.inzp[k] - (self.sequences.fluxes.evi[k])
2073
+ cpdef inline void calc_evb_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
2074
+ cdef numpy.int64_t k
2075
+ submodel.determine_soilevapotranspiration()
2076
+ for k in range(self.parameters.control.nhru):
2077
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
2078
+ self.sequences.fluxes.evb[k] = 0.0
2079
+ else:
2080
+ self.sequences.fluxes.evb[k] = submodel.get_soilevapotranspiration(k)
2081
+ cpdef inline void pass_qa_v1(self) noexcept nogil:
2082
+ self.sequences.outlets.q[0] = self.sequences.outlets.q[0] + (self.sequences.fluxes.qa)
2083
+ cpdef inline void pick_qz(self) noexcept nogil:
2084
+ cdef numpy.int64_t idx
2085
+ self.sequences.fluxes.qz = 0.0
2086
+ for idx in range(self.sequences.inlets.len_q):
2087
+ self.sequences.fluxes.qz = self.sequences.fluxes.qz + (self.sequences.inlets.q[idx][0])
2088
+ cpdef inline void process_radiationmodel(self) noexcept nogil:
2089
+ if self.radiationmodel_typeid == 1:
2090
+ (<masterinterface.MasterInterface>self.radiationmodel).process_radiation()
2091
+ cpdef inline void calc_possiblesunshineduration(self) noexcept nogil:
2092
+ if self.radiationmodel_typeid == 1:
2093
+ self.sequences.factors.possiblesunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_possiblesunshineduration()
2094
+ elif self.radiationmodel_typeid == 4:
2095
+ self.sequences.factors.possiblesunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_possiblesunshineduration()
2096
+ cpdef inline void calc_sunshineduration(self) noexcept nogil:
2097
+ if self.radiationmodel_typeid == 1:
2098
+ self.sequences.factors.sunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_sunshineduration()
2099
+ elif self.radiationmodel_typeid == 4:
2100
+ self.sequences.factors.sunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_sunshineduration()
2101
+ cpdef inline void calc_globalradiation(self) noexcept nogil:
2102
+ if self.radiationmodel_typeid == 1:
2103
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
2104
+ elif self.radiationmodel_typeid == 4:
2105
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
2106
+ cpdef inline void calc_qzh(self) noexcept nogil:
2107
+ self.sequences.fluxes.qzh = self.sequences.fluxes.qz / self.parameters.derived.qfactor
2108
+ cpdef inline void update_loggedsunshineduration(self) noexcept nogil:
2109
+ cdef numpy.int64_t idx
2110
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
2111
+ self.sequences.logs.loggedsunshineduration[idx] = self.sequences.logs.loggedsunshineduration[idx - 1]
2112
+ self.sequences.logs.loggedsunshineduration[0] = self.sequences.factors.sunshineduration
2113
+ cpdef inline void calc_dailysunshineduration(self) noexcept nogil:
2114
+ cdef numpy.int64_t idx
2115
+ self.sequences.fluxes.dailysunshineduration = 0.0
2116
+ for idx in range(self.parameters.derived.nmblogentries):
2117
+ self.sequences.fluxes.dailysunshineduration = self.sequences.fluxes.dailysunshineduration + (self.sequences.logs.loggedsunshineduration[idx])
2118
+ cpdef inline void update_loggedpossiblesunshineduration(self) noexcept nogil:
2119
+ cdef numpy.int64_t idx
2120
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
2121
+ self.sequences.logs.loggedpossiblesunshineduration[idx] = ( self.sequences.logs.loggedpossiblesunshineduration[idx - 1] )
2122
+ self.sequences.logs.loggedpossiblesunshineduration[0] = self.sequences.factors.possiblesunshineduration
2123
+ cpdef inline void calc_dailypossiblesunshineduration(self) noexcept nogil:
2124
+ cdef numpy.int64_t idx
2125
+ self.sequences.fluxes.dailypossiblesunshineduration = 0.0
2126
+ for idx in range(self.parameters.derived.nmblogentries):
2127
+ self.sequences.fluxes.dailypossiblesunshineduration = self.sequences.fluxes.dailypossiblesunshineduration + (self.sequences.logs.loggedpossiblesunshineduration[idx])
2128
+ cpdef inline void calc_nkor(self) noexcept nogil:
2129
+ cdef numpy.int64_t k
2130
+ for k in range(self.parameters.control.nhru):
2131
+ self.sequences.fluxes.nkor[k] = self.parameters.control.kg[k] * self.sequences.inputs.nied
2132
+ cpdef inline void calc_tkor(self) noexcept nogil:
2133
+ cdef numpy.int64_t k
2134
+ for k in range(self.parameters.control.nhru):
2135
+ self.sequences.fluxes.tkor[k] = self.parameters.control.kt[k] + self.sequences.inputs.teml
2136
+ cpdef inline void calc_windspeed2m(self) noexcept nogil:
2137
+ self.sequences.fluxes.windspeed2m = self.sequences.inputs.windspeed * ( log(2.0 / self.parameters.fixed.z0) / log(self.parameters.control.measuringheightwindspeed / self.parameters.fixed.z0) )
2138
+ cpdef inline void calc_reducedwindspeed2m(self) noexcept nogil:
2139
+ cdef double d_lai
2140
+ cdef numpy.int64_t k
2141
+ for k in range(self.parameters.control.nhru):
2142
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2143
+ d_lai = self.parameters.control.lai[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]]
2144
+ self.sequences.fluxes.reducedwindspeed2m[k] = ( max(self.parameters.control.p1wind - self.parameters.control.p2wind * d_lai, 0.0) * self.sequences.fluxes.windspeed2m )
2145
+ else:
2146
+ self.sequences.fluxes.reducedwindspeed2m[k] = self.sequences.fluxes.windspeed2m
2147
+ cpdef inline void calc_saturationvapourpressure(self) noexcept nogil:
2148
+ cdef numpy.int64_t k
2149
+ for k in range(self.parameters.control.nhru):
2150
+ self.sequences.fluxes.saturationvapourpressure[k] = self.return_saturationvapourpressure_v1( self.sequences.fluxes.tkor[k] )
2151
+ cpdef inline void calc_actualvapourpressure(self) noexcept nogil:
2152
+ cdef numpy.int64_t k
2153
+ for k in range(self.parameters.control.nhru):
2154
+ self.sequences.fluxes.actualvapourpressure[k] = ( self.sequences.fluxes.saturationvapourpressure[k] * self.sequences.inputs.relativehumidity / 100.0 )
2155
+ cpdef inline void calc_nbes_inzp(self) noexcept nogil:
2156
+ cdef numpy.int64_t k
2157
+ for k in range(self.parameters.control.nhru):
2158
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2159
+ self.sequences.fluxes.nbes[k] = 0.0
2160
+ self.sequences.states.inzp[k] = 0.0
2161
+ else:
2162
+ 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, )
2163
+ self.sequences.states.inzp[k] = self.sequences.states.inzp[k] + (self.sequences.fluxes.nkor[k] - self.sequences.fluxes.nbes[k])
2164
+ cpdef inline void calc_snratio(self) noexcept nogil:
2165
+ cdef numpy.int64_t k
2166
+ for k in range(self.parameters.control.nhru):
2167
+ if self.sequences.fluxes.tkor[k] >= (self.parameters.control.tgr[k] + self.parameters.control.tsp[k] / 2.0):
2168
+ self.sequences.aides.snratio[k] = 0.0
2169
+ elif self.sequences.fluxes.tkor[k] <= (self.parameters.control.tgr[k] - self.parameters.control.tsp[k] / 2.0):
2170
+ self.sequences.aides.snratio[k] = 1.0
2171
+ else:
2172
+ 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]
2173
+ cpdef inline void calc_sbes(self) noexcept nogil:
2174
+ cdef numpy.int64_t k
2175
+ for k in range(self.parameters.control.nhru):
2176
+ self.sequences.fluxes.sbes[k] = self.sequences.aides.snratio[k] * self.sequences.fluxes.nbes[k]
2177
+ cpdef inline void calc_wats(self) noexcept nogil:
2178
+ cdef numpy.int64_t k
2179
+ for k in range(self.parameters.control.nhru):
2180
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2181
+ self.sequences.states.wats[k] = 0.0
2182
+ else:
2183
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] + (self.sequences.fluxes.sbes[k])
2184
+ cpdef inline void calc_wada_waes(self) noexcept nogil:
2185
+ cdef numpy.int64_t k
2186
+ for k in range(self.parameters.control.nhru):
2187
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2188
+ self.sequences.states.waes[k] = 0.0
2189
+ self.sequences.fluxes.wada[k] = self.sequences.fluxes.nbes[k]
2190
+ else:
2191
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] + (self.sequences.fluxes.nbes[k])
2192
+ self.sequences.fluxes.wada[k] = max(self.sequences.states.waes[k] - self.parameters.control.pwmax[k] * self.sequences.states.wats[k], 0.0)
2193
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] - (self.sequences.fluxes.wada[k])
2194
+ cpdef inline void calc_wnied_esnow(self) noexcept nogil:
2195
+ cdef double d_water
2196
+ cdef double d_ice
2197
+ cdef numpy.int64_t k
2198
+ for k in range(self.parameters.control.nhru):
2199
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2200
+ self.sequences.fluxes.wnied[k] = 0.0
2201
+ self.sequences.states.esnow[k] = 0.0
2202
+ else:
2203
+ d_ice = self.parameters.fixed.cpeis * self.sequences.fluxes.sbes[k]
2204
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.fluxes.nbes[k] - self.sequences.fluxes.sbes[k] - self.sequences.fluxes.wada[k])
2205
+ self.sequences.fluxes.wnied[k] = (self.sequences.fluxes.tkor[k] - self.parameters.control.trefn[k]) * (d_ice + d_water)
2206
+ self.sequences.states.esnow[k] = self.sequences.states.esnow[k] + (self.sequences.fluxes.wnied[k])
2207
+ cpdef inline void calc_temps(self) noexcept nogil:
2208
+ cdef numpy.int64_t k
2209
+ for k in range(self.parameters.control.nhru):
2210
+ self.sequences.aides.temps[k] = self.return_temps_v1(k)
2211
+ cpdef inline void update_taus(self) noexcept nogil:
2212
+ cdef double d_r2
2213
+ cdef double d_r1
2214
+ cdef numpy.int64_t k
2215
+ for k in range(self.parameters.control.nhru):
2216
+ if self.sequences.states.waes[k] > 0:
2217
+ if isnan(self.sequences.states.taus[k]):
2218
+ self.sequences.states.taus[k] = 0.0
2219
+ d_r1 = exp( 5000.0 * (1 / 273.15 - 1.0 / (273.15 + self.sequences.aides.temps[k])) )
2220
+ d_r2 = min(d_r1**10, 1.0)
2221
+ self.sequences.states.taus[k] = self.sequences.states.taus[k] * (max(1 - 0.1 * self.sequences.fluxes.sbes[k], 0.0))
2222
+ self.sequences.states.taus[k] = self.sequences.states.taus[k] + ((d_r1 + d_r2 + 0.03) / 1e6 * self.parameters.derived.seconds)
2223
+ else:
2224
+ self.sequences.states.taus[k] = nan
2225
+ cpdef inline void calc_actualalbedo(self) noexcept nogil:
2226
+ cdef numpy.int64_t k
2227
+ for k in range(self.parameters.control.nhru):
2228
+ if self.sequences.states.waes[k] > 0.0:
2229
+ 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]) )
2230
+ else:
2231
+ self.sequences.fluxes.actualalbedo[k] = nan
2232
+ cpdef inline void calc_netshortwaveradiationsnow(self) noexcept nogil:
2233
+ cdef numpy.int64_t k
2234
+ for k in range(self.parameters.control.nhru):
2235
+ if isnan(self.sequences.fluxes.actualalbedo[k]):
2236
+ self.sequences.fluxes.netshortwaveradiationsnow[k] = 0.0
2237
+ else:
2238
+ 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 )
2239
+ cpdef inline void calc_rlatm(self) noexcept nogil:
2240
+ cdef double d_t
2241
+ cdef numpy.int64_t k
2242
+ cdef double d_common
2243
+ cdef double d_rs
2244
+ d_rs = self.sequences.fluxes.dailysunshineduration / self.sequences.fluxes.dailypossiblesunshineduration
2245
+ d_common = self.parameters.fixed.fratm * self.parameters.fixed.sigma * (1.0 + 0.22 * (1.0 - d_rs) ** 2)
2246
+ for k in range(self.parameters.control.nhru):
2247
+ d_t = self.sequences.fluxes.tkor[k] + 273.15
2248
+ self.sequences.aides.rlatm[k] = d_common * ( d_t**4 * (self.sequences.fluxes.actualvapourpressure[k] / d_t) ** (1.0 / 7.0) )
2249
+ cpdef inline void calc_tz(self) noexcept nogil:
2250
+ cdef numpy.int64_t k
2251
+ for k in range(self.parameters.control.nhru):
2252
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2253
+ self.sequences.fluxes.tz[k] = nan
2254
+ elif self.sequences.states.ebdn[k] < 0.0:
2255
+ self.sequences.fluxes.tz[k] = self.sequences.states.ebdn[k] / (2.0 * self.parameters.fixed.z * self.parameters.fixed.cg)
2256
+ elif self.sequences.states.ebdn[k] < self.parameters.derived.heatoffusion[k]:
2257
+ self.sequences.fluxes.tz[k] = 0.0
2258
+ else:
2259
+ 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)
2260
+ cpdef inline void calc_wg(self) noexcept nogil:
2261
+ cdef numpy.int64_t k
2262
+ for k in range(self.parameters.control.nhru):
2263
+ if self.parameters.control.lnk[k] in (FLUSS, SEE, WASSER):
2264
+ self.sequences.fluxes.wg[k] = 0.0
2265
+ else:
2266
+ self.sequences.fluxes.wg[k] = self.return_wg_v1(k)
2267
+ cpdef inline void calc_schmpot(self) noexcept nogil:
2268
+ cdef numpy.int64_t k
2269
+ for k in range(self.parameters.control.nhru):
2270
+ if self.sequences.states.waes[k] > 0.0:
2271
+ self.sequences.fluxes.schmpot[k] = max(self.sequences.states.esnow[k] / self.parameters.fixed.rschmelz, 0.0)
2272
+ else:
2273
+ self.sequences.fluxes.schmpot[k] = 0.0
2274
+ cpdef inline void calc_schm_wats(self) noexcept nogil:
2275
+ cdef numpy.int64_t k
2276
+ for k in range(self.parameters.control.nhru):
2277
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2278
+ self.sequences.fluxes.schm[k] = 0.0
2279
+ else:
2280
+ self.sequences.fluxes.schm[k] = min(self.sequences.fluxes.schmpot[k], self.sequences.states.wats[k])
2281
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] - (self.sequences.fluxes.schm[k])
2282
+ cpdef inline void calc_gefrpot(self) noexcept nogil:
2283
+ cdef numpy.int64_t k
2284
+ for k in range(self.parameters.control.nhru):
2285
+ if self.sequences.states.waes[k] > 0:
2286
+ self.sequences.fluxes.gefrpot[k] = max(-self.sequences.states.esnow[k] / self.parameters.fixed.rschmelz, 0)
2287
+ else:
2288
+ self.sequences.fluxes.gefrpot[k] = 0.0
2289
+ cpdef inline void calc_gefr_wats(self) noexcept nogil:
2290
+ cdef numpy.int64_t k
2291
+ for k in range(self.parameters.control.nhru):
2292
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE) or not self.parameters.control.refreezeflag:
2293
+ self.sequences.fluxes.gefr[k] = 0.0
2294
+ else:
2295
+ self.sequences.fluxes.gefr[k] = min(self.sequences.fluxes.gefrpot[k], (self.sequences.states.waes[k] - self.sequences.states.wats[k]))
2296
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] + (self.sequences.fluxes.gefr[k])
2297
+ cpdef inline void calc_evs_waes_wats(self) noexcept nogil:
2298
+ cdef double d_frac
2299
+ cdef numpy.int64_t k
2300
+ for k in range(self.parameters.control.nhru):
2301
+ if self.parameters.control.lnk[k] in (WASSER, SEE, FLUSS) or (self.sequences.states.waes[k] <= 0.0):
2302
+ self.sequences.fluxes.evs[k] = 0.0
2303
+ self.sequences.states.waes[k] = 0.0
2304
+ self.sequences.states.wats[k] = 0.0
2305
+ else:
2306
+ self.sequences.fluxes.evs[k] = min(self.sequences.fluxes.wlatsnow[k] / self.parameters.fixed.lwe, self.sequences.states.waes[k])
2307
+ d_frac = (self.sequences.states.waes[k] - self.sequences.fluxes.evs[k]) / self.sequences.states.waes[k]
2308
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] * (d_frac)
2309
+ self.sequences.states.wats[k] = self.sequences.states.wats[k] * (d_frac)
2310
+ cpdef inline void update_wada_waes(self) noexcept nogil:
2311
+ cdef double d_wada_corr
2312
+ cdef numpy.int64_t k
2313
+ for k in range(self.parameters.control.nhru):
2314
+ if self.parameters.control.lnk[k] not in (WASSER, FLUSS, SEE):
2315
+ d_wada_corr = max(self.sequences.states.waes[k] - self.parameters.control.pwmax[k] * self.sequences.states.wats[k], 0.0)
2316
+ self.sequences.fluxes.wada[k] = self.sequences.fluxes.wada[k] + (d_wada_corr)
2317
+ self.sequences.states.waes[k] = self.sequences.states.waes[k] - (d_wada_corr)
2318
+ cpdef inline void calc_evi_inzp(self) noexcept nogil:
2319
+ if self.aetmodel_typeid == 1:
2320
+ self.calc_evi_inzp_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
2321
+ cpdef inline void calc_evb(self) noexcept nogil:
2322
+ if self.aetmodel_typeid == 1:
2323
+ self.calc_evb_aetmodel_v1((<masterinterface.MasterInterface>self.aetmodel))
2324
+ cpdef inline void update_ebdn(self) noexcept nogil:
2325
+ cdef numpy.int64_t k
2326
+ for k in range(self.parameters.control.nhru):
2327
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2328
+ self.sequences.states.ebdn[k] = 0.0
2329
+ else:
2330
+ 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])
2331
+ cpdef inline void calc_sff(self) noexcept nogil:
2332
+ cdef double d_sff
2333
+ cdef numpy.int64_t k
2334
+ for k in range(self.parameters.control.nhru):
2335
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
2336
+ self.sequences.fluxes.sff[k] = 0.0
2337
+ else:
2338
+ d_sff = 1.0 - self.sequences.states.ebdn[k] / (self.parameters.fixed.bowa2z[k] * self.parameters.fixed.rschmelz)
2339
+ self.sequences.fluxes.sff[k] = min(max(d_sff, 0.0), 1.0)
2340
+ cpdef inline void calc_fvg(self) noexcept nogil:
2341
+ cdef numpy.int64_t k
2342
+ for k in range(self.parameters.control.nhru):
2343
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
2344
+ self.sequences.fluxes.fvg[k] = 0.0
2345
+ else:
2346
+ self.sequences.fluxes.fvg[k] = min(self.parameters.control.fvf * self.sequences.fluxes.sff[k] ** self.parameters.control.bsff, 1.0)
2347
+ cpdef inline void calc_qkap(self) noexcept nogil:
2348
+ cdef numpy.int64_t k
2349
+ for k in range(self.parameters.control.nhru):
2350
+ if (self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE)) or (self.parameters.control.wmax[k] <= 0.0):
2351
+ self.sequences.fluxes.qkap[k] = 0.0
2352
+ elif self.sequences.states.bowa[k] <= self.parameters.control.kapgrenz[k, 0]:
2353
+ self.sequences.fluxes.qkap[k] = self.parameters.control.kapmax[k]
2354
+ elif self.sequences.states.bowa[k] <= self.parameters.control.kapgrenz[k, 1]:
2355
+ 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]) )
2356
+ else:
2357
+ self.sequences.fluxes.qkap[k] = 0
2358
+ cpdef inline void calc_qbb(self) noexcept nogil:
2359
+ cdef numpy.int64_t k
2360
+ for k in range(self.parameters.control.nhru):
2361
+ 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) ):
2362
+ self.sequences.fluxes.qbb[k] = 0.0
2363
+ elif self.sequences.states.bowa[k] <= self.parameters.control.fk[k]:
2364
+ if self.parameters.control.rbeta:
2365
+ self.sequences.fluxes.qbb[k] = 0.0
2366
+ else:
2367
+ self.sequences.fluxes.qbb[k] = self.parameters.control.beta[k] * (self.sequences.states.bowa[k] - self.parameters.control.pwp[k])
2368
+ else:
2369
+ 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]) ) )
2370
+ cpdef inline void calc_qib1(self) noexcept nogil:
2371
+ cdef numpy.int64_t k
2372
+ for k in range(self.parameters.control.nhru):
2373
+ if (self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE)) or ( self.sequences.states.bowa[k] <= self.parameters.control.pwp[k] ):
2374
+ self.sequences.fluxes.qib1[k] = 0.0
2375
+ else:
2376
+ self.sequences.fluxes.qib1[k] = self.parameters.control.dmin[k] * (self.sequences.states.bowa[k] / self.parameters.control.wmax[k])
2377
+ cpdef inline void calc_qib2(self) noexcept nogil:
2378
+ cdef numpy.int64_t k
2379
+ for k in range(self.parameters.control.nhru):
2380
+ 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]) ):
2381
+ self.sequences.fluxes.qib2[k] = 0.0
2382
+ else:
2383
+ 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
2384
+ cpdef inline void calc_qdb(self) noexcept nogil:
2385
+ cdef double d_exz
2386
+ cdef double d_sfa
2387
+ cdef numpy.int64_t k
2388
+ for k in range(self.parameters.control.nhru):
2389
+ if self.parameters.control.lnk[k] == WASSER:
2390
+ self.sequences.fluxes.qdb[k] = 0.0
2391
+ elif (self.parameters.control.lnk[k] in (VERS, FLUSS, SEE)) or (self.parameters.control.wmax[k] <= 0.0):
2392
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.wada[k]
2393
+ else:
2394
+ if self.sequences.states.bowa[k] < self.parameters.control.wmax[k]:
2395
+ 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]))
2396
+ else:
2397
+ d_sfa = 0.0
2398
+ d_exz = self.sequences.states.bowa[k] + self.sequences.fluxes.wada[k] - self.parameters.control.wmax[k]
2399
+ self.sequences.fluxes.qdb[k] = d_exz
2400
+ if d_sfa > 0.0:
2401
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.qdb[k] + (d_sfa ** (self.parameters.control.bsf[k] + 1.0) * self.parameters.control.wmax[k])
2402
+ self.sequences.fluxes.qdb[k] = max(self.sequences.fluxes.qdb[k], 0.0)
2403
+ cpdef inline void update_qdb(self) noexcept nogil:
2404
+ cdef numpy.int64_t k
2405
+ for k in range(self.parameters.control.nhru):
2406
+ 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]))
2407
+ cpdef inline void calc_bowa(self) noexcept nogil:
2408
+ if self.soilmodel is None:
2409
+ self.calc_bowa_default_v1()
2410
+ elif self.soilmodel_typeid == 1:
2411
+ self.calc_bowa_soilmodel_v1( (<masterinterface.MasterInterface>self.soilmodel) )
2412
+ cpdef inline void calc_qbgz(self) noexcept nogil:
2413
+ cdef numpy.int64_t k
2414
+ self.sequences.fluxes.qbgz = 0.0
2415
+ for k in range(self.parameters.control.nhru):
2416
+ if self.parameters.control.lnk[k] == SEE:
2417
+ self.sequences.fluxes.qbgz = self.sequences.fluxes.qbgz + (self.parameters.control.fhru[k] * (self.sequences.fluxes.nkor[k] - self.sequences.fluxes.evi[k]))
2418
+ elif self.parameters.control.lnk[k] not in (WASSER, FLUSS, VERS):
2419
+ self.sequences.fluxes.qbgz = self.sequences.fluxes.qbgz + (self.parameters.control.fhru[k] * (self.sequences.fluxes.qbb[k] - self.sequences.fluxes.qkap[k]))
2420
+ cpdef inline void calc_qigz1(self) noexcept nogil:
2421
+ cdef numpy.int64_t k
2422
+ self.sequences.fluxes.qigz1 = 0.0
2423
+ for k in range(self.parameters.control.nhru):
2424
+ self.sequences.fluxes.qigz1 = self.sequences.fluxes.qigz1 + (self.parameters.control.fhru[k] * self.sequences.fluxes.qib1[k])
2425
+ cpdef inline void calc_qigz2(self) noexcept nogil:
2426
+ cdef numpy.int64_t k
2427
+ self.sequences.fluxes.qigz2 = 0.0
2428
+ for k in range(self.parameters.control.nhru):
2429
+ self.sequences.fluxes.qigz2 = self.sequences.fluxes.qigz2 + (self.parameters.control.fhru[k] * self.sequences.fluxes.qib2[k])
2430
+ cpdef inline void calc_qdgz(self) noexcept nogil:
2431
+ cdef numpy.int64_t k
2432
+ self.sequences.fluxes.qdgz = 0.0
2433
+ for k in range(self.parameters.control.nhru):
2434
+ if self.parameters.control.lnk[k] == FLUSS:
2435
+ self.sequences.fluxes.qdgz = self.sequences.fluxes.qdgz + (self.parameters.control.fhru[k] * (self.sequences.fluxes.nkor[k] - self.sequences.fluxes.evi[k]))
2436
+ elif self.parameters.control.lnk[k] not in (WASSER, SEE):
2437
+ self.sequences.fluxes.qdgz = self.sequences.fluxes.qdgz + (self.parameters.control.fhru[k] * self.sequences.fluxes.qdb[k])
2438
+ cpdef inline void calc_qbga_sbg_qbgz_qdgz(self) noexcept nogil:
2439
+ cdef double qbgz
2440
+ cdef double tt
2441
+ cdef double c2
2442
+ cdef double c1
2443
+ cdef double st
2444
+ cdef double fraction
2445
+ cdef double t
2446
+ cdef double excess
2447
+ cdef double z
2448
+ cdef double s0
2449
+ cdef double g2
2450
+ cdef double g1
2451
+ cdef double sm
2452
+ cdef double k
2453
+ k = self.parameters.derived.kb
2454
+ sm = self.parameters.control.gsbmax * self.parameters.control.volbmax
2455
+ g1 = self.parameters.control.gsbgrad1
2456
+ g2 = self.parameters.control.gsbgrad2
2457
+ s0 = self.sequences.old_states.sbg
2458
+ z = self.sequences.fluxes.qbgz
2459
+ if s0 > sm:
2460
+ excess = s0 - sm
2461
+ s0 = sm
2462
+ else:
2463
+ excess = 0.0
2464
+ if k == 0.0:
2465
+ self.sequences.new_states.sbg = 0.0
2466
+ self.sequences.fluxes.qbga = s0 + self.sequences.fluxes.qbgz
2467
+ elif z - s0 / k <= g1:
2468
+ if isinf(k):
2469
+ self.sequences.new_states.sbg = min(s0 + z, sm)
2470
+ self.sequences.fluxes.qbga = 0.0
2471
+ else:
2472
+ if isinf(sm):
2473
+ t = 1.0
2474
+ else:
2475
+ fraction = (k * z - sm) / (k * z - s0)
2476
+ if fraction > 0.0:
2477
+ t = -k * log(fraction)
2478
+ else:
2479
+ t = 1.0
2480
+ if t < 1.0:
2481
+ self.sequences.new_states.sbg = sm
2482
+ self.sequences.fluxes.qbga = s0 - sm + t * self.sequences.fluxes.qbgz
2483
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + ((1.0 - t) * sm / k)
2484
+ else:
2485
+ self.sequences.new_states.sbg = self.return_sg_v1(k, s0, z, 1.0)
2486
+ self.sequences.fluxes.qbga = s0 - self.sequences.new_states.sbg + self.sequences.fluxes.qbgz
2487
+ elif g2 == 0.0:
2488
+ self.sequences.fluxes.qbga = s0 / k
2489
+ self.sequences.new_states.sbg = s0
2490
+ else:
2491
+ if isinf(k) and (g2 > g1):
2492
+ self.sequences.fluxes.qbga = 0.0
2493
+ self.sequences.new_states.sbg = s0 + g2 / ((g2 - g1) / z + 1.0)
2494
+ else:
2495
+ st = min(k * (z - g1), sm)
2496
+ if g1 == g2:
2497
+ t = min((st - s0) / g1, 1.0)
2498
+ self.sequences.fluxes.qbga = t * (g1 * t + 2.0 * s0) / (2.0 * k)
2499
+ else:
2500
+ c1 = (g2 - g1) / (g1 - g2 - z)
2501
+ c2 = (g2 * k * z) / (g1 - g2)
2502
+ t = min(k / c1 * log((st + c2) / (s0 + c2)), 1.0)
2503
+ self.sequences.fluxes.qbga = (s0 + c2) * ( exp(c1 * t / k) - 1.0 ) / c1 - c2 * t / k
2504
+ if t < 1.0:
2505
+ if st == sm:
2506
+ self.sequences.new_states.sbg = sm
2507
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + ((1.0 - t) * sm / k)
2508
+ else:
2509
+ fraction = (k * z - sm) / (k * z - st)
2510
+ if fraction > 0.0:
2511
+ tt = -k * log(fraction)
2512
+ else:
2513
+ tt = 1.0
2514
+ if t + tt < 1.0:
2515
+ self.sequences.new_states.sbg = sm
2516
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + (st - sm + tt * self.sequences.fluxes.qbgz)
2517
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + ((1.0 - t - tt) * sm / k)
2518
+ else:
2519
+ self.sequences.new_states.sbg = self.return_sg_v1(k, st, z, 1.0 - t)
2520
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + (st - self.sequences.new_states.sbg + (1.0 - t) * self.sequences.fluxes.qbgz)
2521
+ elif g1 == g2:
2522
+ self.sequences.new_states.sbg = s0 + g1
2523
+ else:
2524
+ self.sequences.new_states.sbg = (s0 + c2) * exp(1.0 / k * c1) - c2
2525
+ qbgz = self.sequences.fluxes.qbgz
2526
+ self.sequences.fluxes.qbgz = self.sequences.new_states.sbg - s0 + self.sequences.fluxes.qbga
2527
+ self.sequences.fluxes.qdgz = self.sequences.fluxes.qdgz + (qbgz - self.sequences.fluxes.qbgz)
2528
+ self.sequences.fluxes.qbga = self.sequences.fluxes.qbga + (excess)
2529
+ cpdef inline void calc_qiga1_sig1(self) noexcept nogil:
2530
+ self.sequences.new_states.sig1 = self.return_sg_v1(self.parameters.derived.ki1, self.sequences.old_states.sig1, self.sequences.fluxes.qigz1, 1.0)
2531
+ self.sequences.fluxes.qiga1 = self.sequences.old_states.sig1 - self.sequences.new_states.sig1 + self.sequences.fluxes.qigz1
2532
+ cpdef inline void calc_qiga2_sig2(self) noexcept nogil:
2533
+ self.sequences.new_states.sig2 = self.return_sg_v1(self.parameters.derived.ki2, self.sequences.old_states.sig2, self.sequences.fluxes.qigz2, 1.0)
2534
+ self.sequences.fluxes.qiga2 = self.sequences.old_states.sig2 - self.sequences.new_states.sig2 + self.sequences.fluxes.qigz2
2535
+ cpdef inline void calc_qdgz1_qdgz2(self) noexcept nogil:
2536
+ if self.sequences.fluxes.qdgz > self.parameters.control.a2:
2537
+ 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)
2538
+ self.sequences.fluxes.qdgz1 = self.sequences.fluxes.qdgz - self.sequences.fluxes.qdgz2
2539
+ else:
2540
+ self.sequences.fluxes.qdgz2 = 0.0
2541
+ self.sequences.fluxes.qdgz1 = self.sequences.fluxes.qdgz
2542
+ cpdef inline void calc_qdga1_sdg1(self) noexcept nogil:
2543
+ self.sequences.new_states.sdg1 = self.return_sg_v1(self.parameters.derived.kd1, self.sequences.old_states.sdg1, self.sequences.fluxes.qdgz1, 1.0)
2544
+ self.sequences.fluxes.qdga1 = self.sequences.old_states.sdg1 - self.sequences.new_states.sdg1 + self.sequences.fluxes.qdgz1
2545
+ cpdef inline void calc_qdga2_sdg2(self) noexcept nogil:
2546
+ self.sequences.new_states.sdg2 = self.return_sg_v1(self.parameters.derived.kd2, self.sequences.old_states.sdg2, self.sequences.fluxes.qdgz2, 1.0)
2547
+ self.sequences.fluxes.qdga2 = self.sequences.old_states.sdg2 - self.sequences.new_states.sdg2 + self.sequences.fluxes.qdgz2
2548
+ cpdef inline void calc_qah(self) noexcept nogil:
2549
+ cdef double d_epw
2550
+ cdef numpy.int64_t k
2551
+ cdef double d_area
2552
+ 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
2553
+ if (not self.parameters.control.negq) and (self.sequences.fluxes.qah < 0.0):
2554
+ d_area = 0.0
2555
+ for k in range(self.parameters.control.nhru):
2556
+ if self.parameters.control.lnk[k] in (FLUSS, SEE):
2557
+ d_area = d_area + (self.parameters.control.fhru[k])
2558
+ if d_area > 0.0:
2559
+ for k in range(self.parameters.control.nhru):
2560
+ if self.parameters.control.lnk[k] in (FLUSS, SEE):
2561
+ self.sequences.fluxes.evi[k] = self.sequences.fluxes.evi[k] + (self.sequences.fluxes.qah / d_area)
2562
+ self.sequences.fluxes.qah = 0.0
2563
+ d_epw = 0.0
2564
+ for k in range(self.parameters.control.nhru):
2565
+ if self.parameters.control.lnk[k] == WASSER:
2566
+ self.sequences.fluxes.qah = self.sequences.fluxes.qah + (self.parameters.control.fhru[k] * self.sequences.fluxes.nkor[k])
2567
+ d_epw = d_epw + (self.parameters.control.fhru[k] * self.sequences.fluxes.evi[k])
2568
+ if (self.sequences.fluxes.qah > d_epw) or self.parameters.control.negq:
2569
+ self.sequences.fluxes.qah = self.sequences.fluxes.qah - (d_epw)
2570
+ elif d_epw > 0.0:
2571
+ for k in range(self.parameters.control.nhru):
2572
+ if self.parameters.control.lnk[k] == WASSER:
2573
+ self.sequences.fluxes.evi[k] = self.sequences.fluxes.evi[k] * (self.sequences.fluxes.qah / d_epw)
2574
+ self.sequences.fluxes.qah = 0.0
2575
+ cpdef inline void calc_qa(self) noexcept nogil:
2576
+ self.sequences.fluxes.qa = self.parameters.derived.qfactor * self.sequences.fluxes.qah
2577
+ cpdef double get_temperature(self, numpy.int64_t s) noexcept nogil:
2578
+ return self.sequences.fluxes.tkor[s]
2579
+ cpdef double get_meantemperature(self) noexcept nogil:
2580
+ return self.sequences.inputs.teml
2581
+ cpdef double get_precipitation(self, numpy.int64_t s) noexcept nogil:
2582
+ return self.sequences.fluxes.nkor[s]
2583
+ cpdef double get_interceptedwater(self, numpy.int64_t k) noexcept nogil:
2584
+ return self.sequences.states.inzp[k]
2585
+ cpdef double get_soilwater(self, numpy.int64_t k) noexcept nogil:
2586
+ return self.sequences.states.bowa[k]
2587
+ cpdef double get_snowcover(self, numpy.int64_t k) noexcept nogil:
2588
+ if self.sequences.states.wats[k] > 0.0:
2589
+ return 1.0
2590
+ return 0.0
2591
+ cpdef double get_snowalbedo(self, numpy.int64_t k) noexcept nogil:
2592
+ return self.sequences.fluxes.actualalbedo[k]
2593
+ cpdef inline double return_netlongwaveradiationsnow(self, numpy.int64_t k) noexcept nogil:
2594
+ cdef double d_fr
2595
+ cdef double d_counter
2596
+ cdef double d_temp
2597
+ d_temp = self.sequences.fluxes.tkor[k] + 273.15
2598
+ d_counter = self.sequences.aides.rlatm[k]
2599
+ if self.parameters.control.lnk[k] in (LAUBW, MISCHW, NADELW):
2600
+ d_fr = self.parameters.derived.fr[self.parameters.control.lnk[k] - 1, self.parameters.derived.moy[self.idx_sim]]
2601
+ d_counter = d_fr * d_counter + (1.0 - d_fr) * 0.97 * self.parameters.fixed.sigma * d_temp**4
2602
+ return self.parameters.fixed.sigma * (self.sequences.fluxes.tempssurface[k] + 273.15) ** 4 - d_counter
2603
+ cpdef inline double return_energygainsnowsurface(self, double tempssurface) noexcept nogil:
2604
+ cdef numpy.int64_t k
2605
+ k = self.idx_hru
2606
+ self.sequences.fluxes.tempssurface[k] = tempssurface
2607
+ self.sequences.fluxes.saturationvapourpressuresnow[k] = self.return_saturationvapourpressure_v1( self.sequences.fluxes.tempssurface[k] )
2608
+ self.sequences.fluxes.wlatsnow[k] = self.return_wlatsnow_v1(k)
2609
+ self.sequences.fluxes.wsenssnow[k] = self.return_wsenssnow_v1(k)
2610
+ self.sequences.fluxes.netlongwaveradiationsnow[k] = self.return_netlongwaveradiationsnow_v1(k)
2611
+ self.sequences.fluxes.netradiationsnow[k] = self.return_netradiation_v1( self.sequences.fluxes.netshortwaveradiationsnow[k], self.sequences.fluxes.netlongwaveradiationsnow[k] )
2612
+ self.sequences.fluxes.wsurf[k] = self.return_wsurf_v1(k)
2613
+ return ( self.sequences.fluxes.wsurf[k] + self.sequences.fluxes.netradiationsnow[k] - self.sequences.fluxes.wsenssnow[k] - self.sequences.fluxes.wlatsnow[k] )
2614
+ cpdef inline double return_saturationvapourpressure(self, double temperature) noexcept nogil:
2615
+ return 6.1078 * 2.71828 ** (17.08085 * temperature / (temperature + 234.175))
2616
+ cpdef inline double return_netradiation(self, double netshortwaveradiation, double netlongwaveradiation) noexcept nogil:
2617
+ return netshortwaveradiation - netlongwaveradiation
2618
+ cpdef inline double return_wsenssnow(self, numpy.int64_t k) noexcept nogil:
2619
+ return (self.parameters.control.turb0 + self.parameters.control.turb1 * self.sequences.fluxes.reducedwindspeed2m[k]) * ( self.sequences.fluxes.tempssurface[k] - self.sequences.fluxes.tkor[k] )
2620
+ cpdef inline double return_wlatsnow(self, numpy.int64_t k) noexcept nogil:
2621
+ 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]) )
2622
+ cpdef inline double return_wsurf(self, numpy.int64_t k) noexcept nogil:
2623
+ if isinf(self.parameters.control.ktschnee):
2624
+ return inf
2625
+ return self.parameters.control.ktschnee * (self.sequences.aides.temps[k] - self.sequences.fluxes.tempssurface[k])
2626
+ cpdef inline double return_temps(self, numpy.int64_t k) noexcept nogil:
2627
+ cdef double d_water
2628
+ cdef double d_ice
2629
+ if self.sequences.states.waes[k] > 0.0:
2630
+ d_ice = self.parameters.fixed.cpeis * self.sequences.states.wats[k]
2631
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.states.waes[k] - self.sequences.states.wats[k])
2632
+ return max(self.sequences.states.esnow[k] / (d_ice + d_water), -273.0)
2633
+ return nan
2634
+ cpdef inline double return_wg(self, numpy.int64_t k) noexcept nogil:
2635
+ cdef double d_temp
2636
+ if self.sequences.states.waes[k] > 0.0:
2637
+ d_temp = self.sequences.aides.temps[k]
2638
+ else:
2639
+ d_temp = self.sequences.fluxes.tkor[k]
2640
+ return self.parameters.fixed.lambdag * (self.sequences.fluxes.tz[k] - d_temp) / self.parameters.fixed.z
2641
+ cpdef inline double return_backwardeulererror(self, double esnow) noexcept nogil:
2642
+ cdef double d_esnow_old
2643
+ cdef numpy.int64_t k
2644
+ k = self.idx_hru
2645
+ if self.sequences.states.waes[k] > 0.0:
2646
+ d_esnow_old = self.sequences.states.esnow[k]
2647
+ self.sequences.states.esnow[k] = esnow
2648
+ self.sequences.aides.temps[k] = self.return_temps_v1(k)
2649
+ self.sequences.states.esnow[k] = d_esnow_old
2650
+ self.return_tempssurface_v1(k)
2651
+ self.sequences.fluxes.wg[k] = self.return_wg_v1(k)
2652
+ return d_esnow_old - esnow + self.sequences.fluxes.wg[k] - self.sequences.fluxes.wsurf[k]
2653
+ return nan
2654
+ cpdef inline double return_esnow(self, numpy.int64_t k, double temps) noexcept nogil:
2655
+ cdef double d_water
2656
+ cdef double d_ice
2657
+ d_ice = self.parameters.fixed.cpeis * self.sequences.states.wats[k]
2658
+ d_water = self.parameters.fixed.cpwasser * (self.sequences.states.waes[k] - self.sequences.states.wats[k])
2659
+ return temps * (d_ice + d_water)
2660
+ cpdef inline double return_tempssurface(self, numpy.int64_t k) noexcept nogil:
2661
+ if self.sequences.states.waes[k] > 0.0:
2662
+ if isinf(self.parameters.control.ktschnee):
2663
+ self.idx_hru = k
2664
+ self.return_energygainsnowsurface_v1(self.sequences.aides.temps[k])
2665
+ self.sequences.fluxes.wsurf[k] = ( self.sequences.fluxes.wsenssnow[k] + self.sequences.fluxes.wlatsnow[k] - self.sequences.fluxes.netradiationsnow[k] )
2666
+ else:
2667
+ self.idx_hru = k
2668
+ self.pegasustempssurface.find_x(-50.0, 0.0, -100.0, 0.0, 0.0, 1e-8, 10)
2669
+ self.sequences.fluxes.wsurf[k] = self.sequences.fluxes.wsurf[k] - (self.return_energygainsnowsurface_v1( self.sequences.fluxes.tempssurface[k] ))
2670
+ else:
2671
+ self.sequences.fluxes.tempssurface[k] = nan
2672
+ self.sequences.fluxes.saturationvapourpressuresnow[k] = 0.0
2673
+ self.sequences.fluxes.wsenssnow[k] = 0.0
2674
+ self.sequences.fluxes.wlatsnow[k] = 0.0
2675
+ self.sequences.fluxes.wsurf[k] = 0.0
2676
+ return self.sequences.fluxes.tempssurface[k]
2677
+ cpdef inline double return_sg(self, double k, double s, double qz, double dt) noexcept nogil:
2678
+ if k <= 0.0:
2679
+ return 0.0
2680
+ if isinf(k):
2681
+ return s + qz
2682
+ return k * qz - (k * qz - s) * exp(-dt / k)
2683
+ cpdef inline void calc_bowa_default(self) noexcept nogil:
2684
+ cdef double d_factor
2685
+ cdef double d_rvl
2686
+ cdef double d_incr
2687
+ cdef double d_decr
2688
+ cdef numpy.int64_t k
2689
+ for k in range(self.parameters.control.nhru):
2690
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
2691
+ self.sequences.states.bowa[k] = 0.0
2692
+ else:
2693
+ d_decr = self.sequences.fluxes.qbb[k] + self.sequences.fluxes.qib1[k] + self.sequences.fluxes.qib2[k] + self.sequences.fluxes.qdb[k]
2694
+ d_incr = self.sequences.fluxes.wada[k] + self.sequences.fluxes.qkap[k]
2695
+ if self.sequences.fluxes.evb[k] > 0.0:
2696
+ d_decr = d_decr + (self.sequences.fluxes.evb[k])
2697
+ else:
2698
+ d_incr = d_incr - (self.sequences.fluxes.evb[k])
2699
+ if d_decr > self.sequences.states.bowa[k] + d_incr:
2700
+ d_rvl = (self.sequences.states.bowa[k] + d_incr) / d_decr
2701
+ if self.sequences.fluxes.evb[k] > 0.0:
2702
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (d_rvl)
2703
+ self.sequences.fluxes.qbb[k] = self.sequences.fluxes.qbb[k] * (d_rvl)
2704
+ self.sequences.fluxes.qib1[k] = self.sequences.fluxes.qib1[k] * (d_rvl)
2705
+ self.sequences.fluxes.qib2[k] = self.sequences.fluxes.qib2[k] * (d_rvl)
2706
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.qdb[k] * (d_rvl)
2707
+ self.sequences.states.bowa[k] = 0.0
2708
+ else:
2709
+ self.sequences.states.bowa[k] = (self.sequences.states.bowa[k] + d_incr) - d_decr
2710
+ if self.sequences.states.bowa[k] > self.parameters.control.wmax[k]:
2711
+ d_factor = (self.sequences.states.bowa[k] - self.parameters.control.wmax[k]) / d_incr
2712
+ if self.sequences.fluxes.evb[k] < 0.0:
2713
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (d_factor)
2714
+ self.sequences.fluxes.wada[k] = self.sequences.fluxes.wada[k] * (d_factor)
2715
+ self.sequences.fluxes.qkap[k] = self.sequences.fluxes.qkap[k] * (d_factor)
2716
+ self.sequences.states.bowa[k] = self.parameters.control.wmax[k]
2717
+ cpdef inline void calc_bowa_soilmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
2718
+ cdef double removal
2719
+ cdef double demand
2720
+ cdef double factor
2721
+ cdef double addition
2722
+ cdef double supply
2723
+ cdef double qbb_soilmodel
2724
+ cdef double infiltration
2725
+ cdef numpy.int64_t k
2726
+ for k in range(self.parameters.control.nhru):
2727
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
2728
+ self.sequences.states.bowa[k] = 0.0
2729
+ else:
2730
+ submodel.set_initialsurfacewater(k, self.sequences.fluxes.wada[k])
2731
+ submodel.set_actualsurfacewater(k, self.sequences.fluxes.wada[k] - self.sequences.fluxes.qdb[k])
2732
+ submodel.set_soilwatersupply(k, 0.0)
2733
+ submodel.set_soilwaterdemand(k, 0.0)
2734
+ submodel.execute_infiltration(k)
2735
+ infiltration = submodel.get_infiltration(k)
2736
+ self.sequences.fluxes.qdb[k] = self.sequences.fluxes.qdb[k] + ((self.sequences.fluxes.wada[k] - self.sequences.fluxes.qdb[k]) - infiltration)
2737
+ qbb_soilmodel = submodel.get_percolation(k)
2738
+ supply = self.sequences.fluxes.qkap[k]
2739
+ if self.sequences.fluxes.evb[k] < 0.0:
2740
+ supply = supply - (self.sequences.fluxes.evb[k])
2741
+ submodel.set_soilwatersupply(k, supply)
2742
+ submodel.add_soilwater(k)
2743
+ addition = submodel.get_soilwateraddition(k)
2744
+ if addition < supply:
2745
+ factor = addition / supply
2746
+ self.sequences.fluxes.qkap[k] = self.sequences.fluxes.qkap[k] * (factor)
2747
+ if self.sequences.fluxes.evb[k] < 0.0:
2748
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (factor)
2749
+ demand = self.sequences.fluxes.qbb[k] + self.sequences.fluxes.qib1[k] + self.sequences.fluxes.qib2[k]
2750
+ if self.sequences.fluxes.evb[k] > 0.0:
2751
+ demand = demand + (self.sequences.fluxes.evb[k])
2752
+ submodel.set_soilwaterdemand(k, demand)
2753
+ submodel.remove_soilwater(k)
2754
+ removal = submodel.get_soilwaterremoval(k)
2755
+ if removal < demand:
2756
+ factor = removal / demand
2757
+ self.sequences.fluxes.qbb[k] = self.sequences.fluxes.qbb[k] * (factor)
2758
+ self.sequences.fluxes.qib1[k] = self.sequences.fluxes.qib1[k] * (factor)
2759
+ self.sequences.fluxes.qib2[k] = self.sequences.fluxes.qib2[k] * (factor)
2760
+ if self.sequences.fluxes.evb[k] > 0.0:
2761
+ self.sequences.fluxes.evb[k] = self.sequences.fluxes.evb[k] * (factor)
2762
+ self.sequences.states.bowa[k] = submodel.get_soilwatercontent(k)
2763
+ self.sequences.fluxes.qbb[k] = self.sequences.fluxes.qbb[k] + (qbb_soilmodel)
2764
+ cpdef inline void calc_evi_inzp_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
2765
+ cdef numpy.int64_t k
2766
+ submodel.determine_interceptionevaporation()
2767
+ submodel.determine_waterevaporation()
2768
+ for k in range(self.parameters.control.nhru):
2769
+ if self.parameters.control.lnk[k] in (WASSER, FLUSS, SEE):
2770
+ self.sequences.fluxes.evi[k] = submodel.get_waterevaporation(k)
2771
+ self.sequences.states.inzp[k] = 0.0
2772
+ else:
2773
+ self.sequences.fluxes.evi[k] = min(submodel.get_interceptionevaporation(k), self.sequences.states.inzp[k])
2774
+ self.sequences.states.inzp[k] = self.sequences.states.inzp[k] - (self.sequences.fluxes.evi[k])
2775
+ cpdef inline void calc_evb_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
2776
+ cdef numpy.int64_t k
2777
+ submodel.determine_soilevapotranspiration()
2778
+ for k in range(self.parameters.control.nhru):
2779
+ if self.parameters.control.lnk[k] in (VERS, WASSER, FLUSS, SEE):
2780
+ self.sequences.fluxes.evb[k] = 0.0
2781
+ else:
2782
+ self.sequences.fluxes.evb[k] = submodel.get_soilevapotranspiration(k)
2783
+ cpdef inline void pass_qa(self) noexcept nogil:
2784
+ self.sequences.outlets.q[0] = self.sequences.outlets.q[0] + (self.sequences.fluxes.qa)