def _create_trafo3w_buses(net, init_results): from pandapower.create import create_buses hv_buses = net.bus.loc[net.trafo3w.hv_bus.values] bid = create_buses(net, nr_buses=len(net["trafo3w"]), vn_kv=hv_buses.vn_kv.values, in_service=net.trafo3w.in_service.values) net.trafo3w["ad_bus"] = bid if init_results: # TODO: this is probably slow, but the whole auxiliary bus creation should be included in # pd2ppc anyways. LT for hv_bus, aux_bus in zip(hv_buses.index, bid): net.res_bus.loc[aux_bus] = net.res_bus.loc[hv_bus].values
def _create_xward_buses(net, init_results): from pandapower.create import create_buses main_buses = net.bus.loc[net.xward.bus.values] bid = create_buses(net, nr_buses=len(main_buses), vn_kv=main_buses.vn_kv.values, in_service=net["xward"]["in_service"].values) net.xward["ad_bus"] = bid if init_results: # TODO: this is probably slow, but the whole auxiliary bus creation should be included in # pd2ppc anyways. LT for hv_bus, aux_bus in zip(main_buses.index, bid): net.res_bus.loc[aux_bus] = net.res_bus.loc[hv_bus].values
def _create_trafo3w_buses(net): from pandapower.create import create_buses init_results = net["_options"]["init_results"] hv_buses = net.bus.loc[net.trafo3w.hv_bus.values] bid = create_buses(net, nr_buses=len(net["trafo3w"]), vn_kv=hv_buses.vn_kv.values, in_service=net.trafo3w.in_service.values) net.trafo3w["ad_bus"] = bid if init_results: # TODO: this is probably slow, but the whole auxiliary bus creation should be included in # pd2ppc anyways. LT net.res_bus=net.res_bus.append(pd.DataFrame(index=bid,data=net.res_bus.loc[hv_buses.index].values,columns=net.res_bus.columns))
def _create_xward_buses(net): from pandapower.create import create_buses init_results = net["_options"]["init_results"] main_buses = net.bus.loc[net.xward.bus.values] bid = create_buses(net, nr_buses=len(main_buses), vn_kv=main_buses.vn_kv.values, in_service=net["xward"]["in_service"].values) net.xward["ad_bus"] = bid if init_results and len(net.res_bus) > 0: # TODO: this is probably slow, but the whole auxiliary bus creation should be included in # pd2ppc anyways. LT net.res_bus = net.res_bus.append( pd.DataFrame(index=bid, data=net.res_bus.loc[main_buses.index].values, columns=net.res_bus.columns))
def _add_aux_elements_for_bb_switch(net, bus_to_be_fused): """ Add auxiliary elements (bus, bb switch, line) to the pandapower net to avoid automatic fuse of buses connected with bb switch with elements on it :param net: pandapower net :return: None """ def get_bus_branch_mapping(net, bus_to_be_fused): bus_with_elements = set(net.load.bus).union(set(net.sgen.bus)).union( set(net.shunt.bus)).union(set(net.gen.bus)).union( set(net.ext_grid.bus)).union(set(net.ward.bus)).union( set(net.xward.bus)) # bus_with_pq_measurement = set(net.measurement[(net.measurement.measurement_type=='p')&(net.measurement.element_type=='bus')].element.values) # bus_with_elements = bus_with_elements.union(bus_with_pq_measurement) bus_ppci = pd.DataFrame(data=net._pd2ppc_lookups['bus'], columns=["bus_ppci"]) bus_ppci['bus_with_elements'] = bus_ppci.index.isin(bus_with_elements) existed_bus = bus_ppci[bus_ppci.index.isin(net.bus.index)] bus_ppci['vn_kv'] = net.bus.loc[existed_bus.index, 'vn_kv'] ppci_bus_with_elements = bus_ppci.groupby( 'bus_ppci')['bus_with_elements'].sum() bus_ppci.loc[:, 'elements_in_cluster'] = ppci_bus_with_elements[ bus_ppci['bus_ppci'].values].values bus_ppci['bus_to_be_fused'] = False if bus_to_be_fused is not None: bus_ppci.loc[bus_to_be_fused, 'bus_to_be_fused'] = True bus_cluster_to_be_fused_mask = bus_ppci.groupby( 'bus_ppci')['bus_to_be_fused'].any() bus_ppci.loc[bus_cluster_to_be_fused_mask[bus_ppci['bus_ppci']. values].values, 'bus_to_be_fused'] = True return bus_ppci # find the buses which was fused together in the pp2ppc conversion with elements on them # the first one will be skipped rundcpp(net) bus_ppci_mapping = get_bus_branch_mapping(net, bus_to_be_fused) bus_to_be_handled = bus_ppci_mapping[(bus_ppci_mapping ['elements_in_cluster']>=2)&\ bus_ppci_mapping ['bus_with_elements']&\ (~bus_ppci_mapping ['bus_to_be_fused'])] bus_to_be_handled = bus_to_be_handled[ bus_to_be_handled['bus_ppci'].duplicated(keep='first')] # create auxiliary buses for the buses need to be handled aux_bus_index = create_buses(net, bus_to_be_handled.shape[0], bus_to_be_handled.vn_kv.values, name=AUX_BUS_NAME) bus_aux_mapping = pd.Series(aux_bus_index, index=bus_to_be_handled.index.values) # create auxiliary switched and disable original switches connected to the related buses net.switch.loc[:, 'original_closed'] = net.switch.loc[:, 'closed'] switch_to_be_replaced_sel = ( (net.switch.et == 'b') & (net.switch.element.isin(bus_to_be_handled.index) | net.switch.bus.isin(bus_to_be_handled.index))) net.switch.loc[switch_to_be_replaced_sel, 'closed'] = False # create aux switches with selecting the existed switches aux_switch = net.switch.loc[ switch_to_be_replaced_sel, ['bus', 'closed', 'element', 'et', 'name', 'original_closed', 'z_ohm']] aux_switch.loc[:, 'name'] = AUX_SWITCH_NAME # replace the original bus with the correspondent auxiliary bus bus_to_be_replaced = aux_switch.loc[ aux_switch.bus.isin(bus_to_be_handled.index), 'bus'] element_to_be_replaced = aux_switch.loc[ aux_switch.element.isin(bus_to_be_handled.index), 'element'] aux_switch.loc[bus_to_be_replaced.index, 'bus'] =\ bus_aux_mapping[bus_to_be_replaced].values.astype(int) aux_switch.loc[element_to_be_replaced.index, 'element'] =\ bus_aux_mapping[element_to_be_replaced].values.astype(int) aux_switch['closed'] = aux_switch['original_closed'] net.switch = net.switch.append(aux_switch, ignore_index=True) # PY34 compatibility # net.switch = net.switch.append(aux_switch, ignore_index=True, sort=False) # create auxiliary lines as small impedance for bus_ori, bus_aux in bus_aux_mapping.iteritems(): create_line_from_parameters(net, bus_ori, bus_aux, length_km=1, name=AUX_LINE_NAME, r_ohm_per_km=0.15, x_ohm_per_km=0.2, c_nf_per_km=0, max_i_ka=1)