Short-circuit calculations¶
Let’s see how we can make a short-circuit calculation.
We will start by creating a simple network composed of two LV lines. As usual with short-circuit calculations, we won’t add any loads.
Note
While impedance and current loads could technically be added to the network, it is not possible to add a power load
on the same bus as the one we want to compute the short-circuit on. This is because having I = (S/U)*
with U=0
is impossible.
>>> import numpy as np
... import roseau.load_flow as rlf
>>> def create_network():
... # Create three buses
... source_bus = rlf.Bus(id="sb", phases="abcn")
... bus1 = rlf.Bus(id="b1", phases="abcn")
... bus2 = rlf.Bus(id="b2", phases="abcn")
... # Define the reference of potentials
... ground = rlf.Ground(id="gnd")
... pref = rlf.PotentialRef(id="pref", element=ground)
... ground.connect(bus=source_bus)
... # Create a LV source at the first bus
... un = 400 / np.sqrt(3)
... vs = rlf.VoltageSource(id="vs", bus=source_bus, phases="abcn", voltages=un)
... # Add LV lines
... lp1 = rlf.LineParameters.from_geometry(
... "U_AL_240",
... line_type=rlf.LineType.UNDERGROUND,
... conductor_type=rlf.ConductorType.AL,
... insulator_type=rlf.InsulatorType.PVC,
... section=240,
... section_neutral=120,
... height=rlf.Q_(-1.5, "m"),
... external_diameter=rlf.Q_(50, "mm"),
... )
... line1 = rlf.Line(
... id="line1", bus1=source_bus, bus2=bus1, parameters=lp1, length=1.0, ground=ground
... )
... lp2 = rlf.LineParameters.from_geometry(
... "U_AL_150",
... line_type=rlf.LineType.UNDERGROUND,
... conductor_type=rlf.ConductorType.AL,
... insulator_type=rlf.InsulatorType.PVC,
... section=150,
... section_neutral=150,
... height=rlf.Q_(-1.5, "m"),
... external_diameter=rlf.Q_(40, "mm"),
... )
... line2 = rlf.Line(
... id="line2", bus1=bus1, bus2=bus2, parameters=lp2, length=2.0, ground=ground
... )
... # Create network
... en = rlf.ElectricalNetwork.from_element(source_bus)
... return en
...
>>> # Create network
... en = create_network()
Phase-to-phase¶
We can now add a short-circuit. Let’s first create a phase-to-phase short-circuit:
>>> en.buses["b2"].add_short_circuit("a", "b")
Let’s run the load flow, and get the current results.
Note
If you get an error saying
roseau.load_flow.RoseauLoadFlowException: The license is not valid. Please use the activate_license(key="...")
,
make sure you follow the instructions in Solving a load flow.
Note
All the following tables are rounded to 2 decimals to be properly displayed.
>>> en.solve_load_flow()
(1, 2.5934809855243657e-13)
>>> en.res_lines
line_id |
phase |
current1 |
current2 |
power1 |
power2 |
potential1 |
potential2 |
series_losses |
series_current |
max_current |
violated |
---|---|---|---|---|---|---|---|---|---|---|---|
line1 |
a |
374.19+65.47j |
-374.2-65.22j |
86414.44-15119.6j |
-69427.92+23726.69j |
230.94+0j |
190.79-30.15j |
16992.62+8659.77j |
374.2+65.33j |
nan |
<NA> |
line1 |
b |
-373.43-65.15j |
373.71+64.99j |
56149.99+67164.05j |
-39212.61-58608.72j |
-115.47-200j |
-75.38-169.94j |
16933.63+8622.68j |
-373.58-65.05j |
nan |
<NA> |
line1 |
c |
-0.88-0.32j |
0.61+0.24j |
37.17-214.38j |
-22.32+155.56j |
-115.47+200j |
-116.82+208.22j |
1.32+6.55j |
-0.75-0.28j |
nan |
<NA> |
line1 |
n |
0.16-0.01j |
-0.13-0j |
0j |
-0.17+1.03j |
0j |
1.38-8.15j |
-0.24+1.15j |
0.14-0.01j |
nan |
<NA> |
line2 |
a |
374.2+65.22j |
-374.11-64.94j |
69427.92-23726.69j |
-15076.23+41188.79j |
190.79-30.15j |
57.67-100.09j |
54358.19+17519.35j |
374.2+64.98j |
nan |
<NA> |
line2 |
b |
-373.71-64.99j |
374.11+64.94j |
39212.61+58608.72j |
15076.23-41188.79j |
-75.38-169.94j |
57.67-100.09j |
54284.8+17490.99j |
-373.95-64.86j |
nan |
<NA> |
line2 |
c |
-0.61-0.24j |
0j |
22.32-155.56j |
-0-0j |
-116.82+208.22j |
-119.55+224.61j |
1.44+5.44j |
-0.31-0.14j |
nan |
<NA> |
line2 |
n |
0.13+0j |
0j |
0.17-1.03j |
-0j |
1.38-8.15j |
4.18-24.45j |
0.16+1.12j |
0.06+0.02j |
nan |
<NA> |
Looking at the line results of the second bus of the line line2
, which is bus2
where we added the short-circuit,
one can notice that:
the potentials of phases “a” and “b” are equal;
the currents and powers in phases “a” and “b” are equal with opposite signs, i.e. the sum of the currents is zero;
the currents and powers in these two phases are very high;
which is expected from a short-circuit.
Multi-phase¶
It is possible to create short-circuits between several phases, not only two. Let’s first remove the existing short-circuit then create a new one between phases “a”, “b”, and “c”.
>>> en = create_network()
>>> en.buses["b2"].add_short_circuit("a", "b", "c")
>>> en.solve_load_flow()
(1, 3.979039320256561e-13)
>>> en.res_lines
line_id |
phase |
current1 |
current2 |
power1 |
power2 |
potential1 |
potential2 |
series_losses |
series_current |
max_current |
violated |
---|---|---|---|---|---|---|---|---|---|---|---|
line1 |
a |
364.42-152.4j |
-364.45+152.64j |
84159.75+35195.32j |
-62323.26-24107.78j |
230.94+0j |
169.06-4.66j |
21841.76+11136.22j |
364.44-152.54j |
nan |
<NA> |
line1 |
b |
-329.25-298.27j |
329.5+298.09j |
97671.94+31407.98j |
-74421.29-19633.88j |
-115.47-200j |
-94.56-145.13j |
23247.19+11837.86j |
-329.39-298.17j |
nan |
<NA> |
line1 |
c |
-35.27+450.66j |
35.03-450.73j |
94203.88+44984.19j |
-73584.22-31005.25j |
-115.47+200j |
-80.99+156.96j |
20608.18+14029.15j |
-35.13+450.7j |
nan |
<NA> |
line1 |
n |
0.11-0.01j |
-0.08-0.01j |
0j |
-0.5+0.64j |
0j |
6.47-7.18j |
-0.62+0.71j |
0.1+0j |
nan |
<NA> |
line2 |
a |
364.45-152.64j |
-364.48+152.85j |
62323.26+24107.78j |
3461.67-1626.3j |
169.06-4.66j |
-6.49+7.18j |
65790.08+22519.24j |
364.47-152.86j |
nan |
<NA> |
line2 |
b |
-329.5-298.09j |
329.7+297.94j |
74421.29+19633.88j |
1.41+4300.23j |
-94.56-145.13j |
-6.49+7.18j |
74420.66+23978.08j |
-329.71-297.95j |
nan |
<NA> |
line2 |
c |
-35.03+450.73j |
34.78-450.79j |
73584.22+31005.25j |
-3463.08-2673.93j |
-80.99+156.96j |
-6.49+7.18j |
70110.99+28372.86j |
-34.79+450.78j |
nan |
<NA> |
line2 |
n |
0.08+0.01j |
0j |
0.5-0.64j |
-0-0j |
6.47-7.18j |
19.44-21.56j |
-0.05+0.77j |
0.03+0.02j |
nan |
<NA> |
Now the potentials of the three phases are equal and the currents and powers add up to zero at the bus where the short-circuit is applied.
Phase-to-ground¶
Phase-to-ground short-circuits are also possible. Let’s remove the existing short-circuit and create a new one between phase “a” and ground.
>>> en = create_network()
>>> # ground MUST be passed as a keyword argument
... en.buses["b2"].add_short_circuit("a", ground=en.grounds["gnd"])
>>> en.solve_load_flow()
(1, 4.985456492079265e-13)
>>> en.res_lines
line_id |
phase |
current1 |
current2 |
power1 |
power2 |
potential1 |
potential2 |
series_losses |
series_current |
max_current |
violated |
---|---|---|---|---|---|---|---|---|---|---|---|
line1 |
a |
95.83-188.13j |
-95.86+188.37j |
22130.38+43446.19j |
-16871.5-29433.8j |
230.94-0j |
160.32-7.98j |
5265.84+14061.06j |
95.84-188.26j |
nan |
<NA> |
line1 |
b |
0.96-0.74j |
-0.65+0.52j |
36.74-277.43j |
-10.48+232.63j |
-115.47-200j |
-163.66-224.36j |
23.55+50.71j |
0.81-0.64j |
nan |
<NA> |
line1 |
c |
-0.81-0.43j |
0.55+0.33j |
8.47-212.03j |
-29.32+150.27j |
-115.47+200j |
-159.37+177.78j |
-38.38+1.87j |
-0.68-0.39j |
nan |
<NA> |
line1 |
n |
0.24-0.25j |
-0.21+0.22j |
0j |
4.52+15.58j |
0j |
-48.11-24.34j |
5.05+16.93j |
0.23-0.24j |
nan |
<NA> |
line2 |
a |
95.86-188.37j |
-95.99+188.69j |
16871.5+29433.8j |
-0j |
160.32-7.98j |
0j |
16880.47+29471.2j |
95.9-188.61j |
nan |
<NA> |
line2 |
b |
0.65-0.52j |
0j |
10.48-232.63j |
-0-0j |
-163.66-224.36j |
-265.1-275.72j |
20.23+48.58j |
0.35-0.3j |
nan |
<NA> |
line2 |
c |
-0.55-0.33j |
0j |
29.32-150.27j |
-0-0j |
-159.37+177.78j |
-252.37+130.63j |
-34.05+6.73j |
-0.26-0.21j |
nan |
<NA> |
line2 |
n |
0.21-0.22j |
0j |
-4.52-15.58j |
-0j |
-48.11-24.34j |
-149.45-75.72j |
5.24+21.59j |
0.13-0.15j |
nan |
<NA> |
>>> en.res_grounds
ground_id |
potential |
---|---|
gnd |
0+0j |
Here the potential at phase “a” of bus b2
is zero, equal to the ground potential. The currents in the
other phases are also zero indicating that the current of phase “a” went through the ground.
Additional notes¶
The library will prevent the user from making mistakes, for example when trying to add a power load with the short-circuit, or when forgetting parameters.
>>> try:
... load = rlf.PowerLoad("load", bus=en.buses["b2"], powers=[10, 10, 10])
... except RoseauLoadFlowException as e:
... print(e)
...
The power load 'load' is connected on bus 'b2' that already has a short-circuit.
It makes the short-circuit calculation impossible. [bad_short_circuit]
>>> try:
... en.buses["b2"].add_short_circuit("a")
... except RoseauLoadFlowException as e:
... print(e)
...
For the short-circuit on bus 'b2', expected at least two phases or a phase and a ground.
Only phase 'a' is given. [bad_phase]