Skip to content

Commit

Permalink
conversion to numpy of y0_grid in pd2ppc_zero.add_ext_grid_sc_impedan…
Browse files Browse the repository at this point in the history
…ce_zero
  • Loading branch information
dlohmeier committed Feb 5, 2020
1 parent e5a3a77 commit 06ab6f5
Showing 1 changed file with 49 additions and 35 deletions.
84 changes: 49 additions & 35 deletions pandapower/pd2ppc_zero.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,14 @@
from pandapower.build_bus import _build_bus_ppc
from pandapower.build_gen import _build_gen_ppc
from pandapower.pd2ppc import _ppc2ppci
from pandapower.pypower.idx_brch import BR_B, BR_R, BR_X, F_BUS, T_BUS, branch_cols, BR_STATUS, SHIFT, TAP
from pandapower.pypower.idx_brch import BR_B, BR_R, BR_X, F_BUS, T_BUS, branch_cols, BR_STATUS, \
SHIFT, TAP
from pandapower.pypower.idx_bus import BASE_KV, BS, GS
from pandapower.build_branch import _calc_tap_from_dataframe, _transformer_correction_factor, _calc_nominal_ratio_from_dataframe
from pandapower.build_branch import _switch_branches, _branches_with_oos_buses, _initialize_branch_lookup
from pandapower.build_branch import _calc_tap_from_dataframe, _transformer_correction_factor, \
_calc_nominal_ratio_from_dataframe
from pandapower.build_branch import _switch_branches, _branches_with_oos_buses, \
_initialize_branch_lookup


def _pd2ppc_zero(net):
"""
Expand All @@ -43,12 +47,14 @@ def _pd2ppc_zero(net):
_branches_with_oos_buses(net, ppc)
if hasattr(net, "_isolated_buses"):
ppc["bus"][net._isolated_buses, 1] = 4.
# generates "internal" ppci format (for powerflow calc) from "external" ppc format and updates the bus lookup
# generates "internal" ppci format (for powerflow calc) from "external" ppc format and updates
# the bus lookup
# Note: Also reorders buses and gens in ppc
ppci = _ppc2ppci(ppc, net)
net._ppc0 = ppc
return ppc, ppci


def _build_branch_ppc_zero(net, ppc):
"""
Takes the empty ppc network and fills it with the zero imepdance branch values. The branch
Expand All @@ -72,12 +78,13 @@ def _build_branch_ppc_zero(net, ppc):
from pandapower.shortcircuit.idx_brch import branch_cols_sc
branch_sc = np.empty(shape=(length, branch_cols_sc), dtype=float)
branch_sc.fill(np.nan)
ppc["branch"] = np.hstack((ppc["branch"], branch_sc ))
ppc["branch"] = np.hstack((ppc["branch"], branch_sc))
ppc["branch"][:, :13] = np.array([0, 0, 0, 0, 0, 250, 250, 250, 1, 0, 1, -360, 360])
_add_line_sc_impedance_zero(net, ppc)
_add_trafo_sc_impedance_zero(net, ppc)
if "trafo3w" in lookup:
raise NotImplemented("Three winding transformers are not implemented for unbalanced calculations")
raise NotImplemented(
"Three winding transformers are not implemented for unbalanced calculations")


def _add_trafo_sc_impedance_zero(net, ppc, trafo_df=None):
Expand All @@ -86,10 +93,9 @@ def _add_trafo_sc_impedance_zero(net, ppc, trafo_df=None):
branch_lookup = net["_pd2ppc_lookups"]["branch"]
if not "trafo" in branch_lookup:
return
bus_lookup = net["_pd2ppc_lookups"]["bus"]
mode = net["_options"]["mode"]
f, t = branch_lookup["trafo"]
trafo_df["_ppc_idx"] = range(f,t)
trafo_df["_ppc_idx"] = range(f, t)
bus_lookup = net["_pd2ppc_lookups"]["bus"]
buses_all, gs_all, bs_all = np.array([], dtype=int), np.array([]), np.array([])
for vector_group, trafos in trafo_df.groupby("vector_group"):
Expand Down Expand Up @@ -125,12 +131,13 @@ def _add_trafo_sc_impedance_zero(net, ppc, trafo_df=None):
ppc["branch"][ppc_idx, SHIFT] = shift

