Esempio n. 1
0
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
Esempio n. 2
0
    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
Esempio n. 3
0
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
Esempio n. 4
0
    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
Esempio n. 5
0
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
Esempio n. 6
0
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
Esempio n. 7
0
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)
Esempio n. 8
0
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
Esempio n. 9
0
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")
Esempio n. 10
0
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
Esempio n. 11
0
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
Esempio n. 12
0
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
Esempio n. 13
0
def test_create_network():
    net = pandapipes.create_empty_network(fluid=3)
    with pytest.raises(AttributeError):
        pandapipes.get_fluid(net)
Esempio n. 14
0
def test_create_network():
    net = pandapipes.create_empty_network(fluid=3)
    with pytest.raises(UserWarning):
        pandapipes.get_fluid(net)