def test_create_network(): net = pandapipes.create_empty_network(fluid=3) try: pandapipes.get_fluid(net) assert False, "Shouldn't have any fluid!" except UserWarning: assert True
def __init__(self, multinet, element_index_from, element_index_to, efficiency, name_gas_net_from='gas1', name_gas_net_to='gas2', in_service=True, order=0, level=0, drop_same_existing_ctrl=False, initial_run=True, **kwargs): """ see class docstring """ super().__init__(multinet, in_service, order, level, drop_same_existing_ctrl=drop_same_existing_ctrl, initial_run=initial_run, **kwargs) self.element_index_from = element_index_from self.element_index_to = element_index_to self.name_net_from = name_gas_net_from self.name_net_to = name_gas_net_to self.efficiency = efficiency self.gas1_calorific_value = get_fluid( multinet['nets'][name_gas_net_from]).get_property('hhv') self.gas2_calorific_value = get_fluid( multinet['nets'][name_gas_net_to]).get_property('hhv') self.applied = False
def test_property_adaptation(): net = pandapipes.create_empty_network(fluid="hgas") fluid = pandapipes.get_fluid(net) density_old = fluid.all_properties["density"] pandapipes.create_constant_property(net, "density", 1, overwrite=False) assert pandapipes.get_fluid(net).all_properties["density"] == density_old pandapipes.create_constant_property(net, "density", 1, overwrite=True, warn_on_duplicates=False) density_new = pandapipes.create_constant_property(net, "density", 1, overwrite=False) assert pandapipes.get_fluid(net).all_properties["density"].equals(density_new) assert pandapipes.get_fluid(net).all_properties["density"] != density_new
def __init__(self, multinet, element_index_power, element_index_gas, efficiency, name_power_net='power', name_gas_net='gas', in_service=True, order=0, level=0, drop_same_existing_ctrl=False, initial_run=True, **kwargs): """ see class docstring """ super().__init__(multinet, in_service, order, level, drop_same_existing_ctrl=drop_same_existing_ctrl, initial_run=initial_run, **kwargs) self.elm_idx_power = element_index_power self.elm_idx_gas = element_index_gas self.name_net_power = name_power_net self.name_net_gas = name_gas_net self.efficiency = efficiency self.mdot_kg_per_s = None self.fluid = get_fluid(multinet['nets'][name_gas_net]) self.fluid_calorific_value = self.fluid.get_property('hhv') self.applied = False
def test_add_fluid(): net = pandapipes.create_empty_network() fluid_old = pandapipes.call_lib("air") with pytest.raises(AttributeError, match="no fluid"): pandapipes.get_fluid(net) _add_fluid_to_net(net, fluid_old) fluid_new = pandapipes.create_constant_fluid("arbitrary_gas2", "gas", density=2, compressibility=2) _add_fluid_to_net(net, fluid_new, overwrite=False) assert pandapipes.get_fluid(net) == fluid_old _add_fluid_to_net(net, fluid_new) assert pandapipes.get_fluid(net) == fluid_new net["fluid"] = "Hello" _add_fluid_to_net(net, fluid_new, overwrite=False) assert pandapipes.get_fluid(net) == "Hello" _add_fluid_to_net(net, fluid_new) assert pandapipes.get_fluid(net) == fluid_new
def test_add_fluid(): net = pandapipes.create_empty_network() fluid_old = pandapipes.call_lib("air") try: pandapipes.get_fluid(net) assert False, "should'nt get here" except UserWarning: pass pandapipes.add_fluid_to_net(net, fluid_old) fluid_new = pandapipes.create_constant_fluid("arbitrary_gas2", "gas", density=2, compressibility=2) pandapipes.add_fluid_to_net(net, fluid_new, overwrite=False) assert pandapipes.get_fluid(net) == fluid_old pandapipes.add_fluid_to_net(net, fluid_new) assert pandapipes.get_fluid(net) == fluid_new net["fluid"] = "Hello" pandapipes.add_fluid_to_net(net, fluid_new, overwrite=False) assert pandapipes.get_fluid(net) == "Hello" pandapipes.add_fluid_to_net(net, fluid_new) assert pandapipes.get_fluid(net) == fluid_new
def test_g2p_multiple(get_gas_example, get_power_example_simple): """ coupling of multiple elements 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_g2p") add_nets_to_multinet(mn, power=net_power, gas=net_gas) # dummy component for offset in load/source indices: _ = pandapower.create_sgen(net_power, 0, p_mw=0.01) no_g2p = pandapipes.create_sinks(net_gas, [0, 3], mdot_kg_per_s=0.001) # add components to represent G2P unit gas_cons_kg_per_s = 0.5 g2p_ids_gas = pandapipes.create_sinks(net_gas, range(1, 3), mdot_kg_per_s=gas_cons_kg_per_s, name="gas to power consumption") g2p_ids_el = pandapower.create_sgens(net_power, range(4, 6), 0, name="gas to power feed in") # add coupling controller eta = 0.4 G2PControlMultiEnergy(mn, g2p_ids_el, g2p_ids_gas, efficiency=eta, element_type_power="sgen") run_control(mn) # nets must not be changed assert mn.nets["power"] == net_power assert mn.nets["gas"] == net_gas # check G2P result assert np.all(net_power.sgen.loc[g2p_ids_el, "p_mw"] == \ net_power.res_sgen.loc[g2p_ids_el, "p_mw"]) assert np.allclose(net_power.sgen.loc[g2p_ids_el, "p_mw"], (gas_cons_kg_per_s * fluid["cal_value"] * 3600 / 1000) * eta) assert np.all(net_gas.sink.loc[g2p_ids_gas, "mdot_kg_per_s"] == gas_cons_kg_per_s) assert np.all(net_gas.sink.loc[no_g2p, "mdot_kg_per_s"] == 0.001)
def test_p2g_multiple(get_gas_example, get_power_example_simple): """ coupling of multiple elements 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) # dummy component for offset in load/source indices: _ = pandapower.create_load(net_power, 0, p_mw=0.01) no_p2g = pandapipes.create_sources(net_gas, [0, 3], mdot_kg_per_s=0.001) # add components to represent P2G unit p_p2g_el = 10 p2g_ids_el = pandapower.create_loads(net_power, range(1, 6), p_mw=p_p2g_el, name="power to gas consumption") p2g_ids_gas = pandapipes.create_sources(net_gas, range(5), 0, name="power to gas feed in") # add coupling controller eta = 0.5 P2GControlMultiEnergy(mn, p2g_ids_el, p2g_ids_gas, efficiency=eta) # run control should read/write values with .loc run_control(mn) # nets must not be changed assert mn.nets["power"] == net_power assert mn.nets["gas"] == net_gas # check P2G result assert np.all(net_gas.source.loc[p2g_ids_gas, "mdot_kg_per_s"] == \ net_gas.res_source.loc[p2g_ids_gas, "mdot_kg_per_s"]) assert np.allclose(net_gas.source.loc[p2g_ids_gas, "mdot_kg_per_s"], (p_p2g_el / (net_gas.fluid.get_property('hhv') * 3.6)) * eta) assert np.all(net_gas.source.loc[no_p2g, "mdot_kg_per_s"] == 0.001) assert np.all( net_power.load.loc[p2g_ids_el, "p_mw"] == p_p2g_el) # has to be still the same
def test_fluid_exceptions(): net = pandapipes.create_empty_network(fluid="hgas") fluid = pandapipes.get_fluid(net) with pytest.raises(UserWarning, match="property xyz was not defined for the fluid"): fluid.get_property("xyz", 100) prop = pandapipes.FluidProperty() with pytest.raises(NotImplementedError, match="Please implement a proper fluid property!"): prop.get_at_value(100) with pytest.raises( AttributeError, match="Fluid 'natural_gas' not found in the fluid library."): pandapipes.call_lib("natural_gas")
def test_g2p_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_g2p") add_nets_to_multinet(mn, power=net_power, gas=net_gas) # add components to represent G2P unit gas_cons_kg_per_s = 0.5 g2p_id_gas = pandapipes.create_sink(net_gas, 1, mdot_kg_per_s=gas_cons_kg_per_s, name="gas to power consumption") g2p_id_el = pandapower.create_sgen(net_power, 6, 0, name="gas to power feed in") # add coupling controller eta = 0.4 G2PControlMultiEnergy(mn, g2p_id_el, g2p_id_gas, efficiency=eta, element_type_power="sgen") run_control(mn) # nets must not be changed assert mn.nets["power"] == net_power assert mn.nets["gas"] == net_gas # check G2P result assert net_power.sgen.at[g2p_id_el, "p_mw"] == \ net_power.res_sgen.at[g2p_id_el, "p_mw"] assert np.isclose(net_power.sgen.at[g2p_id_el, "p_mw"], (gas_cons_kg_per_s * fluid["cal_value"] * 3600 / 1000) * eta) # 10.5264 assert net_gas.sink.at[ g2p_id_gas, "mdot_kg_per_s"] == gas_cons_kg_per_s # has to be still the same
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_fluid_exceptions(): net = pandapipes.create_empty_network(fluid="hgas") fluid = pandapipes.get_fluid(net) try: fluid.get_property("xyz", 100) assert False, "Shouldn't find property xyz!" except UserWarning: pass prop = pandapipes.FluidProperty() try: prop.get_property(100) assert False, "Shouldn't have property defined!" except NotImplementedError: pass try: pandapipes.call_lib("natural_gas") assert False, "Shouldn't have fluid natural_gas defined in lib!" except AttributeError: pass
def test_create_network(): net = pandapipes.create_empty_network(fluid=3) with pytest.raises(AttributeError): pandapipes.get_fluid(net)
def test_create_network(): net = pandapipes.create_empty_network(fluid=3) with pytest.raises(UserWarning): pandapipes.get_fluid(net)