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,1642 @@
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
+ @cython.final
39
+ cdef class Parameters:
40
+ pass
41
+ @cython.final
42
+ cdef class ControlParameters:
43
+ pass
44
+ @cython.final
45
+ cdef class DerivedParameters:
46
+ pass
47
+ @cython.final
48
+ cdef class FixedParameters:
49
+ pass
50
+ @cython.final
51
+ cdef class Sequences:
52
+ pass
53
+ @cython.final
54
+ cdef class InputSequences:
55
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
56
+ cdef numpy.int64_t k
57
+ if self._relativehumidity_inputflag:
58
+ self.relativehumidity = self._relativehumidity_inputpointer[0]
59
+ elif self._relativehumidity_diskflag_reading:
60
+ self.relativehumidity = self._relativehumidity_ncarray[0]
61
+ elif self._relativehumidity_ramflag:
62
+ self.relativehumidity = self._relativehumidity_array[idx]
63
+ if self._windspeed_inputflag:
64
+ self.windspeed = self._windspeed_inputpointer[0]
65
+ elif self._windspeed_diskflag_reading:
66
+ self.windspeed = self._windspeed_ncarray[0]
67
+ elif self._windspeed_ramflag:
68
+ self.windspeed = self._windspeed_array[idx]
69
+ if self._atmosphericpressure_inputflag:
70
+ self.atmosphericpressure = self._atmosphericpressure_inputpointer[0]
71
+ elif self._atmosphericpressure_diskflag_reading:
72
+ self.atmosphericpressure = self._atmosphericpressure_ncarray[0]
73
+ elif self._atmosphericpressure_ramflag:
74
+ self.atmosphericpressure = self._atmosphericpressure_array[idx]
75
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
76
+ cdef numpy.int64_t k
77
+ if self._relativehumidity_diskflag_writing:
78
+ self._relativehumidity_ncarray[0] = self.relativehumidity
79
+ if self._relativehumidity_ramflag:
80
+ self._relativehumidity_array[idx] = self.relativehumidity
81
+ if self._windspeed_diskflag_writing:
82
+ self._windspeed_ncarray[0] = self.windspeed
83
+ if self._windspeed_ramflag:
84
+ self._windspeed_array[idx] = self.windspeed
85
+ if self._atmosphericpressure_diskflag_writing:
86
+ self._atmosphericpressure_ncarray[0] = self.atmosphericpressure
87
+ if self._atmosphericpressure_ramflag:
88
+ self._atmosphericpressure_array[idx] = self.atmosphericpressure
89
+ cpdef inline set_pointerinput(self, str name, pointerutils.PDouble value):
90
+ if name == "relativehumidity":
91
+ self._relativehumidity_inputpointer = value.p_value
92
+ if name == "windspeed":
93
+ self._windspeed_inputpointer = value.p_value
94
+ if name == "atmosphericpressure":
95
+ self._atmosphericpressure_inputpointer = value.p_value
96
+ @cython.final
97
+ cdef class FactorSequences:
98
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
99
+ cdef numpy.int64_t jdx0
100
+ cdef numpy.int64_t k
101
+ if self._airtemperature_diskflag_reading:
102
+ k = 0
103
+ for jdx0 in range(self._airtemperature_length_0):
104
+ self.airtemperature[jdx0] = self._airtemperature_ncarray[k]
105
+ k += 1
106
+ elif self._airtemperature_ramflag:
107
+ for jdx0 in range(self._airtemperature_length_0):
108
+ self.airtemperature[jdx0] = self._airtemperature_array[idx, jdx0]
109
+ if self._dailyairtemperature_diskflag_reading:
110
+ k = 0
111
+ for jdx0 in range(self._dailyairtemperature_length_0):
112
+ self.dailyairtemperature[jdx0] = self._dailyairtemperature_ncarray[k]
113
+ k += 1
114
+ elif self._dailyairtemperature_ramflag:
115
+ for jdx0 in range(self._dailyairtemperature_length_0):
116
+ self.dailyairtemperature[jdx0] = self._dailyairtemperature_array[idx, jdx0]
117
+ if self._windspeed2m_diskflag_reading:
118
+ self.windspeed2m = self._windspeed2m_ncarray[0]
119
+ elif self._windspeed2m_ramflag:
120
+ self.windspeed2m = self._windspeed2m_array[idx]
121
+ if self._dailywindspeed2m_diskflag_reading:
122
+ self.dailywindspeed2m = self._dailywindspeed2m_ncarray[0]
123
+ elif self._dailywindspeed2m_ramflag:
124
+ self.dailywindspeed2m = self._dailywindspeed2m_array[idx]
125
+ if self._windspeed10m_diskflag_reading:
126
+ self.windspeed10m = self._windspeed10m_ncarray[0]
127
+ elif self._windspeed10m_ramflag:
128
+ self.windspeed10m = self._windspeed10m_array[idx]
129
+ if self._dailyrelativehumidity_diskflag_reading:
130
+ self.dailyrelativehumidity = self._dailyrelativehumidity_ncarray[0]
131
+ elif self._dailyrelativehumidity_ramflag:
132
+ self.dailyrelativehumidity = self._dailyrelativehumidity_array[idx]
133
+ if self._sunshineduration_diskflag_reading:
134
+ self.sunshineduration = self._sunshineduration_ncarray[0]
135
+ elif self._sunshineduration_ramflag:
136
+ self.sunshineduration = self._sunshineduration_array[idx]
137
+ if self._possiblesunshineduration_diskflag_reading:
138
+ self.possiblesunshineduration = self._possiblesunshineduration_ncarray[0]
139
+ elif self._possiblesunshineduration_ramflag:
140
+ self.possiblesunshineduration = self._possiblesunshineduration_array[idx]
141
+ if self._dailysunshineduration_diskflag_reading:
142
+ self.dailysunshineduration = self._dailysunshineduration_ncarray[0]
143
+ elif self._dailysunshineduration_ramflag:
144
+ self.dailysunshineduration = self._dailysunshineduration_array[idx]
145
+ if self._dailypossiblesunshineduration_diskflag_reading:
146
+ self.dailypossiblesunshineduration = self._dailypossiblesunshineduration_ncarray[0]
147
+ elif self._dailypossiblesunshineduration_ramflag:
148
+ self.dailypossiblesunshineduration = self._dailypossiblesunshineduration_array[idx]
149
+ if self._saturationvapourpressure_diskflag_reading:
150
+ k = 0
151
+ for jdx0 in range(self._saturationvapourpressure_length_0):
152
+ self.saturationvapourpressure[jdx0] = self._saturationvapourpressure_ncarray[k]
153
+ k += 1
154
+ elif self._saturationvapourpressure_ramflag:
155
+ for jdx0 in range(self._saturationvapourpressure_length_0):
156
+ self.saturationvapourpressure[jdx0] = self._saturationvapourpressure_array[idx, jdx0]
157
+ if self._dailysaturationvapourpressure_diskflag_reading:
158
+ k = 0
159
+ for jdx0 in range(self._dailysaturationvapourpressure_length_0):
160
+ self.dailysaturationvapourpressure[jdx0] = self._dailysaturationvapourpressure_ncarray[k]
161
+ k += 1
162
+ elif self._dailysaturationvapourpressure_ramflag:
163
+ for jdx0 in range(self._dailysaturationvapourpressure_length_0):
164
+ self.dailysaturationvapourpressure[jdx0] = self._dailysaturationvapourpressure_array[idx, jdx0]
165
+ if self._saturationvapourpressureslope_diskflag_reading:
166
+ k = 0
167
+ for jdx0 in range(self._saturationvapourpressureslope_length_0):
168
+ self.saturationvapourpressureslope[jdx0] = self._saturationvapourpressureslope_ncarray[k]
169
+ k += 1
170
+ elif self._saturationvapourpressureslope_ramflag:
171
+ for jdx0 in range(self._saturationvapourpressureslope_length_0):
172
+ self.saturationvapourpressureslope[jdx0] = self._saturationvapourpressureslope_array[idx, jdx0]
173
+ if self._dailysaturationvapourpressureslope_diskflag_reading:
174
+ k = 0
175
+ for jdx0 in range(self._dailysaturationvapourpressureslope_length_0):
176
+ self.dailysaturationvapourpressureslope[jdx0] = self._dailysaturationvapourpressureslope_ncarray[k]
177
+ k += 1
178
+ elif self._dailysaturationvapourpressureslope_ramflag:
179
+ for jdx0 in range(self._dailysaturationvapourpressureslope_length_0):
180
+ self.dailysaturationvapourpressureslope[jdx0] = self._dailysaturationvapourpressureslope_array[idx, jdx0]
181
+ if self._actualvapourpressure_diskflag_reading:
182
+ k = 0
183
+ for jdx0 in range(self._actualvapourpressure_length_0):
184
+ self.actualvapourpressure[jdx0] = self._actualvapourpressure_ncarray[k]
185
+ k += 1
186
+ elif self._actualvapourpressure_ramflag:
187
+ for jdx0 in range(self._actualvapourpressure_length_0):
188
+ self.actualvapourpressure[jdx0] = self._actualvapourpressure_array[idx, jdx0]
189
+ if self._dailyactualvapourpressure_diskflag_reading:
190
+ k = 0
191
+ for jdx0 in range(self._dailyactualvapourpressure_length_0):
192
+ self.dailyactualvapourpressure[jdx0] = self._dailyactualvapourpressure_ncarray[k]
193
+ k += 1
194
+ elif self._dailyactualvapourpressure_ramflag:
195
+ for jdx0 in range(self._dailyactualvapourpressure_length_0):
196
+ self.dailyactualvapourpressure[jdx0] = self._dailyactualvapourpressure_array[idx, jdx0]
197
+ if self._dryairpressure_diskflag_reading:
198
+ k = 0
199
+ for jdx0 in range(self._dryairpressure_length_0):
200
+ self.dryairpressure[jdx0] = self._dryairpressure_ncarray[k]
201
+ k += 1
202
+ elif self._dryairpressure_ramflag:
203
+ for jdx0 in range(self._dryairpressure_length_0):
204
+ self.dryairpressure[jdx0] = self._dryairpressure_array[idx, jdx0]
205
+ if self._airdensity_diskflag_reading:
206
+ k = 0
207
+ for jdx0 in range(self._airdensity_length_0):
208
+ self.airdensity[jdx0] = self._airdensity_ncarray[k]
209
+ k += 1
210
+ elif self._airdensity_ramflag:
211
+ for jdx0 in range(self._airdensity_length_0):
212
+ self.airdensity[jdx0] = self._airdensity_array[idx, jdx0]
213
+ if self._currentalbedo_diskflag_reading:
214
+ k = 0
215
+ for jdx0 in range(self._currentalbedo_length_0):
216
+ self.currentalbedo[jdx0] = self._currentalbedo_ncarray[k]
217
+ k += 1
218
+ elif self._currentalbedo_ramflag:
219
+ for jdx0 in range(self._currentalbedo_length_0):
220
+ self.currentalbedo[jdx0] = self._currentalbedo_array[idx, jdx0]
221
+ if self._aerodynamicresistance_diskflag_reading:
222
+ k = 0
223
+ for jdx0 in range(self._aerodynamicresistance_length_0):
224
+ self.aerodynamicresistance[jdx0] = self._aerodynamicresistance_ncarray[k]
225
+ k += 1
226
+ elif self._aerodynamicresistance_ramflag:
227
+ for jdx0 in range(self._aerodynamicresistance_length_0):
228
+ self.aerodynamicresistance[jdx0] = self._aerodynamicresistance_array[idx, jdx0]
229
+ if self._soilsurfaceresistance_diskflag_reading:
230
+ k = 0
231
+ for jdx0 in range(self._soilsurfaceresistance_length_0):
232
+ self.soilsurfaceresistance[jdx0] = self._soilsurfaceresistance_ncarray[k]
233
+ k += 1
234
+ elif self._soilsurfaceresistance_ramflag:
235
+ for jdx0 in range(self._soilsurfaceresistance_length_0):
236
+ self.soilsurfaceresistance[jdx0] = self._soilsurfaceresistance_array[idx, jdx0]
237
+ if self._landusesurfaceresistance_diskflag_reading:
238
+ k = 0
239
+ for jdx0 in range(self._landusesurfaceresistance_length_0):
240
+ self.landusesurfaceresistance[jdx0] = self._landusesurfaceresistance_ncarray[k]
241
+ k += 1
242
+ elif self._landusesurfaceresistance_ramflag:
243
+ for jdx0 in range(self._landusesurfaceresistance_length_0):
244
+ self.landusesurfaceresistance[jdx0] = self._landusesurfaceresistance_array[idx, jdx0]
245
+ if self._actualsurfaceresistance_diskflag_reading:
246
+ k = 0
247
+ for jdx0 in range(self._actualsurfaceresistance_length_0):
248
+ self.actualsurfaceresistance[jdx0] = self._actualsurfaceresistance_ncarray[k]
249
+ k += 1
250
+ elif self._actualsurfaceresistance_ramflag:
251
+ for jdx0 in range(self._actualsurfaceresistance_length_0):
252
+ self.actualsurfaceresistance[jdx0] = self._actualsurfaceresistance_array[idx, jdx0]
253
+ if self._interceptedwater_diskflag_reading:
254
+ k = 0
255
+ for jdx0 in range(self._interceptedwater_length_0):
256
+ self.interceptedwater[jdx0] = self._interceptedwater_ncarray[k]
257
+ k += 1
258
+ elif self._interceptedwater_ramflag:
259
+ for jdx0 in range(self._interceptedwater_length_0):
260
+ self.interceptedwater[jdx0] = self._interceptedwater_array[idx, jdx0]
261
+ if self._soilwater_diskflag_reading:
262
+ k = 0
263
+ for jdx0 in range(self._soilwater_length_0):
264
+ self.soilwater[jdx0] = self._soilwater_ncarray[k]
265
+ k += 1
266
+ elif self._soilwater_ramflag:
267
+ for jdx0 in range(self._soilwater_length_0):
268
+ self.soilwater[jdx0] = self._soilwater_array[idx, jdx0]
269
+ if self._snowcover_diskflag_reading:
270
+ k = 0
271
+ for jdx0 in range(self._snowcover_length_0):
272
+ self.snowcover[jdx0] = self._snowcover_ncarray[k]
273
+ k += 1
274
+ elif self._snowcover_ramflag:
275
+ for jdx0 in range(self._snowcover_length_0):
276
+ self.snowcover[jdx0] = self._snowcover_array[idx, jdx0]
277
+ if self._snowycanopy_diskflag_reading:
278
+ k = 0
279
+ for jdx0 in range(self._snowycanopy_length_0):
280
+ self.snowycanopy[jdx0] = self._snowycanopy_ncarray[k]
281
+ k += 1
282
+ elif self._snowycanopy_ramflag:
283
+ for jdx0 in range(self._snowycanopy_length_0):
284
+ self.snowycanopy[jdx0] = self._snowycanopy_array[idx, jdx0]
285
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
286
+ cdef numpy.int64_t jdx0
287
+ cdef numpy.int64_t k
288
+ if self._airtemperature_diskflag_writing:
289
+ k = 0
290
+ for jdx0 in range(self._airtemperature_length_0):
291
+ self._airtemperature_ncarray[k] = self.airtemperature[jdx0]
292
+ k += 1
293
+ if self._airtemperature_ramflag:
294
+ for jdx0 in range(self._airtemperature_length_0):
295
+ self._airtemperature_array[idx, jdx0] = self.airtemperature[jdx0]
296
+ if self._dailyairtemperature_diskflag_writing:
297
+ k = 0
298
+ for jdx0 in range(self._dailyairtemperature_length_0):
299
+ self._dailyairtemperature_ncarray[k] = self.dailyairtemperature[jdx0]
300
+ k += 1
301
+ if self._dailyairtemperature_ramflag:
302
+ for jdx0 in range(self._dailyairtemperature_length_0):
303
+ self._dailyairtemperature_array[idx, jdx0] = self.dailyairtemperature[jdx0]
304
+ if self._windspeed2m_diskflag_writing:
305
+ self._windspeed2m_ncarray[0] = self.windspeed2m
306
+ if self._windspeed2m_ramflag:
307
+ self._windspeed2m_array[idx] = self.windspeed2m
308
+ if self._dailywindspeed2m_diskflag_writing:
309
+ self._dailywindspeed2m_ncarray[0] = self.dailywindspeed2m
310
+ if self._dailywindspeed2m_ramflag:
311
+ self._dailywindspeed2m_array[idx] = self.dailywindspeed2m
312
+ if self._windspeed10m_diskflag_writing:
313
+ self._windspeed10m_ncarray[0] = self.windspeed10m
314
+ if self._windspeed10m_ramflag:
315
+ self._windspeed10m_array[idx] = self.windspeed10m
316
+ if self._dailyrelativehumidity_diskflag_writing:
317
+ self._dailyrelativehumidity_ncarray[0] = self.dailyrelativehumidity
318
+ if self._dailyrelativehumidity_ramflag:
319
+ self._dailyrelativehumidity_array[idx] = self.dailyrelativehumidity
320
+ if self._sunshineduration_diskflag_writing:
321
+ self._sunshineduration_ncarray[0] = self.sunshineduration
322
+ if self._sunshineduration_ramflag:
323
+ self._sunshineduration_array[idx] = self.sunshineduration
324
+ if self._possiblesunshineduration_diskflag_writing:
325
+ self._possiblesunshineduration_ncarray[0] = self.possiblesunshineduration
326
+ if self._possiblesunshineduration_ramflag:
327
+ self._possiblesunshineduration_array[idx] = self.possiblesunshineduration
328
+ if self._dailysunshineduration_diskflag_writing:
329
+ self._dailysunshineduration_ncarray[0] = self.dailysunshineduration
330
+ if self._dailysunshineduration_ramflag:
331
+ self._dailysunshineduration_array[idx] = self.dailysunshineduration
332
+ if self._dailypossiblesunshineduration_diskflag_writing:
333
+ self._dailypossiblesunshineduration_ncarray[0] = self.dailypossiblesunshineduration
334
+ if self._dailypossiblesunshineduration_ramflag:
335
+ self._dailypossiblesunshineduration_array[idx] = self.dailypossiblesunshineduration
336
+ if self._saturationvapourpressure_diskflag_writing:
337
+ k = 0
338
+ for jdx0 in range(self._saturationvapourpressure_length_0):
339
+ self._saturationvapourpressure_ncarray[k] = self.saturationvapourpressure[jdx0]
340
+ k += 1
341
+ if self._saturationvapourpressure_ramflag:
342
+ for jdx0 in range(self._saturationvapourpressure_length_0):
343
+ self._saturationvapourpressure_array[idx, jdx0] = self.saturationvapourpressure[jdx0]
344
+ if self._dailysaturationvapourpressure_diskflag_writing:
345
+ k = 0
346
+ for jdx0 in range(self._dailysaturationvapourpressure_length_0):
347
+ self._dailysaturationvapourpressure_ncarray[k] = self.dailysaturationvapourpressure[jdx0]
348
+ k += 1
349
+ if self._dailysaturationvapourpressure_ramflag:
350
+ for jdx0 in range(self._dailysaturationvapourpressure_length_0):
351
+ self._dailysaturationvapourpressure_array[idx, jdx0] = self.dailysaturationvapourpressure[jdx0]
352
+ if self._saturationvapourpressureslope_diskflag_writing:
353
+ k = 0
354
+ for jdx0 in range(self._saturationvapourpressureslope_length_0):
355
+ self._saturationvapourpressureslope_ncarray[k] = self.saturationvapourpressureslope[jdx0]
356
+ k += 1
357
+ if self._saturationvapourpressureslope_ramflag:
358
+ for jdx0 in range(self._saturationvapourpressureslope_length_0):
359
+ self._saturationvapourpressureslope_array[idx, jdx0] = self.saturationvapourpressureslope[jdx0]
360
+ if self._dailysaturationvapourpressureslope_diskflag_writing:
361
+ k = 0
362
+ for jdx0 in range(self._dailysaturationvapourpressureslope_length_0):
363
+ self._dailysaturationvapourpressureslope_ncarray[k] = self.dailysaturationvapourpressureslope[jdx0]
364
+ k += 1
365
+ if self._dailysaturationvapourpressureslope_ramflag:
366
+ for jdx0 in range(self._dailysaturationvapourpressureslope_length_0):
367
+ self._dailysaturationvapourpressureslope_array[idx, jdx0] = self.dailysaturationvapourpressureslope[jdx0]
368
+ if self._actualvapourpressure_diskflag_writing:
369
+ k = 0
370
+ for jdx0 in range(self._actualvapourpressure_length_0):
371
+ self._actualvapourpressure_ncarray[k] = self.actualvapourpressure[jdx0]
372
+ k += 1
373
+ if self._actualvapourpressure_ramflag:
374
+ for jdx0 in range(self._actualvapourpressure_length_0):
375
+ self._actualvapourpressure_array[idx, jdx0] = self.actualvapourpressure[jdx0]
376
+ if self._dailyactualvapourpressure_diskflag_writing:
377
+ k = 0
378
+ for jdx0 in range(self._dailyactualvapourpressure_length_0):
379
+ self._dailyactualvapourpressure_ncarray[k] = self.dailyactualvapourpressure[jdx0]
380
+ k += 1
381
+ if self._dailyactualvapourpressure_ramflag:
382
+ for jdx0 in range(self._dailyactualvapourpressure_length_0):
383
+ self._dailyactualvapourpressure_array[idx, jdx0] = self.dailyactualvapourpressure[jdx0]
384
+ if self._dryairpressure_diskflag_writing:
385
+ k = 0
386
+ for jdx0 in range(self._dryairpressure_length_0):
387
+ self._dryairpressure_ncarray[k] = self.dryairpressure[jdx0]
388
+ k += 1
389
+ if self._dryairpressure_ramflag:
390
+ for jdx0 in range(self._dryairpressure_length_0):
391
+ self._dryairpressure_array[idx, jdx0] = self.dryairpressure[jdx0]
392
+ if self._airdensity_diskflag_writing:
393
+ k = 0
394
+ for jdx0 in range(self._airdensity_length_0):
395
+ self._airdensity_ncarray[k] = self.airdensity[jdx0]
396
+ k += 1
397
+ if self._airdensity_ramflag:
398
+ for jdx0 in range(self._airdensity_length_0):
399
+ self._airdensity_array[idx, jdx0] = self.airdensity[jdx0]
400
+ if self._currentalbedo_diskflag_writing:
401
+ k = 0
402
+ for jdx0 in range(self._currentalbedo_length_0):
403
+ self._currentalbedo_ncarray[k] = self.currentalbedo[jdx0]
404
+ k += 1
405
+ if self._currentalbedo_ramflag:
406
+ for jdx0 in range(self._currentalbedo_length_0):
407
+ self._currentalbedo_array[idx, jdx0] = self.currentalbedo[jdx0]
408
+ if self._aerodynamicresistance_diskflag_writing:
409
+ k = 0
410
+ for jdx0 in range(self._aerodynamicresistance_length_0):
411
+ self._aerodynamicresistance_ncarray[k] = self.aerodynamicresistance[jdx0]
412
+ k += 1
413
+ if self._aerodynamicresistance_ramflag:
414
+ for jdx0 in range(self._aerodynamicresistance_length_0):
415
+ self._aerodynamicresistance_array[idx, jdx0] = self.aerodynamicresistance[jdx0]
416
+ if self._soilsurfaceresistance_diskflag_writing:
417
+ k = 0
418
+ for jdx0 in range(self._soilsurfaceresistance_length_0):
419
+ self._soilsurfaceresistance_ncarray[k] = self.soilsurfaceresistance[jdx0]
420
+ k += 1
421
+ if self._soilsurfaceresistance_ramflag:
422
+ for jdx0 in range(self._soilsurfaceresistance_length_0):
423
+ self._soilsurfaceresistance_array[idx, jdx0] = self.soilsurfaceresistance[jdx0]
424
+ if self._landusesurfaceresistance_diskflag_writing:
425
+ k = 0
426
+ for jdx0 in range(self._landusesurfaceresistance_length_0):
427
+ self._landusesurfaceresistance_ncarray[k] = self.landusesurfaceresistance[jdx0]
428
+ k += 1
429
+ if self._landusesurfaceresistance_ramflag:
430
+ for jdx0 in range(self._landusesurfaceresistance_length_0):
431
+ self._landusesurfaceresistance_array[idx, jdx0] = self.landusesurfaceresistance[jdx0]
432
+ if self._actualsurfaceresistance_diskflag_writing:
433
+ k = 0
434
+ for jdx0 in range(self._actualsurfaceresistance_length_0):
435
+ self._actualsurfaceresistance_ncarray[k] = self.actualsurfaceresistance[jdx0]
436
+ k += 1
437
+ if self._actualsurfaceresistance_ramflag:
438
+ for jdx0 in range(self._actualsurfaceresistance_length_0):
439
+ self._actualsurfaceresistance_array[idx, jdx0] = self.actualsurfaceresistance[jdx0]
440
+ if self._interceptedwater_diskflag_writing:
441
+ k = 0
442
+ for jdx0 in range(self._interceptedwater_length_0):
443
+ self._interceptedwater_ncarray[k] = self.interceptedwater[jdx0]
444
+ k += 1
445
+ if self._interceptedwater_ramflag:
446
+ for jdx0 in range(self._interceptedwater_length_0):
447
+ self._interceptedwater_array[idx, jdx0] = self.interceptedwater[jdx0]
448
+ if self._soilwater_diskflag_writing:
449
+ k = 0
450
+ for jdx0 in range(self._soilwater_length_0):
451
+ self._soilwater_ncarray[k] = self.soilwater[jdx0]
452
+ k += 1
453
+ if self._soilwater_ramflag:
454
+ for jdx0 in range(self._soilwater_length_0):
455
+ self._soilwater_array[idx, jdx0] = self.soilwater[jdx0]
456
+ if self._snowcover_diskflag_writing:
457
+ k = 0
458
+ for jdx0 in range(self._snowcover_length_0):
459
+ self._snowcover_ncarray[k] = self.snowcover[jdx0]
460
+ k += 1
461
+ if self._snowcover_ramflag:
462
+ for jdx0 in range(self._snowcover_length_0):
463
+ self._snowcover_array[idx, jdx0] = self.snowcover[jdx0]
464
+ if self._snowycanopy_diskflag_writing:
465
+ k = 0
466
+ for jdx0 in range(self._snowycanopy_length_0):
467
+ self._snowycanopy_ncarray[k] = self.snowycanopy[jdx0]
468
+ k += 1
469
+ if self._snowycanopy_ramflag:
470
+ for jdx0 in range(self._snowycanopy_length_0):
471
+ self._snowycanopy_array[idx, jdx0] = self.snowycanopy[jdx0]
472
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
473
+ if name == "windspeed2m":
474
+ self._windspeed2m_outputpointer = value.p_value
475
+ if name == "dailywindspeed2m":
476
+ self._dailywindspeed2m_outputpointer = value.p_value
477
+ if name == "windspeed10m":
478
+ self._windspeed10m_outputpointer = value.p_value
479
+ if name == "dailyrelativehumidity":
480
+ self._dailyrelativehumidity_outputpointer = value.p_value
481
+ if name == "sunshineduration":
482
+ self._sunshineduration_outputpointer = value.p_value
483
+ if name == "possiblesunshineduration":
484
+ self._possiblesunshineduration_outputpointer = value.p_value
485
+ if name == "dailysunshineduration":
486
+ self._dailysunshineduration_outputpointer = value.p_value
487
+ if name == "dailypossiblesunshineduration":
488
+ self._dailypossiblesunshineduration_outputpointer = value.p_value
489
+ cpdef inline void update_outputs(self) noexcept nogil:
490
+ if self._windspeed2m_outputflag:
491
+ self._windspeed2m_outputpointer[0] = self.windspeed2m
492
+ if self._dailywindspeed2m_outputflag:
493
+ self._dailywindspeed2m_outputpointer[0] = self.dailywindspeed2m
494
+ if self._windspeed10m_outputflag:
495
+ self._windspeed10m_outputpointer[0] = self.windspeed10m
496
+ if self._dailyrelativehumidity_outputflag:
497
+ self._dailyrelativehumidity_outputpointer[0] = self.dailyrelativehumidity
498
+ if self._sunshineduration_outputflag:
499
+ self._sunshineduration_outputpointer[0] = self.sunshineduration
500
+ if self._possiblesunshineduration_outputflag:
501
+ self._possiblesunshineduration_outputpointer[0] = self.possiblesunshineduration
502
+ if self._dailysunshineduration_outputflag:
503
+ self._dailysunshineduration_outputpointer[0] = self.dailysunshineduration
504
+ if self._dailypossiblesunshineduration_outputflag:
505
+ self._dailypossiblesunshineduration_outputpointer[0] = self.dailypossiblesunshineduration
506
+ @cython.final
507
+ cdef class FluxSequences:
508
+ cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
509
+ cdef numpy.int64_t jdx0
510
+ cdef numpy.int64_t k
511
+ if self._globalradiation_diskflag_reading:
512
+ self.globalradiation = self._globalradiation_ncarray[0]
513
+ elif self._globalradiation_ramflag:
514
+ self.globalradiation = self._globalradiation_array[idx]
515
+ if self._dailyglobalradiation_diskflag_reading:
516
+ self.dailyglobalradiation = self._dailyglobalradiation_ncarray[0]
517
+ elif self._dailyglobalradiation_ramflag:
518
+ self.dailyglobalradiation = self._dailyglobalradiation_array[idx]
519
+ if self._netshortwaveradiation_diskflag_reading:
520
+ k = 0
521
+ for jdx0 in range(self._netshortwaveradiation_length_0):
522
+ self.netshortwaveradiation[jdx0] = self._netshortwaveradiation_ncarray[k]
523
+ k += 1
524
+ elif self._netshortwaveradiation_ramflag:
525
+ for jdx0 in range(self._netshortwaveradiation_length_0):
526
+ self.netshortwaveradiation[jdx0] = self._netshortwaveradiation_array[idx, jdx0]
527
+ if self._dailynetshortwaveradiation_diskflag_reading:
528
+ k = 0
529
+ for jdx0 in range(self._dailynetshortwaveradiation_length_0):
530
+ self.dailynetshortwaveradiation[jdx0] = self._dailynetshortwaveradiation_ncarray[k]
531
+ k += 1
532
+ elif self._dailynetshortwaveradiation_ramflag:
533
+ for jdx0 in range(self._dailynetshortwaveradiation_length_0):
534
+ self.dailynetshortwaveradiation[jdx0] = self._dailynetshortwaveradiation_array[idx, jdx0]
535
+ if self._dailynetlongwaveradiation_diskflag_reading:
536
+ k = 0
537
+ for jdx0 in range(self._dailynetlongwaveradiation_length_0):
538
+ self.dailynetlongwaveradiation[jdx0] = self._dailynetlongwaveradiation_ncarray[k]
539
+ k += 1
540
+ elif self._dailynetlongwaveradiation_ramflag:
541
+ for jdx0 in range(self._dailynetlongwaveradiation_length_0):
542
+ self.dailynetlongwaveradiation[jdx0] = self._dailynetlongwaveradiation_array[idx, jdx0]
543
+ if self._netradiation_diskflag_reading:
544
+ k = 0
545
+ for jdx0 in range(self._netradiation_length_0):
546
+ self.netradiation[jdx0] = self._netradiation_ncarray[k]
547
+ k += 1
548
+ elif self._netradiation_ramflag:
549
+ for jdx0 in range(self._netradiation_length_0):
550
+ self.netradiation[jdx0] = self._netradiation_array[idx, jdx0]
551
+ if self._dailynetradiation_diskflag_reading:
552
+ k = 0
553
+ for jdx0 in range(self._dailynetradiation_length_0):
554
+ self.dailynetradiation[jdx0] = self._dailynetradiation_ncarray[k]
555
+ k += 1
556
+ elif self._dailynetradiation_ramflag:
557
+ for jdx0 in range(self._dailynetradiation_length_0):
558
+ self.dailynetradiation[jdx0] = self._dailynetradiation_array[idx, jdx0]
559
+ if self._soilheatflux_diskflag_reading:
560
+ k = 0
561
+ for jdx0 in range(self._soilheatflux_length_0):
562
+ self.soilheatflux[jdx0] = self._soilheatflux_ncarray[k]
563
+ k += 1
564
+ elif self._soilheatflux_ramflag:
565
+ for jdx0 in range(self._soilheatflux_length_0):
566
+ self.soilheatflux[jdx0] = self._soilheatflux_array[idx, jdx0]
567
+ if self._potentialinterceptionevaporation_diskflag_reading:
568
+ k = 0
569
+ for jdx0 in range(self._potentialinterceptionevaporation_length_0):
570
+ self.potentialinterceptionevaporation[jdx0] = self._potentialinterceptionevaporation_ncarray[k]
571
+ k += 1
572
+ elif self._potentialinterceptionevaporation_ramflag:
573
+ for jdx0 in range(self._potentialinterceptionevaporation_length_0):
574
+ self.potentialinterceptionevaporation[jdx0] = self._potentialinterceptionevaporation_array[idx, jdx0]
575
+ if self._waterevaporation_diskflag_reading:
576
+ k = 0
577
+ for jdx0 in range(self._waterevaporation_length_0):
578
+ self.waterevaporation[jdx0] = self._waterevaporation_ncarray[k]
579
+ k += 1
580
+ elif self._waterevaporation_ramflag:
581
+ for jdx0 in range(self._waterevaporation_length_0):
582
+ self.waterevaporation[jdx0] = self._waterevaporation_array[idx, jdx0]
583
+ if self._interceptionevaporation_diskflag_reading:
584
+ k = 0
585
+ for jdx0 in range(self._interceptionevaporation_length_0):
586
+ self.interceptionevaporation[jdx0] = self._interceptionevaporation_ncarray[k]
587
+ k += 1
588
+ elif self._interceptionevaporation_ramflag:
589
+ for jdx0 in range(self._interceptionevaporation_length_0):
590
+ self.interceptionevaporation[jdx0] = self._interceptionevaporation_array[idx, jdx0]
591
+ if self._soilevapotranspiration_diskflag_reading:
592
+ k = 0
593
+ for jdx0 in range(self._soilevapotranspiration_length_0):
594
+ self.soilevapotranspiration[jdx0] = self._soilevapotranspiration_ncarray[k]
595
+ k += 1
596
+ elif self._soilevapotranspiration_ramflag:
597
+ for jdx0 in range(self._soilevapotranspiration_length_0):
598
+ self.soilevapotranspiration[jdx0] = self._soilevapotranspiration_array[idx, jdx0]
599
+ cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
600
+ cdef numpy.int64_t jdx0
601
+ cdef numpy.int64_t k
602
+ if self._globalradiation_diskflag_writing:
603
+ self._globalradiation_ncarray[0] = self.globalradiation
604
+ if self._globalradiation_ramflag:
605
+ self._globalradiation_array[idx] = self.globalradiation
606
+ if self._dailyglobalradiation_diskflag_writing:
607
+ self._dailyglobalradiation_ncarray[0] = self.dailyglobalradiation
608
+ if self._dailyglobalradiation_ramflag:
609
+ self._dailyglobalradiation_array[idx] = self.dailyglobalradiation
610
+ if self._netshortwaveradiation_diskflag_writing:
611
+ k = 0
612
+ for jdx0 in range(self._netshortwaveradiation_length_0):
613
+ self._netshortwaveradiation_ncarray[k] = self.netshortwaveradiation[jdx0]
614
+ k += 1
615
+ if self._netshortwaveradiation_ramflag:
616
+ for jdx0 in range(self._netshortwaveradiation_length_0):
617
+ self._netshortwaveradiation_array[idx, jdx0] = self.netshortwaveradiation[jdx0]
618
+ if self._dailynetshortwaveradiation_diskflag_writing:
619
+ k = 0
620
+ for jdx0 in range(self._dailynetshortwaveradiation_length_0):
621
+ self._dailynetshortwaveradiation_ncarray[k] = self.dailynetshortwaveradiation[jdx0]
622
+ k += 1
623
+ if self._dailynetshortwaveradiation_ramflag:
624
+ for jdx0 in range(self._dailynetshortwaveradiation_length_0):
625
+ self._dailynetshortwaveradiation_array[idx, jdx0] = self.dailynetshortwaveradiation[jdx0]
626
+ if self._dailynetlongwaveradiation_diskflag_writing:
627
+ k = 0
628
+ for jdx0 in range(self._dailynetlongwaveradiation_length_0):
629
+ self._dailynetlongwaveradiation_ncarray[k] = self.dailynetlongwaveradiation[jdx0]
630
+ k += 1
631
+ if self._dailynetlongwaveradiation_ramflag:
632
+ for jdx0 in range(self._dailynetlongwaveradiation_length_0):
633
+ self._dailynetlongwaveradiation_array[idx, jdx0] = self.dailynetlongwaveradiation[jdx0]
634
+ if self._netradiation_diskflag_writing:
635
+ k = 0
636
+ for jdx0 in range(self._netradiation_length_0):
637
+ self._netradiation_ncarray[k] = self.netradiation[jdx0]
638
+ k += 1
639
+ if self._netradiation_ramflag:
640
+ for jdx0 in range(self._netradiation_length_0):
641
+ self._netradiation_array[idx, jdx0] = self.netradiation[jdx0]
642
+ if self._dailynetradiation_diskflag_writing:
643
+ k = 0
644
+ for jdx0 in range(self._dailynetradiation_length_0):
645
+ self._dailynetradiation_ncarray[k] = self.dailynetradiation[jdx0]
646
+ k += 1
647
+ if self._dailynetradiation_ramflag:
648
+ for jdx0 in range(self._dailynetradiation_length_0):
649
+ self._dailynetradiation_array[idx, jdx0] = self.dailynetradiation[jdx0]
650
+ if self._soilheatflux_diskflag_writing:
651
+ k = 0
652
+ for jdx0 in range(self._soilheatflux_length_0):
653
+ self._soilheatflux_ncarray[k] = self.soilheatflux[jdx0]
654
+ k += 1
655
+ if self._soilheatflux_ramflag:
656
+ for jdx0 in range(self._soilheatflux_length_0):
657
+ self._soilheatflux_array[idx, jdx0] = self.soilheatflux[jdx0]
658
+ if self._potentialinterceptionevaporation_diskflag_writing:
659
+ k = 0
660
+ for jdx0 in range(self._potentialinterceptionevaporation_length_0):
661
+ self._potentialinterceptionevaporation_ncarray[k] = self.potentialinterceptionevaporation[jdx0]
662
+ k += 1
663
+ if self._potentialinterceptionevaporation_ramflag:
664
+ for jdx0 in range(self._potentialinterceptionevaporation_length_0):
665
+ self._potentialinterceptionevaporation_array[idx, jdx0] = self.potentialinterceptionevaporation[jdx0]
666
+ if self._waterevaporation_diskflag_writing:
667
+ k = 0
668
+ for jdx0 in range(self._waterevaporation_length_0):
669
+ self._waterevaporation_ncarray[k] = self.waterevaporation[jdx0]
670
+ k += 1
671
+ if self._waterevaporation_ramflag:
672
+ for jdx0 in range(self._waterevaporation_length_0):
673
+ self._waterevaporation_array[idx, jdx0] = self.waterevaporation[jdx0]
674
+ if self._interceptionevaporation_diskflag_writing:
675
+ k = 0
676
+ for jdx0 in range(self._interceptionevaporation_length_0):
677
+ self._interceptionevaporation_ncarray[k] = self.interceptionevaporation[jdx0]
678
+ k += 1
679
+ if self._interceptionevaporation_ramflag:
680
+ for jdx0 in range(self._interceptionevaporation_length_0):
681
+ self._interceptionevaporation_array[idx, jdx0] = self.interceptionevaporation[jdx0]
682
+ if self._soilevapotranspiration_diskflag_writing:
683
+ k = 0
684
+ for jdx0 in range(self._soilevapotranspiration_length_0):
685
+ self._soilevapotranspiration_ncarray[k] = self.soilevapotranspiration[jdx0]
686
+ k += 1
687
+ if self._soilevapotranspiration_ramflag:
688
+ for jdx0 in range(self._soilevapotranspiration_length_0):
689
+ self._soilevapotranspiration_array[idx, jdx0] = self.soilevapotranspiration[jdx0]
690
+ cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
691
+ if name == "globalradiation":
692
+ self._globalradiation_outputpointer = value.p_value
693
+ if name == "dailyglobalradiation":
694
+ self._dailyglobalradiation_outputpointer = value.p_value
695
+ cpdef inline void update_outputs(self) noexcept nogil:
696
+ if self._globalradiation_outputflag:
697
+ self._globalradiation_outputpointer[0] = self.globalradiation
698
+ if self._dailyglobalradiation_outputflag:
699
+ self._dailyglobalradiation_outputpointer[0] = self.dailyglobalradiation
700
+ @cython.final
701
+ cdef class LogSequences:
702
+ pass
703
+ @cython.final
704
+ cdef class Model(masterinterface.MasterInterface):
705
+ def __init__(self):
706
+ super().__init__()
707
+ self.intercmodel = None
708
+ self.intercmodel_is_mainmodel = False
709
+ self.radiationmodel = None
710
+ self.radiationmodel_is_mainmodel = False
711
+ self.snowalbedomodel = None
712
+ self.snowalbedomodel_is_mainmodel = False
713
+ self.snowcovermodel = None
714
+ self.snowcovermodel_is_mainmodel = False
715
+ self.snowycanopymodel = None
716
+ self.snowycanopymodel_is_mainmodel = False
717
+ self.soilwatermodel = None
718
+ self.soilwatermodel_is_mainmodel = False
719
+ self.tempmodel = None
720
+ self.tempmodel_is_mainmodel = False
721
+ def get_intercmodel(self) -> masterinterface.MasterInterface | None:
722
+ return self.intercmodel
723
+ def set_intercmodel(self, intercmodel: masterinterface.MasterInterface | None) -> None:
724
+ self.intercmodel = intercmodel
725
+ def get_radiationmodel(self) -> masterinterface.MasterInterface | None:
726
+ return self.radiationmodel
727
+ def set_radiationmodel(self, radiationmodel: masterinterface.MasterInterface | None) -> None:
728
+ self.radiationmodel = radiationmodel
729
+ def get_snowalbedomodel(self) -> masterinterface.MasterInterface | None:
730
+ return self.snowalbedomodel
731
+ def set_snowalbedomodel(self, snowalbedomodel: masterinterface.MasterInterface | None) -> None:
732
+ self.snowalbedomodel = snowalbedomodel
733
+ def get_snowcovermodel(self) -> masterinterface.MasterInterface | None:
734
+ return self.snowcovermodel
735
+ def set_snowcovermodel(self, snowcovermodel: masterinterface.MasterInterface | None) -> None:
736
+ self.snowcovermodel = snowcovermodel
737
+ def get_snowycanopymodel(self) -> masterinterface.MasterInterface | None:
738
+ return self.snowycanopymodel
739
+ def set_snowycanopymodel(self, snowycanopymodel: masterinterface.MasterInterface | None) -> None:
740
+ self.snowycanopymodel = snowycanopymodel
741
+ def get_soilwatermodel(self) -> masterinterface.MasterInterface | None:
742
+ return self.soilwatermodel
743
+ def set_soilwatermodel(self, soilwatermodel: masterinterface.MasterInterface | None) -> None:
744
+ self.soilwatermodel = soilwatermodel
745
+ def get_tempmodel(self) -> masterinterface.MasterInterface | None:
746
+ return self.tempmodel
747
+ def set_tempmodel(self, tempmodel: masterinterface.MasterInterface | None) -> None:
748
+ self.tempmodel = tempmodel
749
+ cpdef inline void simulate(self, numpy.int64_t idx) noexcept nogil:
750
+ self.idx_sim = idx
751
+ self.reset_reuseflags()
752
+ self.load_data(idx)
753
+ self.run()
754
+ self.update_outputs()
755
+ cpdef void reset_reuseflags(self) noexcept nogil:
756
+ if (self.intercmodel is not None) and not self.intercmodel_is_mainmodel:
757
+ self.intercmodel.reset_reuseflags()
758
+ if (self.radiationmodel is not None) and not self.radiationmodel_is_mainmodel:
759
+ self.radiationmodel.reset_reuseflags()
760
+ if (self.snowalbedomodel is not None) and not self.snowalbedomodel_is_mainmodel:
761
+ self.snowalbedomodel.reset_reuseflags()
762
+ if (self.snowcovermodel is not None) and not self.snowcovermodel_is_mainmodel:
763
+ self.snowcovermodel.reset_reuseflags()
764
+ if (self.snowycanopymodel is not None) and not self.snowycanopymodel_is_mainmodel:
765
+ self.snowycanopymodel.reset_reuseflags()
766
+ if (self.soilwatermodel is not None) and not self.soilwatermodel_is_mainmodel:
767
+ self.soilwatermodel.reset_reuseflags()
768
+ if (self.tempmodel is not None) and not self.tempmodel_is_mainmodel:
769
+ self.tempmodel.reset_reuseflags()
770
+ cpdef void load_data(self, numpy.int64_t idx) noexcept nogil:
771
+ self.idx_sim = idx
772
+ self.sequences.inputs.load_data(idx)
773
+ if (self.intercmodel is not None) and not self.intercmodel_is_mainmodel:
774
+ self.intercmodel.load_data(idx)
775
+ if (self.radiationmodel is not None) and not self.radiationmodel_is_mainmodel:
776
+ self.radiationmodel.load_data(idx)
777
+ if (self.snowalbedomodel is not None) and not self.snowalbedomodel_is_mainmodel:
778
+ self.snowalbedomodel.load_data(idx)
779
+ if (self.snowcovermodel is not None) and not self.snowcovermodel_is_mainmodel:
780
+ self.snowcovermodel.load_data(idx)
781
+ if (self.snowycanopymodel is not None) and not self.snowycanopymodel_is_mainmodel:
782
+ self.snowycanopymodel.load_data(idx)
783
+ if (self.soilwatermodel is not None) and not self.soilwatermodel_is_mainmodel:
784
+ self.soilwatermodel.load_data(idx)
785
+ if (self.tempmodel is not None) and not self.tempmodel_is_mainmodel:
786
+ self.tempmodel.load_data(idx)
787
+ cpdef void save_data(self, numpy.int64_t idx) noexcept nogil:
788
+ self.idx_sim = idx
789
+ self.sequences.inputs.save_data(idx)
790
+ self.sequences.factors.save_data(idx)
791
+ self.sequences.fluxes.save_data(idx)
792
+ if (self.intercmodel is not None) and not self.intercmodel_is_mainmodel:
793
+ self.intercmodel.save_data(idx)
794
+ if (self.radiationmodel is not None) and not self.radiationmodel_is_mainmodel:
795
+ self.radiationmodel.save_data(idx)
796
+ if (self.snowalbedomodel is not None) and not self.snowalbedomodel_is_mainmodel:
797
+ self.snowalbedomodel.save_data(idx)
798
+ if (self.snowcovermodel is not None) and not self.snowcovermodel_is_mainmodel:
799
+ self.snowcovermodel.save_data(idx)
800
+ if (self.snowycanopymodel is not None) and not self.snowycanopymodel_is_mainmodel:
801
+ self.snowycanopymodel.save_data(idx)
802
+ if (self.soilwatermodel is not None) and not self.soilwatermodel_is_mainmodel:
803
+ self.soilwatermodel.save_data(idx)
804
+ if (self.tempmodel is not None) and not self.tempmodel_is_mainmodel:
805
+ self.tempmodel.save_data(idx)
806
+ cpdef void new2old(self) noexcept nogil:
807
+ if (self.intercmodel is not None) and not self.intercmodel_is_mainmodel:
808
+ self.intercmodel.new2old()
809
+ if (self.radiationmodel is not None) and not self.radiationmodel_is_mainmodel:
810
+ self.radiationmodel.new2old()
811
+ if (self.snowalbedomodel is not None) and not self.snowalbedomodel_is_mainmodel:
812
+ self.snowalbedomodel.new2old()
813
+ if (self.snowcovermodel is not None) and not self.snowcovermodel_is_mainmodel:
814
+ self.snowcovermodel.new2old()
815
+ if (self.snowycanopymodel is not None) and not self.snowycanopymodel_is_mainmodel:
816
+ self.snowycanopymodel.new2old()
817
+ if (self.soilwatermodel is not None) and not self.soilwatermodel_is_mainmodel:
818
+ self.soilwatermodel.new2old()
819
+ if (self.tempmodel is not None) and not self.tempmodel_is_mainmodel:
820
+ self.tempmodel.new2old()
821
+ cpdef inline void run(self) noexcept nogil:
822
+ self.determine_interceptionevaporation_v2()
823
+ self.determine_soilevapotranspiration_v3()
824
+ self.determine_waterevaporation_v3()
825
+ cpdef inline void update_inlets(self) noexcept nogil:
826
+ pass
827
+ cpdef inline void update_outlets(self) noexcept nogil:
828
+ pass
829
+ cpdef inline void update_receivers(self, numpy.int64_t idx) noexcept nogil:
830
+ self.idx_sim = idx
831
+ pass
832
+ cpdef inline void update_senders(self, numpy.int64_t idx) noexcept nogil:
833
+ self.idx_sim = idx
834
+ pass
835
+ cpdef inline void update_outputs(self) noexcept nogil:
836
+ self.sequences.factors.update_outputs()
837
+ self.sequences.fluxes.update_outputs()
838
+ cpdef double get_waterevaporation_v1(self, numpy.int64_t k) noexcept nogil:
839
+ return self.sequences.fluxes.waterevaporation[k]
840
+ cpdef double get_interceptionevaporation_v1(self, numpy.int64_t k) noexcept nogil:
841
+ return self.sequences.fluxes.interceptionevaporation[k]
842
+ cpdef double get_soilevapotranspiration_v1(self, numpy.int64_t k) noexcept nogil:
843
+ return self.sequences.fluxes.soilevapotranspiration[k]
844
+ cpdef inline void process_radiationmodel_v1(self) noexcept nogil:
845
+ if self.radiationmodel_typeid == 1:
846
+ (<masterinterface.MasterInterface>self.radiationmodel).process_radiation()
847
+ cpdef inline void calc_possiblesunshineduration_v1(self) noexcept nogil:
848
+ if self.radiationmodel_typeid == 1:
849
+ self.sequences.factors.possiblesunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_possiblesunshineduration()
850
+ elif self.radiationmodel_typeid == 4:
851
+ self.sequences.factors.possiblesunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_possiblesunshineduration()
852
+ cpdef inline void calc_sunshineduration_v1(self) noexcept nogil:
853
+ if self.radiationmodel_typeid == 1:
854
+ self.sequences.factors.sunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_sunshineduration()
855
+ elif self.radiationmodel_typeid == 4:
856
+ self.sequences.factors.sunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_sunshineduration()
857
+ cpdef inline void calc_globalradiation_v1(self) noexcept nogil:
858
+ if self.radiationmodel_typeid == 1:
859
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
860
+ elif self.radiationmodel_typeid == 2:
861
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
862
+ elif self.radiationmodel_typeid == 3:
863
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
864
+ elif self.radiationmodel_typeid == 4:
865
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
866
+ cpdef inline void calc_airtemperature_v1(self) noexcept nogil:
867
+ if self.tempmodel_typeid == 1:
868
+ self.calc_airtemperature_tempmodel_v1( (<masterinterface.MasterInterface>self.tempmodel) )
869
+ elif self.tempmodel_typeid == 2:
870
+ self.calc_airtemperature_tempmodel_v2( (<masterinterface.MasterInterface>self.tempmodel) )
871
+ cpdef inline void update_loggedairtemperature_v1(self) noexcept nogil:
872
+ cdef numpy.int64_t k
873
+ cdef numpy.int64_t idx
874
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
875
+ for k in range(self.parameters.control.nmbhru):
876
+ self.sequences.logs.loggedairtemperature[idx, k] = self.sequences.logs.loggedairtemperature[idx - 1, k]
877
+ for k in range(self.parameters.control.nmbhru):
878
+ self.sequences.logs.loggedairtemperature[0, k] = self.sequences.factors.airtemperature[k]
879
+ cpdef inline void calc_dailyairtemperature_v1(self) noexcept nogil:
880
+ cdef numpy.int64_t idx
881
+ cdef numpy.int64_t k
882
+ for k in range(self.parameters.control.nmbhru):
883
+ self.sequences.factors.dailyairtemperature[k] = 0.0
884
+ for idx in range(self.parameters.derived.nmblogentries):
885
+ for k in range(self.parameters.control.nmbhru):
886
+ self.sequences.factors.dailyairtemperature[k] = self.sequences.factors.dailyairtemperature[k] + (self.sequences.logs.loggedairtemperature[idx, k])
887
+ for k in range(self.parameters.control.nmbhru):
888
+ self.sequences.factors.dailyairtemperature[k] = self.sequences.factors.dailyairtemperature[k] / (self.parameters.derived.nmblogentries)
889
+ cpdef inline double return_adjustedwindspeed_v1(self, double h) noexcept nogil:
890
+ if h == self.parameters.control.measuringheightwindspeed:
891
+ return self.sequences.inputs.windspeed
892
+ return self.sequences.inputs.windspeed * ( log(h / self.parameters.fixed.roughnesslengthgrass) / log(self.parameters.control.measuringheightwindspeed / self.parameters.fixed.roughnesslengthgrass) )
893
+ cpdef inline void calc_windspeed2m_v2(self) noexcept nogil:
894
+ self.sequences.factors.windspeed2m = self.return_adjustedwindspeed_v1(2.0)
895
+ cpdef inline void update_loggedwindspeed2m_v1(self) noexcept nogil:
896
+ cdef numpy.int64_t idx
897
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
898
+ self.sequences.logs.loggedwindspeed2m[idx] = self.sequences.logs.loggedwindspeed2m[idx - 1]
899
+ self.sequences.logs.loggedwindspeed2m[0] = self.sequences.factors.windspeed2m
900
+ cpdef inline void calc_dailywindspeed2m_v1(self) noexcept nogil:
901
+ cdef numpy.int64_t idx
902
+ self.sequences.factors.dailywindspeed2m = 0.0
903
+ for idx in range(self.parameters.derived.nmblogentries):
904
+ self.sequences.factors.dailywindspeed2m = self.sequences.factors.dailywindspeed2m + (self.sequences.logs.loggedwindspeed2m[idx])
905
+ self.sequences.factors.dailywindspeed2m = self.sequences.factors.dailywindspeed2m / (self.parameters.derived.nmblogentries)
906
+ cpdef inline void calc_windspeed10m_v1(self) noexcept nogil:
907
+ self.sequences.factors.windspeed10m = self.return_adjustedwindspeed_v1(10.0)
908
+ cpdef inline void update_loggedrelativehumidity_v1(self) noexcept nogil:
909
+ cdef numpy.int64_t idx
910
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
911
+ self.sequences.logs.loggedrelativehumidity[idx] = self.sequences.logs.loggedrelativehumidity[idx - 1]
912
+ self.sequences.logs.loggedrelativehumidity[0] = self.sequences.inputs.relativehumidity
913
+ cpdef inline void calc_dailyrelativehumidity_v1(self) noexcept nogil:
914
+ cdef numpy.int64_t idx
915
+ self.sequences.factors.dailyrelativehumidity = 0.0
916
+ for idx in range(self.parameters.derived.nmblogentries):
917
+ self.sequences.factors.dailyrelativehumidity = self.sequences.factors.dailyrelativehumidity + (self.sequences.logs.loggedrelativehumidity[idx])
918
+ self.sequences.factors.dailyrelativehumidity = self.sequences.factors.dailyrelativehumidity / (self.parameters.derived.nmblogentries)
919
+ cpdef inline double return_saturationvapourpressure_v1(self, double airtemperature) noexcept nogil:
920
+ return 6.1078 * 2.71828 ** ( 17.08085 * airtemperature / (airtemperature + 234.175) )
921
+ cpdef inline void calc_saturationvapourpressure_v2(self) noexcept nogil:
922
+ cdef numpy.int64_t k
923
+ for k in range(self.parameters.control.nmbhru):
924
+ self.sequences.factors.saturationvapourpressure[k] = self.return_saturationvapourpressure_v1( self.sequences.factors.airtemperature[k] )
925
+ cpdef inline void calc_dailysaturationvapourpressure_v1(self) noexcept nogil:
926
+ cdef numpy.int64_t k
927
+ for k in range(self.parameters.control.nmbhru):
928
+ self.sequences.factors.dailysaturationvapourpressure[k] = ( self.return_saturationvapourpressure_v1(self.sequences.factors.dailyairtemperature[k]) )
929
+ cpdef inline double return_saturationvapourpressureslope_v1(self, double t) noexcept nogil:
930
+ return ( 24430.6 * exp(17.08085 * t / (t + 234.175)) / (t + 234.175) ** 2 )
931
+ cpdef inline void calc_saturationvapourpressureslope_v2(self) noexcept nogil:
932
+ cdef numpy.int64_t k
933
+ for k in range(self.parameters.control.nmbhru):
934
+ self.sequences.factors.saturationvapourpressureslope[k] = ( self.return_saturationvapourpressureslope_v1(self.sequences.factors.airtemperature[k]) )
935
+ cpdef inline void calc_dailysaturationvapourpressureslope_v1(self) noexcept nogil:
936
+ cdef numpy.int64_t k
937
+ for k in range(self.parameters.control.nmbhru):
938
+ self.sequences.factors.dailysaturationvapourpressureslope[k] = ( self.return_saturationvapourpressureslope_v1( self.sequences.factors.dailyairtemperature[k] ) )
939
+ cpdef inline void calc_actualvapourpressure_v1(self) noexcept nogil:
940
+ cdef numpy.int64_t k
941
+ for k in range(self.parameters.control.nmbhru):
942
+ self.sequences.factors.actualvapourpressure[k] = ( self.sequences.factors.saturationvapourpressure[k] * self.sequences.inputs.relativehumidity / 100.0 )
943
+ cpdef inline void calc_dryairpressure_v1(self) noexcept nogil:
944
+ cdef numpy.int64_t k
945
+ for k in range(self.parameters.control.nmbhru):
946
+ self.sequences.factors.dryairpressure[k] = ( self.sequences.inputs.atmosphericpressure - self.sequences.factors.actualvapourpressure[k] )
947
+ cpdef inline void calc_airdensity_v1(self) noexcept nogil:
948
+ cdef numpy.int64_t k
949
+ for k in range(self.parameters.control.nmbhru):
950
+ self.sequences.factors.airdensity[k] = (100.0 / (self.sequences.factors.airtemperature[k] + 273.15)) * ( self.sequences.factors.dryairpressure[k] / self.parameters.fixed.gasconstantdryair + self.sequences.factors.actualvapourpressure[k] / self.parameters.fixed.gasconstantwatervapour )
951
+ cpdef inline void calc_dailyactualvapourpressure_v1(self) noexcept nogil:
952
+ cdef numpy.int64_t k
953
+ for k in range(self.parameters.control.nmbhru):
954
+ self.sequences.factors.dailyactualvapourpressure[k] = ( self.sequences.factors.dailysaturationvapourpressure[k] * self.sequences.factors.dailyrelativehumidity / 100.0 )
955
+ cpdef inline void update_loggedsunshineduration_v1(self) noexcept nogil:
956
+ cdef numpy.int64_t idx
957
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
958
+ self.sequences.logs.loggedsunshineduration[idx] = self.sequences.logs.loggedsunshineduration[idx - 1]
959
+ self.sequences.logs.loggedsunshineduration[0] = self.sequences.factors.sunshineduration
960
+ cpdef inline void calc_dailysunshineduration_v1(self) noexcept nogil:
961
+ cdef numpy.int64_t idx
962
+ self.sequences.factors.dailysunshineduration = 0.0
963
+ for idx in range(self.parameters.derived.nmblogentries):
964
+ self.sequences.factors.dailysunshineduration = self.sequences.factors.dailysunshineduration + (self.sequences.logs.loggedsunshineduration[idx])
965
+ cpdef inline void update_loggedpossiblesunshineduration_v1(self) noexcept nogil:
966
+ cdef numpy.int64_t idx
967
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
968
+ self.sequences.logs.loggedpossiblesunshineduration[idx] = ( self.sequences.logs.loggedpossiblesunshineduration[idx - 1] )
969
+ self.sequences.logs.loggedpossiblesunshineduration[0] = self.sequences.factors.possiblesunshineduration
970
+ cpdef inline void calc_dailypossiblesunshineduration_v1(self) noexcept nogil:
971
+ cdef numpy.int64_t idx
972
+ self.sequences.factors.dailypossiblesunshineduration = 0.0
973
+ for idx in range(self.parameters.derived.nmblogentries):
974
+ self.sequences.factors.dailypossiblesunshineduration = self.sequences.factors.dailypossiblesunshineduration + (self.sequences.logs.loggedpossiblesunshineduration[idx])
975
+ cpdef inline void update_loggedglobalradiation_v1(self) noexcept nogil:
976
+ cdef numpy.int64_t idx
977
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
978
+ self.sequences.logs.loggedglobalradiation[idx] = self.sequences.logs.loggedglobalradiation[idx - 1]
979
+ self.sequences.logs.loggedglobalradiation[0] = self.sequences.fluxes.globalradiation
980
+ cpdef inline void calc_dailyglobalradiation_v1(self) noexcept nogil:
981
+ cdef numpy.int64_t idx
982
+ self.sequences.fluxes.dailyglobalradiation = 0.0
983
+ for idx in range(self.parameters.derived.nmblogentries):
984
+ self.sequences.fluxes.dailyglobalradiation = self.sequences.fluxes.dailyglobalradiation + (self.sequences.logs.loggedglobalradiation[idx])
985
+ self.sequences.fluxes.dailyglobalradiation = self.sequences.fluxes.dailyglobalradiation / (self.parameters.derived.nmblogentries)
986
+ cpdef inline void calc_currentalbedo_v1(self) noexcept nogil:
987
+ cdef numpy.int64_t k
988
+ if self.snowalbedomodel is None:
989
+ for k in range(self.parameters.control.nmbhru):
990
+ self.sequences.factors.currentalbedo[k] = self.parameters.control.albedo[ self.parameters.control.hrutype[k] - self.parameters.control._albedo_rowmin, self.parameters.derived.moy[self.idx_sim] - self.parameters.control._albedo_columnmin, ]
991
+ elif self.snowalbedomodel_typeid == 1:
992
+ self.calc_currentalbedo_snowalbedomodel_v1( (<masterinterface.MasterInterface>self.snowalbedomodel) )
993
+ for k in range(self.parameters.control.nmbhru):
994
+ if isnan(self.sequences.factors.currentalbedo[k]):
995
+ self.sequences.factors.currentalbedo[k] = self.parameters.control.albedo[ self.parameters.control.hrutype[k] - self.parameters.control._albedo_rowmin, self.parameters.derived.moy[self.idx_sim] - self.parameters.control._albedo_columnmin, ]
996
+ cpdef inline void calc_netshortwaveradiation_v2(self) noexcept nogil:
997
+ cdef numpy.int64_t k
998
+ for k in range(self.parameters.control.nmbhru):
999
+ self.sequences.fluxes.netshortwaveradiation[k] = self.sequences.fluxes.globalradiation * ( 1.0 - self.sequences.factors.currentalbedo[k] )
1000
+ cpdef inline void calc_dailynetshortwaveradiation_v1(self) noexcept nogil:
1001
+ cdef numpy.int64_t k
1002
+ for k in range(self.parameters.control.nmbhru):
1003
+ self.sequences.fluxes.dailynetshortwaveradiation[k] = ( 1.0 - self.sequences.factors.currentalbedo[k] ) * self.sequences.fluxes.dailyglobalradiation
1004
+ cpdef inline void calc_dailynetlongwaveradiation_v1(self) noexcept nogil:
1005
+ cdef double t
1006
+ cdef numpy.int64_t k
1007
+ cdef double rel_sunshine
1008
+ rel_sunshine = min( self.sequences.factors.dailysunshineduration / self.sequences.factors.dailypossiblesunshineduration, 1.0 )
1009
+ for k in range(self.parameters.control.nmbhru):
1010
+ t = self.sequences.factors.dailyairtemperature[k] + 273.15
1011
+ self.sequences.fluxes.dailynetlongwaveradiation[k] = ( (0.2 + 0.8 * rel_sunshine) * (self.parameters.fixed.stefanboltzmannconstant * t**4) * ( self.parameters.control.emissivity - self.parameters.fixed.factorcounterradiation * (self.sequences.factors.dailyactualvapourpressure[k] / t) ** (1.0 / 7.0) ) )
1012
+ cpdef inline void calc_netradiation_v2(self) noexcept nogil:
1013
+ cdef numpy.int64_t k
1014
+ for k in range(self.parameters.control.nmbhru):
1015
+ self.sequences.fluxes.netradiation[k] = ( self.sequences.fluxes.netshortwaveradiation[k] - self.sequences.fluxes.dailynetlongwaveradiation[k] )
1016
+ cpdef inline void calc_dailynetradiation_v1(self) noexcept nogil:
1017
+ cdef numpy.int64_t k
1018
+ for k in range(self.parameters.control.nmbhru):
1019
+ self.sequences.fluxes.dailynetradiation[k] = ( self.sequences.fluxes.dailynetshortwaveradiation[k] - self.sequences.fluxes.dailynetlongwaveradiation[k] )
1020
+ cpdef inline void calc_aerodynamicresistance_v1(self) noexcept nogil:
1021
+ cdef double z0
1022
+ cdef double ch
1023
+ cdef numpy.int64_t k
1024
+ if self.sequences.factors.windspeed10m > 0.0:
1025
+ for k in range(self.parameters.control.nmbhru):
1026
+ ch = self.parameters.control.cropheight[ self.parameters.control.hrutype[k] - self.parameters.control._cropheight_rowmin, self.parameters.derived.moy[self.idx_sim] - self.parameters.control._cropheight_columnmin, ]
1027
+ if ch < 10.0:
1028
+ z0 = 0.021 + 0.163 * ch
1029
+ self.sequences.factors.aerodynamicresistance[k] = ( 6.25 / self.sequences.factors.windspeed10m * log(10.0 / z0) ** 2 )
1030
+ else:
1031
+ self.sequences.factors.aerodynamicresistance[k] = 94.0 / self.sequences.factors.windspeed10m
1032
+ else:
1033
+ for k in range(self.parameters.control.nmbhru):
1034
+ self.sequences.factors.aerodynamicresistance[k] = inf
1035
+ cpdef inline void calc_soilsurfaceresistance_v1(self) noexcept nogil:
1036
+ cdef double sw_act
1037
+ cdef double sw_max
1038
+ cdef numpy.int64_t k
1039
+ for k in range(self.parameters.control.nmbhru):
1040
+ sw_max = self.parameters.control.maxsoilwater[k]
1041
+ if not self.parameters.control.soil[k]:
1042
+ self.sequences.factors.soilsurfaceresistance[k] = nan
1043
+ elif sw_max > 20.0:
1044
+ self.sequences.factors.soilsurfaceresistance[k] = 100.0
1045
+ elif sw_max > 0.0:
1046
+ sw_act = min(max(self.sequences.factors.soilwater[k], 0.0), sw_max)
1047
+ self.sequences.factors.soilsurfaceresistance[k] = 100.0 * sw_max / (sw_act + 0.01 * sw_max)
1048
+ else:
1049
+ self.sequences.factors.soilsurfaceresistance[k] = inf
1050
+ cpdef inline void calc_landusesurfaceresistance_v1(self) noexcept nogil:
1051
+ cdef double thresh
1052
+ cdef double sw
1053
+ cdef double d
1054
+ cdef double r
1055
+ cdef numpy.int64_t k
1056
+ for k in range(self.parameters.control.nmbhru):
1057
+ r = self.parameters.control.surfaceresistance[ self.parameters.control.hrutype[k] - self.parameters.control._surfaceresistance_rowmin, self.parameters.derived.moy[self.idx_sim] - self.parameters.control._surfaceresistance_columnmin, ]
1058
+ if self.parameters.control.conifer[k]:
1059
+ d = self.sequences.factors.saturationvapourpressure[k] - self.sequences.factors.actualvapourpressure[k]
1060
+ if (self.sequences.factors.airtemperature[k] <= -5.0) or (d >= 20.0):
1061
+ self.sequences.factors.landusesurfaceresistance[k] = 10000.0
1062
+ elif self.sequences.factors.airtemperature[k] < 20.0:
1063
+ self.sequences.factors.landusesurfaceresistance[k] = min( (25.0 * r) / (self.sequences.factors.airtemperature[k] + 5.0) / (1.0 - 0.05 * d), 10000.0, )
1064
+ else:
1065
+ self.sequences.factors.landusesurfaceresistance[k] = min(r / (1.0 - 0.05 * d), 10000.0)
1066
+ else:
1067
+ self.sequences.factors.landusesurfaceresistance[k] = r
1068
+ if self.parameters.control.soil[k]:
1069
+ sw = self.sequences.factors.soilwater[k]
1070
+ if sw <= 0.0:
1071
+ self.sequences.factors.landusesurfaceresistance[k] = inf
1072
+ else:
1073
+ thresh = self.parameters.control.soilmoisturelimit[k] * self.parameters.control.maxsoilwater[k]
1074
+ if sw < thresh:
1075
+ self.sequences.factors.landusesurfaceresistance[k] = self.sequences.factors.landusesurfaceresistance[k] * (3.5 * ( 1.0 - sw / thresh ) + exp(0.2 * thresh / sw))
1076
+ else:
1077
+ self.sequences.factors.landusesurfaceresistance[k] = self.sequences.factors.landusesurfaceresistance[k] * (exp(0.2))
1078
+ cpdef inline void calc_actualsurfaceresistance_v1(self) noexcept nogil:
1079
+ cdef double w
1080
+ cdef double invsrnight
1081
+ cdef double invsrday
1082
+ cdef double lai
1083
+ cdef numpy.int64_t k
1084
+ for k in range(self.parameters.control.nmbhru):
1085
+ if self.parameters.control.soil[k]:
1086
+ lai = self.parameters.control.leafareaindex[ self.parameters.control.hrutype[k] - self.parameters.control._leafareaindex_rowmin, self.parameters.derived.moy[self.idx_sim] - self.parameters.control._leafareaindex_columnmin, ]
1087
+ invsrday = ( (1.0 - 0.7**lai) / self.sequences.factors.landusesurfaceresistance[k] ) + 0.7**lai / self.sequences.factors.soilsurfaceresistance[k]
1088
+ invsrnight = lai / 2500.0 + 1.0 / self.sequences.factors.soilsurfaceresistance[k]
1089
+ w = self.sequences.factors.possiblesunshineduration / self.parameters.derived.hours
1090
+ self.sequences.factors.actualsurfaceresistance[k] = 1.0 / ( w * invsrday + (1.0 - w) * invsrnight )
1091
+ else:
1092
+ self.sequences.factors.actualsurfaceresistance[k] = self.sequences.factors.landusesurfaceresistance[k]
1093
+ cpdef inline void calc_interceptedwater_v1(self) noexcept nogil:
1094
+ if self.intercmodel_typeid == 1:
1095
+ self.calc_interceptedwater_intercmodel_v1( (<masterinterface.MasterInterface>self.intercmodel) )
1096
+ cpdef inline void calc_snowycanopy_v1(self) noexcept nogil:
1097
+ cdef numpy.int64_t k
1098
+ if self.snowycanopymodel is None:
1099
+ for k in range(self.parameters.control.nmbhru):
1100
+ self.sequences.factors.snowycanopy[k] = nan
1101
+ elif self.snowycanopymodel_typeid == 1:
1102
+ self.calc_snowycanopy_snowycanopymodel_v1( (<masterinterface.MasterInterface>self.snowycanopymodel) )
1103
+ cpdef inline double return_evaporation_penmanmonteith_v1(self, numpy.int64_t k, double actualsurfaceresistance) noexcept nogil:
1104
+ cdef double c
1105
+ cdef double b
1106
+ cdef double t
1107
+ cdef double ar
1108
+ ar = min(max(self.sequences.factors.aerodynamicresistance[k], 1e-6), 1e6)
1109
+ t = 273.15 + self.sequences.factors.airtemperature[k]
1110
+ b = (4.0 * self.parameters.control.emissivity * self.parameters.fixed.stefanboltzmannconstant) * t**3
1111
+ c = 1.0 + b * ar / self.sequences.factors.airdensity[k] / self.parameters.fixed.heatcapacityair
1112
+ return ( ( self.sequences.factors.saturationvapourpressureslope[k] * (self.sequences.fluxes.netradiation[k] - self.sequences.fluxes.soilheatflux[k]) + (c * self.sequences.factors.airdensity[k] * self.parameters.fixed.heatcapacityair) * (self.sequences.factors.saturationvapourpressure[k] - self.sequences.factors.actualvapourpressure[k]) / ar ) / ( self.sequences.factors.saturationvapourpressureslope[k] + self.parameters.fixed.psychrometricconstant * c * (1.0 + actualsurfaceresistance / ar) ) / self.parameters.fixed.heatofcondensation )
1113
+ cpdef inline void calc_interceptionevaporation_v2(self) noexcept nogil:
1114
+ cdef numpy.int64_t k
1115
+ for k in range(self.parameters.control.nmbhru):
1116
+ if ( self.parameters.control.interception[k] and (self.parameters.control.tree[k] or (self.sequences.factors.snowcover[k] == 0.0)) and not (self.parameters.control.tree[k] and (self.sequences.factors.snowycanopy[k] > 0.0)) ):
1117
+ self.sequences.fluxes.interceptionevaporation[k] = min( self.sequences.fluxes.potentialinterceptionevaporation[k], self.sequences.factors.interceptedwater[k] )
1118
+ else:
1119
+ self.sequences.fluxes.interceptionevaporation[k] = 0.0
1120
+ cpdef inline void calc_soilwater_v1(self) noexcept nogil:
1121
+ if self.soilwatermodel_typeid == 1:
1122
+ self.calc_soilwater_soilwatermodel_v1( (<masterinterface.MasterInterface>self.soilwatermodel) )
1123
+ cpdef inline void calc_snowcover_v1(self) noexcept nogil:
1124
+ if self.snowcovermodel_typeid == 1:
1125
+ self.calc_snowcover_snowcovermodel_v1( (<masterinterface.MasterInterface>self.snowcovermodel) )
1126
+ cpdef inline void calc_soilheatflux_v3(self) noexcept nogil:
1127
+ cdef numpy.int64_t k
1128
+ for k in range(self.parameters.control.nmbhru):
1129
+ if self.parameters.control.water[k]:
1130
+ self.sequences.fluxes.soilheatflux[k] = 0.0
1131
+ else:
1132
+ self.sequences.fluxes.soilheatflux[k] = self.parameters.control.averagesoilheatflux[self.parameters.derived.moy[self.idx_sim]]
1133
+ cpdef inline void calc_soilevapotranspiration_v3(self) noexcept nogil:
1134
+ cdef numpy.int64_t k
1135
+ for k in range(self.parameters.control.nmbhru):
1136
+ if self.parameters.control.soil[k] and (self.parameters.control.tree[k] or self.sequences.factors.snowcover[k] == 0.0):
1137
+ self.sequences.fluxes.soilevapotranspiration[k] = ( self.return_evaporation_penmanmonteith_v1( k, self.sequences.factors.actualsurfaceresistance[k] ) )
1138
+ else:
1139
+ self.sequences.fluxes.soilevapotranspiration[k] = 0.0
1140
+ cpdef inline void update_soilevapotranspiration_v3(self) noexcept nogil:
1141
+ cdef numpy.int64_t k
1142
+ for k in range(self.parameters.control.nmbhru):
1143
+ if self.parameters.control.soil[k]:
1144
+ if self.parameters.control.interception[k]:
1145
+ if self.sequences.fluxes.potentialinterceptionevaporation[k] == 0.0:
1146
+ self.sequences.fluxes.soilevapotranspiration[k] = 0.0
1147
+ else:
1148
+ self.sequences.fluxes.soilevapotranspiration[k] = self.sequences.fluxes.soilevapotranspiration[k] * (( self.sequences.fluxes.potentialinterceptionevaporation[k] - self.sequences.fluxes.interceptionevaporation[k] ) / self.sequences.fluxes.potentialinterceptionevaporation[k])
1149
+ else:
1150
+ self.sequences.fluxes.soilevapotranspiration[k] = 0.0
1151
+ cpdef inline void calc_waterevaporation_v3(self) noexcept nogil:
1152
+ cdef numpy.int64_t k
1153
+ for k in range(self.parameters.control.nmbhru):
1154
+ if self.parameters.control.water[k]:
1155
+ self.sequences.fluxes.waterevaporation[k] = ( self.sequences.factors.dailysaturationvapourpressureslope[k] * self.sequences.fluxes.dailynetradiation[k] / self.parameters.fixed.heatofcondensation + self.parameters.fixed.psychrometricconstant * self.parameters.derived.days * (0.13 + 0.094 * self.sequences.factors.dailywindspeed2m) * ( self.sequences.factors.dailysaturationvapourpressure[k] - self.sequences.factors.dailyactualvapourpressure[k] ) ) / ( self.sequences.factors.dailysaturationvapourpressureslope[k] + self.parameters.fixed.psychrometricconstant )
1156
+ else:
1157
+ self.sequences.fluxes.waterevaporation[k] = 0.0
1158
+ cpdef inline void calc_airtemperature_tempmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1159
+ cdef numpy.int64_t k
1160
+ for k in range(self.parameters.control.nmbhru):
1161
+ self.sequences.factors.airtemperature[k] = submodel.get_temperature(k)
1162
+ cpdef inline void calc_airtemperature_tempmodel_v2(self, masterinterface.MasterInterface submodel) noexcept nogil:
1163
+ cdef numpy.int64_t k
1164
+ submodel.determine_temperature()
1165
+ for k in range(self.parameters.control.nmbhru):
1166
+ self.sequences.factors.airtemperature[k] = submodel.get_temperature(k)
1167
+ cpdef inline void calc_interceptedwater_intercmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1168
+ cdef numpy.int64_t k
1169
+ for k in range(self.parameters.control.nmbhru):
1170
+ self.sequences.factors.interceptedwater[k] = submodel.get_interceptedwater(k)
1171
+ cpdef inline void calc_soilwater_soilwatermodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1172
+ cdef numpy.int64_t k
1173
+ for k in range(self.parameters.control.nmbhru):
1174
+ self.sequences.factors.soilwater[k] = submodel.get_soilwater(k)
1175
+ cpdef inline void calc_snowcover_snowcovermodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1176
+ cdef numpy.int64_t k
1177
+ for k in range(self.parameters.control.nmbhru):
1178
+ self.sequences.factors.snowcover[k] = submodel.get_snowcover(k)
1179
+ cpdef inline void calc_snowycanopy_snowycanopymodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1180
+ cdef numpy.int64_t k
1181
+ for k in range(self.parameters.control.nmbhru):
1182
+ self.sequences.factors.snowycanopy[k] = submodel.get_snowycanopy(k)
1183
+ cpdef inline void calc_currentalbedo_snowalbedomodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
1184
+ cdef numpy.int64_t k
1185
+ for k in range(self.parameters.control.nmbhru):
1186
+ self.sequences.factors.currentalbedo[k] = submodel.get_snowalbedo(k)
1187
+ cpdef inline void calc_potentialinterceptionevaporation_v1(self) noexcept nogil:
1188
+ cdef numpy.int64_t k
1189
+ for k in range(self.parameters.control.nmbhru):
1190
+ if self.parameters.control.interception[k]:
1191
+ self.sequences.fluxes.potentialinterceptionevaporation[k] = ( self.return_evaporation_penmanmonteith_v1(k, 0.0) )
1192
+ else:
1193
+ self.sequences.fluxes.potentialinterceptionevaporation[k] = 0.0
1194
+ cpdef double get_waterevaporation(self, numpy.int64_t k) noexcept nogil:
1195
+ return self.sequences.fluxes.waterevaporation[k]
1196
+ cpdef double get_interceptionevaporation(self, numpy.int64_t k) noexcept nogil:
1197
+ return self.sequences.fluxes.interceptionevaporation[k]
1198
+ cpdef double get_soilevapotranspiration(self, numpy.int64_t k) noexcept nogil:
1199
+ return self.sequences.fluxes.soilevapotranspiration[k]
1200
+ cpdef inline void process_radiationmodel(self) noexcept nogil:
1201
+ if self.radiationmodel_typeid == 1:
1202
+ (<masterinterface.MasterInterface>self.radiationmodel).process_radiation()
1203
+ cpdef inline void calc_possiblesunshineduration(self) noexcept nogil:
1204
+ if self.radiationmodel_typeid == 1:
1205
+ self.sequences.factors.possiblesunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_possiblesunshineduration()
1206
+ elif self.radiationmodel_typeid == 4:
1207
+ self.sequences.factors.possiblesunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_possiblesunshineduration()
1208
+ cpdef inline void calc_sunshineduration(self) noexcept nogil:
1209
+ if self.radiationmodel_typeid == 1:
1210
+ self.sequences.factors.sunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_sunshineduration()
1211
+ elif self.radiationmodel_typeid == 4:
1212
+ self.sequences.factors.sunshineduration = (<masterinterface.MasterInterface>self.radiationmodel).get_sunshineduration()
1213
+ cpdef inline void calc_globalradiation(self) noexcept nogil:
1214
+ if self.radiationmodel_typeid == 1:
1215
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
1216
+ elif self.radiationmodel_typeid == 2:
1217
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
1218
+ elif self.radiationmodel_typeid == 3:
1219
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
1220
+ elif self.radiationmodel_typeid == 4:
1221
+ self.sequences.fluxes.globalradiation = (<masterinterface.MasterInterface>self.radiationmodel).get_globalradiation()
1222
+ cpdef inline void calc_airtemperature(self) noexcept nogil:
1223
+ if self.tempmodel_typeid == 1:
1224
+ self.calc_airtemperature_tempmodel_v1( (<masterinterface.MasterInterface>self.tempmodel) )
1225
+ elif self.tempmodel_typeid == 2:
1226
+ self.calc_airtemperature_tempmodel_v2( (<masterinterface.MasterInterface>self.tempmodel) )
1227
+ cpdef inline void update_loggedairtemperature(self) noexcept nogil:
1228
+ cdef numpy.int64_t k
1229
+ cdef numpy.int64_t idx
1230
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
1231
+ for k in range(self.parameters.control.nmbhru):
1232
+ self.sequences.logs.loggedairtemperature[idx, k] = self.sequences.logs.loggedairtemperature[idx - 1, k]
1233
+ for k in range(self.parameters.control.nmbhru):
1234
+ self.sequences.logs.loggedairtemperature[0, k] = self.sequences.factors.airtemperature[k]
1235
+ cpdef inline void calc_dailyairtemperature(self) noexcept nogil:
1236
+ cdef numpy.int64_t idx
1237
+ cdef numpy.int64_t k
1238
+ for k in range(self.parameters.control.nmbhru):
1239
+ self.sequences.factors.dailyairtemperature[k] = 0.0
1240
+ for idx in range(self.parameters.derived.nmblogentries):
1241
+ for k in range(self.parameters.control.nmbhru):
1242
+ self.sequences.factors.dailyairtemperature[k] = self.sequences.factors.dailyairtemperature[k] + (self.sequences.logs.loggedairtemperature[idx, k])
1243
+ for k in range(self.parameters.control.nmbhru):
1244
+ self.sequences.factors.dailyairtemperature[k] = self.sequences.factors.dailyairtemperature[k] / (self.parameters.derived.nmblogentries)
1245
+ cpdef inline double return_adjustedwindspeed(self, double h) noexcept nogil:
1246
+ if h == self.parameters.control.measuringheightwindspeed:
1247
+ return self.sequences.inputs.windspeed
1248
+ return self.sequences.inputs.windspeed * ( log(h / self.parameters.fixed.roughnesslengthgrass) / log(self.parameters.control.measuringheightwindspeed / self.parameters.fixed.roughnesslengthgrass) )
1249
+ cpdef inline void calc_windspeed2m(self) noexcept nogil:
1250
+ self.sequences.factors.windspeed2m = self.return_adjustedwindspeed_v1(2.0)
1251
+ cpdef inline void update_loggedwindspeed2m(self) noexcept nogil:
1252
+ cdef numpy.int64_t idx
1253
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
1254
+ self.sequences.logs.loggedwindspeed2m[idx] = self.sequences.logs.loggedwindspeed2m[idx - 1]
1255
+ self.sequences.logs.loggedwindspeed2m[0] = self.sequences.factors.windspeed2m
1256
+ cpdef inline void calc_dailywindspeed2m(self) noexcept nogil:
1257
+ cdef numpy.int64_t idx
1258
+ self.sequences.factors.dailywindspeed2m = 0.0
1259
+ for idx in range(self.parameters.derived.nmblogentries):
1260
+ self.sequences.factors.dailywindspeed2m = self.sequences.factors.dailywindspeed2m + (self.sequences.logs.loggedwindspeed2m[idx])
1261
+ self.sequences.factors.dailywindspeed2m = self.sequences.factors.dailywindspeed2m / (self.parameters.derived.nmblogentries)
1262
+ cpdef inline void calc_windspeed10m(self) noexcept nogil:
1263
+ self.sequences.factors.windspeed10m = self.return_adjustedwindspeed_v1(10.0)
1264
+ cpdef inline void update_loggedrelativehumidity(self) noexcept nogil:
1265
+ cdef numpy.int64_t idx
1266
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
1267
+ self.sequences.logs.loggedrelativehumidity[idx] = self.sequences.logs.loggedrelativehumidity[idx - 1]
1268
+ self.sequences.logs.loggedrelativehumidity[0] = self.sequences.inputs.relativehumidity
1269
+ cpdef inline void calc_dailyrelativehumidity(self) noexcept nogil:
1270
+ cdef numpy.int64_t idx
1271
+ self.sequences.factors.dailyrelativehumidity = 0.0
1272
+ for idx in range(self.parameters.derived.nmblogentries):
1273
+ self.sequences.factors.dailyrelativehumidity = self.sequences.factors.dailyrelativehumidity + (self.sequences.logs.loggedrelativehumidity[idx])
1274
+ self.sequences.factors.dailyrelativehumidity = self.sequences.factors.dailyrelativehumidity / (self.parameters.derived.nmblogentries)
1275
+ cpdef inline double return_saturationvapourpressure(self, double airtemperature) noexcept nogil:
1276
+ return 6.1078 * 2.71828 ** ( 17.08085 * airtemperature / (airtemperature + 234.175) )
1277
+ cpdef inline void calc_saturationvapourpressure(self) noexcept nogil:
1278
+ cdef numpy.int64_t k
1279
+ for k in range(self.parameters.control.nmbhru):
1280
+ self.sequences.factors.saturationvapourpressure[k] = self.return_saturationvapourpressure_v1( self.sequences.factors.airtemperature[k] )
1281
+ cpdef inline void calc_dailysaturationvapourpressure(self) noexcept nogil:
1282
+ cdef numpy.int64_t k
1283
+ for k in range(self.parameters.control.nmbhru):
1284
+ self.sequences.factors.dailysaturationvapourpressure[k] = ( self.return_saturationvapourpressure_v1(self.sequences.factors.dailyairtemperature[k]) )
1285
+ cpdef inline double return_saturationvapourpressureslope(self, double t) noexcept nogil:
1286
+ return ( 24430.6 * exp(17.08085 * t / (t + 234.175)) / (t + 234.175) ** 2 )
1287
+ cpdef inline void calc_saturationvapourpressureslope(self) noexcept nogil:
1288
+ cdef numpy.int64_t k
1289
+ for k in range(self.parameters.control.nmbhru):
1290
+ self.sequences.factors.saturationvapourpressureslope[k] = ( self.return_saturationvapourpressureslope_v1(self.sequences.factors.airtemperature[k]) )
1291
+ cpdef inline void calc_dailysaturationvapourpressureslope(self) noexcept nogil:
1292
+ cdef numpy.int64_t k
1293
+ for k in range(self.parameters.control.nmbhru):
1294
+ self.sequences.factors.dailysaturationvapourpressureslope[k] = ( self.return_saturationvapourpressureslope_v1( self.sequences.factors.dailyairtemperature[k] ) )
1295
+ cpdef inline void calc_actualvapourpressure(self) noexcept nogil:
1296
+ cdef numpy.int64_t k
1297
+ for k in range(self.parameters.control.nmbhru):
1298
+ self.sequences.factors.actualvapourpressure[k] = ( self.sequences.factors.saturationvapourpressure[k] * self.sequences.inputs.relativehumidity / 100.0 )
1299
+ cpdef inline void calc_dryairpressure(self) noexcept nogil:
1300
+ cdef numpy.int64_t k
1301
+ for k in range(self.parameters.control.nmbhru):
1302
+ self.sequences.factors.dryairpressure[k] = ( self.sequences.inputs.atmosphericpressure - self.sequences.factors.actualvapourpressure[k] )
1303
+ cpdef inline void calc_airdensity(self) noexcept nogil:
1304
+ cdef numpy.int64_t k
1305
+ for k in range(self.parameters.control.nmbhru):
1306
+ self.sequences.factors.airdensity[k] = (100.0 / (self.sequences.factors.airtemperature[k] + 273.15)) * ( self.sequences.factors.dryairpressure[k] / self.parameters.fixed.gasconstantdryair + self.sequences.factors.actualvapourpressure[k] / self.parameters.fixed.gasconstantwatervapour )
1307
+ cpdef inline void calc_dailyactualvapourpressure(self) noexcept nogil:
1308
+ cdef numpy.int64_t k
1309
+ for k in range(self.parameters.control.nmbhru):
1310
+ self.sequences.factors.dailyactualvapourpressure[k] = ( self.sequences.factors.dailysaturationvapourpressure[k] * self.sequences.factors.dailyrelativehumidity / 100.0 )
1311
+ cpdef inline void update_loggedsunshineduration(self) noexcept nogil:
1312
+ cdef numpy.int64_t idx
1313
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
1314
+ self.sequences.logs.loggedsunshineduration[idx] = self.sequences.logs.loggedsunshineduration[idx - 1]
1315
+ self.sequences.logs.loggedsunshineduration[0] = self.sequences.factors.sunshineduration
1316
+ cpdef inline void calc_dailysunshineduration(self) noexcept nogil:
1317
+ cdef numpy.int64_t idx
1318
+ self.sequences.factors.dailysunshineduration = 0.0
1319
+ for idx in range(self.parameters.derived.nmblogentries):
1320
+ self.sequences.factors.dailysunshineduration = self.sequences.factors.dailysunshineduration + (self.sequences.logs.loggedsunshineduration[idx])
1321
+ cpdef inline void update_loggedpossiblesunshineduration(self) noexcept nogil:
1322
+ cdef numpy.int64_t idx
1323
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
1324
+ self.sequences.logs.loggedpossiblesunshineduration[idx] = ( self.sequences.logs.loggedpossiblesunshineduration[idx - 1] )
1325
+ self.sequences.logs.loggedpossiblesunshineduration[0] = self.sequences.factors.possiblesunshineduration
1326
+ cpdef inline void calc_dailypossiblesunshineduration(self) noexcept nogil:
1327
+ cdef numpy.int64_t idx
1328
+ self.sequences.factors.dailypossiblesunshineduration = 0.0
1329
+ for idx in range(self.parameters.derived.nmblogentries):
1330
+ self.sequences.factors.dailypossiblesunshineduration = self.sequences.factors.dailypossiblesunshineduration + (self.sequences.logs.loggedpossiblesunshineduration[idx])
1331
+ cpdef inline void update_loggedglobalradiation(self) noexcept nogil:
1332
+ cdef numpy.int64_t idx
1333
+ for idx in range(self.parameters.derived.nmblogentries - 1, 0, -1):
1334
+ self.sequences.logs.loggedglobalradiation[idx] = self.sequences.logs.loggedglobalradiation[idx - 1]
1335
+ self.sequences.logs.loggedglobalradiation[0] = self.sequences.fluxes.globalradiation
1336
+ cpdef inline void calc_dailyglobalradiation(self) noexcept nogil:
1337
+ cdef numpy.int64_t idx
1338
+ self.sequences.fluxes.dailyglobalradiation = 0.0
1339
+ for idx in range(self.parameters.derived.nmblogentries):
1340
+ self.sequences.fluxes.dailyglobalradiation = self.sequences.fluxes.dailyglobalradiation + (self.sequences.logs.loggedglobalradiation[idx])
1341
+ self.sequences.fluxes.dailyglobalradiation = self.sequences.fluxes.dailyglobalradiation / (self.parameters.derived.nmblogentries)
1342
+ cpdef inline void calc_currentalbedo(self) noexcept nogil:
1343
+ cdef numpy.int64_t k
1344
+ if self.snowalbedomodel is None:
1345
+ for k in range(self.parameters.control.nmbhru):
1346
+ self.sequences.factors.currentalbedo[k] = self.parameters.control.albedo[ self.parameters.control.hrutype[k] - self.parameters.control._albedo_rowmin, self.parameters.derived.moy[self.idx_sim] - self.parameters.control._albedo_columnmin, ]
1347
+ elif self.snowalbedomodel_typeid == 1:
1348
+ self.calc_currentalbedo_snowalbedomodel_v1( (<masterinterface.MasterInterface>self.snowalbedomodel) )
1349
+ for k in range(self.parameters.control.nmbhru):
1350
+ if isnan(self.sequences.factors.currentalbedo[k]):
1351
+ self.sequences.factors.currentalbedo[k] = self.parameters.control.albedo[ self.parameters.control.hrutype[k] - self.parameters.control._albedo_rowmin, self.parameters.derived.moy[self.idx_sim] - self.parameters.control._albedo_columnmin, ]
1352
+ cpdef inline void calc_netshortwaveradiation(self) noexcept nogil:
1353
+ cdef numpy.int64_t k
1354
+ for k in range(self.parameters.control.nmbhru):
1355
+ self.sequences.fluxes.netshortwaveradiation[k] = self.sequences.fluxes.globalradiation * ( 1.0 - self.sequences.factors.currentalbedo[k] )
1356
+ cpdef inline void calc_dailynetshortwaveradiation(self) noexcept nogil:
1357
+ cdef numpy.int64_t k
1358
+ for k in range(self.parameters.control.nmbhru):
1359
+ self.sequences.fluxes.dailynetshortwaveradiation[k] = ( 1.0 - self.sequences.factors.currentalbedo[k] ) * self.sequences.fluxes.dailyglobalradiation
1360
+ cpdef inline void calc_dailynetlongwaveradiation(self) noexcept nogil:
1361
+ cdef double t
1362
+ cdef numpy.int64_t k
1363
+ cdef double rel_sunshine
1364
+ rel_sunshine = min( self.sequences.factors.dailysunshineduration / self.sequences.factors.dailypossiblesunshineduration, 1.0 )
1365
+ for k in range(self.parameters.control.nmbhru):
1366
+ t = self.sequences.factors.dailyairtemperature[k] + 273.15
1367
+ self.sequences.fluxes.dailynetlongwaveradiation[k] = ( (0.2 + 0.8 * rel_sunshine) * (self.parameters.fixed.stefanboltzmannconstant * t**4) * ( self.parameters.control.emissivity - self.parameters.fixed.factorcounterradiation * (self.sequences.factors.dailyactualvapourpressure[k] / t) ** (1.0 / 7.0) ) )
1368
+ cpdef inline void calc_netradiation(self) noexcept nogil:
1369
+ cdef numpy.int64_t k
1370
+ for k in range(self.parameters.control.nmbhru):
1371
+ self.sequences.fluxes.netradiation[k] = ( self.sequences.fluxes.netshortwaveradiation[k] - self.sequences.fluxes.dailynetlongwaveradiation[k] )
1372
+ cpdef inline void calc_dailynetradiation(self) noexcept nogil:
1373
+ cdef numpy.int64_t k
1374
+ for k in range(self.parameters.control.nmbhru):
1375
+ self.sequences.fluxes.dailynetradiation[k] = ( self.sequences.fluxes.dailynetshortwaveradiation[k] - self.sequences.fluxes.dailynetlongwaveradiation[k] )
1376
+ cpdef inline void calc_aerodynamicresistance(self) noexcept nogil:
1377
+ cdef double z0
1378
+ cdef double ch
1379
+ cdef numpy.int64_t k
1380
+ if self.sequences.factors.windspeed10m > 0.0:
1381
+ for k in range(self.parameters.control.nmbhru):
1382
+ ch = self.parameters.control.cropheight[ self.parameters.control.hrutype[k] - self.parameters.control._cropheight_rowmin, self.parameters.derived.moy[self.idx_sim] - self.parameters.control._cropheight_columnmin, ]
1383
+ if ch < 10.0:
1384
+ z0 = 0.021 + 0.163 * ch
1385
+ self.sequences.factors.aerodynamicresistance[k] = ( 6.25 / self.sequences.factors.windspeed10m * log(10.0 / z0) ** 2 )
1386
+ else:
1387
+ self.sequences.factors.aerodynamicresistance[k] = 94.0 / self.sequences.factors.windspeed10m
1388
+ else:
1389
+ for k in range(self.parameters.control.nmbhru):
1390
+ self.sequences.factors.aerodynamicresistance[k] = inf
1391
+ cpdef inline void calc_soilsurfaceresistance(self) noexcept nogil:
1392
+ cdef double sw_act
1393
+ cdef double sw_max
1394
+ cdef numpy.int64_t k
1395
+ for k in range(self.parameters.control.nmbhru):
1396
+ sw_max = self.parameters.control.maxsoilwater[k]
1397
+ if not self.parameters.control.soil[k]:
1398
+ self.sequences.factors.soilsurfaceresistance[k] = nan
1399
+ elif sw_max > 20.0:
1400
+ self.sequences.factors.soilsurfaceresistance[k] = 100.0
1401
+ elif sw_max > 0.0:
1402
+ sw_act = min(max(self.sequences.factors.soilwater[k], 0.0), sw_max)
1403
+ self.sequences.factors.soilsurfaceresistance[k] = 100.0 * sw_max / (sw_act + 0.01 * sw_max)
1404
+ else:
1405
+ self.sequences.factors.soilsurfaceresistance[k] = inf
1406
+ cpdef inline void calc_landusesurfaceresistance(self) noexcept nogil:
1407
+ cdef double thresh
1408
+ cdef double sw
1409
+ cdef double d
1410
+ cdef double r
1411
+ cdef numpy.int64_t k
1412
+ for k in range(self.parameters.control.nmbhru):
1413
+ r = self.parameters.control.surfaceresistance[ self.parameters.control.hrutype[k] - self.parameters.control._surfaceresistance_rowmin, self.parameters.derived.moy[self.idx_sim] - self.parameters.control._surfaceresistance_columnmin, ]
1414
+ if self.parameters.control.conifer[k]:
1415
+ d = self.sequences.factors.saturationvapourpressure[k] - self.sequences.factors.actualvapourpressure[k]
1416
+ if (self.sequences.factors.airtemperature[k] <= -5.0) or (d >= 20.0):
1417
+ self.sequences.factors.landusesurfaceresistance[k] = 10000.0
1418
+ elif self.sequences.factors.airtemperature[k] < 20.0:
1419
+ self.sequences.factors.landusesurfaceresistance[k] = min( (25.0 * r) / (self.sequences.factors.airtemperature[k] + 5.0) / (1.0 - 0.05 * d), 10000.0, )
1420
+ else:
1421
+ self.sequences.factors.landusesurfaceresistance[k] = min(r / (1.0 - 0.05 * d), 10000.0)
1422
+ else:
1423
+ self.sequences.factors.landusesurfaceresistance[k] = r
1424
+ if self.parameters.control.soil[k]:
1425
+ sw = self.sequences.factors.soilwater[k]
1426
+ if sw <= 0.0:
1427
+ self.sequences.factors.landusesurfaceresistance[k] = inf
1428
+ else:
1429
+ thresh = self.parameters.control.soilmoisturelimit[k] * self.parameters.control.maxsoilwater[k]
1430
+ if sw < thresh:
1431
+ self.sequences.factors.landusesurfaceresistance[k] = self.sequences.factors.landusesurfaceresistance[k] * (3.5 * ( 1.0 - sw / thresh ) + exp(0.2 * thresh / sw))
1432
+ else:
1433
+ self.sequences.factors.landusesurfaceresistance[k] = self.sequences.factors.landusesurfaceresistance[k] * (exp(0.2))
1434
+ cpdef inline void calc_actualsurfaceresistance(self) noexcept nogil:
1435
+ cdef double w
1436
+ cdef double invsrnight
1437
+ cdef double invsrday
1438
+ cdef double lai
1439
+ cdef numpy.int64_t k
1440
+ for k in range(self.parameters.control.nmbhru):
1441
+ if self.parameters.control.soil[k]:
1442
+ lai = self.parameters.control.leafareaindex[ self.parameters.control.hrutype[k] - self.parameters.control._leafareaindex_rowmin, self.parameters.derived.moy[self.idx_sim] - self.parameters.control._leafareaindex_columnmin, ]
1443
+ invsrday = ( (1.0 - 0.7**lai) / self.sequences.factors.landusesurfaceresistance[k] ) + 0.7**lai / self.sequences.factors.soilsurfaceresistance[k]
1444
+ invsrnight = lai / 2500.0 + 1.0 / self.sequences.factors.soilsurfaceresistance[k]
1445
+ w = self.sequences.factors.possiblesunshineduration / self.parameters.derived.hours
1446
+ self.sequences.factors.actualsurfaceresistance[k] = 1.0 / ( w * invsrday + (1.0 - w) * invsrnight )
1447
+ else:
1448
+ self.sequences.factors.actualsurfaceresistance[k] = self.sequences.factors.landusesurfaceresistance[k]
1449
+ cpdef inline void calc_interceptedwater(self) noexcept nogil:
1450
+ if self.intercmodel_typeid == 1:
1451
+ self.calc_interceptedwater_intercmodel_v1( (<masterinterface.MasterInterface>self.intercmodel) )
1452
+ cpdef inline void calc_snowycanopy(self) noexcept nogil:
1453
+ cdef numpy.int64_t k
1454
+ if self.snowycanopymodel is None:
1455
+ for k in range(self.parameters.control.nmbhru):
1456
+ self.sequences.factors.snowycanopy[k] = nan
1457
+ elif self.snowycanopymodel_typeid == 1:
1458
+ self.calc_snowycanopy_snowycanopymodel_v1( (<masterinterface.MasterInterface>self.snowycanopymodel) )
1459
+ cpdef inline double return_evaporation_penmanmonteith(self, numpy.int64_t k, double actualsurfaceresistance) noexcept nogil:
1460
+ cdef double c
1461
+ cdef double b
1462
+ cdef double t
1463
+ cdef double ar
1464
+ ar = min(max(self.sequences.factors.aerodynamicresistance[k], 1e-6), 1e6)
1465
+ t = 273.15 + self.sequences.factors.airtemperature[k]
1466
+ b = (4.0 * self.parameters.control.emissivity * self.parameters.fixed.stefanboltzmannconstant) * t**3
1467
+ c = 1.0 + b * ar / self.sequences.factors.airdensity[k] / self.parameters.fixed.heatcapacityair
1468
+ return ( ( self.sequences.factors.saturationvapourpressureslope[k] * (self.sequences.fluxes.netradiation[k] - self.sequences.fluxes.soilheatflux[k]) + (c * self.sequences.factors.airdensity[k] * self.parameters.fixed.heatcapacityair) * (self.sequences.factors.saturationvapourpressure[k] - self.sequences.factors.actualvapourpressure[k]) / ar ) / ( self.sequences.factors.saturationvapourpressureslope[k] + self.parameters.fixed.psychrometricconstant * c * (1.0 + actualsurfaceresistance / ar) ) / self.parameters.fixed.heatofcondensation )
1469
+ cpdef inline void calc_interceptionevaporation(self) noexcept nogil:
1470
+ cdef numpy.int64_t k
1471
+ for k in range(self.parameters.control.nmbhru):
1472
+ if ( self.parameters.control.interception[k] and (self.parameters.control.tree[k] or (self.sequences.factors.snowcover[k] == 0.0)) and not (self.parameters.control.tree[k] and (self.sequences.factors.snowycanopy[k] > 0.0)) ):
1473
+ self.sequences.fluxes.interceptionevaporation[k] = min( self.sequences.fluxes.potentialinterceptionevaporation[k], self.sequences.factors.interceptedwater[k] )
1474
+ else:
1475
+ self.sequences.fluxes.interceptionevaporation[k] = 0.0
1476
+ cpdef inline void calc_soilwater(self) noexcept nogil:
1477
+ if self.soilwatermodel_typeid == 1:
1478
+ self.calc_soilwater_soilwatermodel_v1( (<masterinterface.MasterInterface>self.soilwatermodel) )
1479
+ cpdef inline void calc_snowcover(self) noexcept nogil:
1480
+ if self.snowcovermodel_typeid == 1:
1481
+ self.calc_snowcover_snowcovermodel_v1( (<masterinterface.MasterInterface>self.snowcovermodel) )
1482
+ cpdef inline void calc_soilheatflux(self) noexcept nogil:
1483
+ cdef numpy.int64_t k
1484
+ for k in range(self.parameters.control.nmbhru):
1485
+ if self.parameters.control.water[k]:
1486
+ self.sequences.fluxes.soilheatflux[k] = 0.0
1487
+ else:
1488
+ self.sequences.fluxes.soilheatflux[k] = self.parameters.control.averagesoilheatflux[self.parameters.derived.moy[self.idx_sim]]
1489
+ cpdef inline void calc_soilevapotranspiration(self) noexcept nogil:
1490
+ cdef numpy.int64_t k
1491
+ for k in range(self.parameters.control.nmbhru):
1492
+ if self.parameters.control.soil[k] and (self.parameters.control.tree[k] or self.sequences.factors.snowcover[k] == 0.0):
1493
+ self.sequences.fluxes.soilevapotranspiration[k] = ( self.return_evaporation_penmanmonteith_v1( k, self.sequences.factors.actualsurfaceresistance[k] ) )
1494
+ else:
1495
+ self.sequences.fluxes.soilevapotranspiration[k] = 0.0
1496
+ cpdef inline void update_soilevapotranspiration(self) noexcept nogil:
1497
+ cdef numpy.int64_t k
1498
+ for k in range(self.parameters.control.nmbhru):
1499
+ if self.parameters.control.soil[k]:
1500
+ if self.parameters.control.interception[k]:
1501
+ if self.sequences.fluxes.potentialinterceptionevaporation[k] == 0.0:
1502
+ self.sequences.fluxes.soilevapotranspiration[k] = 0.0
1503
+ else:
1504
+ self.sequences.fluxes.soilevapotranspiration[k] = self.sequences.fluxes.soilevapotranspiration[k] * (( self.sequences.fluxes.potentialinterceptionevaporation[k] - self.sequences.fluxes.interceptionevaporation[k] ) / self.sequences.fluxes.potentialinterceptionevaporation[k])
1505
+ else:
1506
+ self.sequences.fluxes.soilevapotranspiration[k] = 0.0
1507
+ cpdef inline void calc_waterevaporation(self) noexcept nogil:
1508
+ cdef numpy.int64_t k
1509
+ for k in range(self.parameters.control.nmbhru):
1510
+ if self.parameters.control.water[k]:
1511
+ self.sequences.fluxes.waterevaporation[k] = ( self.sequences.factors.dailysaturationvapourpressureslope[k] * self.sequences.fluxes.dailynetradiation[k] / self.parameters.fixed.heatofcondensation + self.parameters.fixed.psychrometricconstant * self.parameters.derived.days * (0.13 + 0.094 * self.sequences.factors.dailywindspeed2m) * ( self.sequences.factors.dailysaturationvapourpressure[k] - self.sequences.factors.dailyactualvapourpressure[k] ) ) / ( self.sequences.factors.dailysaturationvapourpressureslope[k] + self.parameters.fixed.psychrometricconstant )
1512
+ else:
1513
+ self.sequences.fluxes.waterevaporation[k] = 0.0
1514
+ cpdef inline void calc_interceptedwater_intercmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
1515
+ cdef numpy.int64_t k
1516
+ for k in range(self.parameters.control.nmbhru):
1517
+ self.sequences.factors.interceptedwater[k] = submodel.get_interceptedwater(k)
1518
+ cpdef inline void calc_soilwater_soilwatermodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
1519
+ cdef numpy.int64_t k
1520
+ for k in range(self.parameters.control.nmbhru):
1521
+ self.sequences.factors.soilwater[k] = submodel.get_soilwater(k)
1522
+ cpdef inline void calc_snowcover_snowcovermodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
1523
+ cdef numpy.int64_t k
1524
+ for k in range(self.parameters.control.nmbhru):
1525
+ self.sequences.factors.snowcover[k] = submodel.get_snowcover(k)
1526
+ cpdef inline void calc_snowycanopy_snowycanopymodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
1527
+ cdef numpy.int64_t k
1528
+ for k in range(self.parameters.control.nmbhru):
1529
+ self.sequences.factors.snowycanopy[k] = submodel.get_snowycanopy(k)
1530
+ cpdef inline void calc_currentalbedo_snowalbedomodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
1531
+ cdef numpy.int64_t k
1532
+ for k in range(self.parameters.control.nmbhru):
1533
+ self.sequences.factors.currentalbedo[k] = submodel.get_snowalbedo(k)
1534
+ cpdef inline void calc_potentialinterceptionevaporation(self) noexcept nogil:
1535
+ cdef numpy.int64_t k
1536
+ for k in range(self.parameters.control.nmbhru):
1537
+ if self.parameters.control.interception[k]:
1538
+ self.sequences.fluxes.potentialinterceptionevaporation[k] = ( self.return_evaporation_penmanmonteith_v1(k, 0.0) )
1539
+ else:
1540
+ self.sequences.fluxes.potentialinterceptionevaporation[k] = 0.0
1541
+ cpdef void determine_interceptionevaporation_v2(self) noexcept nogil:
1542
+ self.process_radiationmodel_v1()
1543
+ self.calc_possiblesunshineduration_v1()
1544
+ self.calc_sunshineduration_v1()
1545
+ self.calc_globalradiation_v1()
1546
+ self.calc_airtemperature_v1()
1547
+ self.update_loggedairtemperature_v1()
1548
+ self.calc_dailyairtemperature_v1()
1549
+ self.calc_windspeed10m_v1()
1550
+ self.update_loggedrelativehumidity_v1()
1551
+ self.calc_dailyrelativehumidity_v1()
1552
+ self.calc_saturationvapourpressure_v2()
1553
+ self.calc_dailysaturationvapourpressure_v1()
1554
+ self.calc_saturationvapourpressureslope_v2()
1555
+ self.calc_dailysaturationvapourpressureslope_v1()
1556
+ self.calc_actualvapourpressure_v1()
1557
+ self.calc_dailyactualvapourpressure_v1()
1558
+ self.calc_dryairpressure_v1()
1559
+ self.calc_airdensity_v1()
1560
+ self.calc_aerodynamicresistance_v1()
1561
+ self.calc_snowcover_v1()
1562
+ self.calc_snowycanopy_v1()
1563
+ self.update_loggedsunshineduration_v1()
1564
+ self.calc_dailysunshineduration_v1()
1565
+ self.update_loggedpossiblesunshineduration_v1()
1566
+ self.calc_dailypossiblesunshineduration_v1()
1567
+ self.calc_currentalbedo_v1()
1568
+ self.calc_netshortwaveradiation_v2()
1569
+ self.calc_dailynetlongwaveradiation_v1()
1570
+ self.calc_netradiation_v2()
1571
+ self.calc_soilheatflux_v3()
1572
+ self.calc_potentialinterceptionevaporation_v1()
1573
+ self.calc_interceptedwater_v1()
1574
+ self.calc_interceptionevaporation_v2()
1575
+ cpdef void determine_soilevapotranspiration_v3(self) noexcept nogil:
1576
+ self.calc_soilwater_v1()
1577
+ self.calc_snowcover_v1()
1578
+ self.calc_soilsurfaceresistance_v1()
1579
+ self.calc_landusesurfaceresistance_v1()
1580
+ self.calc_actualsurfaceresistance_v1()
1581
+ self.calc_soilevapotranspiration_v3()
1582
+ self.update_soilevapotranspiration_v3()
1583
+ cpdef void determine_waterevaporation_v3(self) noexcept nogil:
1584
+ self.calc_windspeed2m_v2()
1585
+ self.update_loggedwindspeed2m_v1()
1586
+ self.calc_dailywindspeed2m_v1()
1587
+ self.update_loggedglobalradiation_v1()
1588
+ self.calc_dailyglobalradiation_v1()
1589
+ self.calc_dailynetshortwaveradiation_v1()
1590
+ self.calc_dailynetradiation_v1()
1591
+ self.calc_waterevaporation_v3()
1592
+ cpdef void determine_interceptionevaporation(self) noexcept nogil:
1593
+ self.process_radiationmodel_v1()
1594
+ self.calc_possiblesunshineduration_v1()
1595
+ self.calc_sunshineduration_v1()
1596
+ self.calc_globalradiation_v1()
1597
+ self.calc_airtemperature_v1()
1598
+ self.update_loggedairtemperature_v1()
1599
+ self.calc_dailyairtemperature_v1()
1600
+ self.calc_windspeed10m_v1()
1601
+ self.update_loggedrelativehumidity_v1()
1602
+ self.calc_dailyrelativehumidity_v1()
1603
+ self.calc_saturationvapourpressure_v2()
1604
+ self.calc_dailysaturationvapourpressure_v1()
1605
+ self.calc_saturationvapourpressureslope_v2()
1606
+ self.calc_dailysaturationvapourpressureslope_v1()
1607
+ self.calc_actualvapourpressure_v1()
1608
+ self.calc_dailyactualvapourpressure_v1()
1609
+ self.calc_dryairpressure_v1()
1610
+ self.calc_airdensity_v1()
1611
+ self.calc_aerodynamicresistance_v1()
1612
+ self.calc_snowcover_v1()
1613
+ self.calc_snowycanopy_v1()
1614
+ self.update_loggedsunshineduration_v1()
1615
+ self.calc_dailysunshineduration_v1()
1616
+ self.update_loggedpossiblesunshineduration_v1()
1617
+ self.calc_dailypossiblesunshineduration_v1()
1618
+ self.calc_currentalbedo_v1()
1619
+ self.calc_netshortwaveradiation_v2()
1620
+ self.calc_dailynetlongwaveradiation_v1()
1621
+ self.calc_netradiation_v2()
1622
+ self.calc_soilheatflux_v3()
1623
+ self.calc_potentialinterceptionevaporation_v1()
1624
+ self.calc_interceptedwater_v1()
1625
+ self.calc_interceptionevaporation_v2()
1626
+ cpdef void determine_soilevapotranspiration(self) noexcept nogil:
1627
+ self.calc_soilwater_v1()
1628
+ self.calc_snowcover_v1()
1629
+ self.calc_soilsurfaceresistance_v1()
1630
+ self.calc_landusesurfaceresistance_v1()
1631
+ self.calc_actualsurfaceresistance_v1()
1632
+ self.calc_soilevapotranspiration_v3()
1633
+ self.update_soilevapotranspiration_v3()
1634
+ cpdef void determine_waterevaporation(self) noexcept nogil:
1635
+ self.calc_windspeed2m_v2()
1636
+ self.update_loggedwindspeed2m_v1()
1637
+ self.calc_dailywindspeed2m_v1()
1638
+ self.update_loggedglobalradiation_v1()
1639
+ self.calc_dailyglobalradiation_v1()
1640
+ self.calc_dailynetshortwaveradiation_v1()
1641
+ self.calc_dailynetradiation_v1()
1642
+ self.calc_waterevaporation_v3()