Power loads (P)

They represent loads for which the power is considered constant, i.e. it is independent of the voltage.

ZIP equation: \(S = s \times V^0 + 0 \times V^1 + 0 \times V^2 \implies S = \mathrm{constant}\)

Equations

The equations are the following (star loads):

\[\begin{split}\left\{ \begin{aligned} \underline{I_{\mathrm{abc}}} &= \left(\frac{\underline{S_{\mathrm{abc}}}}{\underline{V_{\mathrm{abc}}} -\underline{V_{\mathrm{n}}}}\right)^{\star} \\ \underline{I_{\mathrm{n}}} &= -\sum_{p\in\{\mathrm{a},\mathrm{b},\mathrm{c}\}}\underline{I_{p}} \end{aligned} \right.\end{split}\]

And the following (delta loads):

\[\begin{split}\left\{ \begin{aligned} \underline{I_{\mathrm{ab}}} &= \left(\frac{\underline{S_{\mathrm{ab}}}}{\underline{V_{\mathrm{a}}}-\underline {V_{\mathrm{b}}}}\right)^{\star} \\ \underline{I_{\mathrm{bc}}} &= \left(\frac{\underline{S_{\mathrm{bc}}}}{\underline{V_{\mathrm{b}}}-\underline {V_{\mathrm{c}}}}\right)^{\star} \\ \underline{I_{\mathrm{ca}}} &= \left(\frac{\underline{S_{\mathrm{ca}}}}{\underline{V_{\mathrm{c}}}-\underline {V_{\mathrm{a}}}}\right)^{\star} \end{aligned} \right.\end{split}\]

Example

import functools as ft
import numpy as np
import roseau.load_flow as rlf

# Two buses
bus1 = rlf.Bus(id="bus1", phases="abcn")
bus2 = rlf.Bus(id="bus2", phases="abcn")

# A line
lp = rlf.LineParameters(id="lp", z_line=rlf.Q_(0.35 * np.eye(4), "ohm/km"))
line = rlf.Line(id="line", bus1=bus1, bus2=bus2, parameters=lp, length=rlf.Q_(1, "km"))

# A voltage source on the first bus
un = 400 / np.sqrt(3)
vs = rlf.VoltageSource(id="source", bus=bus1, voltages=rlf.Q_(un, "V"))

# The potential of the neutral of bus1 is fixed at 0V
pref = rlf.PotentialRef(id="pref", element=bus1)

# A balanced constant-power load on the second bus
load = rlf.PowerLoad(id="load", bus=bus2, powers=rlf.Q_((1000 - 300j), "VA"))

# Create a network and solve a load flow
en = rlf.ElectricalNetwork.from_element(bus1)
en.solve_load_flow()

# Get the powers of the loads in the network
en.res_loads["power"]
# |               |                      power |
# |:--------------|---------------------------:|
# | ('load', 'a') | 1000-300j                  |
# | ('load', 'b') | 1000-300j                  |
# | ('load', 'c') | 1000-300j                  |
# | ('load', 'n') | -5.57569e-31+ 2.25385e-32j |

# Get the voltages of the network
en.res_buses_voltages.transform([np.abs, ft.partial(np.angle, deg=True)])
# |                |   ('voltage', 'absolute') |   ('voltage', 'angle') |
# |:---------------|--------------------------:|-----------------------:|
# | ('bus1', 'an') |                   230.94  |            9.69325e-22 |
# | ('bus1', 'bn') |                   230.94  |         -120           |
# | ('bus1', 'cn') |                   230.94  |          120           |
# | ('bus2', 'an') |                   229.414 |           -0.113552    |
# | ('bus2', 'bn') |                   229.414 |         -120.114       |
# | ('bus2', 'cn') |                   229.414 |          119.886       |

# Create an unbalanced load with three different power values
load.powers = rlf.Q_(np.array([5.0, 2.5, 0]) * (1 - 0.3j), "kVA")
en.solve_load_flow()

# Get the powers of the loads in the network, the neutral power is no longer zero
en.res_loads["power"]
# |               |                  power |
# |:--------------|-----------------------:|
# | ('load', 'a') | 5154.28 - 1581.93j     |
# | ('load', 'b') | 2494.65 - 668.07j      |
# | ('load', 'c') |    0                   |
# | ('load', 'n') | -148.93 + 3.78664e-14j |

# Get the voltages of the network, bus2 voltages are no longer equal
en.res_buses_voltages.transform([np.abs, ft.partial(np.angle, deg=True)])
# |                |   ('voltage', 'absolute') |   ('voltage', 'angle') |
# |:---------------|--------------------------:|-----------------------:|
# | ('bus1', 'an') |                   230.94  |            4.05321e-24 |
# | ('bus1', 'bn') |                   230.94  |         -120           |
# | ('bus1', 'cn') |                   230.94  |          120           |
# | ('bus2', 'an') |                   215.746 |           -0.253646    |
# | ('bus2', 'bn') |                   229.513 |         -121.963       |
# | ('bus2', 'cn') |                   235.788 |          121.314       |