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