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,1911 @@
|
|
|
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 FIELD = 1
|
|
40
|
+
cdef public numpy.int64_t FOREST = 2
|
|
41
|
+
cdef public numpy.int64_t GLACIER = 3
|
|
42
|
+
cdef public numpy.int64_t ILAKE = 4
|
|
43
|
+
cdef public numpy.int64_t SEALED = 5
|
|
44
|
+
@cython.final
|
|
45
|
+
cdef class Parameters:
|
|
46
|
+
pass
|
|
47
|
+
@cython.final
|
|
48
|
+
cdef class ControlParameters:
|
|
49
|
+
pass
|
|
50
|
+
@cython.final
|
|
51
|
+
cdef class DerivedParameters:
|
|
52
|
+
pass
|
|
53
|
+
@cython.final
|
|
54
|
+
cdef class FixedParameters:
|
|
55
|
+
pass
|
|
56
|
+
@cython.final
|
|
57
|
+
cdef class Sequences:
|
|
58
|
+
pass
|
|
59
|
+
@cython.final
|
|
60
|
+
cdef class InputSequences:
|
|
61
|
+
cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
|
|
62
|
+
cdef numpy.int64_t k
|
|
63
|
+
if self._p_inputflag:
|
|
64
|
+
self.p = self._p_inputpointer[0]
|
|
65
|
+
elif self._p_diskflag_reading:
|
|
66
|
+
self.p = self._p_ncarray[0]
|
|
67
|
+
elif self._p_ramflag:
|
|
68
|
+
self.p = self._p_array[idx]
|
|
69
|
+
if self._t_inputflag:
|
|
70
|
+
self.t = self._t_inputpointer[0]
|
|
71
|
+
elif self._t_diskflag_reading:
|
|
72
|
+
self.t = self._t_ncarray[0]
|
|
73
|
+
elif self._t_ramflag:
|
|
74
|
+
self.t = self._t_array[idx]
|
|
75
|
+
cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
|
|
76
|
+
cdef numpy.int64_t k
|
|
77
|
+
if self._p_diskflag_writing:
|
|
78
|
+
self._p_ncarray[0] = self.p
|
|
79
|
+
if self._p_ramflag:
|
|
80
|
+
self._p_array[idx] = self.p
|
|
81
|
+
if self._t_diskflag_writing:
|
|
82
|
+
self._t_ncarray[0] = self.t
|
|
83
|
+
if self._t_ramflag:
|
|
84
|
+
self._t_array[idx] = self.t
|
|
85
|
+
cpdef inline set_pointerinput(self, str name, pointerutils.PDouble value):
|
|
86
|
+
if name == "p":
|
|
87
|
+
self._p_inputpointer = value.p_value
|
|
88
|
+
if name == "t":
|
|
89
|
+
self._t_inputpointer = value.p_value
|
|
90
|
+
@cython.final
|
|
91
|
+
cdef class FactorSequences:
|
|
92
|
+
cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
|
|
93
|
+
cdef numpy.int64_t jdx0, jdx1
|
|
94
|
+
cdef numpy.int64_t k
|
|
95
|
+
if self._tc_diskflag_reading:
|
|
96
|
+
k = 0
|
|
97
|
+
for jdx0 in range(self._tc_length_0):
|
|
98
|
+
self.tc[jdx0] = self._tc_ncarray[k]
|
|
99
|
+
k += 1
|
|
100
|
+
elif self._tc_ramflag:
|
|
101
|
+
for jdx0 in range(self._tc_length_0):
|
|
102
|
+
self.tc[jdx0] = self._tc_array[idx, jdx0]
|
|
103
|
+
if self._fracrain_diskflag_reading:
|
|
104
|
+
k = 0
|
|
105
|
+
for jdx0 in range(self._fracrain_length_0):
|
|
106
|
+
self.fracrain[jdx0] = self._fracrain_ncarray[k]
|
|
107
|
+
k += 1
|
|
108
|
+
elif self._fracrain_ramflag:
|
|
109
|
+
for jdx0 in range(self._fracrain_length_0):
|
|
110
|
+
self.fracrain[jdx0] = self._fracrain_array[idx, jdx0]
|
|
111
|
+
if self._rfc_diskflag_reading:
|
|
112
|
+
k = 0
|
|
113
|
+
for jdx0 in range(self._rfc_length_0):
|
|
114
|
+
self.rfc[jdx0] = self._rfc_ncarray[k]
|
|
115
|
+
k += 1
|
|
116
|
+
elif self._rfc_ramflag:
|
|
117
|
+
for jdx0 in range(self._rfc_length_0):
|
|
118
|
+
self.rfc[jdx0] = self._rfc_array[idx, jdx0]
|
|
119
|
+
if self._sfc_diskflag_reading:
|
|
120
|
+
k = 0
|
|
121
|
+
for jdx0 in range(self._sfc_length_0):
|
|
122
|
+
self.sfc[jdx0] = self._sfc_ncarray[k]
|
|
123
|
+
k += 1
|
|
124
|
+
elif self._sfc_ramflag:
|
|
125
|
+
for jdx0 in range(self._sfc_length_0):
|
|
126
|
+
self.sfc[jdx0] = self._sfc_array[idx, jdx0]
|
|
127
|
+
if self._cfact_diskflag_reading:
|
|
128
|
+
k = 0
|
|
129
|
+
for jdx0 in range(self._cfact_length_0):
|
|
130
|
+
self.cfact[jdx0] = self._cfact_ncarray[k]
|
|
131
|
+
k += 1
|
|
132
|
+
elif self._cfact_ramflag:
|
|
133
|
+
for jdx0 in range(self._cfact_length_0):
|
|
134
|
+
self.cfact[jdx0] = self._cfact_array[idx, jdx0]
|
|
135
|
+
if self._swe_diskflag_reading:
|
|
136
|
+
k = 0
|
|
137
|
+
for jdx0 in range(self._swe_length_0):
|
|
138
|
+
for jdx1 in range(self._swe_length_1):
|
|
139
|
+
self.swe[jdx0, jdx1] = self._swe_ncarray[k]
|
|
140
|
+
k += 1
|
|
141
|
+
elif self._swe_ramflag:
|
|
142
|
+
for jdx0 in range(self._swe_length_0):
|
|
143
|
+
for jdx1 in range(self._swe_length_1):
|
|
144
|
+
self.swe[jdx0, jdx1] = self._swe_array[idx, jdx0, jdx1]
|
|
145
|
+
if self._gact_diskflag_reading:
|
|
146
|
+
k = 0
|
|
147
|
+
for jdx0 in range(self._gact_length_0):
|
|
148
|
+
self.gact[jdx0] = self._gact_ncarray[k]
|
|
149
|
+
k += 1
|
|
150
|
+
elif self._gact_ramflag:
|
|
151
|
+
for jdx0 in range(self._gact_length_0):
|
|
152
|
+
self.gact[jdx0] = self._gact_array[idx, jdx0]
|
|
153
|
+
cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
|
|
154
|
+
cdef numpy.int64_t jdx0, jdx1
|
|
155
|
+
cdef numpy.int64_t k
|
|
156
|
+
if self._tc_diskflag_writing:
|
|
157
|
+
k = 0
|
|
158
|
+
for jdx0 in range(self._tc_length_0):
|
|
159
|
+
self._tc_ncarray[k] = self.tc[jdx0]
|
|
160
|
+
k += 1
|
|
161
|
+
if self._tc_ramflag:
|
|
162
|
+
for jdx0 in range(self._tc_length_0):
|
|
163
|
+
self._tc_array[idx, jdx0] = self.tc[jdx0]
|
|
164
|
+
if self._fracrain_diskflag_writing:
|
|
165
|
+
k = 0
|
|
166
|
+
for jdx0 in range(self._fracrain_length_0):
|
|
167
|
+
self._fracrain_ncarray[k] = self.fracrain[jdx0]
|
|
168
|
+
k += 1
|
|
169
|
+
if self._fracrain_ramflag:
|
|
170
|
+
for jdx0 in range(self._fracrain_length_0):
|
|
171
|
+
self._fracrain_array[idx, jdx0] = self.fracrain[jdx0]
|
|
172
|
+
if self._rfc_diskflag_writing:
|
|
173
|
+
k = 0
|
|
174
|
+
for jdx0 in range(self._rfc_length_0):
|
|
175
|
+
self._rfc_ncarray[k] = self.rfc[jdx0]
|
|
176
|
+
k += 1
|
|
177
|
+
if self._rfc_ramflag:
|
|
178
|
+
for jdx0 in range(self._rfc_length_0):
|
|
179
|
+
self._rfc_array[idx, jdx0] = self.rfc[jdx0]
|
|
180
|
+
if self._sfc_diskflag_writing:
|
|
181
|
+
k = 0
|
|
182
|
+
for jdx0 in range(self._sfc_length_0):
|
|
183
|
+
self._sfc_ncarray[k] = self.sfc[jdx0]
|
|
184
|
+
k += 1
|
|
185
|
+
if self._sfc_ramflag:
|
|
186
|
+
for jdx0 in range(self._sfc_length_0):
|
|
187
|
+
self._sfc_array[idx, jdx0] = self.sfc[jdx0]
|
|
188
|
+
if self._cfact_diskflag_writing:
|
|
189
|
+
k = 0
|
|
190
|
+
for jdx0 in range(self._cfact_length_0):
|
|
191
|
+
self._cfact_ncarray[k] = self.cfact[jdx0]
|
|
192
|
+
k += 1
|
|
193
|
+
if self._cfact_ramflag:
|
|
194
|
+
for jdx0 in range(self._cfact_length_0):
|
|
195
|
+
self._cfact_array[idx, jdx0] = self.cfact[jdx0]
|
|
196
|
+
if self._swe_diskflag_writing:
|
|
197
|
+
k = 0
|
|
198
|
+
for jdx0 in range(self._swe_length_0):
|
|
199
|
+
for jdx1 in range(self._swe_length_1):
|
|
200
|
+
self._swe_ncarray[k] = self.swe[jdx0, jdx1]
|
|
201
|
+
k += 1
|
|
202
|
+
if self._swe_ramflag:
|
|
203
|
+
for jdx0 in range(self._swe_length_0):
|
|
204
|
+
for jdx1 in range(self._swe_length_1):
|
|
205
|
+
self._swe_array[idx, jdx0, jdx1] = self.swe[jdx0, jdx1]
|
|
206
|
+
if self._gact_diskflag_writing:
|
|
207
|
+
k = 0
|
|
208
|
+
for jdx0 in range(self._gact_length_0):
|
|
209
|
+
self._gact_ncarray[k] = self.gact[jdx0]
|
|
210
|
+
k += 1
|
|
211
|
+
if self._gact_ramflag:
|
|
212
|
+
for jdx0 in range(self._gact_length_0):
|
|
213
|
+
self._gact_array[idx, jdx0] = self.gact[jdx0]
|
|
214
|
+
cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
|
|
215
|
+
pass
|
|
216
|
+
cpdef inline void update_outputs(self) noexcept nogil:
|
|
217
|
+
pass
|
|
218
|
+
@cython.final
|
|
219
|
+
cdef class FluxSequences:
|
|
220
|
+
cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
|
|
221
|
+
cdef numpy.int64_t jdx0, jdx1
|
|
222
|
+
cdef numpy.int64_t k
|
|
223
|
+
if self._pc_diskflag_reading:
|
|
224
|
+
k = 0
|
|
225
|
+
for jdx0 in range(self._pc_length_0):
|
|
226
|
+
self.pc[jdx0] = self._pc_ncarray[k]
|
|
227
|
+
k += 1
|
|
228
|
+
elif self._pc_ramflag:
|
|
229
|
+
for jdx0 in range(self._pc_length_0):
|
|
230
|
+
self.pc[jdx0] = self._pc_array[idx, jdx0]
|
|
231
|
+
if self._ei_diskflag_reading:
|
|
232
|
+
k = 0
|
|
233
|
+
for jdx0 in range(self._ei_length_0):
|
|
234
|
+
self.ei[jdx0] = self._ei_ncarray[k]
|
|
235
|
+
k += 1
|
|
236
|
+
elif self._ei_ramflag:
|
|
237
|
+
for jdx0 in range(self._ei_length_0):
|
|
238
|
+
self.ei[jdx0] = self._ei_array[idx, jdx0]
|
|
239
|
+
if self._tf_diskflag_reading:
|
|
240
|
+
k = 0
|
|
241
|
+
for jdx0 in range(self._tf_length_0):
|
|
242
|
+
self.tf[jdx0] = self._tf_ncarray[k]
|
|
243
|
+
k += 1
|
|
244
|
+
elif self._tf_ramflag:
|
|
245
|
+
for jdx0 in range(self._tf_length_0):
|
|
246
|
+
self.tf[jdx0] = self._tf_array[idx, jdx0]
|
|
247
|
+
if self._spl_diskflag_reading:
|
|
248
|
+
k = 0
|
|
249
|
+
for jdx0 in range(self._spl_length_0):
|
|
250
|
+
self.spl[jdx0] = self._spl_ncarray[k]
|
|
251
|
+
k += 1
|
|
252
|
+
elif self._spl_ramflag:
|
|
253
|
+
for jdx0 in range(self._spl_length_0):
|
|
254
|
+
self.spl[jdx0] = self._spl_array[idx, jdx0]
|
|
255
|
+
if self._wcl_diskflag_reading:
|
|
256
|
+
k = 0
|
|
257
|
+
for jdx0 in range(self._wcl_length_0):
|
|
258
|
+
self.wcl[jdx0] = self._wcl_ncarray[k]
|
|
259
|
+
k += 1
|
|
260
|
+
elif self._wcl_ramflag:
|
|
261
|
+
for jdx0 in range(self._wcl_length_0):
|
|
262
|
+
self.wcl[jdx0] = self._wcl_array[idx, jdx0]
|
|
263
|
+
if self._spg_diskflag_reading:
|
|
264
|
+
k = 0
|
|
265
|
+
for jdx0 in range(self._spg_length_0):
|
|
266
|
+
self.spg[jdx0] = self._spg_ncarray[k]
|
|
267
|
+
k += 1
|
|
268
|
+
elif self._spg_ramflag:
|
|
269
|
+
for jdx0 in range(self._spg_length_0):
|
|
270
|
+
self.spg[jdx0] = self._spg_array[idx, jdx0]
|
|
271
|
+
if self._wcg_diskflag_reading:
|
|
272
|
+
k = 0
|
|
273
|
+
for jdx0 in range(self._wcg_length_0):
|
|
274
|
+
self.wcg[jdx0] = self._wcg_ncarray[k]
|
|
275
|
+
k += 1
|
|
276
|
+
elif self._wcg_ramflag:
|
|
277
|
+
for jdx0 in range(self._wcg_length_0):
|
|
278
|
+
self.wcg[jdx0] = self._wcg_array[idx, jdx0]
|
|
279
|
+
if self._glmelt_diskflag_reading:
|
|
280
|
+
k = 0
|
|
281
|
+
for jdx0 in range(self._glmelt_length_0):
|
|
282
|
+
self.glmelt[jdx0] = self._glmelt_ncarray[k]
|
|
283
|
+
k += 1
|
|
284
|
+
elif self._glmelt_ramflag:
|
|
285
|
+
for jdx0 in range(self._glmelt_length_0):
|
|
286
|
+
self.glmelt[jdx0] = self._glmelt_array[idx, jdx0]
|
|
287
|
+
if self._melt_diskflag_reading:
|
|
288
|
+
k = 0
|
|
289
|
+
for jdx0 in range(self._melt_length_0):
|
|
290
|
+
for jdx1 in range(self._melt_length_1):
|
|
291
|
+
self.melt[jdx0, jdx1] = self._melt_ncarray[k]
|
|
292
|
+
k += 1
|
|
293
|
+
elif self._melt_ramflag:
|
|
294
|
+
for jdx0 in range(self._melt_length_0):
|
|
295
|
+
for jdx1 in range(self._melt_length_1):
|
|
296
|
+
self.melt[jdx0, jdx1] = self._melt_array[idx, jdx0, jdx1]
|
|
297
|
+
if self._refr_diskflag_reading:
|
|
298
|
+
k = 0
|
|
299
|
+
for jdx0 in range(self._refr_length_0):
|
|
300
|
+
for jdx1 in range(self._refr_length_1):
|
|
301
|
+
self.refr[jdx0, jdx1] = self._refr_ncarray[k]
|
|
302
|
+
k += 1
|
|
303
|
+
elif self._refr_ramflag:
|
|
304
|
+
for jdx0 in range(self._refr_length_0):
|
|
305
|
+
for jdx1 in range(self._refr_length_1):
|
|
306
|
+
self.refr[jdx0, jdx1] = self._refr_array[idx, jdx0, jdx1]
|
|
307
|
+
if self._in__diskflag_reading:
|
|
308
|
+
k = 0
|
|
309
|
+
for jdx0 in range(self._in__length_0):
|
|
310
|
+
self.in_[jdx0] = self._in__ncarray[k]
|
|
311
|
+
k += 1
|
|
312
|
+
elif self._in__ramflag:
|
|
313
|
+
for jdx0 in range(self._in__length_0):
|
|
314
|
+
self.in_[jdx0] = self._in__array[idx, jdx0]
|
|
315
|
+
if self._r_diskflag_reading:
|
|
316
|
+
k = 0
|
|
317
|
+
for jdx0 in range(self._r_length_0):
|
|
318
|
+
self.r[jdx0] = self._r_ncarray[k]
|
|
319
|
+
k += 1
|
|
320
|
+
elif self._r_ramflag:
|
|
321
|
+
for jdx0 in range(self._r_length_0):
|
|
322
|
+
self.r[jdx0] = self._r_array[idx, jdx0]
|
|
323
|
+
if self._sr_diskflag_reading:
|
|
324
|
+
k = 0
|
|
325
|
+
for jdx0 in range(self._sr_length_0):
|
|
326
|
+
self.sr[jdx0] = self._sr_ncarray[k]
|
|
327
|
+
k += 1
|
|
328
|
+
elif self._sr_ramflag:
|
|
329
|
+
for jdx0 in range(self._sr_length_0):
|
|
330
|
+
self.sr[jdx0] = self._sr_array[idx, jdx0]
|
|
331
|
+
if self._ea_diskflag_reading:
|
|
332
|
+
k = 0
|
|
333
|
+
for jdx0 in range(self._ea_length_0):
|
|
334
|
+
self.ea[jdx0] = self._ea_ncarray[k]
|
|
335
|
+
k += 1
|
|
336
|
+
elif self._ea_ramflag:
|
|
337
|
+
for jdx0 in range(self._ea_length_0):
|
|
338
|
+
self.ea[jdx0] = self._ea_array[idx, jdx0]
|
|
339
|
+
if self._dp_diskflag_reading:
|
|
340
|
+
k = 0
|
|
341
|
+
for jdx0 in range(self._dp_length_0):
|
|
342
|
+
self.dp[jdx0] = self._dp_ncarray[k]
|
|
343
|
+
k += 1
|
|
344
|
+
elif self._dp_ramflag:
|
|
345
|
+
for jdx0 in range(self._dp_length_0):
|
|
346
|
+
self.dp[jdx0] = self._dp_array[idx, jdx0]
|
|
347
|
+
if self._el_diskflag_reading:
|
|
348
|
+
k = 0
|
|
349
|
+
for jdx0 in range(self._el_length_0):
|
|
350
|
+
self.el[jdx0] = self._el_ncarray[k]
|
|
351
|
+
k += 1
|
|
352
|
+
elif self._el_ramflag:
|
|
353
|
+
for jdx0 in range(self._el_length_0):
|
|
354
|
+
self.el[jdx0] = self._el_array[idx, jdx0]
|
|
355
|
+
if self._rs_diskflag_reading:
|
|
356
|
+
k = 0
|
|
357
|
+
for jdx0 in range(self._rs_length_0):
|
|
358
|
+
self.rs[jdx0] = self._rs_ncarray[k]
|
|
359
|
+
k += 1
|
|
360
|
+
elif self._rs_ramflag:
|
|
361
|
+
for jdx0 in range(self._rs_length_0):
|
|
362
|
+
self.rs[jdx0] = self._rs_array[idx, jdx0]
|
|
363
|
+
if self._ri_diskflag_reading:
|
|
364
|
+
k = 0
|
|
365
|
+
for jdx0 in range(self._ri_length_0):
|
|
366
|
+
self.ri[jdx0] = self._ri_ncarray[k]
|
|
367
|
+
k += 1
|
|
368
|
+
elif self._ri_ramflag:
|
|
369
|
+
for jdx0 in range(self._ri_length_0):
|
|
370
|
+
self.ri[jdx0] = self._ri_array[idx, jdx0]
|
|
371
|
+
if self._gr1_diskflag_reading:
|
|
372
|
+
k = 0
|
|
373
|
+
for jdx0 in range(self._gr1_length_0):
|
|
374
|
+
self.gr1[jdx0] = self._gr1_ncarray[k]
|
|
375
|
+
k += 1
|
|
376
|
+
elif self._gr1_ramflag:
|
|
377
|
+
for jdx0 in range(self._gr1_length_0):
|
|
378
|
+
self.gr1[jdx0] = self._gr1_array[idx, jdx0]
|
|
379
|
+
if self._rg1_diskflag_reading:
|
|
380
|
+
k = 0
|
|
381
|
+
for jdx0 in range(self._rg1_length_0):
|
|
382
|
+
self.rg1[jdx0] = self._rg1_ncarray[k]
|
|
383
|
+
k += 1
|
|
384
|
+
elif self._rg1_ramflag:
|
|
385
|
+
for jdx0 in range(self._rg1_length_0):
|
|
386
|
+
self.rg1[jdx0] = self._rg1_array[idx, jdx0]
|
|
387
|
+
if self._gr2_diskflag_reading:
|
|
388
|
+
self.gr2 = self._gr2_ncarray[0]
|
|
389
|
+
elif self._gr2_ramflag:
|
|
390
|
+
self.gr2 = self._gr2_array[idx]
|
|
391
|
+
if self._rg2_diskflag_reading:
|
|
392
|
+
self.rg2 = self._rg2_ncarray[0]
|
|
393
|
+
elif self._rg2_ramflag:
|
|
394
|
+
self.rg2 = self._rg2_array[idx]
|
|
395
|
+
if self._gr3_diskflag_reading:
|
|
396
|
+
self.gr3 = self._gr3_ncarray[0]
|
|
397
|
+
elif self._gr3_ramflag:
|
|
398
|
+
self.gr3 = self._gr3_array[idx]
|
|
399
|
+
if self._rg3_diskflag_reading:
|
|
400
|
+
self.rg3 = self._rg3_ncarray[0]
|
|
401
|
+
elif self._rg3_ramflag:
|
|
402
|
+
self.rg3 = self._rg3_array[idx]
|
|
403
|
+
if self._inrc_diskflag_reading:
|
|
404
|
+
self.inrc = self._inrc_ncarray[0]
|
|
405
|
+
elif self._inrc_ramflag:
|
|
406
|
+
self.inrc = self._inrc_array[idx]
|
|
407
|
+
if self._outrc_diskflag_reading:
|
|
408
|
+
self.outrc = self._outrc_ncarray[0]
|
|
409
|
+
elif self._outrc_ramflag:
|
|
410
|
+
self.outrc = self._outrc_array[idx]
|
|
411
|
+
if self._rt_diskflag_reading:
|
|
412
|
+
self.rt = self._rt_ncarray[0]
|
|
413
|
+
elif self._rt_ramflag:
|
|
414
|
+
self.rt = self._rt_array[idx]
|
|
415
|
+
if self._qt_diskflag_reading:
|
|
416
|
+
self.qt = self._qt_ncarray[0]
|
|
417
|
+
elif self._qt_ramflag:
|
|
418
|
+
self.qt = self._qt_array[idx]
|
|
419
|
+
cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
|
|
420
|
+
cdef numpy.int64_t jdx0, jdx1
|
|
421
|
+
cdef numpy.int64_t k
|
|
422
|
+
if self._pc_diskflag_writing:
|
|
423
|
+
k = 0
|
|
424
|
+
for jdx0 in range(self._pc_length_0):
|
|
425
|
+
self._pc_ncarray[k] = self.pc[jdx0]
|
|
426
|
+
k += 1
|
|
427
|
+
if self._pc_ramflag:
|
|
428
|
+
for jdx0 in range(self._pc_length_0):
|
|
429
|
+
self._pc_array[idx, jdx0] = self.pc[jdx0]
|
|
430
|
+
if self._ei_diskflag_writing:
|
|
431
|
+
k = 0
|
|
432
|
+
for jdx0 in range(self._ei_length_0):
|
|
433
|
+
self._ei_ncarray[k] = self.ei[jdx0]
|
|
434
|
+
k += 1
|
|
435
|
+
if self._ei_ramflag:
|
|
436
|
+
for jdx0 in range(self._ei_length_0):
|
|
437
|
+
self._ei_array[idx, jdx0] = self.ei[jdx0]
|
|
438
|
+
if self._tf_diskflag_writing:
|
|
439
|
+
k = 0
|
|
440
|
+
for jdx0 in range(self._tf_length_0):
|
|
441
|
+
self._tf_ncarray[k] = self.tf[jdx0]
|
|
442
|
+
k += 1
|
|
443
|
+
if self._tf_ramflag:
|
|
444
|
+
for jdx0 in range(self._tf_length_0):
|
|
445
|
+
self._tf_array[idx, jdx0] = self.tf[jdx0]
|
|
446
|
+
if self._spl_diskflag_writing:
|
|
447
|
+
k = 0
|
|
448
|
+
for jdx0 in range(self._spl_length_0):
|
|
449
|
+
self._spl_ncarray[k] = self.spl[jdx0]
|
|
450
|
+
k += 1
|
|
451
|
+
if self._spl_ramflag:
|
|
452
|
+
for jdx0 in range(self._spl_length_0):
|
|
453
|
+
self._spl_array[idx, jdx0] = self.spl[jdx0]
|
|
454
|
+
if self._wcl_diskflag_writing:
|
|
455
|
+
k = 0
|
|
456
|
+
for jdx0 in range(self._wcl_length_0):
|
|
457
|
+
self._wcl_ncarray[k] = self.wcl[jdx0]
|
|
458
|
+
k += 1
|
|
459
|
+
if self._wcl_ramflag:
|
|
460
|
+
for jdx0 in range(self._wcl_length_0):
|
|
461
|
+
self._wcl_array[idx, jdx0] = self.wcl[jdx0]
|
|
462
|
+
if self._spg_diskflag_writing:
|
|
463
|
+
k = 0
|
|
464
|
+
for jdx0 in range(self._spg_length_0):
|
|
465
|
+
self._spg_ncarray[k] = self.spg[jdx0]
|
|
466
|
+
k += 1
|
|
467
|
+
if self._spg_ramflag:
|
|
468
|
+
for jdx0 in range(self._spg_length_0):
|
|
469
|
+
self._spg_array[idx, jdx0] = self.spg[jdx0]
|
|
470
|
+
if self._wcg_diskflag_writing:
|
|
471
|
+
k = 0
|
|
472
|
+
for jdx0 in range(self._wcg_length_0):
|
|
473
|
+
self._wcg_ncarray[k] = self.wcg[jdx0]
|
|
474
|
+
k += 1
|
|
475
|
+
if self._wcg_ramflag:
|
|
476
|
+
for jdx0 in range(self._wcg_length_0):
|
|
477
|
+
self._wcg_array[idx, jdx0] = self.wcg[jdx0]
|
|
478
|
+
if self._glmelt_diskflag_writing:
|
|
479
|
+
k = 0
|
|
480
|
+
for jdx0 in range(self._glmelt_length_0):
|
|
481
|
+
self._glmelt_ncarray[k] = self.glmelt[jdx0]
|
|
482
|
+
k += 1
|
|
483
|
+
if self._glmelt_ramflag:
|
|
484
|
+
for jdx0 in range(self._glmelt_length_0):
|
|
485
|
+
self._glmelt_array[idx, jdx0] = self.glmelt[jdx0]
|
|
486
|
+
if self._melt_diskflag_writing:
|
|
487
|
+
k = 0
|
|
488
|
+
for jdx0 in range(self._melt_length_0):
|
|
489
|
+
for jdx1 in range(self._melt_length_1):
|
|
490
|
+
self._melt_ncarray[k] = self.melt[jdx0, jdx1]
|
|
491
|
+
k += 1
|
|
492
|
+
if self._melt_ramflag:
|
|
493
|
+
for jdx0 in range(self._melt_length_0):
|
|
494
|
+
for jdx1 in range(self._melt_length_1):
|
|
495
|
+
self._melt_array[idx, jdx0, jdx1] = self.melt[jdx0, jdx1]
|
|
496
|
+
if self._refr_diskflag_writing:
|
|
497
|
+
k = 0
|
|
498
|
+
for jdx0 in range(self._refr_length_0):
|
|
499
|
+
for jdx1 in range(self._refr_length_1):
|
|
500
|
+
self._refr_ncarray[k] = self.refr[jdx0, jdx1]
|
|
501
|
+
k += 1
|
|
502
|
+
if self._refr_ramflag:
|
|
503
|
+
for jdx0 in range(self._refr_length_0):
|
|
504
|
+
for jdx1 in range(self._refr_length_1):
|
|
505
|
+
self._refr_array[idx, jdx0, jdx1] = self.refr[jdx0, jdx1]
|
|
506
|
+
if self._in__diskflag_writing:
|
|
507
|
+
k = 0
|
|
508
|
+
for jdx0 in range(self._in__length_0):
|
|
509
|
+
self._in__ncarray[k] = self.in_[jdx0]
|
|
510
|
+
k += 1
|
|
511
|
+
if self._in__ramflag:
|
|
512
|
+
for jdx0 in range(self._in__length_0):
|
|
513
|
+
self._in__array[idx, jdx0] = self.in_[jdx0]
|
|
514
|
+
if self._r_diskflag_writing:
|
|
515
|
+
k = 0
|
|
516
|
+
for jdx0 in range(self._r_length_0):
|
|
517
|
+
self._r_ncarray[k] = self.r[jdx0]
|
|
518
|
+
k += 1
|
|
519
|
+
if self._r_ramflag:
|
|
520
|
+
for jdx0 in range(self._r_length_0):
|
|
521
|
+
self._r_array[idx, jdx0] = self.r[jdx0]
|
|
522
|
+
if self._sr_diskflag_writing:
|
|
523
|
+
k = 0
|
|
524
|
+
for jdx0 in range(self._sr_length_0):
|
|
525
|
+
self._sr_ncarray[k] = self.sr[jdx0]
|
|
526
|
+
k += 1
|
|
527
|
+
if self._sr_ramflag:
|
|
528
|
+
for jdx0 in range(self._sr_length_0):
|
|
529
|
+
self._sr_array[idx, jdx0] = self.sr[jdx0]
|
|
530
|
+
if self._ea_diskflag_writing:
|
|
531
|
+
k = 0
|
|
532
|
+
for jdx0 in range(self._ea_length_0):
|
|
533
|
+
self._ea_ncarray[k] = self.ea[jdx0]
|
|
534
|
+
k += 1
|
|
535
|
+
if self._ea_ramflag:
|
|
536
|
+
for jdx0 in range(self._ea_length_0):
|
|
537
|
+
self._ea_array[idx, jdx0] = self.ea[jdx0]
|
|
538
|
+
if self._dp_diskflag_writing:
|
|
539
|
+
k = 0
|
|
540
|
+
for jdx0 in range(self._dp_length_0):
|
|
541
|
+
self._dp_ncarray[k] = self.dp[jdx0]
|
|
542
|
+
k += 1
|
|
543
|
+
if self._dp_ramflag:
|
|
544
|
+
for jdx0 in range(self._dp_length_0):
|
|
545
|
+
self._dp_array[idx, jdx0] = self.dp[jdx0]
|
|
546
|
+
if self._el_diskflag_writing:
|
|
547
|
+
k = 0
|
|
548
|
+
for jdx0 in range(self._el_length_0):
|
|
549
|
+
self._el_ncarray[k] = self.el[jdx0]
|
|
550
|
+
k += 1
|
|
551
|
+
if self._el_ramflag:
|
|
552
|
+
for jdx0 in range(self._el_length_0):
|
|
553
|
+
self._el_array[idx, jdx0] = self.el[jdx0]
|
|
554
|
+
if self._rs_diskflag_writing:
|
|
555
|
+
k = 0
|
|
556
|
+
for jdx0 in range(self._rs_length_0):
|
|
557
|
+
self._rs_ncarray[k] = self.rs[jdx0]
|
|
558
|
+
k += 1
|
|
559
|
+
if self._rs_ramflag:
|
|
560
|
+
for jdx0 in range(self._rs_length_0):
|
|
561
|
+
self._rs_array[idx, jdx0] = self.rs[jdx0]
|
|
562
|
+
if self._ri_diskflag_writing:
|
|
563
|
+
k = 0
|
|
564
|
+
for jdx0 in range(self._ri_length_0):
|
|
565
|
+
self._ri_ncarray[k] = self.ri[jdx0]
|
|
566
|
+
k += 1
|
|
567
|
+
if self._ri_ramflag:
|
|
568
|
+
for jdx0 in range(self._ri_length_0):
|
|
569
|
+
self._ri_array[idx, jdx0] = self.ri[jdx0]
|
|
570
|
+
if self._gr1_diskflag_writing:
|
|
571
|
+
k = 0
|
|
572
|
+
for jdx0 in range(self._gr1_length_0):
|
|
573
|
+
self._gr1_ncarray[k] = self.gr1[jdx0]
|
|
574
|
+
k += 1
|
|
575
|
+
if self._gr1_ramflag:
|
|
576
|
+
for jdx0 in range(self._gr1_length_0):
|
|
577
|
+
self._gr1_array[idx, jdx0] = self.gr1[jdx0]
|
|
578
|
+
if self._rg1_diskflag_writing:
|
|
579
|
+
k = 0
|
|
580
|
+
for jdx0 in range(self._rg1_length_0):
|
|
581
|
+
self._rg1_ncarray[k] = self.rg1[jdx0]
|
|
582
|
+
k += 1
|
|
583
|
+
if self._rg1_ramflag:
|
|
584
|
+
for jdx0 in range(self._rg1_length_0):
|
|
585
|
+
self._rg1_array[idx, jdx0] = self.rg1[jdx0]
|
|
586
|
+
if self._gr2_diskflag_writing:
|
|
587
|
+
self._gr2_ncarray[0] = self.gr2
|
|
588
|
+
if self._gr2_ramflag:
|
|
589
|
+
self._gr2_array[idx] = self.gr2
|
|
590
|
+
if self._rg2_diskflag_writing:
|
|
591
|
+
self._rg2_ncarray[0] = self.rg2
|
|
592
|
+
if self._rg2_ramflag:
|
|
593
|
+
self._rg2_array[idx] = self.rg2
|
|
594
|
+
if self._gr3_diskflag_writing:
|
|
595
|
+
self._gr3_ncarray[0] = self.gr3
|
|
596
|
+
if self._gr3_ramflag:
|
|
597
|
+
self._gr3_array[idx] = self.gr3
|
|
598
|
+
if self._rg3_diskflag_writing:
|
|
599
|
+
self._rg3_ncarray[0] = self.rg3
|
|
600
|
+
if self._rg3_ramflag:
|
|
601
|
+
self._rg3_array[idx] = self.rg3
|
|
602
|
+
if self._inrc_diskflag_writing:
|
|
603
|
+
self._inrc_ncarray[0] = self.inrc
|
|
604
|
+
if self._inrc_ramflag:
|
|
605
|
+
self._inrc_array[idx] = self.inrc
|
|
606
|
+
if self._outrc_diskflag_writing:
|
|
607
|
+
self._outrc_ncarray[0] = self.outrc
|
|
608
|
+
if self._outrc_ramflag:
|
|
609
|
+
self._outrc_array[idx] = self.outrc
|
|
610
|
+
if self._rt_diskflag_writing:
|
|
611
|
+
self._rt_ncarray[0] = self.rt
|
|
612
|
+
if self._rt_ramflag:
|
|
613
|
+
self._rt_array[idx] = self.rt
|
|
614
|
+
if self._qt_diskflag_writing:
|
|
615
|
+
self._qt_ncarray[0] = self.qt
|
|
616
|
+
if self._qt_ramflag:
|
|
617
|
+
self._qt_array[idx] = self.qt
|
|
618
|
+
cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
|
|
619
|
+
if name == "gr2":
|
|
620
|
+
self._gr2_outputpointer = value.p_value
|
|
621
|
+
if name == "rg2":
|
|
622
|
+
self._rg2_outputpointer = value.p_value
|
|
623
|
+
if name == "gr3":
|
|
624
|
+
self._gr3_outputpointer = value.p_value
|
|
625
|
+
if name == "rg3":
|
|
626
|
+
self._rg3_outputpointer = value.p_value
|
|
627
|
+
if name == "inrc":
|
|
628
|
+
self._inrc_outputpointer = value.p_value
|
|
629
|
+
if name == "outrc":
|
|
630
|
+
self._outrc_outputpointer = value.p_value
|
|
631
|
+
if name == "rt":
|
|
632
|
+
self._rt_outputpointer = value.p_value
|
|
633
|
+
if name == "qt":
|
|
634
|
+
self._qt_outputpointer = value.p_value
|
|
635
|
+
cpdef inline void update_outputs(self) noexcept nogil:
|
|
636
|
+
if self._gr2_outputflag:
|
|
637
|
+
self._gr2_outputpointer[0] = self.gr2
|
|
638
|
+
if self._rg2_outputflag:
|
|
639
|
+
self._rg2_outputpointer[0] = self.rg2
|
|
640
|
+
if self._gr3_outputflag:
|
|
641
|
+
self._gr3_outputpointer[0] = self.gr3
|
|
642
|
+
if self._rg3_outputflag:
|
|
643
|
+
self._rg3_outputpointer[0] = self.rg3
|
|
644
|
+
if self._inrc_outputflag:
|
|
645
|
+
self._inrc_outputpointer[0] = self.inrc
|
|
646
|
+
if self._outrc_outputflag:
|
|
647
|
+
self._outrc_outputpointer[0] = self.outrc
|
|
648
|
+
if self._rt_outputflag:
|
|
649
|
+
self._rt_outputpointer[0] = self.rt
|
|
650
|
+
if self._qt_outputflag:
|
|
651
|
+
self._qt_outputpointer[0] = self.qt
|
|
652
|
+
@cython.final
|
|
653
|
+
cdef class StateSequences:
|
|
654
|
+
cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
|
|
655
|
+
cdef numpy.int64_t jdx0, jdx1
|
|
656
|
+
cdef numpy.int64_t k
|
|
657
|
+
if self._ic_diskflag_reading:
|
|
658
|
+
k = 0
|
|
659
|
+
for jdx0 in range(self._ic_length_0):
|
|
660
|
+
self.ic[jdx0] = self._ic_ncarray[k]
|
|
661
|
+
k += 1
|
|
662
|
+
elif self._ic_ramflag:
|
|
663
|
+
for jdx0 in range(self._ic_length_0):
|
|
664
|
+
self.ic[jdx0] = self._ic_array[idx, jdx0]
|
|
665
|
+
if self._sp_diskflag_reading:
|
|
666
|
+
k = 0
|
|
667
|
+
for jdx0 in range(self._sp_length_0):
|
|
668
|
+
for jdx1 in range(self._sp_length_1):
|
|
669
|
+
self.sp[jdx0, jdx1] = self._sp_ncarray[k]
|
|
670
|
+
k += 1
|
|
671
|
+
elif self._sp_ramflag:
|
|
672
|
+
for jdx0 in range(self._sp_length_0):
|
|
673
|
+
for jdx1 in range(self._sp_length_1):
|
|
674
|
+
self.sp[jdx0, jdx1] = self._sp_array[idx, jdx0, jdx1]
|
|
675
|
+
if self._wc_diskflag_reading:
|
|
676
|
+
k = 0
|
|
677
|
+
for jdx0 in range(self._wc_length_0):
|
|
678
|
+
for jdx1 in range(self._wc_length_1):
|
|
679
|
+
self.wc[jdx0, jdx1] = self._wc_ncarray[k]
|
|
680
|
+
k += 1
|
|
681
|
+
elif self._wc_ramflag:
|
|
682
|
+
for jdx0 in range(self._wc_length_0):
|
|
683
|
+
for jdx1 in range(self._wc_length_1):
|
|
684
|
+
self.wc[jdx0, jdx1] = self._wc_array[idx, jdx0, jdx1]
|
|
685
|
+
if self._sm_diskflag_reading:
|
|
686
|
+
k = 0
|
|
687
|
+
for jdx0 in range(self._sm_length_0):
|
|
688
|
+
self.sm[jdx0] = self._sm_ncarray[k]
|
|
689
|
+
k += 1
|
|
690
|
+
elif self._sm_ramflag:
|
|
691
|
+
for jdx0 in range(self._sm_length_0):
|
|
692
|
+
self.sm[jdx0] = self._sm_array[idx, jdx0]
|
|
693
|
+
if self._suz_diskflag_reading:
|
|
694
|
+
k = 0
|
|
695
|
+
for jdx0 in range(self._suz_length_0):
|
|
696
|
+
self.suz[jdx0] = self._suz_ncarray[k]
|
|
697
|
+
k += 1
|
|
698
|
+
elif self._suz_ramflag:
|
|
699
|
+
for jdx0 in range(self._suz_length_0):
|
|
700
|
+
self.suz[jdx0] = self._suz_array[idx, jdx0]
|
|
701
|
+
if self._sg1_diskflag_reading:
|
|
702
|
+
k = 0
|
|
703
|
+
for jdx0 in range(self._sg1_length_0):
|
|
704
|
+
self.sg1[jdx0] = self._sg1_ncarray[k]
|
|
705
|
+
k += 1
|
|
706
|
+
elif self._sg1_ramflag:
|
|
707
|
+
for jdx0 in range(self._sg1_length_0):
|
|
708
|
+
self.sg1[jdx0] = self._sg1_array[idx, jdx0]
|
|
709
|
+
if self._sg2_diskflag_reading:
|
|
710
|
+
self.sg2 = self._sg2_ncarray[0]
|
|
711
|
+
elif self._sg2_ramflag:
|
|
712
|
+
self.sg2 = self._sg2_array[idx]
|
|
713
|
+
if self._sg3_diskflag_reading:
|
|
714
|
+
self.sg3 = self._sg3_ncarray[0]
|
|
715
|
+
elif self._sg3_ramflag:
|
|
716
|
+
self.sg3 = self._sg3_array[idx]
|
|
717
|
+
cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
|
|
718
|
+
cdef numpy.int64_t jdx0, jdx1
|
|
719
|
+
cdef numpy.int64_t k
|
|
720
|
+
if self._ic_diskflag_writing:
|
|
721
|
+
k = 0
|
|
722
|
+
for jdx0 in range(self._ic_length_0):
|
|
723
|
+
self._ic_ncarray[k] = self.ic[jdx0]
|
|
724
|
+
k += 1
|
|
725
|
+
if self._ic_ramflag:
|
|
726
|
+
for jdx0 in range(self._ic_length_0):
|
|
727
|
+
self._ic_array[idx, jdx0] = self.ic[jdx0]
|
|
728
|
+
if self._sp_diskflag_writing:
|
|
729
|
+
k = 0
|
|
730
|
+
for jdx0 in range(self._sp_length_0):
|
|
731
|
+
for jdx1 in range(self._sp_length_1):
|
|
732
|
+
self._sp_ncarray[k] = self.sp[jdx0, jdx1]
|
|
733
|
+
k += 1
|
|
734
|
+
if self._sp_ramflag:
|
|
735
|
+
for jdx0 in range(self._sp_length_0):
|
|
736
|
+
for jdx1 in range(self._sp_length_1):
|
|
737
|
+
self._sp_array[idx, jdx0, jdx1] = self.sp[jdx0, jdx1]
|
|
738
|
+
if self._wc_diskflag_writing:
|
|
739
|
+
k = 0
|
|
740
|
+
for jdx0 in range(self._wc_length_0):
|
|
741
|
+
for jdx1 in range(self._wc_length_1):
|
|
742
|
+
self._wc_ncarray[k] = self.wc[jdx0, jdx1]
|
|
743
|
+
k += 1
|
|
744
|
+
if self._wc_ramflag:
|
|
745
|
+
for jdx0 in range(self._wc_length_0):
|
|
746
|
+
for jdx1 in range(self._wc_length_1):
|
|
747
|
+
self._wc_array[idx, jdx0, jdx1] = self.wc[jdx0, jdx1]
|
|
748
|
+
if self._sm_diskflag_writing:
|
|
749
|
+
k = 0
|
|
750
|
+
for jdx0 in range(self._sm_length_0):
|
|
751
|
+
self._sm_ncarray[k] = self.sm[jdx0]
|
|
752
|
+
k += 1
|
|
753
|
+
if self._sm_ramflag:
|
|
754
|
+
for jdx0 in range(self._sm_length_0):
|
|
755
|
+
self._sm_array[idx, jdx0] = self.sm[jdx0]
|
|
756
|
+
if self._suz_diskflag_writing:
|
|
757
|
+
k = 0
|
|
758
|
+
for jdx0 in range(self._suz_length_0):
|
|
759
|
+
self._suz_ncarray[k] = self.suz[jdx0]
|
|
760
|
+
k += 1
|
|
761
|
+
if self._suz_ramflag:
|
|
762
|
+
for jdx0 in range(self._suz_length_0):
|
|
763
|
+
self._suz_array[idx, jdx0] = self.suz[jdx0]
|
|
764
|
+
if self._sg1_diskflag_writing:
|
|
765
|
+
k = 0
|
|
766
|
+
for jdx0 in range(self._sg1_length_0):
|
|
767
|
+
self._sg1_ncarray[k] = self.sg1[jdx0]
|
|
768
|
+
k += 1
|
|
769
|
+
if self._sg1_ramflag:
|
|
770
|
+
for jdx0 in range(self._sg1_length_0):
|
|
771
|
+
self._sg1_array[idx, jdx0] = self.sg1[jdx0]
|
|
772
|
+
if self._sg2_diskflag_writing:
|
|
773
|
+
self._sg2_ncarray[0] = self.sg2
|
|
774
|
+
if self._sg2_ramflag:
|
|
775
|
+
self._sg2_array[idx] = self.sg2
|
|
776
|
+
if self._sg3_diskflag_writing:
|
|
777
|
+
self._sg3_ncarray[0] = self.sg3
|
|
778
|
+
if self._sg3_ramflag:
|
|
779
|
+
self._sg3_array[idx] = self.sg3
|
|
780
|
+
cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
|
|
781
|
+
if name == "sg2":
|
|
782
|
+
self._sg2_outputpointer = value.p_value
|
|
783
|
+
if name == "sg3":
|
|
784
|
+
self._sg3_outputpointer = value.p_value
|
|
785
|
+
cpdef inline void update_outputs(self) noexcept nogil:
|
|
786
|
+
if self._sg2_outputflag:
|
|
787
|
+
self._sg2_outputpointer[0] = self.sg2
|
|
788
|
+
if self._sg3_outputflag:
|
|
789
|
+
self._sg3_outputpointer[0] = self.sg3
|
|
790
|
+
@cython.final
|
|
791
|
+
cdef class AideSequences:
|
|
792
|
+
pass
|
|
793
|
+
@cython.final
|
|
794
|
+
cdef class OutletSequences:
|
|
795
|
+
cpdef inline set_pointer0d(self, str name, pointerutils.Double value):
|
|
796
|
+
cdef pointerutils.PDouble pointer = pointerutils.PDouble(value)
|
|
797
|
+
if name == "q":
|
|
798
|
+
self.q = pointer.p_value
|
|
799
|
+
cpdef get_value(self, str name):
|
|
800
|
+
cdef numpy.int64_t idx
|
|
801
|
+
if name == "q":
|
|
802
|
+
return self.q[0]
|
|
803
|
+
cpdef set_value(self, str name, value):
|
|
804
|
+
if name == "q":
|
|
805
|
+
self.q[0] = value
|
|
806
|
+
@cython.final
|
|
807
|
+
cdef class Model(masterinterface.MasterInterface):
|
|
808
|
+
def __init__(self):
|
|
809
|
+
super().__init__()
|
|
810
|
+
self.aetmodel = None
|
|
811
|
+
self.aetmodel_is_mainmodel = False
|
|
812
|
+
self.rconcmodel = None
|
|
813
|
+
self.rconcmodel_is_mainmodel = False
|
|
814
|
+
def get_aetmodel(self) -> masterinterface.MasterInterface | None:
|
|
815
|
+
return self.aetmodel
|
|
816
|
+
def set_aetmodel(self, aetmodel: masterinterface.MasterInterface | None) -> None:
|
|
817
|
+
self.aetmodel = aetmodel
|
|
818
|
+
def get_rconcmodel(self) -> masterinterface.MasterInterface | None:
|
|
819
|
+
return self.rconcmodel
|
|
820
|
+
def set_rconcmodel(self, rconcmodel: masterinterface.MasterInterface | None) -> None:
|
|
821
|
+
self.rconcmodel = rconcmodel
|
|
822
|
+
cpdef inline void simulate(self, numpy.int64_t idx) noexcept nogil:
|
|
823
|
+
self.idx_sim = idx
|
|
824
|
+
self.reset_reuseflags()
|
|
825
|
+
self.load_data(idx)
|
|
826
|
+
self.run()
|
|
827
|
+
self.new2old()
|
|
828
|
+
self.update_outlets()
|
|
829
|
+
self.update_outputs()
|
|
830
|
+
cpdef void reset_reuseflags(self) noexcept nogil:
|
|
831
|
+
if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
|
|
832
|
+
self.aetmodel.reset_reuseflags()
|
|
833
|
+
if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
|
|
834
|
+
self.rconcmodel.reset_reuseflags()
|
|
835
|
+
cpdef void load_data(self, numpy.int64_t idx) noexcept nogil:
|
|
836
|
+
self.idx_sim = idx
|
|
837
|
+
self.sequences.inputs.load_data(idx)
|
|
838
|
+
if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
|
|
839
|
+
self.aetmodel.load_data(idx)
|
|
840
|
+
if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
|
|
841
|
+
self.rconcmodel.load_data(idx)
|
|
842
|
+
cpdef void save_data(self, numpy.int64_t idx) noexcept nogil:
|
|
843
|
+
self.idx_sim = idx
|
|
844
|
+
self.sequences.inputs.save_data(idx)
|
|
845
|
+
self.sequences.factors.save_data(idx)
|
|
846
|
+
self.sequences.fluxes.save_data(idx)
|
|
847
|
+
self.sequences.states.save_data(idx)
|
|
848
|
+
if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
|
|
849
|
+
self.aetmodel.save_data(idx)
|
|
850
|
+
if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
|
|
851
|
+
self.rconcmodel.save_data(idx)
|
|
852
|
+
cpdef void new2old(self) noexcept nogil:
|
|
853
|
+
cdef numpy.int64_t jdx0, jdx1
|
|
854
|
+
for jdx0 in range(self.sequences.states._ic_length_0):
|
|
855
|
+
self.sequences.old_states.ic[jdx0] = self.sequences.new_states.ic[jdx0]
|
|
856
|
+
for jdx0 in range(self.sequences.states._sp_length_0):
|
|
857
|
+
for jdx1 in range(self.sequences.states._sp_length_1):
|
|
858
|
+
self.sequences.old_states.sp[jdx0,jdx1] = self.sequences.new_states.sp[jdx0,jdx1]
|
|
859
|
+
for jdx0 in range(self.sequences.states._wc_length_0):
|
|
860
|
+
for jdx1 in range(self.sequences.states._wc_length_1):
|
|
861
|
+
self.sequences.old_states.wc[jdx0,jdx1] = self.sequences.new_states.wc[jdx0,jdx1]
|
|
862
|
+
for jdx0 in range(self.sequences.states._sm_length_0):
|
|
863
|
+
self.sequences.old_states.sm[jdx0] = self.sequences.new_states.sm[jdx0]
|
|
864
|
+
for jdx0 in range(self.sequences.states._suz_length_0):
|
|
865
|
+
self.sequences.old_states.suz[jdx0] = self.sequences.new_states.suz[jdx0]
|
|
866
|
+
for jdx0 in range(self.sequences.states._sg1_length_0):
|
|
867
|
+
self.sequences.old_states.sg1[jdx0] = self.sequences.new_states.sg1[jdx0]
|
|
868
|
+
self.sequences.old_states.sg2 = self.sequences.new_states.sg2
|
|
869
|
+
self.sequences.old_states.sg3 = self.sequences.new_states.sg3
|
|
870
|
+
if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
|
|
871
|
+
self.aetmodel.new2old()
|
|
872
|
+
if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
|
|
873
|
+
self.rconcmodel.new2old()
|
|
874
|
+
cpdef inline void run(self) noexcept nogil:
|
|
875
|
+
self.calc_tc_v1()
|
|
876
|
+
self.calc_fracrain_v1()
|
|
877
|
+
self.calc_rfc_sfc_v1()
|
|
878
|
+
self.calc_pc_v1()
|
|
879
|
+
self.calc_tf_ic_v1()
|
|
880
|
+
self.calc_sp_wc_v1()
|
|
881
|
+
self.calc_spl_wcl_sp_wc_v1()
|
|
882
|
+
self.calc_spg_wcg_sp_wc_v1()
|
|
883
|
+
self.calc_cfact_v1()
|
|
884
|
+
self.calc_melt_sp_wc_v1()
|
|
885
|
+
self.calc_refr_sp_wc_v1()
|
|
886
|
+
self.calc_in_wc_v1()
|
|
887
|
+
self.calc_swe_v1()
|
|
888
|
+
self.calc_sr_v1()
|
|
889
|
+
self.calc_gact_v1()
|
|
890
|
+
self.calc_glmelt_in_v1()
|
|
891
|
+
self.calc_ei_ic_v1()
|
|
892
|
+
self.calc_r_sm_v1()
|
|
893
|
+
self.calc_ea_sm_v1()
|
|
894
|
+
self.calc_suz_v1()
|
|
895
|
+
self.calc_dp_suz_v1()
|
|
896
|
+
self.calc_rs_ri_suz_v1()
|
|
897
|
+
self.calc_gr1_v1()
|
|
898
|
+
self.calc_rg1_sg1_v1()
|
|
899
|
+
self.calc_gr2_gr3_v1()
|
|
900
|
+
self.calc_rg2_sg2_v1()
|
|
901
|
+
self.calc_rg3_sg3_v1()
|
|
902
|
+
self.calc_el_sg2_sg3_v1()
|
|
903
|
+
self.calc_inrc_v2()
|
|
904
|
+
self.calc_outrc_v1()
|
|
905
|
+
self.calc_rt_v1()
|
|
906
|
+
self.calc_qt_v1()
|
|
907
|
+
cpdef inline void update_inlets(self) noexcept nogil:
|
|
908
|
+
pass
|
|
909
|
+
cpdef inline void update_outlets(self) noexcept nogil:
|
|
910
|
+
self.pass_q_v1()
|
|
911
|
+
cpdef inline void update_receivers(self, numpy.int64_t idx) noexcept nogil:
|
|
912
|
+
self.idx_sim = idx
|
|
913
|
+
pass
|
|
914
|
+
cpdef inline void update_senders(self, numpy.int64_t idx) noexcept nogil:
|
|
915
|
+
self.idx_sim = idx
|
|
916
|
+
pass
|
|
917
|
+
cpdef inline void update_outputs(self) noexcept nogil:
|
|
918
|
+
self.sequences.fluxes.update_outputs()
|
|
919
|
+
self.sequences.states.update_outputs()
|
|
920
|
+
cpdef inline void calc_tc_v1(self) noexcept nogil:
|
|
921
|
+
cdef numpy.int64_t k
|
|
922
|
+
for k in range(self.parameters.control.nmbzones):
|
|
923
|
+
self.sequences.factors.tc[k] = self.sequences.inputs.t + self.parameters.control.tcorr[k] - self.parameters.control.tcalt[k] * (self.parameters.control.zonez[k] - self.parameters.derived.z)
|
|
924
|
+
cpdef inline void calc_fracrain_v1(self) noexcept nogil:
|
|
925
|
+
cdef double d_dt
|
|
926
|
+
cdef numpy.int64_t k
|
|
927
|
+
for k in range(self.parameters.control.nmbzones):
|
|
928
|
+
d_dt = self.parameters.control.ttint[k] / 2.0
|
|
929
|
+
if self.sequences.factors.tc[k] >= (self.parameters.control.tt[k] + d_dt):
|
|
930
|
+
self.sequences.factors.fracrain[k] = 1.0
|
|
931
|
+
elif self.sequences.factors.tc[k] <= (self.parameters.control.tt[k] - d_dt):
|
|
932
|
+
self.sequences.factors.fracrain[k] = 0.0
|
|
933
|
+
else:
|
|
934
|
+
self.sequences.factors.fracrain[k] = (self.sequences.factors.tc[k] - (self.parameters.control.tt[k] - d_dt)) / self.parameters.control.ttint[k]
|
|
935
|
+
cpdef inline void calc_rfc_sfc_v1(self) noexcept nogil:
|
|
936
|
+
cdef numpy.int64_t k
|
|
937
|
+
for k in range(self.parameters.control.nmbzones):
|
|
938
|
+
self.sequences.factors.rfc[k] = self.sequences.factors.fracrain[k] * self.parameters.control.rfcf[k]
|
|
939
|
+
self.sequences.factors.sfc[k] = (1.0 - self.sequences.factors.fracrain[k]) * self.parameters.control.sfcf[k]
|
|
940
|
+
cpdef inline void calc_pc_v1(self) noexcept nogil:
|
|
941
|
+
cdef numpy.int64_t k
|
|
942
|
+
for k in range(self.parameters.control.nmbzones):
|
|
943
|
+
self.sequences.fluxes.pc[k] = self.sequences.inputs.p * (1.0 + self.parameters.control.pcalt[k] * (self.parameters.control.zonez[k] - self.parameters.derived.z))
|
|
944
|
+
if self.sequences.fluxes.pc[k] <= 0.0:
|
|
945
|
+
self.sequences.fluxes.pc[k] = 0.0
|
|
946
|
+
else:
|
|
947
|
+
self.sequences.fluxes.pc[k] = self.sequences.fluxes.pc[k] * (self.parameters.control.pcorr[k] * (self.sequences.factors.rfc[k] + self.sequences.factors.sfc[k]))
|
|
948
|
+
cpdef inline void calc_tf_ic_v1(self) noexcept nogil:
|
|
949
|
+
cdef numpy.int64_t k
|
|
950
|
+
for k in range(self.parameters.control.nmbzones):
|
|
951
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
|
|
952
|
+
self.sequences.fluxes.tf[k] = max(self.sequences.fluxes.pc[k] - (self.parameters.control.icmax[k] - self.sequences.states.ic[k]), 0.0)
|
|
953
|
+
self.sequences.states.ic[k] = self.sequences.states.ic[k] + (self.sequences.fluxes.pc[k] - self.sequences.fluxes.tf[k])
|
|
954
|
+
else:
|
|
955
|
+
self.sequences.fluxes.tf[k] = self.sequences.fluxes.pc[k]
|
|
956
|
+
self.sequences.states.ic[k] = 0.0
|
|
957
|
+
cpdef inline void calc_sp_wc_v1(self) noexcept nogil:
|
|
958
|
+
cdef numpy.int64_t c
|
|
959
|
+
cdef double d_snow
|
|
960
|
+
cdef double d_rain
|
|
961
|
+
cdef double d_denom
|
|
962
|
+
cdef numpy.int64_t k
|
|
963
|
+
for k in range(self.parameters.control.nmbzones):
|
|
964
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
965
|
+
d_denom = self.sequences.factors.rfc[k] + self.sequences.factors.sfc[k]
|
|
966
|
+
if d_denom > 0.0:
|
|
967
|
+
d_rain = self.sequences.fluxes.tf[k] * self.sequences.factors.rfc[k] / d_denom
|
|
968
|
+
d_snow = self.sequences.fluxes.tf[k] * self.sequences.factors.sfc[k] / d_denom
|
|
969
|
+
for c in range(self.parameters.control.sclass):
|
|
970
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.parameters.control.sfdist[c] * d_rain)
|
|
971
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.parameters.control.sfdist[c] * d_snow)
|
|
972
|
+
else:
|
|
973
|
+
for c in range(self.parameters.control.sclass):
|
|
974
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
975
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
976
|
+
cpdef inline void calc_spl_wcl_sp_wc_v1(self) noexcept nogil:
|
|
977
|
+
cdef double d_excess_wc
|
|
978
|
+
cdef double d_excess_sp
|
|
979
|
+
cdef double d_excess
|
|
980
|
+
cdef double d_snow
|
|
981
|
+
cdef numpy.int64_t c
|
|
982
|
+
cdef numpy.int64_t k
|
|
983
|
+
for k in range(self.parameters.control.nmbzones):
|
|
984
|
+
self.sequences.fluxes.spl[k] = 0.0
|
|
985
|
+
self.sequences.fluxes.wcl[k] = 0.0
|
|
986
|
+
if self.parameters.control.zonetype[k] == ILAKE:
|
|
987
|
+
for c in range(self.parameters.control.sclass):
|
|
988
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
989
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
990
|
+
elif not isinf(self.parameters.control.smax[k]):
|
|
991
|
+
for c in range(self.parameters.control.sclass):
|
|
992
|
+
d_snow = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
|
|
993
|
+
d_excess = d_snow - self.parameters.control.smax[k]
|
|
994
|
+
if d_excess > 0.0:
|
|
995
|
+
d_excess_sp = d_excess * self.sequences.states.sp[c, k] / d_snow
|
|
996
|
+
d_excess_wc = d_excess * self.sequences.states.wc[c, k] / d_snow
|
|
997
|
+
self.sequences.fluxes.spl[k] = self.sequences.fluxes.spl[k] + (d_excess_sp / self.parameters.control.sclass)
|
|
998
|
+
self.sequences.fluxes.wcl[k] = self.sequences.fluxes.wcl[k] + (d_excess_wc / self.parameters.control.sclass)
|
|
999
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (d_excess_sp)
|
|
1000
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (d_excess_wc)
|
|
1001
|
+
cpdef inline void calc_spg_wcg_sp_wc_v1(self) noexcept nogil:
|
|
1002
|
+
cdef double d_excess_liquid_land
|
|
1003
|
+
cdef double d_excess_frozen_land
|
|
1004
|
+
cdef double d_delta_wc_zone
|
|
1005
|
+
cdef double d_delta_sp_zone
|
|
1006
|
+
cdef double d_fraction_gain_class
|
|
1007
|
+
cdef double d_excess_liquid_zone_actual
|
|
1008
|
+
cdef double d_excess_frozen_zone_actual
|
|
1009
|
+
cdef double d_fraction_gain_zone
|
|
1010
|
+
cdef double d_gain_max_cum
|
|
1011
|
+
cdef double d_excess_total_zone
|
|
1012
|
+
cdef double d_excess_liquid_zone
|
|
1013
|
+
cdef double d_excess_frozen_zone
|
|
1014
|
+
cdef double d_excess_liquid_basin
|
|
1015
|
+
cdef double d_excess_frozen_basin
|
|
1016
|
+
cdef double d_factor_excess
|
|
1017
|
+
cdef double d_factor_gain
|
|
1018
|
+
cdef double d_fraction_gain
|
|
1019
|
+
cdef double d_gain_max
|
|
1020
|
+
cdef double d_gain_pot
|
|
1021
|
+
cdef double d_gain_total
|
|
1022
|
+
cdef double d_gain_liquid
|
|
1023
|
+
cdef double d_gain_frozen
|
|
1024
|
+
cdef double d_f
|
|
1025
|
+
cdef numpy.int64_t t
|
|
1026
|
+
cdef numpy.int64_t f
|
|
1027
|
+
cdef numpy.int64_t c
|
|
1028
|
+
cdef numpy.int64_t i
|
|
1029
|
+
for i in range(self.parameters.control.nmbzones):
|
|
1030
|
+
self.sequences.fluxes.spg[i] = 0.0
|
|
1031
|
+
self.sequences.fluxes.wcg[i] = 0.0
|
|
1032
|
+
self.sequences.aides.spe[i] = 0.0
|
|
1033
|
+
self.sequences.aides.wce[i] = 0.0
|
|
1034
|
+
if self.parameters.control.zonetype[i] == ILAKE:
|
|
1035
|
+
for c in range(self.parameters.control.sclass):
|
|
1036
|
+
self.sequences.states.sp[c, i] = 0.0
|
|
1037
|
+
self.sequences.states.wc[c, i] = 0.0
|
|
1038
|
+
for i in range(self.parameters.derived.srednumber):
|
|
1039
|
+
f, t = self.parameters.derived.sredorder[i, 0], self.parameters.derived.sredorder[i, 1]
|
|
1040
|
+
d_f = self.parameters.derived.zonearearatios[f, t] * self.parameters.control.sred[f, t]
|
|
1041
|
+
d_gain_frozen = d_f * (self.sequences.fluxes.spl[f] + self.sequences.aides.spe[f])
|
|
1042
|
+
d_gain_liquid = d_f * (self.sequences.fluxes.wcl[f] + self.sequences.aides.wce[f])
|
|
1043
|
+
d_gain_total = d_gain_frozen + d_gain_liquid
|
|
1044
|
+
for c in range(self.parameters.control.sclass):
|
|
1045
|
+
d_gain_pot = self.parameters.control.sfdist[c] * d_gain_total
|
|
1046
|
+
if d_gain_pot > 0.0:
|
|
1047
|
+
d_gain_max = self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t]
|
|
1048
|
+
d_fraction_gain = min(d_gain_max / d_gain_pot, 1.0)
|
|
1049
|
+
d_factor_gain = d_fraction_gain * self.parameters.control.sfdist[c]
|
|
1050
|
+
self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_factor_gain * d_gain_frozen / self.parameters.control.sclass)
|
|
1051
|
+
self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_factor_gain * d_gain_liquid / self.parameters.control.sclass)
|
|
1052
|
+
self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_factor_gain * d_gain_frozen)
|
|
1053
|
+
self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_factor_gain * d_gain_liquid)
|
|
1054
|
+
d_factor_excess = (1.0 - d_fraction_gain) * self.parameters.control.sfdist[c]
|
|
1055
|
+
self.sequences.aides.spe[t] = self.sequences.aides.spe[t] + (d_factor_excess * d_gain_frozen / self.parameters.control.sclass)
|
|
1056
|
+
self.sequences.aides.wce[t] = self.sequences.aides.wce[t] + (d_factor_excess * d_gain_liquid / self.parameters.control.sclass)
|
|
1057
|
+
d_excess_frozen_basin, d_excess_liquid_basin = 0.0, 0.0
|
|
1058
|
+
for i in range(self.parameters.control.nmbzones):
|
|
1059
|
+
if self.parameters.derived.sredend[i]:
|
|
1060
|
+
d_excess_frozen_basin = d_excess_frozen_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.spe[i] + self.sequences.fluxes.spl[i]))
|
|
1061
|
+
d_excess_liquid_basin = d_excess_liquid_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.wce[i] + self.sequences.fluxes.wcl[i]))
|
|
1062
|
+
if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
|
|
1063
|
+
return
|
|
1064
|
+
for i in range(self.parameters.control.nmbzones):
|
|
1065
|
+
t = self.parameters.derived.indiceszonez[i]
|
|
1066
|
+
if self.parameters.control.zonetype[t] == ILAKE:
|
|
1067
|
+
continue
|
|
1068
|
+
d_excess_frozen_zone = d_excess_frozen_basin / self.parameters.derived.relzoneareas[t]
|
|
1069
|
+
d_excess_liquid_zone = d_excess_liquid_basin / self.parameters.derived.relzoneareas[t]
|
|
1070
|
+
d_excess_total_zone = d_excess_frozen_zone + d_excess_liquid_zone
|
|
1071
|
+
d_gain_max_cum = 0.0
|
|
1072
|
+
for c in range(self.parameters.control.sclass):
|
|
1073
|
+
d_gain_max_cum = d_gain_max_cum + (self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t])
|
|
1074
|
+
if d_gain_max_cum <= 0.0:
|
|
1075
|
+
continue
|
|
1076
|
+
d_fraction_gain_zone = min( d_gain_max_cum / self.parameters.control.sclass / d_excess_total_zone, 1.0 )
|
|
1077
|
+
d_excess_frozen_zone_actual = d_fraction_gain_zone * d_excess_frozen_zone
|
|
1078
|
+
d_excess_liquid_zone_actual = d_fraction_gain_zone * d_excess_liquid_zone
|
|
1079
|
+
for c in range(self.parameters.control.sclass):
|
|
1080
|
+
d_fraction_gain_class = ( self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t] ) / d_gain_max_cum
|
|
1081
|
+
d_delta_sp_zone = d_fraction_gain_class * d_excess_frozen_zone_actual
|
|
1082
|
+
d_delta_wc_zone = d_fraction_gain_class * d_excess_liquid_zone_actual
|
|
1083
|
+
self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_delta_sp_zone)
|
|
1084
|
+
self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_delta_wc_zone)
|
|
1085
|
+
self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_delta_sp_zone * self.parameters.control.sclass)
|
|
1086
|
+
self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_delta_wc_zone * self.parameters.control.sclass)
|
|
1087
|
+
d_excess_frozen_basin = d_excess_frozen_basin - (d_excess_frozen_zone_actual * self.parameters.derived.relzoneareas[t])
|
|
1088
|
+
d_excess_liquid_basin = d_excess_liquid_basin - (d_excess_liquid_zone_actual * self.parameters.derived.relzoneareas[t])
|
|
1089
|
+
if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
|
|
1090
|
+
return
|
|
1091
|
+
d_excess_frozen_land = d_excess_frozen_basin / self.parameters.derived.rellandarea
|
|
1092
|
+
d_excess_liquid_land = d_excess_liquid_basin / self.parameters.derived.rellandarea
|
|
1093
|
+
for t in range(self.parameters.control.nmbzones):
|
|
1094
|
+
if self.parameters.control.zonetype[t] != ILAKE:
|
|
1095
|
+
self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_excess_frozen_land)
|
|
1096
|
+
self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_excess_liquid_land)
|
|
1097
|
+
for c in range(self.parameters.control.sclass):
|
|
1098
|
+
self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_excess_frozen_land)
|
|
1099
|
+
self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_excess_liquid_land)
|
|
1100
|
+
return
|
|
1101
|
+
cpdef inline void calc_cfact_v1(self) noexcept nogil:
|
|
1102
|
+
cdef numpy.int64_t k
|
|
1103
|
+
cdef double d_factor
|
|
1104
|
+
d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
|
|
1105
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1106
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1107
|
+
self.sequences.factors.cfact[k] = max(self.parameters.control.cfmax[k] + d_factor * self.parameters.control.cfvar[k], 0.0)
|
|
1108
|
+
else:
|
|
1109
|
+
self.sequences.factors.cfact[k] = 0.0
|
|
1110
|
+
cpdef inline void calc_melt_sp_wc_v1(self) noexcept nogil:
|
|
1111
|
+
cdef numpy.int64_t c
|
|
1112
|
+
cdef double d_potmelt
|
|
1113
|
+
cdef numpy.int64_t k
|
|
1114
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1115
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1116
|
+
if self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]:
|
|
1117
|
+
d_potmelt = self.sequences.factors.cfact[k] * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
|
|
1118
|
+
for c in range(self.parameters.control.sclass):
|
|
1119
|
+
self.sequences.fluxes.melt[c, k] = min(d_potmelt, self.sequences.states.sp[c, k])
|
|
1120
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (self.sequences.fluxes.melt[c, k])
|
|
1121
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.sequences.fluxes.melt[c, k])
|
|
1122
|
+
else:
|
|
1123
|
+
for c in range(self.parameters.control.sclass):
|
|
1124
|
+
self.sequences.fluxes.melt[c, k] = 0.0
|
|
1125
|
+
else:
|
|
1126
|
+
for c in range(self.parameters.control.sclass):
|
|
1127
|
+
self.sequences.fluxes.melt[c, k] = 0.0
|
|
1128
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1129
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
1130
|
+
cpdef inline void calc_refr_sp_wc_v1(self) noexcept nogil:
|
|
1131
|
+
cdef numpy.int64_t c
|
|
1132
|
+
cdef double d_potrefr
|
|
1133
|
+
cdef numpy.int64_t k
|
|
1134
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1135
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1136
|
+
if self.sequences.factors.tc[k] < self.parameters.derived.ttm[k]:
|
|
1137
|
+
d_potrefr = self.parameters.control.cfr[k] * self.parameters.control.cfmax[k] * (self.parameters.derived.ttm[k] - self.sequences.factors.tc[k])
|
|
1138
|
+
for c in range(self.parameters.control.sclass):
|
|
1139
|
+
self.sequences.fluxes.refr[c, k] = min(d_potrefr, self.sequences.states.wc[c, k])
|
|
1140
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.sequences.fluxes.refr[c, k])
|
|
1141
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (self.sequences.fluxes.refr[c, k])
|
|
1142
|
+
else:
|
|
1143
|
+
for c in range(self.parameters.control.sclass):
|
|
1144
|
+
self.sequences.fluxes.refr[c, k] = 0.0
|
|
1145
|
+
else:
|
|
1146
|
+
for c in range(self.parameters.control.sclass):
|
|
1147
|
+
self.sequences.fluxes.refr[c, k] = 0.0
|
|
1148
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1149
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
1150
|
+
cpdef inline void calc_in_wc_v1(self) noexcept nogil:
|
|
1151
|
+
cdef double d_wc_old
|
|
1152
|
+
cdef numpy.int64_t c
|
|
1153
|
+
cdef numpy.int64_t k
|
|
1154
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1155
|
+
self.sequences.fluxes.in_[k] = 0.0
|
|
1156
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1157
|
+
for c in range(self.parameters.control.sclass):
|
|
1158
|
+
d_wc_old = self.sequences.states.wc[c, k]
|
|
1159
|
+
self.sequences.states.wc[c, k] = min(d_wc_old, self.parameters.control.whc[k] * self.sequences.states.sp[c, k])
|
|
1160
|
+
self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + ((d_wc_old - self.sequences.states.wc[c, k]) / self.parameters.control.sclass)
|
|
1161
|
+
else:
|
|
1162
|
+
self.sequences.fluxes.in_[k] = self.sequences.fluxes.tf[k]
|
|
1163
|
+
for c in range(self.parameters.control.sclass):
|
|
1164
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1165
|
+
cpdef inline void calc_swe_v1(self) noexcept nogil:
|
|
1166
|
+
cdef numpy.int64_t c
|
|
1167
|
+
cdef numpy.int64_t k
|
|
1168
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1169
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1170
|
+
for c in range(self.parameters.control.sclass):
|
|
1171
|
+
self.sequences.factors.swe[c, k] = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
|
|
1172
|
+
else:
|
|
1173
|
+
for c in range(self.parameters.control.sclass):
|
|
1174
|
+
self.sequences.factors.swe[c, k] = 0.0
|
|
1175
|
+
cpdef inline void calc_sr_v1(self) noexcept nogil:
|
|
1176
|
+
cdef numpy.int64_t k
|
|
1177
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1178
|
+
if self.parameters.control.zonetype[k] == SEALED:
|
|
1179
|
+
self.sequences.fluxes.sr[k] = self.sequences.fluxes.in_[k]
|
|
1180
|
+
else:
|
|
1181
|
+
self.sequences.fluxes.sr[k] = 0.0
|
|
1182
|
+
cpdef inline void calc_gact_v1(self) noexcept nogil:
|
|
1183
|
+
cdef numpy.int64_t k
|
|
1184
|
+
cdef double d_factor
|
|
1185
|
+
d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
|
|
1186
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1187
|
+
if self.parameters.control.zonetype[k] == GLACIER:
|
|
1188
|
+
self.sequences.factors.gact[k] = max(self.parameters.control.gmelt[k] + d_factor * self.parameters.control.gvar[k], 0.0)
|
|
1189
|
+
else:
|
|
1190
|
+
self.sequences.factors.gact[k] = 0.0
|
|
1191
|
+
cpdef inline void calc_glmelt_in_v1(self) noexcept nogil:
|
|
1192
|
+
cdef numpy.int64_t c
|
|
1193
|
+
cdef double d_glmeltpot
|
|
1194
|
+
cdef numpy.int64_t k
|
|
1195
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1196
|
+
self.sequences.fluxes.glmelt[k] = 0.0
|
|
1197
|
+
if (self.parameters.control.zonetype[k] == GLACIER) and (self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]):
|
|
1198
|
+
d_glmeltpot = self.sequences.factors.gact[k] / self.parameters.control.sclass * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
|
|
1199
|
+
for c in range(self.parameters.control.sclass):
|
|
1200
|
+
if self.sequences.states.sp[c, k] <= 0.0:
|
|
1201
|
+
self.sequences.fluxes.glmelt[k] = self.sequences.fluxes.glmelt[k] + (d_glmeltpot)
|
|
1202
|
+
self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + (d_glmeltpot)
|
|
1203
|
+
cpdef inline void calc_ei_ic_v1(self) noexcept nogil:
|
|
1204
|
+
if self.aetmodel_typeid == 1:
|
|
1205
|
+
self.calc_ei_ic_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
|
|
1206
|
+
cpdef inline void calc_r_sm_v1(self) noexcept nogil:
|
|
1207
|
+
cdef numpy.int64_t k
|
|
1208
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1209
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST):
|
|
1210
|
+
if self.parameters.control.fc[k] > 0.0:
|
|
1211
|
+
self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k] * (self.sequences.states.sm[k] / self.parameters.control.fc[k]) ** self.parameters.control.beta[k]
|
|
1212
|
+
self.sequences.fluxes.r[k] = max(self.sequences.fluxes.r[k], self.sequences.states.sm[k] + self.sequences.fluxes.in_[k] - self.parameters.control.fc[k])
|
|
1213
|
+
else:
|
|
1214
|
+
self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
|
|
1215
|
+
self.sequences.states.sm[k] = self.sequences.states.sm[k] + (self.sequences.fluxes.in_[k] - self.sequences.fluxes.r[k])
|
|
1216
|
+
else:
|
|
1217
|
+
self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
|
|
1218
|
+
self.sequences.states.sm[k] = 0.0
|
|
1219
|
+
cpdef inline void calc_ea_sm_v1(self) noexcept nogil:
|
|
1220
|
+
if self.aetmodel_typeid == 1:
|
|
1221
|
+
self.calc_ea_sm_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
|
|
1222
|
+
cpdef inline void calc_suz_v1(self) noexcept nogil:
|
|
1223
|
+
cdef numpy.int64_t k
|
|
1224
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1225
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1226
|
+
self.sequences.states.suz[k] = self.sequences.states.suz[k] + (self.sequences.fluxes.r[k])
|
|
1227
|
+
else:
|
|
1228
|
+
self.sequences.states.suz[k] = 0.0
|
|
1229
|
+
cpdef inline void calc_dp_suz_v1(self) noexcept nogil:
|
|
1230
|
+
cdef numpy.int64_t k
|
|
1231
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1232
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1233
|
+
self.sequences.fluxes.dp[k] = min(self.sequences.states.suz[k], self.parameters.control.percmax)
|
|
1234
|
+
self.sequences.states.suz[k] = self.sequences.states.suz[k] - (self.sequences.fluxes.dp[k])
|
|
1235
|
+
else:
|
|
1236
|
+
self.sequences.fluxes.dp[k] = 0.0
|
|
1237
|
+
self.sequences.states.suz[k] = 0.0
|
|
1238
|
+
cpdef inline void calc_rs_ri_suz_v1(self) noexcept nogil:
|
|
1239
|
+
cdef double d_f
|
|
1240
|
+
cdef numpy.int64_t k
|
|
1241
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1242
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1243
|
+
if self.sequences.states.suz[k] > self.parameters.control.sgr[k]:
|
|
1244
|
+
self.sequences.fluxes.rs[k] = (self.sequences.states.suz[k] - self.parameters.control.sgr[k]) * (1.0 - self.parameters.derived.w0[k])
|
|
1245
|
+
else:
|
|
1246
|
+
self.sequences.fluxes.rs[k] = 0.0
|
|
1247
|
+
self.sequences.fluxes.ri[k] = self.sequences.states.suz[k] * (1.0 - self.parameters.derived.w1[k])
|
|
1248
|
+
self.sequences.states.suz[k] = self.sequences.states.suz[k] - (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k])
|
|
1249
|
+
if self.sequences.states.suz[k] < 0.0:
|
|
1250
|
+
d_f = 1.0 - self.sequences.states.suz[k] / (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k])
|
|
1251
|
+
self.sequences.fluxes.rs[k] = self.sequences.fluxes.rs[k] * (d_f)
|
|
1252
|
+
self.sequences.fluxes.ri[k] = self.sequences.fluxes.ri[k] * (d_f)
|
|
1253
|
+
self.sequences.states.suz[k] = 0.0
|
|
1254
|
+
else:
|
|
1255
|
+
self.sequences.states.suz[k] = 0.0
|
|
1256
|
+
self.sequences.fluxes.rs[k] = 0.0
|
|
1257
|
+
self.sequences.fluxes.ri[k] = 0.0
|
|
1258
|
+
cpdef inline void calc_gr1_v1(self) noexcept nogil:
|
|
1259
|
+
cdef numpy.int64_t k
|
|
1260
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1261
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1262
|
+
self.sequences.fluxes.gr1[k] = min(self.sequences.fluxes.dp[k], (self.parameters.control.sg1max[k] - self.sequences.states.sg1[k]) / self.parameters.control.k2[k])
|
|
1263
|
+
self.sequences.fluxes.gr1[k] = self.sequences.fluxes.gr1[k] - (max(self.sequences.states.sg1[k] + self.sequences.fluxes.gr1[k] - self.parameters.control.sg1max[k], 0.0))
|
|
1264
|
+
else:
|
|
1265
|
+
self.sequences.states.sg1[k] = 0.0
|
|
1266
|
+
self.sequences.fluxes.gr1[k] = 0.0
|
|
1267
|
+
cpdef inline void calc_rg1_sg1_v1(self) noexcept nogil:
|
|
1268
|
+
cdef double d_sg1
|
|
1269
|
+
cdef numpy.int64_t k
|
|
1270
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1271
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1272
|
+
d_sg1 = self.sequences.states.sg1[k]
|
|
1273
|
+
self.sequences.states.sg1[k] = ( self.parameters.derived.w2[k] * d_sg1 + (1.0 - self.parameters.derived.w2[k]) * self.parameters.control.k2[k] * self.sequences.fluxes.gr1[k] )
|
|
1274
|
+
self.sequences.fluxes.rg1[k] = d_sg1 + self.sequences.fluxes.gr1[k] - self.sequences.states.sg1[k]
|
|
1275
|
+
else:
|
|
1276
|
+
self.sequences.states.sg1[k] = 0.0
|
|
1277
|
+
self.sequences.fluxes.rg1[k] = 0.0
|
|
1278
|
+
cpdef inline void calc_gr2_gr3_v1(self) noexcept nogil:
|
|
1279
|
+
cdef double d_total
|
|
1280
|
+
cdef double d_weight
|
|
1281
|
+
cdef numpy.int64_t k
|
|
1282
|
+
self.sequences.fluxes.gr2 = 0.0
|
|
1283
|
+
self.sequences.fluxes.gr3 = 0.0
|
|
1284
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1285
|
+
if self.parameters.control.zonetype[k] == SEALED:
|
|
1286
|
+
continue
|
|
1287
|
+
d_weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea
|
|
1288
|
+
if self.parameters.control.zonetype[k] == ILAKE:
|
|
1289
|
+
d_total = d_weight * self.sequences.fluxes.pc[k]
|
|
1290
|
+
else:
|
|
1291
|
+
d_total = d_weight * (self.sequences.fluxes.dp[k] - self.sequences.fluxes.gr1[k])
|
|
1292
|
+
self.sequences.fluxes.gr2 = self.sequences.fluxes.gr2 + (self.parameters.fixed.fsg * d_total)
|
|
1293
|
+
self.sequences.fluxes.gr3 = self.sequences.fluxes.gr3 + ((1.0 - self.parameters.fixed.fsg) * d_total)
|
|
1294
|
+
cpdef inline void calc_rg2_sg2_v1(self) noexcept nogil:
|
|
1295
|
+
cdef double d_add
|
|
1296
|
+
cdef double d_w3
|
|
1297
|
+
cdef double d_k3
|
|
1298
|
+
cdef double d_gr2
|
|
1299
|
+
cdef double d_sg2
|
|
1300
|
+
d_sg2 = self.sequences.states.sg2
|
|
1301
|
+
d_gr2 = self.sequences.fluxes.gr2
|
|
1302
|
+
d_k3 = self.parameters.control.k3
|
|
1303
|
+
d_w3 = self.parameters.derived.w3
|
|
1304
|
+
if d_sg2 < 0.0 < d_gr2:
|
|
1305
|
+
d_add = min(-self.sequences.states.sg2, d_gr2)
|
|
1306
|
+
d_k3 = d_k3 * (d_gr2 / d_add)
|
|
1307
|
+
d_w3 = exp(-1.0 / d_k3)
|
|
1308
|
+
d_sg2 = d_sg2 + (d_add)
|
|
1309
|
+
d_gr2 = d_gr2 - (d_add)
|
|
1310
|
+
if d_sg2 >= 0.0:
|
|
1311
|
+
self.sequences.states.sg2 = d_w3 * d_sg2 + (1.0 - d_w3) * d_k3 * d_gr2
|
|
1312
|
+
self.sequences.fluxes.rg2 = d_sg2 + d_gr2 - self.sequences.states.sg2
|
|
1313
|
+
else:
|
|
1314
|
+
self.sequences.states.sg2 = d_sg2
|
|
1315
|
+
self.sequences.fluxes.rg2 = 0.0
|
|
1316
|
+
cpdef inline void calc_rg3_sg3_v1(self) noexcept nogil:
|
|
1317
|
+
cdef double d_add
|
|
1318
|
+
cdef double d_w4
|
|
1319
|
+
cdef double d_k4
|
|
1320
|
+
cdef double d_gr3
|
|
1321
|
+
cdef double d_sg3
|
|
1322
|
+
d_sg3 = self.sequences.states.sg3
|
|
1323
|
+
d_gr3 = self.sequences.fluxes.gr3
|
|
1324
|
+
d_k4 = self.parameters.derived.k4
|
|
1325
|
+
d_w4 = self.parameters.derived.w4
|
|
1326
|
+
if d_sg3 < 0.0 < d_gr3:
|
|
1327
|
+
d_add = min(-self.sequences.states.sg3, d_gr3)
|
|
1328
|
+
d_k4 = d_k4 * (d_gr3 / d_add)
|
|
1329
|
+
d_w4 = exp(-1.0 / d_k4)
|
|
1330
|
+
d_sg3 = d_sg3 + (d_add)
|
|
1331
|
+
d_gr3 = d_gr3 - (d_add)
|
|
1332
|
+
if d_sg3 >= 0.0:
|
|
1333
|
+
self.sequences.states.sg3 = d_w4 * d_sg3 + (1.0 - d_w4) * d_k4 * d_gr3
|
|
1334
|
+
self.sequences.fluxes.rg3 = d_sg3 + d_gr3 - self.sequences.states.sg3
|
|
1335
|
+
else:
|
|
1336
|
+
self.sequences.states.sg3 = d_sg3
|
|
1337
|
+
self.sequences.fluxes.rg3 = 0.0
|
|
1338
|
+
cpdef inline void calc_el_sg2_sg3_v1(self) noexcept nogil:
|
|
1339
|
+
if self.aetmodel_typeid == 1:
|
|
1340
|
+
self.calc_el_sg2_sg3_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
|
|
1341
|
+
cpdef inline void calc_inrc_v2(self) noexcept nogil:
|
|
1342
|
+
cdef numpy.int64_t k
|
|
1343
|
+
self.sequences.fluxes.inrc = self.parameters.derived.rellowerzonearea * (self.sequences.fluxes.rg2 + self.sequences.fluxes.rg3)
|
|
1344
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1345
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1346
|
+
self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (self.parameters.derived.relzoneareas[k] * (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k] + self.sequences.fluxes.rg1[k]))
|
|
1347
|
+
elif self.parameters.control.zonetype[k] == SEALED:
|
|
1348
|
+
self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (self.parameters.derived.relzoneareas[k] * self.sequences.fluxes.r[k])
|
|
1349
|
+
cpdef inline void calc_outrc_v1(self) noexcept nogil:
|
|
1350
|
+
if self.rconcmodel is None:
|
|
1351
|
+
self.sequences.fluxes.outrc = self.sequences.fluxes.inrc
|
|
1352
|
+
elif self.rconcmodel_typeid == 1:
|
|
1353
|
+
self.calc_outrc_rconcmodel_v1( (<masterinterface.MasterInterface>self.rconcmodel) )
|
|
1354
|
+
cpdef inline void calc_rt_v1(self) noexcept nogil:
|
|
1355
|
+
self.sequences.fluxes.rt = self.sequences.fluxes.outrc
|
|
1356
|
+
cpdef inline void calc_qt_v1(self) noexcept nogil:
|
|
1357
|
+
self.sequences.fluxes.qt = self.parameters.derived.qfactor * self.sequences.fluxes.rt
|
|
1358
|
+
cpdef double get_temperature_v1(self, numpy.int64_t s) noexcept nogil:
|
|
1359
|
+
return self.sequences.factors.tc[s]
|
|
1360
|
+
cpdef double get_meantemperature_v1(self) noexcept nogil:
|
|
1361
|
+
return self.sequences.inputs.t
|
|
1362
|
+
cpdef double get_precipitation_v1(self, numpy.int64_t s) noexcept nogil:
|
|
1363
|
+
return self.sequences.fluxes.pc[s]
|
|
1364
|
+
cpdef double get_interceptedwater_v1(self, numpy.int64_t k) noexcept nogil:
|
|
1365
|
+
return self.sequences.states.ic[k]
|
|
1366
|
+
cpdef double get_soilwater_v1(self, numpy.int64_t k) noexcept nogil:
|
|
1367
|
+
return self.sequences.states.sm[k]
|
|
1368
|
+
cpdef double get_snowcover_v1(self, numpy.int64_t k) noexcept nogil:
|
|
1369
|
+
cdef numpy.int64_t c
|
|
1370
|
+
cdef double snowcovered
|
|
1371
|
+
snowcovered = 0.0
|
|
1372
|
+
for c in range(self.parameters.control.sclass):
|
|
1373
|
+
snowcovered = snowcovered + (self.sequences.states.sp[c, k] > 0.0)
|
|
1374
|
+
return snowcovered / self.parameters.control.sclass
|
|
1375
|
+
cpdef inline void calc_ei_ic_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1376
|
+
cdef numpy.int64_t k
|
|
1377
|
+
submodel.determine_interceptionevaporation()
|
|
1378
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1379
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
|
|
1380
|
+
self.sequences.fluxes.ei[k] = min(submodel.get_interceptionevaporation(k), self.sequences.states.ic[k])
|
|
1381
|
+
self.sequences.states.ic[k] = self.sequences.states.ic[k] - (self.sequences.fluxes.ei[k])
|
|
1382
|
+
else:
|
|
1383
|
+
self.sequences.fluxes.ei[k] = 0.0
|
|
1384
|
+
self.sequences.states.ic[k] = 0.0
|
|
1385
|
+
cpdef inline void calc_ea_sm_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1386
|
+
cdef numpy.int64_t k
|
|
1387
|
+
submodel.determine_soilevapotranspiration()
|
|
1388
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1389
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST):
|
|
1390
|
+
self.sequences.fluxes.ea[k] = min(submodel.get_soilevapotranspiration(k), self.sequences.states.sm[k])
|
|
1391
|
+
self.sequences.states.sm[k] = self.sequences.states.sm[k] - (self.sequences.fluxes.ea[k])
|
|
1392
|
+
if self.sequences.states.sm[k] > self.parameters.control.fc[k]:
|
|
1393
|
+
self.sequences.fluxes.r[k] = self.sequences.fluxes.r[k] + (self.sequences.states.sm[k] - self.parameters.control.fc[k])
|
|
1394
|
+
self.sequences.states.sm[k] = self.parameters.control.fc[k]
|
|
1395
|
+
else:
|
|
1396
|
+
self.sequences.fluxes.ea[k] = 0.0
|
|
1397
|
+
self.sequences.states.sm[k] = 0.0
|
|
1398
|
+
cpdef inline void calc_el_sg2_sg3_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1399
|
+
cdef double weight
|
|
1400
|
+
cdef numpy.int64_t k
|
|
1401
|
+
submodel.determine_waterevaporation()
|
|
1402
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1403
|
+
if self.parameters.control.zonetype[k] == ILAKE:
|
|
1404
|
+
self.sequences.fluxes.el[k] = submodel.get_waterevaporation(k)
|
|
1405
|
+
weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea
|
|
1406
|
+
self.sequences.states.sg2 = self.sequences.states.sg2 - (self.parameters.fixed.fsg * weight * self.sequences.fluxes.el[k])
|
|
1407
|
+
self.sequences.states.sg3 = self.sequences.states.sg3 - ((1.0 - self.parameters.fixed.fsg) * weight * self.sequences.fluxes.el[k])
|
|
1408
|
+
else:
|
|
1409
|
+
self.sequences.fluxes.el[k] = 0.0
|
|
1410
|
+
cpdef inline void calc_outrc_rconcmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1411
|
+
submodel.set_inflow(self.sequences.fluxes.inrc)
|
|
1412
|
+
submodel.determine_outflow()
|
|
1413
|
+
self.sequences.fluxes.outrc = submodel.get_outflow()
|
|
1414
|
+
cpdef inline void pass_q_v1(self) noexcept nogil:
|
|
1415
|
+
self.sequences.outlets.q[0] = self.sequences.outlets.q[0] + (self.sequences.fluxes.qt)
|
|
1416
|
+
cpdef inline void calc_tc(self) noexcept nogil:
|
|
1417
|
+
cdef numpy.int64_t k
|
|
1418
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1419
|
+
self.sequences.factors.tc[k] = self.sequences.inputs.t + self.parameters.control.tcorr[k] - self.parameters.control.tcalt[k] * (self.parameters.control.zonez[k] - self.parameters.derived.z)
|
|
1420
|
+
cpdef inline void calc_fracrain(self) noexcept nogil:
|
|
1421
|
+
cdef double d_dt
|
|
1422
|
+
cdef numpy.int64_t k
|
|
1423
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1424
|
+
d_dt = self.parameters.control.ttint[k] / 2.0
|
|
1425
|
+
if self.sequences.factors.tc[k] >= (self.parameters.control.tt[k] + d_dt):
|
|
1426
|
+
self.sequences.factors.fracrain[k] = 1.0
|
|
1427
|
+
elif self.sequences.factors.tc[k] <= (self.parameters.control.tt[k] - d_dt):
|
|
1428
|
+
self.sequences.factors.fracrain[k] = 0.0
|
|
1429
|
+
else:
|
|
1430
|
+
self.sequences.factors.fracrain[k] = (self.sequences.factors.tc[k] - (self.parameters.control.tt[k] - d_dt)) / self.parameters.control.ttint[k]
|
|
1431
|
+
cpdef inline void calc_rfc_sfc(self) noexcept nogil:
|
|
1432
|
+
cdef numpy.int64_t k
|
|
1433
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1434
|
+
self.sequences.factors.rfc[k] = self.sequences.factors.fracrain[k] * self.parameters.control.rfcf[k]
|
|
1435
|
+
self.sequences.factors.sfc[k] = (1.0 - self.sequences.factors.fracrain[k]) * self.parameters.control.sfcf[k]
|
|
1436
|
+
cpdef inline void calc_pc(self) noexcept nogil:
|
|
1437
|
+
cdef numpy.int64_t k
|
|
1438
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1439
|
+
self.sequences.fluxes.pc[k] = self.sequences.inputs.p * (1.0 + self.parameters.control.pcalt[k] * (self.parameters.control.zonez[k] - self.parameters.derived.z))
|
|
1440
|
+
if self.sequences.fluxes.pc[k] <= 0.0:
|
|
1441
|
+
self.sequences.fluxes.pc[k] = 0.0
|
|
1442
|
+
else:
|
|
1443
|
+
self.sequences.fluxes.pc[k] = self.sequences.fluxes.pc[k] * (self.parameters.control.pcorr[k] * (self.sequences.factors.rfc[k] + self.sequences.factors.sfc[k]))
|
|
1444
|
+
cpdef inline void calc_tf_ic(self) noexcept nogil:
|
|
1445
|
+
cdef numpy.int64_t k
|
|
1446
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1447
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
|
|
1448
|
+
self.sequences.fluxes.tf[k] = max(self.sequences.fluxes.pc[k] - (self.parameters.control.icmax[k] - self.sequences.states.ic[k]), 0.0)
|
|
1449
|
+
self.sequences.states.ic[k] = self.sequences.states.ic[k] + (self.sequences.fluxes.pc[k] - self.sequences.fluxes.tf[k])
|
|
1450
|
+
else:
|
|
1451
|
+
self.sequences.fluxes.tf[k] = self.sequences.fluxes.pc[k]
|
|
1452
|
+
self.sequences.states.ic[k] = 0.0
|
|
1453
|
+
cpdef inline void calc_sp_wc(self) noexcept nogil:
|
|
1454
|
+
cdef numpy.int64_t c
|
|
1455
|
+
cdef double d_snow
|
|
1456
|
+
cdef double d_rain
|
|
1457
|
+
cdef double d_denom
|
|
1458
|
+
cdef numpy.int64_t k
|
|
1459
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1460
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1461
|
+
d_denom = self.sequences.factors.rfc[k] + self.sequences.factors.sfc[k]
|
|
1462
|
+
if d_denom > 0.0:
|
|
1463
|
+
d_rain = self.sequences.fluxes.tf[k] * self.sequences.factors.rfc[k] / d_denom
|
|
1464
|
+
d_snow = self.sequences.fluxes.tf[k] * self.sequences.factors.sfc[k] / d_denom
|
|
1465
|
+
for c in range(self.parameters.control.sclass):
|
|
1466
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.parameters.control.sfdist[c] * d_rain)
|
|
1467
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.parameters.control.sfdist[c] * d_snow)
|
|
1468
|
+
else:
|
|
1469
|
+
for c in range(self.parameters.control.sclass):
|
|
1470
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1471
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
1472
|
+
cpdef inline void calc_spl_wcl_sp_wc(self) noexcept nogil:
|
|
1473
|
+
cdef double d_excess_wc
|
|
1474
|
+
cdef double d_excess_sp
|
|
1475
|
+
cdef double d_excess
|
|
1476
|
+
cdef double d_snow
|
|
1477
|
+
cdef numpy.int64_t c
|
|
1478
|
+
cdef numpy.int64_t k
|
|
1479
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1480
|
+
self.sequences.fluxes.spl[k] = 0.0
|
|
1481
|
+
self.sequences.fluxes.wcl[k] = 0.0
|
|
1482
|
+
if self.parameters.control.zonetype[k] == ILAKE:
|
|
1483
|
+
for c in range(self.parameters.control.sclass):
|
|
1484
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
1485
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1486
|
+
elif not isinf(self.parameters.control.smax[k]):
|
|
1487
|
+
for c in range(self.parameters.control.sclass):
|
|
1488
|
+
d_snow = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
|
|
1489
|
+
d_excess = d_snow - self.parameters.control.smax[k]
|
|
1490
|
+
if d_excess > 0.0:
|
|
1491
|
+
d_excess_sp = d_excess * self.sequences.states.sp[c, k] / d_snow
|
|
1492
|
+
d_excess_wc = d_excess * self.sequences.states.wc[c, k] / d_snow
|
|
1493
|
+
self.sequences.fluxes.spl[k] = self.sequences.fluxes.spl[k] + (d_excess_sp / self.parameters.control.sclass)
|
|
1494
|
+
self.sequences.fluxes.wcl[k] = self.sequences.fluxes.wcl[k] + (d_excess_wc / self.parameters.control.sclass)
|
|
1495
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (d_excess_sp)
|
|
1496
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (d_excess_wc)
|
|
1497
|
+
cpdef inline void calc_spg_wcg_sp_wc(self) noexcept nogil:
|
|
1498
|
+
cdef double d_excess_liquid_land
|
|
1499
|
+
cdef double d_excess_frozen_land
|
|
1500
|
+
cdef double d_delta_wc_zone
|
|
1501
|
+
cdef double d_delta_sp_zone
|
|
1502
|
+
cdef double d_fraction_gain_class
|
|
1503
|
+
cdef double d_excess_liquid_zone_actual
|
|
1504
|
+
cdef double d_excess_frozen_zone_actual
|
|
1505
|
+
cdef double d_fraction_gain_zone
|
|
1506
|
+
cdef double d_gain_max_cum
|
|
1507
|
+
cdef double d_excess_total_zone
|
|
1508
|
+
cdef double d_excess_liquid_zone
|
|
1509
|
+
cdef double d_excess_frozen_zone
|
|
1510
|
+
cdef double d_excess_liquid_basin
|
|
1511
|
+
cdef double d_excess_frozen_basin
|
|
1512
|
+
cdef double d_factor_excess
|
|
1513
|
+
cdef double d_factor_gain
|
|
1514
|
+
cdef double d_fraction_gain
|
|
1515
|
+
cdef double d_gain_max
|
|
1516
|
+
cdef double d_gain_pot
|
|
1517
|
+
cdef double d_gain_total
|
|
1518
|
+
cdef double d_gain_liquid
|
|
1519
|
+
cdef double d_gain_frozen
|
|
1520
|
+
cdef double d_f
|
|
1521
|
+
cdef numpy.int64_t t
|
|
1522
|
+
cdef numpy.int64_t f
|
|
1523
|
+
cdef numpy.int64_t c
|
|
1524
|
+
cdef numpy.int64_t i
|
|
1525
|
+
for i in range(self.parameters.control.nmbzones):
|
|
1526
|
+
self.sequences.fluxes.spg[i] = 0.0
|
|
1527
|
+
self.sequences.fluxes.wcg[i] = 0.0
|
|
1528
|
+
self.sequences.aides.spe[i] = 0.0
|
|
1529
|
+
self.sequences.aides.wce[i] = 0.0
|
|
1530
|
+
if self.parameters.control.zonetype[i] == ILAKE:
|
|
1531
|
+
for c in range(self.parameters.control.sclass):
|
|
1532
|
+
self.sequences.states.sp[c, i] = 0.0
|
|
1533
|
+
self.sequences.states.wc[c, i] = 0.0
|
|
1534
|
+
for i in range(self.parameters.derived.srednumber):
|
|
1535
|
+
f, t = self.parameters.derived.sredorder[i, 0], self.parameters.derived.sredorder[i, 1]
|
|
1536
|
+
d_f = self.parameters.derived.zonearearatios[f, t] * self.parameters.control.sred[f, t]
|
|
1537
|
+
d_gain_frozen = d_f * (self.sequences.fluxes.spl[f] + self.sequences.aides.spe[f])
|
|
1538
|
+
d_gain_liquid = d_f * (self.sequences.fluxes.wcl[f] + self.sequences.aides.wce[f])
|
|
1539
|
+
d_gain_total = d_gain_frozen + d_gain_liquid
|
|
1540
|
+
for c in range(self.parameters.control.sclass):
|
|
1541
|
+
d_gain_pot = self.parameters.control.sfdist[c] * d_gain_total
|
|
1542
|
+
if d_gain_pot > 0.0:
|
|
1543
|
+
d_gain_max = self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t]
|
|
1544
|
+
d_fraction_gain = min(d_gain_max / d_gain_pot, 1.0)
|
|
1545
|
+
d_factor_gain = d_fraction_gain * self.parameters.control.sfdist[c]
|
|
1546
|
+
self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_factor_gain * d_gain_frozen / self.parameters.control.sclass)
|
|
1547
|
+
self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_factor_gain * d_gain_liquid / self.parameters.control.sclass)
|
|
1548
|
+
self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_factor_gain * d_gain_frozen)
|
|
1549
|
+
self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_factor_gain * d_gain_liquid)
|
|
1550
|
+
d_factor_excess = (1.0 - d_fraction_gain) * self.parameters.control.sfdist[c]
|
|
1551
|
+
self.sequences.aides.spe[t] = self.sequences.aides.spe[t] + (d_factor_excess * d_gain_frozen / self.parameters.control.sclass)
|
|
1552
|
+
self.sequences.aides.wce[t] = self.sequences.aides.wce[t] + (d_factor_excess * d_gain_liquid / self.parameters.control.sclass)
|
|
1553
|
+
d_excess_frozen_basin, d_excess_liquid_basin = 0.0, 0.0
|
|
1554
|
+
for i in range(self.parameters.control.nmbzones):
|
|
1555
|
+
if self.parameters.derived.sredend[i]:
|
|
1556
|
+
d_excess_frozen_basin = d_excess_frozen_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.spe[i] + self.sequences.fluxes.spl[i]))
|
|
1557
|
+
d_excess_liquid_basin = d_excess_liquid_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.wce[i] + self.sequences.fluxes.wcl[i]))
|
|
1558
|
+
if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
|
|
1559
|
+
return
|
|
1560
|
+
for i in range(self.parameters.control.nmbzones):
|
|
1561
|
+
t = self.parameters.derived.indiceszonez[i]
|
|
1562
|
+
if self.parameters.control.zonetype[t] == ILAKE:
|
|
1563
|
+
continue
|
|
1564
|
+
d_excess_frozen_zone = d_excess_frozen_basin / self.parameters.derived.relzoneareas[t]
|
|
1565
|
+
d_excess_liquid_zone = d_excess_liquid_basin / self.parameters.derived.relzoneareas[t]
|
|
1566
|
+
d_excess_total_zone = d_excess_frozen_zone + d_excess_liquid_zone
|
|
1567
|
+
d_gain_max_cum = 0.0
|
|
1568
|
+
for c in range(self.parameters.control.sclass):
|
|
1569
|
+
d_gain_max_cum = d_gain_max_cum + (self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t])
|
|
1570
|
+
if d_gain_max_cum <= 0.0:
|
|
1571
|
+
continue
|
|
1572
|
+
d_fraction_gain_zone = min( d_gain_max_cum / self.parameters.control.sclass / d_excess_total_zone, 1.0 )
|
|
1573
|
+
d_excess_frozen_zone_actual = d_fraction_gain_zone * d_excess_frozen_zone
|
|
1574
|
+
d_excess_liquid_zone_actual = d_fraction_gain_zone * d_excess_liquid_zone
|
|
1575
|
+
for c in range(self.parameters.control.sclass):
|
|
1576
|
+
d_fraction_gain_class = ( self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t] ) / d_gain_max_cum
|
|
1577
|
+
d_delta_sp_zone = d_fraction_gain_class * d_excess_frozen_zone_actual
|
|
1578
|
+
d_delta_wc_zone = d_fraction_gain_class * d_excess_liquid_zone_actual
|
|
1579
|
+
self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_delta_sp_zone)
|
|
1580
|
+
self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_delta_wc_zone)
|
|
1581
|
+
self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_delta_sp_zone * self.parameters.control.sclass)
|
|
1582
|
+
self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_delta_wc_zone * self.parameters.control.sclass)
|
|
1583
|
+
d_excess_frozen_basin = d_excess_frozen_basin - (d_excess_frozen_zone_actual * self.parameters.derived.relzoneareas[t])
|
|
1584
|
+
d_excess_liquid_basin = d_excess_liquid_basin - (d_excess_liquid_zone_actual * self.parameters.derived.relzoneareas[t])
|
|
1585
|
+
if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
|
|
1586
|
+
return
|
|
1587
|
+
d_excess_frozen_land = d_excess_frozen_basin / self.parameters.derived.rellandarea
|
|
1588
|
+
d_excess_liquid_land = d_excess_liquid_basin / self.parameters.derived.rellandarea
|
|
1589
|
+
for t in range(self.parameters.control.nmbzones):
|
|
1590
|
+
if self.parameters.control.zonetype[t] != ILAKE:
|
|
1591
|
+
self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_excess_frozen_land)
|
|
1592
|
+
self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_excess_liquid_land)
|
|
1593
|
+
for c in range(self.parameters.control.sclass):
|
|
1594
|
+
self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_excess_frozen_land)
|
|
1595
|
+
self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_excess_liquid_land)
|
|
1596
|
+
return
|
|
1597
|
+
cpdef inline void calc_cfact(self) noexcept nogil:
|
|
1598
|
+
cdef numpy.int64_t k
|
|
1599
|
+
cdef double d_factor
|
|
1600
|
+
d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
|
|
1601
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1602
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1603
|
+
self.sequences.factors.cfact[k] = max(self.parameters.control.cfmax[k] + d_factor * self.parameters.control.cfvar[k], 0.0)
|
|
1604
|
+
else:
|
|
1605
|
+
self.sequences.factors.cfact[k] = 0.0
|
|
1606
|
+
cpdef inline void calc_melt_sp_wc(self) noexcept nogil:
|
|
1607
|
+
cdef numpy.int64_t c
|
|
1608
|
+
cdef double d_potmelt
|
|
1609
|
+
cdef numpy.int64_t k
|
|
1610
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1611
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1612
|
+
if self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]:
|
|
1613
|
+
d_potmelt = self.sequences.factors.cfact[k] * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
|
|
1614
|
+
for c in range(self.parameters.control.sclass):
|
|
1615
|
+
self.sequences.fluxes.melt[c, k] = min(d_potmelt, self.sequences.states.sp[c, k])
|
|
1616
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (self.sequences.fluxes.melt[c, k])
|
|
1617
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.sequences.fluxes.melt[c, k])
|
|
1618
|
+
else:
|
|
1619
|
+
for c in range(self.parameters.control.sclass):
|
|
1620
|
+
self.sequences.fluxes.melt[c, k] = 0.0
|
|
1621
|
+
else:
|
|
1622
|
+
for c in range(self.parameters.control.sclass):
|
|
1623
|
+
self.sequences.fluxes.melt[c, k] = 0.0
|
|
1624
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1625
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
1626
|
+
cpdef inline void calc_refr_sp_wc(self) noexcept nogil:
|
|
1627
|
+
cdef numpy.int64_t c
|
|
1628
|
+
cdef double d_potrefr
|
|
1629
|
+
cdef numpy.int64_t k
|
|
1630
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1631
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1632
|
+
if self.sequences.factors.tc[k] < self.parameters.derived.ttm[k]:
|
|
1633
|
+
d_potrefr = self.parameters.control.cfr[k] * self.parameters.control.cfmax[k] * (self.parameters.derived.ttm[k] - self.sequences.factors.tc[k])
|
|
1634
|
+
for c in range(self.parameters.control.sclass):
|
|
1635
|
+
self.sequences.fluxes.refr[c, k] = min(d_potrefr, self.sequences.states.wc[c, k])
|
|
1636
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.sequences.fluxes.refr[c, k])
|
|
1637
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (self.sequences.fluxes.refr[c, k])
|
|
1638
|
+
else:
|
|
1639
|
+
for c in range(self.parameters.control.sclass):
|
|
1640
|
+
self.sequences.fluxes.refr[c, k] = 0.0
|
|
1641
|
+
else:
|
|
1642
|
+
for c in range(self.parameters.control.sclass):
|
|
1643
|
+
self.sequences.fluxes.refr[c, k] = 0.0
|
|
1644
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1645
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
1646
|
+
cpdef inline void calc_in_wc(self) noexcept nogil:
|
|
1647
|
+
cdef double d_wc_old
|
|
1648
|
+
cdef numpy.int64_t c
|
|
1649
|
+
cdef numpy.int64_t k
|
|
1650
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1651
|
+
self.sequences.fluxes.in_[k] = 0.0
|
|
1652
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1653
|
+
for c in range(self.parameters.control.sclass):
|
|
1654
|
+
d_wc_old = self.sequences.states.wc[c, k]
|
|
1655
|
+
self.sequences.states.wc[c, k] = min(d_wc_old, self.parameters.control.whc[k] * self.sequences.states.sp[c, k])
|
|
1656
|
+
self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + ((d_wc_old - self.sequences.states.wc[c, k]) / self.parameters.control.sclass)
|
|
1657
|
+
else:
|
|
1658
|
+
self.sequences.fluxes.in_[k] = self.sequences.fluxes.tf[k]
|
|
1659
|
+
for c in range(self.parameters.control.sclass):
|
|
1660
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1661
|
+
cpdef inline void calc_swe(self) noexcept nogil:
|
|
1662
|
+
cdef numpy.int64_t c
|
|
1663
|
+
cdef numpy.int64_t k
|
|
1664
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1665
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1666
|
+
for c in range(self.parameters.control.sclass):
|
|
1667
|
+
self.sequences.factors.swe[c, k] = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
|
|
1668
|
+
else:
|
|
1669
|
+
for c in range(self.parameters.control.sclass):
|
|
1670
|
+
self.sequences.factors.swe[c, k] = 0.0
|
|
1671
|
+
cpdef inline void calc_sr(self) noexcept nogil:
|
|
1672
|
+
cdef numpy.int64_t k
|
|
1673
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1674
|
+
if self.parameters.control.zonetype[k] == SEALED:
|
|
1675
|
+
self.sequences.fluxes.sr[k] = self.sequences.fluxes.in_[k]
|
|
1676
|
+
else:
|
|
1677
|
+
self.sequences.fluxes.sr[k] = 0.0
|
|
1678
|
+
cpdef inline void calc_gact(self) noexcept nogil:
|
|
1679
|
+
cdef numpy.int64_t k
|
|
1680
|
+
cdef double d_factor
|
|
1681
|
+
d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
|
|
1682
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1683
|
+
if self.parameters.control.zonetype[k] == GLACIER:
|
|
1684
|
+
self.sequences.factors.gact[k] = max(self.parameters.control.gmelt[k] + d_factor * self.parameters.control.gvar[k], 0.0)
|
|
1685
|
+
else:
|
|
1686
|
+
self.sequences.factors.gact[k] = 0.0
|
|
1687
|
+
cpdef inline void calc_glmelt_in(self) noexcept nogil:
|
|
1688
|
+
cdef numpy.int64_t c
|
|
1689
|
+
cdef double d_glmeltpot
|
|
1690
|
+
cdef numpy.int64_t k
|
|
1691
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1692
|
+
self.sequences.fluxes.glmelt[k] = 0.0
|
|
1693
|
+
if (self.parameters.control.zonetype[k] == GLACIER) and (self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]):
|
|
1694
|
+
d_glmeltpot = self.sequences.factors.gact[k] / self.parameters.control.sclass * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
|
|
1695
|
+
for c in range(self.parameters.control.sclass):
|
|
1696
|
+
if self.sequences.states.sp[c, k] <= 0.0:
|
|
1697
|
+
self.sequences.fluxes.glmelt[k] = self.sequences.fluxes.glmelt[k] + (d_glmeltpot)
|
|
1698
|
+
self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + (d_glmeltpot)
|
|
1699
|
+
cpdef inline void calc_ei_ic(self) noexcept nogil:
|
|
1700
|
+
if self.aetmodel_typeid == 1:
|
|
1701
|
+
self.calc_ei_ic_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
|
|
1702
|
+
cpdef inline void calc_r_sm(self) noexcept nogil:
|
|
1703
|
+
cdef numpy.int64_t k
|
|
1704
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1705
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST):
|
|
1706
|
+
if self.parameters.control.fc[k] > 0.0:
|
|
1707
|
+
self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k] * (self.sequences.states.sm[k] / self.parameters.control.fc[k]) ** self.parameters.control.beta[k]
|
|
1708
|
+
self.sequences.fluxes.r[k] = max(self.sequences.fluxes.r[k], self.sequences.states.sm[k] + self.sequences.fluxes.in_[k] - self.parameters.control.fc[k])
|
|
1709
|
+
else:
|
|
1710
|
+
self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
|
|
1711
|
+
self.sequences.states.sm[k] = self.sequences.states.sm[k] + (self.sequences.fluxes.in_[k] - self.sequences.fluxes.r[k])
|
|
1712
|
+
else:
|
|
1713
|
+
self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
|
|
1714
|
+
self.sequences.states.sm[k] = 0.0
|
|
1715
|
+
cpdef inline void calc_ea_sm(self) noexcept nogil:
|
|
1716
|
+
if self.aetmodel_typeid == 1:
|
|
1717
|
+
self.calc_ea_sm_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
|
|
1718
|
+
cpdef inline void calc_suz(self) noexcept nogil:
|
|
1719
|
+
cdef numpy.int64_t k
|
|
1720
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1721
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1722
|
+
self.sequences.states.suz[k] = self.sequences.states.suz[k] + (self.sequences.fluxes.r[k])
|
|
1723
|
+
else:
|
|
1724
|
+
self.sequences.states.suz[k] = 0.0
|
|
1725
|
+
cpdef inline void calc_dp_suz(self) noexcept nogil:
|
|
1726
|
+
cdef numpy.int64_t k
|
|
1727
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1728
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1729
|
+
self.sequences.fluxes.dp[k] = min(self.sequences.states.suz[k], self.parameters.control.percmax)
|
|
1730
|
+
self.sequences.states.suz[k] = self.sequences.states.suz[k] - (self.sequences.fluxes.dp[k])
|
|
1731
|
+
else:
|
|
1732
|
+
self.sequences.fluxes.dp[k] = 0.0
|
|
1733
|
+
self.sequences.states.suz[k] = 0.0
|
|
1734
|
+
cpdef inline void calc_rs_ri_suz(self) noexcept nogil:
|
|
1735
|
+
cdef double d_f
|
|
1736
|
+
cdef numpy.int64_t k
|
|
1737
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1738
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1739
|
+
if self.sequences.states.suz[k] > self.parameters.control.sgr[k]:
|
|
1740
|
+
self.sequences.fluxes.rs[k] = (self.sequences.states.suz[k] - self.parameters.control.sgr[k]) * (1.0 - self.parameters.derived.w0[k])
|
|
1741
|
+
else:
|
|
1742
|
+
self.sequences.fluxes.rs[k] = 0.0
|
|
1743
|
+
self.sequences.fluxes.ri[k] = self.sequences.states.suz[k] * (1.0 - self.parameters.derived.w1[k])
|
|
1744
|
+
self.sequences.states.suz[k] = self.sequences.states.suz[k] - (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k])
|
|
1745
|
+
if self.sequences.states.suz[k] < 0.0:
|
|
1746
|
+
d_f = 1.0 - self.sequences.states.suz[k] / (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k])
|
|
1747
|
+
self.sequences.fluxes.rs[k] = self.sequences.fluxes.rs[k] * (d_f)
|
|
1748
|
+
self.sequences.fluxes.ri[k] = self.sequences.fluxes.ri[k] * (d_f)
|
|
1749
|
+
self.sequences.states.suz[k] = 0.0
|
|
1750
|
+
else:
|
|
1751
|
+
self.sequences.states.suz[k] = 0.0
|
|
1752
|
+
self.sequences.fluxes.rs[k] = 0.0
|
|
1753
|
+
self.sequences.fluxes.ri[k] = 0.0
|
|
1754
|
+
cpdef inline void calc_gr1(self) noexcept nogil:
|
|
1755
|
+
cdef numpy.int64_t k
|
|
1756
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1757
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1758
|
+
self.sequences.fluxes.gr1[k] = min(self.sequences.fluxes.dp[k], (self.parameters.control.sg1max[k] - self.sequences.states.sg1[k]) / self.parameters.control.k2[k])
|
|
1759
|
+
self.sequences.fluxes.gr1[k] = self.sequences.fluxes.gr1[k] - (max(self.sequences.states.sg1[k] + self.sequences.fluxes.gr1[k] - self.parameters.control.sg1max[k], 0.0))
|
|
1760
|
+
else:
|
|
1761
|
+
self.sequences.states.sg1[k] = 0.0
|
|
1762
|
+
self.sequences.fluxes.gr1[k] = 0.0
|
|
1763
|
+
cpdef inline void calc_rg1_sg1(self) noexcept nogil:
|
|
1764
|
+
cdef double d_sg1
|
|
1765
|
+
cdef numpy.int64_t k
|
|
1766
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1767
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1768
|
+
d_sg1 = self.sequences.states.sg1[k]
|
|
1769
|
+
self.sequences.states.sg1[k] = ( self.parameters.derived.w2[k] * d_sg1 + (1.0 - self.parameters.derived.w2[k]) * self.parameters.control.k2[k] * self.sequences.fluxes.gr1[k] )
|
|
1770
|
+
self.sequences.fluxes.rg1[k] = d_sg1 + self.sequences.fluxes.gr1[k] - self.sequences.states.sg1[k]
|
|
1771
|
+
else:
|
|
1772
|
+
self.sequences.states.sg1[k] = 0.0
|
|
1773
|
+
self.sequences.fluxes.rg1[k] = 0.0
|
|
1774
|
+
cpdef inline void calc_gr2_gr3(self) noexcept nogil:
|
|
1775
|
+
cdef double d_total
|
|
1776
|
+
cdef double d_weight
|
|
1777
|
+
cdef numpy.int64_t k
|
|
1778
|
+
self.sequences.fluxes.gr2 = 0.0
|
|
1779
|
+
self.sequences.fluxes.gr3 = 0.0
|
|
1780
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1781
|
+
if self.parameters.control.zonetype[k] == SEALED:
|
|
1782
|
+
continue
|
|
1783
|
+
d_weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea
|
|
1784
|
+
if self.parameters.control.zonetype[k] == ILAKE:
|
|
1785
|
+
d_total = d_weight * self.sequences.fluxes.pc[k]
|
|
1786
|
+
else:
|
|
1787
|
+
d_total = d_weight * (self.sequences.fluxes.dp[k] - self.sequences.fluxes.gr1[k])
|
|
1788
|
+
self.sequences.fluxes.gr2 = self.sequences.fluxes.gr2 + (self.parameters.fixed.fsg * d_total)
|
|
1789
|
+
self.sequences.fluxes.gr3 = self.sequences.fluxes.gr3 + ((1.0 - self.parameters.fixed.fsg) * d_total)
|
|
1790
|
+
cpdef inline void calc_rg2_sg2(self) noexcept nogil:
|
|
1791
|
+
cdef double d_add
|
|
1792
|
+
cdef double d_w3
|
|
1793
|
+
cdef double d_k3
|
|
1794
|
+
cdef double d_gr2
|
|
1795
|
+
cdef double d_sg2
|
|
1796
|
+
d_sg2 = self.sequences.states.sg2
|
|
1797
|
+
d_gr2 = self.sequences.fluxes.gr2
|
|
1798
|
+
d_k3 = self.parameters.control.k3
|
|
1799
|
+
d_w3 = self.parameters.derived.w3
|
|
1800
|
+
if d_sg2 < 0.0 < d_gr2:
|
|
1801
|
+
d_add = min(-self.sequences.states.sg2, d_gr2)
|
|
1802
|
+
d_k3 = d_k3 * (d_gr2 / d_add)
|
|
1803
|
+
d_w3 = exp(-1.0 / d_k3)
|
|
1804
|
+
d_sg2 = d_sg2 + (d_add)
|
|
1805
|
+
d_gr2 = d_gr2 - (d_add)
|
|
1806
|
+
if d_sg2 >= 0.0:
|
|
1807
|
+
self.sequences.states.sg2 = d_w3 * d_sg2 + (1.0 - d_w3) * d_k3 * d_gr2
|
|
1808
|
+
self.sequences.fluxes.rg2 = d_sg2 + d_gr2 - self.sequences.states.sg2
|
|
1809
|
+
else:
|
|
1810
|
+
self.sequences.states.sg2 = d_sg2
|
|
1811
|
+
self.sequences.fluxes.rg2 = 0.0
|
|
1812
|
+
cpdef inline void calc_rg3_sg3(self) noexcept nogil:
|
|
1813
|
+
cdef double d_add
|
|
1814
|
+
cdef double d_w4
|
|
1815
|
+
cdef double d_k4
|
|
1816
|
+
cdef double d_gr3
|
|
1817
|
+
cdef double d_sg3
|
|
1818
|
+
d_sg3 = self.sequences.states.sg3
|
|
1819
|
+
d_gr3 = self.sequences.fluxes.gr3
|
|
1820
|
+
d_k4 = self.parameters.derived.k4
|
|
1821
|
+
d_w4 = self.parameters.derived.w4
|
|
1822
|
+
if d_sg3 < 0.0 < d_gr3:
|
|
1823
|
+
d_add = min(-self.sequences.states.sg3, d_gr3)
|
|
1824
|
+
d_k4 = d_k4 * (d_gr3 / d_add)
|
|
1825
|
+
d_w4 = exp(-1.0 / d_k4)
|
|
1826
|
+
d_sg3 = d_sg3 + (d_add)
|
|
1827
|
+
d_gr3 = d_gr3 - (d_add)
|
|
1828
|
+
if d_sg3 >= 0.0:
|
|
1829
|
+
self.sequences.states.sg3 = d_w4 * d_sg3 + (1.0 - d_w4) * d_k4 * d_gr3
|
|
1830
|
+
self.sequences.fluxes.rg3 = d_sg3 + d_gr3 - self.sequences.states.sg3
|
|
1831
|
+
else:
|
|
1832
|
+
self.sequences.states.sg3 = d_sg3
|
|
1833
|
+
self.sequences.fluxes.rg3 = 0.0
|
|
1834
|
+
cpdef inline void calc_el_sg2_sg3(self) noexcept nogil:
|
|
1835
|
+
if self.aetmodel_typeid == 1:
|
|
1836
|
+
self.calc_el_sg2_sg3_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
|
|
1837
|
+
cpdef inline void calc_inrc(self) noexcept nogil:
|
|
1838
|
+
cdef numpy.int64_t k
|
|
1839
|
+
self.sequences.fluxes.inrc = self.parameters.derived.rellowerzonearea * (self.sequences.fluxes.rg2 + self.sequences.fluxes.rg3)
|
|
1840
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1841
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1842
|
+
self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (self.parameters.derived.relzoneareas[k] * (self.sequences.fluxes.rs[k] + self.sequences.fluxes.ri[k] + self.sequences.fluxes.rg1[k]))
|
|
1843
|
+
elif self.parameters.control.zonetype[k] == SEALED:
|
|
1844
|
+
self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (self.parameters.derived.relzoneareas[k] * self.sequences.fluxes.r[k])
|
|
1845
|
+
cpdef inline void calc_outrc(self) noexcept nogil:
|
|
1846
|
+
if self.rconcmodel is None:
|
|
1847
|
+
self.sequences.fluxes.outrc = self.sequences.fluxes.inrc
|
|
1848
|
+
elif self.rconcmodel_typeid == 1:
|
|
1849
|
+
self.calc_outrc_rconcmodel_v1( (<masterinterface.MasterInterface>self.rconcmodel) )
|
|
1850
|
+
cpdef inline void calc_rt(self) noexcept nogil:
|
|
1851
|
+
self.sequences.fluxes.rt = self.sequences.fluxes.outrc
|
|
1852
|
+
cpdef inline void calc_qt(self) noexcept nogil:
|
|
1853
|
+
self.sequences.fluxes.qt = self.parameters.derived.qfactor * self.sequences.fluxes.rt
|
|
1854
|
+
cpdef double get_temperature(self, numpy.int64_t s) noexcept nogil:
|
|
1855
|
+
return self.sequences.factors.tc[s]
|
|
1856
|
+
cpdef double get_meantemperature(self) noexcept nogil:
|
|
1857
|
+
return self.sequences.inputs.t
|
|
1858
|
+
cpdef double get_precipitation(self, numpy.int64_t s) noexcept nogil:
|
|
1859
|
+
return self.sequences.fluxes.pc[s]
|
|
1860
|
+
cpdef double get_interceptedwater(self, numpy.int64_t k) noexcept nogil:
|
|
1861
|
+
return self.sequences.states.ic[k]
|
|
1862
|
+
cpdef double get_soilwater(self, numpy.int64_t k) noexcept nogil:
|
|
1863
|
+
return self.sequences.states.sm[k]
|
|
1864
|
+
cpdef double get_snowcover(self, numpy.int64_t k) noexcept nogil:
|
|
1865
|
+
cdef numpy.int64_t c
|
|
1866
|
+
cdef double snowcovered
|
|
1867
|
+
snowcovered = 0.0
|
|
1868
|
+
for c in range(self.parameters.control.sclass):
|
|
1869
|
+
snowcovered = snowcovered + (self.sequences.states.sp[c, k] > 0.0)
|
|
1870
|
+
return snowcovered / self.parameters.control.sclass
|
|
1871
|
+
cpdef inline void calc_ei_ic_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1872
|
+
cdef numpy.int64_t k
|
|
1873
|
+
submodel.determine_interceptionevaporation()
|
|
1874
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1875
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
|
|
1876
|
+
self.sequences.fluxes.ei[k] = min(submodel.get_interceptionevaporation(k), self.sequences.states.ic[k])
|
|
1877
|
+
self.sequences.states.ic[k] = self.sequences.states.ic[k] - (self.sequences.fluxes.ei[k])
|
|
1878
|
+
else:
|
|
1879
|
+
self.sequences.fluxes.ei[k] = 0.0
|
|
1880
|
+
self.sequences.states.ic[k] = 0.0
|
|
1881
|
+
cpdef inline void calc_ea_sm_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1882
|
+
cdef numpy.int64_t k
|
|
1883
|
+
submodel.determine_soilevapotranspiration()
|
|
1884
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1885
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST):
|
|
1886
|
+
self.sequences.fluxes.ea[k] = min(submodel.get_soilevapotranspiration(k), self.sequences.states.sm[k])
|
|
1887
|
+
self.sequences.states.sm[k] = self.sequences.states.sm[k] - (self.sequences.fluxes.ea[k])
|
|
1888
|
+
if self.sequences.states.sm[k] > self.parameters.control.fc[k]:
|
|
1889
|
+
self.sequences.fluxes.r[k] = self.sequences.fluxes.r[k] + (self.sequences.states.sm[k] - self.parameters.control.fc[k])
|
|
1890
|
+
self.sequences.states.sm[k] = self.parameters.control.fc[k]
|
|
1891
|
+
else:
|
|
1892
|
+
self.sequences.fluxes.ea[k] = 0.0
|
|
1893
|
+
self.sequences.states.sm[k] = 0.0
|
|
1894
|
+
cpdef inline void calc_el_sg2_sg3_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1895
|
+
cdef double weight
|
|
1896
|
+
cdef numpy.int64_t k
|
|
1897
|
+
submodel.determine_waterevaporation()
|
|
1898
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1899
|
+
if self.parameters.control.zonetype[k] == ILAKE:
|
|
1900
|
+
self.sequences.fluxes.el[k] = submodel.get_waterevaporation(k)
|
|
1901
|
+
weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea
|
|
1902
|
+
self.sequences.states.sg2 = self.sequences.states.sg2 - (self.parameters.fixed.fsg * weight * self.sequences.fluxes.el[k])
|
|
1903
|
+
self.sequences.states.sg3 = self.sequences.states.sg3 - ((1.0 - self.parameters.fixed.fsg) * weight * self.sequences.fluxes.el[k])
|
|
1904
|
+
else:
|
|
1905
|
+
self.sequences.fluxes.el[k] = 0.0
|
|
1906
|
+
cpdef inline void calc_outrc_rconcmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1907
|
+
submodel.set_inflow(self.sequences.fluxes.inrc)
|
|
1908
|
+
submodel.determine_outflow()
|
|
1909
|
+
self.sequences.fluxes.outrc = submodel.get_outflow()
|
|
1910
|
+
cpdef inline void pass_q(self) noexcept nogil:
|
|
1911
|
+
self.sequences.outlets.q[0] = self.sequences.outlets.q[0] + (self.sequences.fluxes.qt)
|