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,1263 @@
|
|
|
1
|
+
#!python
|
|
2
|
+
# distutils: define_macros=NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION
|
|
3
|
+
# cython: language_level=3
|
|
4
|
+
# cython: cpow=True
|
|
5
|
+
# cython: boundscheck=False
|
|
6
|
+
# cython: wraparound=False
|
|
7
|
+
# cython: initializedcheck=False
|
|
8
|
+
# cython: cdivision=True
|
|
9
|
+
from typing import Optional
|
|
10
|
+
import numpy
|
|
11
|
+
cimport numpy
|
|
12
|
+
from libc.math cimport exp, fabs, log, sin, cos, tan, tanh, asin, acos, atan, isnan, isinf
|
|
13
|
+
from libc.math cimport NAN as nan
|
|
14
|
+
from libc.math cimport INFINITY as inf
|
|
15
|
+
import cython
|
|
16
|
+
from cpython.mem cimport PyMem_Malloc
|
|
17
|
+
from cpython.mem cimport PyMem_Realloc
|
|
18
|
+
from cpython.mem cimport PyMem_Free
|
|
19
|
+
from hydpy.cythons.autogen cimport configutils
|
|
20
|
+
from hydpy.cythons.autogen cimport interfaceutils
|
|
21
|
+
from hydpy.cythons.autogen cimport interputils
|
|
22
|
+
from hydpy.cythons.autogen import pointerutils
|
|
23
|
+
from hydpy.cythons.autogen cimport pointerutils
|
|
24
|
+
from hydpy.cythons.autogen cimport quadutils
|
|
25
|
+
from hydpy.cythons.autogen cimport rootutils
|
|
26
|
+
from hydpy.cythons.autogen cimport smoothutils
|
|
27
|
+
from hydpy.cythons.autogen cimport masterinterface
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
cdef void do_nothing(Model model) noexcept nogil:
|
|
31
|
+
pass
|
|
32
|
+
|
|
33
|
+
cpdef get_wrapper():
|
|
34
|
+
cdef CallbackWrapper wrapper = CallbackWrapper()
|
|
35
|
+
wrapper.callback = do_nothing
|
|
36
|
+
return wrapper
|
|
37
|
+
|
|
38
|
+
@cython.final
|
|
39
|
+
cdef class Parameters:
|
|
40
|
+
pass
|
|
41
|
+
@cython.final
|
|
42
|
+
cdef class ControlParameters:
|
|
43
|
+
|
|
44
|
+
cpdef void init_gateheight_callback(self):
|
|
45
|
+
self.gateheight_callback = do_nothing
|
|
46
|
+
cdef CallbackWrapper wrapper = CallbackWrapper()
|
|
47
|
+
wrapper.callback = do_nothing
|
|
48
|
+
self._gateheight_wrapper = wrapper
|
|
49
|
+
|
|
50
|
+
cpdef CallbackWrapper get_gateheight_callback(self):
|
|
51
|
+
return self._gateheight_wrapper
|
|
52
|
+
|
|
53
|
+
cpdef void set_gateheight_callback(self, CallbackWrapper wrapper):
|
|
54
|
+
self.gateheight_callback = wrapper.callback
|
|
55
|
+
self._gateheight_wrapper = wrapper
|
|
56
|
+
|
|
57
|
+
@cython.final
|
|
58
|
+
cdef class DerivedParameters:
|
|
59
|
+
pass
|
|
60
|
+
@cython.final
|
|
61
|
+
cdef class FixedParameters:
|
|
62
|
+
pass
|
|
63
|
+
@cython.final
|
|
64
|
+
cdef class Sequences:
|
|
65
|
+
pass
|
|
66
|
+
@cython.final
|
|
67
|
+
cdef class InletSequences:
|
|
68
|
+
cpdef inline alloc(self, name, numpy.int64_t length):
|
|
69
|
+
if name == "longq":
|
|
70
|
+
self._longq_length_0 = length
|
|
71
|
+
self._longq_ready = numpy.full(length, 0, dtype=numpy.int64)
|
|
72
|
+
self.longq = <double**> PyMem_Malloc(length * sizeof(double*))
|
|
73
|
+
if name == "latq":
|
|
74
|
+
self._latq_length_0 = length
|
|
75
|
+
self._latq_ready = numpy.full(length, 0, dtype=numpy.int64)
|
|
76
|
+
self.latq = <double**> PyMem_Malloc(length * sizeof(double*))
|
|
77
|
+
cpdef inline dealloc(self, name):
|
|
78
|
+
if name == "longq":
|
|
79
|
+
PyMem_Free(self.longq)
|
|
80
|
+
if name == "latq":
|
|
81
|
+
PyMem_Free(self.latq)
|
|
82
|
+
cpdef inline set_pointer1d(self, str name, pointerutils.Double value, numpy.int64_t idx):
|
|
83
|
+
cdef pointerutils.PDouble pointer = pointerutils.PDouble(value)
|
|
84
|
+
if name == "longq":
|
|
85
|
+
self.longq[idx] = pointer.p_value
|
|
86
|
+
self._longq_ready[idx] = 1
|
|
87
|
+
if name == "latq":
|
|
88
|
+
self.latq[idx] = pointer.p_value
|
|
89
|
+
self._latq_ready[idx] = 1
|
|
90
|
+
cpdef get_value(self, str name):
|
|
91
|
+
cdef numpy.int64_t idx
|
|
92
|
+
if name == "longq":
|
|
93
|
+
values = numpy.empty(self.len_longq)
|
|
94
|
+
for idx in range(self.len_longq):
|
|
95
|
+
pointerutils.check0(self._longq_length_0)
|
|
96
|
+
if self._longq_ready[idx] == 0:
|
|
97
|
+
pointerutils.check1(self._longq_length_0, idx)
|
|
98
|
+
pointerutils.check2(self._longq_ready, idx)
|
|
99
|
+
values[idx] = self.longq[idx][0]
|
|
100
|
+
return values
|
|
101
|
+
if name == "latq":
|
|
102
|
+
values = numpy.empty(self.len_latq)
|
|
103
|
+
for idx in range(self.len_latq):
|
|
104
|
+
pointerutils.check0(self._latq_length_0)
|
|
105
|
+
if self._latq_ready[idx] == 0:
|
|
106
|
+
pointerutils.check1(self._latq_length_0, idx)
|
|
107
|
+
pointerutils.check2(self._latq_ready, idx)
|
|
108
|
+
values[idx] = self.latq[idx][0]
|
|
109
|
+
return values
|
|
110
|
+
cpdef set_value(self, str name, value):
|
|
111
|
+
if name == "longq":
|
|
112
|
+
for idx in range(self.len_longq):
|
|
113
|
+
pointerutils.check0(self._longq_length_0)
|
|
114
|
+
if self._longq_ready[idx] == 0:
|
|
115
|
+
pointerutils.check1(self._longq_length_0, idx)
|
|
116
|
+
pointerutils.check2(self._longq_ready, idx)
|
|
117
|
+
self.longq[idx][0] = value[idx]
|
|
118
|
+
if name == "latq":
|
|
119
|
+
for idx in range(self.len_latq):
|
|
120
|
+
pointerutils.check0(self._latq_length_0)
|
|
121
|
+
if self._latq_ready[idx] == 0:
|
|
122
|
+
pointerutils.check1(self._latq_length_0, idx)
|
|
123
|
+
pointerutils.check2(self._latq_ready, idx)
|
|
124
|
+
self.latq[idx][0] = value[idx]
|
|
125
|
+
@cython.final
|
|
126
|
+
cdef class ReceiverSequences:
|
|
127
|
+
cpdef inline set_pointer0d(self, str name, pointerutils.Double value):
|
|
128
|
+
cdef pointerutils.PDouble pointer = pointerutils.PDouble(value)
|
|
129
|
+
if name == "waterlevel":
|
|
130
|
+
self.waterlevel = pointer.p_value
|
|
131
|
+
cpdef get_value(self, str name):
|
|
132
|
+
cdef numpy.int64_t idx
|
|
133
|
+
if name == "waterlevel":
|
|
134
|
+
return self.waterlevel[0]
|
|
135
|
+
cpdef set_value(self, str name, value):
|
|
136
|
+
if name == "waterlevel":
|
|
137
|
+
self.waterlevel[0] = value
|
|
138
|
+
@cython.final
|
|
139
|
+
cdef class FactorSequences:
|
|
140
|
+
cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
|
|
141
|
+
cdef numpy.int64_t jdx0
|
|
142
|
+
cdef numpy.int64_t k
|
|
143
|
+
if self._maxtimestep_diskflag_reading:
|
|
144
|
+
self.maxtimestep = self._maxtimestep_ncarray[0]
|
|
145
|
+
elif self._maxtimestep_ramflag:
|
|
146
|
+
self.maxtimestep = self._maxtimestep_array[idx]
|
|
147
|
+
if self._timestep_diskflag_reading:
|
|
148
|
+
self.timestep = self._timestep_ncarray[0]
|
|
149
|
+
elif self._timestep_ramflag:
|
|
150
|
+
self.timestep = self._timestep_array[idx]
|
|
151
|
+
if self._waterdepth_diskflag_reading:
|
|
152
|
+
self.waterdepth = self._waterdepth_ncarray[0]
|
|
153
|
+
elif self._waterdepth_ramflag:
|
|
154
|
+
self.waterdepth = self._waterdepth_array[idx]
|
|
155
|
+
if self._waterlevel_diskflag_reading:
|
|
156
|
+
self.waterlevel = self._waterlevel_ncarray[0]
|
|
157
|
+
elif self._waterlevel_ramflag:
|
|
158
|
+
self.waterlevel = self._waterlevel_array[idx]
|
|
159
|
+
if self._waterlevels_diskflag_reading:
|
|
160
|
+
k = 0
|
|
161
|
+
for jdx0 in range(self._waterlevels_length_0):
|
|
162
|
+
self.waterlevels[jdx0] = self._waterlevels_ncarray[k]
|
|
163
|
+
k += 1
|
|
164
|
+
elif self._waterlevels_ramflag:
|
|
165
|
+
for jdx0 in range(self._waterlevels_length_0):
|
|
166
|
+
self.waterlevels[jdx0] = self._waterlevels_array[idx, jdx0]
|
|
167
|
+
if self._waterlevelupstream_diskflag_reading:
|
|
168
|
+
self.waterlevelupstream = self._waterlevelupstream_ncarray[0]
|
|
169
|
+
elif self._waterlevelupstream_ramflag:
|
|
170
|
+
self.waterlevelupstream = self._waterlevelupstream_array[idx]
|
|
171
|
+
if self._waterleveldownstream_diskflag_reading:
|
|
172
|
+
self.waterleveldownstream = self._waterleveldownstream_ncarray[0]
|
|
173
|
+
elif self._waterleveldownstream_ramflag:
|
|
174
|
+
self.waterleveldownstream = self._waterleveldownstream_array[idx]
|
|
175
|
+
if self._watervolumeupstream_diskflag_reading:
|
|
176
|
+
self.watervolumeupstream = self._watervolumeupstream_ncarray[0]
|
|
177
|
+
elif self._watervolumeupstream_ramflag:
|
|
178
|
+
self.watervolumeupstream = self._watervolumeupstream_array[idx]
|
|
179
|
+
if self._watervolumedownstream_diskflag_reading:
|
|
180
|
+
self.watervolumedownstream = self._watervolumedownstream_ncarray[0]
|
|
181
|
+
elif self._watervolumedownstream_ramflag:
|
|
182
|
+
self.watervolumedownstream = self._watervolumedownstream_array[idx]
|
|
183
|
+
if self._wettedarea_diskflag_reading:
|
|
184
|
+
self.wettedarea = self._wettedarea_ncarray[0]
|
|
185
|
+
elif self._wettedarea_ramflag:
|
|
186
|
+
self.wettedarea = self._wettedarea_array[idx]
|
|
187
|
+
if self._wettedperimeter_diskflag_reading:
|
|
188
|
+
self.wettedperimeter = self._wettedperimeter_ncarray[0]
|
|
189
|
+
elif self._wettedperimeter_ramflag:
|
|
190
|
+
self.wettedperimeter = self._wettedperimeter_array[idx]
|
|
191
|
+
cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
|
|
192
|
+
cdef numpy.int64_t jdx0
|
|
193
|
+
cdef numpy.int64_t k
|
|
194
|
+
if self._maxtimestep_diskflag_writing:
|
|
195
|
+
self._maxtimestep_ncarray[0] = self.maxtimestep
|
|
196
|
+
if self._maxtimestep_ramflag:
|
|
197
|
+
self._maxtimestep_array[idx] = self.maxtimestep
|
|
198
|
+
if self._timestep_diskflag_writing:
|
|
199
|
+
self._timestep_ncarray[0] = self.timestep
|
|
200
|
+
if self._timestep_ramflag:
|
|
201
|
+
self._timestep_array[idx] = self.timestep
|
|
202
|
+
if self._waterdepth_diskflag_writing:
|
|
203
|
+
self._waterdepth_ncarray[0] = self.waterdepth
|
|
204
|
+
if self._waterdepth_ramflag:
|
|
205
|
+
self._waterdepth_array[idx] = self.waterdepth
|
|
206
|
+
if self._waterlevel_diskflag_writing:
|
|
207
|
+
self._waterlevel_ncarray[0] = self.waterlevel
|
|
208
|
+
if self._waterlevel_ramflag:
|
|
209
|
+
self._waterlevel_array[idx] = self.waterlevel
|
|
210
|
+
if self._waterlevels_diskflag_writing:
|
|
211
|
+
k = 0
|
|
212
|
+
for jdx0 in range(self._waterlevels_length_0):
|
|
213
|
+
self._waterlevels_ncarray[k] = self.waterlevels[jdx0]
|
|
214
|
+
k += 1
|
|
215
|
+
if self._waterlevels_ramflag:
|
|
216
|
+
for jdx0 in range(self._waterlevels_length_0):
|
|
217
|
+
self._waterlevels_array[idx, jdx0] = self.waterlevels[jdx0]
|
|
218
|
+
if self._waterlevelupstream_diskflag_writing:
|
|
219
|
+
self._waterlevelupstream_ncarray[0] = self.waterlevelupstream
|
|
220
|
+
if self._waterlevelupstream_ramflag:
|
|
221
|
+
self._waterlevelupstream_array[idx] = self.waterlevelupstream
|
|
222
|
+
if self._waterleveldownstream_diskflag_writing:
|
|
223
|
+
self._waterleveldownstream_ncarray[0] = self.waterleveldownstream
|
|
224
|
+
if self._waterleveldownstream_ramflag:
|
|
225
|
+
self._waterleveldownstream_array[idx] = self.waterleveldownstream
|
|
226
|
+
if self._watervolumeupstream_diskflag_writing:
|
|
227
|
+
self._watervolumeupstream_ncarray[0] = self.watervolumeupstream
|
|
228
|
+
if self._watervolumeupstream_ramflag:
|
|
229
|
+
self._watervolumeupstream_array[idx] = self.watervolumeupstream
|
|
230
|
+
if self._watervolumedownstream_diskflag_writing:
|
|
231
|
+
self._watervolumedownstream_ncarray[0] = self.watervolumedownstream
|
|
232
|
+
if self._watervolumedownstream_ramflag:
|
|
233
|
+
self._watervolumedownstream_array[idx] = self.watervolumedownstream
|
|
234
|
+
if self._wettedarea_diskflag_writing:
|
|
235
|
+
self._wettedarea_ncarray[0] = self.wettedarea
|
|
236
|
+
if self._wettedarea_ramflag:
|
|
237
|
+
self._wettedarea_array[idx] = self.wettedarea
|
|
238
|
+
if self._wettedperimeter_diskflag_writing:
|
|
239
|
+
self._wettedperimeter_ncarray[0] = self.wettedperimeter
|
|
240
|
+
if self._wettedperimeter_ramflag:
|
|
241
|
+
self._wettedperimeter_array[idx] = self.wettedperimeter
|
|
242
|
+
cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
|
|
243
|
+
if name == "maxtimestep":
|
|
244
|
+
self._maxtimestep_outputpointer = value.p_value
|
|
245
|
+
if name == "timestep":
|
|
246
|
+
self._timestep_outputpointer = value.p_value
|
|
247
|
+
if name == "waterdepth":
|
|
248
|
+
self._waterdepth_outputpointer = value.p_value
|
|
249
|
+
if name == "waterlevel":
|
|
250
|
+
self._waterlevel_outputpointer = value.p_value
|
|
251
|
+
if name == "waterlevelupstream":
|
|
252
|
+
self._waterlevelupstream_outputpointer = value.p_value
|
|
253
|
+
if name == "waterleveldownstream":
|
|
254
|
+
self._waterleveldownstream_outputpointer = value.p_value
|
|
255
|
+
if name == "watervolumeupstream":
|
|
256
|
+
self._watervolumeupstream_outputpointer = value.p_value
|
|
257
|
+
if name == "watervolumedownstream":
|
|
258
|
+
self._watervolumedownstream_outputpointer = value.p_value
|
|
259
|
+
if name == "wettedarea":
|
|
260
|
+
self._wettedarea_outputpointer = value.p_value
|
|
261
|
+
if name == "wettedperimeter":
|
|
262
|
+
self._wettedperimeter_outputpointer = value.p_value
|
|
263
|
+
cpdef inline void update_outputs(self) noexcept nogil:
|
|
264
|
+
if self._maxtimestep_outputflag:
|
|
265
|
+
self._maxtimestep_outputpointer[0] = self.maxtimestep
|
|
266
|
+
if self._timestep_outputflag:
|
|
267
|
+
self._timestep_outputpointer[0] = self.timestep
|
|
268
|
+
if self._waterdepth_outputflag:
|
|
269
|
+
self._waterdepth_outputpointer[0] = self.waterdepth
|
|
270
|
+
if self._waterlevel_outputflag:
|
|
271
|
+
self._waterlevel_outputpointer[0] = self.waterlevel
|
|
272
|
+
if self._waterlevelupstream_outputflag:
|
|
273
|
+
self._waterlevelupstream_outputpointer[0] = self.waterlevelupstream
|
|
274
|
+
if self._waterleveldownstream_outputflag:
|
|
275
|
+
self._waterleveldownstream_outputpointer[0] = self.waterleveldownstream
|
|
276
|
+
if self._watervolumeupstream_outputflag:
|
|
277
|
+
self._watervolumeupstream_outputpointer[0] = self.watervolumeupstream
|
|
278
|
+
if self._watervolumedownstream_outputflag:
|
|
279
|
+
self._watervolumedownstream_outputpointer[0] = self.watervolumedownstream
|
|
280
|
+
if self._wettedarea_outputflag:
|
|
281
|
+
self._wettedarea_outputpointer[0] = self.wettedarea
|
|
282
|
+
if self._wettedperimeter_outputflag:
|
|
283
|
+
self._wettedperimeter_outputpointer[0] = self.wettedperimeter
|
|
284
|
+
@cython.final
|
|
285
|
+
cdef class FluxSequences:
|
|
286
|
+
cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
|
|
287
|
+
cdef numpy.int64_t jdx0
|
|
288
|
+
cdef numpy.int64_t k
|
|
289
|
+
if self._inflow_diskflag_reading:
|
|
290
|
+
self.inflow = self._inflow_ncarray[0]
|
|
291
|
+
elif self._inflow_ramflag:
|
|
292
|
+
self.inflow = self._inflow_array[idx]
|
|
293
|
+
if self._outflow_diskflag_reading:
|
|
294
|
+
self.outflow = self._outflow_ncarray[0]
|
|
295
|
+
elif self._outflow_ramflag:
|
|
296
|
+
self.outflow = self._outflow_array[idx]
|
|
297
|
+
if self._lateralflow_diskflag_reading:
|
|
298
|
+
self.lateralflow = self._lateralflow_ncarray[0]
|
|
299
|
+
elif self._lateralflow_ramflag:
|
|
300
|
+
self.lateralflow = self._lateralflow_array[idx]
|
|
301
|
+
if self._netinflow_diskflag_reading:
|
|
302
|
+
self.netinflow = self._netinflow_ncarray[0]
|
|
303
|
+
elif self._netinflow_ramflag:
|
|
304
|
+
self.netinflow = self._netinflow_array[idx]
|
|
305
|
+
if self._dischargeupstream_diskflag_reading:
|
|
306
|
+
self.dischargeupstream = self._dischargeupstream_ncarray[0]
|
|
307
|
+
elif self._dischargeupstream_ramflag:
|
|
308
|
+
self.dischargeupstream = self._dischargeupstream_array[idx]
|
|
309
|
+
if self._dischargedownstream_diskflag_reading:
|
|
310
|
+
self.dischargedownstream = self._dischargedownstream_ncarray[0]
|
|
311
|
+
elif self._dischargedownstream_ramflag:
|
|
312
|
+
self.dischargedownstream = self._dischargedownstream_array[idx]
|
|
313
|
+
if self._dischargevolume_diskflag_reading:
|
|
314
|
+
self.dischargevolume = self._dischargevolume_ncarray[0]
|
|
315
|
+
elif self._dischargevolume_ramflag:
|
|
316
|
+
self.dischargevolume = self._dischargevolume_array[idx]
|
|
317
|
+
if self._discharges_diskflag_reading:
|
|
318
|
+
k = 0
|
|
319
|
+
for jdx0 in range(self._discharges_length_0):
|
|
320
|
+
self.discharges[jdx0] = self._discharges_ncarray[k]
|
|
321
|
+
k += 1
|
|
322
|
+
elif self._discharges_ramflag:
|
|
323
|
+
for jdx0 in range(self._discharges_length_0):
|
|
324
|
+
self.discharges[jdx0] = self._discharges_array[idx, jdx0]
|
|
325
|
+
cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
|
|
326
|
+
cdef numpy.int64_t jdx0
|
|
327
|
+
cdef numpy.int64_t k
|
|
328
|
+
if self._inflow_diskflag_writing:
|
|
329
|
+
self._inflow_ncarray[0] = self.inflow
|
|
330
|
+
if self._inflow_ramflag:
|
|
331
|
+
self._inflow_array[idx] = self.inflow
|
|
332
|
+
if self._outflow_diskflag_writing:
|
|
333
|
+
self._outflow_ncarray[0] = self.outflow
|
|
334
|
+
if self._outflow_ramflag:
|
|
335
|
+
self._outflow_array[idx] = self.outflow
|
|
336
|
+
if self._lateralflow_diskflag_writing:
|
|
337
|
+
self._lateralflow_ncarray[0] = self.lateralflow
|
|
338
|
+
if self._lateralflow_ramflag:
|
|
339
|
+
self._lateralflow_array[idx] = self.lateralflow
|
|
340
|
+
if self._netinflow_diskflag_writing:
|
|
341
|
+
self._netinflow_ncarray[0] = self.netinflow
|
|
342
|
+
if self._netinflow_ramflag:
|
|
343
|
+
self._netinflow_array[idx] = self.netinflow
|
|
344
|
+
if self._dischargeupstream_diskflag_writing:
|
|
345
|
+
self._dischargeupstream_ncarray[0] = self.dischargeupstream
|
|
346
|
+
if self._dischargeupstream_ramflag:
|
|
347
|
+
self._dischargeupstream_array[idx] = self.dischargeupstream
|
|
348
|
+
if self._dischargedownstream_diskflag_writing:
|
|
349
|
+
self._dischargedownstream_ncarray[0] = self.dischargedownstream
|
|
350
|
+
if self._dischargedownstream_ramflag:
|
|
351
|
+
self._dischargedownstream_array[idx] = self.dischargedownstream
|
|
352
|
+
if self._dischargevolume_diskflag_writing:
|
|
353
|
+
self._dischargevolume_ncarray[0] = self.dischargevolume
|
|
354
|
+
if self._dischargevolume_ramflag:
|
|
355
|
+
self._dischargevolume_array[idx] = self.dischargevolume
|
|
356
|
+
if self._discharges_diskflag_writing:
|
|
357
|
+
k = 0
|
|
358
|
+
for jdx0 in range(self._discharges_length_0):
|
|
359
|
+
self._discharges_ncarray[k] = self.discharges[jdx0]
|
|
360
|
+
k += 1
|
|
361
|
+
if self._discharges_ramflag:
|
|
362
|
+
for jdx0 in range(self._discharges_length_0):
|
|
363
|
+
self._discharges_array[idx, jdx0] = self.discharges[jdx0]
|
|
364
|
+
cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
|
|
365
|
+
if name == "inflow":
|
|
366
|
+
self._inflow_outputpointer = value.p_value
|
|
367
|
+
if name == "outflow":
|
|
368
|
+
self._outflow_outputpointer = value.p_value
|
|
369
|
+
if name == "lateralflow":
|
|
370
|
+
self._lateralflow_outputpointer = value.p_value
|
|
371
|
+
if name == "netinflow":
|
|
372
|
+
self._netinflow_outputpointer = value.p_value
|
|
373
|
+
if name == "dischargeupstream":
|
|
374
|
+
self._dischargeupstream_outputpointer = value.p_value
|
|
375
|
+
if name == "dischargedownstream":
|
|
376
|
+
self._dischargedownstream_outputpointer = value.p_value
|
|
377
|
+
if name == "dischargevolume":
|
|
378
|
+
self._dischargevolume_outputpointer = value.p_value
|
|
379
|
+
cpdef inline void update_outputs(self) noexcept nogil:
|
|
380
|
+
if self._inflow_outputflag:
|
|
381
|
+
self._inflow_outputpointer[0] = self.inflow
|
|
382
|
+
if self._outflow_outputflag:
|
|
383
|
+
self._outflow_outputpointer[0] = self.outflow
|
|
384
|
+
if self._lateralflow_outputflag:
|
|
385
|
+
self._lateralflow_outputpointer[0] = self.lateralflow
|
|
386
|
+
if self._netinflow_outputflag:
|
|
387
|
+
self._netinflow_outputpointer[0] = self.netinflow
|
|
388
|
+
if self._dischargeupstream_outputflag:
|
|
389
|
+
self._dischargeupstream_outputpointer[0] = self.dischargeupstream
|
|
390
|
+
if self._dischargedownstream_outputflag:
|
|
391
|
+
self._dischargedownstream_outputpointer[0] = self.dischargedownstream
|
|
392
|
+
if self._dischargevolume_outputflag:
|
|
393
|
+
self._dischargevolume_outputpointer[0] = self.dischargevolume
|
|
394
|
+
@cython.final
|
|
395
|
+
cdef class StateSequences:
|
|
396
|
+
cpdef inline void load_data(self, numpy.int64_t idx) noexcept nogil:
|
|
397
|
+
cdef numpy.int64_t k
|
|
398
|
+
if self._watervolume_diskflag_reading:
|
|
399
|
+
self.watervolume = self._watervolume_ncarray[0]
|
|
400
|
+
elif self._watervolume_ramflag:
|
|
401
|
+
self.watervolume = self._watervolume_array[idx]
|
|
402
|
+
if self._discharge_diskflag_reading:
|
|
403
|
+
self.discharge = self._discharge_ncarray[0]
|
|
404
|
+
elif self._discharge_ramflag:
|
|
405
|
+
self.discharge = self._discharge_array[idx]
|
|
406
|
+
cpdef inline void save_data(self, numpy.int64_t idx) noexcept nogil:
|
|
407
|
+
cdef numpy.int64_t k
|
|
408
|
+
if self._watervolume_diskflag_writing:
|
|
409
|
+
self._watervolume_ncarray[0] = self.watervolume
|
|
410
|
+
if self._watervolume_ramflag:
|
|
411
|
+
self._watervolume_array[idx] = self.watervolume
|
|
412
|
+
if self._discharge_diskflag_writing:
|
|
413
|
+
self._discharge_ncarray[0] = self.discharge
|
|
414
|
+
if self._discharge_ramflag:
|
|
415
|
+
self._discharge_array[idx] = self.discharge
|
|
416
|
+
cpdef inline set_pointeroutput(self, str name, pointerutils.PDouble value):
|
|
417
|
+
if name == "watervolume":
|
|
418
|
+
self._watervolume_outputpointer = value.p_value
|
|
419
|
+
if name == "discharge":
|
|
420
|
+
self._discharge_outputpointer = value.p_value
|
|
421
|
+
cpdef inline void update_outputs(self) noexcept nogil:
|
|
422
|
+
if self._watervolume_outputflag:
|
|
423
|
+
self._watervolume_outputpointer[0] = self.watervolume
|
|
424
|
+
if self._discharge_outputflag:
|
|
425
|
+
self._discharge_outputpointer[0] = self.discharge
|
|
426
|
+
@cython.final
|
|
427
|
+
cdef class OutletSequences:
|
|
428
|
+
cpdef inline alloc(self, name, numpy.int64_t length):
|
|
429
|
+
if name == "longq":
|
|
430
|
+
self._longq_length_0 = length
|
|
431
|
+
self._longq_ready = numpy.full(length, 0, dtype=numpy.int64)
|
|
432
|
+
self.longq = <double**> PyMem_Malloc(length * sizeof(double*))
|
|
433
|
+
cpdef inline dealloc(self, name):
|
|
434
|
+
if name == "longq":
|
|
435
|
+
PyMem_Free(self.longq)
|
|
436
|
+
cpdef inline set_pointer1d(self, str name, pointerutils.Double value, numpy.int64_t idx):
|
|
437
|
+
cdef pointerutils.PDouble pointer = pointerutils.PDouble(value)
|
|
438
|
+
if name == "longq":
|
|
439
|
+
self.longq[idx] = pointer.p_value
|
|
440
|
+
self._longq_ready[idx] = 1
|
|
441
|
+
cpdef get_value(self, str name):
|
|
442
|
+
cdef numpy.int64_t idx
|
|
443
|
+
if name == "longq":
|
|
444
|
+
values = numpy.empty(self.len_longq)
|
|
445
|
+
for idx in range(self.len_longq):
|
|
446
|
+
pointerutils.check0(self._longq_length_0)
|
|
447
|
+
if self._longq_ready[idx] == 0:
|
|
448
|
+
pointerutils.check1(self._longq_length_0, idx)
|
|
449
|
+
pointerutils.check2(self._longq_ready, idx)
|
|
450
|
+
values[idx] = self.longq[idx][0]
|
|
451
|
+
return values
|
|
452
|
+
cpdef set_value(self, str name, value):
|
|
453
|
+
if name == "longq":
|
|
454
|
+
for idx in range(self.len_longq):
|
|
455
|
+
pointerutils.check0(self._longq_length_0)
|
|
456
|
+
if self._longq_ready[idx] == 0:
|
|
457
|
+
pointerutils.check1(self._longq_length_0, idx)
|
|
458
|
+
pointerutils.check2(self._longq_ready, idx)
|
|
459
|
+
self.longq[idx][0] = value[idx]
|
|
460
|
+
@cython.final
|
|
461
|
+
cdef class SenderSequences:
|
|
462
|
+
cpdef inline alloc(self, name, numpy.int64_t length):
|
|
463
|
+
if name == "waterlevel":
|
|
464
|
+
self._waterlevel_length_0 = length
|
|
465
|
+
self._waterlevel_ready = numpy.full(length, 0, dtype=numpy.int64)
|
|
466
|
+
self.waterlevel = <double**> PyMem_Malloc(length * sizeof(double*))
|
|
467
|
+
cpdef inline dealloc(self, name):
|
|
468
|
+
if name == "waterlevel":
|
|
469
|
+
PyMem_Free(self.waterlevel)
|
|
470
|
+
cpdef inline set_pointer1d(self, str name, pointerutils.Double value, numpy.int64_t idx):
|
|
471
|
+
cdef pointerutils.PDouble pointer = pointerutils.PDouble(value)
|
|
472
|
+
if name == "waterlevel":
|
|
473
|
+
self.waterlevel[idx] = pointer.p_value
|
|
474
|
+
self._waterlevel_ready[idx] = 1
|
|
475
|
+
cpdef get_value(self, str name):
|
|
476
|
+
cdef numpy.int64_t idx
|
|
477
|
+
if name == "waterlevel":
|
|
478
|
+
values = numpy.empty(self.len_waterlevel)
|
|
479
|
+
for idx in range(self.len_waterlevel):
|
|
480
|
+
pointerutils.check0(self._waterlevel_length_0)
|
|
481
|
+
if self._waterlevel_ready[idx] == 0:
|
|
482
|
+
pointerutils.check1(self._waterlevel_length_0, idx)
|
|
483
|
+
pointerutils.check2(self._waterlevel_ready, idx)
|
|
484
|
+
values[idx] = self.waterlevel[idx][0]
|
|
485
|
+
return values
|
|
486
|
+
cpdef set_value(self, str name, value):
|
|
487
|
+
if name == "waterlevel":
|
|
488
|
+
for idx in range(self.len_waterlevel):
|
|
489
|
+
pointerutils.check0(self._waterlevel_length_0)
|
|
490
|
+
if self._waterlevel_ready[idx] == 0:
|
|
491
|
+
pointerutils.check1(self._waterlevel_length_0, idx)
|
|
492
|
+
pointerutils.check2(self._waterlevel_ready, idx)
|
|
493
|
+
self.waterlevel[idx][0] = value[idx]
|
|
494
|
+
@cython.final
|
|
495
|
+
cdef class Model:
|
|
496
|
+
def __init__(self):
|
|
497
|
+
super().__init__()
|
|
498
|
+
self.channelmodels = interfaceutils.SubmodelsProperty()
|
|
499
|
+
self.crosssection = None
|
|
500
|
+
self.crosssection_is_mainmodel = False
|
|
501
|
+
self.routingmodels = interfaceutils.SubmodelsProperty()
|
|
502
|
+
self.routingmodelsdownstream = interfaceutils.SubmodelsProperty()
|
|
503
|
+
self.routingmodelsupstream = interfaceutils.SubmodelsProperty()
|
|
504
|
+
self.storagemodeldownstream = None
|
|
505
|
+
self.storagemodeldownstream_is_mainmodel = False
|
|
506
|
+
self.storagemodels = interfaceutils.SubmodelsProperty()
|
|
507
|
+
self.storagemodelupstream = None
|
|
508
|
+
self.storagemodelupstream_is_mainmodel = False
|
|
509
|
+
def get_crosssection(self) -> masterinterface.MasterInterface | None:
|
|
510
|
+
return self.crosssection
|
|
511
|
+
def set_crosssection(self, crosssection: masterinterface.MasterInterface | None) -> None:
|
|
512
|
+
self.crosssection = crosssection
|
|
513
|
+
def get_storagemodeldownstream(self) -> masterinterface.MasterInterface | None:
|
|
514
|
+
return self.storagemodeldownstream
|
|
515
|
+
def set_storagemodeldownstream(self, storagemodeldownstream: masterinterface.MasterInterface | None) -> None:
|
|
516
|
+
self.storagemodeldownstream = storagemodeldownstream
|
|
517
|
+
def get_storagemodelupstream(self) -> masterinterface.MasterInterface | None:
|
|
518
|
+
return self.storagemodelupstream
|
|
519
|
+
def set_storagemodelupstream(self, storagemodelupstream: masterinterface.MasterInterface | None) -> None:
|
|
520
|
+
self.storagemodelupstream = storagemodelupstream
|
|
521
|
+
cpdef inline void simulate(self, numpy.int64_t idx) noexcept nogil:
|
|
522
|
+
self.idx_sim = idx
|
|
523
|
+
self.reset_reuseflags()
|
|
524
|
+
self.load_data(idx)
|
|
525
|
+
self.update_inlets()
|
|
526
|
+
self.run()
|
|
527
|
+
self.new2old()
|
|
528
|
+
self.update_outlets()
|
|
529
|
+
self.update_outputs()
|
|
530
|
+
cpdef void reset_reuseflags(self) noexcept nogil:
|
|
531
|
+
cdef numpy.int64_t i_submodel
|
|
532
|
+
for i_submodel in range(self.channelmodels.number):
|
|
533
|
+
if self.channelmodels.typeids[i_submodel] > 0:
|
|
534
|
+
(<masterinterface.MasterInterface>self.channelmodels.submodels[i_submodel]).reset_reuseflags()
|
|
535
|
+
if (self.crosssection is not None) and not self.crosssection_is_mainmodel:
|
|
536
|
+
self.crosssection.reset_reuseflags()
|
|
537
|
+
for i_submodel in range(self.routingmodels.number):
|
|
538
|
+
if self.routingmodels.typeids[i_submodel] > 0:
|
|
539
|
+
(<masterinterface.MasterInterface>self.routingmodels.submodels[i_submodel]).reset_reuseflags()
|
|
540
|
+
if (self.storagemodeldownstream is not None) and not self.storagemodeldownstream_is_mainmodel:
|
|
541
|
+
self.storagemodeldownstream.reset_reuseflags()
|
|
542
|
+
for i_submodel in range(self.storagemodels.number):
|
|
543
|
+
if self.storagemodels.typeids[i_submodel] > 0:
|
|
544
|
+
(<masterinterface.MasterInterface>self.storagemodels.submodels[i_submodel]).reset_reuseflags()
|
|
545
|
+
if (self.storagemodelupstream is not None) and not self.storagemodelupstream_is_mainmodel:
|
|
546
|
+
self.storagemodelupstream.reset_reuseflags()
|
|
547
|
+
cpdef void load_data(self, numpy.int64_t idx) noexcept nogil:
|
|
548
|
+
self.idx_sim = idx
|
|
549
|
+
cdef numpy.int64_t i_submodel
|
|
550
|
+
for i_submodel in range(self.channelmodels.number):
|
|
551
|
+
if self.channelmodels.typeids[i_submodel] > 0:
|
|
552
|
+
(<masterinterface.MasterInterface>self.channelmodels.submodels[i_submodel]).load_data(idx)
|
|
553
|
+
if (self.crosssection is not None) and not self.crosssection_is_mainmodel:
|
|
554
|
+
self.crosssection.load_data(idx)
|
|
555
|
+
for i_submodel in range(self.routingmodels.number):
|
|
556
|
+
if self.routingmodels.typeids[i_submodel] > 0:
|
|
557
|
+
(<masterinterface.MasterInterface>self.routingmodels.submodels[i_submodel]).load_data(idx)
|
|
558
|
+
if (self.storagemodeldownstream is not None) and not self.storagemodeldownstream_is_mainmodel:
|
|
559
|
+
self.storagemodeldownstream.load_data(idx)
|
|
560
|
+
for i_submodel in range(self.storagemodels.number):
|
|
561
|
+
if self.storagemodels.typeids[i_submodel] > 0:
|
|
562
|
+
(<masterinterface.MasterInterface>self.storagemodels.submodels[i_submodel]).load_data(idx)
|
|
563
|
+
if (self.storagemodelupstream is not None) and not self.storagemodelupstream_is_mainmodel:
|
|
564
|
+
self.storagemodelupstream.load_data(idx)
|
|
565
|
+
cpdef void save_data(self, numpy.int64_t idx) noexcept nogil:
|
|
566
|
+
self.idx_sim = idx
|
|
567
|
+
self.sequences.factors.save_data(idx)
|
|
568
|
+
self.sequences.fluxes.save_data(idx)
|
|
569
|
+
self.sequences.states.save_data(idx)
|
|
570
|
+
cdef numpy.int64_t i_submodel
|
|
571
|
+
for i_submodel in range(self.channelmodels.number):
|
|
572
|
+
if self.channelmodels.typeids[i_submodel] > 0:
|
|
573
|
+
(<masterinterface.MasterInterface>self.channelmodels.submodels[i_submodel]).save_data(idx)
|
|
574
|
+
if (self.crosssection is not None) and not self.crosssection_is_mainmodel:
|
|
575
|
+
self.crosssection.save_data(idx)
|
|
576
|
+
for i_submodel in range(self.routingmodels.number):
|
|
577
|
+
if self.routingmodels.typeids[i_submodel] > 0:
|
|
578
|
+
(<masterinterface.MasterInterface>self.routingmodels.submodels[i_submodel]).save_data(idx)
|
|
579
|
+
if (self.storagemodeldownstream is not None) and not self.storagemodeldownstream_is_mainmodel:
|
|
580
|
+
self.storagemodeldownstream.save_data(idx)
|
|
581
|
+
for i_submodel in range(self.storagemodels.number):
|
|
582
|
+
if self.storagemodels.typeids[i_submodel] > 0:
|
|
583
|
+
(<masterinterface.MasterInterface>self.storagemodels.submodels[i_submodel]).save_data(idx)
|
|
584
|
+
if (self.storagemodelupstream is not None) and not self.storagemodelupstream_is_mainmodel:
|
|
585
|
+
self.storagemodelupstream.save_data(idx)
|
|
586
|
+
cpdef void new2old(self) noexcept nogil:
|
|
587
|
+
self.sequences.old_states.watervolume = self.sequences.new_states.watervolume
|
|
588
|
+
self.sequences.old_states.discharge = self.sequences.new_states.discharge
|
|
589
|
+
cdef numpy.int64_t i_submodel
|
|
590
|
+
for i_submodel in range(self.channelmodels.number):
|
|
591
|
+
if self.channelmodels.typeids[i_submodel] > 0:
|
|
592
|
+
(<masterinterface.MasterInterface>self.channelmodels.submodels[i_submodel]).new2old()
|
|
593
|
+
if (self.crosssection is not None) and not self.crosssection_is_mainmodel:
|
|
594
|
+
self.crosssection.new2old()
|
|
595
|
+
for i_submodel in range(self.routingmodels.number):
|
|
596
|
+
if self.routingmodels.typeids[i_submodel] > 0:
|
|
597
|
+
(<masterinterface.MasterInterface>self.routingmodels.submodels[i_submodel]).new2old()
|
|
598
|
+
if (self.storagemodeldownstream is not None) and not self.storagemodeldownstream_is_mainmodel:
|
|
599
|
+
self.storagemodeldownstream.new2old()
|
|
600
|
+
for i_submodel in range(self.storagemodels.number):
|
|
601
|
+
if self.storagemodels.typeids[i_submodel] > 0:
|
|
602
|
+
(<masterinterface.MasterInterface>self.storagemodels.submodels[i_submodel]).new2old()
|
|
603
|
+
if (self.storagemodelupstream is not None) and not self.storagemodelupstream_is_mainmodel:
|
|
604
|
+
self.storagemodelupstream.new2old()
|
|
605
|
+
cpdef inline void run(self) noexcept nogil:
|
|
606
|
+
self.timeleft = self.parameters.derived.seconds
|
|
607
|
+
while True:
|
|
608
|
+
self.calc_maxtimesteps_v1()
|
|
609
|
+
self.calc_timestep_v1()
|
|
610
|
+
self.send_timestep_v1()
|
|
611
|
+
self.calc_discharges_v1()
|
|
612
|
+
self.update_storages_v1()
|
|
613
|
+
self.query_waterlevels_v1()
|
|
614
|
+
if self.timeleft <= 0.0:
|
|
615
|
+
break
|
|
616
|
+
self.new2old()
|
|
617
|
+
cpdef inline void update_inlets(self) noexcept nogil:
|
|
618
|
+
self.pick_inflow_v1()
|
|
619
|
+
self.pick_outflow_v1()
|
|
620
|
+
self.pick_lateralflow_v1()
|
|
621
|
+
self.pick_waterleveldownstream_v1()
|
|
622
|
+
self.trigger_preprocessing_v1()
|
|
623
|
+
cpdef inline void update_outlets(self) noexcept nogil:
|
|
624
|
+
self.pass_discharge_v1()
|
|
625
|
+
self.pass_waterlevel_v1()
|
|
626
|
+
self.trigger_postprocessing_v1()
|
|
627
|
+
self.calc_discharges_v2()
|
|
628
|
+
cpdef inline void update_receivers(self, numpy.int64_t idx) noexcept nogil:
|
|
629
|
+
self.idx_sim = idx
|
|
630
|
+
pass
|
|
631
|
+
cpdef inline void update_senders(self, numpy.int64_t idx) noexcept nogil:
|
|
632
|
+
self.idx_sim = idx
|
|
633
|
+
pass
|
|
634
|
+
cpdef inline void update_outputs(self) noexcept nogil:
|
|
635
|
+
self.sequences.factors.update_outputs()
|
|
636
|
+
self.sequences.fluxes.update_outputs()
|
|
637
|
+
self.sequences.states.update_outputs()
|
|
638
|
+
cpdef inline void pick_inflow_v1(self) noexcept nogil:
|
|
639
|
+
cdef numpy.int64_t i
|
|
640
|
+
self.sequences.fluxes.inflow = 0.0
|
|
641
|
+
for i in range(self.sequences.inlets.len_longq):
|
|
642
|
+
self.sequences.fluxes.inflow = self.sequences.fluxes.inflow + (self.sequences.inlets.longq[i][0])
|
|
643
|
+
cpdef inline void pick_outflow_v1(self) noexcept nogil:
|
|
644
|
+
cdef numpy.int64_t i
|
|
645
|
+
self.sequences.fluxes.outflow = 0.0
|
|
646
|
+
for i in range(self.sequences.outlets.len_longq):
|
|
647
|
+
self.sequences.fluxes.outflow = self.sequences.fluxes.outflow + (self.sequences.outlets.longq[i][0])
|
|
648
|
+
cpdef inline void pick_lateralflow_v1(self) noexcept nogil:
|
|
649
|
+
cdef numpy.int64_t i
|
|
650
|
+
self.sequences.fluxes.lateralflow = 0.0
|
|
651
|
+
for i in range(self.sequences.inlets.len_latq):
|
|
652
|
+
self.sequences.fluxes.lateralflow = self.sequences.fluxes.lateralflow + (self.sequences.inlets.latq[i][0])
|
|
653
|
+
cpdef inline void pick_waterleveldownstream_v1(self) noexcept nogil:
|
|
654
|
+
self.sequences.factors.waterleveldownstream = self.sequences.receivers.waterlevel[0]
|
|
655
|
+
cpdef inline void trigger_preprocessing_v1(self) noexcept nogil:
|
|
656
|
+
cdef numpy.int64_t i
|
|
657
|
+
for i in range(self.routingmodels.number):
|
|
658
|
+
if self.routingmodels.typeids[i] in (1, 2, 3):
|
|
659
|
+
(<masterinterface.MasterInterface>self.routingmodels.submodels[i]).perform_preprocessing()
|
|
660
|
+
for i in range(self.storagemodels.number):
|
|
661
|
+
if self.storagemodels.typeids[i] == 1:
|
|
662
|
+
(<masterinterface.MasterInterface>self.storagemodels.submodels[i]).perform_preprocessing()
|
|
663
|
+
cpdef inline void calc_maxtimesteps_v1(self) noexcept nogil:
|
|
664
|
+
cdef numpy.int64_t i
|
|
665
|
+
for i in range(self.routingmodels.number):
|
|
666
|
+
if self.routingmodels.typeids[i] in (1, 2, 3):
|
|
667
|
+
(<masterinterface.MasterInterface>self.routingmodels.submodels[i]).determine_maxtimestep()
|
|
668
|
+
cpdef inline void calc_timestep_v1(self) noexcept nogil:
|
|
669
|
+
cdef double timestep
|
|
670
|
+
cdef numpy.int64_t i
|
|
671
|
+
self.sequences.factors.timestep = inf
|
|
672
|
+
for i in range(self.routingmodels.number):
|
|
673
|
+
if self.routingmodels.typeids[i] in (1, 2, 3):
|
|
674
|
+
timestep = (<masterinterface.MasterInterface>self.routingmodels.submodels[i]).get_maxtimestep()
|
|
675
|
+
self.sequences.factors.timestep = min(self.sequences.factors.timestep, timestep)
|
|
676
|
+
if self.sequences.factors.timestep < self.timeleft:
|
|
677
|
+
self.timeleft = self.timeleft - (self.sequences.factors.timestep)
|
|
678
|
+
else:
|
|
679
|
+
self.sequences.factors.timestep = self.timeleft
|
|
680
|
+
self.timeleft = 0.0
|
|
681
|
+
cpdef inline void send_timestep_v1(self) noexcept nogil:
|
|
682
|
+
cdef numpy.int64_t i
|
|
683
|
+
for i in range(self.routingmodels.number):
|
|
684
|
+
if self.routingmodels.typeids[i] in (1, 2, 3):
|
|
685
|
+
(<masterinterface.MasterInterface>self.routingmodels.submodels[i]).set_timestep(self.sequences.factors.timestep)
|
|
686
|
+
for i in range(self.storagemodels.number):
|
|
687
|
+
if self.storagemodels.typeids[i] == 1:
|
|
688
|
+
(<masterinterface.MasterInterface>self.storagemodels.submodels[i]).set_timestep(self.sequences.factors.timestep)
|
|
689
|
+
cpdef inline void calc_discharges_v1(self) noexcept nogil:
|
|
690
|
+
cdef numpy.int64_t i
|
|
691
|
+
for i in range(self.routingmodels.number):
|
|
692
|
+
if self.routingmodels.typeids[i] in (1, 2, 3):
|
|
693
|
+
(<masterinterface.MasterInterface>self.routingmodels.submodels[i]).determine_discharge()
|
|
694
|
+
cpdef inline void update_storages_v1(self) noexcept nogil:
|
|
695
|
+
cdef numpy.int64_t i
|
|
696
|
+
for i in range(self.storagemodels.number):
|
|
697
|
+
if self.storagemodels.typeids[i] == 1:
|
|
698
|
+
(<masterinterface.MasterInterface>self.storagemodels.submodels[i]).update_storage()
|
|
699
|
+
cpdef inline void query_waterlevels_v1(self) noexcept nogil:
|
|
700
|
+
cdef numpy.int64_t i
|
|
701
|
+
for i in range(self.storagemodels.number):
|
|
702
|
+
if self.storagemodels.typeids[i] == 1:
|
|
703
|
+
self.sequences.factors.waterlevels[i] = (<masterinterface.MasterInterface>self.storagemodels.submodels[i]).get_waterlevel()
|
|
704
|
+
cpdef void determine_discharge_v2(self) noexcept nogil:
|
|
705
|
+
self.sequences.states.discharge = self.sequences.fluxes.inflow
|
|
706
|
+
cpdef void determine_discharge_v4(self) noexcept nogil:
|
|
707
|
+
self.sequences.states.discharge = self.sequences.fluxes.outflow
|
|
708
|
+
cpdef double get_watervolume_v1(self) noexcept nogil:
|
|
709
|
+
return self.sequences.states.watervolume
|
|
710
|
+
cpdef double get_waterlevel_v1(self) noexcept nogil:
|
|
711
|
+
return self.sequences.factors.waterlevel
|
|
712
|
+
cpdef double get_discharge_v1(self) noexcept nogil:
|
|
713
|
+
return self.sequences.states.discharge
|
|
714
|
+
cpdef double get_dischargevolume_v1(self) noexcept nogil:
|
|
715
|
+
return self.sequences.fluxes.dischargevolume
|
|
716
|
+
cpdef double get_maxtimestep_v1(self) noexcept nogil:
|
|
717
|
+
return self.sequences.factors.maxtimestep
|
|
718
|
+
cpdef void set_timestep_v1(self, double timestep) noexcept nogil:
|
|
719
|
+
self.sequences.factors.timestep = timestep
|
|
720
|
+
cpdef double get_partialdischargeupstream_v1(self, double clientdischarge) noexcept nogil:
|
|
721
|
+
cdef numpy.int64_t i
|
|
722
|
+
cdef double dischargedownstream
|
|
723
|
+
dischargedownstream = 0.0
|
|
724
|
+
for i in range(self.routingmodelsdownstream.number):
|
|
725
|
+
if self.routingmodelsdownstream.typeids[i] in (2, 3):
|
|
726
|
+
dischargedownstream = dischargedownstream + (fabs( (<masterinterface.MasterInterface>self.routingmodelsdownstream.submodels[i]).get_discharge() ))
|
|
727
|
+
if dischargedownstream == 0.0:
|
|
728
|
+
return 0.0
|
|
729
|
+
return fabs(self.sequences.states.discharge) * clientdischarge / dischargedownstream
|
|
730
|
+
cpdef double get_partialdischargedownstream_v1(self, double clientdischarge) noexcept nogil:
|
|
731
|
+
cdef numpy.int64_t i
|
|
732
|
+
cdef double dischargeupstream
|
|
733
|
+
dischargeupstream = 0.0
|
|
734
|
+
for i in range(self.routingmodelsupstream.number):
|
|
735
|
+
if self.routingmodelsupstream.typeids[i] in (1, 2):
|
|
736
|
+
dischargeupstream = dischargeupstream + (fabs( (<masterinterface.MasterInterface>self.routingmodelsupstream.submodels[i]).get_discharge() ))
|
|
737
|
+
if dischargeupstream == 0.0:
|
|
738
|
+
return 0.0
|
|
739
|
+
return fabs(self.sequences.states.discharge) * clientdischarge / dischargeupstream
|
|
740
|
+
cpdef inline void calc_maxtimestep_v1(self) noexcept nogil:
|
|
741
|
+
if self.sequences.factors.waterdepth > 0.0:
|
|
742
|
+
self.sequences.factors.maxtimestep = (self.parameters.control.timestepfactor * 1000.0 * self.parameters.derived.lengthmin) / ( self.parameters.fixed.gravitationalacceleration * self.sequences.factors.waterdepth ) ** 0.5
|
|
743
|
+
else:
|
|
744
|
+
self.sequences.factors.maxtimestep = inf
|
|
745
|
+
cpdef inline void calc_maxtimestep_v2(self) noexcept nogil:
|
|
746
|
+
cdef double cel
|
|
747
|
+
if (self.sequences.fluxes.inflow != 0.0) and (self.sequences.factors.wettedarea > 0.0):
|
|
748
|
+
cel = fabs(5.0 / 3.0 * self.sequences.fluxes.inflow / self.sequences.factors.wettedarea)
|
|
749
|
+
self.sequences.factors.maxtimestep = self.parameters.control.timestepfactor * 1000.0 * self.parameters.control.lengthdownstream / cel
|
|
750
|
+
else:
|
|
751
|
+
self.sequences.factors.maxtimestep = inf
|
|
752
|
+
cpdef inline void calc_maxtimestep_v3(self) noexcept nogil:
|
|
753
|
+
cdef double cel
|
|
754
|
+
cdef double g
|
|
755
|
+
cdef double c
|
|
756
|
+
cdef double h
|
|
757
|
+
h = self.sequences.factors.waterlevel - self.parameters.control.crestheight
|
|
758
|
+
if h > 0.0:
|
|
759
|
+
c = self.parameters.control.flowcoefficient
|
|
760
|
+
g = self.parameters.fixed.gravitationalacceleration
|
|
761
|
+
cel = c * (2.0 * g * h) ** 0.5
|
|
762
|
+
self.sequences.factors.maxtimestep = self.parameters.control.timestepfactor * 1000.0 * self.parameters.control.lengthupstream / cel
|
|
763
|
+
else:
|
|
764
|
+
self.sequences.factors.maxtimestep = inf
|
|
765
|
+
cpdef inline void calc_maxtimestep_v4(self) noexcept nogil:
|
|
766
|
+
cdef double cel
|
|
767
|
+
if (self.sequences.fluxes.outflow != 0.0) and (self.sequences.factors.wettedarea > 0.0):
|
|
768
|
+
cel = fabs(5.0 / 3.0 * self.sequences.fluxes.outflow / self.sequences.factors.wettedarea)
|
|
769
|
+
self.sequences.factors.maxtimestep = self.parameters.control.timestepfactor * 1000.0 * self.parameters.control.lengthupstream / cel
|
|
770
|
+
else:
|
|
771
|
+
self.sequences.factors.maxtimestep = inf
|
|
772
|
+
cpdef inline void calc_maxtimestep_v5(self) noexcept nogil:
|
|
773
|
+
cdef double cel
|
|
774
|
+
cdef double ld
|
|
775
|
+
cdef double lu
|
|
776
|
+
cdef double g
|
|
777
|
+
cdef double c
|
|
778
|
+
cdef double h
|
|
779
|
+
self.parameters.control.gateheight_callback(self)
|
|
780
|
+
h = min(self.parameters.control.gateheight, self.sequences.factors.waterlevel) - self.parameters.control.bottomlevel
|
|
781
|
+
if h > 0.0:
|
|
782
|
+
c = self.parameters.control.flowcoefficient
|
|
783
|
+
g = self.parameters.fixed.gravitationalacceleration
|
|
784
|
+
lu = self.sequences.factors.waterlevelupstream
|
|
785
|
+
ld = self.sequences.factors.waterleveldownstream
|
|
786
|
+
cel = c * h * (2.0 * g * fabs(lu - ld)) ** 0.5
|
|
787
|
+
self.sequences.factors.maxtimestep = self.parameters.control.timestepfactor * 1000.0 * self.parameters.control.lengthupstream / cel
|
|
788
|
+
else:
|
|
789
|
+
self.sequences.factors.maxtimestep = inf
|
|
790
|
+
cpdef inline void calc_maxtimestep_v6(self) noexcept nogil:
|
|
791
|
+
cdef double cel
|
|
792
|
+
if (self.sequences.states.discharge != 0.0) and (self.sequences.factors.wettedarea > 0.0):
|
|
793
|
+
cel = fabs(5.0 / 3.0 * self.sequences.states.discharge / self.sequences.factors.wettedarea)
|
|
794
|
+
self.sequences.factors.maxtimestep = self.parameters.control.timestepfactor * 1000.0 * self.parameters.derived.lengthmin / cel
|
|
795
|
+
else:
|
|
796
|
+
self.sequences.factors.maxtimestep = inf
|
|
797
|
+
cpdef inline void calc_watervolumeupstream_v1(self) noexcept nogil:
|
|
798
|
+
if self.storagemodelupstream_typeid == 1:
|
|
799
|
+
self.sequences.factors.watervolumeupstream = (<masterinterface.MasterInterface>self.storagemodelupstream).get_watervolume()
|
|
800
|
+
cpdef inline void calc_watervolumedownstream_v1(self) noexcept nogil:
|
|
801
|
+
if self.storagemodeldownstream_typeid == 1:
|
|
802
|
+
self.sequences.factors.watervolumedownstream = (<masterinterface.MasterInterface>self.storagemodeldownstream).get_watervolume()
|
|
803
|
+
cpdef inline void calc_waterlevelupstream_v1(self) noexcept nogil:
|
|
804
|
+
if self.storagemodelupstream_typeid == 1:
|
|
805
|
+
self.sequences.factors.waterlevelupstream = (<masterinterface.MasterInterface>self.storagemodelupstream).get_waterlevel()
|
|
806
|
+
cpdef inline void calc_waterleveldownstream_v1(self) noexcept nogil:
|
|
807
|
+
if self.storagemodeldownstream_typeid == 1:
|
|
808
|
+
self.sequences.factors.waterleveldownstream = (<masterinterface.MasterInterface>self.storagemodeldownstream).get_waterlevel()
|
|
809
|
+
cpdef inline void calc_waterlevel_v1(self) noexcept nogil:
|
|
810
|
+
cdef double w
|
|
811
|
+
w = self.parameters.derived.weightupstream
|
|
812
|
+
self.sequences.factors.waterlevel = ( w * self.sequences.factors.waterlevelupstream + (1.0 - w) * self.sequences.factors.waterleveldownstream )
|
|
813
|
+
cpdef inline void calc_waterlevel_v2(self) noexcept nogil:
|
|
814
|
+
self.sequences.factors.waterlevel = self.sequences.factors.waterleveldownstream
|
|
815
|
+
cpdef inline void calc_waterlevel_v3(self) noexcept nogil:
|
|
816
|
+
self.sequences.factors.waterlevel = self.sequences.factors.waterlevelupstream
|
|
817
|
+
cpdef inline void calc_waterlevel_v4(self) noexcept nogil:
|
|
818
|
+
self.sequences.factors.waterlevel = (self.sequences.factors.waterlevelupstream + self.sequences.factors.waterleveldownstream) / 2.0
|
|
819
|
+
cpdef inline void calc_waterdepth_waterlevel_crosssectionmodel_v2(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
820
|
+
submodel.use_wettedarea(self.sequences.states.watervolume / self.parameters.control.length)
|
|
821
|
+
self.sequences.factors.waterdepth = submodel.get_waterdepth()
|
|
822
|
+
self.sequences.factors.waterlevel = submodel.get_waterlevel()
|
|
823
|
+
cpdef inline void calc_waterdepth_waterlevel_v1(self) noexcept nogil:
|
|
824
|
+
if self.crosssection_typeid == 2:
|
|
825
|
+
self.calc_waterdepth_waterlevel_crosssectionmodel_v2( (<masterinterface.MasterInterface>self.crosssection) )
|
|
826
|
+
cpdef inline void calc_waterdepth_wettedarea_crosssectionmodel_v2(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
827
|
+
submodel.use_waterlevel(self.sequences.factors.waterlevel)
|
|
828
|
+
self.sequences.factors.waterdepth = submodel.get_waterdepth()
|
|
829
|
+
self.sequences.factors.wettedarea = submodel.get_wettedarea()
|
|
830
|
+
cpdef inline void calc_waterdepth_wettedarea_v1(self) noexcept nogil:
|
|
831
|
+
if self.crosssection_typeid == 2:
|
|
832
|
+
self.calc_waterdepth_wettedarea_crosssectionmodel_v2( (<masterinterface.MasterInterface>self.crosssection) )
|
|
833
|
+
cpdef inline void calc_waterdepth_wettedarea_wettedperimeter_crosssectionmodel_v2(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
834
|
+
submodel.use_waterlevel(self.sequences.factors.waterlevel)
|
|
835
|
+
self.sequences.factors.waterdepth = submodel.get_waterdepth()
|
|
836
|
+
self.sequences.factors.wettedarea = submodel.get_wettedarea()
|
|
837
|
+
self.sequences.factors.wettedperimeter = submodel.get_wettedperimeter()
|
|
838
|
+
cpdef inline void calc_waterdepth_wettedarea_wettedperimeter_v1(self) noexcept nogil:
|
|
839
|
+
if self.crosssection_typeid == 2:
|
|
840
|
+
self.calc_waterdepth_wettedarea_wettedperimeter_crosssectionmodel_v2( (<masterinterface.MasterInterface>self.crosssection) )
|
|
841
|
+
cpdef inline void calc_dischargeupstream_v1(self) noexcept nogil:
|
|
842
|
+
cdef numpy.int64_t i
|
|
843
|
+
self.sequences.fluxes.dischargeupstream = 0.0
|
|
844
|
+
for i in range(self.routingmodelsupstream.number):
|
|
845
|
+
if self.routingmodelsupstream.typeids[i] in (1, 2):
|
|
846
|
+
self.sequences.fluxes.dischargeupstream = self.sequences.fluxes.dischargeupstream + ((<masterinterface.MasterInterface>self.routingmodelsupstream.submodels[i]).get_partialdischargeupstream(self.sequences.states.discharge))
|
|
847
|
+
cpdef inline void calc_dischargedownstream_v1(self) noexcept nogil:
|
|
848
|
+
cdef numpy.int64_t i
|
|
849
|
+
self.sequences.fluxes.dischargedownstream = 0.0
|
|
850
|
+
for i in range(self.routingmodelsdownstream.number):
|
|
851
|
+
if self.routingmodelsdownstream.typeids[i] in (2, 3):
|
|
852
|
+
self.sequences.fluxes.dischargedownstream = self.sequences.fluxes.dischargedownstream + ((<masterinterface.MasterInterface>self.routingmodelsdownstream.submodels[i]).get_partialdischargedownstream(self.sequences.states.discharge))
|
|
853
|
+
cpdef inline void calc_discharge_v1(self) noexcept nogil:
|
|
854
|
+
cdef double denominator
|
|
855
|
+
cdef double nominator2
|
|
856
|
+
cdef double nominator1
|
|
857
|
+
cdef double w
|
|
858
|
+
if self.sequences.factors.wettedarea > 0.0:
|
|
859
|
+
w = self.parameters.control.diffusionfactor
|
|
860
|
+
nominator1 = (1.0 - w) * self.sequences.states.discharge + w / 2.0 * ( self.sequences.fluxes.dischargeupstream + self.sequences.fluxes.dischargedownstream )
|
|
861
|
+
nominator2 = ( self.parameters.fixed.gravitationalacceleration * self.sequences.factors.wettedarea * self.sequences.factors.timestep * (self.sequences.factors.waterlevelupstream - self.sequences.factors.waterleveldownstream) / (1000.0 * self.parameters.derived.lengthmean) )
|
|
862
|
+
denominator = 1.0 + ( self.parameters.fixed.gravitationalacceleration * self.sequences.factors.timestep / self.parameters.control.stricklercoefficient**2.0 * fabs(self.sequences.states.discharge) * self.sequences.factors.wettedperimeter ** (4.0 / 3.0) / self.sequences.factors.wettedarea ** (7.0 / 3.0) )
|
|
863
|
+
self.sequences.states.discharge = (nominator1 + nominator2) / denominator
|
|
864
|
+
else:
|
|
865
|
+
self.sequences.states.discharge = 0.0
|
|
866
|
+
cpdef inline void calc_discharge_v2(self) noexcept nogil:
|
|
867
|
+
cdef double g
|
|
868
|
+
cdef double c
|
|
869
|
+
cdef double w
|
|
870
|
+
cdef double h
|
|
871
|
+
h = self.sequences.factors.waterlevel - self.parameters.control.crestheight
|
|
872
|
+
if h > 0.0:
|
|
873
|
+
w = self.parameters.control.crestwidth
|
|
874
|
+
c = self.parameters.control.flowcoefficient
|
|
875
|
+
g = self.parameters.fixed.gravitationalacceleration
|
|
876
|
+
self.sequences.states.discharge = w * 2.0 / 3.0 * c * (2.0 * g) ** 0.5 * h ** (3.0 / 2.0)
|
|
877
|
+
else:
|
|
878
|
+
self.sequences.states.discharge = 0.0
|
|
879
|
+
cpdef inline void calc_discharge_v3(self) noexcept nogil:
|
|
880
|
+
cdef double ld
|
|
881
|
+
cdef double lu
|
|
882
|
+
cdef double g
|
|
883
|
+
cdef double c
|
|
884
|
+
cdef double w
|
|
885
|
+
cdef double h
|
|
886
|
+
self.parameters.control.gateheight_callback(self)
|
|
887
|
+
h = min(self.parameters.control.gateheight, self.sequences.factors.waterlevel) - self.parameters.control.bottomlevel
|
|
888
|
+
if h > 0.0:
|
|
889
|
+
w = self.parameters.control.gatewidth
|
|
890
|
+
c = self.parameters.control.flowcoefficient
|
|
891
|
+
g = self.parameters.fixed.gravitationalacceleration
|
|
892
|
+
lu = self.sequences.factors.waterlevelupstream
|
|
893
|
+
ld = self.sequences.factors.waterleveldownstream
|
|
894
|
+
if ld < lu:
|
|
895
|
+
self.sequences.states.discharge = w * c * h * (2.0 * g * (lu - ld)) ** 0.5
|
|
896
|
+
else:
|
|
897
|
+
self.sequences.states.discharge = -w * c * h * (2.0 * g * (ld - lu)) ** 0.5
|
|
898
|
+
self.sequences.states.discharge = self.sequences.states.discharge * (1.0 - smoothutils.filter_norm(lu, ld, self.parameters.control.dampingradius))
|
|
899
|
+
else:
|
|
900
|
+
self.sequences.states.discharge = 0.0
|
|
901
|
+
cpdef inline void calc_discharge_v4(self) noexcept nogil:
|
|
902
|
+
cdef double t2
|
|
903
|
+
cdef double t1
|
|
904
|
+
cdef double hd
|
|
905
|
+
cdef double hu
|
|
906
|
+
hu = self.sequences.factors.waterlevelupstream
|
|
907
|
+
hd = self.sequences.factors.waterleveldownstream
|
|
908
|
+
t1 = self.parameters.control.targetwaterlevel1
|
|
909
|
+
t2 = self.parameters.control.targetwaterlevel2
|
|
910
|
+
if hu < t1:
|
|
911
|
+
self.sequences.states.discharge = 0.0
|
|
912
|
+
else:
|
|
913
|
+
self.parameters.control.gradient2pumpingrate.inputs[0] = hu - hd
|
|
914
|
+
self.parameters.control.gradient2pumpingrate.calculate_values()
|
|
915
|
+
self.sequences.states.discharge = max(self.parameters.control.gradient2pumpingrate.outputs[0], 0.0)
|
|
916
|
+
if hu < t2:
|
|
917
|
+
self.sequences.states.discharge = self.sequences.states.discharge * ((hu - t1) / (t2 - t1))
|
|
918
|
+
cpdef inline void update_discharge_v1(self) noexcept nogil:
|
|
919
|
+
cdef double q_min
|
|
920
|
+
cdef double q_max
|
|
921
|
+
if self.sequences.states.discharge > 0.0:
|
|
922
|
+
q_max = 1000.0 * max(self.sequences.factors.watervolumeupstream, 0.0) / self.sequences.factors.timestep
|
|
923
|
+
self.sequences.states.discharge = min(self.sequences.states.discharge, q_max)
|
|
924
|
+
elif self.sequences.states.discharge < 0.0:
|
|
925
|
+
q_min = -1000.0 * max(self.sequences.factors.watervolumedownstream, 0.0) / self.sequences.factors.timestep
|
|
926
|
+
self.sequences.states.discharge = max(self.sequences.states.discharge, q_min)
|
|
927
|
+
cpdef inline void update_discharge_v2(self) noexcept nogil:
|
|
928
|
+
cdef double state_free
|
|
929
|
+
cdef double state_sluice
|
|
930
|
+
cdef double state_closed
|
|
931
|
+
cdef double ht2
|
|
932
|
+
cdef double ht1
|
|
933
|
+
cdef double lt2
|
|
934
|
+
cdef double lt1
|
|
935
|
+
cdef numpy.int64_t toy
|
|
936
|
+
cdef double hd
|
|
937
|
+
cdef double hu
|
|
938
|
+
hu = self.sequences.factors.waterlevelupstream
|
|
939
|
+
hd = self.sequences.factors.waterleveldownstream
|
|
940
|
+
toy = self.parameters.derived.toy[self.idx_sim]
|
|
941
|
+
lt1 = self.parameters.control.bottomlowwaterthreshold[toy]
|
|
942
|
+
lt2 = self.parameters.control.upperlowwaterthreshold[toy]
|
|
943
|
+
ht1 = self.parameters.control.bottomhighwaterthreshold[toy]
|
|
944
|
+
ht2 = self.parameters.control.upperhighwaterthreshold[toy]
|
|
945
|
+
if hu < lt1:
|
|
946
|
+
state_closed = 1.0
|
|
947
|
+
elif hu < lt2:
|
|
948
|
+
state_closed = 1.0 - (hu - lt1) / (lt2 - lt1)
|
|
949
|
+
else:
|
|
950
|
+
state_closed = 0.0
|
|
951
|
+
if hu < ht1:
|
|
952
|
+
state_sluice = 0.0
|
|
953
|
+
elif hu < ht2:
|
|
954
|
+
state_sluice = (hu - ht1) / (ht2 - ht1)
|
|
955
|
+
else:
|
|
956
|
+
state_sluice = 1.0
|
|
957
|
+
state_free = 1.0 - state_closed - state_sluice
|
|
958
|
+
self.sequences.states.discharge = self.sequences.states.discharge * (state_free + (state_sluice if hu > hd else 0.0))
|
|
959
|
+
cpdef inline void reset_dischargevolume_v1(self) noexcept nogil:
|
|
960
|
+
self.sequences.fluxes.dischargevolume = 0.0
|
|
961
|
+
cpdef inline void update_dischargevolume_v1(self) noexcept nogil:
|
|
962
|
+
self.sequences.fluxes.dischargevolume = self.sequences.fluxes.dischargevolume + (self.sequences.factors.timestep * self.sequences.states.discharge)
|
|
963
|
+
cpdef inline void calc_dischargevolume_v1(self) noexcept nogil:
|
|
964
|
+
self.sequences.fluxes.dischargevolume = self.parameters.derived.seconds * self.sequences.fluxes.inflow
|
|
965
|
+
cpdef inline void calc_dischargevolume_v2(self) noexcept nogil:
|
|
966
|
+
self.sequences.fluxes.dischargevolume = self.parameters.derived.seconds * self.sequences.fluxes.outflow
|
|
967
|
+
cpdef inline void calc_netinflow_v1(self) noexcept nogil:
|
|
968
|
+
cdef numpy.int64_t i
|
|
969
|
+
self.sequences.fluxes.netinflow = self.sequences.fluxes.lateralflow
|
|
970
|
+
for i in range(self.routingmodelsupstream.number):
|
|
971
|
+
if self.routingmodelsupstream.typeids[i] in (1, 2):
|
|
972
|
+
self.sequences.fluxes.netinflow = self.sequences.fluxes.netinflow + ((<masterinterface.MasterInterface>self.routingmodelsupstream.submodels[i]).get_discharge())
|
|
973
|
+
for i in range(self.routingmodelsdownstream.number):
|
|
974
|
+
if self.routingmodelsdownstream.typeids[i] in (2, 3):
|
|
975
|
+
self.sequences.fluxes.netinflow = self.sequences.fluxes.netinflow - ((<masterinterface.MasterInterface>self.routingmodelsdownstream.submodels[i]).get_discharge())
|
|
976
|
+
self.sequences.fluxes.netinflow = self.sequences.fluxes.netinflow * (self.sequences.factors.timestep / 1e3)
|
|
977
|
+
cpdef inline void update_watervolume_v1(self) noexcept nogil:
|
|
978
|
+
self.sequences.states.watervolume = self.sequences.states.watervolume + (self.sequences.fluxes.netinflow)
|
|
979
|
+
cpdef inline void pass_discharge_v1(self) noexcept nogil:
|
|
980
|
+
cdef numpy.int64_t i
|
|
981
|
+
cdef double discharge
|
|
982
|
+
discharge = self.sequences.fluxes.dischargevolume / self.parameters.derived.seconds
|
|
983
|
+
for i in range(self.sequences.inlets.len_longq):
|
|
984
|
+
self.sequences.inlets.longq[i][0] = self.sequences.inlets.longq[i][0] + (discharge)
|
|
985
|
+
for i in range(self.sequences.outlets.len_longq):
|
|
986
|
+
self.sequences.outlets.longq[i][0] = self.sequences.outlets.longq[i][0] + (discharge)
|
|
987
|
+
cpdef inline void pass_waterlevel_v1(self) noexcept nogil:
|
|
988
|
+
cdef numpy.int64_t i
|
|
989
|
+
for i in range(self.sequences.senders.len_waterlevel):
|
|
990
|
+
self.sequences.senders.waterlevel[i][0] = self.sequences.factors.waterlevel
|
|
991
|
+
cpdef inline void trigger_postprocessing_v1(self) noexcept nogil:
|
|
992
|
+
cdef numpy.int64_t i
|
|
993
|
+
for i in range(self.routingmodels.number):
|
|
994
|
+
if self.routingmodels.typeids[i] in (1, 2, 3):
|
|
995
|
+
(<masterinterface.MasterInterface>self.routingmodels.submodels[i]).perform_postprocessing()
|
|
996
|
+
for i in range(self.storagemodels.number):
|
|
997
|
+
if self.storagemodels.typeids[i] == 1:
|
|
998
|
+
(<masterinterface.MasterInterface>self.storagemodels.submodels[i]).perform_postprocessing()
|
|
999
|
+
cpdef inline void calc_discharges_v2(self) noexcept nogil:
|
|
1000
|
+
cdef numpy.int64_t i
|
|
1001
|
+
for i in range(self.routingmodels.number):
|
|
1002
|
+
if self.routingmodels.typeids[i] in (1, 2, 3):
|
|
1003
|
+
self.sequences.fluxes.discharges[i] = ( (<masterinterface.MasterInterface>self.routingmodels.submodels[i]).get_dischargevolume() / self.parameters.derived.seconds )
|
|
1004
|
+
else:
|
|
1005
|
+
self.sequences.fluxes.discharges[i] = 0.0
|
|
1006
|
+
cpdef inline void pick_inflow(self) noexcept nogil:
|
|
1007
|
+
cdef numpy.int64_t i
|
|
1008
|
+
self.sequences.fluxes.inflow = 0.0
|
|
1009
|
+
for i in range(self.sequences.inlets.len_longq):
|
|
1010
|
+
self.sequences.fluxes.inflow = self.sequences.fluxes.inflow + (self.sequences.inlets.longq[i][0])
|
|
1011
|
+
cpdef inline void pick_outflow(self) noexcept nogil:
|
|
1012
|
+
cdef numpy.int64_t i
|
|
1013
|
+
self.sequences.fluxes.outflow = 0.0
|
|
1014
|
+
for i in range(self.sequences.outlets.len_longq):
|
|
1015
|
+
self.sequences.fluxes.outflow = self.sequences.fluxes.outflow + (self.sequences.outlets.longq[i][0])
|
|
1016
|
+
cpdef inline void pick_lateralflow(self) noexcept nogil:
|
|
1017
|
+
cdef numpy.int64_t i
|
|
1018
|
+
self.sequences.fluxes.lateralflow = 0.0
|
|
1019
|
+
for i in range(self.sequences.inlets.len_latq):
|
|
1020
|
+
self.sequences.fluxes.lateralflow = self.sequences.fluxes.lateralflow + (self.sequences.inlets.latq[i][0])
|
|
1021
|
+
cpdef inline void pick_waterleveldownstream(self) noexcept nogil:
|
|
1022
|
+
self.sequences.factors.waterleveldownstream = self.sequences.receivers.waterlevel[0]
|
|
1023
|
+
cpdef inline void trigger_preprocessing(self) noexcept nogil:
|
|
1024
|
+
cdef numpy.int64_t i
|
|
1025
|
+
for i in range(self.routingmodels.number):
|
|
1026
|
+
if self.routingmodels.typeids[i] in (1, 2, 3):
|
|
1027
|
+
(<masterinterface.MasterInterface>self.routingmodels.submodels[i]).perform_preprocessing()
|
|
1028
|
+
for i in range(self.storagemodels.number):
|
|
1029
|
+
if self.storagemodels.typeids[i] == 1:
|
|
1030
|
+
(<masterinterface.MasterInterface>self.storagemodels.submodels[i]).perform_preprocessing()
|
|
1031
|
+
cpdef inline void calc_maxtimesteps(self) noexcept nogil:
|
|
1032
|
+
cdef numpy.int64_t i
|
|
1033
|
+
for i in range(self.routingmodels.number):
|
|
1034
|
+
if self.routingmodels.typeids[i] in (1, 2, 3):
|
|
1035
|
+
(<masterinterface.MasterInterface>self.routingmodels.submodels[i]).determine_maxtimestep()
|
|
1036
|
+
cpdef inline void calc_timestep(self) noexcept nogil:
|
|
1037
|
+
cdef double timestep
|
|
1038
|
+
cdef numpy.int64_t i
|
|
1039
|
+
self.sequences.factors.timestep = inf
|
|
1040
|
+
for i in range(self.routingmodels.number):
|
|
1041
|
+
if self.routingmodels.typeids[i] in (1, 2, 3):
|
|
1042
|
+
timestep = (<masterinterface.MasterInterface>self.routingmodels.submodels[i]).get_maxtimestep()
|
|
1043
|
+
self.sequences.factors.timestep = min(self.sequences.factors.timestep, timestep)
|
|
1044
|
+
if self.sequences.factors.timestep < self.timeleft:
|
|
1045
|
+
self.timeleft = self.timeleft - (self.sequences.factors.timestep)
|
|
1046
|
+
else:
|
|
1047
|
+
self.sequences.factors.timestep = self.timeleft
|
|
1048
|
+
self.timeleft = 0.0
|
|
1049
|
+
cpdef inline void send_timestep(self) noexcept nogil:
|
|
1050
|
+
cdef numpy.int64_t i
|
|
1051
|
+
for i in range(self.routingmodels.number):
|
|
1052
|
+
if self.routingmodels.typeids[i] in (1, 2, 3):
|
|
1053
|
+
(<masterinterface.MasterInterface>self.routingmodels.submodels[i]).set_timestep(self.sequences.factors.timestep)
|
|
1054
|
+
for i in range(self.storagemodels.number):
|
|
1055
|
+
if self.storagemodels.typeids[i] == 1:
|
|
1056
|
+
(<masterinterface.MasterInterface>self.storagemodels.submodels[i]).set_timestep(self.sequences.factors.timestep)
|
|
1057
|
+
cpdef inline void update_storages(self) noexcept nogil:
|
|
1058
|
+
cdef numpy.int64_t i
|
|
1059
|
+
for i in range(self.storagemodels.number):
|
|
1060
|
+
if self.storagemodels.typeids[i] == 1:
|
|
1061
|
+
(<masterinterface.MasterInterface>self.storagemodels.submodels[i]).update_storage()
|
|
1062
|
+
cpdef inline void query_waterlevels(self) noexcept nogil:
|
|
1063
|
+
cdef numpy.int64_t i
|
|
1064
|
+
for i in range(self.storagemodels.number):
|
|
1065
|
+
if self.storagemodels.typeids[i] == 1:
|
|
1066
|
+
self.sequences.factors.waterlevels[i] = (<masterinterface.MasterInterface>self.storagemodels.submodels[i]).get_waterlevel()
|
|
1067
|
+
cpdef double get_watervolume(self) noexcept nogil:
|
|
1068
|
+
return self.sequences.states.watervolume
|
|
1069
|
+
cpdef double get_waterlevel(self) noexcept nogil:
|
|
1070
|
+
return self.sequences.factors.waterlevel
|
|
1071
|
+
cpdef double get_discharge(self) noexcept nogil:
|
|
1072
|
+
return self.sequences.states.discharge
|
|
1073
|
+
cpdef double get_dischargevolume(self) noexcept nogil:
|
|
1074
|
+
return self.sequences.fluxes.dischargevolume
|
|
1075
|
+
cpdef double get_maxtimestep(self) noexcept nogil:
|
|
1076
|
+
return self.sequences.factors.maxtimestep
|
|
1077
|
+
cpdef void set_timestep(self, double timestep) noexcept nogil:
|
|
1078
|
+
self.sequences.factors.timestep = timestep
|
|
1079
|
+
cpdef double get_partialdischargeupstream(self, double clientdischarge) noexcept nogil:
|
|
1080
|
+
cdef numpy.int64_t i
|
|
1081
|
+
cdef double dischargedownstream
|
|
1082
|
+
dischargedownstream = 0.0
|
|
1083
|
+
for i in range(self.routingmodelsdownstream.number):
|
|
1084
|
+
if self.routingmodelsdownstream.typeids[i] in (2, 3):
|
|
1085
|
+
dischargedownstream = dischargedownstream + (fabs( (<masterinterface.MasterInterface>self.routingmodelsdownstream.submodels[i]).get_discharge() ))
|
|
1086
|
+
if dischargedownstream == 0.0:
|
|
1087
|
+
return 0.0
|
|
1088
|
+
return fabs(self.sequences.states.discharge) * clientdischarge / dischargedownstream
|
|
1089
|
+
cpdef double get_partialdischargedownstream(self, double clientdischarge) noexcept nogil:
|
|
1090
|
+
cdef numpy.int64_t i
|
|
1091
|
+
cdef double dischargeupstream
|
|
1092
|
+
dischargeupstream = 0.0
|
|
1093
|
+
for i in range(self.routingmodelsupstream.number):
|
|
1094
|
+
if self.routingmodelsupstream.typeids[i] in (1, 2):
|
|
1095
|
+
dischargeupstream = dischargeupstream + (fabs( (<masterinterface.MasterInterface>self.routingmodelsupstream.submodels[i]).get_discharge() ))
|
|
1096
|
+
if dischargeupstream == 0.0:
|
|
1097
|
+
return 0.0
|
|
1098
|
+
return fabs(self.sequences.states.discharge) * clientdischarge / dischargeupstream
|
|
1099
|
+
cpdef inline void calc_watervolumeupstream(self) noexcept nogil:
|
|
1100
|
+
if self.storagemodelupstream_typeid == 1:
|
|
1101
|
+
self.sequences.factors.watervolumeupstream = (<masterinterface.MasterInterface>self.storagemodelupstream).get_watervolume()
|
|
1102
|
+
cpdef inline void calc_watervolumedownstream(self) noexcept nogil:
|
|
1103
|
+
if self.storagemodeldownstream_typeid == 1:
|
|
1104
|
+
self.sequences.factors.watervolumedownstream = (<masterinterface.MasterInterface>self.storagemodeldownstream).get_watervolume()
|
|
1105
|
+
cpdef inline void calc_waterlevelupstream(self) noexcept nogil:
|
|
1106
|
+
if self.storagemodelupstream_typeid == 1:
|
|
1107
|
+
self.sequences.factors.waterlevelupstream = (<masterinterface.MasterInterface>self.storagemodelupstream).get_waterlevel()
|
|
1108
|
+
cpdef inline void calc_waterleveldownstream(self) noexcept nogil:
|
|
1109
|
+
if self.storagemodeldownstream_typeid == 1:
|
|
1110
|
+
self.sequences.factors.waterleveldownstream = (<masterinterface.MasterInterface>self.storagemodeldownstream).get_waterlevel()
|
|
1111
|
+
cpdef inline void calc_waterdepth_waterlevel_crosssectionmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1112
|
+
submodel.use_wettedarea(self.sequences.states.watervolume / self.parameters.control.length)
|
|
1113
|
+
self.sequences.factors.waterdepth = submodel.get_waterdepth()
|
|
1114
|
+
self.sequences.factors.waterlevel = submodel.get_waterlevel()
|
|
1115
|
+
cpdef inline void calc_waterdepth_waterlevel(self) noexcept nogil:
|
|
1116
|
+
if self.crosssection_typeid == 2:
|
|
1117
|
+
self.calc_waterdepth_waterlevel_crosssectionmodel_v2( (<masterinterface.MasterInterface>self.crosssection) )
|
|
1118
|
+
cpdef inline void calc_waterdepth_wettedarea_crosssectionmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1119
|
+
submodel.use_waterlevel(self.sequences.factors.waterlevel)
|
|
1120
|
+
self.sequences.factors.waterdepth = submodel.get_waterdepth()
|
|
1121
|
+
self.sequences.factors.wettedarea = submodel.get_wettedarea()
|
|
1122
|
+
cpdef inline void calc_waterdepth_wettedarea(self) noexcept nogil:
|
|
1123
|
+
if self.crosssection_typeid == 2:
|
|
1124
|
+
self.calc_waterdepth_wettedarea_crosssectionmodel_v2( (<masterinterface.MasterInterface>self.crosssection) )
|
|
1125
|
+
cpdef inline void calc_waterdepth_wettedarea_wettedperimeter_crosssectionmodel(self, masterinterface.MasterInterface submodel) noexcept nogil:
|
|
1126
|
+
submodel.use_waterlevel(self.sequences.factors.waterlevel)
|
|
1127
|
+
self.sequences.factors.waterdepth = submodel.get_waterdepth()
|
|
1128
|
+
self.sequences.factors.wettedarea = submodel.get_wettedarea()
|
|
1129
|
+
self.sequences.factors.wettedperimeter = submodel.get_wettedperimeter()
|
|
1130
|
+
cpdef inline void calc_waterdepth_wettedarea_wettedperimeter(self) noexcept nogil:
|
|
1131
|
+
if self.crosssection_typeid == 2:
|
|
1132
|
+
self.calc_waterdepth_wettedarea_wettedperimeter_crosssectionmodel_v2( (<masterinterface.MasterInterface>self.crosssection) )
|
|
1133
|
+
cpdef inline void calc_dischargeupstream(self) noexcept nogil:
|
|
1134
|
+
cdef numpy.int64_t i
|
|
1135
|
+
self.sequences.fluxes.dischargeupstream = 0.0
|
|
1136
|
+
for i in range(self.routingmodelsupstream.number):
|
|
1137
|
+
if self.routingmodelsupstream.typeids[i] in (1, 2):
|
|
1138
|
+
self.sequences.fluxes.dischargeupstream = self.sequences.fluxes.dischargeupstream + ((<masterinterface.MasterInterface>self.routingmodelsupstream.submodels[i]).get_partialdischargeupstream(self.sequences.states.discharge))
|
|
1139
|
+
cpdef inline void calc_dischargedownstream(self) noexcept nogil:
|
|
1140
|
+
cdef numpy.int64_t i
|
|
1141
|
+
self.sequences.fluxes.dischargedownstream = 0.0
|
|
1142
|
+
for i in range(self.routingmodelsdownstream.number):
|
|
1143
|
+
if self.routingmodelsdownstream.typeids[i] in (2, 3):
|
|
1144
|
+
self.sequences.fluxes.dischargedownstream = self.sequences.fluxes.dischargedownstream + ((<masterinterface.MasterInterface>self.routingmodelsdownstream.submodels[i]).get_partialdischargedownstream(self.sequences.states.discharge))
|
|
1145
|
+
cpdef inline void reset_dischargevolume(self) noexcept nogil:
|
|
1146
|
+
self.sequences.fluxes.dischargevolume = 0.0
|
|
1147
|
+
cpdef inline void update_dischargevolume(self) noexcept nogil:
|
|
1148
|
+
self.sequences.fluxes.dischargevolume = self.sequences.fluxes.dischargevolume + (self.sequences.factors.timestep * self.sequences.states.discharge)
|
|
1149
|
+
cpdef inline void calc_netinflow(self) noexcept nogil:
|
|
1150
|
+
cdef numpy.int64_t i
|
|
1151
|
+
self.sequences.fluxes.netinflow = self.sequences.fluxes.lateralflow
|
|
1152
|
+
for i in range(self.routingmodelsupstream.number):
|
|
1153
|
+
if self.routingmodelsupstream.typeids[i] in (1, 2):
|
|
1154
|
+
self.sequences.fluxes.netinflow = self.sequences.fluxes.netinflow + ((<masterinterface.MasterInterface>self.routingmodelsupstream.submodels[i]).get_discharge())
|
|
1155
|
+
for i in range(self.routingmodelsdownstream.number):
|
|
1156
|
+
if self.routingmodelsdownstream.typeids[i] in (2, 3):
|
|
1157
|
+
self.sequences.fluxes.netinflow = self.sequences.fluxes.netinflow - ((<masterinterface.MasterInterface>self.routingmodelsdownstream.submodels[i]).get_discharge())
|
|
1158
|
+
self.sequences.fluxes.netinflow = self.sequences.fluxes.netinflow * (self.sequences.factors.timestep / 1e3)
|
|
1159
|
+
cpdef inline void update_watervolume(self) noexcept nogil:
|
|
1160
|
+
self.sequences.states.watervolume = self.sequences.states.watervolume + (self.sequences.fluxes.netinflow)
|
|
1161
|
+
cpdef inline void pass_discharge(self) noexcept nogil:
|
|
1162
|
+
cdef numpy.int64_t i
|
|
1163
|
+
cdef double discharge
|
|
1164
|
+
discharge = self.sequences.fluxes.dischargevolume / self.parameters.derived.seconds
|
|
1165
|
+
for i in range(self.sequences.inlets.len_longq):
|
|
1166
|
+
self.sequences.inlets.longq[i][0] = self.sequences.inlets.longq[i][0] + (discharge)
|
|
1167
|
+
for i in range(self.sequences.outlets.len_longq):
|
|
1168
|
+
self.sequences.outlets.longq[i][0] = self.sequences.outlets.longq[i][0] + (discharge)
|
|
1169
|
+
cpdef inline void pass_waterlevel(self) noexcept nogil:
|
|
1170
|
+
cdef numpy.int64_t i
|
|
1171
|
+
for i in range(self.sequences.senders.len_waterlevel):
|
|
1172
|
+
self.sequences.senders.waterlevel[i][0] = self.sequences.factors.waterlevel
|
|
1173
|
+
cpdef inline void trigger_postprocessing(self) noexcept nogil:
|
|
1174
|
+
cdef numpy.int64_t i
|
|
1175
|
+
for i in range(self.routingmodels.number):
|
|
1176
|
+
if self.routingmodels.typeids[i] in (1, 2, 3):
|
|
1177
|
+
(<masterinterface.MasterInterface>self.routingmodels.submodels[i]).perform_postprocessing()
|
|
1178
|
+
for i in range(self.storagemodels.number):
|
|
1179
|
+
if self.storagemodels.typeids[i] == 1:
|
|
1180
|
+
(<masterinterface.MasterInterface>self.storagemodels.submodels[i]).perform_postprocessing()
|
|
1181
|
+
cpdef void perform_preprocessing_v1(self) noexcept nogil:
|
|
1182
|
+
self.pick_inflow_v1()
|
|
1183
|
+
cpdef void perform_preprocessing_v2(self) noexcept nogil:
|
|
1184
|
+
self.reset_dischargevolume_v1()
|
|
1185
|
+
cpdef void perform_preprocessing_v3(self) noexcept nogil:
|
|
1186
|
+
self.pick_lateralflow_v1()
|
|
1187
|
+
self.calc_waterdepth_waterlevel_v1()
|
|
1188
|
+
cpdef void perform_preprocessing_v4(self) noexcept nogil:
|
|
1189
|
+
self.pick_outflow_v1()
|
|
1190
|
+
cpdef void perform_preprocessing_v5(self) noexcept nogil:
|
|
1191
|
+
self.pick_waterleveldownstream_v1()
|
|
1192
|
+
self.reset_dischargevolume_v1()
|
|
1193
|
+
cpdef void perform_postprocessing_v1(self) noexcept nogil:
|
|
1194
|
+
self.calc_dischargevolume_v1()
|
|
1195
|
+
cpdef void perform_postprocessing_v2(self) noexcept nogil:
|
|
1196
|
+
self.pass_discharge_v1()
|
|
1197
|
+
cpdef void perform_postprocessing_v3(self) noexcept nogil:
|
|
1198
|
+
self.pass_waterlevel_v1()
|
|
1199
|
+
cpdef void perform_postprocessing_v4(self) noexcept nogil:
|
|
1200
|
+
self.calc_dischargevolume_v2()
|
|
1201
|
+
cpdef void determine_maxtimestep_v1(self) noexcept nogil:
|
|
1202
|
+
self.calc_waterlevelupstream_v1()
|
|
1203
|
+
self.calc_waterleveldownstream_v1()
|
|
1204
|
+
self.calc_waterlevel_v1()
|
|
1205
|
+
self.calc_waterdepth_wettedarea_wettedperimeter_v1()
|
|
1206
|
+
self.calc_dischargeupstream_v1()
|
|
1207
|
+
self.calc_dischargedownstream_v1()
|
|
1208
|
+
self.calc_maxtimestep_v1()
|
|
1209
|
+
cpdef void determine_maxtimestep_v2(self) noexcept nogil:
|
|
1210
|
+
self.calc_waterleveldownstream_v1()
|
|
1211
|
+
self.calc_waterlevel_v2()
|
|
1212
|
+
self.calc_waterdepth_wettedarea_v1()
|
|
1213
|
+
self.calc_maxtimestep_v2()
|
|
1214
|
+
cpdef void determine_maxtimestep_v3(self) noexcept nogil:
|
|
1215
|
+
self.calc_waterlevelupstream_v1()
|
|
1216
|
+
self.calc_waterlevel_v3()
|
|
1217
|
+
self.calc_maxtimestep_v3()
|
|
1218
|
+
cpdef void determine_maxtimestep_v4(self) noexcept nogil:
|
|
1219
|
+
self.calc_waterlevelupstream_v1()
|
|
1220
|
+
self.calc_waterlevel_v3()
|
|
1221
|
+
self.calc_waterdepth_wettedarea_v1()
|
|
1222
|
+
self.calc_maxtimestep_v4()
|
|
1223
|
+
cpdef void determine_maxtimestep_v5(self) noexcept nogil:
|
|
1224
|
+
self.calc_waterlevelupstream_v1()
|
|
1225
|
+
self.calc_waterlevel_v4()
|
|
1226
|
+
self.calc_maxtimestep_v5()
|
|
1227
|
+
cpdef void determine_maxtimestep_v6(self) noexcept nogil:
|
|
1228
|
+
self.calc_waterlevelupstream_v1()
|
|
1229
|
+
self.calc_waterleveldownstream_v1()
|
|
1230
|
+
self.calc_waterlevel_v1()
|
|
1231
|
+
self.calc_waterdepth_wettedarea_v1()
|
|
1232
|
+
self.calc_maxtimestep_v6()
|
|
1233
|
+
cpdef void determine_discharge_v1(self) noexcept nogil:
|
|
1234
|
+
self.calc_watervolumeupstream_v1()
|
|
1235
|
+
self.calc_watervolumedownstream_v1()
|
|
1236
|
+
self.calc_discharge_v1()
|
|
1237
|
+
self.update_discharge_v1()
|
|
1238
|
+
self.update_dischargevolume_v1()
|
|
1239
|
+
cpdef void determine_discharge_v3(self) noexcept nogil:
|
|
1240
|
+
self.calc_discharge_v2()
|
|
1241
|
+
self.update_dischargevolume_v1()
|
|
1242
|
+
cpdef void determine_discharge_v5(self) noexcept nogil:
|
|
1243
|
+
self.calc_watervolumeupstream_v1()
|
|
1244
|
+
self.calc_watervolumedownstream_v1()
|
|
1245
|
+
self.calc_discharge_v1()
|
|
1246
|
+
self.update_discharge_v1()
|
|
1247
|
+
self.update_discharge_v2()
|
|
1248
|
+
self.update_dischargevolume_v1()
|
|
1249
|
+
cpdef void determine_discharge_v6(self) noexcept nogil:
|
|
1250
|
+
self.calc_discharge_v3()
|
|
1251
|
+
self.update_dischargevolume_v1()
|
|
1252
|
+
cpdef void determine_discharge_v7(self) noexcept nogil:
|
|
1253
|
+
self.calc_waterlevel_v3()
|
|
1254
|
+
self.calc_discharge_v4()
|
|
1255
|
+
self.update_dischargevolume_v1()
|
|
1256
|
+
cpdef void update_storage_v1(self) noexcept nogil:
|
|
1257
|
+
self.calc_netinflow_v1()
|
|
1258
|
+
self.update_watervolume_v1()
|
|
1259
|
+
self.calc_waterdepth_waterlevel_v1()
|
|
1260
|
+
cpdef void update_storage(self) noexcept nogil:
|
|
1261
|
+
self.calc_netinflow_v1()
|
|
1262
|
+
self.update_watervolume_v1()
|
|
1263
|
+
self.calc_waterdepth_waterlevel_v1()
|