示例#1
0
 def get_island(self, bus_idx):
     """
     get the array of branch indices that belong to the islands given by the bus indices
     :param bus_idx: array of bus indices
     :return: array of island branch indices
     """
     return tp.get_elements_of_the_island(self.C_branch_bus_f + self.C_branch_bus_t, bus_idx)
示例#2
0
 def get_island(self, bus_idx):
     """
     Get the elements of the island given the bus indices
     :param bus_idx: list of bus indices
     :return: list of line indices of the island
     """
     return tp.get_elements_of_the_island(self.C_vsc_bus, bus_idx)
示例#3
0
 def get_island(self, bus_idx):
     """
     Get HVDC indices of the island given by the bus indices
     :param bus_idx: list of bus indices
     :return: list of HVDC lines indices
     """
     return tp.get_elements_of_the_island(
         self.C_hvdc_bus_f + self.C_hvdc_bus_t, bus_idx)
示例#4
0
def get_acdc_pf_island(circuit: AcDcSnapshotCircuit,
                       bus_idx) -> "AcDcSnapshotCircuit":
    """
    Get the island corresponding to the given buses
    :param bus_idx: array of bus indices
    :return: SnapshotCircuit
    """

    # find the indices of the devices of the island
    br_idx = tp.get_elements_of_the_island(
        circuit.C_branch_bus_f + circuit.C_branch_bus_t, bus_idx)
    line_idx = tp.get_elements_of_the_island(circuit.C_line_bus, bus_idx)
    dc_line_idx = tp.get_elements_of_the_island(circuit.C_dc_line_bus, bus_idx)
    tr_idx = tp.get_elements_of_the_island(circuit.C_tr_bus, bus_idx)
    vsc_idx = tp.get_elements_of_the_island(circuit.C_vsc_bus, bus_idx)

    load_idx = tp.get_elements_of_the_island(circuit.C_bus_load.T, bus_idx)
    stagen_idx = tp.get_elements_of_the_island(
        circuit.C_bus_static_generator.T, bus_idx)
    gen_idx = tp.get_elements_of_the_island(circuit.C_bus_gen.T, bus_idx)
    batt_idx = tp.get_elements_of_the_island(circuit.C_bus_batt.T, bus_idx)
    shunt_idx = tp.get_elements_of_the_island(circuit.C_bus_shunt.T, bus_idx)

    nc = AcDcSnapshotCircuit(
        nbus=len(bus_idx),
        nline=len(line_idx),
        ndcline=len(dc_line_idx),
        ntr=len(tr_idx),
        nvsc=len(vsc_idx),
        nload=len(load_idx),
        ngen=len(gen_idx),
        nbatt=len(batt_idx),
        nshunt=len(shunt_idx),
        nstagen=len(stagen_idx),
        sbase=circuit.Sbase,
        apply_temperature=circuit.apply_temperature,
        branch_tolerance_mode=circuit.branch_tolerance_mode)

    nc.original_bus_idx = bus_idx
    nc.original_branch_idx = br_idx

    nc.original_line_idx = line_idx
    nc.original_tr_idx = tr_idx
    nc.original_gen_idx = gen_idx
    nc.original_bat_idx = batt_idx

    # bus ----------------------------------------------------------------------------------------------------------
    nc.bus_names = circuit.bus_names[bus_idx]
    nc.bus_active = circuit.bus_active[bus_idx]
    nc.Vbus = circuit.Vbus[bus_idx]
    nc.bus_types = circuit.bus_types[bus_idx]

    # branch common ------------------------------------------------------------------------------------------------
    nc.branch_names = circuit.branch_names[br_idx]
    nc.branch_active = circuit.branch_active[br_idx]
    nc.F = circuit.F[br_idx]
    nc.T = circuit.T[br_idx]
    nc.branch_rates = circuit.branch_rates[br_idx]
    nc.C_branch_bus_f = circuit.C_branch_bus_f[np.ix_(br_idx, bus_idx)]
    nc.C_branch_bus_t = circuit.C_branch_bus_t[np.ix_(br_idx, bus_idx)]

    nc.R = circuit.R[br_idx]
    nc.X = circuit.X[br_idx]
    nc.G = circuit.G[br_idx]
    nc.B = circuit.B[br_idx]
    nc.m = circuit.m[br_idx]
    nc.theta = circuit.theta[br_idx]
    nc.Beq = circuit.Beq[br_idx]
    nc.G0 = circuit.G0[br_idx]

    nc.tap_f = circuit.tap_f[br_idx]
    nc.tap_t = circuit.tap_t[br_idx]

    nc.Inom = circuit.Inom[br_idx]
    nc.Pset = circuit.Pset[br_idx]
    nc.Qset = circuit.Qset[br_idx]
    nc.vf_set = circuit.vt_set[br_idx]
    nc.vt_set = circuit.vf_set[br_idx]
    nc.control_mode = circuit.control_mode[br_idx]

    # load ---------------------------------------------------------------------------------------------------------
    nc.load_names = circuit.load_names[load_idx]
    nc.load_active = circuit.load_active[load_idx]
    nc.load_s = circuit.load_s[load_idx]

    nc.C_bus_load = circuit.C_bus_load[np.ix_(bus_idx, load_idx)]

    # static generators --------------------------------------------------------------------------------------------
    nc.static_generator_names = circuit.static_generator_names[stagen_idx]
    nc.static_generator_active = circuit.static_generator_active[stagen_idx]
    nc.static_generator_s = circuit.static_generator_s[stagen_idx]

    nc.C_bus_static_generator = circuit.C_bus_static_generator[np.ix_(
        bus_idx, stagen_idx)]

    # battery ------------------------------------------------------------------------------------------------------
    nc.battery_names = circuit.battery_names[batt_idx]
    nc.battery_active = circuit.battery_active[batt_idx]
    nc.battery_controllable = circuit.battery_controllable[batt_idx]
    nc.battery_p = circuit.battery_p[batt_idx]
    nc.battery_pf = circuit.battery_pf[batt_idx]
    nc.battery_v = circuit.battery_v[batt_idx]
    nc.battery_qmin = circuit.battery_qmin[batt_idx]
    nc.battery_qmax = circuit.battery_qmax[batt_idx]

    nc.C_bus_batt = circuit.C_bus_batt[np.ix_(bus_idx, batt_idx)]

    # generator ----------------------------------------------------------------------------------------------------
    nc.generator_names = circuit.generator_names[gen_idx]
    nc.generator_active = circuit.generator_active[gen_idx]
    nc.generator_controllable = circuit.generator_controllable[gen_idx]
    nc.generator_p = circuit.generator_p[gen_idx]
    nc.generator_pf = circuit.generator_pf[gen_idx]
    nc.generator_v = circuit.generator_v[gen_idx]
    nc.generator_qmin = circuit.generator_qmin[gen_idx]
    nc.generator_qmax = circuit.generator_qmax[gen_idx]

    nc.C_bus_gen = circuit.C_bus_gen[np.ix_(bus_idx, gen_idx)]

    # shunt --------------------------------------------------------------------------------------------------------
    nc.shunt_names = circuit.shunt_names[shunt_idx]
    nc.shunt_active = circuit.shunt_active[shunt_idx]
    nc.shunt_admittance = circuit.shunt_admittance[shunt_idx]

    nc.C_bus_shunt = circuit.C_bus_shunt[np.ix_(bus_idx, shunt_idx)]

    return nc
