Skip to content

Commit bbaf7c5

Browse files
committed
Move tests into class
Signed-off-by: Thijs Baaijen <[email protected]>
1 parent 49c1d95 commit bbaf7c5

File tree

2 files changed

+451
-435
lines changed

2 files changed

+451
-435
lines changed
Lines changed: 293 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,293 @@
1+
# SPDX-FileCopyrightText: Contributors to the Power Grid Model project <[email protected]>
2+
#
3+
# SPDX-License-Identifier: MPL-2.0
4+
5+
import pytest
6+
from power_grid_model import BranchSide, LoadGenType, WindingType
7+
8+
from power_grid_model_ds import Grid
9+
from power_grid_model_ds._core.model.arrays import (
10+
LineArray,
11+
LinkArray,
12+
NodeArray,
13+
SourceArray,
14+
SymLoadArray,
15+
ThreeWindingTransformerArray,
16+
TransformerArray,
17+
TransformerTapRegulatorArray,
18+
)
19+
20+
21+
@pytest.fixture
22+
def simple_loadflow_grid(grid: Grid) -> Grid:
23+
nodes = NodeArray.zeros(2)
24+
nodes.id = [0, 1]
25+
nodes.u_rated = [10_500] * 2
26+
27+
lines = LineArray.zeros(1)
28+
lines.id = [2]
29+
lines.from_node = [0]
30+
lines.to_node = [1]
31+
lines.from_status = [1]
32+
lines.to_status = [1]
33+
lines.r1 = [0.1]
34+
lines.x1 = [0.01]
35+
36+
sources = SourceArray.zeros(1)
37+
sources.id = [3]
38+
sources.node = [0]
39+
sources.status = [1]
40+
sources.u_ref = [1]
41+
42+
loads = SymLoadArray.zeros(1)
43+
loads.id = [4]
44+
loads.node = [1]
45+
loads.status = [1]
46+
loads.type = [LoadGenType.const_power]
47+
loads.p_specified = [250_000]
48+
loads.q_specified = [50_000]
49+
50+
grid.append(nodes)
51+
grid.append(lines)
52+
grid.append(sources)
53+
grid.append(loads)
54+
return grid
55+
56+
57+
@pytest.fixture
58+
def loadflow_grid_with_transformer(grid: Grid) -> Grid:
59+
nodes = NodeArray.zeros(3)
60+
nodes.id = [0, 1, 2]
61+
nodes.u_rated = [10_500] * 2 + [3_000]
62+
63+
lines = LineArray.zeros(1)
64+
lines.id = 3
65+
lines.from_node = 0
66+
lines.to_node = 1
67+
lines.from_status = 1
68+
lines.to_status = 1
69+
lines.r1 = 0.1
70+
lines.x1 = 0.01
71+
72+
sources = SourceArray.zeros(1)
73+
sources.id = 4
74+
sources.node = 0
75+
sources.status = 1
76+
sources.u_ref = 1
77+
78+
loads = SymLoadArray.zeros(2)
79+
loads.id = [5, 6]
80+
loads.node = [1, 2]
81+
loads.status = [1, 1]
82+
loads.p_specified = [25_000] * 2
83+
loads.q_specified = [5_000] * 2
84+
85+
transformers = TransformerArray(
86+
id=[7],
87+
from_node=[1],
88+
to_node=[2],
89+
from_status=[1],
90+
to_status=[1],
91+
u1=[10_500],
92+
u2=[3_000],
93+
sn=[30e6],
94+
clock=[12],
95+
tap_size=[2.5e3],
96+
uk=[0.203],
97+
pk=[100e3],
98+
i0=[0.0],
99+
p0=[0.0],
100+
winding_from=[WindingType.wye.value],
101+
winding_to=[WindingType.wye.value],
102+
tap_side=[BranchSide.from_side.value],
103+
tap_pos=[0],
104+
tap_min=[-11],
105+
tap_max=[9],
106+
tap_nom=[0],
107+
)
108+
109+
grid.append(nodes)
110+
grid.append(lines)
111+
grid.append(sources)
112+
grid.append(loads)
113+
grid.append(transformers)
114+
115+
return grid
116+
117+
118+
@pytest.fixture
119+
def grid_with_three_winding_transformer(grid: Grid) -> Grid:
120+
nodes = NodeArray.zeros(3)
121+
nodes.id = [0, 1, 2]
122+
nodes.u_rated = [150_000, 20_000, 10_000]
123+
124+
sources = SourceArray.zeros(1)
125+
sources.id = 4
126+
sources.node = 0
127+
sources.status = 1
128+
sources.u_ref = 1
129+
130+
loads = SymLoadArray.zeros(2)
131+
loads.id = [5, 6]
132+
loads.node = [1, 2]
133+
loads.status = [1, 1]
134+
loads.p_specified = [25_000] * 2
135+
loads.q_specified = [5_000] * 2
136+
137+
three_winding_transformer = ThreeWindingTransformerArray.empty(1)
138+
three_winding_transformer.id = [7]
139+
three_winding_transformer.node_1 = [0]
140+
three_winding_transformer.node_2 = [1]
141+
three_winding_transformer.node_3 = [2]
142+
three_winding_transformer.status_1 = [1]
143+
three_winding_transformer.status_2 = [1]
144+
three_winding_transformer.status_3 = [1]
145+
three_winding_transformer.u1 = [150_000]
146+
three_winding_transformer.u2 = [20_000]
147+
three_winding_transformer.u3 = [10_000]
148+
three_winding_transformer.sn_1 = [1e5]
149+
three_winding_transformer.sn_2 = [1e5]
150+
three_winding_transformer.sn_3 = [1e5]
151+
three_winding_transformer.uk_12 = [0.09]
152+
three_winding_transformer.uk_13 = [0.06]
153+
three_winding_transformer.uk_23 = [0.06]
154+
three_winding_transformer.pk_12 = [1e3]
155+
three_winding_transformer.pk_13 = [1e3]
156+
three_winding_transformer.pk_23 = [1e3]
157+
three_winding_transformer.i0 = [0]
158+
three_winding_transformer.p0 = [0]
159+
three_winding_transformer.winding_1 = [2]
160+
three_winding_transformer.winding_2 = [1]
161+
three_winding_transformer.winding_3 = [1]
162+
three_winding_transformer.clock_12 = [5]
163+
three_winding_transformer.clock_13 = [5]
164+
three_winding_transformer.tap_side = [0]
165+
three_winding_transformer.tap_pos = [0]
166+
three_winding_transformer.tap_min = [-10]
167+
three_winding_transformer.tap_max = [10]
168+
three_winding_transformer.tap_nom = [0]
169+
three_winding_transformer.tap_size = [1380]
170+
171+
grid.append(nodes)
172+
grid.append(sources)
173+
grid.append(loads)
174+
grid.append(three_winding_transformer)
175+
return grid
176+
177+
178+
@pytest.fixture
179+
def grid_with_link(grid: Grid) -> Grid:
180+
nodes = NodeArray.zeros(2)
181+
nodes.id = [0, 1]
182+
nodes.u_rated = [10_500] * 2
183+
184+
lines = LinkArray.zeros(1)
185+
lines.id = 2
186+
lines.from_node = 0
187+
lines.to_node = 1
188+
lines.from_status = 1
189+
lines.to_status = 1
190+
191+
sources = SourceArray.zeros(1)
192+
sources.id = 3
193+
sources.node = 0
194+
sources.status = 1
195+
sources.u_ref = 1
196+
197+
loads = SymLoadArray.zeros(1)
198+
loads.id = 4
199+
loads.node = 1
200+
loads.status = 1
201+
loads.type = [LoadGenType.const_power]
202+
loads.p_specified = [250_000]
203+
loads.q_specified = [50_000]
204+
205+
grid.append(nodes)
206+
grid.append(lines)
207+
grid.append(sources)
208+
grid.append(loads)
209+
return grid
210+
211+
212+
@pytest.fixture
213+
def grid_with_tap_regulator(grid: Grid) -> Grid:
214+
"""
215+
Network:
216+
(tap_side) (control side)
217+
source_1 --- node_2 --- transformer_5 --- node_3 --- line_6 --- node_4 --- load_7
218+
| |
219+
transformer_tap_regulator_8 <--------/ (control voltage)
220+
"""
221+
# source
222+
sources = SourceArray.zeros(1)
223+
sources.id = [1]
224+
sources.node = [2]
225+
sources.status = [1]
226+
sources.u_ref = [1.0]
227+
grid.append(sources)
228+
229+
# node
230+
nodes = NodeArray.zeros(3)
231+
nodes.id = [2, 3, 4]
232+
nodes.u_rated = [1e4, 4e2, 4e2]
233+
grid.append(nodes)
234+
235+
# transformer
236+
transformers = TransformerArray.zeros(1)
237+
transformers.id = [5]
238+
transformers.from_node = [2]
239+
transformers.to_node = [3]
240+
transformers.from_status = [1]
241+
transformers.to_status = [1]
242+
transformers.u1 = [1e4]
243+
transformers.u2 = [4e2]
244+
transformers.sn = [1e5]
245+
transformers.uk = [0.1]
246+
transformers.pk = [1e3]
247+
transformers.i0 = [1.0e-6]
248+
transformers.p0 = [0.1]
249+
transformers.winding_from = [2]
250+
transformers.winding_to = [1]
251+
transformers.clock = [5]
252+
transformers.tap_side = [0]
253+
transformers.tap_pos = [3]
254+
transformers.tap_min = [-11]
255+
transformers.tap_max = [9]
256+
transformers.tap_size = [100]
257+
grid.append(transformers)
258+
259+
# line
260+
lines = LineArray.zeros(1)
261+
lines.id = [6]
262+
lines.from_node = [3]
263+
lines.to_node = [4]
264+
lines.from_status = [1]
265+
lines.to_status = [1]
266+
lines.r1 = [10.0]
267+
lines.x1 = [0.0]
268+
lines.c1 = [0.0]
269+
lines.tan1 = [0.0]
270+
grid.append(lines)
271+
272+
# load
273+
sym_loads = SymLoadArray.zeros(1)
274+
sym_loads.id = [7]
275+
sym_loads.node = [4]
276+
sym_loads.status = [1]
277+
sym_loads.type = [LoadGenType.const_power]
278+
sym_loads.p_specified = [1e3]
279+
sym_loads.q_specified = [5e3]
280+
grid.append(sym_loads)
281+
282+
# transformer tap regulator
283+
transformer_tap_regulators = TransformerTapRegulatorArray.zeros(1)
284+
transformer_tap_regulators.id = [8]
285+
transformer_tap_regulators.regulated_object = [5]
286+
transformer_tap_regulators.status = [1]
287+
transformer_tap_regulators.control_side = [BranchSide.to_side.value]
288+
transformer_tap_regulators.u_set = [400.0]
289+
transformer_tap_regulators.u_band = [20.0]
290+
transformer_tap_regulators.line_drop_compensation_r = [0.0]
291+
transformer_tap_regulators.line_drop_compensation_x = [0.0]
292+
grid.append(transformer_tap_regulators)
293+
return grid

0 commit comments

Comments
 (0)