示例#1
0
    def set_attribute( self, attr, value ):
        super().set_attribute( attr, value )

        if '/' in attr:
            load_name, value_name = attr.split( '/' )
            idx = pgutil.get_index( load_name, self.net.load )
            self.net.load[ value_name ][ idx ] = value
        else:
            setattr( self, attr, value )
示例#2
0
def _scaled_loads_as_dict(net):
    """
    Maps sinks (loads and lower pressure stations) name to scaled load
    """
    loads = {row[1]: round(row[2] * row[4] / net.LHV, 6) for _, row in net.load.iterrows()}  # kW to kg/s
    stations = {}
    for _, row in net.res_station.iterrows():
        idx_stat = get_index(row[0], net.station)
        stations[net.station.at[idx_stat, "bus_high"]] = round(row[1], 6)
    loads.update(stations)
    return loads
示例#3
0
def runpp(net, t_grnd=10+273.15):
    sorted_levels = sorted(net.LEVELS.items(), key=operator.itemgetter(1))
    for level, value in sorted_levels:
        if level in net.bus["level"].unique():
            logging.info("Compute level {}".format(level))
            p_nodes, m_dot_pipes, m_dot_nodes, fluid = sim._run_sim(net, level, t_grnd)

            for node, value in p_nodes.items():
                if node in net.bus["name"].unique():
                    idx = get_index(node, net.bus)
                    net.res_bus.loc[idx] = [node, value]

            for pipe, m_dot in m_dot_pipes.items():
                idx = get_index(pipe, net.pipe)
                v = _v_from_m_dot(net, pipe, m_dot, fluid)
                net.res_pipe.loc[idx] = [pipe, m_dot, v, m_dot * net.LHV, 100*v/net.V_MAX]

            for node, m_dot in m_dot_nodes.items():
                if node in net.station["bus_low"].unique():
                    idx_stat = get_index(node, net.station, col="bus_low")
                    stat = net.station.at[idx_stat, "name"]
                    idx = get_index(stat, net.res_station)
                    net.res_station.loc[idx] = [
                        stat,
                        -m_dot,
                        -m_dot * net.LHV,
                        -100*m_dot*net.LHV/net.station.at[idx_stat, "p_lim_kW"]
                    ]

                if node in net.feeder["bus"].unique():
                    idx_feed = get_index(node, net.feeder, col="bus")
                    feed = net.feeder.at[idx_feed, "name"]
                    idx = get_index(feed, net.res_feeder)
                    net.res_feeder.loc[idx] = [
                        feed,
                        m_dot,
                        m_dot * net.LHV,
                        100*m_dot*net.LHV/net.feeder.at[idx_feed, "p_lim_kW"]
                    ]
示例#4
0
def runpp(net, t_grnd=10 + 273.15, method="NON-LINEAR"):

    # Reset results data-frames
    net.res_bus.drop(net.res_bus.index, inplace=True)
    net.res_pipe.drop(net.res_pipe.index, inplace=True)
    net.res_feeder.drop(net.res_feeder.index, inplace=True)
    net.res_station.drop(net.res_station.index, inplace=True)

    # Set results for pipes not in service
    for pipe in net.pipe.loc[net.pipe["in_service"] == False, "name"].values:
        idx = get_index(pipe, net.pipe)
        net.res_pipe.loc[idx] = [pipe, 0.0, 0.0, 0.0, 0]

    # Run simulation by pressure level (from lower to higher)
    sorted_levels = sorted(net.LEVELS.items(), key=operator.itemgetter(1))
    for level, value in sorted_levels:
        # Check if level exists
        # TODO: Why not looping over net.bus["level"].unique() ???
        if level in net.bus["level"].unique():
            g = top.graphs_by_level_as_dict(net)
            graph = g[level]
            p_nodes, m_dot_pipes, m_dot_nodes, fluid = {
                "NON-LINEAR": sim_nl,
                "LINEAR": sim_ln
            }[method].run_one_level(net, level)

            # Set p_node value in results
            for (node, data), p in zip(graph.nodes(data=True), p_nodes):
                net.res_bus.loc[data["index"]] = [
                    node, round(p), round(p * 1e-5, 2)
                ]

            # Set m_dot_pip value in results
            data_pipes = [
                data for u, v, data in graph.edges(data=True)
                if data["type"] == "PIPE"
            ]
            for data, m_dot in zip(data_pipes, m_dot_pipes):
                v = _v_from_m_dot(data["D_m"], m_dot, fluid)
                net.res_pipe.loc[data["index"]] = [
                    data["name"],
                    m_dot,
                    round(v, 2),
                    round(m_dot * net.LHV, 1),
                    round(abs(100 * v / net.V_MAX), 1),
                ]

            # Set m_dot_pip value in results
            for node, m_dot in zip(graph.nodes, m_dot_nodes):
                if node in net.station["bus_low"].unique():
                    idx_stat = get_index(node, net.station, col="bus_low")
                    stat = net.station.at[idx_stat, "name"]
                    idx = get_index(stat, net.res_station)
                    net.res_station.loc[idx] = [
                        stat,
                        -m_dot,
                        -m_dot * net.LHV,
                        round(
                            abs(-100 * m_dot * net.LHV /
                                net.station.at[idx_stat, "p_lim_kW"]), 1),
                    ]

                if node in net.feeder["bus"].unique():
                    idx_feed = get_index(node, net.feeder, col="bus")
                    feed = net.feeder.at[idx_feed, "name"]
                    idx = get_index(feed, net.res_feeder)
                    net.res_feeder.loc[idx] = [
                        feed,
                        m_dot,
                        m_dot * net.LHV,
                        round(
                            abs(100 * m_dot * net.LHV /
                                net.feeder.at[idx_feed, "p_lim_kW"]), 1),
                    ]