Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
EXAMPLE:
create_line_from_parameters(net, "line1", from_bus = 0, to_bus = 1, lenght_km=0.1,
r_ohm_per_km = .01, x_ohm_per_km = 0.05, c_nf_per_km = 10,
max_i_ka = 0.4)
"""
# check if bus exist to attach the line to
for b in [from_bus, to_bus]:
if b not in net["bus"].index.values:
raise UserWarning("Line %s tries to attach to non-existing bus %s"
% (name, b))
if index is None:
index = get_free_id(net["line"])
if index in net["line"].index:
raise UserWarning("A line with index %s already exists" % index)
v = {
"name": name, "length_km": length_km, "from_bus": from_bus,
"to_bus": to_bus, "in_service": bool(in_service), "std_type": None,
"df": df, "r_ohm_per_km": r_ohm_per_km, "x_ohm_per_km": x_ohm_per_km,
"c_nf_per_km": c_nf_per_km, "max_i_ka": max_i_ka, "parallel": parallel, "type": type,
"g_us_per_km": g_us_per_km
}
# store dtypes
dtypes = net.line.dtypes
net.line.loc[index, list(v.keys())] = list(v.values())
**min_vm_pu** (float, NAN) - Minimum bus voltage in p.u. - necessary for OPF
**coords** (array, default None, shape= (,2L)) - busbar coordinates to plot the bus with multiple points.
coords is typically a list of tuples (start and endpoint of the busbar) [(x1, y1), (x2, y2)]
OUTPUT:
**index** (int) - The unique ID of the created element
EXAMPLE:
create_bus(net, name = "bus1")
"""
if index is not None and index in net["bus"].index:
raise UserWarning("A bus with index %s already exists" % index)
if index is None:
index = get_free_id(net["bus"])
# store dtypes
dtypes = net.bus.dtypes
net.bus.loc[index, ["name", "vn_kv", "type", "zone", "in_service"]] = \
[name, vn_kv, type, zone, bool(in_service)]
# and preserve dtypes
_preserve_dtypes(net.bus, dtypes)
if geodata is not None:
if len(geodata) != 2:
raise UserWarning("geodata must be given as (x, y) tuple")
net["bus_geodata"].loc[index, ["x", "y"]] = geodata
if coords is not None:
OPTIONAL:
**index** (int, index) - Force a specified ID if it is available. If None, the index one \
higher than the highest already existing index is selected.
OUTPUT:
**index** (int) - The unique ID of created cost entry
EXAMPLE:
The polynomial cost function is given by the linear and quadratic cost coefficients.
create_poly_cost(net, 0, "load", cp1_eur_per_mw = 0.1)
"""
if index is None:
index = get_free_id(net["poly_cost"])
columns = ["element", "et", "cp0_eur", "cp1_eur_per_mw", "cq0_eur", "cq1_eur_per_mvar",
"cp2_eur_per_mw2", "cq2_eur_per_mvar2"]
variables = [element, et, cp0_eur, cp1_eur_per_mw, cq0_eur, cq1_eur_per_mvar,
cp2_eur_per_mw2, cq2_eur_per_mvar2]
dtypes = net.poly_cost.dtypes
net.poly_cost.loc[index, columns] = variables
_preserve_dtypes(net.poly_cost, dtypes)
return index
**max_vm_pu** (float, NAN) - Maximum bus voltage in p.u. - necessary for OPF
**min_vm_pu** (float, NAN) - Minimum bus voltage in p.u. - necessary for OPF
OUTPUT:
**index** (int) - The unique indices ID of the created elements
EXAMPLE:
create_bus(net, name = "bus1")
"""
if index is not None:
for idx in index:
if idx in net.bus.index:
raise UserWarning("A bus with index %s already exists" % index)
else:
bid = get_free_id(net["bus"])
index = arange(bid, bid + nr_buses, 1)
# TODO: not needed when concating anyways?
# store dtypes
# dtypes = net.bus.dtypes
dd = pd.DataFrame(index=index, columns=net.bus.columns)
dd["vn_kv"] = vn_kv
dd["type"] = type
dd["zone"] = zone
dd["in_service"] = in_service
dd["name"] = name
net["bus"] = net["bus"].append(dd)[net["bus"].columns.tolist()]
# and preserve dtypes
# _preserve_dtypes(net.bus, dtypes)
def __init__(self, net, in_service=True, order=0, level=0, index=None, recycle=False,
drop_same_existing_ctrl=False, initial_powerflow=True, **kwargs):
super().__init__()
self.net = net
self.recycle = recycle
self.initial_powerflow = initial_powerflow
# add oneself to net, creating the ['controller'] DataFrame, if necessary
if index is None:
index = get_free_id(self.net.controller)
self.update_initialized(locals())
self.index = self.add_controller_to_net(in_service=in_service, order=order,
level=level, index=index, recycle=recycle,
drop_same_existing_ctrl=drop_same_existing_ctrl,
**kwargs)
**in_service** (boolean, True) - True for in_service or False for out of service
**index** (int, None) - Force a specified ID if it is available. If None, the index one \
higher than the highest already existing index is selected.
OUTPUT:
**index** (int) - The unique ID of the created shunt
EXAMPLE:
create_shunt(net, 0, 20)
"""
if bus not in net["bus"].index.values:
raise UserWarning("Cannot attach to bus %s, bus does not exist" % bus)
if index is None:
index = get_free_id(net["shunt"])
if index in net["shunt"].index:
raise UserWarning("A shunt with index %s already exists" % index)
if vn_kv is None:
vn_kv = net.bus.vn_kv.at[bus]
# store dtypes
dtypes = net.shunt.dtypes
net.shunt.loc[index, ["bus", "name", "p_mw", "q_mvar", "vn_kv", "step", "max_step",
"in_service"]] = [bus, name, p_mw, q_mvar, vn_kv, step, max_step,
in_service]
# and preserve dtypes
_preserve_dtypes(net.shunt, dtypes)
**max_q_to_mvar ** - Maximum reactive power at to bus. Necessary for OPF
OUTPUT:
**index** (int) - The unique ID of the created element
EXAMPLE:
create_dcline(net, from_bus=0, to_bus=1, p_mw=1e4, loss_percent=1.2, loss_mw=25, \
vm_from_pu=1.01, vm_to_pu=1.02)
"""
for bus in [from_bus, to_bus]:
if bus not in net["bus"].index.values:
raise UserWarning("Cannot attach to bus %s, bus does not exist" % bus)
if index is None:
index = get_free_id(net["dcline"])
if index in net["dcline"].index:
raise UserWarning("A dcline with the id %s already exists" % index)
# store dtypes
dtypes = net.dcline.dtypes
net.dcline.loc[index, ["name", "from_bus", "to_bus", "p_mw", "loss_percent", "loss_mw",
"vm_from_pu", "vm_to_pu", "max_p_mw", "min_q_from_mvar",
"min_q_to_mvar", "max_q_from_mvar", "max_q_to_mvar", "in_service"]] \
= [name, from_bus, to_bus, p_mw, loss_percent, loss_mw, vm_from_pu, vm_to_pu,
max_p_mw, min_q_from_mvar, min_q_to_mvar, max_q_from_mvar, max_q_to_mvar, in_service]
# and preserve dtypes
_preserve_dtypes(net.dcline, dtypes)
**min_q_mvar** (float, NaN) - Minimum reactive power injection. Only respected for OPF
** only considered in loadflow if calculate_voltage_angles = True
EXAMPLE:
create_ext_grid(net, 1, voltage = 1.03)
"""
if bus not in net["bus"].index.values:
raise UserWarning("Cannot attach to bus %s, bus does not exist" % bus)
if index is not None and index in net["ext_grid"].index:
raise UserWarning("An external grid with with index %s already exists" % index)
if index is None:
index = get_free_id(net["ext_grid"])
# store dtypes
dtypes = net.ext_grid.dtypes
net.ext_grid.loc[index, ["bus", "name", "vm_pu", "va_degree", "in_service"]] = \
[bus, name, vm_pu, va_degree, bool(in_service)]
if not isnan(s_sc_max_mva):
if "s_sc_max_mva" not in net.ext_grid.columns:
net.ext_grid.loc[:, "s_sc_max_mva"] = pd.Series()
net.ext_grid.at[index, "s_sc_max_mva"] = float(s_sc_max_mva)
if not isnan(s_sc_min_mva):
if "s_sc_min_mva" not in net.ext_grid.columns:
net.ext_grid.loc[:, "s_sc_min_mva"] = pd.Series()
**current_source** (bool, True) - Model this sgen as a current source during short-\
circuit calculations; useful in some cases, for example the simulation of full-\
size converters per IEC 60909-0:2016.
OUTPUT:
**index** (int) - The unique ID of the created sgen
EXAMPLE:
create_sgen(net, 1, p_mw = -120)
"""
if bus not in net["bus"].index.values:
raise UserWarning("Cannot attach to bus %s, bus does not exist" % bus)
if index is None:
index = get_free_id(net["sgen"])
if index in net["sgen"].index:
raise UserWarning("A static generator with the id %s already exists" % index)
# store dtypes
dtypes = net.sgen.dtypes
net.sgen.loc[index, ["name", "bus", "p_mw", "scaling",
"q_mvar", "sn_mva", "in_service", "type",
"current_source"]] = \
[name, bus, p_mw, scaling, q_mvar, sn_mva, bool(in_service), type, current_source]
# and preserve dtypes
_preserve_dtypes(net.sgen, dtypes)
if not isnan(min_p_mw):
**ps_mw** (float) - active power of the PQ load
**qs_mvar** (float) - reactive power of the PQ load
**pz_mw** (float) - active power of the impedance load in kW at 1.pu voltage
**qz_mvar** (float) - reactive power of the impedance load in kVar at 1.pu voltage
OUTPUT:
ward id
"""
if bus not in net["bus"].index.values:
raise UserWarning("Cannot attach to bus %s, bus does not exist" % bus)
if index is None:
index = get_free_id(net.ward)
if index in net["ward"].index:
raise UserWarning("A ward equivalent with index %s already exists" % index)
# store dtypes
dtypes = net.ward.dtypes
net.ward.loc[index, ["bus", "ps_mw", "qs_mvar", "pz_mw", "qz_mvar", "name", "in_service"]] = \
[bus, ps_mw, qs_mvar, pz_mw, qz_mvar, name, in_service]
# and preserve dtypes
_preserve_dtypes(net.ward, dtypes)
return index