# zero seq. transformer impedance
tap_lv = np.square(vn_trafo_lv / vn_lv) * net.sn_mva # adjust for low voltage side voltage converter
tap_lv = np.square(
vn_trafo_lv / vn_lv) * net.sn_mva # adjust for low voltage side voltage converter
z_sc = vk0_percent / 100. / sn_mva * tap_lv
r_sc = vkr0_percent / 100. / sn_mva * tap_lv
z_sc = z_sc.astype(float)
r_sc = r_sc.astype(float)
x_sc = np.sign(z_sc) * np.sqrt(z_sc**2 - r_sc**2)
x_sc = np.sign(z_sc) * np.sqrt(z_sc ** 2 - r_sc ** 2)
z0_k = (r_sc + x_sc * 1j) / parallel
if mode == "sc":
from pandapower.shortcircuit.idx_bus import C_MAX
Expand All @@ -140,27 +147,27 @@ def _add_trafo_sc_impedance_zero(net, ppc, trafo_df=None):
y0_k = 1 / z0_k
# zero sequence transformer magnetising impedance
z_m = vk0_percent * mag0_percent / 100. / sn_mva * tap_lv
x_m = z_m / np.sqrt(mag0_rx**2 + 1)
x_m = z_m / np.sqrt(mag0_rx ** 2 + 1)
r_m = x_m * mag0_rx
r0_trafo_mag = r_m / parallel
x0_trafo_mag = x_m / parallel
z0_mag = r0_trafo_mag + x0_trafo_mag * 1j

if vector_group == "Dyn":
buses_all = np.hstack([buses_all, lv_buses_ppc])
gs_all = np.hstack([gs_all, y0_k.real*in_service])
bs_all = np.hstack([bs_all, y0_k.imag*in_service])
gs_all = np.hstack([gs_all, y0_k.real * in_service])
bs_all = np.hstack([bs_all, y0_k.imag * in_service])

elif vector_group == "YNd":
buses_all = np.hstack([buses_all, hv_buses_ppc])
gs_all = np.hstack([gs_all, y0_k.real*in_service])
bs_all = np.hstack([bs_all, y0_k.imag*in_service])
gs_all = np.hstack([gs_all, y0_k.real * in_service])
bs_all = np.hstack([bs_all, y0_k.imag * in_service])

elif vector_group == "Yyn":
buses_all = np.hstack([buses_all, lv_buses_ppc])
y = 1/(z0_mag+z0_k).astype(complex)
gs_all = np.hstack([gs_all, y.real*in_service])
bs_all = np.hstack([bs_all, y.imag*in_service])
y = 1 / (z0_mag + z0_k).astype(complex)
gs_all = np.hstack([gs_all, y.real * in_service])
bs_all = np.hstack([bs_all, y.imag * in_service])

elif vector_group == "YNyn":
ppc["branch"][ppc_idx, BR_STATUS] = in_service
Expand All @@ -169,37 +176,40 @@ def _add_trafo_sc_impedance_zero(net, ppc, trafo_df=None):
z2 = (1 - si0_hv_partial) * z0_k
z3 = z0_mag

z_temp = z1*z2 + z2*z3 + z1*z3
z_temp = z1 * z2 + z2 * z3 + z1 * z3
za = z_temp / z2
zb = z_temp / z1
zc = z_temp / z3

