@@ -184,6 +184,67 @@ TEST_CASE("Test Transformer ranking") {
184
184
CHECK_NOTHROW (pgm_tap::build_transformer_graph (get_state (6 , 2 , 1 , 4 , 5 )));
185
185
}
186
186
187
+ SUBCASE (" Process edge weights" ) {
188
+ using vertex_iterator = boost::graph_traits<pgm_tap::TransformerGraph>::vertex_iterator;
189
+
190
+ // Dummy graph
191
+ pgm_tap::TrafoGraphEdges const edge_array = {{0 , 1 }, {0 , 2 }, {2 , 3 }};
192
+ pgm_tap::TrafoGraphEdgeProperties const edge_prop{{{0 , 1 }, 1 }, {{-1 , -1 }, 0 }, {{2 , 3 }, 1 }};
193
+ std::vector<pgm_tap::TrafoGraphVertex> vertex_props{{true }, {false }, {false }, {false }};
194
+
195
+ pgm_tap::TransformerGraph g{boost::edges_are_unsorted_multi_pass, edge_array.cbegin (), edge_array.cend (),
196
+ edge_prop.cbegin (), 4 };
197
+
198
+ // Vertex properties can not be set during graph creation
199
+ vertex_iterator vi;
200
+ vertex_iterator vi_end;
201
+ for (boost::tie (vi, vi_end) = vertices (g); vi != vi_end; ++vi) {
202
+ g[*vi].is_source = vertex_props[*vi].is_source ;
203
+ }
204
+
205
+ pgm_tap::TrafoGraphEdgeProperties const regulated_edge_weights = get_edge_weights (g);
206
+ pgm_tap::TrafoGraphEdgeProperties const ref_regulated_edge_weights{{{0 , 1 }, 1 }, {{2 , 3 }, 1 }};
207
+ CHECK (regulated_edge_weights == ref_regulated_edge_weights);
208
+ }
209
+
210
+ SUBCASE (" Sorting transformer edges" ) {
211
+ pgm_tap::TrafoGraphEdgeProperties const trafoList{
212
+ {Idx2D{1 , 1 }, pgm_tap::infty}, {Idx2D{1 , 2 }, 5 }, {Idx2D{1 , 3 }, 4 }, {Idx2D{2 , 1 }, 4 }};
213
+
214
+ pgm_tap::RankedTransformerGroups const referenceList{{Idx2D{1 , 3 }, Idx2D{2 , 1 }}, {Idx2D{1 , 2 }}, {Idx2D{1 , 1 }}};
215
+
216
+ pgm_tap::RankedTransformerGroups const sortedTrafoList = pgm_tap::rank_transformers (trafoList);
217
+ REQUIRE (sortedTrafoList.size () == referenceList.size ());
218
+ for (Idx idx : boost::counting_range (Idx{0 }, static_cast <Idx>(sortedTrafoList.size ()))) {
219
+ CAPTURE (idx);
220
+ CHECK (sortedTrafoList[idx] == referenceList[idx]);
221
+ }
222
+ }
223
+
224
+ SUBCASE (" Multiple source grid" ) {
225
+ using vertex_iterator = boost::graph_traits<pgm_tap::TransformerGraph>::vertex_iterator;
226
+
227
+ // Grid with multiple sources and symetric graph
228
+ pgm_tap::TrafoGraphEdges const edge_array = {{0 , 1 }, {1 , 2 }, {3 , 2 }, {4 , 3 }};
229
+ pgm_tap::TrafoGraphEdgeProperties const edge_prop{{{0 , 1 }, 1 }, {{1 , 2 }, 1 }, {{2 , 3 }, 1 }, {{3 , 4 }, 1 }};
230
+ std::vector<pgm_tap::TrafoGraphVertex> vertex_props{{true }, {false }, {false }, {false }, {true }};
231
+
232
+ pgm_tap::TransformerGraph g{boost::edges_are_unsorted_multi_pass, edge_array.cbegin (), edge_array.cend (),
233
+ edge_prop.cbegin (), 5 };
234
+
235
+ // Vertex properties can not be set during graph creation
236
+ vertex_iterator vi;
237
+ vertex_iterator vi_end;
238
+ for (boost::tie (vi, vi_end) = vertices (g); vi != vi_end; ++vi) {
239
+ g[*vi].is_source = vertex_props[*vi].is_source ;
240
+ }
241
+
242
+ pgm_tap::TrafoGraphEdgeProperties const regulated_edge_weights = get_edge_weights (g);
243
+ pgm_tap::TrafoGraphEdgeProperties const ref_regulated_edge_weights{
244
+ {{0 , 1 }, 1 }, {{1 , 2 }, 2 }, {{2 , 3 }, 2 }, {{3 , 4 }, 1 }};
245
+ CHECK (regulated_edge_weights == ref_regulated_edge_weights);
246
+ }
247
+
187
248
SUBCASE (" Full grid 1 - For graph construction steps" ) {
188
249
// =====Test Grid=====
189
250
// ________[0]________
@@ -194,16 +255,20 @@ TEST_CASE("Test Transformer ranking") {
194
255
// | [6] |
195
256
// [3]----------| [8]
196
257
// | |
197
- // L---------------[9]
258
+ // L---------------[9] -----x- [100]
259
+ //
260
+ // [101] ---- [102]
261
+
198
262
TestState state;
199
- std::vector<NodeInput> nodes{{0 , 150e3 }, {1 , 10e3 }, {2 , 10e3 }, {3 , 10e3 }, { 4 , 10e3 },
200
- {5 , 50e3 }, {6 , 10e3 }, {7 , 10e3 }, {8 , 10e3 }, {9 , 10e3 }};
263
+ std::vector<NodeInput> nodes{{0 , 150e3 }, {1 , 10e3 }, {2 , 10e3 }, {3 , 10e3 }, { 4 , 10e3 }, { 5 , 50e3 }, { 6 , 10e3 },
264
+ {7 , 10e3 }, {8 , 10e3 }, {9 , 10e3 }, {100 , 10e3 }, {101 , 10e3 }, { 102 , 10e3 }};
201
265
main_core::add_component<Node>(state, nodes.begin (), nodes.end (), 50.0 );
202
266
203
267
std::vector<TransformerInput> transformers{
204
- get_transformer (11 , 0 , 1 , BranchSide::from), get_transformer (12 , 0 , 1 , BranchSide::from),
205
- get_transformer (13 , 5 , 7 , BranchSide::from), get_transformer (14 , 2 , 3 , BranchSide::from),
206
- get_transformer (15 , 8 , 9 , BranchSide::from)};
268
+ get_transformer (11 , 0 , 1 , BranchSide::from), get_transformer (12 , 0 , 1 , BranchSide::from),
269
+ get_transformer (13 , 5 , 7 , BranchSide::from), get_transformer (14 , 2 , 3 , BranchSide::from),
270
+ get_transformer (15 , 8 , 9 , BranchSide::from), get_transformer (103 , 9 , 100 , BranchSide::from),
271
+ get_transformer (104 , 101 , 102 , BranchSide::from)};
207
272
main_core::add_component<Transformer>(state, transformers.begin (), transformers.end (), 50.0 );
208
273
209
274
std::vector<ThreeWindingTransformerInput> transformers3w{
@@ -238,10 +303,11 @@ TEST_CASE("Test Transformer ranking") {
238
303
{{{3 , 0 }, 1 }, {{3 , 1 }, 1 }, {{3 , 2 }, 1 }, {{3 , 3 }, 1 }, {{3 , 4 }, 1 }});
239
304
expected_edges_prop.insert (expected_edges_prop.end (),
240
305
{{{4 , 0 }, 1 }, {{4 , 0 }, 1 }, {unregulated_idx, 0 }, {unregulated_idx, 0 }});
241
- expected_edges_prop.insert (expected_edges_prop.end (), 10 , {unregulated_idx, 0 });
306
+ expected_edges_prop.insert (expected_edges_prop.end (), 14 , {unregulated_idx, 0 });
242
307
243
308
std::vector<pgm_tap::TrafoGraphVertex> const expected_vertex_props{
244
- {true }, {false }, {false }, {false }, {false }, {false }, {false }, {false }, {false }, {false }};
309
+ {true }, {false }, {false }, {false }, {false }, {false }, {false },
310
+ {false }, {false }, {false }, {false }, {false }, {false }};
245
311
246
312
pgm_tap::TransformerGraph actual_graph = pgm_tap::build_transformer_graph (state);
247
313
pgm_tap::TrafoGraphEdgeProperties actual_edges_prop;
@@ -261,68 +327,6 @@ TEST_CASE("Test Transformer ranking") {
261
327
CHECK (actual_edges_prop == expected_edges_prop);
262
328
}
263
329
264
- SUBCASE (" Process edge weights" ) {
265
- using vertex_iterator = boost::graph_traits<pgm_tap::TransformerGraph>::vertex_iterator;
266
-
267
- // Dummy graph
268
- pgm_tap::TrafoGraphEdges const edge_array = {{0 , 1 }, {0 , 2 }, {2 , 3 }};
269
- pgm_tap::TrafoGraphEdgeProperties const edge_prop{{{0 , 1 }, 1 }, {{-1 , -1 }, 0 }, {{2 , 3 }, 1 }};
270
- std::vector<pgm_tap::TrafoGraphVertex> vertex_props{{true }, {false }, {false }, {false }};
271
-
272
- pgm_tap::TransformerGraph g{boost::edges_are_unsorted_multi_pass, edge_array.cbegin (), edge_array.cend (),
273
- edge_prop.cbegin (), 4 };
274
-
275
- // Vertex properties can not be set during graph creation
276
- vertex_iterator vi;
277
- vertex_iterator vi_end;
278
- for (boost::tie (vi, vi_end) = vertices (g); vi != vi_end; ++vi) {
279
- g[*vi].is_source = vertex_props[*vi].is_source ;
280
- }
281
-
282
- pgm_tap::TrafoGraphEdgeProperties const regulated_edge_weights = get_edge_weights (g);
283
- pgm_tap::TrafoGraphEdgeProperties const ref_regulated_edge_weights{{{0 , 1 }, 1 }, {{2 , 3 }, 1 }};
284
- CHECK (regulated_edge_weights == ref_regulated_edge_weights);
285
- }
286
-
287
- SUBCASE (" Sorting transformer edges" ) {
288
- pgm_tap::TrafoGraphEdgeProperties const trafoList{
289
- {Idx2D{1 , 1 }, pgm_tap::infty}, {Idx2D{1 , 2 }, 5 }, {Idx2D{1 , 3 }, 4 }, {Idx2D{2 , 1 }, 4 }};
290
-
291
- pgm_tap::RankedTransformerGroups const referenceList{
292
- {Idx2D{1 , 3 }, Idx2D{2 , 1 }}, {Idx2D{1 , 2 }}, {Idx2D{1 , 1 }}};
293
-
294
- pgm_tap::RankedTransformerGroups const sortedTrafoList = pgm_tap::rank_transformers (trafoList);
295
- REQUIRE (sortedTrafoList.size () == referenceList.size ());
296
- for (Idx idx : boost::counting_range (Idx{0 }, static_cast <Idx>(sortedTrafoList.size ()))) {
297
- CAPTURE (idx);
298
- CHECK (sortedTrafoList[idx] == referenceList[idx]);
299
- }
300
- }
301
-
302
- SUBCASE (" Multiple source grid" ) {
303
- using vertex_iterator = boost::graph_traits<pgm_tap::TransformerGraph>::vertex_iterator;
304
-
305
- // Grid with multiple sources and symetric graph
306
- pgm_tap::TrafoGraphEdges const edge_array = {{0 , 1 }, {1 , 2 }, {3 , 2 }, {4 , 3 }};
307
- pgm_tap::TrafoGraphEdgeProperties const edge_prop{{{0 , 1 }, 1 }, {{1 , 2 }, 1 }, {{2 , 3 }, 1 }, {{3 , 4 }, 1 }};
308
- std::vector<pgm_tap::TrafoGraphVertex> vertex_props{{true }, {false }, {false }, {false }, {true }};
309
-
310
- pgm_tap::TransformerGraph g{boost::edges_are_unsorted_multi_pass, edge_array.cbegin (), edge_array.cend (),
311
- edge_prop.cbegin (), 5 };
312
-
313
- // Vertex properties can not be set during graph creation
314
- vertex_iterator vi;
315
- vertex_iterator vi_end;
316
- for (boost::tie (vi, vi_end) = vertices (g); vi != vi_end; ++vi) {
317
- g[*vi].is_source = vertex_props[*vi].is_source ;
318
- }
319
-
320
- pgm_tap::TrafoGraphEdgeProperties const regulated_edge_weights = get_edge_weights (g);
321
- pgm_tap::TrafoGraphEdgeProperties const ref_regulated_edge_weights{
322
- {{0 , 1 }, 1 }, {{1 , 2 }, 2 }, {{2 , 3 }, 2 }, {{3 , 4 }, 1 }};
323
- CHECK (regulated_edge_weights == ref_regulated_edge_weights);
324
- }
325
-
326
330
SUBCASE (" Ranking complete the graph" ) {
327
331
// The test grid 1 is not compatible with the updated logic for step up transformers
328
332
CHECK_THROWS_AS (pgm_tap::rank_transformers (state), AutomaticTapInputError);
@@ -338,18 +342,22 @@ TEST_CASE("Test Transformer ranking") {
338
342
// | | |
339
343
// [2] | [8]
340
344
// | [6] |
341
- // [3]----[7]---| [9]
345
+ // [3]----[7]---| [9] ----x- [100]
342
346
// | |
343
347
// L--------------[10]
348
+ //
349
+ // [101] ---- [102]
344
350
TestState state;
345
- std::vector<NodeInput> nodes{{0 , 150e3 }, {1 , 10e3 }, {2 , 10e3 }, {3 , 10e3 }, {4 , 10e3 }, {5 , 50e3 },
346
- {6 , 10e3 }, {7 , 10e3 }, {8 , 10e3 }, {9 , 10e3 }, {10 , 10e3 }};
351
+ std::vector<NodeInput> nodes{{0 , 150e3 }, {1 , 10e3 }, {2 , 10e3 }, {3 , 10e3 }, {4 , 10e3 },
352
+ {5 , 50e3 }, {6 , 10e3 }, {7 , 10e3 }, {8 , 10e3 }, {9 , 10e3 },
353
+ {10 , 10e3 }, {100 , 10e3 }, {101 , 10e3 }, {102 , 10e3 }};
347
354
main_core::add_component<Node>(state, nodes.begin (), nodes.end (), 50.0 );
348
355
349
356
std::vector<TransformerInput> transformers{
350
- get_transformer (11 , 0 , 1 , BranchSide::to), get_transformer (12 , 0 , 1 , BranchSide::from),
351
- get_transformer (13 , 2 , 3 , BranchSide::from), get_transformer (14 , 6 , 7 , BranchSide::from),
352
- get_transformer (15 , 5 , 8 , BranchSide::from), get_transformer (16 , 9 , 10 , BranchSide::from)};
357
+ get_transformer (11 , 0 , 1 , BranchSide::to), get_transformer (12 , 0 , 1 , BranchSide::from),
358
+ get_transformer (13 , 2 , 3 , BranchSide::from), get_transformer (14 , 6 , 7 , BranchSide::from),
359
+ get_transformer (15 , 5 , 8 , BranchSide::from), get_transformer (16 , 9 , 10 , BranchSide::from),
360
+ get_transformer (103 , 9 , 100 , BranchSide::from), get_transformer (104 , 101 , 102 , BranchSide::from)};
353
361
main_core::add_component<Transformer>(state, transformers.begin (), transformers.end (), 50.0 );
354
362
355
363
std::vector<ThreeWindingTransformerInput> transformers3w{
@@ -374,13 +382,10 @@ TEST_CASE("Test Transformer ranking") {
374
382
375
383
state.components .set_construction_complete ();
376
384
377
- // Subcases
378
- SUBCASE (" Ranking complete the graph" ) {
379
- pgm_tap::RankedTransformerGroups order = pgm_tap::rank_transformers (state);
380
- pgm_tap::RankedTransformerGroups const ref_order{
381
- {{Idx2D{3 , 0 }, Idx2D{3 , 1 }, Idx2D{4 , 0 }, Idx2D{3 , 4 }}, {Idx2D{3 , 2 }, Idx2D{3 , 3 }, Idx2D{3 , 5 }}}};
382
- CHECK (order == ref_order);
383
- }
385
+ pgm_tap::RankedTransformerGroups order = pgm_tap::rank_transformers (state);
386
+ pgm_tap::RankedTransformerGroups const ref_order{
387
+ {{Idx2D{3 , 0 }, Idx2D{3 , 1 }, Idx2D{4 , 0 }, Idx2D{3 , 4 }}, {Idx2D{3 , 2 }, Idx2D{3 , 3 }, Idx2D{3 , 5 }}}};
388
+ CHECK (order == ref_order);
384
389
}
385
390
}
386
391
0 commit comments