def test_const_p2g_control(get_gas_example, get_power_example_simple): net_gas = get_gas_example net_power = get_power_example_simple flow_gas = 0.003 pandapipes.create_source(net_gas, 5, flow_gas) pandapipes.create_sink(net_gas, 3, flow_gas) pandapipes.create_sink(net_gas, 4, flow_gas) power_load = 0.004 pandapower.create_load(net_power, 6, power_load) pandapower.create_load(net_power, 5, power_load) pandapower.create_sgen(net_power, 4, power_load) mn = create_empty_multinet('coupled net') add_nets_to_multinet(mn, power=net_power, gas=net_gas) _, p2g = coupled_p2g_const_control(mn, 0, 0, 0.6, initial_run=True) ConstControl(net_gas, 'sink', 'mdot_kg_per_s', [0, 1]) ConstControl(net_power, 'load', 'p_mw', 1) ConstControl(net_power, 'sgen', 'p_mw', 0) run_control(mn) assert np.all(net_power.res_load.p_mw.values == power_load) assert np.all(net_gas.res_sink.values == flow_gas) assert net_gas.source.mdot_kg_per_s.values == power_load * p2g.conversion_factor_mw_to_kgps()\ * p2g.efficiency
def test_additional_tables(): net = pandapipes.create_empty_network() pandapipes.create_junction(net, pn_bar=5, tfluid_k=283) pandapipes.create_junction(net, pn_bar=5, tfluid_k=283) pandapipes.add_new_component(net, Sink) sink_input = list(copy.deepcopy(net.sink.columns)) pandapipes.create_sink(net, 1, mdot_kg_per_s=1) sink_input_create = list(net.sink.columns) assert sink_input == sink_input_create, "Input does not equal create-table" pandapipes.add_new_component(net, Source) source_input = list(copy.deepcopy(net.source.columns)) pandapipes.create_source(net, 1, mdot_kg_per_s=1) source_input_create = list(net.source.columns) assert source_input == source_input_create, "Input does not equal create-table" pandapipes.add_new_component(net, Pump) pump_input = list(copy.deepcopy(net.pump.columns)) pandapipes.create_pump_from_parameters(net, 0, 1, 'P4', [6.1, 5.8, 4], [0, 19, 83], 2) pump_input_create = list(net.pump.columns) assert pump_input == pump_input_create, "Input does not equal create-table" pandapipes.add_new_component(net, CirculationPumpMass) pumpcircmass_input = list(copy.deepcopy(net.circ_pump_mass.columns)) pandapipes.create_circ_pump_const_mass_flow(net, 0, 1, 5, 5, 300, type='pt') pumpcircmass_input_create = list(net.circ_pump_mass.columns) assert pumpcircmass_input == pumpcircmass_input_create, "Input does not equal create-table" pandapipes.add_new_component(net, CirculationPumpPressure) pumpcircpres_input = list(copy.deepcopy(net.circ_pump_pressure.columns)) pandapipes.create_circ_pump_const_pressure(net, 0, 1, 5, 2, 300, type='pt') pumpcircpres_input_create = list(net.circ_pump_pressure.columns) assert pumpcircpres_input == pumpcircpres_input_create, "Input does not equal create-table" pandapipes.add_new_component(net, Valve) valve_input = list(copy.deepcopy(net.valve.columns)) pandapipes.create_valve(net, 0, 1, diameter_m=0.1, opened=False) valve_input_create = list(net.valve.columns) assert valve_input == valve_input_create, "Input does not equal create-table" pandapipes.add_new_component(net, HeatExchanger) hex_input = list(copy.deepcopy(net.heat_exchanger.columns)) pandapipes.create_heat_exchanger(net, 0, 1, 0.2, qext_w=20000) hex_input_create = list(net.heat_exchanger.columns) assert hex_input == hex_input_create, "Input does not equal create-table"
def net_plotting(): net = pandapipes.create_empty_network(fluid="lgas") # create network elements, such as junctions, external grid, pipes, valves, sinks and sources junction1 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Connection to External Grid", geodata=(0, 0)) junction2 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 2", geodata=(2, 0)) junction3 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 3", geodata=(7, 4)) junction4 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 4", geodata=(7, -4)) junction5 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 5", geodata=(5, 3)) junction6 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 6", geodata=(5, -3)) junction7 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 7", geodata=(9, -4)) junction8 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 7", geodata=(9, 4)) pandapipes.create_ext_grid(net, junction=junction1, p_bar=1.1, t_k=293.15, name="Grid Connection") pandapipes.create_pipe_from_parameters(net, from_junction=junction1, to_junction=junction2, length_km=10, diameter_m=0.3, name="Pipe 1", geodata=[(0, 0), (2, 0)]) pandapipes.create_pipe_from_parameters(net, from_junction=junction2, to_junction=junction3, length_km=2, diameter_m=0.3, name="Pipe 2", geodata=[(2, 0), (2, 4), (7, 4)]) pandapipes.create_pipe_from_parameters(net, from_junction=junction2, to_junction=junction4, length_km=2.5, diameter_m=0.3, name="Pipe 3", geodata=[(2, 0), (2, -4), (7, -4)]) pandapipes.create_pipe_from_parameters(net, from_junction=junction3, to_junction=junction5, length_km=1, diameter_m=0.3, name="Pipe 4", geodata=[(7, 4), (7, 3), (5, 3)]) pandapipes.create_pipe_from_parameters(net, from_junction=junction4, to_junction=junction6, length_km=1, diameter_m=0.3, name="Pipe 5", geodata=[(7, -4), (7, -3), (5, -3)]) pandapipes.create_pipe_from_parameters(net, from_junction=junction7, to_junction=junction8, length_km=1, diameter_m=0.3, name="Pipe 6", geodata=[(9, -4), (9, 4)]) pandapipes.create_valve(net, from_junction=junction5, to_junction=junction6, diameter_m=0.05, opened=True) pandapipes.create_heat_exchanger(net, junction3, junction8, diameter_m=0.3, qext_w=20000) pandapipes.create_sink(net, junction=junction4, mdot_kg_per_s=0.545, name="Sink 1") pandapipes.create_source(net, junction=junction3, mdot_kg_per_s=0.234) pandapipes.create_pump_from_parameters(net, junction4, junction7, 'P1') return net
def test_pump_bypass_on_reverse_flow(): """ reverse flow = no pressure lift :return: :rtype: """ net = pandapipes.create_empty_network("net", add_stdtypes=True) j1 = pandapipes.create_junction(net, pn_bar=5, tfluid_k=283.15) j2 = pandapipes.create_junction(net, pn_bar=5, tfluid_k=283.15) j3 = pandapipes.create_junction(net, pn_bar=5, tfluid_k=283.15) j4 = pandapipes.create_junction(net, pn_bar=5, tfluid_k=283.15) pandapipes.create_pipe(net, j1, j2, std_type='125_PE_80_SDR_11', k_mm=1., length_km=10) pandapipes.create_pipe(net, j3, j4, std_type='125_PE_80_SDR_11', k_mm=1., length_km=12) pandapipes.create_ext_grid(net, j1, 5, 283.15, type="p") pandapipes.create_pump(net, j2, j3, std_type='P1') pandapipes.create_source(net, j4, 0.02333) pandapipes.create_fluid_from_lib(net, "hgas", overwrite=True) pandapipes.pipeflow(net, stop_condition="tol", iter=3, friction_model="nikuradse", mode="hydraulics", transient=False, nonlinear_method="automatic", tol_p=1e-4, tol_v=1e-4) assert net.res_pump.deltap_bar.isin([0]).all() assert np.isclose(net.res_junction.loc[1, "p_bar"], net.res_junction.loc[2, "p_bar"])
def test_g2g_single(get_gas_example): """gas-to-gas = hgas (methane) to Hydrogen conversion""" # get the nets fluid1 = {"name": "hgas", "cal_value": 14.62197} net_gas1 = copy.deepcopy(get_gas_example) pandapipes.create_fluid_from_lib(net_gas1, fluid1["name"], overwrite=True) fluid2 = {"name": "hydrogen", "cal_value": 38.38024} net_gas2 = copy.deepcopy(get_gas_example) pandapipes.create_fluid_from_lib(net_gas2, fluid2["name"], overwrite=True) # set up multinet mn = create_empty_multinet("test_g2g") add_nets_to_multinet(mn, hgas_net=net_gas1, hydrogen_net=net_gas2) # add components to represent G2P unit gas1_cons_kg_per_s = 0.5 g2g_id_cons = pandapipes.create_sink(net_gas1, 1, mdot_kg_per_s=gas1_cons_kg_per_s, name="SMR consumption") g2g_id_prod = pandapipes.create_source(net_gas2, 1, 0, name="SMR production") # add coupling controller eta = 0.65 GasToGasConversion(mn, g2g_id_cons, g2g_id_prod, efficiency=eta, name_gas_net_from='hgas_net', name_gas_net_to='hydrogen_net') run_control(mn) # nets must not be changed assert mn.nets["hgas_net"] == net_gas1 assert mn.nets["hydrogen_net"] == net_gas2 # check G2G result assert net_gas1.sink.at[g2g_id_cons, "mdot_kg_per_s"] == \ net_gas1.res_sink.at[g2g_id_cons, "mdot_kg_per_s"] assert net_gas1.sink.at[g2g_id_cons, "mdot_kg_per_s"] == gas1_cons_kg_per_s assert np.isclose( net_gas2.source.at[g2g_id_prod, "mdot_kg_per_s"], (gas1_cons_kg_per_s * fluid1["cal_value"] / fluid2["cal_value"]) * eta)
def test_create_source(create_empty_net): net = copy.deepcopy(create_empty_net) pandapipes.create_junction(net, 1, 293, index=8) pandapipes.create_junction(net, 1, 293, index=9) pandapipes.create_source(net, 9, mdot_kg_per_s=0.1, index=2) with pytest.raises(UserWarning): pandapipes.create_source(net, junction=10, mdot_kg_per_s=0.1) with pytest.raises(UserWarning): pandapipes.create_source(net, junction=9, mdot_kg_per_s=0.1, index=2)
def test_p2g_single(get_gas_example, get_power_example_simple): """ coupling of a single element in the power and gas net each with one MulitEnergyController""" # get the nets fluid = {"name": "hgas", "cal_value": 14.62197} net_gas = copy.deepcopy(get_gas_example) net_power = copy.deepcopy(get_power_example_simple) assert fluid["name"] == pandapipes.get_fluid(net_gas).name # set up multinet mn = create_empty_multinet("test_p2g") add_nets_to_multinet(mn, power=net_power, gas=net_gas) # add components to represent P2G unit p_p2g_el = 50 p2g_id_el = pandapower.create_load(net_power, 6, p_mw=p_p2g_el, name="power to gas consumption") p2g_id_gas = pandapipes.create_source(net_gas, 1, 0, name="power to gas feed in") # add coupling controller eta = 0.5 P2GControlMultiEnergy(mn, p2g_id_el, p2g_id_gas, efficiency=eta) run_control(mn) # nets must not be changed assert mn.nets["power"] == net_power assert mn.nets["gas"] == net_gas # check P2G result assert net_gas.source.at[p2g_id_gas, "mdot_kg_per_s"] == \ net_gas.res_source.at[p2g_id_gas, "mdot_kg_per_s"] assert np.isclose(net_gas.source.at[p2g_id_gas, "mdot_kg_per_s"], (p_p2g_el / (net_gas.fluid.get_property('hhv') * 3.6)) * eta) assert net_power.load.at[p2g_id_el, "p_mw"] == p_p2g_el # has to be still the same
def test_create_source(create_empty_net): net = copy.deepcopy(create_empty_net) pandapipes.create_junction(net, 1, 293, index=8) pandapipes.create_junction(net, 1, 293, index=9) pandapipes.create_source(net, 9, mdot_kg_per_s=0.1, index=2) try: pandapipes.create_source(net, junction=10, mdot_kg_per_s=0.1) assert False, "Shouldn't make source!" except UserWarning: assert True try: pandapipes.create_source(net, junction=9, mdot_kg_per_s=0.1, index=2) assert False, "Shouldn't make source!" except UserWarning: assert True
def create_base_net(oos, additional_pumps=True): net = pandapipes.create_empty_network(fluid="lgas") # create network elements, such as junctions, external grid, pipes, valves, sinks and sources junction1 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, in_service=not oos, name="Connection to External Grid", geodata=(0, 0)) junction2 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 2", geodata=(2, 0), in_service=not oos) junction3 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 3", geodata=(7, 4), in_service=not oos) junction4 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 4", geodata=(7, -4), in_service=not oos) junction5 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 5", geodata=(5, 3), in_service=not oos) junction6 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 6", geodata=(5, -3)) junction7 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 7", geodata=(9, -4)) junction8 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 8", geodata=(9, 4)) junction9 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 9", geodata=(9, 0)) pandapipes.create_ext_grid(net, junction=junction1, p_bar=1.1, t_k=293.15, name="Grid Connection") pandapipes.create_pipe_from_parameters(net, from_junction=junction1, to_junction=junction2, length_km=10, diameter_m=0.3, name="Pipe 1", geodata=[(0, 0), (2, 0)], in_service=not oos) pandapipes.create_pipe_from_parameters(net, from_junction=junction2, to_junction=junction3, length_km=2, diameter_m=0.3, name="Pipe 2", geodata=[(2, 0), (2, 4), (7, 4)], in_service=not oos) pandapipes.create_pipe_from_parameters(net, from_junction=junction2, to_junction=junction4, length_km=2.5, diameter_m=0.3, name="Pipe 3", geodata=[(2, 0), (2, -4), (7, -4)], in_service=not oos) pandapipes.create_pipe_from_parameters(net, from_junction=junction3, to_junction=junction5, length_km=1, diameter_m=0.3, name="Pipe 4", geodata=[(7, 4), (7, 3), (5, 3)]) pandapipes.create_pipe_from_parameters(net, from_junction=junction4, to_junction=junction6, length_km=1, diameter_m=0.3, name="Pipe 5", geodata=[(7, -4), (7, -3), (5, -3)]) pandapipes.create_pipe_from_parameters(net, from_junction=junction7, to_junction=junction8, length_km=1, diameter_m=0.3, name="Pipe 6", geodata=[(9, -4), (9, 0)]) pandapipes.create_pipe_from_parameters(net, from_junction=junction7, to_junction=junction8, length_km=1, diameter_m=0.3, name="Pipe 7", geodata=[(9, 0), (9, 4)]) pandapipes.create_valve(net, from_junction=junction5, to_junction=junction6, diameter_m=0.05, opened=True) pandapipes.create_heat_exchanger(net, junction3, junction8, diameter_m=0.3, qext_w=20000) pandapipes.create_sink(net, junction=junction4, mdot_kg_per_s=0.545, name="Sink 1") pandapipes.create_source(net, junction=junction3, mdot_kg_per_s=0.234) pandapipes.create_pump_from_parameters(net, junction4, junction7, 'P1') if additional_pumps: pandapipes.create_circ_pump_const_mass_flow(net, junction9, junction5, 1.05, 1) pandapipes.create_circ_pump_const_pressure(net, junction9, junction6, 1.05, 0.5) if oos: pandapipes.create_ext_grid(net, junction=junction1, p_bar=1.1, t_k=293.15, name="Grid Connection", in_service=False) pandapipes.create_heat_exchanger(net, junction3, junction8, diameter_m=0.3, qext_w=20000, in_service=False) pandapipes.create_sink(net, junction=junction4, mdot_kg_per_s=0.545, name="Sink 2", in_service=False) pandapipes.create_pump_from_parameters(net, junction4, junction7, 'P1', in_service=False) pandapipes.create_source(net, junction=junction3, mdot_kg_per_s=0.234, in_service=False) pandapipes.create_circ_pump_const_mass_flow(net, junction9, junction5, 1.05, 1, in_service=False) pandapipes.create_circ_pump_const_pressure(net, junction9, junction6, 1.05, 0.5, in_service=False) return net
def complex_heat_connectivity_grid(): net = pandapipes.create_empty_network() pandapipes.create_fluid_from_lib(net, "water") j1 = pandapipes.create_junction(net, 1, 320.15, index=1) j2 = pandapipes.create_junction(net, 1, 320.15, index=2) j3 = pandapipes.create_junction(net, 1, 320.15, index=3) j4 = pandapipes.create_junction(net, 1, 320.15, index=4, in_service=False) j5 = pandapipes.create_junction(net, 1, 320.15, index=5) j6 = pandapipes.create_junction(net, 1, 320.15, index=6) j7 = pandapipes.create_junction(net, 1, 320.15, index=7) j8 = pandapipes.create_junction(net, 1, 320.15, index=8) j9 = pandapipes.create_junction(net, 1, 320.15, index=9) j10 = pandapipes.create_junction(net, 1, 320.15, index=10) pandapipes.create_ext_grid(net, j1, 1, 320.15, type="p", index=5) pandapipes.create_ext_grid(net, j7, 1, 320.15, type="t", index=2) pandapipes.create_ext_grid(net, j10, 1, 320.15, type="pt", index=1) pandapipes.create_pipe_from_parameters(net, j1, j2, 0.1, 0.1, alpha_w_per_m2k=5, index=3) pandapipes.create_pipe_from_parameters(net, j1, j3, 0.1, 0.1, alpha_w_per_m2k=5, index=4) pandapipes.create_pipe_from_parameters(net, j2, j4, 0.1, 0.1, alpha_w_per_m2k=5, in_service=False, index=5) pandapipes.create_pipe_from_parameters(net, j3, j5, 0.1, 0.1, alpha_w_per_m2k=5, in_service=False, index=7) pandapipes.create_pipe_from_parameters(net, j6, j7, 0.1, 0.1, alpha_w_per_m2k=5, index=9) pandapipes.create_pipe_from_parameters(net, j5, 8, 0.1, 0.1, alpha_w_per_m2k=5, in_service=False, index=8) pandapipes.create_pipe_from_parameters(net, j8, j10, 0.1, 0.1, alpha_w_per_m2k=5, index=1) pandapipes.create_pipe_from_parameters(net, j9, j10, 0.1, 0.1, alpha_w_per_m2k=5, index=2) pandapipes.create_valve(net, j5, j6, 0.1, index=10) pandapipes.create_valve(net, j4, j5, 0.1, opened=False, index=12) pandapipes.create_sink(net, j3, mdot_kg_per_s=0.1, index=3) pandapipes.create_sink(net, j4, mdot_kg_per_s=0.1, index=4) pandapipes.create_sink(net, j7, mdot_kg_per_s=0.2, index=5) pandapipes.create_sink(net, j9, mdot_kg_per_s=0.1, index=7) pandapipes.create_sink(net, j8, mdot_kg_per_s=0.1, index=1) pandapipes.create_source(net, j5, mdot_kg_per_s=0.1, index=7) pandapipes.create_source(net, j2, mdot_kg_per_s=0.05, index=2) return net
def release_control_test_network(): # empty net net = pp.create_empty_network("net", add_stdtypes=False) # fluid pp.create_fluid_from_lib(net, "water", overwrite=True) # junctions pp.create_junction(net, pn_bar=3, tfluid_k=293, height_m=0, name="Junction 0", index=None, in_service=True, type="junction", geodata=None) pp.create_junction(net, pn_bar=3, tfluid_k=293, height_m=0, name="Junction 1") pp.create_junction(net, pn_bar=3, tfluid_k=293, height_m=0, name="Junction 2") pp.create_junction(net, pn_bar=3, tfluid_k=293, height_m=0, name="Junction 3") pp.create_junction(net, pn_bar=3, tfluid_k=293, height_m=0, name="Junction 4") pp.create_junction(net, pn_bar=3, tfluid_k=293, height_m=0, name="Junction 5") pp.create_junction(net, pn_bar=3, tfluid_k=293, height_m=0, name="Junction 6") pp.create_junction(net, pn_bar=3, tfluid_k=293, height_m=0, name="Junction 7") pp.create_junction(net, pn_bar=3, tfluid_k=293, height_m=0, name="Junction 8") pp.create_junction(net, pn_bar=3, tfluid_k=293, height_m=0, name="Junction 9") pp.create_junction(net, pn_bar=3, tfluid_k=293, height_m=0, name="Junction 10") pp.create_junction(net, pn_bar=3, tfluid_k=293, height_m=0, name="Junction 11") pp.create_junction(net, pn_bar=3, tfluid_k=293, height_m=0, name="Junction 12") # pipes pp.create_pipe_from_parameters(net, from_junction=0, to_junction=8, length_km=3, diameter_m=0.01, k_mm=1, loss_coefficient=0, sections=10, alpha_w_per_m2k=10, text_k=293, qext_w=0., name="Pipe 0", index=None, geodata=None, in_service=True, type="pipe") pp.create_pipe_from_parameters(net, 9, 2, length_km=6, diameter_m=0.075, k_mm=.1, sections=10, alpha_w_per_m2k=3, name="Pipe 1") pp.create_pipe_from_parameters(net, 2, 12, length_km=5, diameter_m=0.06, k_mm=.1, sections=10, alpha_w_per_m2k=20, name="Pipe 2") pp.create_pipe_from_parameters(net, 4, 12, length_km=0.1, diameter_m=0.07, k_mm=.1, sections=10, alpha_w_per_m2k=2, name="Pipe 3") pp.create_pipe_from_parameters(net, 5, 3, length_km=1, diameter_m=0.09, k_mm=.1, sections=10, alpha_w_per_m2k=3, name="Pipe 4") pp.create_pipe_from_parameters(net, 4, 11, length_km=2.5, diameter_m=0.08, k_mm=.1, sections=10, alpha_w_per_m2k=15, name="Pipe 5") pp.create_pipe_from_parameters(net, 7, 6, length_km=4.5, diameter_m=0.085, k_mm=.1, sections=10, alpha_w_per_m2k=2.5, name="Pipe 6") pp.create_pipe_from_parameters(net, 1, 7, length_km=4, diameter_m=0.03, k_mm=.1, sections=10, alpha_w_per_m2k=1, name="Pipe 7") # external grids pp.create_ext_grid(net, junction=0, p_bar=3, t_k=300, name="External Grid 0", in_service=True, index=None, type="pt") pp.create_ext_grid(net, 1, p_bar=5, t_k=350, name="External Grid 1", type="pt") # sinks pp.create_sink(net, junction=2, mdot_kg_per_s=0.2, scaling=1., name="Sink 0", index=None, in_service=True, type="sink") pp.create_sink(net, 3, mdot_kg_per_s=0.1, name="Sink 1") pp.create_sink(net, 4, mdot_kg_per_s=0.5, name="Sink 2") pp.create_sink(net, 5, mdot_kg_per_s=0.07, name="Sink 3") pp.create_sink(net, 6, mdot_kg_per_s=0.09, name="Sink 4") pp.create_sink(net, 7, mdot_kg_per_s=0.1, name="Sink 5") # sources pp.create_source(net, junction=8, mdot_kg_per_s=0.1, scaling=1., name="Source 0", index=None, in_service=True, type="source") pp.create_source(net, junction=9, mdot_kg_per_s=0.03, name="Source 1") pp.create_source(net, junction=10, mdot_kg_per_s=0.04, name="Source 2") pp.create_source(net, junction=11, mdot_kg_per_s=0.09, name="Source 3") # valves pp.create_valve(net, from_junction=8, to_junction=9, diameter_m=0.1, opened=True, loss_coefficient=0, name="Valve 0", index=None, type="valve") pp.create_valve(net, 9, 4, diameter_m=0.05, opened=True, name="Valve 1") # pump pp.create_pump_from_parameters(net, from_junction=8, to_junction=3, new_std_type_name="Pump", pressure_list=[6.1, 5.8, 4], flowrate_list=[0, 19, 83], reg_polynomial_degree=2, poly_coefficents=None, name=None, index=None, in_service=True, type="pump") # circulation pump mass pp.create_circ_pump_const_mass_flow(net, from_junction=3, to_junction=4, p_bar=6, mdot_kg_per_s=1, t_k=290, name="Circ. Pump Mass", index=None, in_service=True, type="pt") # circulation pump pressure pp.create_circ_pump_const_pressure(net, from_junction=11, to_junction=5, p_bar=5, plift_bar=2, t_k=290, name="Circ. Pump Pressure", index=None, in_service=True, type="pt") # heat exchanger pp.create_heat_exchanger(net, from_junction=10, to_junction=6, diameter_m=0.08, qext_w=50, loss_coefficient=0, name="Heat Exchanger 0", index=None, in_service=True, type="heat_exchanger") pp.create_heat_exchanger(net, from_junction=4, to_junction=10, diameter_m=0.08, qext_w=28000, loss_coefficient=0, name="Heat Exchanger 1", index=None, in_service=True, type="heat_exchanger") # time series profiles_sink = pd.read_csv(os.path.join(pp_dir, 'test', 'api', 'release_cycle', 'release_control_test_sink_profiles.csv'), index_col=0) profiles_source = pd.read_csv(os.path.join(pp_dir, 'test', 'api', 'release_cycle', 'release_control_test_source_profiles.csv'), index_col=0) ds_sink = DFData(profiles_sink) ds_source = DFData(profiles_source) const_sink = control.ConstControl(net, element='sink', variable='mdot_kg_per_s', element_index=net.sink.index.values, data_source=ds_sink, profile_name=net.sink.index.values.astype(str)) const_source = control.ConstControl(net, element='source', variable='mdot_kg_per_s', element_index=net.source.index.values, data_source=ds_source, profile_name=net.source.index.values.astype(str)) const_sink.initial_run = False const_source.initial_run = False pp.pipeflow(net) pp.to_json(net, os.path.join(path, 'example_%s.json' % pp.__version__)) return net
def test_circulation_pump_constant_mass(): """ :return: :rtype: """ net = pandapipes.create_empty_network("net", add_stdtypes=False) j1 = pandapipes.create_junction(net, pn_bar=5, tfluid_k=283.15) j2 = pandapipes.create_junction(net, pn_bar=5, tfluid_k=283.15) j3 = pandapipes.create_junction(net, pn_bar=5, tfluid_k=283.15) j4 = pandapipes.create_junction(net, pn_bar=5, tfluid_k=283.15) pandapipes.create_pipe_from_parameters(net, j1, j2, k_mm=1., length_km=0.43380, diameter_m=0.1022) pandapipes.create_pipe_from_parameters(net, j3, j4, k_mm=1., length_km=0.26370, diameter_m=0.1022) pandapipes.create_circ_pump_const_mass_flow(net, j1, j4, 5, 5, 300, type='pt') pandapipes.create_heat_exchanger(net, j2, j3, 0.1, qext_w=200000) pandapipes.create_sink(net, j1, 2) pandapipes.create_source(net, j4, 2) pandapipes.create_fluid_from_lib(net, "water", overwrite=True) pandapipes.pipeflow(net, stop_condition="tol", iter=10, friction_model="nikuradse", mode="all", transient=False, nonlinear_method="automatic", tol_p=1e-4, tol_v=1e-4) data = pd.read_csv(os.path.join(internals_data_path, "test_circ_pump_mass.csv"), sep=';') res_junction = net.res_junction res_pipe = net.res_pipe.v_mean_m_per_s.values res_pump = net.res_circ_pump_mass p_diff = np.abs(1 - res_junction.p_bar.values / data['p'].dropna().values) t_diff = np.abs(1 - res_junction.t_k.values / data['t'].dropna().values) v_diff = np.abs(1 - res_pipe / data['v'].dropna().values) mdot_diff = np.abs(1 - res_pump['mdot_kg_per_s'].values / data['mdot'].dropna().values) deltap_diff = np.abs(1 - res_pump['deltap_bar'].values / data['deltap'].dropna().values) assert np.all(p_diff < 0.01) assert np.all(t_diff < 0.01) assert np.all(v_diff < 0.01) assert np.all(mdot_diff < 0.01) assert np.all(deltap_diff < 0.01)
def load_net(): # create test network net = pandapipes.create_empty_network("test_net", fluid="lgas") j1 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Connection to External Grid", geodata=(0, 0)) j2 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 2", geodata=(2, 0)) j3 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 3", geodata=(7, 4)) j4 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 4", geodata=(7, -4)) j5 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 5", geodata=(5, 3)) j6 = pandapipes.create_junction(net, pn_bar=1.05, tfluid_k=293.15, name="Junction 6", geodata=(5, -3)) pandapipes.create_ext_grid(net, junction=j1, p_bar=1.1, t_k=293.15, name="Grid Connection") pandapipes.create_pipe_from_parameters(net, from_junction=j1, to_junction=j2, length_km=10, diameter_m=0.05, name="Pipe 1", geodata=[(0, 0), (2, 0)]) pandapipes.create_pipe_from_parameters(net, from_junction=j2, to_junction=j3, length_km=2, diameter_m=0.05, name="Pipe 2", geodata=[(2, 0), (2, 4), (7, 4)]) pandapipes.create_pipe_from_parameters(net, from_junction=j2, to_junction=j4, length_km=2.5, diameter_m=0.05, name="Pipe 3", geodata=[(2, 0), (2, -4), (7, -4)]) pandapipes.create_pipe_from_parameters(net, from_junction=j3, to_junction=j5, length_km=1, diameter_m=0.05, name="Pipe 4", geodata=[(7, 4), (7, 3), (5, 3)]) pandapipes.create_pipe_from_parameters(net, from_junction=j4, to_junction=j6, length_km=1, diameter_m=0.05, name="Pipe 5", geodata=[(7, -4), (7, -3), (5, -3)]) pandapipes.create_valve(net, from_junction=j5, to_junction=j6, diameter_m=0.05, opened=True) pandapipes.create_sink(net, junction=j4, mdot_kg_per_s=5.45e-5, name="Sink 1") pandapipes.create_source(net, junction=j3, mdot_kg_per_s=3.45e-5) return net
def test_time_series_p2g_control(get_gas_example, get_power_example_simple): net_gas = get_gas_example net_power = get_power_example_simple pandapipes.create_source(net_gas, 5, 0.003) pandapipes.create_sink(net_gas, 3, 0.003) pandapipes.create_sink(net_gas, 4, 0.003) pandapower.create_load(net_power, 6, 0.004) pandapower.create_load(net_power, 5, 0.004) pandapower.create_sgen(net_power, 4, 0.004) mn = create_empty_multinet('coupled net') add_nets_to_multinet(mn, power=net_power, gas=net_gas) data_p2g_power = pd.DataFrame(np.concatenate( [np.array([1.0] * 5), np.array([0.75] * 2), np.array([1.0] * 3)]), columns=['load_p2g_power']) data_const_load = pd.DataFrame(np.concatenate( [np.array([1.2] * 5), np.array([1.75] * 2), np.array([1.2] * 3)]), columns=['load_const']) data_const_sgen = pd.DataFrame(np.concatenate( [np.array([0.8] * 5), np.array([0.9] * 2), np.array([0.8] * 3)]), columns=['sgen_const']) data_const_sink = np.zeros([10, 2]) data_const_sink[:5, :] = [0.6, 0.4] data_const_sink[5:7, :] = [1.2, 0.3] data_const_sink[7:, :] = [0.6, 0.4] data_const_sink = pd.DataFrame(data_const_sink, columns=['sink_const_0', 'sink_const_1']) ds = DFData(data_p2g_power) _, p2g = coupled_p2g_const_control(mn, 0, 0, 0.6, initial_run=True, profile_name='load_p2g_power', data_source=ds) ds = DFData(data_const_sink) ConstControl(net_gas, 'sink', 'mdot_kg_per_s', [0, 1], profile_name=['sink_const_0', 'sink_const_1'], data_source=ds) ds = DFData(data_const_load) ConstControl(net_power, 'load', 'p_mw', 1, profile_name=['load_const'], data_source=ds) ds = DFData(data_const_sgen) ConstControl(net_power, 'sgen', 'p_mw', 0, profile_name=['sgen_const'], data_source=ds) log_variables = [('res_source', 'mdot_kg_per_s'), ('res_sink', 'mdot_kg_per_s')] ow_gas = OutputWriter(net_gas, range(10), log_variables=log_variables) log_variables = [('res_load', 'p_mw'), ('res_sgen', 'p_mw')] ow_power = OutputWriter(net_power, range(10), log_variables=log_variables) run_timeseries(mn, range(10)) gas_res = ow_gas.np_results power_res = ow_power.np_results assert np.all(gas_res['res_sink.mdot_kg_per_s'] == data_const_sink.values) assert np.all(gas_res['res_source.mdot_kg_per_s'] == data_p2g_power.values * \ p2g.conversion_factor_mw_to_kgps() * p2g.efficiency) assert np.all(power_res['res_load.p_mw'][:, 1] == data_const_load.values.T) assert np.all(power_res['res_sgen.p_mw'] == data_const_sgen.values)