ppc["branch"][ppc_idx, BR_R] = zc.real
ppc["branch"][ppc_idx, BR_X] = zc.imag
y = 2 / za
ppc["branch"][ppc_idx, BR_B] = y.imag - y.real*1j
ppc["branch"][ppc_idx, BR_B] = y.imag - y.real * 1j
# add a shunt element parallel to zb if the leakage impedance distribution is unequal
#TODO: this only necessary if si0_hv_partial!=0.5 --> test
zs = (za * zb)/(za - zb)
# TODO: this only necessary if si0_hv_partial!=0.5 --> test
zs = (za * zb) / (za - zb)
ys = 1 / zs.astype(complex)
buses_all = np.hstack([buses_all, lv_buses_ppc])
gs_all = np.hstack([gs_all, ys.real*in_service])
bs_all = np.hstack([bs_all, ys.imag*in_service])
gs_all = np.hstack([gs_all, ys.real * in_service])
bs_all = np.hstack([bs_all, ys.imag * in_service])
elif vector_group == "YNy":
buses_all = np.hstack([buses_all, hv_buses_ppc])
y = 1/(z0_mag+z0_k).astype(complex)
gs_all = np.hstack([gs_all, y.real*in_service])
bs_all = np.hstack([bs_all, y.imag*in_service])
y = 1 / (z0_mag + z0_k).astype(complex)
gs_all = np.hstack([gs_all, y.real * in_service])
bs_all = np.hstack([bs_all, y.imag * in_service])
elif vector_group[-1].isdigit():
raise ValueError("Unknown transformer vector group %s - please specify vector group without phase shift number. Phase shift can be specified in net.trafo.shift_degree"%vector_group)
raise ValueError(
"Unknown transformer vector group %s - please specify vector group without phase shift number. Phase shift can be specified in net.trafo.shift_degree" % vector_group)
else:
raise ValueError("Transformer vector group %s is unknown / not implemented"%vector_group)
raise ValueError(
"Transformer vector group %s is unknown / not implemented" % vector_group)

buses, gs, bs = aux._sum_by_group(buses_all, gs_all, bs_all)
ppc["bus"][buses, GS] += gs
ppc["bus"][buses, BS] += bs
del net.trafo["_ppc_idx"]


def _add_ext_grid_sc_impedance_zero(net, ppc):
mode = net["_options"]["mode"]

Expand All @@ -220,8 +230,9 @@ def _add_ext_grid_sc_impedance_zero(net, ppc):
else:
c = 1.
if not "s_sc_%s_mva" % case in eg:
raise ValueError("short circuit apparent power s_sc_%s_mva needs to be specified for "% case +
"external grid" )
raise ValueError(
"short circuit apparent power s_sc_%s_mva needs to be specified for " % case +
"external grid")
s_sc = eg["s_sc_%s_mva" % case].values
if not "rx_%s" % case in eg:
raise ValueError("short circuit R/X rate rx_%s needs to be specified for external grid" %
Expand All @@ -241,9 +252,11 @@ def _add_ext_grid_sc_impedance_zero(net, ppc):
elif case == "min":
x0_grid = net.ext_grid["x0x_%s" % case] * x_grid
r0_grid = net.ext_grid["r0x0_%s" % case] * x0_grid
y0_grid = 1 / (r0_grid + x0_grid*1j)

buses, gs, bs = aux._sum_by_group(eg_buses_ppc, y0_grid.real, y0_grid.imag)
r0_grid_np, x0_grid_np = r0_grid.values, x0_grid.values
y0_grid_np = 1 / (r0_grid_np + x0_grid_np * 1j)

buses, gs, bs = aux._sum_by_group(eg_buses_ppc, y0_grid_np.real, y0_grid_np.imag)
ppc["bus"][buses, GS] = gs
ppc["bus"][buses, BS] = bs

Expand All @@ -266,5 +279,6 @@ def _add_line_sc_impedance_zero(net, ppc):
ppc["branch"][f:t, T_BUS] = tb
ppc["branch"][f:t, BR_R] = line["r0_ohm_per_km"].values * length / baseR / parallel
ppc["branch"][f:t, BR_X] = line["x0_ohm_per_km"].values * length / baseR / parallel
ppc["branch"][f:t, BR_B] = (2 * net["f_hz"] * math.pi * line["c0_nf_per_km"].values * 1e-9 * baseR * length * parallel)
ppc["branch"][f:t, BR_STATUS] = line["in_service"].astype(int)
ppc["branch"][f:t, BR_B] = (2 * net["f_hz"] * math.pi * line[
"c0_nf_per_km"].values * 1e-9 * baseR * length * parallel)
ppc["branch"][f:t, BR_STATUS] = line["in_service"].astype(int)

0 comments on commit 06ab6f5

Please sign in to comment.