Skip to content

Commit 74d2819

Browse files
committed
Refactor loadflow tests
Signed-off-by: Thijs Baaijen <[email protected]>
1 parent 634b221 commit 74d2819

File tree

2 files changed

+276
-265
lines changed

2 files changed

+276
-265
lines changed

tests/integration/loadflow/conftest.py

Lines changed: 188 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,16 @@
22
from power_grid_model import BranchSide, LoadGenType, WindingType
33

44
from power_grid_model_ds import Grid
5-
from power_grid_model_ds._core.model.arrays import LineArray, NodeArray, SourceArray, SymLoadArray, TransformerArray
5+
from power_grid_model_ds._core.model.arrays import (
6+
LineArray,
7+
LinkArray,
8+
NodeArray,
9+
SourceArray,
10+
SymLoadArray,
11+
ThreeWindingTransformerArray,
12+
TransformerArray,
13+
TransformerTapRegulatorArray,
14+
)
615

716

817
@pytest.fixture
@@ -100,3 +109,181 @@ def loadflow_grid_with_transformer(grid: Grid) -> Grid:
100109
grid.append(transformers)
101110

102111
return grid
112+
113+
114+
@pytest.fixture
115+
def grid_with_three_winding_transformer(grid: Grid) -> Grid:
116+
nodes = NodeArray.zeros(3)
117+
nodes.id = [0, 1, 2]
118+
nodes.u_rated = [150_000, 20_000, 10_000]
119+
120+
sources = SourceArray.zeros(1)
121+
sources.id = 4
122+
sources.node = 0
123+
sources.status = 1
124+
sources.u_ref = 1
125+
126+
loads = SymLoadArray.zeros(2)
127+
loads.id = [5, 6]
128+
loads.node = [1, 2]
129+
loads.status = [1, 1]
130+
loads.p_specified = [25_000] * 2
131+
loads.q_specified = [5_000] * 2
132+
133+
three_winding_transformer = ThreeWindingTransformerArray.empty(1)
134+
three_winding_transformer.id = [7]
135+
three_winding_transformer.node_1 = [0]
136+
three_winding_transformer.node_2 = [1]
137+
three_winding_transformer.node_3 = [2]
138+
three_winding_transformer.status_1 = [1]
139+
three_winding_transformer.status_2 = [1]
140+
three_winding_transformer.status_3 = [1]
141+
three_winding_transformer.u1 = [150_000]
142+
three_winding_transformer.u2 = [20_000]
143+
three_winding_transformer.u3 = [10_000]
144+
three_winding_transformer.sn_1 = [1e5]
145+
three_winding_transformer.sn_2 = [1e5]
146+
three_winding_transformer.sn_3 = [1e5]
147+
three_winding_transformer.uk_12 = [0.09]
148+
three_winding_transformer.uk_13 = [0.06]
149+
three_winding_transformer.uk_23 = [0.06]
150+
three_winding_transformer.pk_12 = [1e3]
151+
three_winding_transformer.pk_13 = [1e3]
152+
three_winding_transformer.pk_23 = [1e3]
153+
three_winding_transformer.i0 = [0]
154+
three_winding_transformer.p0 = [0]
155+
three_winding_transformer.winding_1 = [2]
156+
three_winding_transformer.winding_2 = [1]
157+
three_winding_transformer.winding_3 = [1]
158+
three_winding_transformer.clock_12 = [5]
159+
three_winding_transformer.clock_13 = [5]
160+
three_winding_transformer.tap_side = [0]
161+
three_winding_transformer.tap_pos = [0]
162+
three_winding_transformer.tap_min = [-10]
163+
three_winding_transformer.tap_max = [10]
164+
three_winding_transformer.tap_nom = [0]
165+
three_winding_transformer.tap_size = [1380]
166+
167+
grid.append(nodes)
168+
grid.append(sources)
169+
grid.append(loads)
170+
grid.append(three_winding_transformer)
171+
return grid
172+
173+
174+
@pytest.fixture
175+
def grid_with_link(grid: Grid) -> Grid:
176+
nodes = NodeArray.zeros(2)
177+
nodes.id = [0, 1]
178+
nodes.u_rated = [10_500] * 2
179+
180+
lines = LinkArray.zeros(1)
181+
lines.id = 2
182+
lines.from_node = 0
183+
lines.to_node = 1
184+
lines.from_status = 1
185+
lines.to_status = 1
186+
187+
sources = SourceArray.zeros(1)
188+
sources.id = 3
189+
sources.node = 0
190+
sources.status = 1
191+
sources.u_ref = 1
192+
193+
loads = SymLoadArray.zeros(1)
194+
loads.id = 4
195+
loads.node = 1
196+
loads.status = 1
197+
loads.type = [LoadGenType.const_power]
198+
loads.p_specified = [250_000]
199+
loads.q_specified = [50_000]
200+
201+
grid.append(nodes)
202+
grid.append(lines)
203+
grid.append(sources)
204+
grid.append(loads)
205+
return grid
206+
207+
208+
@pytest.fixture
209+
def grid_with_tap_regulator(grid: Grid) -> Grid:
210+
"""
211+
Network:
212+
(tap_side) (control side)
213+
source_1 --- node_2 --- transformer_5 --- node_3 --- line_6 --- node_4 --- load_7
214+
| |
215+
transformer_tap_regulator_8 <--------/ (control voltage)
216+
"""
217+
# source
218+
sources = SourceArray.zeros(1)
219+
sources.id = [1]
220+
sources.node = [2]
221+
sources.status = [1]
222+
sources.u_ref = [1.0]
223+
grid.append(sources)
224+
225+
# node
226+
nodes = NodeArray.zeros(3)
227+
nodes.id = [2, 3, 4]
228+
nodes.u_rated = [1e4, 4e2, 4e2]
229+
grid.append(nodes)
230+
231+
# transformer
232+
transformers = TransformerArray.zeros(1)
233+
transformers.id = [5]
234+
transformers.from_node = [2]
235+
transformers.to_node = [3]
236+
transformers.from_status = [1]
237+
transformers.to_status = [1]
238+
transformers.u1 = [1e4]
239+
transformers.u2 = [4e2]
240+
transformers.sn = [1e5]
241+
transformers.uk = [0.1]
242+
transformers.pk = [1e3]
243+
transformers.i0 = [1.0e-6]
244+
transformers.p0 = [0.1]
245+
transformers.winding_from = [2]
246+
transformers.winding_to = [1]
247+
transformers.clock = [5]
248+
transformers.tap_side = [0]
249+
transformers.tap_pos = [3]
250+
transformers.tap_min = [-11]
251+
transformers.tap_max = [9]
252+
transformers.tap_size = [100]
253+
grid.append(transformers)
254+
255+
# line
256+
lines = LineArray.zeros(1)
257+
lines.id = [6]
258+
lines.from_node = [3]
259+
lines.to_node = [4]
260+
lines.from_status = [1]
261+
lines.to_status = [1]
262+
lines.r1 = [10.0]
263+
lines.x1 = [0.0]
264+
lines.c1 = [0.0]
265+
lines.tan1 = [0.0]
266+
grid.append(lines)
267+
268+
# load
269+
sym_loads = SymLoadArray.zeros(1)
270+
sym_loads.id = [7]
271+
sym_loads.node = [4]
272+
sym_loads.status = [1]
273+
sym_loads.type = [LoadGenType.const_power]
274+
sym_loads.p_specified = [1e3]
275+
sym_loads.q_specified = [5e3]
276+
grid.append(sym_loads)
277+
278+
# transformer tap regulator
279+
transformer_tap_regulators = TransformerTapRegulatorArray.zeros(1)
280+
transformer_tap_regulators.id = [8]
281+
transformer_tap_regulators.regulated_object = [5]
282+
transformer_tap_regulators.status = [1]
283+
transformer_tap_regulators.control_side = [BranchSide.to_side.value]
284+
transformer_tap_regulators.u_set = [400.0]
285+
transformer_tap_regulators.u_band = [20.0]
286+
transformer_tap_regulators.line_drop_compensation_r = [0.0]
287+
transformer_tap_regulators.line_drop_compensation_x = [0.0]
288+
grid.append(transformer_tap_regulators)
289+
return grid

0 commit comments

Comments
 (0)