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,1822 @@
|
|
|
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._qvs1_diskflag_reading:
|
|
340
|
+
k = 0
|
|
341
|
+
for jdx0 in range(self._qvs1_length_0):
|
|
342
|
+
self.qvs1[jdx0] = self._qvs1_ncarray[k]
|
|
343
|
+
k += 1
|
|
344
|
+
elif self._qvs1_ramflag:
|
|
345
|
+
for jdx0 in range(self._qvs1_length_0):
|
|
346
|
+
self.qvs1[jdx0] = self._qvs1_array[idx, jdx0]
|
|
347
|
+
if self._qab1_diskflag_reading:
|
|
348
|
+
k = 0
|
|
349
|
+
for jdx0 in range(self._qab1_length_0):
|
|
350
|
+
self.qab1[jdx0] = self._qab1_ncarray[k]
|
|
351
|
+
k += 1
|
|
352
|
+
elif self._qab1_ramflag:
|
|
353
|
+
for jdx0 in range(self._qab1_length_0):
|
|
354
|
+
self.qab1[jdx0] = self._qab1_array[idx, jdx0]
|
|
355
|
+
if self._qvs2_diskflag_reading:
|
|
356
|
+
k = 0
|
|
357
|
+
for jdx0 in range(self._qvs2_length_0):
|
|
358
|
+
self.qvs2[jdx0] = self._qvs2_ncarray[k]
|
|
359
|
+
k += 1
|
|
360
|
+
elif self._qvs2_ramflag:
|
|
361
|
+
for jdx0 in range(self._qvs2_length_0):
|
|
362
|
+
self.qvs2[jdx0] = self._qvs2_array[idx, jdx0]
|
|
363
|
+
if self._qab2_diskflag_reading:
|
|
364
|
+
k = 0
|
|
365
|
+
for jdx0 in range(self._qab2_length_0):
|
|
366
|
+
self.qab2[jdx0] = self._qab2_ncarray[k]
|
|
367
|
+
k += 1
|
|
368
|
+
elif self._qab2_ramflag:
|
|
369
|
+
for jdx0 in range(self._qab2_length_0):
|
|
370
|
+
self.qab2[jdx0] = self._qab2_array[idx, jdx0]
|
|
371
|
+
if self._el_diskflag_reading:
|
|
372
|
+
k = 0
|
|
373
|
+
for jdx0 in range(self._el_length_0):
|
|
374
|
+
self.el[jdx0] = self._el_ncarray[k]
|
|
375
|
+
k += 1
|
|
376
|
+
elif self._el_ramflag:
|
|
377
|
+
for jdx0 in range(self._el_length_0):
|
|
378
|
+
self.el[jdx0] = self._el_array[idx, jdx0]
|
|
379
|
+
if self._q1_diskflag_reading:
|
|
380
|
+
self.q1 = self._q1_ncarray[0]
|
|
381
|
+
elif self._q1_ramflag:
|
|
382
|
+
self.q1 = self._q1_array[idx]
|
|
383
|
+
if self._inrc_diskflag_reading:
|
|
384
|
+
self.inrc = self._inrc_ncarray[0]
|
|
385
|
+
elif self._inrc_ramflag:
|
|
386
|
+
self.inrc = self._inrc_array[idx]
|
|
387
|
+
if self._outrc_diskflag_reading:
|
|
388
|
+
self.outrc = self._outrc_ncarray[0]
|
|
389
|
+
elif self._outrc_ramflag:
|
|
390
|
+
self.outrc = self._outrc_array[idx]
|
|
391
|
+
if self._rt_diskflag_reading:
|
|
392
|
+
self.rt = self._rt_ncarray[0]
|
|
393
|
+
elif self._rt_ramflag:
|
|
394
|
+
self.rt = self._rt_array[idx]
|
|
395
|
+
if self._qt_diskflag_reading:
|
|
396
|
+
self.qt = self._qt_ncarray[0]
|
|
397
|
+
elif self._qt_ramflag:
|
|
398
|
+
self.qt = self._qt_array[idx]
|
|
399
|
+
cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
|
|
400
|
+
cdef numpy.int64_t jdx0, jdx1
|
|
401
|
+
cdef numpy.int64_t k
|
|
402
|
+
if self._pc_diskflag_writing:
|
|
403
|
+
k = 0
|
|
404
|
+
for jdx0 in range(self._pc_length_0):
|
|
405
|
+
self._pc_ncarray[k] = self.pc[jdx0]
|
|
406
|
+
k += 1
|
|
407
|
+
if self._pc_ramflag:
|
|
408
|
+
for jdx0 in range(self._pc_length_0):
|
|
409
|
+
self._pc_array[idx, jdx0] = self.pc[jdx0]
|
|
410
|
+
if self._ei_diskflag_writing:
|
|
411
|
+
k = 0
|
|
412
|
+
for jdx0 in range(self._ei_length_0):
|
|
413
|
+
self._ei_ncarray[k] = self.ei[jdx0]
|
|
414
|
+
k += 1
|
|
415
|
+
if self._ei_ramflag:
|
|
416
|
+
for jdx0 in range(self._ei_length_0):
|
|
417
|
+
self._ei_array[idx, jdx0] = self.ei[jdx0]
|
|
418
|
+
if self._tf_diskflag_writing:
|
|
419
|
+
k = 0
|
|
420
|
+
for jdx0 in range(self._tf_length_0):
|
|
421
|
+
self._tf_ncarray[k] = self.tf[jdx0]
|
|
422
|
+
k += 1
|
|
423
|
+
if self._tf_ramflag:
|
|
424
|
+
for jdx0 in range(self._tf_length_0):
|
|
425
|
+
self._tf_array[idx, jdx0] = self.tf[jdx0]
|
|
426
|
+
if self._spl_diskflag_writing:
|
|
427
|
+
k = 0
|
|
428
|
+
for jdx0 in range(self._spl_length_0):
|
|
429
|
+
self._spl_ncarray[k] = self.spl[jdx0]
|
|
430
|
+
k += 1
|
|
431
|
+
if self._spl_ramflag:
|
|
432
|
+
for jdx0 in range(self._spl_length_0):
|
|
433
|
+
self._spl_array[idx, jdx0] = self.spl[jdx0]
|
|
434
|
+
if self._wcl_diskflag_writing:
|
|
435
|
+
k = 0
|
|
436
|
+
for jdx0 in range(self._wcl_length_0):
|
|
437
|
+
self._wcl_ncarray[k] = self.wcl[jdx0]
|
|
438
|
+
k += 1
|
|
439
|
+
if self._wcl_ramflag:
|
|
440
|
+
for jdx0 in range(self._wcl_length_0):
|
|
441
|
+
self._wcl_array[idx, jdx0] = self.wcl[jdx0]
|
|
442
|
+
if self._spg_diskflag_writing:
|
|
443
|
+
k = 0
|
|
444
|
+
for jdx0 in range(self._spg_length_0):
|
|
445
|
+
self._spg_ncarray[k] = self.spg[jdx0]
|
|
446
|
+
k += 1
|
|
447
|
+
if self._spg_ramflag:
|
|
448
|
+
for jdx0 in range(self._spg_length_0):
|
|
449
|
+
self._spg_array[idx, jdx0] = self.spg[jdx0]
|
|
450
|
+
if self._wcg_diskflag_writing:
|
|
451
|
+
k = 0
|
|
452
|
+
for jdx0 in range(self._wcg_length_0):
|
|
453
|
+
self._wcg_ncarray[k] = self.wcg[jdx0]
|
|
454
|
+
k += 1
|
|
455
|
+
if self._wcg_ramflag:
|
|
456
|
+
for jdx0 in range(self._wcg_length_0):
|
|
457
|
+
self._wcg_array[idx, jdx0] = self.wcg[jdx0]
|
|
458
|
+
if self._glmelt_diskflag_writing:
|
|
459
|
+
k = 0
|
|
460
|
+
for jdx0 in range(self._glmelt_length_0):
|
|
461
|
+
self._glmelt_ncarray[k] = self.glmelt[jdx0]
|
|
462
|
+
k += 1
|
|
463
|
+
if self._glmelt_ramflag:
|
|
464
|
+
for jdx0 in range(self._glmelt_length_0):
|
|
465
|
+
self._glmelt_array[idx, jdx0] = self.glmelt[jdx0]
|
|
466
|
+
if self._melt_diskflag_writing:
|
|
467
|
+
k = 0
|
|
468
|
+
for jdx0 in range(self._melt_length_0):
|
|
469
|
+
for jdx1 in range(self._melt_length_1):
|
|
470
|
+
self._melt_ncarray[k] = self.melt[jdx0, jdx1]
|
|
471
|
+
k += 1
|
|
472
|
+
if self._melt_ramflag:
|
|
473
|
+
for jdx0 in range(self._melt_length_0):
|
|
474
|
+
for jdx1 in range(self._melt_length_1):
|
|
475
|
+
self._melt_array[idx, jdx0, jdx1] = self.melt[jdx0, jdx1]
|
|
476
|
+
if self._refr_diskflag_writing:
|
|
477
|
+
k = 0
|
|
478
|
+
for jdx0 in range(self._refr_length_0):
|
|
479
|
+
for jdx1 in range(self._refr_length_1):
|
|
480
|
+
self._refr_ncarray[k] = self.refr[jdx0, jdx1]
|
|
481
|
+
k += 1
|
|
482
|
+
if self._refr_ramflag:
|
|
483
|
+
for jdx0 in range(self._refr_length_0):
|
|
484
|
+
for jdx1 in range(self._refr_length_1):
|
|
485
|
+
self._refr_array[idx, jdx0, jdx1] = self.refr[jdx0, jdx1]
|
|
486
|
+
if self._in__diskflag_writing:
|
|
487
|
+
k = 0
|
|
488
|
+
for jdx0 in range(self._in__length_0):
|
|
489
|
+
self._in__ncarray[k] = self.in_[jdx0]
|
|
490
|
+
k += 1
|
|
491
|
+
if self._in__ramflag:
|
|
492
|
+
for jdx0 in range(self._in__length_0):
|
|
493
|
+
self._in__array[idx, jdx0] = self.in_[jdx0]
|
|
494
|
+
if self._r_diskflag_writing:
|
|
495
|
+
k = 0
|
|
496
|
+
for jdx0 in range(self._r_length_0):
|
|
497
|
+
self._r_ncarray[k] = self.r[jdx0]
|
|
498
|
+
k += 1
|
|
499
|
+
if self._r_ramflag:
|
|
500
|
+
for jdx0 in range(self._r_length_0):
|
|
501
|
+
self._r_array[idx, jdx0] = self.r[jdx0]
|
|
502
|
+
if self._sr_diskflag_writing:
|
|
503
|
+
k = 0
|
|
504
|
+
for jdx0 in range(self._sr_length_0):
|
|
505
|
+
self._sr_ncarray[k] = self.sr[jdx0]
|
|
506
|
+
k += 1
|
|
507
|
+
if self._sr_ramflag:
|
|
508
|
+
for jdx0 in range(self._sr_length_0):
|
|
509
|
+
self._sr_array[idx, jdx0] = self.sr[jdx0]
|
|
510
|
+
if self._ea_diskflag_writing:
|
|
511
|
+
k = 0
|
|
512
|
+
for jdx0 in range(self._ea_length_0):
|
|
513
|
+
self._ea_ncarray[k] = self.ea[jdx0]
|
|
514
|
+
k += 1
|
|
515
|
+
if self._ea_ramflag:
|
|
516
|
+
for jdx0 in range(self._ea_length_0):
|
|
517
|
+
self._ea_array[idx, jdx0] = self.ea[jdx0]
|
|
518
|
+
if self._qvs1_diskflag_writing:
|
|
519
|
+
k = 0
|
|
520
|
+
for jdx0 in range(self._qvs1_length_0):
|
|
521
|
+
self._qvs1_ncarray[k] = self.qvs1[jdx0]
|
|
522
|
+
k += 1
|
|
523
|
+
if self._qvs1_ramflag:
|
|
524
|
+
for jdx0 in range(self._qvs1_length_0):
|
|
525
|
+
self._qvs1_array[idx, jdx0] = self.qvs1[jdx0]
|
|
526
|
+
if self._qab1_diskflag_writing:
|
|
527
|
+
k = 0
|
|
528
|
+
for jdx0 in range(self._qab1_length_0):
|
|
529
|
+
self._qab1_ncarray[k] = self.qab1[jdx0]
|
|
530
|
+
k += 1
|
|
531
|
+
if self._qab1_ramflag:
|
|
532
|
+
for jdx0 in range(self._qab1_length_0):
|
|
533
|
+
self._qab1_array[idx, jdx0] = self.qab1[jdx0]
|
|
534
|
+
if self._qvs2_diskflag_writing:
|
|
535
|
+
k = 0
|
|
536
|
+
for jdx0 in range(self._qvs2_length_0):
|
|
537
|
+
self._qvs2_ncarray[k] = self.qvs2[jdx0]
|
|
538
|
+
k += 1
|
|
539
|
+
if self._qvs2_ramflag:
|
|
540
|
+
for jdx0 in range(self._qvs2_length_0):
|
|
541
|
+
self._qvs2_array[idx, jdx0] = self.qvs2[jdx0]
|
|
542
|
+
if self._qab2_diskflag_writing:
|
|
543
|
+
k = 0
|
|
544
|
+
for jdx0 in range(self._qab2_length_0):
|
|
545
|
+
self._qab2_ncarray[k] = self.qab2[jdx0]
|
|
546
|
+
k += 1
|
|
547
|
+
if self._qab2_ramflag:
|
|
548
|
+
for jdx0 in range(self._qab2_length_0):
|
|
549
|
+
self._qab2_array[idx, jdx0] = self.qab2[jdx0]
|
|
550
|
+
if self._el_diskflag_writing:
|
|
551
|
+
k = 0
|
|
552
|
+
for jdx0 in range(self._el_length_0):
|
|
553
|
+
self._el_ncarray[k] = self.el[jdx0]
|
|
554
|
+
k += 1
|
|
555
|
+
if self._el_ramflag:
|
|
556
|
+
for jdx0 in range(self._el_length_0):
|
|
557
|
+
self._el_array[idx, jdx0] = self.el[jdx0]
|
|
558
|
+
if self._q1_diskflag_writing:
|
|
559
|
+
self._q1_ncarray[0] = self.q1
|
|
560
|
+
if self._q1_ramflag:
|
|
561
|
+
self._q1_array[idx] = self.q1
|
|
562
|
+
if self._inrc_diskflag_writing:
|
|
563
|
+
self._inrc_ncarray[0] = self.inrc
|
|
564
|
+
if self._inrc_ramflag:
|
|
565
|
+
self._inrc_array[idx] = self.inrc
|
|
566
|
+
if self._outrc_diskflag_writing:
|
|
567
|
+
self._outrc_ncarray[0] = self.outrc
|
|
568
|
+
if self._outrc_ramflag:
|
|
569
|
+
self._outrc_array[idx] = self.outrc
|
|
570
|
+
if self._rt_diskflag_writing:
|
|
571
|
+
self._rt_ncarray[0] = self.rt
|
|
572
|
+
if self._rt_ramflag:
|
|
573
|
+
self._rt_array[idx] = self.rt
|
|
574
|
+
if self._qt_diskflag_writing:
|
|
575
|
+
self._qt_ncarray[0] = self.qt
|
|
576
|
+
if self._qt_ramflag:
|
|
577
|
+
self._qt_array[idx] = self.qt
|
|
578
|
+
cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
|
|
579
|
+
if name == "q1":
|
|
580
|
+
self._q1_outputpointer = value.p_value
|
|
581
|
+
if name == "inrc":
|
|
582
|
+
self._inrc_outputpointer = value.p_value
|
|
583
|
+
if name == "outrc":
|
|
584
|
+
self._outrc_outputpointer = value.p_value
|
|
585
|
+
if name == "rt":
|
|
586
|
+
self._rt_outputpointer = value.p_value
|
|
587
|
+
if name == "qt":
|
|
588
|
+
self._qt_outputpointer = value.p_value
|
|
589
|
+
cpdef inline void update_outputs(self) noexcept nogil:
|
|
590
|
+
if self._q1_outputflag:
|
|
591
|
+
self._q1_outputpointer[0] = self.q1
|
|
592
|
+
if self._inrc_outputflag:
|
|
593
|
+
self._inrc_outputpointer[0] = self.inrc
|
|
594
|
+
if self._outrc_outputflag:
|
|
595
|
+
self._outrc_outputpointer[0] = self.outrc
|
|
596
|
+
if self._rt_outputflag:
|
|
597
|
+
self._rt_outputpointer[0] = self.rt
|
|
598
|
+
if self._qt_outputflag:
|
|
599
|
+
self._qt_outputpointer[0] = self.qt
|
|
600
|
+
@cython.final
|
|
601
|
+
cdef class StateSequences:
|
|
602
|
+
cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
|
|
603
|
+
cdef numpy.int64_t jdx0, jdx1
|
|
604
|
+
cdef numpy.int64_t k
|
|
605
|
+
if self._ic_diskflag_reading:
|
|
606
|
+
k = 0
|
|
607
|
+
for jdx0 in range(self._ic_length_0):
|
|
608
|
+
self.ic[jdx0] = self._ic_ncarray[k]
|
|
609
|
+
k += 1
|
|
610
|
+
elif self._ic_ramflag:
|
|
611
|
+
for jdx0 in range(self._ic_length_0):
|
|
612
|
+
self.ic[jdx0] = self._ic_array[idx, jdx0]
|
|
613
|
+
if self._sp_diskflag_reading:
|
|
614
|
+
k = 0
|
|
615
|
+
for jdx0 in range(self._sp_length_0):
|
|
616
|
+
for jdx1 in range(self._sp_length_1):
|
|
617
|
+
self.sp[jdx0, jdx1] = self._sp_ncarray[k]
|
|
618
|
+
k += 1
|
|
619
|
+
elif self._sp_ramflag:
|
|
620
|
+
for jdx0 in range(self._sp_length_0):
|
|
621
|
+
for jdx1 in range(self._sp_length_1):
|
|
622
|
+
self.sp[jdx0, jdx1] = self._sp_array[idx, jdx0, jdx1]
|
|
623
|
+
if self._wc_diskflag_reading:
|
|
624
|
+
k = 0
|
|
625
|
+
for jdx0 in range(self._wc_length_0):
|
|
626
|
+
for jdx1 in range(self._wc_length_1):
|
|
627
|
+
self.wc[jdx0, jdx1] = self._wc_ncarray[k]
|
|
628
|
+
k += 1
|
|
629
|
+
elif self._wc_ramflag:
|
|
630
|
+
for jdx0 in range(self._wc_length_0):
|
|
631
|
+
for jdx1 in range(self._wc_length_1):
|
|
632
|
+
self.wc[jdx0, jdx1] = self._wc_array[idx, jdx0, jdx1]
|
|
633
|
+
if self._sm_diskflag_reading:
|
|
634
|
+
k = 0
|
|
635
|
+
for jdx0 in range(self._sm_length_0):
|
|
636
|
+
self.sm[jdx0] = self._sm_ncarray[k]
|
|
637
|
+
k += 1
|
|
638
|
+
elif self._sm_ramflag:
|
|
639
|
+
for jdx0 in range(self._sm_length_0):
|
|
640
|
+
self.sm[jdx0] = self._sm_array[idx, jdx0]
|
|
641
|
+
if self._bw1_diskflag_reading:
|
|
642
|
+
k = 0
|
|
643
|
+
for jdx0 in range(self._bw1_length_0):
|
|
644
|
+
self.bw1[jdx0] = self._bw1_ncarray[k]
|
|
645
|
+
k += 1
|
|
646
|
+
elif self._bw1_ramflag:
|
|
647
|
+
for jdx0 in range(self._bw1_length_0):
|
|
648
|
+
self.bw1[jdx0] = self._bw1_array[idx, jdx0]
|
|
649
|
+
if self._bw2_diskflag_reading:
|
|
650
|
+
k = 0
|
|
651
|
+
for jdx0 in range(self._bw2_length_0):
|
|
652
|
+
self.bw2[jdx0] = self._bw2_ncarray[k]
|
|
653
|
+
k += 1
|
|
654
|
+
elif self._bw2_ramflag:
|
|
655
|
+
for jdx0 in range(self._bw2_length_0):
|
|
656
|
+
self.bw2[jdx0] = self._bw2_array[idx, jdx0]
|
|
657
|
+
if self._lz_diskflag_reading:
|
|
658
|
+
self.lz = self._lz_ncarray[0]
|
|
659
|
+
elif self._lz_ramflag:
|
|
660
|
+
self.lz = self._lz_array[idx]
|
|
661
|
+
cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
|
|
662
|
+
cdef numpy.int64_t jdx0, jdx1
|
|
663
|
+
cdef numpy.int64_t k
|
|
664
|
+
if self._ic_diskflag_writing:
|
|
665
|
+
k = 0
|
|
666
|
+
for jdx0 in range(self._ic_length_0):
|
|
667
|
+
self._ic_ncarray[k] = self.ic[jdx0]
|
|
668
|
+
k += 1
|
|
669
|
+
if self._ic_ramflag:
|
|
670
|
+
for jdx0 in range(self._ic_length_0):
|
|
671
|
+
self._ic_array[idx, jdx0] = self.ic[jdx0]
|
|
672
|
+
if self._sp_diskflag_writing:
|
|
673
|
+
k = 0
|
|
674
|
+
for jdx0 in range(self._sp_length_0):
|
|
675
|
+
for jdx1 in range(self._sp_length_1):
|
|
676
|
+
self._sp_ncarray[k] = self.sp[jdx0, jdx1]
|
|
677
|
+
k += 1
|
|
678
|
+
if self._sp_ramflag:
|
|
679
|
+
for jdx0 in range(self._sp_length_0):
|
|
680
|
+
for jdx1 in range(self._sp_length_1):
|
|
681
|
+
self._sp_array[idx, jdx0, jdx1] = self.sp[jdx0, jdx1]
|
|
682
|
+
if self._wc_diskflag_writing:
|
|
683
|
+
k = 0
|
|
684
|
+
for jdx0 in range(self._wc_length_0):
|
|
685
|
+
for jdx1 in range(self._wc_length_1):
|
|
686
|
+
self._wc_ncarray[k] = self.wc[jdx0, jdx1]
|
|
687
|
+
k += 1
|
|
688
|
+
if self._wc_ramflag:
|
|
689
|
+
for jdx0 in range(self._wc_length_0):
|
|
690
|
+
for jdx1 in range(self._wc_length_1):
|
|
691
|
+
self._wc_array[idx, jdx0, jdx1] = self.wc[jdx0, jdx1]
|
|
692
|
+
if self._sm_diskflag_writing:
|
|
693
|
+
k = 0
|
|
694
|
+
for jdx0 in range(self._sm_length_0):
|
|
695
|
+
self._sm_ncarray[k] = self.sm[jdx0]
|
|
696
|
+
k += 1
|
|
697
|
+
if self._sm_ramflag:
|
|
698
|
+
for jdx0 in range(self._sm_length_0):
|
|
699
|
+
self._sm_array[idx, jdx0] = self.sm[jdx0]
|
|
700
|
+
if self._bw1_diskflag_writing:
|
|
701
|
+
k = 0
|
|
702
|
+
for jdx0 in range(self._bw1_length_0):
|
|
703
|
+
self._bw1_ncarray[k] = self.bw1[jdx0]
|
|
704
|
+
k += 1
|
|
705
|
+
if self._bw1_ramflag:
|
|
706
|
+
for jdx0 in range(self._bw1_length_0):
|
|
707
|
+
self._bw1_array[idx, jdx0] = self.bw1[jdx0]
|
|
708
|
+
if self._bw2_diskflag_writing:
|
|
709
|
+
k = 0
|
|
710
|
+
for jdx0 in range(self._bw2_length_0):
|
|
711
|
+
self._bw2_ncarray[k] = self.bw2[jdx0]
|
|
712
|
+
k += 1
|
|
713
|
+
if self._bw2_ramflag:
|
|
714
|
+
for jdx0 in range(self._bw2_length_0):
|
|
715
|
+
self._bw2_array[idx, jdx0] = self.bw2[jdx0]
|
|
716
|
+
if self._lz_diskflag_writing:
|
|
717
|
+
self._lz_ncarray[0] = self.lz
|
|
718
|
+
if self._lz_ramflag:
|
|
719
|
+
self._lz_array[idx] = self.lz
|
|
720
|
+
cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
|
|
721
|
+
if name == "lz":
|
|
722
|
+
self._lz_outputpointer = value.p_value
|
|
723
|
+
cpdef inline void update_outputs(self) noexcept nogil:
|
|
724
|
+
if self._lz_outputflag:
|
|
725
|
+
self._lz_outputpointer[0] = self.lz
|
|
726
|
+
@cython.final
|
|
727
|
+
cdef class AideSequences:
|
|
728
|
+
pass
|
|
729
|
+
@cython.final
|
|
730
|
+
cdef class OutletSequences:
|
|
731
|
+
cpdef inline set_pointer0d(self, str name, pointerutils.Double value):
|
|
732
|
+
cdef pointerutils.PDouble pointer = pointerutils.PDouble(value)
|
|
733
|
+
if name == "q":
|
|
734
|
+
self.q = pointer.p_value
|
|
735
|
+
cpdef get_value(self, str name):
|
|
736
|
+
cdef numpy.int64_t idx
|
|
737
|
+
if name == "q":
|
|
738
|
+
return self.q[0]
|
|
739
|
+
cpdef set_value(self, str name, value):
|
|
740
|
+
if name == "q":
|
|
741
|
+
self.q[0] = value
|
|
742
|
+
@cython.final
|
|
743
|
+
cdef class Model(masterinterface.MasterInterface):
|
|
744
|
+
def __init__(self):
|
|
745
|
+
super().__init__()
|
|
746
|
+
self.aetmodel = None
|
|
747
|
+
self.aetmodel_is_mainmodel = False
|
|
748
|
+
self.rconcmodel = None
|
|
749
|
+
self.rconcmodel_is_mainmodel = False
|
|
750
|
+
def get_aetmodel(self) -> masterinterface.MasterInterface | None:
|
|
751
|
+
return self.aetmodel
|
|
752
|
+
def set_aetmodel(self, aetmodel: masterinterface.MasterInterface | None) -> None:
|
|
753
|
+
self.aetmodel = aetmodel
|
|
754
|
+
def get_rconcmodel(self) -> masterinterface.MasterInterface | None:
|
|
755
|
+
return self.rconcmodel
|
|
756
|
+
def set_rconcmodel(self, rconcmodel: masterinterface.MasterInterface | None) -> None:
|
|
757
|
+
self.rconcmodel = rconcmodel
|
|
758
|
+
cpdef inline void simulate(self, numpy.int64_t idx) noexcept nogil:
|
|
759
|
+
self.idx_sim = idx
|
|
760
|
+
self.reset_reuseflags()
|
|
761
|
+
self.load_data(idx)
|
|
762
|
+
self.run()
|
|
763
|
+
self.new2old()
|
|
764
|
+
self.update_outlets()
|
|
765
|
+
self.update_outputs()
|
|
766
|
+
cpdef void reset_reuseflags(self) noexcept nogil:
|
|
767
|
+
if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
|
|
768
|
+
self.aetmodel.reset_reuseflags()
|
|
769
|
+
if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
|
|
770
|
+
self.rconcmodel.reset_reuseflags()
|
|
771
|
+
cpdef void load_data(self, numpy.int64_t idx) noexcept nogil:
|
|
772
|
+
self.idx_sim = idx
|
|
773
|
+
self.sequences.inputs.load_data(idx)
|
|
774
|
+
if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
|
|
775
|
+
self.aetmodel.load_data(idx)
|
|
776
|
+
if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
|
|
777
|
+
self.rconcmodel.load_data(idx)
|
|
778
|
+
cpdef void save_data(self, numpy.int64_t idx) noexcept nogil:
|
|
779
|
+
self.idx_sim = idx
|
|
780
|
+
self.sequences.inputs.save_data(idx)
|
|
781
|
+
self.sequences.factors.save_data(idx)
|
|
782
|
+
self.sequences.fluxes.save_data(idx)
|
|
783
|
+
self.sequences.states.save_data(idx)
|
|
784
|
+
if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
|
|
785
|
+
self.aetmodel.save_data(idx)
|
|
786
|
+
if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
|
|
787
|
+
self.rconcmodel.save_data(idx)
|
|
788
|
+
cpdef void new2old(self) noexcept nogil:
|
|
789
|
+
cdef numpy.int64_t jdx0, jdx1
|
|
790
|
+
for jdx0 in range(self.sequences.states._ic_length_0):
|
|
791
|
+
self.sequences.old_states.ic[jdx0] = self.sequences.new_states.ic[jdx0]
|
|
792
|
+
for jdx0 in range(self.sequences.states._sp_length_0):
|
|
793
|
+
for jdx1 in range(self.sequences.states._sp_length_1):
|
|
794
|
+
self.sequences.old_states.sp[jdx0,jdx1] = self.sequences.new_states.sp[jdx0,jdx1]
|
|
795
|
+
for jdx0 in range(self.sequences.states._wc_length_0):
|
|
796
|
+
for jdx1 in range(self.sequences.states._wc_length_1):
|
|
797
|
+
self.sequences.old_states.wc[jdx0,jdx1] = self.sequences.new_states.wc[jdx0,jdx1]
|
|
798
|
+
for jdx0 in range(self.sequences.states._sm_length_0):
|
|
799
|
+
self.sequences.old_states.sm[jdx0] = self.sequences.new_states.sm[jdx0]
|
|
800
|
+
for jdx0 in range(self.sequences.states._bw1_length_0):
|
|
801
|
+
self.sequences.old_states.bw1[jdx0] = self.sequences.new_states.bw1[jdx0]
|
|
802
|
+
for jdx0 in range(self.sequences.states._bw2_length_0):
|
|
803
|
+
self.sequences.old_states.bw2[jdx0] = self.sequences.new_states.bw2[jdx0]
|
|
804
|
+
self.sequences.old_states.lz = self.sequences.new_states.lz
|
|
805
|
+
if (self.aetmodel is not None) and not self.aetmodel_is_mainmodel:
|
|
806
|
+
self.aetmodel.new2old()
|
|
807
|
+
if (self.rconcmodel is not None) and not self.rconcmodel_is_mainmodel:
|
|
808
|
+
self.rconcmodel.new2old()
|
|
809
|
+
cpdef inline void run(self) noexcept nogil:
|
|
810
|
+
self.calc_tc_v1()
|
|
811
|
+
self.calc_fracrain_v1()
|
|
812
|
+
self.calc_rfc_sfc_v1()
|
|
813
|
+
self.calc_pc_v1()
|
|
814
|
+
self.calc_tf_ic_v1()
|
|
815
|
+
self.calc_sp_wc_v1()
|
|
816
|
+
self.calc_spl_wcl_sp_wc_v1()
|
|
817
|
+
self.calc_spg_wcg_sp_wc_v1()
|
|
818
|
+
self.calc_cfact_v1()
|
|
819
|
+
self.calc_melt_sp_wc_v1()
|
|
820
|
+
self.calc_refr_sp_wc_v1()
|
|
821
|
+
self.calc_in_wc_v1()
|
|
822
|
+
self.calc_swe_v1()
|
|
823
|
+
self.calc_sr_v1()
|
|
824
|
+
self.calc_gact_v1()
|
|
825
|
+
self.calc_glmelt_in_v1()
|
|
826
|
+
self.calc_ei_ic_v1()
|
|
827
|
+
self.calc_r_sm_v1()
|
|
828
|
+
self.calc_ea_sm_v1()
|
|
829
|
+
self.calc_qab1_qvs1_bw1_v1()
|
|
830
|
+
self.calc_qab2_qvs2_bw2_v1()
|
|
831
|
+
self.calc_inrc_v3()
|
|
832
|
+
self.calc_outrc_v1()
|
|
833
|
+
self.calc_lz_v2()
|
|
834
|
+
self.calc_el_lz_v1()
|
|
835
|
+
self.calc_q1_lz_v1()
|
|
836
|
+
self.calc_rt_v2()
|
|
837
|
+
self.calc_qt_v1()
|
|
838
|
+
cpdef inline void update_inlets(self) noexcept nogil:
|
|
839
|
+
pass
|
|
840
|
+
cpdef inline void update_outlets(self) noexcept nogil:
|
|
841
|
+
self.pass_q_v1()
|
|
842
|
+
cpdef inline void update_receivers(self, numpy.int64_t idx) noexcept nogil:
|
|
843
|
+
self.idx_sim = idx
|
|
844
|
+
pass
|
|
845
|
+
cpdef inline void update_senders(self, numpy.int64_t idx) noexcept nogil:
|
|
846
|
+
self.idx_sim = idx
|
|
847
|
+
pass
|
|
848
|
+
cpdef inline void update_outputs(self) noexcept nogil:
|
|
849
|
+
self.sequences.fluxes.update_outputs()
|
|
850
|
+
self.sequences.states.update_outputs()
|
|
851
|
+
cpdef inline void calc_tc_v1(self) noexcept nogil:
|
|
852
|
+
cdef numpy.int64_t k
|
|
853
|
+
for k in range(self.parameters.control.nmbzones):
|
|
854
|
+
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)
|
|
855
|
+
cpdef inline void calc_fracrain_v1(self) noexcept nogil:
|
|
856
|
+
cdef double d_dt
|
|
857
|
+
cdef numpy.int64_t k
|
|
858
|
+
for k in range(self.parameters.control.nmbzones):
|
|
859
|
+
d_dt = self.parameters.control.ttint[k] / 2.0
|
|
860
|
+
if self.sequences.factors.tc[k] >= (self.parameters.control.tt[k] + d_dt):
|
|
861
|
+
self.sequences.factors.fracrain[k] = 1.0
|
|
862
|
+
elif self.sequences.factors.tc[k] <= (self.parameters.control.tt[k] - d_dt):
|
|
863
|
+
self.sequences.factors.fracrain[k] = 0.0
|
|
864
|
+
else:
|
|
865
|
+
self.sequences.factors.fracrain[k] = (self.sequences.factors.tc[k] - (self.parameters.control.tt[k] - d_dt)) / self.parameters.control.ttint[k]
|
|
866
|
+
cpdef inline void calc_rfc_sfc_v1(self) noexcept nogil:
|
|
867
|
+
cdef numpy.int64_t k
|
|
868
|
+
for k in range(self.parameters.control.nmbzones):
|
|
869
|
+
self.sequences.factors.rfc[k] = self.sequences.factors.fracrain[k] * self.parameters.control.rfcf[k]
|
|
870
|
+
self.sequences.factors.sfc[k] = (1.0 - self.sequences.factors.fracrain[k]) * self.parameters.control.sfcf[k]
|
|
871
|
+
cpdef inline void calc_pc_v1(self) noexcept nogil:
|
|
872
|
+
cdef numpy.int64_t k
|
|
873
|
+
for k in range(self.parameters.control.nmbzones):
|
|
874
|
+
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))
|
|
875
|
+
if self.sequences.fluxes.pc[k] <= 0.0:
|
|
876
|
+
self.sequences.fluxes.pc[k] = 0.0
|
|
877
|
+
else:
|
|
878
|
+
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]))
|
|
879
|
+
cpdef inline void calc_tf_ic_v1(self) noexcept nogil:
|
|
880
|
+
cdef numpy.int64_t k
|
|
881
|
+
for k in range(self.parameters.control.nmbzones):
|
|
882
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
|
|
883
|
+
self.sequences.fluxes.tf[k] = max(self.sequences.fluxes.pc[k] - (self.parameters.control.icmax[k] - self.sequences.states.ic[k]), 0.0)
|
|
884
|
+
self.sequences.states.ic[k] = self.sequences.states.ic[k] + (self.sequences.fluxes.pc[k] - self.sequences.fluxes.tf[k])
|
|
885
|
+
else:
|
|
886
|
+
self.sequences.fluxes.tf[k] = self.sequences.fluxes.pc[k]
|
|
887
|
+
self.sequences.states.ic[k] = 0.0
|
|
888
|
+
cpdef inline void calc_sp_wc_v1(self) noexcept nogil:
|
|
889
|
+
cdef numpy.int64_t c
|
|
890
|
+
cdef double d_snow
|
|
891
|
+
cdef double d_rain
|
|
892
|
+
cdef double d_denom
|
|
893
|
+
cdef numpy.int64_t k
|
|
894
|
+
for k in range(self.parameters.control.nmbzones):
|
|
895
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
896
|
+
d_denom = self.sequences.factors.rfc[k] + self.sequences.factors.sfc[k]
|
|
897
|
+
if d_denom > 0.0:
|
|
898
|
+
d_rain = self.sequences.fluxes.tf[k] * self.sequences.factors.rfc[k] / d_denom
|
|
899
|
+
d_snow = self.sequences.fluxes.tf[k] * self.sequences.factors.sfc[k] / d_denom
|
|
900
|
+
for c in range(self.parameters.control.sclass):
|
|
901
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.parameters.control.sfdist[c] * d_rain)
|
|
902
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.parameters.control.sfdist[c] * d_snow)
|
|
903
|
+
else:
|
|
904
|
+
for c in range(self.parameters.control.sclass):
|
|
905
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
906
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
907
|
+
cpdef inline void calc_spl_wcl_sp_wc_v1(self) noexcept nogil:
|
|
908
|
+
cdef double d_excess_wc
|
|
909
|
+
cdef double d_excess_sp
|
|
910
|
+
cdef double d_excess
|
|
911
|
+
cdef double d_snow
|
|
912
|
+
cdef numpy.int64_t c
|
|
913
|
+
cdef numpy.int64_t k
|
|
914
|
+
for k in range(self.parameters.control.nmbzones):
|
|
915
|
+
self.sequences.fluxes.spl[k] = 0.0
|
|
916
|
+
self.sequences.fluxes.wcl[k] = 0.0
|
|
917
|
+
if self.parameters.control.zonetype[k] == ILAKE:
|
|
918
|
+
for c in range(self.parameters.control.sclass):
|
|
919
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
920
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
921
|
+
elif not isinf(self.parameters.control.smax[k]):
|
|
922
|
+
for c in range(self.parameters.control.sclass):
|
|
923
|
+
d_snow = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
|
|
924
|
+
d_excess = d_snow - self.parameters.control.smax[k]
|
|
925
|
+
if d_excess > 0.0:
|
|
926
|
+
d_excess_sp = d_excess * self.sequences.states.sp[c, k] / d_snow
|
|
927
|
+
d_excess_wc = d_excess * self.sequences.states.wc[c, k] / d_snow
|
|
928
|
+
self.sequences.fluxes.spl[k] = self.sequences.fluxes.spl[k] + (d_excess_sp / self.parameters.control.sclass)
|
|
929
|
+
self.sequences.fluxes.wcl[k] = self.sequences.fluxes.wcl[k] + (d_excess_wc / self.parameters.control.sclass)
|
|
930
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (d_excess_sp)
|
|
931
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (d_excess_wc)
|
|
932
|
+
cpdef inline void calc_spg_wcg_sp_wc_v1(self) noexcept nogil:
|
|
933
|
+
cdef double d_excess_liquid_land
|
|
934
|
+
cdef double d_excess_frozen_land
|
|
935
|
+
cdef double d_delta_wc_zone
|
|
936
|
+
cdef double d_delta_sp_zone
|
|
937
|
+
cdef double d_fraction_gain_class
|
|
938
|
+
cdef double d_excess_liquid_zone_actual
|
|
939
|
+
cdef double d_excess_frozen_zone_actual
|
|
940
|
+
cdef double d_fraction_gain_zone
|
|
941
|
+
cdef double d_gain_max_cum
|
|
942
|
+
cdef double d_excess_total_zone
|
|
943
|
+
cdef double d_excess_liquid_zone
|
|
944
|
+
cdef double d_excess_frozen_zone
|
|
945
|
+
cdef double d_excess_liquid_basin
|
|
946
|
+
cdef double d_excess_frozen_basin
|
|
947
|
+
cdef double d_factor_excess
|
|
948
|
+
cdef double d_factor_gain
|
|
949
|
+
cdef double d_fraction_gain
|
|
950
|
+
cdef double d_gain_max
|
|
951
|
+
cdef double d_gain_pot
|
|
952
|
+
cdef double d_gain_total
|
|
953
|
+
cdef double d_gain_liquid
|
|
954
|
+
cdef double d_gain_frozen
|
|
955
|
+
cdef double d_f
|
|
956
|
+
cdef numpy.int64_t t
|
|
957
|
+
cdef numpy.int64_t f
|
|
958
|
+
cdef numpy.int64_t c
|
|
959
|
+
cdef numpy.int64_t i
|
|
960
|
+
for i in range(self.parameters.control.nmbzones):
|
|
961
|
+
self.sequences.fluxes.spg[i] = 0.0
|
|
962
|
+
self.sequences.fluxes.wcg[i] = 0.0
|
|
963
|
+
self.sequences.aides.spe[i] = 0.0
|
|
964
|
+
self.sequences.aides.wce[i] = 0.0
|
|
965
|
+
if self.parameters.control.zonetype[i] == ILAKE:
|
|
966
|
+
for c in range(self.parameters.control.sclass):
|
|
967
|
+
self.sequences.states.sp[c, i] = 0.0
|
|
968
|
+
self.sequences.states.wc[c, i] = 0.0
|
|
969
|
+
for i in range(self.parameters.derived.srednumber):
|
|
970
|
+
f, t = self.parameters.derived.sredorder[i, 0], self.parameters.derived.sredorder[i, 1]
|
|
971
|
+
d_f = self.parameters.derived.zonearearatios[f, t] * self.parameters.control.sred[f, t]
|
|
972
|
+
d_gain_frozen = d_f * (self.sequences.fluxes.spl[f] + self.sequences.aides.spe[f])
|
|
973
|
+
d_gain_liquid = d_f * (self.sequences.fluxes.wcl[f] + self.sequences.aides.wce[f])
|
|
974
|
+
d_gain_total = d_gain_frozen + d_gain_liquid
|
|
975
|
+
for c in range(self.parameters.control.sclass):
|
|
976
|
+
d_gain_pot = self.parameters.control.sfdist[c] * d_gain_total
|
|
977
|
+
if d_gain_pot > 0.0:
|
|
978
|
+
d_gain_max = self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t]
|
|
979
|
+
d_fraction_gain = min(d_gain_max / d_gain_pot, 1.0)
|
|
980
|
+
d_factor_gain = d_fraction_gain * self.parameters.control.sfdist[c]
|
|
981
|
+
self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_factor_gain * d_gain_frozen / self.parameters.control.sclass)
|
|
982
|
+
self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_factor_gain * d_gain_liquid / self.parameters.control.sclass)
|
|
983
|
+
self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_factor_gain * d_gain_frozen)
|
|
984
|
+
self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_factor_gain * d_gain_liquid)
|
|
985
|
+
d_factor_excess = (1.0 - d_fraction_gain) * self.parameters.control.sfdist[c]
|
|
986
|
+
self.sequences.aides.spe[t] = self.sequences.aides.spe[t] + (d_factor_excess * d_gain_frozen / self.parameters.control.sclass)
|
|
987
|
+
self.sequences.aides.wce[t] = self.sequences.aides.wce[t] + (d_factor_excess * d_gain_liquid / self.parameters.control.sclass)
|
|
988
|
+
d_excess_frozen_basin, d_excess_liquid_basin = 0.0, 0.0
|
|
989
|
+
for i in range(self.parameters.control.nmbzones):
|
|
990
|
+
if self.parameters.derived.sredend[i]:
|
|
991
|
+
d_excess_frozen_basin = d_excess_frozen_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.spe[i] + self.sequences.fluxes.spl[i]))
|
|
992
|
+
d_excess_liquid_basin = d_excess_liquid_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.wce[i] + self.sequences.fluxes.wcl[i]))
|
|
993
|
+
if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
|
|
994
|
+
return
|
|
995
|
+
for i in range(self.parameters.control.nmbzones):
|
|
996
|
+
t = self.parameters.derived.indiceszonez[i]
|
|
997
|
+
if self.parameters.control.zonetype[t] == ILAKE:
|
|
998
|
+
continue
|
|
999
|
+
d_excess_frozen_zone = d_excess_frozen_basin / self.parameters.derived.relzoneareas[t]
|
|
1000
|
+
d_excess_liquid_zone = d_excess_liquid_basin / self.parameters.derived.relzoneareas[t]
|
|
1001
|
+
d_excess_total_zone = d_excess_frozen_zone + d_excess_liquid_zone
|
|
1002
|
+
d_gain_max_cum = 0.0
|
|
1003
|
+
for c in range(self.parameters.control.sclass):
|
|
1004
|
+
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])
|
|
1005
|
+
if d_gain_max_cum <= 0.0:
|
|
1006
|
+
continue
|
|
1007
|
+
d_fraction_gain_zone = min( d_gain_max_cum / self.parameters.control.sclass / d_excess_total_zone, 1.0 )
|
|
1008
|
+
d_excess_frozen_zone_actual = d_fraction_gain_zone * d_excess_frozen_zone
|
|
1009
|
+
d_excess_liquid_zone_actual = d_fraction_gain_zone * d_excess_liquid_zone
|
|
1010
|
+
for c in range(self.parameters.control.sclass):
|
|
1011
|
+
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
|
|
1012
|
+
d_delta_sp_zone = d_fraction_gain_class * d_excess_frozen_zone_actual
|
|
1013
|
+
d_delta_wc_zone = d_fraction_gain_class * d_excess_liquid_zone_actual
|
|
1014
|
+
self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_delta_sp_zone)
|
|
1015
|
+
self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_delta_wc_zone)
|
|
1016
|
+
self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_delta_sp_zone * self.parameters.control.sclass)
|
|
1017
|
+
self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_delta_wc_zone * self.parameters.control.sclass)
|
|
1018
|
+
d_excess_frozen_basin = d_excess_frozen_basin - (d_excess_frozen_zone_actual * self.parameters.derived.relzoneareas[t])
|
|
1019
|
+
d_excess_liquid_basin = d_excess_liquid_basin - (d_excess_liquid_zone_actual * self.parameters.derived.relzoneareas[t])
|
|
1020
|
+
if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
|
|
1021
|
+
return
|
|
1022
|
+
d_excess_frozen_land = d_excess_frozen_basin / self.parameters.derived.rellandarea
|
|
1023
|
+
d_excess_liquid_land = d_excess_liquid_basin / self.parameters.derived.rellandarea
|
|
1024
|
+
for t in range(self.parameters.control.nmbzones):
|
|
1025
|
+
if self.parameters.control.zonetype[t] != ILAKE:
|
|
1026
|
+
self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_excess_frozen_land)
|
|
1027
|
+
self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_excess_liquid_land)
|
|
1028
|
+
for c in range(self.parameters.control.sclass):
|
|
1029
|
+
self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_excess_frozen_land)
|
|
1030
|
+
self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_excess_liquid_land)
|
|
1031
|
+
return
|
|
1032
|
+
cpdef inline void calc_cfact_v1(self) noexcept nogil:
|
|
1033
|
+
cdef numpy.int64_t k
|
|
1034
|
+
cdef double d_factor
|
|
1035
|
+
d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
|
|
1036
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1037
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1038
|
+
self.sequences.factors.cfact[k] = max(self.parameters.control.cfmax[k] + d_factor * self.parameters.control.cfvar[k], 0.0)
|
|
1039
|
+
else:
|
|
1040
|
+
self.sequences.factors.cfact[k] = 0.0
|
|
1041
|
+
cpdef inline void calc_melt_sp_wc_v1(self) noexcept nogil:
|
|
1042
|
+
cdef numpy.int64_t c
|
|
1043
|
+
cdef double d_potmelt
|
|
1044
|
+
cdef numpy.int64_t k
|
|
1045
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1046
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1047
|
+
if self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]:
|
|
1048
|
+
d_potmelt = self.sequences.factors.cfact[k] * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
|
|
1049
|
+
for c in range(self.parameters.control.sclass):
|
|
1050
|
+
self.sequences.fluxes.melt[c, k] = min(d_potmelt, self.sequences.states.sp[c, k])
|
|
1051
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (self.sequences.fluxes.melt[c, k])
|
|
1052
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.sequences.fluxes.melt[c, k])
|
|
1053
|
+
else:
|
|
1054
|
+
for c in range(self.parameters.control.sclass):
|
|
1055
|
+
self.sequences.fluxes.melt[c, k] = 0.0
|
|
1056
|
+
else:
|
|
1057
|
+
for c in range(self.parameters.control.sclass):
|
|
1058
|
+
self.sequences.fluxes.melt[c, k] = 0.0
|
|
1059
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1060
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
1061
|
+
cpdef inline void calc_refr_sp_wc_v1(self) noexcept nogil:
|
|
1062
|
+
cdef numpy.int64_t c
|
|
1063
|
+
cdef double d_potrefr
|
|
1064
|
+
cdef numpy.int64_t k
|
|
1065
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1066
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1067
|
+
if self.sequences.factors.tc[k] < self.parameters.derived.ttm[k]:
|
|
1068
|
+
d_potrefr = self.parameters.control.cfr[k] * self.parameters.control.cfmax[k] * (self.parameters.derived.ttm[k] - self.sequences.factors.tc[k])
|
|
1069
|
+
for c in range(self.parameters.control.sclass):
|
|
1070
|
+
self.sequences.fluxes.refr[c, k] = min(d_potrefr, self.sequences.states.wc[c, k])
|
|
1071
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.sequences.fluxes.refr[c, k])
|
|
1072
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (self.sequences.fluxes.refr[c, k])
|
|
1073
|
+
else:
|
|
1074
|
+
for c in range(self.parameters.control.sclass):
|
|
1075
|
+
self.sequences.fluxes.refr[c, k] = 0.0
|
|
1076
|
+
else:
|
|
1077
|
+
for c in range(self.parameters.control.sclass):
|
|
1078
|
+
self.sequences.fluxes.refr[c, k] = 0.0
|
|
1079
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1080
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
1081
|
+
cpdef inline void calc_in_wc_v1(self) noexcept nogil:
|
|
1082
|
+
cdef double d_wc_old
|
|
1083
|
+
cdef numpy.int64_t c
|
|
1084
|
+
cdef numpy.int64_t k
|
|
1085
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1086
|
+
self.sequences.fluxes.in_[k] = 0.0
|
|
1087
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1088
|
+
for c in range(self.parameters.control.sclass):
|
|
1089
|
+
d_wc_old = self.sequences.states.wc[c, k]
|
|
1090
|
+
self.sequences.states.wc[c, k] = min(d_wc_old, self.parameters.control.whc[k] * self.sequences.states.sp[c, k])
|
|
1091
|
+
self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + ((d_wc_old - self.sequences.states.wc[c, k]) / self.parameters.control.sclass)
|
|
1092
|
+
else:
|
|
1093
|
+
self.sequences.fluxes.in_[k] = self.sequences.fluxes.tf[k]
|
|
1094
|
+
for c in range(self.parameters.control.sclass):
|
|
1095
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1096
|
+
cpdef inline void calc_swe_v1(self) noexcept nogil:
|
|
1097
|
+
cdef numpy.int64_t c
|
|
1098
|
+
cdef numpy.int64_t k
|
|
1099
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1100
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1101
|
+
for c in range(self.parameters.control.sclass):
|
|
1102
|
+
self.sequences.factors.swe[c, k] = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
|
|
1103
|
+
else:
|
|
1104
|
+
for c in range(self.parameters.control.sclass):
|
|
1105
|
+
self.sequences.factors.swe[c, k] = 0.0
|
|
1106
|
+
cpdef inline void calc_sr_v1(self) noexcept nogil:
|
|
1107
|
+
cdef numpy.int64_t k
|
|
1108
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1109
|
+
if self.parameters.control.zonetype[k] == SEALED:
|
|
1110
|
+
self.sequences.fluxes.sr[k] = self.sequences.fluxes.in_[k]
|
|
1111
|
+
else:
|
|
1112
|
+
self.sequences.fluxes.sr[k] = 0.0
|
|
1113
|
+
cpdef inline void calc_gact_v1(self) noexcept nogil:
|
|
1114
|
+
cdef numpy.int64_t k
|
|
1115
|
+
cdef double d_factor
|
|
1116
|
+
d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
|
|
1117
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1118
|
+
if self.parameters.control.zonetype[k] == GLACIER:
|
|
1119
|
+
self.sequences.factors.gact[k] = max(self.parameters.control.gmelt[k] + d_factor * self.parameters.control.gvar[k], 0.0)
|
|
1120
|
+
else:
|
|
1121
|
+
self.sequences.factors.gact[k] = 0.0
|
|
1122
|
+
cpdef inline void calc_glmelt_in_v1(self) noexcept nogil:
|
|
1123
|
+
cdef numpy.int64_t c
|
|
1124
|
+
cdef double d_glmeltpot
|
|
1125
|
+
cdef numpy.int64_t k
|
|
1126
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1127
|
+
self.sequences.fluxes.glmelt[k] = 0.0
|
|
1128
|
+
if (self.parameters.control.zonetype[k] == GLACIER) and (self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]):
|
|
1129
|
+
d_glmeltpot = self.sequences.factors.gact[k] / self.parameters.control.sclass * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
|
|
1130
|
+
for c in range(self.parameters.control.sclass):
|
|
1131
|
+
if self.sequences.states.sp[c, k] <= 0.0:
|
|
1132
|
+
self.sequences.fluxes.glmelt[k] = self.sequences.fluxes.glmelt[k] + (d_glmeltpot)
|
|
1133
|
+
self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + (d_glmeltpot)
|
|
1134
|
+
cpdef inline void calc_ei_ic_v1(self) noexcept nogil:
|
|
1135
|
+
if self.aetmodel_typeid == 1:
|
|
1136
|
+
self.calc_ei_ic_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
|
|
1137
|
+
cpdef inline void calc_r_sm_v1(self) noexcept nogil:
|
|
1138
|
+
cdef numpy.int64_t k
|
|
1139
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1140
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST):
|
|
1141
|
+
if self.parameters.control.fc[k] > 0.0:
|
|
1142
|
+
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]
|
|
1143
|
+
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])
|
|
1144
|
+
else:
|
|
1145
|
+
self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
|
|
1146
|
+
self.sequences.states.sm[k] = self.sequences.states.sm[k] + (self.sequences.fluxes.in_[k] - self.sequences.fluxes.r[k])
|
|
1147
|
+
else:
|
|
1148
|
+
self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
|
|
1149
|
+
self.sequences.states.sm[k] = 0.0
|
|
1150
|
+
cpdef inline void calc_ea_sm_v1(self) noexcept nogil:
|
|
1151
|
+
if self.aetmodel_typeid == 1:
|
|
1152
|
+
self.calc_ea_sm_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
|
|
1153
|
+
cpdef inline void calc_qab1_qvs1_bw1_v1(self) noexcept nogil:
|
|
1154
|
+
cdef numpy.int64_t k
|
|
1155
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1156
|
+
self.sequences.fluxes.qab1[k] = 0.0
|
|
1157
|
+
self.sequences.fluxes.qvs1[k] = 0.0
|
|
1158
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1159
|
+
self.calc_qab_qvs_bw_v1( k, self.parameters.control.h1, self.parameters.control.tab1, self.parameters.control.tvs1, self.sequences.states.bw1, self.sequences.fluxes.r, self.sequences.fluxes.qab1, self.sequences.fluxes.qvs1, 0.0, )
|
|
1160
|
+
else:
|
|
1161
|
+
self.sequences.states.bw1[k] = 0.0
|
|
1162
|
+
cpdef inline void calc_qab2_qvs2_bw2_v1(self) noexcept nogil:
|
|
1163
|
+
cdef numpy.int64_t k
|
|
1164
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1165
|
+
self.sequences.fluxes.qab2[k] = 0.0
|
|
1166
|
+
self.sequences.fluxes.qvs2[k] = 0.0
|
|
1167
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1168
|
+
self.calc_qab_qvs_bw_v1( k, self.parameters.control.h2, self.parameters.control.tab2, self.parameters.control.tvs2, self.sequences.states.bw2, self.sequences.fluxes.qvs1, self.sequences.fluxes.qab2, self.sequences.fluxes.qvs2, 0.0, )
|
|
1169
|
+
else:
|
|
1170
|
+
self.sequences.states.bw2[k] = 0.0
|
|
1171
|
+
cpdef inline void calc_inrc_v3(self) noexcept nogil:
|
|
1172
|
+
cdef double d_weight
|
|
1173
|
+
cdef numpy.int64_t k
|
|
1174
|
+
self.sequences.fluxes.inrc = 0.0
|
|
1175
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1176
|
+
if self.parameters.control.zonetype[k] == ILAKE:
|
|
1177
|
+
continue
|
|
1178
|
+
d_weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellandarea
|
|
1179
|
+
if self.parameters.control.zonetype[k] == SEALED:
|
|
1180
|
+
self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (d_weight * self.sequences.fluxes.r[k])
|
|
1181
|
+
else:
|
|
1182
|
+
self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (d_weight * (self.sequences.fluxes.qab1[k] + self.sequences.fluxes.qab2[k]))
|
|
1183
|
+
cpdef inline void calc_outrc_v1(self) noexcept nogil:
|
|
1184
|
+
if self.rconcmodel is None:
|
|
1185
|
+
self.sequences.fluxes.outrc = self.sequences.fluxes.inrc
|
|
1186
|
+
elif self.rconcmodel_typeid == 1:
|
|
1187
|
+
self.calc_outrc_rconcmodel_v1( (<masterinterface.MasterInterface>self.rconcmodel) )
|
|
1188
|
+
cpdef inline void calc_lz_v2(self) noexcept nogil:
|
|
1189
|
+
cdef numpy.int64_t k
|
|
1190
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1191
|
+
if self.parameters.control.zonetype[k] == ILAKE:
|
|
1192
|
+
self.sequences.states.lz = self.sequences.states.lz + (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.pc[k])
|
|
1193
|
+
elif self.parameters.control.zonetype[k] != SEALED:
|
|
1194
|
+
self.sequences.states.lz = self.sequences.states.lz + (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.qvs2[k])
|
|
1195
|
+
cpdef inline void calc_el_lz_v1(self) noexcept nogil:
|
|
1196
|
+
if self.aetmodel_typeid == 1:
|
|
1197
|
+
self.calc_el_lz_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
|
|
1198
|
+
cpdef inline void calc_q1_lz_v1(self) noexcept nogil:
|
|
1199
|
+
if self.sequences.states.lz > 0.0:
|
|
1200
|
+
self.sequences.fluxes.q1 = self.parameters.control.k4 * self.sequences.states.lz ** (1.0 + self.parameters.control.gamma)
|
|
1201
|
+
else:
|
|
1202
|
+
self.sequences.fluxes.q1 = 0.0
|
|
1203
|
+
self.sequences.states.lz = self.sequences.states.lz - (self.sequences.fluxes.q1)
|
|
1204
|
+
cpdef inline void calc_rt_v2(self) noexcept nogil:
|
|
1205
|
+
self.sequences.fluxes.rt = self.parameters.derived.rellandarea * self.sequences.fluxes.outrc + self.parameters.derived.rellowerzonearea * self.sequences.fluxes.q1
|
|
1206
|
+
cpdef inline void calc_qt_v1(self) noexcept nogil:
|
|
1207
|
+
self.sequences.fluxes.qt = self.parameters.derived.qfactor * self.sequences.fluxes.rt
|
|
1208
|
+
cpdef double get_temperature_v1(self, numpy.int64_t s) noexcept nogil:
|
|
1209
|
+
return self.sequences.factors.tc[s]
|
|
1210
|
+
cpdef double get_meantemperature_v1(self) noexcept nogil:
|
|
1211
|
+
return self.sequences.inputs.t
|
|
1212
|
+
cpdef double get_precipitation_v1(self, numpy.int64_t s) noexcept nogil:
|
|
1213
|
+
return self.sequences.fluxes.pc[s]
|
|
1214
|
+
cpdef double get_interceptedwater_v1(self, numpy.int64_t k) noexcept nogil:
|
|
1215
|
+
return self.sequences.states.ic[k]
|
|
1216
|
+
cpdef double get_soilwater_v1(self, numpy.int64_t k) noexcept nogil:
|
|
1217
|
+
return self.sequences.states.sm[k]
|
|
1218
|
+
cpdef double get_snowcover_v1(self, numpy.int64_t k) noexcept nogil:
|
|
1219
|
+
cdef numpy.int64_t c
|
|
1220
|
+
cdef double snowcovered
|
|
1221
|
+
snowcovered = 0.0
|
|
1222
|
+
for c in range(self.parameters.control.sclass):
|
|
1223
|
+
snowcovered = snowcovered + (self.sequences.states.sp[c, k] > 0.0)
|
|
1224
|
+
return snowcovered / self.parameters.control.sclass
|
|
1225
|
+
cpdef inline void calc_ei_ic_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1226
|
+
cdef numpy.int64_t k
|
|
1227
|
+
submodel.determine_interceptionevaporation()
|
|
1228
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1229
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
|
|
1230
|
+
self.sequences.fluxes.ei[k] = min(submodel.get_interceptionevaporation(k), self.sequences.states.ic[k])
|
|
1231
|
+
self.sequences.states.ic[k] = self.sequences.states.ic[k] - (self.sequences.fluxes.ei[k])
|
|
1232
|
+
else:
|
|
1233
|
+
self.sequences.fluxes.ei[k] = 0.0
|
|
1234
|
+
self.sequences.states.ic[k] = 0.0
|
|
1235
|
+
cpdef inline void calc_ea_sm_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1236
|
+
cdef numpy.int64_t k
|
|
1237
|
+
submodel.determine_soilevapotranspiration()
|
|
1238
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1239
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST):
|
|
1240
|
+
self.sequences.fluxes.ea[k] = min(submodel.get_soilevapotranspiration(k), self.sequences.states.sm[k])
|
|
1241
|
+
self.sequences.states.sm[k] = self.sequences.states.sm[k] - (self.sequences.fluxes.ea[k])
|
|
1242
|
+
if self.sequences.states.sm[k] > self.parameters.control.fc[k]:
|
|
1243
|
+
self.sequences.fluxes.r[k] = self.sequences.fluxes.r[k] + (self.sequences.states.sm[k] - self.parameters.control.fc[k])
|
|
1244
|
+
self.sequences.states.sm[k] = self.parameters.control.fc[k]
|
|
1245
|
+
else:
|
|
1246
|
+
self.sequences.fluxes.ea[k] = 0.0
|
|
1247
|
+
self.sequences.states.sm[k] = 0.0
|
|
1248
|
+
cpdef inline void calc_el_lz_aetmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1249
|
+
cdef numpy.int64_t k
|
|
1250
|
+
submodel.determine_waterevaporation()
|
|
1251
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1252
|
+
if self.parameters.control.zonetype[k] == ILAKE:
|
|
1253
|
+
self.sequences.fluxes.el[k] = submodel.get_waterevaporation(k)
|
|
1254
|
+
self.sequences.states.lz = self.sequences.states.lz - (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.el[k])
|
|
1255
|
+
else:
|
|
1256
|
+
self.sequences.fluxes.el[k] = 0.0
|
|
1257
|
+
cpdef inline void calc_qab_qvs_bw_v1(self, numpy.int64_t k, double[:] h, double[:] k1, double[:] k2, double[:] s0, double[:] qz, double[:] qa1, double[:] qa2, double t0) noexcept nogil:
|
|
1258
|
+
cdef double d_qa1
|
|
1259
|
+
cdef double d_v4
|
|
1260
|
+
cdef double d_v3
|
|
1261
|
+
cdef double d_denom
|
|
1262
|
+
cdef double d_nom
|
|
1263
|
+
cdef double d_v2
|
|
1264
|
+
cdef double d_v1
|
|
1265
|
+
cdef double d_k2qz
|
|
1266
|
+
cdef double d_t1
|
|
1267
|
+
cdef double d_dt
|
|
1268
|
+
cdef double d_qa2
|
|
1269
|
+
cdef double d_s0
|
|
1270
|
+
cdef double d_qz
|
|
1271
|
+
cdef double d_k2
|
|
1272
|
+
cdef double d_k1
|
|
1273
|
+
cdef double d_h
|
|
1274
|
+
d_h = h[k]
|
|
1275
|
+
d_k1 = k1[k]
|
|
1276
|
+
d_k2 = k2[k]
|
|
1277
|
+
d_qz = qz[k]
|
|
1278
|
+
d_s0 = s0[k]
|
|
1279
|
+
if (d_k1 == 0.0) and (d_s0 > d_h):
|
|
1280
|
+
qa1[k] = qa1[k] + (d_s0 - d_h)
|
|
1281
|
+
s0[k] = d_s0 = d_h
|
|
1282
|
+
if (d_k1 == 0.0) and (d_s0 == d_h) and (d_qz > d_h / d_k2):
|
|
1283
|
+
d_qa2 = d_h / d_k2
|
|
1284
|
+
d_dt = 1.0 - t0
|
|
1285
|
+
qa2[k] = qa2[k] + (d_dt * d_qa2)
|
|
1286
|
+
qa1[k] = qa1[k] + (d_dt * (d_qz - d_qa2))
|
|
1287
|
+
elif d_k2 == 0.0:
|
|
1288
|
+
qa2[k] = qa2[k] + (d_s0 + d_qz)
|
|
1289
|
+
s0[k] = 0.0
|
|
1290
|
+
elif (d_s0 < d_h) or (d_s0 == d_h and d_qz <= d_h / d_k2):
|
|
1291
|
+
if (d_s0 == d_h) or (d_qz <= d_h / d_k2):
|
|
1292
|
+
d_t1 = 1.0
|
|
1293
|
+
elif isinf(d_k2):
|
|
1294
|
+
d_t1 = (d_h - d_s0) / d_qz
|
|
1295
|
+
else:
|
|
1296
|
+
d_t1 = t0 + d_k2 * log( (d_qz - d_s0 / d_k2) / (d_qz - d_h / d_k2) )
|
|
1297
|
+
if 0.0 < d_t1 < 1.0:
|
|
1298
|
+
qa2[k] = qa2[k] + ((d_t1 - t0) * d_qz - (d_h - d_s0))
|
|
1299
|
+
s0[k] = d_h
|
|
1300
|
+
self.calc_qab_qvs_bw_v1(k, h, k1, k2, s0, qz, qa1, qa2, d_t1)
|
|
1301
|
+
elif isinf(d_k2):
|
|
1302
|
+
s0[k] = s0[k] + ((1.0 - t0) * d_qz)
|
|
1303
|
+
else:
|
|
1304
|
+
d_dt = 1.0 - t0
|
|
1305
|
+
d_k2qz = d_k2 * d_qz
|
|
1306
|
+
s0[k] = d_k2qz - (d_k2qz - d_s0) * exp(-d_dt / d_k2)
|
|
1307
|
+
qa2[k] = qa2[k] + (d_s0 - s0[k] + d_dt * d_qz)
|
|
1308
|
+
else:
|
|
1309
|
+
d_v1 = 1.0 / d_k1 + 1.0 / d_k2
|
|
1310
|
+
d_v2 = d_qz + d_h / d_k1
|
|
1311
|
+
d_nom = d_v2 - d_h * d_v1
|
|
1312
|
+
d_denom = d_v2 - d_s0 * d_v1
|
|
1313
|
+
if (d_s0 == d_h) or (d_denom == 0.0) or (not 0 < d_nom / d_denom <= 1):
|
|
1314
|
+
d_t1 = 1.0
|
|
1315
|
+
else:
|
|
1316
|
+
d_t1 = t0 - 1.0 / d_v1 * log(d_nom / d_denom)
|
|
1317
|
+
d_t1 = min(d_t1, 1.0)
|
|
1318
|
+
d_dt = d_t1 - t0
|
|
1319
|
+
d_v3 = (d_v2 * d_dt) / d_v1
|
|
1320
|
+
d_v4 = d_denom / d_v1**2 * (1.0 - exp(-d_dt * d_v1))
|
|
1321
|
+
d_qa1 = (d_v3 - d_v4 - d_h * d_dt) / d_k1
|
|
1322
|
+
d_qa2 = (d_v3 - d_v4) / d_k2
|
|
1323
|
+
qa1[k] = qa1[k] + (d_qa1)
|
|
1324
|
+
qa2[k] = qa2[k] + (d_qa2)
|
|
1325
|
+
if d_t1 == 1.0:
|
|
1326
|
+
s0[k] = s0[k] + (d_dt * d_qz - d_qa1 - d_qa2)
|
|
1327
|
+
else:
|
|
1328
|
+
s0[k] = d_h
|
|
1329
|
+
if d_t1 < 1.0:
|
|
1330
|
+
self.calc_qab_qvs_bw_v1(k, h, k1, k2, s0, qz, qa1, qa2, d_t1)
|
|
1331
|
+
cpdef inline void calc_outrc_rconcmodel_v1(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1332
|
+
submodel.set_inflow(self.sequences.fluxes.inrc)
|
|
1333
|
+
submodel.determine_outflow()
|
|
1334
|
+
self.sequences.fluxes.outrc = submodel.get_outflow()
|
|
1335
|
+
cpdef inline void pass_q_v1(self) noexcept nogil:
|
|
1336
|
+
self.sequences.outlets.q[0] = self.sequences.outlets.q[0] + (self.sequences.fluxes.qt)
|
|
1337
|
+
cpdef inline void calc_tc(self) noexcept nogil:
|
|
1338
|
+
cdef numpy.int64_t k
|
|
1339
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1340
|
+
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)
|
|
1341
|
+
cpdef inline void calc_fracrain(self) noexcept nogil:
|
|
1342
|
+
cdef double d_dt
|
|
1343
|
+
cdef numpy.int64_t k
|
|
1344
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1345
|
+
d_dt = self.parameters.control.ttint[k] / 2.0
|
|
1346
|
+
if self.sequences.factors.tc[k] >= (self.parameters.control.tt[k] + d_dt):
|
|
1347
|
+
self.sequences.factors.fracrain[k] = 1.0
|
|
1348
|
+
elif self.sequences.factors.tc[k] <= (self.parameters.control.tt[k] - d_dt):
|
|
1349
|
+
self.sequences.factors.fracrain[k] = 0.0
|
|
1350
|
+
else:
|
|
1351
|
+
self.sequences.factors.fracrain[k] = (self.sequences.factors.tc[k] - (self.parameters.control.tt[k] - d_dt)) / self.parameters.control.ttint[k]
|
|
1352
|
+
cpdef inline void calc_rfc_sfc(self) noexcept nogil:
|
|
1353
|
+
cdef numpy.int64_t k
|
|
1354
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1355
|
+
self.sequences.factors.rfc[k] = self.sequences.factors.fracrain[k] * self.parameters.control.rfcf[k]
|
|
1356
|
+
self.sequences.factors.sfc[k] = (1.0 - self.sequences.factors.fracrain[k]) * self.parameters.control.sfcf[k]
|
|
1357
|
+
cpdef inline void calc_pc(self) noexcept nogil:
|
|
1358
|
+
cdef numpy.int64_t k
|
|
1359
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1360
|
+
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))
|
|
1361
|
+
if self.sequences.fluxes.pc[k] <= 0.0:
|
|
1362
|
+
self.sequences.fluxes.pc[k] = 0.0
|
|
1363
|
+
else:
|
|
1364
|
+
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]))
|
|
1365
|
+
cpdef inline void calc_tf_ic(self) noexcept nogil:
|
|
1366
|
+
cdef numpy.int64_t k
|
|
1367
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1368
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
|
|
1369
|
+
self.sequences.fluxes.tf[k] = max(self.sequences.fluxes.pc[k] - (self.parameters.control.icmax[k] - self.sequences.states.ic[k]), 0.0)
|
|
1370
|
+
self.sequences.states.ic[k] = self.sequences.states.ic[k] + (self.sequences.fluxes.pc[k] - self.sequences.fluxes.tf[k])
|
|
1371
|
+
else:
|
|
1372
|
+
self.sequences.fluxes.tf[k] = self.sequences.fluxes.pc[k]
|
|
1373
|
+
self.sequences.states.ic[k] = 0.0
|
|
1374
|
+
cpdef inline void calc_sp_wc(self) noexcept nogil:
|
|
1375
|
+
cdef numpy.int64_t c
|
|
1376
|
+
cdef double d_snow
|
|
1377
|
+
cdef double d_rain
|
|
1378
|
+
cdef double d_denom
|
|
1379
|
+
cdef numpy.int64_t k
|
|
1380
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1381
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1382
|
+
d_denom = self.sequences.factors.rfc[k] + self.sequences.factors.sfc[k]
|
|
1383
|
+
if d_denom > 0.0:
|
|
1384
|
+
d_rain = self.sequences.fluxes.tf[k] * self.sequences.factors.rfc[k] / d_denom
|
|
1385
|
+
d_snow = self.sequences.fluxes.tf[k] * self.sequences.factors.sfc[k] / d_denom
|
|
1386
|
+
for c in range(self.parameters.control.sclass):
|
|
1387
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.parameters.control.sfdist[c] * d_rain)
|
|
1388
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.parameters.control.sfdist[c] * d_snow)
|
|
1389
|
+
else:
|
|
1390
|
+
for c in range(self.parameters.control.sclass):
|
|
1391
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1392
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
1393
|
+
cpdef inline void calc_spl_wcl_sp_wc(self) noexcept nogil:
|
|
1394
|
+
cdef double d_excess_wc
|
|
1395
|
+
cdef double d_excess_sp
|
|
1396
|
+
cdef double d_excess
|
|
1397
|
+
cdef double d_snow
|
|
1398
|
+
cdef numpy.int64_t c
|
|
1399
|
+
cdef numpy.int64_t k
|
|
1400
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1401
|
+
self.sequences.fluxes.spl[k] = 0.0
|
|
1402
|
+
self.sequences.fluxes.wcl[k] = 0.0
|
|
1403
|
+
if self.parameters.control.zonetype[k] == ILAKE:
|
|
1404
|
+
for c in range(self.parameters.control.sclass):
|
|
1405
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
1406
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1407
|
+
elif not isinf(self.parameters.control.smax[k]):
|
|
1408
|
+
for c in range(self.parameters.control.sclass):
|
|
1409
|
+
d_snow = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
|
|
1410
|
+
d_excess = d_snow - self.parameters.control.smax[k]
|
|
1411
|
+
if d_excess > 0.0:
|
|
1412
|
+
d_excess_sp = d_excess * self.sequences.states.sp[c, k] / d_snow
|
|
1413
|
+
d_excess_wc = d_excess * self.sequences.states.wc[c, k] / d_snow
|
|
1414
|
+
self.sequences.fluxes.spl[k] = self.sequences.fluxes.spl[k] + (d_excess_sp / self.parameters.control.sclass)
|
|
1415
|
+
self.sequences.fluxes.wcl[k] = self.sequences.fluxes.wcl[k] + (d_excess_wc / self.parameters.control.sclass)
|
|
1416
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (d_excess_sp)
|
|
1417
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (d_excess_wc)
|
|
1418
|
+
cpdef inline void calc_spg_wcg_sp_wc(self) noexcept nogil:
|
|
1419
|
+
cdef double d_excess_liquid_land
|
|
1420
|
+
cdef double d_excess_frozen_land
|
|
1421
|
+
cdef double d_delta_wc_zone
|
|
1422
|
+
cdef double d_delta_sp_zone
|
|
1423
|
+
cdef double d_fraction_gain_class
|
|
1424
|
+
cdef double d_excess_liquid_zone_actual
|
|
1425
|
+
cdef double d_excess_frozen_zone_actual
|
|
1426
|
+
cdef double d_fraction_gain_zone
|
|
1427
|
+
cdef double d_gain_max_cum
|
|
1428
|
+
cdef double d_excess_total_zone
|
|
1429
|
+
cdef double d_excess_liquid_zone
|
|
1430
|
+
cdef double d_excess_frozen_zone
|
|
1431
|
+
cdef double d_excess_liquid_basin
|
|
1432
|
+
cdef double d_excess_frozen_basin
|
|
1433
|
+
cdef double d_factor_excess
|
|
1434
|
+
cdef double d_factor_gain
|
|
1435
|
+
cdef double d_fraction_gain
|
|
1436
|
+
cdef double d_gain_max
|
|
1437
|
+
cdef double d_gain_pot
|
|
1438
|
+
cdef double d_gain_total
|
|
1439
|
+
cdef double d_gain_liquid
|
|
1440
|
+
cdef double d_gain_frozen
|
|
1441
|
+
cdef double d_f
|
|
1442
|
+
cdef numpy.int64_t t
|
|
1443
|
+
cdef numpy.int64_t f
|
|
1444
|
+
cdef numpy.int64_t c
|
|
1445
|
+
cdef numpy.int64_t i
|
|
1446
|
+
for i in range(self.parameters.control.nmbzones):
|
|
1447
|
+
self.sequences.fluxes.spg[i] = 0.0
|
|
1448
|
+
self.sequences.fluxes.wcg[i] = 0.0
|
|
1449
|
+
self.sequences.aides.spe[i] = 0.0
|
|
1450
|
+
self.sequences.aides.wce[i] = 0.0
|
|
1451
|
+
if self.parameters.control.zonetype[i] == ILAKE:
|
|
1452
|
+
for c in range(self.parameters.control.sclass):
|
|
1453
|
+
self.sequences.states.sp[c, i] = 0.0
|
|
1454
|
+
self.sequences.states.wc[c, i] = 0.0
|
|
1455
|
+
for i in range(self.parameters.derived.srednumber):
|
|
1456
|
+
f, t = self.parameters.derived.sredorder[i, 0], self.parameters.derived.sredorder[i, 1]
|
|
1457
|
+
d_f = self.parameters.derived.zonearearatios[f, t] * self.parameters.control.sred[f, t]
|
|
1458
|
+
d_gain_frozen = d_f * (self.sequences.fluxes.spl[f] + self.sequences.aides.spe[f])
|
|
1459
|
+
d_gain_liquid = d_f * (self.sequences.fluxes.wcl[f] + self.sequences.aides.wce[f])
|
|
1460
|
+
d_gain_total = d_gain_frozen + d_gain_liquid
|
|
1461
|
+
for c in range(self.parameters.control.sclass):
|
|
1462
|
+
d_gain_pot = self.parameters.control.sfdist[c] * d_gain_total
|
|
1463
|
+
if d_gain_pot > 0.0:
|
|
1464
|
+
d_gain_max = self.parameters.control.smax[t] - self.sequences.states.sp[c, t] - self.sequences.states.wc[c, t]
|
|
1465
|
+
d_fraction_gain = min(d_gain_max / d_gain_pot, 1.0)
|
|
1466
|
+
d_factor_gain = d_fraction_gain * self.parameters.control.sfdist[c]
|
|
1467
|
+
self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_factor_gain * d_gain_frozen / self.parameters.control.sclass)
|
|
1468
|
+
self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_factor_gain * d_gain_liquid / self.parameters.control.sclass)
|
|
1469
|
+
self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_factor_gain * d_gain_frozen)
|
|
1470
|
+
self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_factor_gain * d_gain_liquid)
|
|
1471
|
+
d_factor_excess = (1.0 - d_fraction_gain) * self.parameters.control.sfdist[c]
|
|
1472
|
+
self.sequences.aides.spe[t] = self.sequences.aides.spe[t] + (d_factor_excess * d_gain_frozen / self.parameters.control.sclass)
|
|
1473
|
+
self.sequences.aides.wce[t] = self.sequences.aides.wce[t] + (d_factor_excess * d_gain_liquid / self.parameters.control.sclass)
|
|
1474
|
+
d_excess_frozen_basin, d_excess_liquid_basin = 0.0, 0.0
|
|
1475
|
+
for i in range(self.parameters.control.nmbzones):
|
|
1476
|
+
if self.parameters.derived.sredend[i]:
|
|
1477
|
+
d_excess_frozen_basin = d_excess_frozen_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.spe[i] + self.sequences.fluxes.spl[i]))
|
|
1478
|
+
d_excess_liquid_basin = d_excess_liquid_basin + (self.parameters.derived.relzoneareas[i] * (self.sequences.aides.wce[i] + self.sequences.fluxes.wcl[i]))
|
|
1479
|
+
if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
|
|
1480
|
+
return
|
|
1481
|
+
for i in range(self.parameters.control.nmbzones):
|
|
1482
|
+
t = self.parameters.derived.indiceszonez[i]
|
|
1483
|
+
if self.parameters.control.zonetype[t] == ILAKE:
|
|
1484
|
+
continue
|
|
1485
|
+
d_excess_frozen_zone = d_excess_frozen_basin / self.parameters.derived.relzoneareas[t]
|
|
1486
|
+
d_excess_liquid_zone = d_excess_liquid_basin / self.parameters.derived.relzoneareas[t]
|
|
1487
|
+
d_excess_total_zone = d_excess_frozen_zone + d_excess_liquid_zone
|
|
1488
|
+
d_gain_max_cum = 0.0
|
|
1489
|
+
for c in range(self.parameters.control.sclass):
|
|
1490
|
+
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])
|
|
1491
|
+
if d_gain_max_cum <= 0.0:
|
|
1492
|
+
continue
|
|
1493
|
+
d_fraction_gain_zone = min( d_gain_max_cum / self.parameters.control.sclass / d_excess_total_zone, 1.0 )
|
|
1494
|
+
d_excess_frozen_zone_actual = d_fraction_gain_zone * d_excess_frozen_zone
|
|
1495
|
+
d_excess_liquid_zone_actual = d_fraction_gain_zone * d_excess_liquid_zone
|
|
1496
|
+
for c in range(self.parameters.control.sclass):
|
|
1497
|
+
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
|
|
1498
|
+
d_delta_sp_zone = d_fraction_gain_class * d_excess_frozen_zone_actual
|
|
1499
|
+
d_delta_wc_zone = d_fraction_gain_class * d_excess_liquid_zone_actual
|
|
1500
|
+
self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_delta_sp_zone)
|
|
1501
|
+
self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_delta_wc_zone)
|
|
1502
|
+
self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_delta_sp_zone * self.parameters.control.sclass)
|
|
1503
|
+
self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_delta_wc_zone * self.parameters.control.sclass)
|
|
1504
|
+
d_excess_frozen_basin = d_excess_frozen_basin - (d_excess_frozen_zone_actual * self.parameters.derived.relzoneareas[t])
|
|
1505
|
+
d_excess_liquid_basin = d_excess_liquid_basin - (d_excess_liquid_zone_actual * self.parameters.derived.relzoneareas[t])
|
|
1506
|
+
if (d_excess_frozen_basin + d_excess_liquid_basin) <= 0.0:
|
|
1507
|
+
return
|
|
1508
|
+
d_excess_frozen_land = d_excess_frozen_basin / self.parameters.derived.rellandarea
|
|
1509
|
+
d_excess_liquid_land = d_excess_liquid_basin / self.parameters.derived.rellandarea
|
|
1510
|
+
for t in range(self.parameters.control.nmbzones):
|
|
1511
|
+
if self.parameters.control.zonetype[t] != ILAKE:
|
|
1512
|
+
self.sequences.fluxes.spg[t] = self.sequences.fluxes.spg[t] + (d_excess_frozen_land)
|
|
1513
|
+
self.sequences.fluxes.wcg[t] = self.sequences.fluxes.wcg[t] + (d_excess_liquid_land)
|
|
1514
|
+
for c in range(self.parameters.control.sclass):
|
|
1515
|
+
self.sequences.states.sp[c, t] = self.sequences.states.sp[c, t] + (d_excess_frozen_land)
|
|
1516
|
+
self.sequences.states.wc[c, t] = self.sequences.states.wc[c, t] + (d_excess_liquid_land)
|
|
1517
|
+
return
|
|
1518
|
+
cpdef inline void calc_cfact(self) noexcept nogil:
|
|
1519
|
+
cdef numpy.int64_t k
|
|
1520
|
+
cdef double d_factor
|
|
1521
|
+
d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
|
|
1522
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1523
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1524
|
+
self.sequences.factors.cfact[k] = max(self.parameters.control.cfmax[k] + d_factor * self.parameters.control.cfvar[k], 0.0)
|
|
1525
|
+
else:
|
|
1526
|
+
self.sequences.factors.cfact[k] = 0.0
|
|
1527
|
+
cpdef inline void calc_melt_sp_wc(self) noexcept nogil:
|
|
1528
|
+
cdef numpy.int64_t c
|
|
1529
|
+
cdef double d_potmelt
|
|
1530
|
+
cdef numpy.int64_t k
|
|
1531
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1532
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1533
|
+
if self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]:
|
|
1534
|
+
d_potmelt = self.sequences.factors.cfact[k] * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
|
|
1535
|
+
for c in range(self.parameters.control.sclass):
|
|
1536
|
+
self.sequences.fluxes.melt[c, k] = min(d_potmelt, self.sequences.states.sp[c, k])
|
|
1537
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] - (self.sequences.fluxes.melt[c, k])
|
|
1538
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] + (self.sequences.fluxes.melt[c, k])
|
|
1539
|
+
else:
|
|
1540
|
+
for c in range(self.parameters.control.sclass):
|
|
1541
|
+
self.sequences.fluxes.melt[c, k] = 0.0
|
|
1542
|
+
else:
|
|
1543
|
+
for c in range(self.parameters.control.sclass):
|
|
1544
|
+
self.sequences.fluxes.melt[c, k] = 0.0
|
|
1545
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1546
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
1547
|
+
cpdef inline void calc_refr_sp_wc(self) noexcept nogil:
|
|
1548
|
+
cdef numpy.int64_t c
|
|
1549
|
+
cdef double d_potrefr
|
|
1550
|
+
cdef numpy.int64_t k
|
|
1551
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1552
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1553
|
+
if self.sequences.factors.tc[k] < self.parameters.derived.ttm[k]:
|
|
1554
|
+
d_potrefr = self.parameters.control.cfr[k] * self.parameters.control.cfmax[k] * (self.parameters.derived.ttm[k] - self.sequences.factors.tc[k])
|
|
1555
|
+
for c in range(self.parameters.control.sclass):
|
|
1556
|
+
self.sequences.fluxes.refr[c, k] = min(d_potrefr, self.sequences.states.wc[c, k])
|
|
1557
|
+
self.sequences.states.sp[c, k] = self.sequences.states.sp[c, k] + (self.sequences.fluxes.refr[c, k])
|
|
1558
|
+
self.sequences.states.wc[c, k] = self.sequences.states.wc[c, k] - (self.sequences.fluxes.refr[c, k])
|
|
1559
|
+
else:
|
|
1560
|
+
for c in range(self.parameters.control.sclass):
|
|
1561
|
+
self.sequences.fluxes.refr[c, k] = 0.0
|
|
1562
|
+
else:
|
|
1563
|
+
for c in range(self.parameters.control.sclass):
|
|
1564
|
+
self.sequences.fluxes.refr[c, k] = 0.0
|
|
1565
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1566
|
+
self.sequences.states.sp[c, k] = 0.0
|
|
1567
|
+
cpdef inline void calc_in_wc(self) noexcept nogil:
|
|
1568
|
+
cdef double d_wc_old
|
|
1569
|
+
cdef numpy.int64_t c
|
|
1570
|
+
cdef numpy.int64_t k
|
|
1571
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1572
|
+
self.sequences.fluxes.in_[k] = 0.0
|
|
1573
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1574
|
+
for c in range(self.parameters.control.sclass):
|
|
1575
|
+
d_wc_old = self.sequences.states.wc[c, k]
|
|
1576
|
+
self.sequences.states.wc[c, k] = min(d_wc_old, self.parameters.control.whc[k] * self.sequences.states.sp[c, k])
|
|
1577
|
+
self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + ((d_wc_old - self.sequences.states.wc[c, k]) / self.parameters.control.sclass)
|
|
1578
|
+
else:
|
|
1579
|
+
self.sequences.fluxes.in_[k] = self.sequences.fluxes.tf[k]
|
|
1580
|
+
for c in range(self.parameters.control.sclass):
|
|
1581
|
+
self.sequences.states.wc[c, k] = 0.0
|
|
1582
|
+
cpdef inline void calc_swe(self) noexcept nogil:
|
|
1583
|
+
cdef numpy.int64_t c
|
|
1584
|
+
cdef numpy.int64_t k
|
|
1585
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1586
|
+
if self.parameters.control.zonetype[k] != ILAKE:
|
|
1587
|
+
for c in range(self.parameters.control.sclass):
|
|
1588
|
+
self.sequences.factors.swe[c, k] = self.sequences.states.sp[c, k] + self.sequences.states.wc[c, k]
|
|
1589
|
+
else:
|
|
1590
|
+
for c in range(self.parameters.control.sclass):
|
|
1591
|
+
self.sequences.factors.swe[c, k] = 0.0
|
|
1592
|
+
cpdef inline void calc_sr(self) noexcept nogil:
|
|
1593
|
+
cdef numpy.int64_t k
|
|
1594
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1595
|
+
if self.parameters.control.zonetype[k] == SEALED:
|
|
1596
|
+
self.sequences.fluxes.sr[k] = self.sequences.fluxes.in_[k]
|
|
1597
|
+
else:
|
|
1598
|
+
self.sequences.fluxes.sr[k] = 0.0
|
|
1599
|
+
cpdef inline void calc_gact(self) noexcept nogil:
|
|
1600
|
+
cdef numpy.int64_t k
|
|
1601
|
+
cdef double d_factor
|
|
1602
|
+
d_factor = 0.5 * sin( 2 * self.parameters.fixed.pi * (self.parameters.derived.doy[self.idx_sim] + 1) / 366 - 1.39 )
|
|
1603
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1604
|
+
if self.parameters.control.zonetype[k] == GLACIER:
|
|
1605
|
+
self.sequences.factors.gact[k] = max(self.parameters.control.gmelt[k] + d_factor * self.parameters.control.gvar[k], 0.0)
|
|
1606
|
+
else:
|
|
1607
|
+
self.sequences.factors.gact[k] = 0.0
|
|
1608
|
+
cpdef inline void calc_glmelt_in(self) noexcept nogil:
|
|
1609
|
+
cdef numpy.int64_t c
|
|
1610
|
+
cdef double d_glmeltpot
|
|
1611
|
+
cdef numpy.int64_t k
|
|
1612
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1613
|
+
self.sequences.fluxes.glmelt[k] = 0.0
|
|
1614
|
+
if (self.parameters.control.zonetype[k] == GLACIER) and (self.sequences.factors.tc[k] > self.parameters.derived.ttm[k]):
|
|
1615
|
+
d_glmeltpot = self.sequences.factors.gact[k] / self.parameters.control.sclass * (self.sequences.factors.tc[k] - self.parameters.derived.ttm[k])
|
|
1616
|
+
for c in range(self.parameters.control.sclass):
|
|
1617
|
+
if self.sequences.states.sp[c, k] <= 0.0:
|
|
1618
|
+
self.sequences.fluxes.glmelt[k] = self.sequences.fluxes.glmelt[k] + (d_glmeltpot)
|
|
1619
|
+
self.sequences.fluxes.in_[k] = self.sequences.fluxes.in_[k] + (d_glmeltpot)
|
|
1620
|
+
cpdef inline void calc_ei_ic(self) noexcept nogil:
|
|
1621
|
+
if self.aetmodel_typeid == 1:
|
|
1622
|
+
self.calc_ei_ic_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
|
|
1623
|
+
cpdef inline void calc_r_sm(self) noexcept nogil:
|
|
1624
|
+
cdef numpy.int64_t k
|
|
1625
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1626
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST):
|
|
1627
|
+
if self.parameters.control.fc[k] > 0.0:
|
|
1628
|
+
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]
|
|
1629
|
+
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])
|
|
1630
|
+
else:
|
|
1631
|
+
self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
|
|
1632
|
+
self.sequences.states.sm[k] = self.sequences.states.sm[k] + (self.sequences.fluxes.in_[k] - self.sequences.fluxes.r[k])
|
|
1633
|
+
else:
|
|
1634
|
+
self.sequences.fluxes.r[k] = self.sequences.fluxes.in_[k]
|
|
1635
|
+
self.sequences.states.sm[k] = 0.0
|
|
1636
|
+
cpdef inline void calc_ea_sm(self) noexcept nogil:
|
|
1637
|
+
if self.aetmodel_typeid == 1:
|
|
1638
|
+
self.calc_ea_sm_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
|
|
1639
|
+
cpdef inline void calc_qab1_qvs1_bw1(self) noexcept nogil:
|
|
1640
|
+
cdef numpy.int64_t k
|
|
1641
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1642
|
+
self.sequences.fluxes.qab1[k] = 0.0
|
|
1643
|
+
self.sequences.fluxes.qvs1[k] = 0.0
|
|
1644
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1645
|
+
self.calc_qab_qvs_bw_v1( k, self.parameters.control.h1, self.parameters.control.tab1, self.parameters.control.tvs1, self.sequences.states.bw1, self.sequences.fluxes.r, self.sequences.fluxes.qab1, self.sequences.fluxes.qvs1, 0.0, )
|
|
1646
|
+
else:
|
|
1647
|
+
self.sequences.states.bw1[k] = 0.0
|
|
1648
|
+
cpdef inline void calc_qab2_qvs2_bw2(self) noexcept nogil:
|
|
1649
|
+
cdef numpy.int64_t k
|
|
1650
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1651
|
+
self.sequences.fluxes.qab2[k] = 0.0
|
|
1652
|
+
self.sequences.fluxes.qvs2[k] = 0.0
|
|
1653
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, GLACIER):
|
|
1654
|
+
self.calc_qab_qvs_bw_v1( k, self.parameters.control.h2, self.parameters.control.tab2, self.parameters.control.tvs2, self.sequences.states.bw2, self.sequences.fluxes.qvs1, self.sequences.fluxes.qab2, self.sequences.fluxes.qvs2, 0.0, )
|
|
1655
|
+
else:
|
|
1656
|
+
self.sequences.states.bw2[k] = 0.0
|
|
1657
|
+
cpdef inline void calc_inrc(self) noexcept nogil:
|
|
1658
|
+
cdef double d_weight
|
|
1659
|
+
cdef numpy.int64_t k
|
|
1660
|
+
self.sequences.fluxes.inrc = 0.0
|
|
1661
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1662
|
+
if self.parameters.control.zonetype[k] == ILAKE:
|
|
1663
|
+
continue
|
|
1664
|
+
d_weight = self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellandarea
|
|
1665
|
+
if self.parameters.control.zonetype[k] == SEALED:
|
|
1666
|
+
self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (d_weight * self.sequences.fluxes.r[k])
|
|
1667
|
+
else:
|
|
1668
|
+
self.sequences.fluxes.inrc = self.sequences.fluxes.inrc + (d_weight * (self.sequences.fluxes.qab1[k] + self.sequences.fluxes.qab2[k]))
|
|
1669
|
+
cpdef inline void calc_outrc(self) noexcept nogil:
|
|
1670
|
+
if self.rconcmodel is None:
|
|
1671
|
+
self.sequences.fluxes.outrc = self.sequences.fluxes.inrc
|
|
1672
|
+
elif self.rconcmodel_typeid == 1:
|
|
1673
|
+
self.calc_outrc_rconcmodel_v1( (<masterinterface.MasterInterface>self.rconcmodel) )
|
|
1674
|
+
cpdef inline void calc_lz(self) noexcept nogil:
|
|
1675
|
+
cdef numpy.int64_t k
|
|
1676
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1677
|
+
if self.parameters.control.zonetype[k] == ILAKE:
|
|
1678
|
+
self.sequences.states.lz = self.sequences.states.lz + (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.pc[k])
|
|
1679
|
+
elif self.parameters.control.zonetype[k] != SEALED:
|
|
1680
|
+
self.sequences.states.lz = self.sequences.states.lz + (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.qvs2[k])
|
|
1681
|
+
cpdef inline void calc_el_lz(self) noexcept nogil:
|
|
1682
|
+
if self.aetmodel_typeid == 1:
|
|
1683
|
+
self.calc_el_lz_aetmodel_v1( (<masterinterface.MasterInterface>self.aetmodel) )
|
|
1684
|
+
cpdef inline void calc_q1_lz(self) noexcept nogil:
|
|
1685
|
+
if self.sequences.states.lz > 0.0:
|
|
1686
|
+
self.sequences.fluxes.q1 = self.parameters.control.k4 * self.sequences.states.lz ** (1.0 + self.parameters.control.gamma)
|
|
1687
|
+
else:
|
|
1688
|
+
self.sequences.fluxes.q1 = 0.0
|
|
1689
|
+
self.sequences.states.lz = self.sequences.states.lz - (self.sequences.fluxes.q1)
|
|
1690
|
+
cpdef inline void calc_rt(self) noexcept nogil:
|
|
1691
|
+
self.sequences.fluxes.rt = self.parameters.derived.rellandarea * self.sequences.fluxes.outrc + self.parameters.derived.rellowerzonearea * self.sequences.fluxes.q1
|
|
1692
|
+
cpdef inline void calc_qt(self) noexcept nogil:
|
|
1693
|
+
self.sequences.fluxes.qt = self.parameters.derived.qfactor * self.sequences.fluxes.rt
|
|
1694
|
+
cpdef double get_temperature(self, numpy.int64_t s) noexcept nogil:
|
|
1695
|
+
return self.sequences.factors.tc[s]
|
|
1696
|
+
cpdef double get_meantemperature(self) noexcept nogil:
|
|
1697
|
+
return self.sequences.inputs.t
|
|
1698
|
+
cpdef double get_precipitation(self, numpy.int64_t s) noexcept nogil:
|
|
1699
|
+
return self.sequences.fluxes.pc[s]
|
|
1700
|
+
cpdef double get_interceptedwater(self, numpy.int64_t k) noexcept nogil:
|
|
1701
|
+
return self.sequences.states.ic[k]
|
|
1702
|
+
cpdef double get_soilwater(self, numpy.int64_t k) noexcept nogil:
|
|
1703
|
+
return self.sequences.states.sm[k]
|
|
1704
|
+
cpdef double get_snowcover(self, numpy.int64_t k) noexcept nogil:
|
|
1705
|
+
cdef numpy.int64_t c
|
|
1706
|
+
cdef double snowcovered
|
|
1707
|
+
snowcovered = 0.0
|
|
1708
|
+
for c in range(self.parameters.control.sclass):
|
|
1709
|
+
snowcovered = snowcovered + (self.sequences.states.sp[c, k] > 0.0)
|
|
1710
|
+
return snowcovered / self.parameters.control.sclass
|
|
1711
|
+
cpdef inline void calc_ei_ic_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1712
|
+
cdef numpy.int64_t k
|
|
1713
|
+
submodel.determine_interceptionevaporation()
|
|
1714
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1715
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST, SEALED):
|
|
1716
|
+
self.sequences.fluxes.ei[k] = min(submodel.get_interceptionevaporation(k), self.sequences.states.ic[k])
|
|
1717
|
+
self.sequences.states.ic[k] = self.sequences.states.ic[k] - (self.sequences.fluxes.ei[k])
|
|
1718
|
+
else:
|
|
1719
|
+
self.sequences.fluxes.ei[k] = 0.0
|
|
1720
|
+
self.sequences.states.ic[k] = 0.0
|
|
1721
|
+
cpdef inline void calc_ea_sm_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1722
|
+
cdef numpy.int64_t k
|
|
1723
|
+
submodel.determine_soilevapotranspiration()
|
|
1724
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1725
|
+
if self.parameters.control.zonetype[k] in (FIELD, FOREST):
|
|
1726
|
+
self.sequences.fluxes.ea[k] = min(submodel.get_soilevapotranspiration(k), self.sequences.states.sm[k])
|
|
1727
|
+
self.sequences.states.sm[k] = self.sequences.states.sm[k] - (self.sequences.fluxes.ea[k])
|
|
1728
|
+
if self.sequences.states.sm[k] > self.parameters.control.fc[k]:
|
|
1729
|
+
self.sequences.fluxes.r[k] = self.sequences.fluxes.r[k] + (self.sequences.states.sm[k] - self.parameters.control.fc[k])
|
|
1730
|
+
self.sequences.states.sm[k] = self.parameters.control.fc[k]
|
|
1731
|
+
else:
|
|
1732
|
+
self.sequences.fluxes.ea[k] = 0.0
|
|
1733
|
+
self.sequences.states.sm[k] = 0.0
|
|
1734
|
+
cpdef inline void calc_el_lz_aetmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1735
|
+
cdef numpy.int64_t k
|
|
1736
|
+
submodel.determine_waterevaporation()
|
|
1737
|
+
for k in range(self.parameters.control.nmbzones):
|
|
1738
|
+
if self.parameters.control.zonetype[k] == ILAKE:
|
|
1739
|
+
self.sequences.fluxes.el[k] = submodel.get_waterevaporation(k)
|
|
1740
|
+
self.sequences.states.lz = self.sequences.states.lz - (self.parameters.derived.relzoneareas[k] / self.parameters.derived.rellowerzonearea * self.sequences.fluxes.el[k])
|
|
1741
|
+
else:
|
|
1742
|
+
self.sequences.fluxes.el[k] = 0.0
|
|
1743
|
+
cpdef inline void calc_qab_qvs_bw(self, numpy.int64_t k, double[:] h, double[:] k1, double[:] k2, double[:] s0, double[:] qz, double[:] qa1, double[:] qa2, double t0) noexcept nogil:
|
|
1744
|
+
cdef double d_qa1
|
|
1745
|
+
cdef double d_v4
|
|
1746
|
+
cdef double d_v3
|
|
1747
|
+
cdef double d_denom
|
|
1748
|
+
cdef double d_nom
|
|
1749
|
+
cdef double d_v2
|
|
1750
|
+
cdef double d_v1
|
|
1751
|
+
cdef double d_k2qz
|
|
1752
|
+
cdef double d_t1
|
|
1753
|
+
cdef double d_dt
|
|
1754
|
+
cdef double d_qa2
|
|
1755
|
+
cdef double d_s0
|
|
1756
|
+
cdef double d_qz
|
|
1757
|
+
cdef double d_k2
|
|
1758
|
+
cdef double d_k1
|
|
1759
|
+
cdef double d_h
|
|
1760
|
+
d_h = h[k]
|
|
1761
|
+
d_k1 = k1[k]
|
|
1762
|
+
d_k2 = k2[k]
|
|
1763
|
+
d_qz = qz[k]
|
|
1764
|
+
d_s0 = s0[k]
|
|
1765
|
+
if (d_k1 == 0.0) and (d_s0 > d_h):
|
|
1766
|
+
qa1[k] = qa1[k] + (d_s0 - d_h)
|
|
1767
|
+
s0[k] = d_s0 = d_h
|
|
1768
|
+
if (d_k1 == 0.0) and (d_s0 == d_h) and (d_qz > d_h / d_k2):
|
|
1769
|
+
d_qa2 = d_h / d_k2
|
|
1770
|
+
d_dt = 1.0 - t0
|
|
1771
|
+
qa2[k] = qa2[k] + (d_dt * d_qa2)
|
|
1772
|
+
qa1[k] = qa1[k] + (d_dt * (d_qz - d_qa2))
|
|
1773
|
+
elif d_k2 == 0.0:
|
|
1774
|
+
qa2[k] = qa2[k] + (d_s0 + d_qz)
|
|
1775
|
+
s0[k] = 0.0
|
|
1776
|
+
elif (d_s0 < d_h) or (d_s0 == d_h and d_qz <= d_h / d_k2):
|
|
1777
|
+
if (d_s0 == d_h) or (d_qz <= d_h / d_k2):
|
|
1778
|
+
d_t1 = 1.0
|
|
1779
|
+
elif isinf(d_k2):
|
|
1780
|
+
d_t1 = (d_h - d_s0) / d_qz
|
|
1781
|
+
else:
|
|
1782
|
+
d_t1 = t0 + d_k2 * log( (d_qz - d_s0 / d_k2) / (d_qz - d_h / d_k2) )
|
|
1783
|
+
if 0.0 < d_t1 < 1.0:
|
|
1784
|
+
qa2[k] = qa2[k] + ((d_t1 - t0) * d_qz - (d_h - d_s0))
|
|
1785
|
+
s0[k] = d_h
|
|
1786
|
+
self.calc_qab_qvs_bw_v1(k, h, k1, k2, s0, qz, qa1, qa2, d_t1)
|
|
1787
|
+
elif isinf(d_k2):
|
|
1788
|
+
s0[k] = s0[k] + ((1.0 - t0) * d_qz)
|
|
1789
|
+
else:
|
|
1790
|
+
d_dt = 1.0 - t0
|
|
1791
|
+
d_k2qz = d_k2 * d_qz
|
|
1792
|
+
s0[k] = d_k2qz - (d_k2qz - d_s0) * exp(-d_dt / d_k2)
|
|
1793
|
+
qa2[k] = qa2[k] + (d_s0 - s0[k] + d_dt * d_qz)
|
|
1794
|
+
else:
|
|
1795
|
+
d_v1 = 1.0 / d_k1 + 1.0 / d_k2
|
|
1796
|
+
d_v2 = d_qz + d_h / d_k1
|
|
1797
|
+
d_nom = d_v2 - d_h * d_v1
|
|
1798
|
+
d_denom = d_v2 - d_s0 * d_v1
|
|
1799
|
+
if (d_s0 == d_h) or (d_denom == 0.0) or (not 0 < d_nom / d_denom <= 1):
|
|
1800
|
+
d_t1 = 1.0
|
|
1801
|
+
else:
|
|
1802
|
+
d_t1 = t0 - 1.0 / d_v1 * log(d_nom / d_denom)
|
|
1803
|
+
d_t1 = min(d_t1, 1.0)
|
|
1804
|
+
d_dt = d_t1 - t0
|
|
1805
|
+
d_v3 = (d_v2 * d_dt) / d_v1
|
|
1806
|
+
d_v4 = d_denom / d_v1**2 * (1.0 - exp(-d_dt * d_v1))
|
|
1807
|
+
d_qa1 = (d_v3 - d_v4 - d_h * d_dt) / d_k1
|
|
1808
|
+
d_qa2 = (d_v3 - d_v4) / d_k2
|
|
1809
|
+
qa1[k] = qa1[k] + (d_qa1)
|
|
1810
|
+
qa2[k] = qa2[k] + (d_qa2)
|
|
1811
|
+
if d_t1 == 1.0:
|
|
1812
|
+
s0[k] = s0[k] + (d_dt * d_qz - d_qa1 - d_qa2)
|
|
1813
|
+
else:
|
|
1814
|
+
s0[k] = d_h
|
|
1815
|
+
if d_t1 < 1.0:
|
|
1816
|
+
self.calc_qab_qvs_bw_v1(k, h, k1, k2, s0, qz, qa1, qa2, d_t1)
|
|
1817
|
+
cpdef inline void calc_outrc_rconcmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1818
|
+
submodel.set_inflow(self.sequences.fluxes.inrc)
|
|
1819
|
+
submodel.determine_outflow()
|
|
1820
|
+
self.sequences.fluxes.outrc = submodel.get_outflow()
|
|
1821
|
+
cpdef inline void pass_q(self) noexcept nogil:
|
|
1822
|
+
self.sequences.outlets.q[0] = self.sequences.outlets.q[0] + (self.sequences.fluxes.qt)
|