def get_opf_time_island(self, bus_idx, time_idx) -> "OpfTimeCircuit":
    """
    Get the island corresponding to the given buses
    :param bus_idx: array of bus indices
    :param time_idx: array of time indices
    :return: TiTimeCircuitmeIsland
    """

    # find the indices of the devices of the island
    line_idx = tp.get_elements_of_the_island(self.C_line_bus, bus_idx)
    tr_idx = tp.get_elements_of_the_island(self.C_tr_bus, bus_idx)
    vsc_idx = tp.get_elements_of_the_island(self.C_vsc_bus, bus_idx)
    hvdc_idx = tp.get_elements_of_the_island(
        self.C_hvdc_bus_f + self.C_hvdc_bus_t, bus_idx)
    br_idx = tp.get_elements_of_the_island(
        self.C_branch_bus_f + self.C_branch_bus_t, bus_idx)

    load_idx = tp.get_elements_of_the_island(self.C_bus_load.T, bus_idx)
    stagen_idx = tp.get_elements_of_the_island(self.C_bus_static_generator.T,
                                               bus_idx)
    gen_idx = tp.get_elements_of_the_island(self.C_bus_gen.T, bus_idx)
    batt_idx = tp.get_elements_of_the_island(self.C_bus_batt.T, bus_idx)
    shunt_idx = tp.get_elements_of_the_island(self.C_bus_shunt.T, bus_idx)

    nc = OpfTimeCircuit(nbus=len(bus_idx),
                        nline=len(line_idx),
                        ntr=len(tr_idx),
                        nvsc=len(vsc_idx),
                        nhvdc=len(hvdc_idx),
                        nload=len(load_idx),
                        ngen=len(gen_idx),
                        nbatt=len(batt_idx),
                        nshunt=len(shunt_idx),
                        nstagen=len(stagen_idx),
                        ntime=len(time_idx),
                        sbase=self.Sbase,
                        time_array=self.time_array[time_idx],
                        apply_temperature=self.apply_temperature,
                        branch_tolerance_mode=self.branch_tolerance_mode)

    nc.original_time_idx = time_idx
    nc.original_bus_idx = bus_idx
    nc.original_branch_idx = br_idx
    nc.original_tr_idx = tr_idx
    nc.original_gen_idx = gen_idx
    nc.original_bat_idx = batt_idx

    # bus ----------------------------------------------------------------------------------------------------------
    nc.bus_names = self.bus_names[bus_idx]
    nc.bus_types = self.bus_types[bus_idx]
    nc.bus_installed_power = self.bus_installed_power[bus_idx]
    nc.bus_active = self.bus_active[np.ix_(time_idx, bus_idx)]
    nc.Vbus = self.Vbus[np.ix_(time_idx, bus_idx)]

    # branch common ------------------------------------------------------------------------------------------------
    nc.branch_names = self.branch_names[br_idx]
    nc.branch_active = self.branch_active[np.ix_(time_idx, br_idx)]
    nc.branch_rates = self.branch_rates[np.ix_(time_idx, br_idx)]
    nc.branch_cost = self.branch_cost[np.ix_(time_idx, br_idx)]
    nc.branch_R = self.branch_R[br_idx]
    nc.branch_X = self.branch_X[br_idx]
    nc.F = self.F[br_idx]
    nc.T = self.T[br_idx]
    nc.C_branch_bus_f = self.C_branch_bus_f[np.ix_(br_idx, bus_idx)]
    nc.C_branch_bus_t = self.C_branch_bus_t[np.ix_(br_idx, bus_idx)]

    # lines --------------------------------------------------------------------------------------------------------
    nc.line_names = self.line_names[line_idx]
    nc.line_R = self.line_R[line_idx]
    nc.line_X = self.line_X[line_idx]
    nc.line_B = self.line_B[line_idx]
    nc.line_temp_base = self.line_temp_base[line_idx]
    nc.line_temp_oper = self.line_temp_oper[line_idx]
    nc.line_alpha = self.line_alpha[line_idx]
    nc.line_impedance_tolerance = self.line_impedance_tolerance[line_idx]

    nc.C_line_bus = self.C_line_bus[np.ix_(line_idx, bus_idx)]

    # transformer 2W + 3W ------------------------------------------------------------------------------------------
    nc.tr_names = self.tr_names[tr_idx]
    nc.tr_R = self.tr_R[tr_idx]
    nc.tr_X = self.tr_X[tr_idx]
    nc.tr_G = self.tr_G[tr_idx]
    nc.tr_B = self.tr_B[tr_idx]

    nc.tr_tap_f = self.tr_tap_f[tr_idx]
    nc.tr_tap_t = self.tr_tap_t[tr_idx]
    nc.tr_tap_mod = self.tr_tap_mod[tr_idx]
    nc.tr_tap_ang = self.tr_tap_ang[tr_idx]

    nc.C_tr_bus = self.C_tr_bus[np.ix_(tr_idx, bus_idx)]

    # hvdc line ----------------------------------------------------------------------------------------------------
    nc.hvdc_names = self.hvdc_names[hvdc_idx]

    nc.hvdc_active = self.hvdc_active[np.ix_(time_idx, hvdc_idx)]
    nc.hvdc_rate = self.hvdc_rate[np.ix_(time_idx, hvdc_idx)]

    nc.hvdc_Pf = self.hvdc_Pf[np.ix_(time_idx, hvdc_idx)]
    nc.hvdc_Pt = self.hvdc_Pt[np.ix_(time_idx, hvdc_idx)]

    nc.C_hvdc_bus_f = self.C_hvdc_bus_f[np.ix_(hvdc_idx, bus_idx)]
    nc.C_hvdc_bus_t = self.C_hvdc_bus_t[np.ix_(hvdc_idx, bus_idx)]

    # vsc converter ------------------------------------------------------------------------------------------------
    nc.vsc_names = self.vsc_names[vsc_idx]
    nc.vsc_R1 = self.vsc_R1[vsc_idx]
    nc.vsc_X1 = self.vsc_X1[vsc_idx]
    nc.vsc_Gsw = self.vsc_Gsw[vsc_idx]
    nc.vsc_Beq = self.vsc_Beq[vsc_idx]
    nc.vsc_m = self.vsc_m[vsc_idx]
    nc.vsc_theta = self.vsc_theta[vsc_idx]

    nc.C_vsc_bus = self.C_vsc_bus[np.ix_(vsc_idx, bus_idx)]

    # load ---------------------------------------------------------------------------------------------------------
    nc.load_names = self.load_names[load_idx]
    nc.load_active = self.load_active[np.ix_(time_idx, load_idx)]
    nc.load_s = self.load_s[np.ix_(time_idx, load_idx)]
    nc.load_cost = self.load_cost[np.ix_(time_idx, load_idx)]

    nc.C_bus_load = self.C_bus_load[np.ix_(bus_idx, load_idx)]

    # static generators --------------------------------------------------------------------------------------------
    nc.static_generator_names = self.static_generator_names[stagen_idx]
    nc.static_generator_active = self.static_generator_active[np.ix_(
        time_idx, stagen_idx)]
    nc.static_generator_s = self.static_generator_s[np.ix_(
        time_idx, stagen_idx)]

    nc.C_bus_static_generator = self.C_bus_static_generator[np.ix_(
        bus_idx, stagen_idx)]

    # battery ------------------------------------------------------------------------------------------------------
    nc.battery_names = self.battery_names[batt_idx]
    nc.battery_controllable = self.battery_controllable[batt_idx]
    nc.battery_dispatchable = self.battery_dispatchable[batt_idx]
    nc.battery_installed_p = self.battery_installed_p[batt_idx]

    nc.battery_enom = self.battery_enom[batt_idx]
    nc.battery_min_soc = self.battery_min_soc[batt_idx]
    nc.battery_max_soc = self.battery_max_soc[batt_idx]
    nc.battery_soc_0 = self.battery_soc_0[batt_idx]
    nc.battery_charge_efficiency = self.battery_charge_efficiency[batt_idx]
    nc.battery_discharge_efficiency = self.battery_discharge_efficiency[
        batt_idx]

    nc.battery_active = self.battery_active[np.ix_(time_idx, batt_idx)]
    nc.battery_p = self.battery_p[np.ix_(time_idx, batt_idx)]
    nc.battery_pf = self.battery_pf[np.ix_(time_idx, batt_idx)]
    nc.battery_v = self.battery_v[np.ix_(time_idx, batt_idx)]
    nc.battery_cost = self.battery_cost[np.ix_(time_idx, batt_idx)]

    nc.battery_pmin = self.battery_pmin[batt_idx]
    nc.battery_pmax = self.battery_pmax[batt_idx]

    nc.C_bus_batt = self.C_bus_batt[np.ix_(bus_idx, batt_idx)]

    # generator ----------------------------------------------------------------------------------------------------
    nc.generator_names = self.generator_names[gen_idx]
    nc.generator_controllable = self.generator_controllable[gen_idx]
    nc.generator_dispatchable = self.generator_dispatchable[gen_idx]
    nc.battery_installed_p = self.battery_installed_p[gen_idx]

    nc.generator_active = self.generator_active[np.ix_(time_idx, gen_idx)]
    nc.generator_p = self.generator_p[np.ix_(time_idx, gen_idx)]
    nc.generator_pf = self.generator_pf[np.ix_(time_idx, gen_idx)]
    nc.generator_v = self.generator_v[np.ix_(time_idx, gen_idx)]
    nc.generator_cost = self.generator_cost[np.ix_(time_idx, gen_idx)]

    nc.generator_pmin = self.generator_pmin[gen_idx]
    nc.generator_pmax = self.generator_pmax[gen_idx]

    nc.C_bus_gen = self.C_bus_gen[np.ix_(bus_idx, gen_idx)]

    # shunt --------------------------------------------------------------------------------------------------------
    nc.shunt_names = self.shunt_names[shunt_idx]
    nc.shunt_active = self.shunt_active[np.ix_(time_idx, shunt_idx)]
    nc.shunt_admittance = self.shunt_admittance[np.ix_(time_idx, shunt_idx)]

    nc.C_bus_shunt = self.C_bus_shunt[np.ix_(bus_idx, shunt_idx)]

    return nc
示例#6
0
 def get_island(self, bus_idx):
     return tp.get_elements_of_the_island(self.C_bus_shunt.T, bus_idx)
示例#7
0
 def get_island(self, bus_idx):
     return tp.get_elements_of_the_island(self.C_bus_static_generator.T,
                                          bus_idx)