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,1329 @@
|
|
|
1
|
+
"""
|
|
2
|
+
.. _`LARSIM`: http://www.larsim.de/en/the-model/
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
# import...
|
|
6
|
+
# ...from standard library
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
import warnings
|
|
9
|
+
|
|
10
|
+
# ...from site-packages
|
|
11
|
+
import numpy
|
|
12
|
+
|
|
13
|
+
# ...from HydPy
|
|
14
|
+
import hydpy
|
|
15
|
+
from hydpy import config
|
|
16
|
+
from hydpy.core import exceptiontools
|
|
17
|
+
from hydpy.core import objecttools
|
|
18
|
+
from hydpy.core import parametertools
|
|
19
|
+
from hydpy.core import sequencetools
|
|
20
|
+
from hydpy.core import timetools
|
|
21
|
+
from hydpy.core.typingtools import *
|
|
22
|
+
|
|
23
|
+
# ...from lland
|
|
24
|
+
from hydpy.models.lland.lland_constants import CONSTANTS as CONSTANTS_
|
|
25
|
+
from hydpy.models.lland import lland_parameters
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# spatial information
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class FT(parametertools.Parameter):
|
|
32
|
+
"""Teileinzugsgebietsfläche (subbasin area) [km²]."""
|
|
33
|
+
|
|
34
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (1e-10, None)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class NHRU(parametertools.Parameter):
|
|
38
|
+
"""Anzahl der Hydrotope (number of hydrological response units) [-].
|
|
39
|
+
|
|
40
|
+
Note that |NHRU| determines the length of most 1-dimensional |lland.DOCNAME.long|
|
|
41
|
+
parameters and sequences. This requires that the value of the respective |NHRU|
|
|
42
|
+
instance is set before any of the values of these 1-dimensional parameters or
|
|
43
|
+
sequences are set. Changing the value of the |NHRU| instance necessitates setting
|
|
44
|
+
their values again:
|
|
45
|
+
|
|
46
|
+
Examples:
|
|
47
|
+
|
|
48
|
+
>>> from hydpy.models.lland import *
|
|
49
|
+
>>> parameterstep("1d")
|
|
50
|
+
>>> nhru(5)
|
|
51
|
+
>>> control.kg.shape
|
|
52
|
+
(5,)
|
|
53
|
+
>>> control.kapgrenz.shape
|
|
54
|
+
(5, 2)
|
|
55
|
+
>>> fluxes.tkor.shape
|
|
56
|
+
(5,)
|
|
57
|
+
>>> control.wg2z.shape
|
|
58
|
+
(12,)
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
NDIM, TYPE, TIME, SPAN = 0, int, None, (1, None)
|
|
62
|
+
|
|
63
|
+
def __call__(self, *args, **kwargs) -> None:
|
|
64
|
+
super().__call__(*args, **kwargs)
|
|
65
|
+
|
|
66
|
+
skippars = (parametertools.MonthParameter, parametertools.MOYParameter)
|
|
67
|
+
for subpars in self.subpars.pars.model.parameters:
|
|
68
|
+
for par in subpars:
|
|
69
|
+
if (par.NDIM == 1) and not isinstance(par, skippars):
|
|
70
|
+
par.shape = self.value
|
|
71
|
+
self.subpars.kapgrenz.shape = self.value, 2
|
|
72
|
+
|
|
73
|
+
skipseqs = (sequencetools.LogSequences, sequencetools.LinkSequences)
|
|
74
|
+
sequences = self.subpars.pars.model.sequences
|
|
75
|
+
for subseqs in sequences:
|
|
76
|
+
if not isinstance(subseqs, skipseqs):
|
|
77
|
+
for seq in subseqs:
|
|
78
|
+
if seq.NDIM == 1:
|
|
79
|
+
seq.shape = self.value
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class Lnk(parametertools.NameParameter):
|
|
83
|
+
"""Landnutzungsklasse (land use class) [-].
|
|
84
|
+
|
|
85
|
+
For increasing legibility, |lland.DOCNAME.long| constants are used for string
|
|
86
|
+
representions of |Lnk| objects:
|
|
87
|
+
|
|
88
|
+
>>> from hydpy.models.lland import *
|
|
89
|
+
>>> parameterstep("1d")
|
|
90
|
+
>>> lnk
|
|
91
|
+
lnk(?)
|
|
92
|
+
>>> nhru(4)
|
|
93
|
+
>>> lnk(ACKER, ACKER, WASSER, MISCHW)
|
|
94
|
+
>>> from hydpy import print_vector
|
|
95
|
+
>>> print_vector(lnk.values)
|
|
96
|
+
4, 4, 16, 15
|
|
97
|
+
>>> lnk
|
|
98
|
+
lnk(ACKER, ACKER, WASSER, MISCHW)
|
|
99
|
+
>>> lnk(ACKER)
|
|
100
|
+
>>> lnk
|
|
101
|
+
lnk(ACKER)
|
|
102
|
+
"""
|
|
103
|
+
|
|
104
|
+
constants = CONSTANTS_
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class FHRU(lland_parameters.ParameterComplete):
|
|
108
|
+
"""Flächenanteile der Hydrotope (area percentages of the respective HRUs) [-]."""
|
|
109
|
+
|
|
110
|
+
NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, 1.0)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
# input correction
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
class KG(lland_parameters.ParameterComplete):
|
|
117
|
+
"""Niederschlagskorrekturfaktor (adjustment factor for precipitation)
|
|
118
|
+
[-]."""
|
|
119
|
+
|
|
120
|
+
NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
|
|
121
|
+
INIT = 1.0
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class KT(lland_parameters.ParameterComplete):
|
|
125
|
+
"""Temperaturkorrektursummand (adjustment summand for air temperature)
|
|
126
|
+
[°C]."""
|
|
127
|
+
|
|
128
|
+
NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
|
|
129
|
+
INIT = 0.0
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
# energy adjustment
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class P1Strahl(parametertools.Parameter):
|
|
136
|
+
"""Konstante der Globalstrahlungsreduktion für Wald (constant for
|
|
137
|
+
reducing the global radiation in forests) [-]."""
|
|
138
|
+
|
|
139
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
|
|
140
|
+
INIT = 0.5
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
class P2Strahl(parametertools.Parameter):
|
|
144
|
+
"""Faktor der Globalstrahlungsreduktion für Wald (factor for
|
|
145
|
+
reducing the global radiation in forests) [-]."""
|
|
146
|
+
|
|
147
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
|
|
148
|
+
INIT = 1.0 / 35.0
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class Albedo0Snow(parametertools.Parameter):
|
|
152
|
+
"""Albedo von Neuschnee (albedo of fresh snow) [-]."""
|
|
153
|
+
|
|
154
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
|
|
155
|
+
INIT = 0.8
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
class SnowAgingFactor(parametertools.Parameter):
|
|
159
|
+
"""Wichtungsfaktor für die Sensitivität der Albedo für die Alterung des
|
|
160
|
+
Schnees (weighting factor of albedo sensitivity for snow aging) [-]."""
|
|
161
|
+
|
|
162
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
|
|
163
|
+
INIT = 0.35
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
class Turb0(parametertools.Parameter):
|
|
167
|
+
"""Parameter des Übergangskoeffizienten des turbulenten Wärmestroms
|
|
168
|
+
(parameter of transition coefficient for turbulent heat flux)
|
|
169
|
+
[W/m²/K].
|
|
170
|
+
|
|
171
|
+
Parameter |Turb0| corresponds to the LARSIM parameter `A0`.
|
|
172
|
+
"""
|
|
173
|
+
|
|
174
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
|
|
175
|
+
INIT = 2.0
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class Turb1(parametertools.Parameter):
|
|
179
|
+
"""Parameter des Übergangskoeffizienten des turbulenten Wärmestroms
|
|
180
|
+
(parameter of transition coefficient for turbulent heat flux)
|
|
181
|
+
[J/m³/K].
|
|
182
|
+
|
|
183
|
+
Parameter |Turb0| corresponds to the LARSIM parameter `A1`.
|
|
184
|
+
"""
|
|
185
|
+
|
|
186
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
|
|
187
|
+
INIT = 2.0
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
# wind speed adjustment
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
class MeasuringHeightWindSpeed(parametertools.Parameter):
|
|
194
|
+
"""The height above ground of the wind speed measurements [m]."""
|
|
195
|
+
|
|
196
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0, None)
|
|
197
|
+
INIT = 10.0
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
class P1Wind(parametertools.Parameter):
|
|
201
|
+
"""Konstante der Windgeschwindigkeitsreduktion für Wald (constant for
|
|
202
|
+
reducing the wind speed in forests) [-]."""
|
|
203
|
+
|
|
204
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
|
|
205
|
+
INIT = 0.6
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
class P2Wind(parametertools.Parameter):
|
|
209
|
+
"""Faktor der Windgeschwindigkeitsreduktion für Wald (factor for
|
|
210
|
+
reducing the wind speed in forests) [-]."""
|
|
211
|
+
|
|
212
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
|
|
213
|
+
INIT = 1.0 / 70.0
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
# interception
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
class LAI(lland_parameters.LanduseMonthParameter):
|
|
220
|
+
"""Blattflächenindex (leaf area index) [-]."""
|
|
221
|
+
|
|
222
|
+
NDIM, TYPE, TIME, SPAN = 2, float, None, (0.0, None)
|
|
223
|
+
INIT = 5.0
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
class HInz(parametertools.Parameter):
|
|
227
|
+
"""Interzeptionskapazität bezogen auf die Blattoberfläche (interception
|
|
228
|
+
capacity normalized to the leaf surface area) [mm]."""
|
|
229
|
+
|
|
230
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
|
|
231
|
+
INIT = 0.2
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
# snow interception
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
class P1SIMax(parametertools.Parameter):
|
|
238
|
+
"""Konstante zur Berechnung der maximalen Schneeinterzeptionskapazität basierend
|
|
239
|
+
auf dem Blattflächenindex (constant for calculating the maximum snow interception
|
|
240
|
+
capacity based on the leaf area index) [mm]."""
|
|
241
|
+
|
|
242
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
|
|
243
|
+
INIT = 8.0
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
class P2SIMax(parametertools.Parameter):
|
|
247
|
+
"""Faktor zur Berechnung der maximalen Schneeinterzeptionskapazität basierend
|
|
248
|
+
auf dem Blattflächenindex (factor for calculating the maximum snow interception
|
|
249
|
+
capacity based on the leaf area index) [mm]."""
|
|
250
|
+
|
|
251
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
|
|
252
|
+
INIT = 1.5
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
class P1SIRate(parametertools.Parameter):
|
|
256
|
+
"""Konstante zur Berechnung des Verhältnisses von Schneeinerzeptionsrate und
|
|
257
|
+
Niederschlagsintensität basierend auf dem Blattflächenindex (constant for
|
|
258
|
+
calculating the ratio of the snow interception rate and the precipitation
|
|
259
|
+
intensity based on the leaf area index) [-]."""
|
|
260
|
+
|
|
261
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
|
|
262
|
+
INIT = 0.2
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
class P2SIRate(parametertools.Parameter):
|
|
266
|
+
"""Faktor zur Berechnung des Verhältnisses von Schneeinerzeptionsrate und
|
|
267
|
+
Niederschlagsintensität basierend auf dem Blattflächenindex (factor for
|
|
268
|
+
calculating the ratio of the snow interception rate and precipitation intensity
|
|
269
|
+
based on the leaf area index) [-]."""
|
|
270
|
+
|
|
271
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 1.0)
|
|
272
|
+
INIT = 0.02
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
class P3SIRate(parametertools.Parameter):
|
|
276
|
+
"""Faktor zur Berechnung des Verhältnisses von Schneeinerzeptionsrate und
|
|
277
|
+
Niederschlagsintensität basierend auf der bereits interzipierten Schneemenge
|
|
278
|
+
(factor for calculating the ratio of the snow interception rate and precipitation
|
|
279
|
+
intensity based on the amount of already intercepted snow) [1/mm]."""
|
|
280
|
+
|
|
281
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, 0.05)
|
|
282
|
+
INIT = 0.003
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
# snow
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
class TRefT(lland_parameters.ParameterLand):
|
|
289
|
+
"""Lufttemperaturgrenzwert des Grad-Tag-Verfahrens (air temperature
|
|
290
|
+
threshold of the degree-day method) [°C]."""
|
|
291
|
+
|
|
292
|
+
NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
|
|
293
|
+
INIT = 0.0
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
class TRefN(lland_parameters.ParameterLand):
|
|
297
|
+
"""Niederschlagstemperaturgrenzwert des zur Berechnung des Wärmeeintrags
|
|
298
|
+
durch Regen (precipitation temperature threshold to calculate heat flux
|
|
299
|
+
caused by liquid precipitation on snow) [°C]."""
|
|
300
|
+
|
|
301
|
+
NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
|
|
302
|
+
INIT = 0.0
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
class TGr(lland_parameters.ParameterLand):
|
|
306
|
+
"""Temperaturgrenzwert flüssiger/fester Niederschlag (threshold
|
|
307
|
+
temperature liquid/frozen precipitation) [°C]."""
|
|
308
|
+
|
|
309
|
+
NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
|
|
310
|
+
INIT = 0.0
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
class TSp(lland_parameters.ParameterLand):
|
|
314
|
+
"""Temperaturspanne flüssiger/fester Niederschlag (temperature range
|
|
315
|
+
with mixed precipitation) [°C]."""
|
|
316
|
+
|
|
317
|
+
NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
|
|
318
|
+
INIT = 0.0
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
class GTF(lland_parameters.ParameterLand):
|
|
322
|
+
"""Grad-Tag-Faktor (factor of the degree-day method) [mm/°C/T]."""
|
|
323
|
+
|
|
324
|
+
NDIM, TYPE, TIME, SPAN = 1, float, True, (0.0, None)
|
|
325
|
+
INIT = 3.0
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
class PWMax(lland_parameters.ParameterLand):
|
|
329
|
+
"""Maximalverhältnis Gesamt- zu Trockenschnee (maximum ratio of the
|
|
330
|
+
total and the frozen water equivalent stored in the snow cover) [-].
|
|
331
|
+
|
|
332
|
+
In addition to the |parametertools| call method, it
|
|
333
|
+
is possible to set the value of parameter |PWMax| in accordance to
|
|
334
|
+
the keyword arguments `rhot0` and `rhodkrit`.
|
|
335
|
+
|
|
336
|
+
Basic Equation:
|
|
337
|
+
:math:`PWMax = \\frac{1.474 \\cdot rhodkrit}
|
|
338
|
+
{rhot0 + 0.474 \\cdot rhodkrit}`
|
|
339
|
+
|
|
340
|
+
Example:
|
|
341
|
+
|
|
342
|
+
Using the common values for both `rhot0` and `rhodkrit`...
|
|
343
|
+
|
|
344
|
+
>>> from hydpy.models.lland import *
|
|
345
|
+
>>> parameterstep()
|
|
346
|
+
>>> nhru(1)
|
|
347
|
+
>>> lnk(ACKER)
|
|
348
|
+
>>> pwmax(rhot0=0.2345, rhodkrit=0.42)
|
|
349
|
+
|
|
350
|
+
...results in:
|
|
351
|
+
|
|
352
|
+
>>> pwmax
|
|
353
|
+
pwmax(1.427833)
|
|
354
|
+
|
|
355
|
+
This is also the default value of |PWMax|, meaning the relative
|
|
356
|
+
portion of liquid water in the snow cover cannot exceed 30 %.
|
|
357
|
+
|
|
358
|
+
Additional error messages try to clarify how to pass parameters:
|
|
359
|
+
|
|
360
|
+
>>> pwmax(rhot0=0.2345)
|
|
361
|
+
Traceback (most recent call last):
|
|
362
|
+
...
|
|
363
|
+
ValueError: For the calculating parameter `pwmax`, both keyword \
|
|
364
|
+
arguments `rhot0` and `rhodkrit` are required.
|
|
365
|
+
|
|
366
|
+
>>> pwmax(rho_t_0=0.2345)
|
|
367
|
+
Traceback (most recent call last):
|
|
368
|
+
...
|
|
369
|
+
ValueError: Parameter `pwmax` can be set by directly passing a \
|
|
370
|
+
single value or a list of values, by assigning single values to landuse \
|
|
371
|
+
keywords, or by calculating a value based on the keyword arguments \
|
|
372
|
+
`rhot0` and `rhodkrit`.
|
|
373
|
+
|
|
374
|
+
Passing landuse specific parameter values is also supported
|
|
375
|
+
(but not in combination with `rhot0` and `rhodkrit`):
|
|
376
|
+
|
|
377
|
+
>>> pwmax(acker=2.0, vers=3.0)
|
|
378
|
+
>>> pwmax
|
|
379
|
+
pwmax(2.0)
|
|
380
|
+
|
|
381
|
+
The "normal" input error management still works:
|
|
382
|
+
|
|
383
|
+
>>> pwmax()
|
|
384
|
+
Traceback (most recent call last):
|
|
385
|
+
...
|
|
386
|
+
ValueError: For parameter `pwmax` of element `?` neither \
|
|
387
|
+
a positional nor a keyword argument is given.
|
|
388
|
+
"""
|
|
389
|
+
|
|
390
|
+
NDIM, TYPE, TIME, SPAN = 1, float, None, (1.0, None)
|
|
391
|
+
INIT = 1.4278333871488538
|
|
392
|
+
|
|
393
|
+
def __call__(self, *args, **kwargs) -> None:
|
|
394
|
+
"""The prefered way to pass values to |PWMax| instances within parameter
|
|
395
|
+
control files.
|
|
396
|
+
"""
|
|
397
|
+
rhot0 = float(kwargs.pop("rhot0", numpy.nan))
|
|
398
|
+
rhodkrit = float(kwargs.pop("rhodkrit", numpy.nan))
|
|
399
|
+
missing = int(numpy.isnan(rhot0)) + int(numpy.isnan(rhodkrit))
|
|
400
|
+
try:
|
|
401
|
+
super().__call__(*args, **kwargs)
|
|
402
|
+
return
|
|
403
|
+
except TypeError:
|
|
404
|
+
pass
|
|
405
|
+
except BaseException as exc:
|
|
406
|
+
if missing == 2:
|
|
407
|
+
raise exc
|
|
408
|
+
if not missing:
|
|
409
|
+
self(1.474 * rhodkrit / (rhot0 + 0.474 * rhodkrit))
|
|
410
|
+
elif missing == 1:
|
|
411
|
+
raise ValueError(
|
|
412
|
+
"For the calculating parameter `pwmax`, both keyword "
|
|
413
|
+
"arguments `rhot0` and `rhodkrit` are required."
|
|
414
|
+
)
|
|
415
|
+
else:
|
|
416
|
+
raise ValueError(
|
|
417
|
+
"Parameter `pwmax` can be set by directly passing a "
|
|
418
|
+
"single value or a list of values, by assigning single "
|
|
419
|
+
"values to landuse keywords, or by calculating a value "
|
|
420
|
+
"based on the keyword arguments `rhot0` and `rhodkrit`."
|
|
421
|
+
)
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
class RefreezeFlag(parametertools.Parameter):
|
|
425
|
+
"""Flag um wiedergefrieren zu aktivieren (flag to activate refreezing)
|
|
426
|
+
[-]."""
|
|
427
|
+
|
|
428
|
+
NDIM, TYPE, TIME, SPAN = 0, int, None, (False, True)
|
|
429
|
+
INIT = 0
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
class KTSchnee(parametertools.Parameter):
|
|
433
|
+
"""Effektive Wärmeleitfähigkeit der obersten Schneeschicht (effective
|
|
434
|
+
thermal conductivity of the top snow layer) [W/m²/K].
|
|
435
|
+
|
|
436
|
+
Note that, at least for application model |lland_knauf|, it is fine to set the
|
|
437
|
+
value of parameter |KTSchnee| to |numpy.inf| to disable the explicit modelling of
|
|
438
|
+
the top snow layer. As a result, the top layer does not dampen the effects of
|
|
439
|
+
atmospheric influences like radiative heating. Another aspect is that the snow
|
|
440
|
+
surface temperature does not need to be determined iteratively, as it is always
|
|
441
|
+
identical with the the snow bulk temperature, which decreases computation times.
|
|
442
|
+
"""
|
|
443
|
+
|
|
444
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, numpy.inf)
|
|
445
|
+
INIT = 5.0
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
class WG2Z(parametertools.MonthParameter):
|
|
449
|
+
"""Bodenwärmestrom in der Tiefe 2z (soil heat flux at depth 2z)
|
|
450
|
+
[W/m²]."""
|
|
451
|
+
|
|
452
|
+
NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
|
|
453
|
+
INIT = 0.0
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
# soil properties
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
class WMax(lland_parameters.ParameterSoil):
|
|
460
|
+
"""Maximaler Bodenwasserspeicher (maximum soil water storage) [mm]."""
|
|
461
|
+
|
|
462
|
+
NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
|
|
463
|
+
INIT = 100.0
|
|
464
|
+
|
|
465
|
+
# defined at the bottom of the file:
|
|
466
|
+
CONTROLPARAMETERS: ClassVar[tuple[type[PWP], type[FK]]]
|
|
467
|
+
|
|
468
|
+
def trim(self, lower=None, upper=None) -> bool:
|
|
469
|
+
"""Trim values in accordance with :math:`PWP \\leq FK \\leq WMax`.
|
|
470
|
+
|
|
471
|
+
>>> from hydpy.models.lland import *
|
|
472
|
+
>>> parameterstep()
|
|
473
|
+
>>> nhru(3)
|
|
474
|
+
>>> lnk(ACKER)
|
|
475
|
+
|
|
476
|
+
>>> pwp(20.0)
|
|
477
|
+
>>> wmax(10.0, 50.0, 90.0)
|
|
478
|
+
>>> wmax
|
|
479
|
+
wmax(20.0, 50.0, 90.0)
|
|
480
|
+
|
|
481
|
+
>>> fk.values = 60.0
|
|
482
|
+
>>> assert wmax.trim() is True
|
|
483
|
+
>>> wmax
|
|
484
|
+
wmax(60.0, 60.0, 90.0)
|
|
485
|
+
"""
|
|
486
|
+
if lower is None:
|
|
487
|
+
lower = exceptiontools.getattr_(self.subpars.fk, "value", None)
|
|
488
|
+
if lower is None:
|
|
489
|
+
lower = exceptiontools.getattr_(self.subpars.pwp, "value", None)
|
|
490
|
+
return super().trim(lower, upper)
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
class FK(lland_parameters.ParameterSoilThreshold):
|
|
494
|
+
"""Feldkapazität / Mindestbodenfeuchte für die Interflowentstehung (field
|
|
495
|
+
capacity / threshold value of soil moisture for interflow generation) [mm].
|
|
496
|
+
|
|
497
|
+
Note that one can define the values of parameter |FK| via the
|
|
498
|
+
keyword argument `relative`, as explained in the documentation
|
|
499
|
+
on class |ParameterSoilThreshold|.
|
|
500
|
+
"""
|
|
501
|
+
|
|
502
|
+
NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
|
|
503
|
+
INIT = 0.0
|
|
504
|
+
|
|
505
|
+
# defined at the bottom of the file:
|
|
506
|
+
CONTROLPARAMETERS: ClassVar[tuple[type[PWP], type[WMax]]]
|
|
507
|
+
|
|
508
|
+
def trim(self, lower=None, upper=None) -> bool:
|
|
509
|
+
"""Trim upper values in accordance with :math:`PWP \\leq FK \\leq WMax`.
|
|
510
|
+
|
|
511
|
+
>>> from hydpy.models.lland import *
|
|
512
|
+
>>> parameterstep()
|
|
513
|
+
>>> nhru(3)
|
|
514
|
+
>>> lnk(ACKER)
|
|
515
|
+
>>> pwp(20.0)
|
|
516
|
+
>>> wmax(80.0)
|
|
517
|
+
>>> fk(10.0, 50.0, 90.0)
|
|
518
|
+
>>> fk
|
|
519
|
+
fk(20.0, 50.0, 80.0)
|
|
520
|
+
"""
|
|
521
|
+
if lower is None:
|
|
522
|
+
lower = exceptiontools.getattr_(self.subpars.pwp, "value", None)
|
|
523
|
+
if upper is None:
|
|
524
|
+
upper = exceptiontools.getattr_(self.subpars.wmax, "value", None)
|
|
525
|
+
return super().trim(lower, upper)
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
class PWP(lland_parameters.ParameterSoilThreshold):
|
|
529
|
+
"""Permanenter Welkepunkt / Mindestbodenfeuchte für die
|
|
530
|
+
Basisabflussentstehung (permanent wilting point threshold value of soil
|
|
531
|
+
moisture for base flow generation) [mm].
|
|
532
|
+
|
|
533
|
+
Note that one can define the values of parameter |PWP| via the
|
|
534
|
+
keyword argument `relative`, as explained in the documentation
|
|
535
|
+
on class |ParameterSoilThreshold|.
|
|
536
|
+
"""
|
|
537
|
+
|
|
538
|
+
NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
|
|
539
|
+
INIT = 0.0
|
|
540
|
+
|
|
541
|
+
CONTROLPARAMETERS = (WMax, FK)
|
|
542
|
+
|
|
543
|
+
def trim(self, lower=None, upper=None) -> bool:
|
|
544
|
+
"""Trim values in accordance with :math:`PWP \\leq FK \\leq WMax`.
|
|
545
|
+
|
|
546
|
+
>>> from hydpy.models.lland import *
|
|
547
|
+
>>> parameterstep()
|
|
548
|
+
>>> nhru(3)
|
|
549
|
+
>>> lnk(ACKER)
|
|
550
|
+
>>> wmax(100.0)
|
|
551
|
+
>>> pwp(-10.0, 50.0, 110.0)
|
|
552
|
+
>>> pwp
|
|
553
|
+
pwp(0.0, 50.0, 100.0)
|
|
554
|
+
|
|
555
|
+
>>> fk.values = 80.0
|
|
556
|
+
>>> assert pwp.trim() is True
|
|
557
|
+
>>> pwp
|
|
558
|
+
pwp(0.0, 50.0, 80.0)
|
|
559
|
+
"""
|
|
560
|
+
if upper is None:
|
|
561
|
+
upper = exceptiontools.getattr_(self.subpars.fk, "value", None)
|
|
562
|
+
if upper is None:
|
|
563
|
+
upper = exceptiontools.getattr_(self.subpars.wmax, "value", None)
|
|
564
|
+
return super().trim(lower, upper)
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
# runoff generation
|
|
568
|
+
|
|
569
|
+
|
|
570
|
+
class BSf(lland_parameters.ParameterSoil):
|
|
571
|
+
"""Bodenfeuchte-Sättigungsfläche-Parameter (shape parameter for the
|
|
572
|
+
relation between the avarage soil moisture and the relative saturated
|
|
573
|
+
area of a subbasin) [-]."""
|
|
574
|
+
|
|
575
|
+
NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
|
|
576
|
+
INIT = 0.4
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
class FVF(parametertools.Parameter):
|
|
580
|
+
"""Frostversiegelungsfaktor zur Ermittelung des Frostversiegelungsgrades
|
|
581
|
+
(frost sealing factor for determination of the degree of frost sealing
|
|
582
|
+
FVG) [-]."""
|
|
583
|
+
|
|
584
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
|
|
585
|
+
INIT = 0.5
|
|
586
|
+
|
|
587
|
+
|
|
588
|
+
class BSFF(parametertools.Parameter):
|
|
589
|
+
"""Exponent zur Ermittelung des Frostversieglungsgrades (frost sealing
|
|
590
|
+
exponent for determination of degree of frost sealing FVG) [-]."""
|
|
591
|
+
|
|
592
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
|
|
593
|
+
INIT = 2.0
|
|
594
|
+
|
|
595
|
+
|
|
596
|
+
class DMin(lland_parameters.ParameterSoil):
|
|
597
|
+
"""Drainageindex des mittleren Bodenspeichers (flux rate for
|
|
598
|
+
releasing interflow from the middle soil compartment) [mm/T].
|
|
599
|
+
|
|
600
|
+
In addition to the |ParameterSoil| `__call__` method, it is
|
|
601
|
+
possible to set the value of parameter |DMin| in accordance
|
|
602
|
+
to the keyword argument `r_dmin` due to compatibility reasons
|
|
603
|
+
with the original LARSIM implementation:
|
|
604
|
+
|
|
605
|
+
:math:`Dmin = 0.001008 \\cdot hours \\cdot r_dmin`
|
|
606
|
+
|
|
607
|
+
Example:
|
|
608
|
+
|
|
609
|
+
>>> from hydpy import pub
|
|
610
|
+
>>> pub.timegrids = "2000-01-01", "2000-01-02", "1d"
|
|
611
|
+
>>> from hydpy.models.lland import *
|
|
612
|
+
>>> parameterstep("1h")
|
|
613
|
+
>>> nhru(1)
|
|
614
|
+
>>> lnk(ACKER)
|
|
615
|
+
>>> dmin(r_dmin=10.0)
|
|
616
|
+
>>> dmin
|
|
617
|
+
dmin(0.01008)
|
|
618
|
+
>>> from hydpy import print_vector
|
|
619
|
+
>>> print_vector(dmin.values)
|
|
620
|
+
0.24192
|
|
621
|
+
|
|
622
|
+
A wrong keyword results in the right answer:
|
|
623
|
+
|
|
624
|
+
>>> dmin(rdmin=10.0)
|
|
625
|
+
Traceback (most recent call last):
|
|
626
|
+
...
|
|
627
|
+
TypeError: While trying to set the values of parameter `dmin` of \
|
|
628
|
+
element `?` based on keyword arguments `rdmin`, the following error occurred: \
|
|
629
|
+
Keyword `rdmin` is not among the available model constants.
|
|
630
|
+
|
|
631
|
+
.. testsetup::
|
|
632
|
+
|
|
633
|
+
>>> del pub.timegrids
|
|
634
|
+
"""
|
|
635
|
+
|
|
636
|
+
NDIM, TYPE, TIME, SPAN = 1, float, True, (0.0, None)
|
|
637
|
+
INIT = 0.0
|
|
638
|
+
|
|
639
|
+
def __call__(self, *args, **kwargs) -> None:
|
|
640
|
+
"""The prefered way to pass values to |DMin| instances
|
|
641
|
+
within parameter control files.
|
|
642
|
+
"""
|
|
643
|
+
try:
|
|
644
|
+
lland_parameters.ParameterSoil.__call__(self, *args, **kwargs)
|
|
645
|
+
except TypeError:
|
|
646
|
+
if (r := kwargs.get("r_dmin")) is not None:
|
|
647
|
+
hours = hydpy.pub.timegrids.init.stepsize.hours
|
|
648
|
+
self.value = 0.001008 * hours * numpy.array(r)
|
|
649
|
+
self.trim()
|
|
650
|
+
else:
|
|
651
|
+
objecttools.augment_excmessage()
|
|
652
|
+
|
|
653
|
+
def trim(self, lower=None, upper=None) -> bool:
|
|
654
|
+
"""Trim upper values in accordance with :math:`DMin \\leq DMax`.
|
|
655
|
+
|
|
656
|
+
>>> from hydpy.models.lland import *
|
|
657
|
+
>>> parameterstep("1d")
|
|
658
|
+
>>> simulationstep("12h")
|
|
659
|
+
>>> nhru(5)
|
|
660
|
+
>>> lnk(ACKER)
|
|
661
|
+
>>> dmax.values = 2.0
|
|
662
|
+
>>> dmin(-2.0, 0.0, 2.0, 4.0, 6.0)
|
|
663
|
+
>>> dmin
|
|
664
|
+
dmin(0.0, 0.0, 2.0, 4.0, 4.0)
|
|
665
|
+
"""
|
|
666
|
+
if upper is None:
|
|
667
|
+
upper = exceptiontools.getattr_(self.subpars.dmax, "value", None)
|
|
668
|
+
return super().trim(lower, upper)
|
|
669
|
+
|
|
670
|
+
|
|
671
|
+
class DMax(lland_parameters.ParameterSoil):
|
|
672
|
+
"""Drainageindex des oberen Bodenspeichers (additional flux rate for
|
|
673
|
+
releasing interflow from the upper soil compartment) [mm/T].
|
|
674
|
+
|
|
675
|
+
In addition to the |ParameterSoil| `__call__` method, it is
|
|
676
|
+
possible to set the value of parameter |DMax| in accordance
|
|
677
|
+
to the keyword argument `r_dmax` due to compatibility reasons
|
|
678
|
+
with the original LARSIM implemetation.
|
|
679
|
+
|
|
680
|
+
Basic Equation:
|
|
681
|
+
:math:`Dmax = 2.4192 \\cdot r_dmax`
|
|
682
|
+
|
|
683
|
+
Example:
|
|
684
|
+
|
|
685
|
+
>>> from hydpy import print_vector, pub
|
|
686
|
+
>>> pub.timegrids = "2000-01-01", "2000-01-02", "1d"
|
|
687
|
+
>>> from hydpy.models.lland import *
|
|
688
|
+
>>> parameterstep("1h")
|
|
689
|
+
>>> nhru(1)
|
|
690
|
+
>>> lnk(ACKER)
|
|
691
|
+
>>> dmax(r_dmax=10.0)
|
|
692
|
+
>>> dmax
|
|
693
|
+
dmax(1.008)
|
|
694
|
+
>>> print_vector(dmax.values)
|
|
695
|
+
24.192
|
|
696
|
+
|
|
697
|
+
A wrong keyword results in the right answer:
|
|
698
|
+
|
|
699
|
+
>>> dmax(rdmax=10.0)
|
|
700
|
+
Traceback (most recent call last):
|
|
701
|
+
...
|
|
702
|
+
TypeError: While trying to set the values of parameter `dmax` of \
|
|
703
|
+
element `?` based on keyword arguments `rdmax`, the following error occurred: \
|
|
704
|
+
Keyword `rdmax` is not among the available model constants.
|
|
705
|
+
|
|
706
|
+
.. testsetup::
|
|
707
|
+
|
|
708
|
+
>>> del pub.timegrids
|
|
709
|
+
"""
|
|
710
|
+
|
|
711
|
+
NDIM, TYPE, TIME, SPAN = 1, float, True, (None, None)
|
|
712
|
+
INIT = 1.0
|
|
713
|
+
|
|
714
|
+
def __call__(self, *args, **kwargs) -> None:
|
|
715
|
+
"""The prefered way to pass values to |DMax| instances
|
|
716
|
+
within parameter control files.
|
|
717
|
+
"""
|
|
718
|
+
try:
|
|
719
|
+
lland_parameters.ParameterSoil.__call__(self, *args, **kwargs)
|
|
720
|
+
except TypeError:
|
|
721
|
+
if (r := kwargs.get("r_dmax")) is not None:
|
|
722
|
+
self.value = (
|
|
723
|
+
0.1008
|
|
724
|
+
* hydpy.pub.timegrids.init.stepsize.hours
|
|
725
|
+
* numpy.array(r, config.NP_FLOAT)
|
|
726
|
+
)
|
|
727
|
+
self.trim()
|
|
728
|
+
else:
|
|
729
|
+
objecttools.augment_excmessage()
|
|
730
|
+
|
|
731
|
+
def trim(self, lower=None, upper=None) -> bool:
|
|
732
|
+
"""Trim upper values in accordance with :math:`DMax \\geq DMin`.
|
|
733
|
+
|
|
734
|
+
>>> from hydpy.models.lland import *
|
|
735
|
+
>>> parameterstep("1d")
|
|
736
|
+
>>> simulationstep("12h")
|
|
737
|
+
>>> nhru(3)
|
|
738
|
+
>>> lnk(ACKER)
|
|
739
|
+
>>> dmin.values = 2.0
|
|
740
|
+
>>> dmax(2.0, 4.0, 6.0)
|
|
741
|
+
>>> dmax
|
|
742
|
+
dmax(4.0, 4.0, 6.0)
|
|
743
|
+
"""
|
|
744
|
+
if lower is None:
|
|
745
|
+
lower = exceptiontools.getattr_(self.subpars.dmin, "value", None)
|
|
746
|
+
return super().trim(lower, upper)
|
|
747
|
+
|
|
748
|
+
|
|
749
|
+
class Beta(lland_parameters.ParameterSoil):
|
|
750
|
+
"""Drainageindex des tiefen Bodenspeichers (storage coefficient for
|
|
751
|
+
releasing base flow from the lower soil compartment) [1/T]."""
|
|
752
|
+
|
|
753
|
+
NDIM, TYPE, TIME, SPAN = 1, float, True, (0.0, None)
|
|
754
|
+
INIT = 0.01
|
|
755
|
+
|
|
756
|
+
|
|
757
|
+
class FBeta(lland_parameters.ParameterSoil):
|
|
758
|
+
"""Faktor zur Erhöhung der Perkolation im Grobporenbereich (factor for
|
|
759
|
+
increasing percolation under wet conditions) [-]."""
|
|
760
|
+
|
|
761
|
+
NDIM, TYPE, TIME, SPAN = 1, float, None, (1.0, None)
|
|
762
|
+
INIT = 1.0
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
class KapMax(lland_parameters.ParameterSoil):
|
|
766
|
+
"""Maximale kapillare Aufstiegsrate (maximum capillary rise) [mm/T]."""
|
|
767
|
+
|
|
768
|
+
NDIM, TYPE, TIME, SPAN = 1, float, True, (0.0, None)
|
|
769
|
+
INIT = 0.0
|
|
770
|
+
|
|
771
|
+
|
|
772
|
+
class KapGrenz(parametertools.Parameter):
|
|
773
|
+
"""Grenzwerte für den kapillaren Aufstieg (threshold values related
|
|
774
|
+
to the capillary rise) [mm].
|
|
775
|
+
|
|
776
|
+
Parameter |KapGrenz| actually consists of two types of parameter values.
|
|
777
|
+
Both are thresholds and related to the soil water content. If the
|
|
778
|
+
actual soil water content is smaller than or equal to the first threshold,
|
|
779
|
+
capillary rise reaches its maximum value. If the actual water content
|
|
780
|
+
is larger than or equal to the second threshold, there is no capillary
|
|
781
|
+
rise at all. In between, the soil water content and the capillary rise
|
|
782
|
+
are inversely related (linear interpolation).
|
|
783
|
+
|
|
784
|
+
In the following example, the we set the lower threshold of all three
|
|
785
|
+
hydrological response units to 10 mm and the upper one to 40 mm:
|
|
786
|
+
|
|
787
|
+
>>> from hydpy.models.lland import *
|
|
788
|
+
>>> parameterstep("1d")
|
|
789
|
+
>>> simulationstep ("12h")
|
|
790
|
+
>>> nhru(3)
|
|
791
|
+
>>> kapgrenz(10.0, 40.0)
|
|
792
|
+
>>> kapgrenz
|
|
793
|
+
kapgrenz([[10.0, 40.0],
|
|
794
|
+
[10.0, 40.0],
|
|
795
|
+
[10.0, 40.0]])
|
|
796
|
+
|
|
797
|
+
The next example shows how assign different threshold pairs to each
|
|
798
|
+
response unit:
|
|
799
|
+
|
|
800
|
+
>>> kapgrenz([10.0, 40.0], [20., 60.0], [30., 80.0])
|
|
801
|
+
>>> kapgrenz
|
|
802
|
+
kapgrenz([[10.0, 40.0],
|
|
803
|
+
[20.0, 60.0],
|
|
804
|
+
[30.0, 80.0]])
|
|
805
|
+
|
|
806
|
+
It works equally well to pass a complete matrix, of course:
|
|
807
|
+
|
|
808
|
+
>>> kapgrenz([[10.0, 40.0],
|
|
809
|
+
... [20.0, 60.0],
|
|
810
|
+
... [30.0, 80.0]])
|
|
811
|
+
>>> kapgrenz
|
|
812
|
+
kapgrenz([[10.0, 40.0],
|
|
813
|
+
[20.0, 60.0],
|
|
814
|
+
[30.0, 80.0]])
|
|
815
|
+
|
|
816
|
+
It is also fine to pass a single value, in case you prefer a sharp
|
|
817
|
+
transition between zero and maximum capillary rise:
|
|
818
|
+
|
|
819
|
+
>>> kapgrenz(30.0)
|
|
820
|
+
>>> kapgrenz
|
|
821
|
+
kapgrenz(30.0)
|
|
822
|
+
|
|
823
|
+
For convenience and better compatibility with the original `LARSIM`_
|
|
824
|
+
model, we provide the keyword argument `option`. Simply pass an option
|
|
825
|
+
name and then parameter |KapGrenz| itself calculates suitable threshold
|
|
826
|
+
values based on soil properties.
|
|
827
|
+
|
|
828
|
+
The first possible string is `FK`. When passing this string, the current
|
|
829
|
+
value of parameter |FK| serves both as the lower and the upper threshold,
|
|
830
|
+
which is in agreement with the `LARSIM`_ option `KAPILLARER AUFSTIEG`:
|
|
831
|
+
|
|
832
|
+
>>> fk(60.0, 120.0, 180.0)
|
|
833
|
+
>>> kapgrenz(option="FK")
|
|
834
|
+
>>> kapgrenz
|
|
835
|
+
kapgrenz(option="FK")
|
|
836
|
+
>>> from hydpy import print_matrix
|
|
837
|
+
>>> print_matrix(kapgrenz.value)
|
|
838
|
+
| 60.0, 60.0 |
|
|
839
|
+
| 120.0, 120.0 |
|
|
840
|
+
| 180.0, 180.0 |
|
|
841
|
+
|
|
842
|
+
The second possible string is `0_WMax/10`, which corresponds to the
|
|
843
|
+
LARSIM option `KOPPELUNG BODEN/GRUNDWASSER`, where the lower and upper
|
|
844
|
+
threshold are zero and 10 % of the current value of parameter |WMax|,
|
|
845
|
+
respectively:
|
|
846
|
+
|
|
847
|
+
>>> wmax(100.0, 150.0, 200.0)
|
|
848
|
+
>>> kapgrenz(option="0_WMax/10")
|
|
849
|
+
>>> kapgrenz
|
|
850
|
+
kapgrenz(option="0_WMax/10")
|
|
851
|
+
>>> print_matrix(kapgrenz.values)
|
|
852
|
+
| 0.0, 10.0 |
|
|
853
|
+
| 0.0, 15.0 |
|
|
854
|
+
| 0.0, 20.0 |
|
|
855
|
+
|
|
856
|
+
The third possible string is `FK/2_FK` where the lower and the upper
|
|
857
|
+
threshold are 50 % and 100 % of the value of parameter |FK|, which does
|
|
858
|
+
not correspond to any available `LARSIM`_ option:
|
|
859
|
+
|
|
860
|
+
>>> kapgrenz(option="FK/2_FK")
|
|
861
|
+
>>> kapgrenz
|
|
862
|
+
kapgrenz(option="FK/2_FK")
|
|
863
|
+
>>> print_matrix(kapgrenz.values)
|
|
864
|
+
| 30.0, 60.0 |
|
|
865
|
+
| 60.0, 120.0 |
|
|
866
|
+
| 90.0, 180.0 |
|
|
867
|
+
|
|
868
|
+
If we set the values directly and they comply with the previously set option,
|
|
869
|
+
the string representation will show the previously set option:
|
|
870
|
+
|
|
871
|
+
>>> kapgrenz.values = [[30.0, 60.0], [60.0, 120.0], [90.0, 180.0]]
|
|
872
|
+
>>> kapgrenz
|
|
873
|
+
kapgrenz(option="FK/2_FK")
|
|
874
|
+
|
|
875
|
+
If we change the values and they do not comply with the option, the string
|
|
876
|
+
representation will show the modified values instead of the outdated option:
|
|
877
|
+
|
|
878
|
+
>>> kapgrenz.values = 100.0
|
|
879
|
+
>>> kapgrenz
|
|
880
|
+
kapgrenz(100.0)
|
|
881
|
+
|
|
882
|
+
If we change the parameter |FK|, on which |KapGrenz| depends, |KapGrenz| will not
|
|
883
|
+
be updated, but will remain at its old values. The option is no longer printed
|
|
884
|
+
because it is not valid anymore:
|
|
885
|
+
|
|
886
|
+
>>> kapgrenz(option="FK/2_FK")
|
|
887
|
+
>>> kapgrenz
|
|
888
|
+
kapgrenz(option="FK/2_FK")
|
|
889
|
+
>>> print_matrix(kapgrenz.values)
|
|
890
|
+
| 30.0, 60.0 |
|
|
891
|
+
| 60.0, 120.0 |
|
|
892
|
+
| 90.0, 180.0 |
|
|
893
|
+
>>> fk(100)
|
|
894
|
+
>>> kapgrenz
|
|
895
|
+
kapgrenz([[30.0, 60.0],
|
|
896
|
+
[60.0, 120.0],
|
|
897
|
+
[90.0, 180.0]])
|
|
898
|
+
|
|
899
|
+
The option will also not be printed if it leads to |numpy.nan| values:
|
|
900
|
+
|
|
901
|
+
>>> fk(numpy.nan)
|
|
902
|
+
>>> kapgrenz(option="FK/2_FK")
|
|
903
|
+
>>> kapgrenz
|
|
904
|
+
kapgrenz(nan)
|
|
905
|
+
|
|
906
|
+
Wrong keyword arguments result in errors like the following:
|
|
907
|
+
|
|
908
|
+
>>> kapgrenz(option1="FK", option2="0_WMax/10")
|
|
909
|
+
Traceback (most recent call last):
|
|
910
|
+
...
|
|
911
|
+
NotImplementedError: The value(s) of parameter `kapgrenz` of element `?` \
|
|
912
|
+
could not be set based on the given keyword arguments.
|
|
913
|
+
|
|
914
|
+
>>> kapgrenz(option1="FK")
|
|
915
|
+
Traceback (most recent call last):
|
|
916
|
+
...
|
|
917
|
+
NotImplementedError: The value(s) of parameter `kapgrenz` of element `?` \
|
|
918
|
+
could not be set based on the given keyword arguments.
|
|
919
|
+
|
|
920
|
+
>>> kapgrenz(option="NFk")
|
|
921
|
+
Traceback (most recent call last):
|
|
922
|
+
...
|
|
923
|
+
ValueError: Parameter `kapgrenz` of element `?` supports the options \
|
|
924
|
+
`FK`, `0_WMax/10`, and `FK/2_FK`, but `NFk` is given.
|
|
925
|
+
"""
|
|
926
|
+
|
|
927
|
+
CONTROLPARAMETERS = (WMax, FK)
|
|
928
|
+
NDIM, TYPE, TIME, SPAN = 2, float, None, (None, None)
|
|
929
|
+
INIT = 0.0
|
|
930
|
+
KEYWORDS = {"option": parametertools.Keyword(name="option")}
|
|
931
|
+
|
|
932
|
+
def __call__(self, *args, **kwargs) -> None:
|
|
933
|
+
self._keywordarguments = parametertools.KeywordArguments(False)
|
|
934
|
+
idx = self._find_kwargscombination(args, kwargs, ({"option"},))
|
|
935
|
+
if idx is None:
|
|
936
|
+
super().__call__(*args, **kwargs)
|
|
937
|
+
else:
|
|
938
|
+
self._keywordarguments = parametertools.KeywordArguments(
|
|
939
|
+
option=kwargs["option"]
|
|
940
|
+
)
|
|
941
|
+
self.values = self._get_values_according_to_option()
|
|
942
|
+
|
|
943
|
+
def _get_values_according_to_option(self) -> MatrixFloat:
|
|
944
|
+
con = self.subpars
|
|
945
|
+
values = numpy.zeros(self.shape)
|
|
946
|
+
kwargs = self._keywordarguments
|
|
947
|
+
if kwargs["option"] == "FK/2_FK":
|
|
948
|
+
values[:, 0] = 0.5 * con.fk
|
|
949
|
+
values[:, 1] = con.fk
|
|
950
|
+
elif kwargs["option"] == "0_WMax/10":
|
|
951
|
+
values[:, 0] = 0.0
|
|
952
|
+
values[:, 1] = 0.1 * con.wmax
|
|
953
|
+
elif kwargs["option"] == "FK":
|
|
954
|
+
values[:, 0] = con.fk
|
|
955
|
+
values[:, 1] = con.fk
|
|
956
|
+
else:
|
|
957
|
+
raise ValueError(
|
|
958
|
+
f"Parameter {objecttools.elementphrase(self)} supports "
|
|
959
|
+
f"the options `FK`, `0_WMax/10`, and `FK/2_FK`, but "
|
|
960
|
+
f"`{kwargs['option']}` is given."
|
|
961
|
+
) from None
|
|
962
|
+
return values
|
|
963
|
+
|
|
964
|
+
def __repr__(self) -> str:
|
|
965
|
+
if self._keywordarguments.valid:
|
|
966
|
+
values = self._get_values_according_to_option()
|
|
967
|
+
if (values == self.values).all():
|
|
968
|
+
strings = []
|
|
969
|
+
for name, value in self._keywordarguments:
|
|
970
|
+
strings.append(f'{name}="{objecttools.repr_(value)}"')
|
|
971
|
+
return f"{self.name}({', '.join(strings)})"
|
|
972
|
+
|
|
973
|
+
return super().__repr__()
|
|
974
|
+
|
|
975
|
+
|
|
976
|
+
class RBeta(parametertools.Parameter):
|
|
977
|
+
"""Boolscher Parameter der steuert, ob the Perkolation unterhalb der
|
|
978
|
+
Feldkapazität auf Null reduziert wird (flag to indicate if seepage is
|
|
979
|
+
reduced to zero below field capacity) [-]."""
|
|
980
|
+
|
|
981
|
+
NDIM, TYPE, TIME, SPAN = 0, bool, None, (False, True)
|
|
982
|
+
INIT = False
|
|
983
|
+
|
|
984
|
+
|
|
985
|
+
class VolBMax(parametertools.Parameter):
|
|
986
|
+
"""Maximaler Inhalt des Gebietsspeichers für Basisabfluss (highest possible base
|
|
987
|
+
flow storage) [mm]."""
|
|
988
|
+
|
|
989
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
|
|
990
|
+
INIT = numpy.inf
|
|
991
|
+
|
|
992
|
+
|
|
993
|
+
class GSBMax(parametertools.Parameter):
|
|
994
|
+
"""Faktor zur Anpassung von |VolBMax| (factor for adjusting |VolBMax|) [-]."""
|
|
995
|
+
|
|
996
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
|
|
997
|
+
INIT = 1.0
|
|
998
|
+
|
|
999
|
+
|
|
1000
|
+
class GSBGrad1(parametertools.Parameter):
|
|
1001
|
+
"""Höchste Volumenzunahme des Gebietsspeichers für Basisabfluss ohne Begrenzung
|
|
1002
|
+
des Zuflusses (highest possible baseflow storage increase without inflow
|
|
1003
|
+
reductions) [mm/T]."""
|
|
1004
|
+
|
|
1005
|
+
NDIM, TYPE, TIME, SPAN = 0, float, True, (None, None)
|
|
1006
|
+
INIT = numpy.inf
|
|
1007
|
+
|
|
1008
|
+
def trim(self, lower=None, upper=None) -> bool:
|
|
1009
|
+
r"""Trim upper values in accordance with :math:`GSBGrad1 \leq GSBGrad2`.
|
|
1010
|
+
|
|
1011
|
+
>>> from hydpy.models.lland import *
|
|
1012
|
+
>>> simulationstep("1h")
|
|
1013
|
+
>>> parameterstep("1d")
|
|
1014
|
+
>>> gsbgrad2(1.0)
|
|
1015
|
+
>>> gsbgrad1(0.0)
|
|
1016
|
+
>>> gsbgrad1
|
|
1017
|
+
gsbgrad1(0.0)
|
|
1018
|
+
>>> gsbgrad1(1.0)
|
|
1019
|
+
>>> gsbgrad1
|
|
1020
|
+
gsbgrad1(1.0)
|
|
1021
|
+
>>> gsbgrad1(2.0)
|
|
1022
|
+
>>> gsbgrad1
|
|
1023
|
+
gsbgrad1(1.0)
|
|
1024
|
+
"""
|
|
1025
|
+
if upper is None:
|
|
1026
|
+
upper = exceptiontools.getattr_(self.subpars.gsbgrad2, "value", None)
|
|
1027
|
+
return super().trim(lower, upper)
|
|
1028
|
+
|
|
1029
|
+
|
|
1030
|
+
class GSBGrad2(parametertools.Parameter):
|
|
1031
|
+
"""Volumenzunahme des Gebietsspeichers für Basisabfluss, oberhalb der jeglicher
|
|
1032
|
+
Zufluss ausgeschlossen ist (highest possible baseflow storage increase) [mm/T]."""
|
|
1033
|
+
|
|
1034
|
+
NDIM, TYPE, TIME, SPAN = 0, float, True, (None, None)
|
|
1035
|
+
INIT = numpy.inf
|
|
1036
|
+
|
|
1037
|
+
def trim(self, lower=None, upper=None) -> bool:
|
|
1038
|
+
r"""Trim upper values in accordance with :math:`GSBGrad1 \leq GSBGrad2`.
|
|
1039
|
+
|
|
1040
|
+
>>> from hydpy.models.lland import *
|
|
1041
|
+
>>> simulationstep("1h")
|
|
1042
|
+
>>> parameterstep("1d")
|
|
1043
|
+
>>> gsbgrad1(1.0)
|
|
1044
|
+
>>> gsbgrad2(2.0)
|
|
1045
|
+
>>> gsbgrad2
|
|
1046
|
+
gsbgrad2(2.0)
|
|
1047
|
+
>>> gsbgrad2(1.0)
|
|
1048
|
+
>>> gsbgrad2
|
|
1049
|
+
gsbgrad2(1.0)
|
|
1050
|
+
>>> gsbgrad2(0.0)
|
|
1051
|
+
>>> gsbgrad2
|
|
1052
|
+
gsbgrad2(1.0)
|
|
1053
|
+
"""
|
|
1054
|
+
if lower is None:
|
|
1055
|
+
lower = exceptiontools.getattr_(self.subpars.gsbgrad1, "value", None)
|
|
1056
|
+
return super().trim(lower, upper)
|
|
1057
|
+
|
|
1058
|
+
|
|
1059
|
+
# runoff concentration
|
|
1060
|
+
|
|
1061
|
+
|
|
1062
|
+
class A1(parametertools.Parameter):
|
|
1063
|
+
"""Parameter für die kontinuierliche Aufteilung der
|
|
1064
|
+
Direktabflusskomponenten (threshold value for the continuous seperation
|
|
1065
|
+
of direct runoff in a slow and a fast component) [mm/T]
|
|
1066
|
+
"""
|
|
1067
|
+
|
|
1068
|
+
NDIM, TYPE, TIME, SPAN = 0, float, True, (0.0, None)
|
|
1069
|
+
INIT = numpy.inf
|
|
1070
|
+
|
|
1071
|
+
|
|
1072
|
+
class A2(parametertools.Parameter):
|
|
1073
|
+
"""Parameter für die diskontinuierliche Aufteilung der
|
|
1074
|
+
Direktabflusskomponenten (threshold value for the discontinuous seperation
|
|
1075
|
+
of direct runoff in a slow and a fast component) [mm/T]
|
|
1076
|
+
"""
|
|
1077
|
+
|
|
1078
|
+
NDIM, TYPE, TIME, SPAN = 0, float, True, (0.0, None)
|
|
1079
|
+
INIT = 0.0
|
|
1080
|
+
|
|
1081
|
+
|
|
1082
|
+
class TInd(parametertools.Parameter):
|
|
1083
|
+
"""Fließzeitindex (factor related to the time of concentration) [T].
|
|
1084
|
+
|
|
1085
|
+
In addition to the |Parameter| call method, it
|
|
1086
|
+
is possible to set the value of parameter |TInd| in accordance to
|
|
1087
|
+
the keyword arguments `tal` (talweg, [km]), `hot` (higher reference
|
|
1088
|
+
altitude, [m]), and `hut` (lower reference altitude, [m]). This is
|
|
1089
|
+
supposed to decrease the time of runoff concentration in small and/or
|
|
1090
|
+
steep catchments. Note that |TInd| does not only affect direct
|
|
1091
|
+
runoff, but interflow and base flow as well. Hence it seems advisable
|
|
1092
|
+
to use this regionalization strategy with caution.
|
|
1093
|
+
|
|
1094
|
+
Basic Equation:
|
|
1095
|
+
:math:`TInd[h] = (0.868 \\cdot \\frac{Tal^3}{HOT-HUT})^{0.385}`
|
|
1096
|
+
|
|
1097
|
+
Examples:
|
|
1098
|
+
|
|
1099
|
+
Using typical values:
|
|
1100
|
+
|
|
1101
|
+
>>> from hydpy.models.lland import *
|
|
1102
|
+
>>> parameterstep("1d")
|
|
1103
|
+
>>> simulationstep("12h")
|
|
1104
|
+
>>> tind(tal=5.0, hot=210.0, hut=200.0)
|
|
1105
|
+
>>> tind
|
|
1106
|
+
tind(0.104335)
|
|
1107
|
+
|
|
1108
|
+
Note that this result is related to the selected parameter step size
|
|
1109
|
+
of one day. The value related to the selected simulation step size
|
|
1110
|
+
of 12 hours is:
|
|
1111
|
+
|
|
1112
|
+
>>> from hydpy import round_
|
|
1113
|
+
>>> round_(tind.value)
|
|
1114
|
+
0.20867
|
|
1115
|
+
|
|
1116
|
+
Unplausible input values lead to the following exceptions:
|
|
1117
|
+
|
|
1118
|
+
>>> tind(tal=5.0, hot=200.0, hut=200.0)
|
|
1119
|
+
Traceback (most recent call last):
|
|
1120
|
+
...
|
|
1121
|
+
ValueError: For the alternative calculation of parameter `tind`, \
|
|
1122
|
+
the value assigned to keyword argument `tal` must be greater then zero and \
|
|
1123
|
+
the one of `hot` must be greater than the one of `hut`. However, for \
|
|
1124
|
+
element ?, the values `5.0`, `200.0` and `200.0` were given respectively.
|
|
1125
|
+
|
|
1126
|
+
>>> tind(tal=0.0, hot=210.0, hut=200.0)
|
|
1127
|
+
Traceback (most recent call last):
|
|
1128
|
+
...
|
|
1129
|
+
ValueError: For the alternative calculation of parameter `tind`, \
|
|
1130
|
+
the value assigned to keyword argument `tal` must be greater then zero and \
|
|
1131
|
+
the one of `hot` must be greater than the one of `hut`. However, for \
|
|
1132
|
+
element ?, the values `0.0`, `210.0` and `200.0` were given respectively.
|
|
1133
|
+
|
|
1134
|
+
However, it is hard to define exact bounds for the value of
|
|
1135
|
+
|TInd| itself. Whenever it is below 0.001 or above 1000 days,
|
|
1136
|
+
the following warning is given:
|
|
1137
|
+
|
|
1138
|
+
>>> tind(tal=0.001, hot=210.0, hut=200.0)
|
|
1139
|
+
Traceback (most recent call last):
|
|
1140
|
+
...
|
|
1141
|
+
UserWarning: Due to the given values for the keyword arguments \
|
|
1142
|
+
`tal` (0.001), `hot` (210.0) and `hut` (200.0), parameter `tind` of \
|
|
1143
|
+
element `?` has been set to an unrealistic value of 0.000134 hours.
|
|
1144
|
+
|
|
1145
|
+
Additionally, exceptions for missing (or wrong) keywords are
|
|
1146
|
+
implemented
|
|
1147
|
+
|
|
1148
|
+
>>> tind(tal=5.0, hot=210.0)
|
|
1149
|
+
Traceback (most recent call last):
|
|
1150
|
+
...
|
|
1151
|
+
ValueError: For the alternative calculation of parameter `tind`, \
|
|
1152
|
+
values for all three keyword keyword arguments `tal`, `hot`, and `hut` \
|
|
1153
|
+
must be given.
|
|
1154
|
+
|
|
1155
|
+
"""
|
|
1156
|
+
|
|
1157
|
+
NDIM, TYPE, TIME, SPAN = 0, float, False, (0.0, None)
|
|
1158
|
+
INIT = 1.0
|
|
1159
|
+
|
|
1160
|
+
def __call__(self, *args, **kwargs) -> None:
|
|
1161
|
+
try:
|
|
1162
|
+
super().__call__(*args, **kwargs)
|
|
1163
|
+
except NotImplementedError:
|
|
1164
|
+
try:
|
|
1165
|
+
tal = float(kwargs["tal"])
|
|
1166
|
+
hot = float(kwargs["hot"])
|
|
1167
|
+
hut = float(kwargs["hut"])
|
|
1168
|
+
except KeyError:
|
|
1169
|
+
raise ValueError(
|
|
1170
|
+
"For the alternative calculation of parameter `tind`, "
|
|
1171
|
+
"values for all three keyword keyword arguments `tal`, "
|
|
1172
|
+
"`hot`, and `hut` must be given."
|
|
1173
|
+
) from None
|
|
1174
|
+
if (tal <= 0.0) or (hot <= hut):
|
|
1175
|
+
raise ValueError(
|
|
1176
|
+
f"For the alternative calculation of parameter `tind`, "
|
|
1177
|
+
f"the value assigned to keyword argument `tal` must be "
|
|
1178
|
+
f"greater then zero and the one of `hot` must be greater "
|
|
1179
|
+
f"than the one of `hut`. However, for element "
|
|
1180
|
+
f"{objecttools.devicename(self)}, the values `{tal}`, "
|
|
1181
|
+
f"`{hot}` and `{hut}` were given respectively."
|
|
1182
|
+
) from None
|
|
1183
|
+
self.value = (0.868 * tal**3 / (hot - hut)) ** 0.385
|
|
1184
|
+
if (self > 1000.0) or (self < 0.001):
|
|
1185
|
+
warnings.warn(
|
|
1186
|
+
f"Due to the given values for the keyword arguments "
|
|
1187
|
+
f"`tal` ({tal}), `hot` ({hot}) and `hut` ({hut}), "
|
|
1188
|
+
f"parameter `tind` of element "
|
|
1189
|
+
f"`{objecttools.devicename(self)}` has been set to an "
|
|
1190
|
+
f"unrealistic value of {objecttools.repr_(self.value)} "
|
|
1191
|
+
f"hours."
|
|
1192
|
+
)
|
|
1193
|
+
self.value *= timetools.Period("1h") / hydpy.pub.options.simulationstep
|
|
1194
|
+
|
|
1195
|
+
|
|
1196
|
+
class EQB(parametertools.Parameter):
|
|
1197
|
+
"""Kalibrierfaktor für die Basisabflusskonzentration (factor for adjusting
|
|
1198
|
+
the concentration time of baseflow). [-]."""
|
|
1199
|
+
|
|
1200
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
|
|
1201
|
+
INIT = 5000.0
|
|
1202
|
+
|
|
1203
|
+
|
|
1204
|
+
class EQI1(parametertools.Parameter):
|
|
1205
|
+
"""Kalibrierfaktor für die "untere" Zwischenabflusskonzentration
|
|
1206
|
+
(factor for adjusting the concentration time of the first interflow
|
|
1207
|
+
component) [-]."""
|
|
1208
|
+
|
|
1209
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
|
|
1210
|
+
INIT = 2000.0
|
|
1211
|
+
|
|
1212
|
+
def trim(self, lower=None, upper=None) -> bool:
|
|
1213
|
+
"""Trim upper values in accordance with :math:`EQI2 \\leq EQI1`.
|
|
1214
|
+
|
|
1215
|
+
>>> from hydpy.models.lland import *
|
|
1216
|
+
>>> parameterstep("1d")
|
|
1217
|
+
>>> eqi2.value = 1.0
|
|
1218
|
+
>>> eqi1(0.0)
|
|
1219
|
+
>>> eqi1
|
|
1220
|
+
eqi1(1.0)
|
|
1221
|
+
>>> eqi1(1.0)
|
|
1222
|
+
>>> eqi1
|
|
1223
|
+
eqi1(1.0)
|
|
1224
|
+
>>> eqi1(2.0)
|
|
1225
|
+
>>> eqi1
|
|
1226
|
+
eqi1(2.0)
|
|
1227
|
+
"""
|
|
1228
|
+
if lower is None:
|
|
1229
|
+
lower = exceptiontools.getattr_(self.subpars.eqi2, "value", None)
|
|
1230
|
+
return super().trim(lower, upper)
|
|
1231
|
+
|
|
1232
|
+
|
|
1233
|
+
class EQI2(parametertools.Parameter):
|
|
1234
|
+
"""Kalibrierfaktor für die "obere" Zwischenabflusskonzentration
|
|
1235
|
+
(factor for adjusting the concentration time of the second interflow
|
|
1236
|
+
component) [-]."""
|
|
1237
|
+
|
|
1238
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
|
|
1239
|
+
INIT = 1000.0
|
|
1240
|
+
|
|
1241
|
+
def trim(self, lower=None, upper=None) -> bool:
|
|
1242
|
+
"""Trim upper values in accordance with :math:`EQI2 \\leq EQI1`.
|
|
1243
|
+
|
|
1244
|
+
>>> from hydpy.models.lland import *
|
|
1245
|
+
>>> parameterstep("1d")
|
|
1246
|
+
>>> eqi1.value = 3.0
|
|
1247
|
+
>>> eqi2(2.0)
|
|
1248
|
+
>>> eqi2
|
|
1249
|
+
eqi2(2.0)
|
|
1250
|
+
>>> eqi2(3.0)
|
|
1251
|
+
>>> eqi2
|
|
1252
|
+
eqi2(3.0)
|
|
1253
|
+
>>> eqi2(4.0)
|
|
1254
|
+
>>> eqi2
|
|
1255
|
+
eqi2(3.0)
|
|
1256
|
+
"""
|
|
1257
|
+
if upper is None:
|
|
1258
|
+
upper = exceptiontools.getattr_(self.subpars.eqi1, "value", None)
|
|
1259
|
+
return super().trim(lower, upper)
|
|
1260
|
+
|
|
1261
|
+
|
|
1262
|
+
class EQD1(parametertools.Parameter):
|
|
1263
|
+
"""Kalibrierfaktor für die langsamere Direktabflusskonzentration (factor
|
|
1264
|
+
for adjusting the concentration time of the slower component of direct
|
|
1265
|
+
runoff). [-]."""
|
|
1266
|
+
|
|
1267
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
|
|
1268
|
+
INIT = 100.0
|
|
1269
|
+
|
|
1270
|
+
def trim(self, lower=None, upper=None) -> bool:
|
|
1271
|
+
"""Trim upper values in accordance with :math:`EQD2 \\leq EQD1`.
|
|
1272
|
+
|
|
1273
|
+
>>> from hydpy.models.lland import *
|
|
1274
|
+
>>> parameterstep("1d")
|
|
1275
|
+
>>> eqd2.value = 1.0
|
|
1276
|
+
>>> eqd1(0.0)
|
|
1277
|
+
>>> eqd1
|
|
1278
|
+
eqd1(1.0)
|
|
1279
|
+
>>> eqd1(1.0)
|
|
1280
|
+
>>> eqd1
|
|
1281
|
+
eqd1(1.0)
|
|
1282
|
+
>>> eqd1(2.0)
|
|
1283
|
+
>>> eqd1
|
|
1284
|
+
eqd1(2.0)
|
|
1285
|
+
"""
|
|
1286
|
+
if lower is None:
|
|
1287
|
+
lower = exceptiontools.getattr_(self.subpars.eqd2, "value", None)
|
|
1288
|
+
return super().trim(lower, upper)
|
|
1289
|
+
|
|
1290
|
+
|
|
1291
|
+
class EQD2(parametertools.Parameter):
|
|
1292
|
+
"""Kalibrierfaktor für die schnellere Direktabflusskonzentration (factor
|
|
1293
|
+
for adjusting the concentration time of the faster component of direct
|
|
1294
|
+
runoff). [-]."""
|
|
1295
|
+
|
|
1296
|
+
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
|
|
1297
|
+
INIT = 50.0
|
|
1298
|
+
|
|
1299
|
+
def trim(self, lower=None, upper=None) -> bool:
|
|
1300
|
+
"""Trim upper values in accordance with :math:`EQD2 \\leq EQD1`.
|
|
1301
|
+
|
|
1302
|
+
>>> from hydpy.models.lland import *
|
|
1303
|
+
>>> parameterstep("1d")
|
|
1304
|
+
>>> eqd1.value = 3.0
|
|
1305
|
+
>>> eqd2(2.0)
|
|
1306
|
+
>>> eqd2
|
|
1307
|
+
eqd2(2.0)
|
|
1308
|
+
>>> eqd2(3.0)
|
|
1309
|
+
>>> eqd2
|
|
1310
|
+
eqd2(3.0)
|
|
1311
|
+
>>> eqd2(4.0)
|
|
1312
|
+
>>> eqd2
|
|
1313
|
+
eqd2(3.0)
|
|
1314
|
+
"""
|
|
1315
|
+
if upper is None:
|
|
1316
|
+
upper = exceptiontools.getattr_(self.subpars.eqd1, "value", None)
|
|
1317
|
+
return super().trim(lower, upper)
|
|
1318
|
+
|
|
1319
|
+
|
|
1320
|
+
class NegQ(parametertools.Parameter):
|
|
1321
|
+
"""Option: sind negative Abflüsse erlaubt (flag that indicated whether
|
|
1322
|
+
negative discharge values are allowed or not) [-]."""
|
|
1323
|
+
|
|
1324
|
+
NDIM, TYPE, TIME, SPAN = 0, bool, None, (0.0, None)
|
|
1325
|
+
INIT = False
|
|
1326
|
+
|
|
1327
|
+
|
|
1328
|
+
WMax.CONTROLPARAMETERS = (PWP, FK)
|
|
1329
|
+
FK.CONTROLPARAMETERS = (PWP, WMax)
|