https://mooseframework.inl.gov
Loading...
Searching...
No Matches
HexagonalLatticeTest.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
11
13{
14 Real bp = 10.0, pp = 0.1, pd = 0.04, wd = 0.01, wp = 50.0;
15 unsigned int nr = 1, a = 2;
16 HexagonalLatticeUtils hl1(bp, pp, pd, wd, wp, nr, a);
17
18 // Test number of rings given number of pins
19 EXPECT_EQ(hl1.rings(1), (unsigned int)1);
20 EXPECT_EQ(hl1.rings(7), (unsigned int)2);
21 EXPECT_EQ(hl1.rings(19), (unsigned int)3);
22 EXPECT_EQ(hl1.rings(37), (unsigned int)4);
23
24 try
25 {
26 hl1.rings(100);
27 FAIL() << "missing expected error";
28 }
29 catch (const std::exception & e)
30 {
31 std::string msg(e.what());
32 ASSERT_NE(msg.find("Number of pins 100 not evenly divisible in a hexagonal lattice!"),
33 std::string::npos)
34 << "failed with unexpected error: " << msg;
35 }
36
37 // Test number of pins in given ring
38 EXPECT_EQ(hl1.pins(1), (unsigned int)1);
39 EXPECT_EQ(hl1.pins(2), (unsigned int)6);
40 EXPECT_EQ(hl1.pins(3), (unsigned int)12);
41
42 // Test first and last pins in given ring
43 EXPECT_EQ(hl1.firstPinInRing(1), (unsigned int)0);
44 EXPECT_EQ(hl1.lastPinInRing(1), (unsigned int)0);
45
46 EXPECT_EQ(hl1.firstPinInRing(2), (unsigned int)1);
47 EXPECT_EQ(hl1.lastPinInRing(2), (unsigned int)6);
48
49 EXPECT_EQ(hl1.firstPinInRing(3), (unsigned int)7);
50 EXPECT_EQ(hl1.lastPinInRing(3), (unsigned int)18);
51}
52
53TEST_F(HexagonalLatticeTest, variation_with_rings)
54{
55 Real bp = 10.0, pp = 0.1, pd = 0.04, wd = 0.01, wp = 50.0;
56 unsigned int nr = 1, a = 2;
57 HexagonalLatticeUtils hl1(bp, pp, pd, wd, wp, nr, a);
58
59 nr = 2;
60 HexagonalLatticeUtils hl2(bp, pp, pd, wd, wp, nr, a);
61
62 nr = 3;
63 HexagonalLatticeUtils hl3(bp, pp, pd, wd, wp, nr, a);
64
65 nr = 4;
66 HexagonalLatticeUtils hl4(bp, pp, pd, wd, wp, nr, a);
67
68 EXPECT_EQ(hl1.nPins(), (unsigned int)1);
69 EXPECT_EQ(hl1.nInteriorPins(), (unsigned int)1);
70 EXPECT_EQ(hl1.nEdgePins(), (unsigned int)0);
71 EXPECT_EQ(hl1.nCornerPins(), (unsigned int)0);
72 EXPECT_EQ(hl1.nChannels(), (unsigned int)6);
73 EXPECT_EQ(hl1.nInteriorChannels(), (unsigned int)0);
74 EXPECT_EQ(hl1.nEdgeChannels(), (unsigned int)0);
75 EXPECT_EQ(hl1.nCornerChannels(), (unsigned int)6);
76
77 EXPECT_EQ(hl2.nPins(), (unsigned int)7);
78 EXPECT_EQ(hl2.nInteriorPins(), (unsigned int)1);
79 EXPECT_EQ(hl2.nEdgePins(), (unsigned int)0);
80 EXPECT_EQ(hl2.nCornerPins(), (unsigned int)6);
81 EXPECT_EQ(hl2.nChannels(), (unsigned int)18);
82 EXPECT_EQ(hl2.nInteriorChannels(), (unsigned int)6);
83 EXPECT_EQ(hl2.nEdgeChannels(), (unsigned int)6);
84 EXPECT_EQ(hl2.nCornerChannels(), (unsigned int)6);
85
86 EXPECT_EQ(hl3.nPins(), (unsigned int)19);
87 EXPECT_EQ(hl3.nInteriorPins(), (unsigned int)7);
88 EXPECT_EQ(hl3.nEdgePins(), (unsigned int)6);
89 EXPECT_EQ(hl3.nCornerPins(), (unsigned int)6);
90 EXPECT_EQ(hl3.nChannels(), (unsigned int)42);
91 EXPECT_EQ(hl3.nInteriorChannels(), (unsigned int)24);
92 EXPECT_EQ(hl3.nEdgeChannels(), (unsigned int)12);
93 EXPECT_EQ(hl3.nCornerChannels(), (unsigned int)6);
94
95 EXPECT_EQ(hl4.nPins(), (unsigned int)37);
96 EXPECT_EQ(hl4.nInteriorPins(), (unsigned int)19);
97 EXPECT_EQ(hl4.nEdgePins(), (unsigned int)12);
98 EXPECT_EQ(hl4.nCornerPins(), (unsigned int)6);
99 EXPECT_EQ(hl4.nChannels(), (unsigned int)78);
100 EXPECT_EQ(hl4.nInteriorChannels(), (unsigned int)54);
101 EXPECT_EQ(hl4.nEdgeChannels(), (unsigned int)18);
102 EXPECT_EQ(hl4.nCornerChannels(), (unsigned int)6);
103
104 auto interior_pins2 = hl2.interiorChannelPinIndices();
105 EXPECT_EQ(interior_pins2[0][0], (unsigned int)0);
106 EXPECT_EQ(interior_pins2[0][1], (unsigned int)1);
107 EXPECT_EQ(interior_pins2[0][2], (unsigned int)2);
108 EXPECT_EQ(interior_pins2[1][0], (unsigned int)0);
109 EXPECT_EQ(interior_pins2[1][1], (unsigned int)2);
110 EXPECT_EQ(interior_pins2[1][2], (unsigned int)3);
111 EXPECT_EQ(interior_pins2[2][0], (unsigned int)0);
112 EXPECT_EQ(interior_pins2[2][1], (unsigned int)3);
113 EXPECT_EQ(interior_pins2[2][2], (unsigned int)4);
114 EXPECT_EQ(interior_pins2[3][0], (unsigned int)0);
115 EXPECT_EQ(interior_pins2[3][1], (unsigned int)4);
116 EXPECT_EQ(interior_pins2[3][2], (unsigned int)5);
117 EXPECT_EQ(interior_pins2[4][0], (unsigned int)0);
118 EXPECT_EQ(interior_pins2[4][1], (unsigned int)5);
119 EXPECT_EQ(interior_pins2[4][2], (unsigned int)6);
120 EXPECT_EQ(interior_pins2[5][0], (unsigned int)0);
121 EXPECT_EQ(interior_pins2[5][1], (unsigned int)6);
122 EXPECT_EQ(interior_pins2[5][2], (unsigned int)1);
123
124 auto edge_pins2 = hl2.edgeChannelPinIndices();
125 EXPECT_EQ(edge_pins2[0][0], (unsigned int)1);
126 EXPECT_EQ(edge_pins2[0][1], (unsigned int)2);
127 EXPECT_EQ(edge_pins2[1][0], (unsigned int)2);
128 EXPECT_EQ(edge_pins2[1][1], (unsigned int)3);
129 EXPECT_EQ(edge_pins2[2][0], (unsigned int)3);
130 EXPECT_EQ(edge_pins2[2][1], (unsigned int)4);
131 EXPECT_EQ(edge_pins2[3][0], (unsigned int)4);
132 EXPECT_EQ(edge_pins2[3][1], (unsigned int)5);
133 EXPECT_EQ(edge_pins2[4][0], (unsigned int)5);
134 EXPECT_EQ(edge_pins2[4][1], (unsigned int)6);
135 EXPECT_EQ(edge_pins2[5][0], (unsigned int)6);
136 EXPECT_EQ(edge_pins2[5][1], (unsigned int)1);
137
138 auto corner_pins2 = hl2.cornerChannelPinIndices();
139 EXPECT_EQ(corner_pins2[0][0], (unsigned int)1);
140 EXPECT_EQ(corner_pins2[1][0], (unsigned int)2);
141 EXPECT_EQ(corner_pins2[2][0], (unsigned int)3);
142 EXPECT_EQ(corner_pins2[3][0], (unsigned int)4);
143 EXPECT_EQ(corner_pins2[4][0], (unsigned int)5);
144 EXPECT_EQ(corner_pins2[5][0], (unsigned int)6);
145
146 auto interior_pins3 = hl3.interiorChannelPinIndices();
147 EXPECT_EQ(interior_pins3[0][0], (unsigned int)0);
148 EXPECT_EQ(interior_pins3[0][1], (unsigned int)1);
149 EXPECT_EQ(interior_pins3[0][2], (unsigned int)2);
150 EXPECT_EQ(interior_pins3[1][0], (unsigned int)0);
151 EXPECT_EQ(interior_pins3[1][1], (unsigned int)2);
152 EXPECT_EQ(interior_pins3[1][2], (unsigned int)3);
153 EXPECT_EQ(interior_pins3[2][0], (unsigned int)0);
154 EXPECT_EQ(interior_pins3[2][1], (unsigned int)3);
155 EXPECT_EQ(interior_pins3[2][2], (unsigned int)4);
156 EXPECT_EQ(interior_pins3[3][0], (unsigned int)0);
157 EXPECT_EQ(interior_pins3[3][1], (unsigned int)4);
158 EXPECT_EQ(interior_pins3[3][2], (unsigned int)5);
159 EXPECT_EQ(interior_pins3[4][0], (unsigned int)0);
160 EXPECT_EQ(interior_pins3[4][1], (unsigned int)5);
161 EXPECT_EQ(interior_pins3[4][2], (unsigned int)6);
162 EXPECT_EQ(interior_pins3[5][0], (unsigned int)0);
163 EXPECT_EQ(interior_pins3[5][1], (unsigned int)6);
164 EXPECT_EQ(interior_pins3[5][2], (unsigned int)1);
165 EXPECT_EQ(interior_pins3[6][0], (unsigned int)1);
166 EXPECT_EQ(interior_pins3[6][1], (unsigned int)7);
167 EXPECT_EQ(interior_pins3[6][2], (unsigned int)8);
168 EXPECT_EQ(interior_pins3[7][0], (unsigned int)8);
169 EXPECT_EQ(interior_pins3[7][1], (unsigned int)2);
170 EXPECT_EQ(interior_pins3[7][2], (unsigned int)1);
171 EXPECT_EQ(interior_pins3[8][0], (unsigned int)2);
172 EXPECT_EQ(interior_pins3[8][1], (unsigned int)8);
173 EXPECT_EQ(interior_pins3[8][2], (unsigned int)9);
174 EXPECT_EQ(interior_pins3[9][0], (unsigned int)2);
175 EXPECT_EQ(interior_pins3[9][1], (unsigned int)9);
176 EXPECT_EQ(interior_pins3[9][2], (unsigned int)10);
177 EXPECT_EQ(interior_pins3[10][0], (unsigned int)10);
178 EXPECT_EQ(interior_pins3[10][1], (unsigned int)3);
179 EXPECT_EQ(interior_pins3[10][2], (unsigned int)2);
180 EXPECT_EQ(interior_pins3[11][0], (unsigned int)3);
181 EXPECT_EQ(interior_pins3[11][1], (unsigned int)10);
182 EXPECT_EQ(interior_pins3[11][2], (unsigned int)11);
183 EXPECT_EQ(interior_pins3[12][0], (unsigned int)3);
184 EXPECT_EQ(interior_pins3[12][1], (unsigned int)11);
185 EXPECT_EQ(interior_pins3[12][2], (unsigned int)12);
186 EXPECT_EQ(interior_pins3[13][0], (unsigned int)12);
187 EXPECT_EQ(interior_pins3[13][1], (unsigned int)4);
188 EXPECT_EQ(interior_pins3[13][2], (unsigned int)3);
189 EXPECT_EQ(interior_pins3[14][0], (unsigned int)4);
190 EXPECT_EQ(interior_pins3[14][1], (unsigned int)12);
191 EXPECT_EQ(interior_pins3[14][2], (unsigned int)13);
192 EXPECT_EQ(interior_pins3[15][0], (unsigned int)4);
193 EXPECT_EQ(interior_pins3[15][1], (unsigned int)13);
194 EXPECT_EQ(interior_pins3[15][2], (unsigned int)14);
195 EXPECT_EQ(interior_pins3[16][0], (unsigned int)14);
196 EXPECT_EQ(interior_pins3[16][1], (unsigned int)5);
197 EXPECT_EQ(interior_pins3[16][2], (unsigned int)4);
198 EXPECT_EQ(interior_pins3[17][0], (unsigned int)5);
199 EXPECT_EQ(interior_pins3[17][1], (unsigned int)14);
200 EXPECT_EQ(interior_pins3[17][2], (unsigned int)15);
201 EXPECT_EQ(interior_pins3[18][0], (unsigned int)5);
202 EXPECT_EQ(interior_pins3[18][1], (unsigned int)15);
203 EXPECT_EQ(interior_pins3[18][2], (unsigned int)16);
204 EXPECT_EQ(interior_pins3[19][0], (unsigned int)16);
205 EXPECT_EQ(interior_pins3[19][1], (unsigned int)6);
206 EXPECT_EQ(interior_pins3[19][2], (unsigned int)5);
207 EXPECT_EQ(interior_pins3[20][0], (unsigned int)6);
208 EXPECT_EQ(interior_pins3[20][1], (unsigned int)16);
209 EXPECT_EQ(interior_pins3[20][2], (unsigned int)17);
210 EXPECT_EQ(interior_pins3[21][0], (unsigned int)6);
211 EXPECT_EQ(interior_pins3[21][1], (unsigned int)17);
212 EXPECT_EQ(interior_pins3[21][2], (unsigned int)18);
213 EXPECT_EQ(interior_pins3[22][0], (unsigned int)18);
214 EXPECT_EQ(interior_pins3[22][1], (unsigned int)1);
215 EXPECT_EQ(interior_pins3[22][2], (unsigned int)6);
216 EXPECT_EQ(interior_pins3[23][0], (unsigned int)1);
217 EXPECT_EQ(interior_pins3[23][1], (unsigned int)18);
218 EXPECT_EQ(interior_pins3[23][2], (unsigned int)7);
219
220 auto edge_pins3 = hl3.edgeChannelPinIndices();
221 EXPECT_EQ(edge_pins3[0][0], (unsigned int)7);
222 EXPECT_EQ(edge_pins3[0][1], (unsigned int)8);
223 EXPECT_EQ(edge_pins3[1][0], (unsigned int)8);
224 EXPECT_EQ(edge_pins3[1][1], (unsigned int)9);
225 EXPECT_EQ(edge_pins3[2][0], (unsigned int)9);
226 EXPECT_EQ(edge_pins3[2][1], (unsigned int)10);
227 EXPECT_EQ(edge_pins3[3][0], (unsigned int)10);
228 EXPECT_EQ(edge_pins3[3][1], (unsigned int)11);
229 EXPECT_EQ(edge_pins3[4][0], (unsigned int)11);
230 EXPECT_EQ(edge_pins3[4][1], (unsigned int)12);
231 EXPECT_EQ(edge_pins3[5][0], (unsigned int)12);
232 EXPECT_EQ(edge_pins3[5][1], (unsigned int)13);
233 EXPECT_EQ(edge_pins3[6][0], (unsigned int)13);
234 EXPECT_EQ(edge_pins3[6][1], (unsigned int)14);
235 EXPECT_EQ(edge_pins3[7][0], (unsigned int)14);
236 EXPECT_EQ(edge_pins3[7][1], (unsigned int)15);
237 EXPECT_EQ(edge_pins3[8][0], (unsigned int)15);
238 EXPECT_EQ(edge_pins3[8][1], (unsigned int)16);
239 EXPECT_EQ(edge_pins3[9][0], (unsigned int)16);
240 EXPECT_EQ(edge_pins3[9][1], (unsigned int)17);
241 EXPECT_EQ(edge_pins3[10][0], (unsigned int)17);
242 EXPECT_EQ(edge_pins3[10][1], (unsigned int)18);
243 EXPECT_EQ(edge_pins3[11][0], (unsigned int)18);
244 EXPECT_EQ(edge_pins3[11][1], (unsigned int)7);
245
246 auto corner_pins3 = hl3.cornerChannelPinIndices();
247 EXPECT_EQ(corner_pins3[0][0], (unsigned int)7);
248 EXPECT_EQ(corner_pins3[1][0], (unsigned int)9);
249 EXPECT_EQ(corner_pins3[2][0], (unsigned int)11);
250 EXPECT_EQ(corner_pins3[3][0], (unsigned int)13);
251 EXPECT_EQ(corner_pins3[4][0], (unsigned int)15);
252 EXPECT_EQ(corner_pins3[5][0], (unsigned int)17);
253}
254
255TEST_F(HexagonalLatticeTest, pin_bundle_spacing)
256{
257 Real bp = 5.0, pp = 1.0, pd = 0.8, wd = 0.05, wp = 50.0;
258 unsigned int nr = 1, a = 2;
259 HexagonalLatticeUtils hl5(bp, pp, pd, wd, wp, nr, a);
260
261 nr = 2;
262 HexagonalLatticeUtils hl6(bp, pp, pd, wd, wp, nr, a);
263
264 wd = 0.0;
265 nr = 1;
266 HexagonalLatticeUtils hl7(bp, pp, pd, wd, wp, nr, a);
267
268 nr = 2;
269 HexagonalLatticeUtils hl8(bp, pp, pd, wd, wp, nr, a);
270
271 // wire-wrapped bundles
272 EXPECT_DOUBLE_EQ(hl5.pinBundleSpacing(), 2.1);
273 EXPECT_DOUBLE_EQ(hl6.pinBundleSpacing(), (5.0 - (std::sqrt(3.0) + 0.8)) / 2.);
274
275 // bare bundles
276 EXPECT_DOUBLE_EQ(hl7.pinBundleSpacing(), 2.1);
277 EXPECT_DOUBLE_EQ(hl8.pinBundleSpacing(), (5.0 - (std::sqrt(3.0) + 0.8)) / 2.);
278}
279
280TEST_F(HexagonalLatticeTest, hydraulic_diameters)
281{
282 int n_interior, n_edge, n_corner;
283 Real flow_interior, flow_edge, flow_corner;
284 Real area_interior, area_edge, area_corner;
285
286 Real bp = 5.0, pp = 1.0, pd = 0.8, wd = 0.1, wp = 50.0;
287 unsigned int nr = 1, a = 2;
288 HexagonalLatticeUtils hl9(bp, pp, pd, wd, wp, nr, a);
289
290 nr = 2;
291 HexagonalLatticeUtils hl10(bp, pp, pd, wd, wp, nr, a);
292
293 pp = 0.99;
294 nr = 3;
295 HexagonalLatticeUtils hl11(bp, pp, pd, wd, wp, nr, a);
296
297 pp = 1.0;
298 wd = 0.0;
299 nr = 1;
300 HexagonalLatticeUtils hl12(bp, pp, pd, wd, wp, nr, a);
301
302 nr = 2;
303 HexagonalLatticeUtils hl13(bp, pp, pd, wd, wp, nr, a);
304
305 pp = 0.99;
306 nr = 3;
307 HexagonalLatticeUtils hl14(bp, pp, pd, wd, wp, nr, a);
308
309 // values are obtained from a completely separately-developed Python script for
310 // verifying the bundle-wide hydraulic diameter. We verify the diameters for each
311 // individual channel by requiring that the n-channel-weighted sum equals the
312 // bundle-wide values for volume and areas, since we can verify that easily.
313 EXPECT_DOUBLE_EQ(hl9.hydraulicDiameter(), 4.196872851813099);
314 n_interior = hl9.nInteriorChannels();
315 n_edge = hl9.nEdgeChannels();
316 n_corner = hl9.nCornerChannels();
317 flow_interior = hl9.interiorFlowVolume();
318 flow_edge = hl9.edgeFlowVolume();
319 flow_corner = hl9.cornerFlowVolume();
320 area_interior = hl9.interiorWettedArea();
321 area_edge = hl9.edgeWettedArea();
322 area_corner = hl9.cornerWettedArea();
323 EXPECT_DOUBLE_EQ(hl9.flowVolume(),
324 n_interior * flow_interior + n_edge * flow_edge + n_corner * flow_corner);
325 EXPECT_DOUBLE_EQ(hl9.wettedArea(),
326 n_interior * area_interior + n_edge * area_edge + n_corner * area_corner);
327
328 EXPECT_DOUBLE_EQ(hl10.hydraulicDiameter(), 1.948158075579034);
329 n_interior = hl10.nInteriorChannels();
330 n_edge = hl10.nEdgeChannels();
331 n_corner = hl10.nCornerChannels();
332 flow_interior = hl10.interiorFlowVolume();
333 flow_edge = hl10.edgeFlowVolume();
334 flow_corner = hl10.cornerFlowVolume();
335 area_interior = hl10.interiorWettedArea();
336 area_edge = hl10.edgeWettedArea();
337 area_corner = hl10.cornerWettedArea();
338 EXPECT_DOUBLE_EQ(hl10.flowVolume(),
339 n_interior * flow_interior + n_edge * flow_edge + n_corner * flow_corner);
340 EXPECT_DOUBLE_EQ(hl10.wettedArea(),
341 n_interior * area_interior + n_edge * area_edge + n_corner * area_corner);
342
343 EXPECT_DOUBLE_EQ(hl11.hydraulicDiameter(), 0.6727946134052672);
344 n_interior = hl11.nInteriorChannels();
345 n_edge = hl11.nEdgeChannels();
346 n_corner = hl11.nCornerChannels();
347 flow_interior = hl11.interiorFlowVolume();
348 flow_edge = hl11.edgeFlowVolume();
349 flow_corner = hl11.cornerFlowVolume();
350 area_interior = hl11.interiorWettedArea();
351 area_edge = hl11.edgeWettedArea();
352 area_corner = hl11.cornerWettedArea();
353 EXPECT_DOUBLE_EQ(hl11.flowVolume(),
354 n_interior * flow_interior + n_edge * flow_edge + n_corner * flow_corner);
355 EXPECT_DOUBLE_EQ(hl11.wettedArea(),
356 n_interior * area_interior + n_edge * area_edge + n_corner * area_corner);
357
358 // bare bundles
359 EXPECT_DOUBLE_EQ(hl12.hydraulicDiameter(), 4.2650423521483205);
360 n_interior = hl12.nInteriorChannels();
361 n_edge = hl12.nEdgeChannels();
362 n_corner = hl12.nCornerChannels();
363 flow_interior = hl12.interiorFlowVolume();
364 flow_edge = hl12.edgeFlowVolume();
365 flow_corner = hl12.cornerFlowVolume();
366 area_interior = hl12.interiorWettedArea();
367 area_edge = hl12.edgeWettedArea();
368 area_corner = hl12.cornerWettedArea();
369 EXPECT_DOUBLE_EQ(hl12.flowVolume(),
370 n_interior * flow_interior + n_edge * flow_edge + n_corner * flow_corner);
371 EXPECT_DOUBLE_EQ(hl12.wettedArea(),
372 n_interior * area_interior + n_edge * area_edge + n_corner * area_corner);
373
374 EXPECT_DOUBLE_EQ(hl13.hydraulicDiameter(), 2.077372852104904);
375 n_interior = hl13.nInteriorChannels();
376 n_edge = hl13.nEdgeChannels();
377 n_corner = hl13.nCornerChannels();
378 flow_interior = hl13.interiorFlowVolume();
379 flow_edge = hl13.edgeFlowVolume();
380 flow_corner = hl13.cornerFlowVolume();
381 area_interior = hl13.interiorWettedArea();
382 area_edge = hl13.edgeWettedArea();
383 area_corner = hl13.cornerWettedArea();
384 EXPECT_DOUBLE_EQ(hl13.flowVolume(),
385 n_interior * flow_interior + n_edge * flow_edge + n_corner * flow_corner);
386 EXPECT_DOUBLE_EQ(hl13.wettedArea(),
387 n_interior * area_interior + n_edge * area_edge + n_corner * area_corner);
388
389 EXPECT_DOUBLE_EQ(hl14.hydraulicDiameter(), 0.7437951937590452);
390 n_interior = hl14.nInteriorChannels();
391 n_edge = hl14.nEdgeChannels();
392 n_corner = hl14.nCornerChannels();
393 flow_interior = hl14.interiorFlowVolume();
394 flow_edge = hl14.edgeFlowVolume();
395 flow_corner = hl14.cornerFlowVolume();
396 area_interior = hl14.interiorWettedArea();
397 area_edge = hl14.edgeWettedArea();
398 area_corner = hl14.cornerWettedArea();
399 EXPECT_DOUBLE_EQ(hl14.flowVolume(),
400 n_interior * flow_interior + n_edge * flow_edge + n_corner * flow_corner);
401 EXPECT_DOUBLE_EQ(hl14.wettedArea(),
402 n_interior * area_interior + n_edge * area_edge + n_corner * area_corner);
403}
404
406{
407 Real bp = 5.0, pp = 0.99, pd = 0.8, wd = 0.0, wp = 50.0;
408 unsigned int nr = 3, a = 2;
409 HexagonalLatticeUtils hl14(bp, pp, pd, wd, wp, nr, a);
410
411 nr = 1;
412 HexagonalLatticeUtils hl15(bp, pp, pd, wd, wp, nr, a);
413
414 nr = 2;
415 HexagonalLatticeUtils hl16(bp, pp, pd, wd, wp, nr, a);
416
417 bp = 10.0;
418 nr = 4;
419 HexagonalLatticeUtils hl17(bp, pp, pd, wd, wp, nr, a);
420
421 Real cos60 = 0.5;
422 Real sin60 = std::sqrt(3.0) / 2.0;
423
424 auto & centers = hl15.pinCenters();
425 EXPECT_EQ(centers.size(), hl15.nPins());
426 EXPECT_DOUBLE_EQ(centers[0](0), 0.0);
427 EXPECT_DOUBLE_EQ(centers[0](1), 0.0);
428 EXPECT_DOUBLE_EQ(centers[0](2), 0.0);
429
430 Real p = 0.99;
431 auto & centers2 = hl16.pinCenters();
432 EXPECT_EQ(centers2.size(), hl16.nPins());
433 EXPECT_DOUBLE_EQ(centers2[0](0), 0.0);
434 EXPECT_DOUBLE_EQ(centers2[0](1), 0.0);
435 EXPECT_DOUBLE_EQ(centers2[1](0), cos60 * p);
436 EXPECT_DOUBLE_EQ(centers2[1](1), sin60 * p);
437 EXPECT_DOUBLE_EQ(centers2[2](0), -cos60 * p);
438 EXPECT_DOUBLE_EQ(centers2[2](1), sin60 * p);
439 EXPECT_DOUBLE_EQ(centers2[3](0), -p);
440 EXPECT_DOUBLE_EQ(centers2[3](1), 0.0);
441 EXPECT_DOUBLE_EQ(centers2[4](0), -cos60 * p);
442 EXPECT_DOUBLE_EQ(centers2[4](1), -sin60 * p);
443 EXPECT_DOUBLE_EQ(centers2[5](0), cos60 * p);
444 EXPECT_DOUBLE_EQ(centers2[5](1), -sin60 * p);
445 EXPECT_DOUBLE_EQ(centers2[6](0), p);
446 EXPECT_DOUBLE_EQ(centers2[6](1), (unsigned int)0);
447
448 for (const auto i : make_range(hl16.nPins()))
449 EXPECT_DOUBLE_EQ(centers2[i](2), 0.0);
450
451 auto & centers3 = hl14.pinCenters();
452 EXPECT_EQ(centers3.size(), hl14.nPins());
453 EXPECT_DOUBLE_EQ(centers3[0](0), 0.0);
454 EXPECT_DOUBLE_EQ(centers3[0](1), 0.0);
455 EXPECT_DOUBLE_EQ(centers3[1](0), cos60 * p);
456 EXPECT_DOUBLE_EQ(centers3[1](1), sin60 * p);
457 EXPECT_DOUBLE_EQ(centers3[2](0), -cos60 * p);
458 EXPECT_DOUBLE_EQ(centers3[2](1), sin60 * p);
459 EXPECT_DOUBLE_EQ(centers3[3](0), -p);
460 EXPECT_DOUBLE_EQ(centers3[3](1), 0.0);
461 EXPECT_DOUBLE_EQ(centers3[4](0), -cos60 * p);
462 EXPECT_DOUBLE_EQ(centers3[4](1), -sin60 * p);
463 EXPECT_DOUBLE_EQ(centers3[5](0), cos60 * p);
464 EXPECT_DOUBLE_EQ(centers3[5](1), -sin60 * p);
465 EXPECT_DOUBLE_EQ(centers3[6](0), p);
466 EXPECT_DOUBLE_EQ(centers3[6](1), (unsigned int)0);
467
468 EXPECT_DOUBLE_EQ(centers3[7](0), p);
469 EXPECT_DOUBLE_EQ(centers3[7](1), 2 * p * sin60);
470 EXPECT_DOUBLE_EQ(centers3[8](0), (unsigned int)0);
471 EXPECT_DOUBLE_EQ(centers3[8](1), 2 * p * sin60);
472 EXPECT_DOUBLE_EQ(centers3[9](0), -p);
473 EXPECT_DOUBLE_EQ(centers3[9](1), 2 * p * sin60);
474 EXPECT_DOUBLE_EQ(centers3[10](0), -p - p * cos60);
475 EXPECT_DOUBLE_EQ(centers3[10](1), p * sin60);
476 EXPECT_DOUBLE_EQ(centers3[11](0), -2 * p);
477 EXPECT_DOUBLE_EQ(centers3[11](1), (unsigned int)0);
478 EXPECT_DOUBLE_EQ(centers3[12](0), -p - p * cos60);
479 EXPECT_DOUBLE_EQ(centers3[12](1), -p * sin60);
480 EXPECT_DOUBLE_EQ(centers3[13](0), -p);
481 EXPECT_DOUBLE_EQ(centers3[13](1), -2 * p * sin60);
482 EXPECT_DOUBLE_EQ(centers3[14](0), (unsigned int)0);
483 EXPECT_DOUBLE_EQ(centers3[14](1), -2 * p * sin60);
484 EXPECT_DOUBLE_EQ(centers3[15](0), p);
485 EXPECT_DOUBLE_EQ(centers3[15](1), -2 * p * sin60);
486 EXPECT_DOUBLE_EQ(centers3[16](0), p + p * cos60);
487 EXPECT_DOUBLE_EQ(centers3[16](1), -p * sin60);
488 EXPECT_DOUBLE_EQ(centers3[17](0), 2 * p);
489 EXPECT_DOUBLE_EQ(centers3[17](1), 0.0);
490 EXPECT_DOUBLE_EQ(centers3[18](0), p + p * cos60);
491 EXPECT_DOUBLE_EQ(centers3[18](1), p * sin60);
492
493 for (const auto i : make_range(hl14.nPins()))
494 EXPECT_DOUBLE_EQ(centers3[i](2), 0.0);
495
496 auto & centers4 = hl17.pinCenters();
497 EXPECT_EQ(centers4.size(), hl17.nPins());
498 EXPECT_DOUBLE_EQ(centers4[0](0), 0.0);
499 EXPECT_DOUBLE_EQ(centers4[0](1), 0.0);
500 EXPECT_DOUBLE_EQ(centers4[1](0), cos60 * p);
501 EXPECT_DOUBLE_EQ(centers4[1](1), sin60 * p);
502 EXPECT_DOUBLE_EQ(centers4[2](0), -cos60 * p);
503 EXPECT_DOUBLE_EQ(centers4[2](1), sin60 * p);
504 EXPECT_DOUBLE_EQ(centers4[3](0), -p);
505 EXPECT_DOUBLE_EQ(centers4[3](1), 0.0);
506 EXPECT_DOUBLE_EQ(centers4[4](0), -cos60 * p);
507 EXPECT_DOUBLE_EQ(centers4[4](1), -sin60 * p);
508 EXPECT_DOUBLE_EQ(centers4[5](0), cos60 * p);
509 EXPECT_DOUBLE_EQ(centers4[5](1), -sin60 * p);
510 EXPECT_DOUBLE_EQ(centers4[6](0), p);
511 EXPECT_DOUBLE_EQ(centers4[6](1), (unsigned int)0);
512
513 EXPECT_DOUBLE_EQ(centers4[7](0), p);
514 EXPECT_DOUBLE_EQ(centers4[7](1), 2 * p * sin60);
515 EXPECT_DOUBLE_EQ(centers4[8](0), (unsigned int)0);
516 EXPECT_DOUBLE_EQ(centers4[8](1), 2 * p * sin60);
517 EXPECT_DOUBLE_EQ(centers4[9](0), -p);
518 EXPECT_DOUBLE_EQ(centers4[9](1), 2 * p * sin60);
519 EXPECT_DOUBLE_EQ(centers4[10](0), -p - p * cos60);
520 EXPECT_DOUBLE_EQ(centers4[10](1), p * sin60);
521 EXPECT_DOUBLE_EQ(centers4[11](0), -2 * p);
522 EXPECT_DOUBLE_EQ(centers4[11](1), (unsigned int)0);
523 EXPECT_DOUBLE_EQ(centers4[12](0), -p - p * cos60);
524 EXPECT_DOUBLE_EQ(centers4[12](1), -p * sin60);
525 EXPECT_DOUBLE_EQ(centers4[13](0), -p);
526 EXPECT_DOUBLE_EQ(centers4[13](1), -2 * p * sin60);
527 EXPECT_DOUBLE_EQ(centers4[14](0), (unsigned int)0);
528 EXPECT_DOUBLE_EQ(centers4[14](1), -2 * p * sin60);
529 EXPECT_DOUBLE_EQ(centers4[15](0), p);
530 EXPECT_DOUBLE_EQ(centers4[15](1), -2 * p * sin60);
531 EXPECT_DOUBLE_EQ(centers4[16](0), p + p * cos60);
532 EXPECT_DOUBLE_EQ(centers4[16](1), -p * sin60);
533 EXPECT_DOUBLE_EQ(centers4[17](0), 2 * p);
534 EXPECT_DOUBLE_EQ(centers4[17](1), 0.0);
535 EXPECT_DOUBLE_EQ(centers4[18](0), p + p * cos60);
536 EXPECT_DOUBLE_EQ(centers4[18](1), p * sin60);
537
538 EXPECT_DOUBLE_EQ(centers4[19](0), p + p * cos60);
539 EXPECT_DOUBLE_EQ(centers4[19](1), 3 * p * sin60);
540 EXPECT_DOUBLE_EQ(centers4[20](0), p * cos60);
541 EXPECT_DOUBLE_EQ(centers4[20](1), 3 * p * sin60);
542 EXPECT_DOUBLE_EQ(centers4[21](0), -p * cos60);
543 EXPECT_DOUBLE_EQ(centers4[21](1), 3 * p * sin60);
544 EXPECT_DOUBLE_EQ(centers4[22](0), -p - p * cos60);
545 EXPECT_DOUBLE_EQ(centers4[22](1), 3 * p * sin60);
546 EXPECT_DOUBLE_EQ(centers4[23](0), -2 * p);
547 EXPECT_DOUBLE_EQ(centers4[23](1), 2 * p * sin60);
548 EXPECT_DOUBLE_EQ(centers4[24](0), -2 * p - p * cos60);
549 EXPECT_DOUBLE_EQ(centers4[24](1), p * sin60);
550 EXPECT_DOUBLE_EQ(centers4[25](0), -3 * p);
551 EXPECT_DOUBLE_EQ(centers4[25](1), (unsigned int)0);
552 EXPECT_DOUBLE_EQ(centers4[26](0), -2 * p - p * cos60);
553 EXPECT_DOUBLE_EQ(centers4[26](1), -p * sin60);
554 EXPECT_DOUBLE_EQ(centers4[27](0), -2 * p);
555 EXPECT_DOUBLE_EQ(centers4[27](1), -2 * p * sin60);
556 EXPECT_DOUBLE_EQ(centers4[28](0), -p - p * cos60);
557 EXPECT_DOUBLE_EQ(centers4[28](1), -3 * p * sin60);
558 EXPECT_DOUBLE_EQ(centers4[29](0), -p * cos60);
559 EXPECT_DOUBLE_EQ(centers4[29](1), -3 * p * sin60);
560 EXPECT_DOUBLE_EQ(centers4[30](0), p * cos60);
561 EXPECT_DOUBLE_EQ(centers4[30](1), -3 * p * sin60);
562 EXPECT_DOUBLE_EQ(centers4[31](0), p + p * cos60);
563 EXPECT_DOUBLE_EQ(centers4[31](1), -3 * p * sin60);
564 EXPECT_DOUBLE_EQ(centers4[32](0), 2 * p);
565 EXPECT_DOUBLE_EQ(centers4[32](1), -2 * p * sin60);
566 EXPECT_DOUBLE_EQ(centers4[33](0), 2 * p + p * cos60);
567 EXPECT_DOUBLE_EQ(centers4[33](1), -p * sin60);
568 EXPECT_DOUBLE_EQ(centers4[34](0), 3 * p);
569 EXPECT_DOUBLE_EQ(centers4[34](1), (unsigned int)0);
570 EXPECT_DOUBLE_EQ(centers4[35](0), 2 * p + p * cos60);
571 EXPECT_DOUBLE_EQ(centers4[35](1), p * sin60);
572 EXPECT_DOUBLE_EQ(centers4[36](0), 2 * p);
573 EXPECT_DOUBLE_EQ(centers4[36](1), 2 * p * sin60);
574
575 for (const auto i : make_range(hl17.nPins()))
576 EXPECT_DOUBLE_EQ(centers4[i](2), 0.0);
577}
578
579TEST_F(HexagonalLatticeTest, pin_centers_rotated_pi)
580{
581 Real bp = 5.0, pp = 0.99, pd = 0.8, wd = 0.0, wp = 50.0;
582 unsigned int nr = 3, a = 2;
583 HexagonalLatticeUtils hl14(bp, pp, pd, wd, wp, nr, a, 180);
584
585 nr = 1;
586 HexagonalLatticeUtils hl15(bp, pp, pd, wd, wp, nr, a, 180);
587
588 nr = 2;
589 HexagonalLatticeUtils hl16(bp, pp, pd, wd, wp, nr, a, 180);
590
591 bp = 10.0;
592 nr = 4;
593 HexagonalLatticeUtils hl17(bp, pp, pd, wd, wp, nr, a, 180);
594
595 Real cos60 = 0.5;
596 Real sin60 = std::sqrt(3.0) / 2.0;
597
598 auto & centers = hl15.pinCenters();
599 EXPECT_EQ(centers.size(), hl15.nPins());
600 ABS_DOUBLE_TEST(centers[0](0), 0.0);
601 ABS_DOUBLE_TEST(centers[0](1), 0.0);
602 ABS_DOUBLE_TEST(centers[0](2), 0.0);
603
604 Real p = 0.99;
605 auto & centers2 = hl16.pinCenters();
606 EXPECT_EQ(centers2.size(), hl16.nPins());
607 ABS_DOUBLE_TEST(centers2[0](0), 0.0);
608 ABS_DOUBLE_TEST(centers2[0](1), 0.0);
609 ABS_DOUBLE_TEST(centers2[1](0), -cos60 * p);
610 ABS_DOUBLE_TEST(centers2[1](1), -sin60 * p);
611 ABS_DOUBLE_TEST(centers2[2](0), cos60 * p);
612 ABS_DOUBLE_TEST(centers2[2](1), -sin60 * p);
613 ABS_DOUBLE_TEST(centers2[3](0), p);
614 ABS_DOUBLE_TEST(centers2[3](1), 0.0);
615 ABS_DOUBLE_TEST(centers2[4](0), cos60 * p);
616 ABS_DOUBLE_TEST(centers2[4](1), sin60 * p);
617 ABS_DOUBLE_TEST(centers2[5](0), -cos60 * p);
618 ABS_DOUBLE_TEST(centers2[5](1), sin60 * p);
619 ABS_DOUBLE_TEST(centers2[6](0), -p);
620 ABS_DOUBLE_TEST(centers2[6](1), (unsigned int)0);
621
622 for (const auto i : make_range(hl16.nPins()))
623 ABS_DOUBLE_TEST(centers2[i](2), 0.0);
624
625 auto & centers3 = hl14.pinCenters();
626 EXPECT_EQ(centers3.size(), hl14.nPins());
627 ABS_DOUBLE_TEST(centers3[0](0), 0.0);
628 ABS_DOUBLE_TEST(centers3[0](1), 0.0);
629 ABS_DOUBLE_TEST(centers3[1](0), -cos60 * p);
630 ABS_DOUBLE_TEST(centers3[1](1), -sin60 * p);
631 ABS_DOUBLE_TEST(centers3[2](0), cos60 * p);
632 ABS_DOUBLE_TEST(centers3[2](1), -sin60 * p);
633 ABS_DOUBLE_TEST(centers3[3](0), p);
634 ABS_DOUBLE_TEST(centers3[3](1), 0.0);
635 ABS_DOUBLE_TEST(centers3[4](0), cos60 * p);
636 ABS_DOUBLE_TEST(centers3[4](1), sin60 * p);
637 ABS_DOUBLE_TEST(centers3[5](0), -cos60 * p);
638 ABS_DOUBLE_TEST(centers3[5](1), sin60 * p);
639 ABS_DOUBLE_TEST(centers3[6](0), -p);
640 ABS_DOUBLE_TEST(centers3[6](1), (unsigned int)0);
641
642 ABS_DOUBLE_TEST(centers3[7](0), -p);
643 ABS_DOUBLE_TEST(centers3[7](1), -2 * p * sin60);
644 ABS_DOUBLE_TEST(centers3[8](0), (unsigned int)0);
645 ABS_DOUBLE_TEST(centers3[8](1), -2 * p * sin60);
646 ABS_DOUBLE_TEST(centers3[9](0), p);
647 ABS_DOUBLE_TEST(centers3[9](1), -2 * p * sin60);
648 ABS_DOUBLE_TEST(centers3[10](0), p + p * cos60);
649 ABS_DOUBLE_TEST(centers3[10](1), -p * sin60);
650 ABS_DOUBLE_TEST(centers3[11](0), 2 * p);
651 ABS_DOUBLE_TEST(centers3[11](1), (unsigned int)0);
652 ABS_DOUBLE_TEST(centers3[12](0), p + p * cos60);
653 ABS_DOUBLE_TEST(centers3[12](1), p * sin60);
654 ABS_DOUBLE_TEST(centers3[13](0), p);
655 ABS_DOUBLE_TEST(centers3[13](1), 2 * p * sin60);
656 ABS_DOUBLE_TEST(centers3[14](0), (unsigned int)0);
657 ABS_DOUBLE_TEST(centers3[14](1), 2 * p * sin60);
658 ABS_DOUBLE_TEST(centers3[15](0), -p);
659 ABS_DOUBLE_TEST(centers3[15](1), 2 * p * sin60);
660 ABS_DOUBLE_TEST(centers3[16](0), -p - p * cos60);
661 ABS_DOUBLE_TEST(centers3[16](1), p * sin60);
662 ABS_DOUBLE_TEST(centers3[17](0), -2 * p);
663 ABS_DOUBLE_TEST(centers3[17](1), 0.0);
664 ABS_DOUBLE_TEST(centers3[18](0), -p - p * cos60);
665 ABS_DOUBLE_TEST(centers3[18](1), -p * sin60);
666
667 for (const auto i : make_range(hl14.nPins()))
668 ABS_DOUBLE_TEST(centers3[i](2), 0.0);
669
670 auto & centers4 = hl17.pinCenters();
671 EXPECT_EQ(centers4.size(), hl17.nPins());
672 ABS_DOUBLE_TEST(centers4[0](0), 0.0);
673 ABS_DOUBLE_TEST(centers4[0](1), 0.0);
674 ABS_DOUBLE_TEST(centers4[1](0), -cos60 * p);
675 ABS_DOUBLE_TEST(centers4[1](1), -sin60 * p);
676 ABS_DOUBLE_TEST(centers4[2](0), cos60 * p);
677 ABS_DOUBLE_TEST(centers4[2](1), -sin60 * p);
678 ABS_DOUBLE_TEST(centers4[3](0), p);
679 ABS_DOUBLE_TEST(centers4[3](1), 0.0);
680 ABS_DOUBLE_TEST(centers4[4](0), cos60 * p);
681 ABS_DOUBLE_TEST(centers4[4](1), sin60 * p);
682 ABS_DOUBLE_TEST(centers4[5](0), -cos60 * p);
683 ABS_DOUBLE_TEST(centers4[5](1), sin60 * p);
684 ABS_DOUBLE_TEST(centers4[6](0), -p);
685 ABS_DOUBLE_TEST(centers4[6](1), (unsigned int)0);
686
687 ABS_DOUBLE_TEST(centers4[7](0), -p);
688 ABS_DOUBLE_TEST(centers4[7](1), -2 * p * sin60);
689 ABS_DOUBLE_TEST(centers4[8](0), (unsigned int)0);
690 ABS_DOUBLE_TEST(centers4[8](1), -2 * p * sin60);
691 ABS_DOUBLE_TEST(centers4[9](0), p);
692 ABS_DOUBLE_TEST(centers4[9](1), -2 * p * sin60);
693 ABS_DOUBLE_TEST(centers4[10](0), p + p * cos60);
694 ABS_DOUBLE_TEST(centers4[10](1), -p * sin60);
695 ABS_DOUBLE_TEST(centers4[11](0), 2 * p);
696 ABS_DOUBLE_TEST(centers4[11](1), (unsigned int)0);
697 ABS_DOUBLE_TEST(centers4[12](0), p + p * cos60);
698 ABS_DOUBLE_TEST(centers4[12](1), p * sin60);
699 ABS_DOUBLE_TEST(centers4[13](0), p);
700 ABS_DOUBLE_TEST(centers4[13](1), 2 * p * sin60);
701 ABS_DOUBLE_TEST(centers4[14](0), (unsigned int)0);
702 ABS_DOUBLE_TEST(centers4[14](1), 2 * p * sin60);
703 ABS_DOUBLE_TEST(centers4[15](0), -p);
704 ABS_DOUBLE_TEST(centers4[15](1), 2 * p * sin60);
705 ABS_DOUBLE_TEST(centers4[16](0), -p - p * cos60);
706 ABS_DOUBLE_TEST(centers4[16](1), p * sin60);
707 ABS_DOUBLE_TEST(centers4[17](0), -2 * p);
708 ABS_DOUBLE_TEST(centers4[17](1), 0.0);
709 ABS_DOUBLE_TEST(centers4[18](0), -p - p * cos60);
710 ABS_DOUBLE_TEST(centers4[18](1), -p * sin60);
711
712 ABS_DOUBLE_TEST(centers4[19](0), -p - p * cos60);
713 ABS_DOUBLE_TEST(centers4[19](1), -3 * p * sin60);
714 ABS_DOUBLE_TEST(centers4[20](0), -p * cos60);
715 ABS_DOUBLE_TEST(centers4[20](1), -3 * p * sin60);
716 ABS_DOUBLE_TEST(centers4[21](0), p * cos60);
717 ABS_DOUBLE_TEST(centers4[21](1), -3 * p * sin60);
718 ABS_DOUBLE_TEST(centers4[22](0), p + p * cos60);
719 ABS_DOUBLE_TEST(centers4[22](1), -3 * p * sin60);
720 ABS_DOUBLE_TEST(centers4[23](0), 2 * p);
721 ABS_DOUBLE_TEST(centers4[23](1), -2 * p * sin60);
722 ABS_DOUBLE_TEST(centers4[24](0), 2 * p + p * cos60);
723 ABS_DOUBLE_TEST(centers4[24](1), -p * sin60);
724 ABS_DOUBLE_TEST(centers4[25](0), 3 * p);
725 ABS_DOUBLE_TEST(centers4[25](1), (unsigned int)0);
726 ABS_DOUBLE_TEST(centers4[26](0), 2 * p + p * cos60);
727 ABS_DOUBLE_TEST(centers4[26](1), p * sin60);
728 ABS_DOUBLE_TEST(centers4[27](0), 2 * p);
729 ABS_DOUBLE_TEST(centers4[27](1), 2 * p * sin60);
730 ABS_DOUBLE_TEST(centers4[28](0), p + p * cos60);
731 ABS_DOUBLE_TEST(centers4[28](1), 3 * p * sin60);
732 ABS_DOUBLE_TEST(centers4[29](0), p * cos60);
733 ABS_DOUBLE_TEST(centers4[29](1), 3 * p * sin60);
734 ABS_DOUBLE_TEST(centers4[30](0), -p * cos60);
735 ABS_DOUBLE_TEST(centers4[30](1), 3 * p * sin60);
736 ABS_DOUBLE_TEST(centers4[31](0), -p - p * cos60);
737 ABS_DOUBLE_TEST(centers4[31](1), 3 * p * sin60);
738 ABS_DOUBLE_TEST(centers4[32](0), -2 * p);
739 ABS_DOUBLE_TEST(centers4[32](1), 2 * p * sin60);
740 ABS_DOUBLE_TEST(centers4[33](0), -2 * p - p * cos60);
741 ABS_DOUBLE_TEST(centers4[33](1), p * sin60);
742 ABS_DOUBLE_TEST(centers4[34](0), -3 * p);
743 ABS_DOUBLE_TEST(centers4[34](1), (unsigned int)0);
744 ABS_DOUBLE_TEST(centers4[35](0), -2 * p - p * cos60);
745 ABS_DOUBLE_TEST(centers4[35](1), -p * sin60);
746 ABS_DOUBLE_TEST(centers4[36](0), -2 * p);
747 ABS_DOUBLE_TEST(centers4[36](1), -2 * p * sin60);
748
749 for (const auto i : make_range(hl17.nPins()))
750 ABS_DOUBLE_TEST(centers4[i](2), 0.0);
751}
752
753TEST_F(HexagonalLatticeTest, channel_index_shifted)
754{
755 Real bp = 4.0, pp = 0.8, pd = 0.6, wd = 0.05, wp = 50.0;
756 unsigned int nr = 3, a = 2;
757 HexagonalLatticeUtils hl(bp, pp, pd, wd, wp, nr, a);
758
759 // check that the z-coordinate doesn't affect the channel index identification
760 Point pt0(0.06, 0.35, 3.5);
761 Point pt1(-0.47, 0.28, 3.5);
762 Point pt2(-0.26, -0.21, 3.5);
763 Point pt3(-0.12, -0.349, 3.5);
764 Point pt4(0.46, -0.27, 3.5);
765 Point pt5(0.37, 0.6, 3.5);
766
767 EXPECT_EQ(hl.channelIndex(pt0), (unsigned int)0);
768 EXPECT_EQ(hl.channelIndex(pt1), (unsigned int)1);
769 EXPECT_EQ(hl.channelIndex(pt2), (unsigned int)2);
770 EXPECT_EQ(hl.channelIndex(pt3), (unsigned int)3);
771 EXPECT_EQ(hl.channelIndex(pt4), (unsigned int)4);
772 EXPECT_EQ(hl.channelIndex(pt5), (unsigned int)5);
773
774 Point pt6(0.36, 1.06, -7.0);
775 Point pt7(0.11, 0.98, -7.0);
776 Point pt8(-0.43, 1.27, -7.0);
777 Point pt9(-0.81, 0.93, -7.0);
778 Point pt10(-0.75, 0.47, -7.0);
779 Point pt11(-1.06, 0.28, -7.0);
780 Point pt12(-1.16, -0.13, -7.0);
781 Point pt13(-0.73, -0.41, -7.0);
782 Point pt14(-0.73, -0.81, -7.0);
783 Point pt15(-0.46, -1.18, -7.0);
784 Point pt16(0.05, -0.98, -7.0);
785 Point pt17(0.27, -1.00, -7.0);
786 Point pt18(0.72, -0.98, -7.0);
787 Point pt19(0.75, -0.58, -7.0);
788 Point pt20(1.23, -0.23, -7.0);
789 Point pt21(1.17, 0.09, -7.0);
790 Point pt22(0.78, 0.38, -7.0);
791 Point pt23(0.74, 0.84, -7.0);
792
793 EXPECT_EQ(hl.channelIndex(pt6), (unsigned int)6);
794 EXPECT_EQ(hl.channelIndex(pt7), (unsigned int)7);
795 EXPECT_EQ(hl.channelIndex(pt8), (unsigned int)8);
796 EXPECT_EQ(hl.channelIndex(pt9), (unsigned int)9);
797 EXPECT_EQ(hl.channelIndex(pt10), (unsigned int)10);
798 EXPECT_EQ(hl.channelIndex(pt11), (unsigned int)11);
799 EXPECT_EQ(hl.channelIndex(pt12), (unsigned int)12);
800 EXPECT_EQ(hl.channelIndex(pt13), (unsigned int)13);
801 EXPECT_EQ(hl.channelIndex(pt14), (unsigned int)14);
802 EXPECT_EQ(hl.channelIndex(pt15), (unsigned int)15);
803 EXPECT_EQ(hl.channelIndex(pt16), (unsigned int)16);
804 EXPECT_EQ(hl.channelIndex(pt17), (unsigned int)17);
805 EXPECT_EQ(hl.channelIndex(pt18), (unsigned int)18);
806 EXPECT_EQ(hl.channelIndex(pt19), (unsigned int)19);
807 EXPECT_EQ(hl.channelIndex(pt20), (unsigned int)20);
808 EXPECT_EQ(hl.channelIndex(pt21), (unsigned int)21);
809 EXPECT_EQ(hl.channelIndex(pt22), (unsigned int)22);
810 EXPECT_EQ(hl.channelIndex(pt23), (unsigned int)23);
811
812 Point pt24(0.31, 1.44, -0.1);
813 Point pt25(-0.38, 1.61, -0.1);
814 Point pt26(-1.17, 1.52, -0.1);
815 Point pt27(-1.78, 0.38, -0.1);
816 Point pt28(-1.91, -0.42, -0.1);
817 Point pt29(-1.39, -1.24, -0.1);
818 Point pt30(-0.46, -1.74, -0.1);
819 Point pt31(0.18, -1.79, -0.1);
820 Point pt32(1.24, -1.17, -0.1);
821 Point pt33(1.75, -0.57, -0.1);
822 Point pt34(1.51, 0.37, -0.1);
823 Point pt35(1.16, 1.42, -0.1);
824
825 EXPECT_EQ(hl.channelIndex(pt24), (unsigned int)24);
826 EXPECT_EQ(hl.channelIndex(pt25), (unsigned int)25);
827 // EXPECT_EQ(hl.channelIndex(pt26), (unsigned int)26);
828 EXPECT_EQ(hl.channelIndex(pt27), (unsigned int)27);
829 EXPECT_EQ(hl.channelIndex(pt28), (unsigned int)28);
830 EXPECT_EQ(hl.channelIndex(pt29), (unsigned int)29);
831 EXPECT_EQ(hl.channelIndex(pt30), (unsigned int)30);
832 EXPECT_EQ(hl.channelIndex(pt31), (unsigned int)31);
833 EXPECT_EQ(hl.channelIndex(pt32), (unsigned int)32);
834 EXPECT_EQ(hl.channelIndex(pt33), (unsigned int)33);
835 EXPECT_EQ(hl.channelIndex(pt34), (unsigned int)34);
836 EXPECT_EQ(hl.channelIndex(pt35), (unsigned int)35);
837
838 Point pt36(1.05, 1.75, 1.2);
839 Point pt37(-1.02, 1.72, 1.2);
840 Point pt38(-2.03, -0.05, 1.2);
841 Point pt39(-1.01, -1.59, 1.2);
842 Point pt40(0.89, -1.79, 1.2);
843 Point pt41(1.98, 0.12, 1.2);
844
845 EXPECT_EQ(hl.channelIndex(pt36), (unsigned int)36);
846 EXPECT_EQ(hl.channelIndex(pt37), (unsigned int)37);
847 EXPECT_EQ(hl.channelIndex(pt38), (unsigned int)38);
848 EXPECT_EQ(hl.channelIndex(pt39), (unsigned int)39);
849 EXPECT_EQ(hl.channelIndex(pt40), (unsigned int)40);
850 EXPECT_EQ(hl.channelIndex(pt41), (unsigned int)41);
851}
852
854{
855 Real bp = 4.0, pp = 0.8, pd = 0.6, wd = 0.05, wp = 50.0;
856 unsigned int nr = 3, a = 2;
857 HexagonalLatticeUtils hl(bp, pp, pd, wd, wp, nr, a);
858
859 Point pt0(0.06, 0.35, 0.0);
860 Point pt1(-0.47, 0.28, 0.0);
861 Point pt2(-0.26, -0.21, 0.0);
862 Point pt3(-0.12, -0.349, 0.0);
863 Point pt4(0.46, -0.27, 0.0);
864 Point pt5(0.37, 0.6, 0.0);
865 EXPECT_EQ(hl.channelType(pt0), channel_type::interior);
866 EXPECT_EQ(hl.channelType(pt1), channel_type::interior);
867 EXPECT_EQ(hl.channelType(pt2), channel_type::interior);
868 EXPECT_EQ(hl.channelType(pt3), channel_type::interior);
869 EXPECT_EQ(hl.channelType(pt4), channel_type::interior);
870 EXPECT_EQ(hl.channelType(pt5), channel_type::interior);
871 EXPECT_EQ(hl.channelIndex(pt0), (unsigned int)0);
872 EXPECT_EQ(hl.channelIndex(pt1), (unsigned int)1);
873 EXPECT_EQ(hl.channelIndex(pt2), (unsigned int)2);
874 EXPECT_EQ(hl.channelIndex(pt3), (unsigned int)3);
875 EXPECT_EQ(hl.channelIndex(pt4), (unsigned int)4);
876 EXPECT_EQ(hl.channelIndex(pt5), (unsigned int)5);
877
878 // check that a point exactly on the edge falls into one channel
879 pt0 = {0.5 * 0.8 * 0.5, 0.5 * 0.8 * std::sqrt(3.0) / 2.0, 0.0};
880 EXPECT_EQ(hl.channelIndex(pt0), (unsigned int)0);
881
882 Point pt6(0.36, 1.06, 0.0);
883 Point pt7(0.11, 0.98, 0.0);
884 Point pt8(-0.43, 1.27, 0.0);
885 Point pt9(-0.81, 0.93, 0.0);
886 Point pt10(-0.75, 0.47, 0.0);
887 Point pt11(-1.06, 0.28, 0.0);
888 Point pt12(-1.16, -0.13, 0.0);
889 Point pt13(-0.73, -0.41, 0.0);
890 Point pt14(-0.73, -0.81, 0.0);
891 Point pt15(-0.46, -1.18, 0.0);
892 Point pt16(0.05, -0.98, 0.0);
893 Point pt17(0.27, -1.00, 0.0);
894 Point pt18(0.72, -0.98, 0.0);
895 Point pt19(0.75, -0.58, 0.0);
896 Point pt20(1.23, -0.23, 0.0);
897 Point pt21(1.17, 0.09, 0.0);
898 Point pt22(0.78, 0.38, 0.0);
899 Point pt23(0.74, 0.84, 0.0);
900
901 EXPECT_EQ(hl.channelType(pt6), channel_type::interior);
902 EXPECT_EQ(hl.channelType(pt7), channel_type::interior);
903 EXPECT_EQ(hl.channelType(pt8), channel_type::interior);
904 EXPECT_EQ(hl.channelType(pt9), channel_type::interior);
905 EXPECT_EQ(hl.channelType(pt10), channel_type::interior);
906 EXPECT_EQ(hl.channelType(pt11), channel_type::interior);
907 EXPECT_EQ(hl.channelType(pt12), channel_type::interior);
908 EXPECT_EQ(hl.channelType(pt13), channel_type::interior);
909 EXPECT_EQ(hl.channelType(pt14), channel_type::interior);
910 EXPECT_EQ(hl.channelType(pt15), channel_type::interior);
911 EXPECT_EQ(hl.channelType(pt16), channel_type::interior);
912 EXPECT_EQ(hl.channelType(pt17), channel_type::interior);
913 EXPECT_EQ(hl.channelType(pt18), channel_type::interior);
914 EXPECT_EQ(hl.channelType(pt19), channel_type::interior);
915 EXPECT_EQ(hl.channelType(pt20), channel_type::interior);
916 EXPECT_EQ(hl.channelType(pt21), channel_type::interior);
917 EXPECT_EQ(hl.channelType(pt22), channel_type::interior);
918 EXPECT_EQ(hl.channelType(pt23), channel_type::interior);
919 EXPECT_EQ(hl.channelIndex(pt6), (unsigned int)6);
920 EXPECT_EQ(hl.channelIndex(pt7), (unsigned int)7);
921 EXPECT_EQ(hl.channelIndex(pt8), (unsigned int)8);
922 EXPECT_EQ(hl.channelIndex(pt9), (unsigned int)9);
923 EXPECT_EQ(hl.channelIndex(pt10), (unsigned int)10);
924 EXPECT_EQ(hl.channelIndex(pt11), (unsigned int)11);
925 EXPECT_EQ(hl.channelIndex(pt12), (unsigned int)12);
926 EXPECT_EQ(hl.channelIndex(pt13), (unsigned int)13);
927 EXPECT_EQ(hl.channelIndex(pt14), (unsigned int)14);
928 EXPECT_EQ(hl.channelIndex(pt15), (unsigned int)15);
929 EXPECT_EQ(hl.channelIndex(pt16), (unsigned int)16);
930 EXPECT_EQ(hl.channelIndex(pt17), (unsigned int)17);
931 EXPECT_EQ(hl.channelIndex(pt18), (unsigned int)18);
932 EXPECT_EQ(hl.channelIndex(pt19), (unsigned int)19);
933 EXPECT_EQ(hl.channelIndex(pt20), (unsigned int)20);
934 EXPECT_EQ(hl.channelIndex(pt21), (unsigned int)21);
935 EXPECT_EQ(hl.channelIndex(pt22), (unsigned int)22);
936 EXPECT_EQ(hl.channelIndex(pt23), (unsigned int)23);
937
938 Point pt24(0.31, 1.44, 0.0);
939 Point pt25(-0.38, 1.61, 0.0);
940 Point pt26(-1.17, 1.52, 0.0);
941 Point pt27(-1.78, 0.38, 0.0);
942 Point pt28(-1.91, -0.42, 0.0);
943 Point pt29(-1.39, -1.24, 0.0);
944 Point pt30(-0.46, -1.74, 0.0);
945 Point pt31(0.18, -1.79, 0.0);
946 Point pt32(1.24, -1.17, 0.0);
947 Point pt33(1.75, -0.57, 0.0);
948 Point pt34(1.51, 0.37, 0.0);
949 Point pt35(1.16, 1.42, 0.0);
950
951 EXPECT_EQ(hl.channelType(pt24), channel_type::edge);
952 EXPECT_EQ(hl.channelType(pt25), channel_type::edge);
953 EXPECT_EQ(hl.channelType(pt26), channel_type::edge);
954 EXPECT_EQ(hl.channelType(pt27), channel_type::edge);
955 EXPECT_EQ(hl.channelType(pt28), channel_type::edge);
956 EXPECT_EQ(hl.channelType(pt29), channel_type::edge);
957 EXPECT_EQ(hl.channelType(pt30), channel_type::edge);
958 EXPECT_EQ(hl.channelType(pt31), channel_type::edge);
959 EXPECT_EQ(hl.channelType(pt32), channel_type::edge);
960 EXPECT_EQ(hl.channelType(pt33), channel_type::edge);
961 EXPECT_EQ(hl.channelType(pt34), channel_type::edge);
962 EXPECT_EQ(hl.channelType(pt35), channel_type::edge);
963 EXPECT_EQ(hl.channelIndex(pt24), (unsigned int)24);
964 EXPECT_EQ(hl.channelIndex(pt25), (unsigned int)25);
965 // EXPECT_EQ(hl.channelIndex(pt26), (unsigned int)26);
966 EXPECT_EQ(hl.channelIndex(pt27), (unsigned int)27);
967 EXPECT_EQ(hl.channelIndex(pt28), (unsigned int)28);
968 EXPECT_EQ(hl.channelIndex(pt29), (unsigned int)29);
969 EXPECT_EQ(hl.channelIndex(pt30), (unsigned int)30);
970 EXPECT_EQ(hl.channelIndex(pt31), (unsigned int)31);
971 EXPECT_EQ(hl.channelIndex(pt32), (unsigned int)32);
972 EXPECT_EQ(hl.channelIndex(pt33), (unsigned int)33);
973 EXPECT_EQ(hl.channelIndex(pt34), (unsigned int)34);
974 EXPECT_EQ(hl.channelIndex(pt35), (unsigned int)35);
975
976 Point pt36(1.05, 1.75, 0.0);
977 Point pt37(-1.02, 1.72, 0.0);
978 Point pt38(-2.03, -0.05, 0.0);
979 Point pt39(-1.01, -1.59, 0.0);
980 Point pt40(0.89, -1.79, 0.0);
981 Point pt41(1.98, 0.12, 0.0);
982
983 EXPECT_EQ(hl.channelType(pt36), channel_type::corner);
984 EXPECT_EQ(hl.channelType(pt37), channel_type::corner);
985 EXPECT_EQ(hl.channelType(pt38), channel_type::corner);
986 EXPECT_EQ(hl.channelType(pt39), channel_type::corner);
987 EXPECT_EQ(hl.channelType(pt40), channel_type::corner);
988 EXPECT_EQ(hl.channelType(pt41), channel_type::corner);
989 EXPECT_EQ(hl.channelIndex(pt36), (unsigned int)36);
990 EXPECT_EQ(hl.channelIndex(pt37), (unsigned int)37);
991 EXPECT_EQ(hl.channelIndex(pt38), (unsigned int)38);
992 EXPECT_EQ(hl.channelIndex(pt39), (unsigned int)39);
993 EXPECT_EQ(hl.channelIndex(pt40), (unsigned int)40);
994 EXPECT_EQ(hl.channelIndex(pt41), (unsigned int)41);
995}
996
998{
999 Real bp = 4.0, pp = 0.8, pd = 0.6, wd = 0.05, wp = 50.0;
1000 unsigned int nr = 1, a = 2;
1001 HexagonalLatticeUtils hl(bp, pp, pd, wd, wp, nr, a);
1002 const auto & gi = hl.gapIndices();
1003 const auto & lg = hl.localToGlobalGaps();
1004
1005 EXPECT_EQ(hl.nInteriorGaps(), (unsigned int)0);
1006
1007 int i = 0;
1008 EXPECT_EQ(gi[i].first, 0);
1009 EXPECT_EQ(gi[i++].second, -1);
1010
1011 EXPECT_EQ(gi[i].first, 0);
1012 EXPECT_EQ(gi[i++].second, -2);
1013
1014 EXPECT_EQ(gi[i].first, 0);
1015 EXPECT_EQ(gi[i++].second, -3);
1016
1017 EXPECT_EQ(gi[i].first, 0);
1018 EXPECT_EQ(gi[i++].second, -4);
1019
1020 EXPECT_EQ(gi[i].first, 0);
1021 EXPECT_EQ(gi[i++].second, -5);
1022
1023 EXPECT_EQ(gi[i].first, 0);
1024 EXPECT_EQ(gi[i++].second, -6);
1025
1026 for (unsigned int i = 0; i < hl.nGaps(); ++i)
1027 EXPECT_FALSE(hl.lastGapInRing(i));
1028
1029 i = 0;
1030 EXPECT_EQ(lg[i][0], 5);
1031 EXPECT_EQ(lg[i++][1], 0);
1032
1033 EXPECT_EQ(lg[i][0], 0);
1034 EXPECT_EQ(lg[i++][1], 1);
1035
1036 EXPECT_EQ(lg[i][0], 1);
1037 EXPECT_EQ(lg[i++][1], 2);
1038
1039 EXPECT_EQ(lg[i][0], 2);
1040 EXPECT_EQ(lg[i++][1], 3);
1041
1042 EXPECT_EQ(lg[i][0], 3);
1043 EXPECT_EQ(lg[i++][1], 4);
1044
1045 EXPECT_EQ(lg[i][0], 4);
1046 EXPECT_EQ(lg[i++][1], 5);
1047}
1048
1050{
1051 Real bp = 4.0, pp = 0.8, pd = 0.6, wd = 0.05, wp = 50.0;
1052 unsigned int nr = 2, a = 2;
1053 HexagonalLatticeUtils hl(bp, pp, pd, wd, wp, nr, a);
1054 const auto & gi = hl.gapIndices();
1055 const auto & lg = hl.localToGlobalGaps();
1056
1057 EXPECT_EQ(hl.nInteriorGaps(), (unsigned int)12);
1058
1059 int i = 0;
1060 EXPECT_EQ(gi[i].first, 0);
1061 EXPECT_EQ(gi[i++].second, 1);
1062
1063 EXPECT_EQ(gi[i].first, 0);
1064 EXPECT_EQ(gi[i++].second, 2);
1065
1066 EXPECT_EQ(gi[i].first, 0);
1067 EXPECT_EQ(gi[i++].second, 3);
1068
1069 EXPECT_EQ(gi[i].first, 0);
1070 EXPECT_EQ(gi[i++].second, 4);
1071
1072 EXPECT_EQ(gi[i].first, 0);
1073 EXPECT_EQ(gi[i++].second, 5);
1074
1075 EXPECT_EQ(gi[i].first, 0);
1076 EXPECT_EQ(gi[i++].second, 6);
1077
1078 EXPECT_EQ(gi[i].first, 1);
1079 EXPECT_EQ(gi[i++].second, 2);
1080
1081 EXPECT_EQ(gi[i].first, 1);
1082 EXPECT_EQ(gi[i++].second, 6);
1083
1084 EXPECT_EQ(gi[i].first, 2);
1085 EXPECT_EQ(gi[i++].second, 3);
1086
1087 EXPECT_EQ(gi[i].first, 3);
1088 EXPECT_EQ(gi[i++].second, 4);
1089
1090 EXPECT_EQ(gi[i].first, 4);
1091 EXPECT_EQ(gi[i++].second, 5);
1092
1093 EXPECT_EQ(gi[i].first, 5);
1094 EXPECT_EQ(gi[i++].second, 6);
1095
1096 EXPECT_EQ(gi[i].first, 1);
1097 EXPECT_EQ(gi[i++].second, -1);
1098
1099 EXPECT_EQ(gi[i].first, 2);
1100 EXPECT_EQ(gi[i++].second, -1);
1101
1102 EXPECT_EQ(gi[i].first, 2);
1103 EXPECT_EQ(gi[i++].second, -2);
1104
1105 EXPECT_EQ(gi[i].first, 3);
1106 EXPECT_EQ(gi[i++].second, -2);
1107
1108 EXPECT_EQ(gi[i].first, 3);
1109 EXPECT_EQ(gi[i++].second, -3);
1110
1111 EXPECT_EQ(gi[i].first, 4);
1112 EXPECT_EQ(gi[i++].second, -3);
1113
1114 EXPECT_EQ(gi[i].first, 4);
1115 EXPECT_EQ(gi[i++].second, -4);
1116
1117 EXPECT_EQ(gi[i].first, 5);
1118 EXPECT_EQ(gi[i++].second, -4);
1119
1120 EXPECT_EQ(gi[i].first, 5);
1121 EXPECT_EQ(gi[i++].second, -5);
1122
1123 EXPECT_EQ(gi[i].first, 6);
1124 EXPECT_EQ(gi[i++].second, -5);
1125
1126 EXPECT_EQ(gi[i].first, 6);
1127 EXPECT_EQ(gi[i++].second, -6);
1128
1129 EXPECT_EQ(gi[i].first, 1);
1130 EXPECT_EQ(gi[i++].second, -6);
1131
1132 for (unsigned int i = 0; i < hl.nGaps(); ++i)
1133 {
1134 if (i == 7)
1135 EXPECT_TRUE(hl.lastGapInRing(i));
1136 else
1137 EXPECT_FALSE(hl.lastGapInRing(i));
1138 }
1139
1140 i = 0;
1141 EXPECT_EQ(lg[i][0], 0);
1142 EXPECT_EQ(lg[i][1], 6);
1143 EXPECT_EQ(lg[i++][2], 1);
1144
1145 EXPECT_EQ(lg[i][0], 1);
1146 EXPECT_EQ(lg[i][1], 8);
1147 EXPECT_EQ(lg[i++][2], 2);
1148
1149 EXPECT_EQ(lg[i][0], 2);
1150 EXPECT_EQ(lg[i][1], 9);
1151 EXPECT_EQ(lg[i++][2], 3);
1152
1153 EXPECT_EQ(lg[i][0], 3);
1154 EXPECT_EQ(lg[i][1], 10);
1155 EXPECT_EQ(lg[i++][2], 4);
1156
1157 EXPECT_EQ(lg[i][0], 4);
1158 EXPECT_EQ(lg[i][1], 11);
1159 EXPECT_EQ(lg[i++][2], 5);
1160
1161 EXPECT_EQ(lg[i][0], 5);
1162 EXPECT_EQ(lg[i][1], 7);
1163 EXPECT_EQ(lg[i++][2], 0);
1164
1165 EXPECT_EQ(lg[i][0], 6);
1166 EXPECT_EQ(lg[i][1], 13);
1167 EXPECT_EQ(lg[i++][2], 12);
1168
1169 EXPECT_EQ(lg[i][0], 8);
1170 EXPECT_EQ(lg[i][1], 15);
1171 EXPECT_EQ(lg[i++][2], 14);
1172
1173 EXPECT_EQ(lg[i][0], 9);
1174 EXPECT_EQ(lg[i][1], 17);
1175 EXPECT_EQ(lg[i++][2], 16);
1176
1177 EXPECT_EQ(lg[i][0], 10);
1178 EXPECT_EQ(lg[i][1], 19);
1179 EXPECT_EQ(lg[i++][2], 18);
1180
1181 EXPECT_EQ(lg[i][0], 11);
1182 EXPECT_EQ(lg[i][1], 21);
1183 EXPECT_EQ(lg[i++][2], 20);
1184
1185 EXPECT_EQ(lg[i][0], 7);
1186 EXPECT_EQ(lg[i][1], 23);
1187 EXPECT_EQ(lg[i++][2], 22);
1188
1189 EXPECT_EQ(lg[i][0], 23);
1190 EXPECT_EQ(lg[i++][1], 12);
1191
1192 EXPECT_EQ(lg[i][0], 13);
1193 EXPECT_EQ(lg[i++][1], 14);
1194
1195 EXPECT_EQ(lg[i][0], 15);
1196 EXPECT_EQ(lg[i++][1], 16);
1197
1198 EXPECT_EQ(lg[i][0], 17);
1199 EXPECT_EQ(lg[i++][1], 18);
1200
1201 EXPECT_EQ(lg[i][0], 19);
1202 EXPECT_EQ(lg[i++][1], 20);
1203
1204 EXPECT_EQ(lg[i][0], 21);
1205 EXPECT_EQ(lg[i++][1], 22);
1206}
1207
1209{
1210 Real bp = 4.0, pp = 0.8, pd = 0.6, wd = 0.05, wp = 50.0;
1211 unsigned int nr = 3, a = 2;
1212 HexagonalLatticeUtils hl(bp, pp, pd, wd, wp, nr, a);
1213 const auto & gi = hl.gapIndices();
1214 const auto & lg = hl.localToGlobalGaps();
1215
1216 EXPECT_EQ(hl.nInteriorGaps(), (unsigned int)42);
1217
1218 int i = 0;
1219 EXPECT_EQ(gi[i].first, 0);
1220 EXPECT_EQ(gi[i++].second, 1);
1221
1222 EXPECT_EQ(gi[i].first, 0);
1223 EXPECT_EQ(gi[i++].second, 2);
1224
1225 EXPECT_EQ(gi[i].first, 0);
1226 EXPECT_EQ(gi[i++].second, 3);
1227
1228 EXPECT_EQ(gi[i].first, 0);
1229 EXPECT_EQ(gi[i++].second, 4);
1230
1231 EXPECT_EQ(gi[i].first, 0);
1232 EXPECT_EQ(gi[i++].second, 5);
1233
1234 EXPECT_EQ(gi[i].first, 0);
1235 EXPECT_EQ(gi[i++].second, 6);
1236
1237 EXPECT_EQ(gi[i].first, 1);
1238 EXPECT_EQ(gi[i++].second, 2);
1239
1240 EXPECT_EQ(gi[i].first, 1);
1241 EXPECT_EQ(gi[i++].second, 6);
1242
1243 EXPECT_EQ(gi[i].first, 1);
1244 EXPECT_EQ(gi[i++].second, 7);
1245
1246 EXPECT_EQ(gi[i].first, 1);
1247 EXPECT_EQ(gi[i++].second, 8);
1248
1249 EXPECT_EQ(gi[i].first, 1);
1250 EXPECT_EQ(gi[i++].second, 18);
1251
1252 EXPECT_EQ(gi[i].first, 2);
1253 EXPECT_EQ(gi[i++].second, 3);
1254
1255 EXPECT_EQ(gi[i].first, 2);
1256 EXPECT_EQ(gi[i++].second, 8);
1257
1258 EXPECT_EQ(gi[i].first, 2);
1259 EXPECT_EQ(gi[i++].second, 9);
1260
1261 EXPECT_EQ(gi[i].first, 2);
1262 EXPECT_EQ(gi[i++].second, 10);
1263
1264 EXPECT_EQ(gi[i].first, 3);
1265 EXPECT_EQ(gi[i++].second, 4);
1266
1267 EXPECT_EQ(gi[i].first, 3);
1268 EXPECT_EQ(gi[i++].second, 10);
1269
1270 EXPECT_EQ(gi[i].first, 3);
1271 EXPECT_EQ(gi[i++].second, 11);
1272
1273 EXPECT_EQ(gi[i].first, 3);
1274 EXPECT_EQ(gi[i++].second, 12);
1275
1276 EXPECT_EQ(gi[i].first, 4);
1277 EXPECT_EQ(gi[i++].second, 5);
1278
1279 EXPECT_EQ(gi[i].first, 4);
1280 EXPECT_EQ(gi[i++].second, 12);
1281
1282 EXPECT_EQ(gi[i].first, 4);
1283 EXPECT_EQ(gi[i++].second, 13);
1284
1285 EXPECT_EQ(gi[i].first, 4);
1286 EXPECT_EQ(gi[i++].second, 14);
1287
1288 EXPECT_EQ(gi[i].first, 5);
1289 EXPECT_EQ(gi[i++].second, 6);
1290
1291 EXPECT_EQ(gi[i].first, 5);
1292 EXPECT_EQ(gi[i++].second, 14);
1293
1294 EXPECT_EQ(gi[i].first, 5);
1295 EXPECT_EQ(gi[i++].second, 15);
1296
1297 EXPECT_EQ(gi[i].first, 5);
1298 EXPECT_EQ(gi[i++].second, 16);
1299
1300 EXPECT_EQ(gi[i].first, 6);
1301 EXPECT_EQ(gi[i++].second, 16);
1302
1303 EXPECT_EQ(gi[i].first, 6);
1304 EXPECT_EQ(gi[i++].second, 17);
1305
1306 EXPECT_EQ(gi[i].first, 6);
1307 EXPECT_EQ(gi[i++].second, 18);
1308
1309 EXPECT_EQ(gi[i].first, 7);
1310 EXPECT_EQ(gi[i++].second, 8);
1311
1312 EXPECT_EQ(gi[i].first, 7);
1313 EXPECT_EQ(gi[i++].second, 18);
1314
1315 EXPECT_EQ(gi[i].first, 8);
1316 EXPECT_EQ(gi[i++].second, 9);
1317
1318 EXPECT_EQ(gi[i].first, 9);
1319 EXPECT_EQ(gi[i++].second, 10);
1320
1321 EXPECT_EQ(gi[i].first, 10);
1322 EXPECT_EQ(gi[i++].second, 11);
1323
1324 EXPECT_EQ(gi[i].first, 11);
1325 EXPECT_EQ(gi[i++].second, 12);
1326
1327 EXPECT_EQ(gi[i].first, 12);
1328 EXPECT_EQ(gi[i++].second, 13);
1329
1330 EXPECT_EQ(gi[i].first, 13);
1331 EXPECT_EQ(gi[i++].second, 14);
1332
1333 EXPECT_EQ(gi[i].first, 14);
1334 EXPECT_EQ(gi[i++].second, 15);
1335
1336 EXPECT_EQ(gi[i].first, 15);
1337 EXPECT_EQ(gi[i++].second, 16);
1338
1339 EXPECT_EQ(gi[i].first, 16);
1340 EXPECT_EQ(gi[i++].second, 17);
1341
1342 EXPECT_EQ(gi[i].first, 17);
1343 EXPECT_EQ(gi[i++].second, 18);
1344
1345 EXPECT_EQ(gi[i].first, 7);
1346 EXPECT_EQ(gi[i++].second, -1);
1347
1348 EXPECT_EQ(gi[i].first, 8);
1349 EXPECT_EQ(gi[i++].second, -1);
1350
1351 EXPECT_EQ(gi[i].first, 9);
1352 EXPECT_EQ(gi[i++].second, -1);
1353
1354 EXPECT_EQ(gi[i].first, 9);
1355 EXPECT_EQ(gi[i++].second, -2);
1356
1357 EXPECT_EQ(gi[i].first, 10);
1358 EXPECT_EQ(gi[i++].second, -2);
1359
1360 EXPECT_EQ(gi[i].first, 11);
1361 EXPECT_EQ(gi[i++].second, -2);
1362
1363 EXPECT_EQ(gi[i].first, 11);
1364 EXPECT_EQ(gi[i++].second, -3);
1365
1366 EXPECT_EQ(gi[i].first, 12);
1367 EXPECT_EQ(gi[i++].second, -3);
1368
1369 EXPECT_EQ(gi[i].first, 13);
1370 EXPECT_EQ(gi[i++].second, -3);
1371
1372 EXPECT_EQ(gi[i].first, 13);
1373 EXPECT_EQ(gi[i++].second, -4);
1374
1375 EXPECT_EQ(gi[i].first, 14);
1376 EXPECT_EQ(gi[i++].second, -4);
1377
1378 EXPECT_EQ(gi[i].first, 15);
1379 EXPECT_EQ(gi[i++].second, -4);
1380
1381 EXPECT_EQ(gi[i].first, 15);
1382 EXPECT_EQ(gi[i++].second, -5);
1383
1384 EXPECT_EQ(gi[i].first, 16);
1385 EXPECT_EQ(gi[i++].second, -5);
1386
1387 EXPECT_EQ(gi[i].first, 17);
1388 EXPECT_EQ(gi[i++].second, -5);
1389
1390 EXPECT_EQ(gi[i].first, 17);
1391 EXPECT_EQ(gi[i++].second, -6);
1392
1393 EXPECT_EQ(gi[i].first, 18);
1394 EXPECT_EQ(gi[i++].second, -6);
1395
1396 EXPECT_EQ(gi[i].first, 7);
1397 EXPECT_EQ(gi[i++].second, -6);
1398
1399 for (unsigned int i = 0; i < hl.nGaps(); ++i)
1400 {
1401 if (i == 7 || i == 31)
1402 EXPECT_TRUE(hl.lastGapInRing(i));
1403 else
1404 EXPECT_FALSE(hl.lastGapInRing(i));
1405 }
1406
1407 i = 0;
1408 EXPECT_EQ(lg[i][0], 0);
1409 EXPECT_EQ(lg[i][1], 6);
1410 EXPECT_EQ(lg[i++][2], 1);
1411
1412 EXPECT_EQ(lg[i][0], 1);
1413 EXPECT_EQ(lg[i][1], 11);
1414 EXPECT_EQ(lg[i++][2], 2);
1415
1416 EXPECT_EQ(lg[i][0], 2);
1417 EXPECT_EQ(lg[i][1], 15);
1418 EXPECT_EQ(lg[i++][2], 3);
1419
1420 EXPECT_EQ(lg[i][0], 3);
1421 EXPECT_EQ(lg[i][1], 19);
1422 EXPECT_EQ(lg[i++][2], 4);
1423
1424 EXPECT_EQ(lg[i][0], 4);
1425 EXPECT_EQ(lg[i][1], 23);
1426 EXPECT_EQ(lg[i++][2], 5);
1427
1428 EXPECT_EQ(lg[i][0], 5);
1429 EXPECT_EQ(lg[i][1], 7);
1430 EXPECT_EQ(lg[i++][2], 0);
1431
1432 EXPECT_EQ(lg[i][0], 8);
1433 EXPECT_EQ(lg[i][1], 30);
1434 EXPECT_EQ(lg[i++][2], 9);
1435
1436 EXPECT_EQ(lg[i][0], 12);
1437 EXPECT_EQ(lg[i][1], 6);
1438 EXPECT_EQ(lg[i++][2], 9);
1439
1440 EXPECT_EQ(lg[i][0], 12);
1441 EXPECT_EQ(lg[i][1], 32);
1442 EXPECT_EQ(lg[i++][2], 13);
1443
1444 EXPECT_EQ(lg[i][0], 13);
1445 EXPECT_EQ(lg[i][1], 33);
1446 EXPECT_EQ(lg[i++][2], 14);
1447
1448 EXPECT_EQ(lg[i][0], 16);
1449 EXPECT_EQ(lg[i][1], 11);
1450 EXPECT_EQ(lg[i++][2], 14);
1451
1452 EXPECT_EQ(lg[i][0], 16);
1453 EXPECT_EQ(lg[i][1], 34);
1454 EXPECT_EQ(lg[i++][2], 17);
1455
1456 EXPECT_EQ(lg[i][0], 17);
1457 EXPECT_EQ(lg[i][1], 35);
1458 EXPECT_EQ(lg[i++][2], 18);
1459
1460 EXPECT_EQ(lg[i][0], 20);
1461 EXPECT_EQ(lg[i][1], 15);
1462 EXPECT_EQ(lg[i++][2], 18);
1463
1464 EXPECT_EQ(lg[i][0], 20);
1465 EXPECT_EQ(lg[i][1], 36);
1466 EXPECT_EQ(lg[i++][2], 21);
1467
1468 EXPECT_EQ(lg[i][0], 21);
1469 EXPECT_EQ(lg[i][1], 37);
1470 EXPECT_EQ(lg[i++][2], 22);
1471
1472 EXPECT_EQ(lg[i][0], 24);
1473 EXPECT_EQ(lg[i][1], 19);
1474 EXPECT_EQ(lg[i++][2], 22);
1475
1476 EXPECT_EQ(lg[i][0], 24);
1477 EXPECT_EQ(lg[i][1], 38);
1478 EXPECT_EQ(lg[i++][2], 25);
1479
1480 EXPECT_EQ(lg[i][0], 25);
1481 EXPECT_EQ(lg[i][1], 39);
1482 EXPECT_EQ(lg[i++][2], 26);
1483
1484 EXPECT_EQ(lg[i][0], 27);
1485 EXPECT_EQ(lg[i][1], 23);
1486 EXPECT_EQ(lg[i++][2], 26);
1487
1488 EXPECT_EQ(lg[i][0], 27);
1489 EXPECT_EQ(lg[i][1], 40);
1490 EXPECT_EQ(lg[i++][2], 28);
1491
1492 EXPECT_EQ(lg[i][0], 28);
1493 EXPECT_EQ(lg[i][1], 41);
1494 EXPECT_EQ(lg[i++][2], 29);
1495
1496 EXPECT_EQ(lg[i][0], 10);
1497 EXPECT_EQ(lg[i][1], 7);
1498 EXPECT_EQ(lg[i++][2], 29);
1499
1500 EXPECT_EQ(lg[i][0], 10);
1501 EXPECT_EQ(lg[i][1], 31);
1502 EXPECT_EQ(lg[i++][2], 8);
1503
1504 // edge channels
1505 EXPECT_EQ(lg[i][0], 30);
1506 EXPECT_EQ(lg[i][1], 43);
1507 EXPECT_EQ(lg[i++][2], 42);
1508
1509 EXPECT_EQ(lg[i][0], 32);
1510 EXPECT_EQ(lg[i][1], 44);
1511 EXPECT_EQ(lg[i++][2], 43);
1512
1513 EXPECT_EQ(lg[i][0], 33);
1514 EXPECT_EQ(lg[i][1], 46);
1515 EXPECT_EQ(lg[i++][2], 45);
1516
1517 EXPECT_EQ(lg[i][0], 34);
1518 EXPECT_EQ(lg[i][1], 47);
1519 EXPECT_EQ(lg[i++][2], 46);
1520
1521 EXPECT_EQ(lg[i][0], 35);
1522 EXPECT_EQ(lg[i][1], 49);
1523 EXPECT_EQ(lg[i++][2], 48);
1524
1525 EXPECT_EQ(lg[i][0], 36);
1526 EXPECT_EQ(lg[i][1], 50);
1527 EXPECT_EQ(lg[i++][2], 49);
1528
1529 EXPECT_EQ(lg[i][0], 37);
1530 EXPECT_EQ(lg[i][1], 52);
1531 EXPECT_EQ(lg[i++][2], 51);
1532
1533 EXPECT_EQ(lg[i][0], 38);
1534 EXPECT_EQ(lg[i][1], 53);
1535 EXPECT_EQ(lg[i++][2], 52);
1536
1537 EXPECT_EQ(lg[i][0], 39);
1538 EXPECT_EQ(lg[i][1], 55);
1539 EXPECT_EQ(lg[i++][2], 54);
1540
1541 EXPECT_EQ(lg[i][0], 40);
1542 EXPECT_EQ(lg[i][1], 56);
1543 EXPECT_EQ(lg[i++][2], 55);
1544
1545 EXPECT_EQ(lg[i][0], 41);
1546 EXPECT_EQ(lg[i][1], 58);
1547 EXPECT_EQ(lg[i++][2], 57);
1548
1549 EXPECT_EQ(lg[i][0], 31);
1550 EXPECT_EQ(lg[i][1], 59);
1551 EXPECT_EQ(lg[i++][2], 58);
1552
1553 // corner channels
1554 EXPECT_EQ(lg[i][0], 59);
1555 EXPECT_EQ(lg[i++][1], 42);
1556
1557 EXPECT_EQ(lg[i][0], 44);
1558 EXPECT_EQ(lg[i++][1], 45);
1559
1560 EXPECT_EQ(lg[i][0], 47);
1561 EXPECT_EQ(lg[i++][1], 48);
1562
1563 EXPECT_EQ(lg[i][0], 50);
1564 EXPECT_EQ(lg[i++][1], 51);
1565
1566 EXPECT_EQ(lg[i][0], 53);
1567 EXPECT_EQ(lg[i++][1], 54);
1568
1569 EXPECT_EQ(lg[i][0], 56);
1570 EXPECT_EQ(lg[i++][1], 57);
1571}
1572
1574{
1575 Real bp = 4.0, pp = 0.8, pd = 0.6, wd = 0.05, wp = 50.0;
1576 unsigned int nr = 3, a = 2;
1577 HexagonalLatticeUtils hl(bp, pp, pd, wd, wp, nr, a);
1578
1579 Point pt1(0.23, 0.27, 0.0);
1580 EXPECT_EQ(hl.gapIndex(pt1), (unsigned int)0);
1581
1582 Point pt2(-0.5, 0.29, 0.0);
1583 EXPECT_EQ(hl.gapIndex(pt2), (unsigned int)11);
1584
1585 Point pt3(1.14, 0.275, 0.0);
1586 EXPECT_EQ(hl.gapIndex(pt3), (unsigned int)29);
1587
1588 Point pt4(-0.77, 1.015, 0.0);
1589 EXPECT_EQ(hl.gapIndex(pt4), (unsigned int)13);
1590
1591 Point pt5(-0.84, 0.445, 0.0);
1592 EXPECT_EQ(hl.gapIndex(pt5), (unsigned int)16);
1593
1594 Point pt6(-0.47, 1.55, 0.0);
1595 EXPECT_EQ(hl.gapIndex(pt6), (unsigned int)32);
1596
1597 Point pt7(-0.069, 1.94, 0.0);
1598 EXPECT_EQ(hl.gapIndex(pt7), (unsigned int)43);
1599
1600 Point pt8(-1.22, 1.79, 0.0);
1601 EXPECT_EQ(hl.gapIndex(pt8), (unsigned int)45);
1602
1603 Point pt10(-0.26, -1.61, 0.0);
1604 EXPECT_EQ(hl.gapIndex(pt10), (unsigned int)37);
1605
1606 Point pt11(2.23, 0.03, 0.0);
1607 EXPECT_EQ(hl.gapIndex(pt11), (unsigned int)57);
1608
1609 Point pt12(-1.77, -0.70, 0.0);
1610 EXPECT_EQ(hl.gapIndex(pt12), (unsigned int)49);
1611}
1612
1614{
1615 Real bp = 4.0, pp = 0.8, pd = 0.6, wd = 0.05, wp = 50.0;
1616 unsigned int nr = 1, a = 2;
1617 HexagonalLatticeUtils hl(bp, pp, pd, wd, wp, nr, a);
1618 const auto & normals = hl.gapUnitNormals();
1619 Real sin60 = std::sqrt(3.0) / 2.0;
1620
1621 for (const auto & n : normals)
1622 EXPECT_DOUBLE_EQ(n(2), 0.0);
1623
1624 EXPECT_DOUBLE_EQ(normals[0](0), -1.0);
1625 EXPECT_DOUBLE_EQ(normals[0](1), 0.0);
1626
1627 EXPECT_DOUBLE_EQ(normals[1](0), -0.5);
1628 EXPECT_DOUBLE_EQ(normals[1](1), -sin60);
1629
1630 EXPECT_DOUBLE_EQ(normals[2](0), 0.5);
1631 EXPECT_DOUBLE_EQ(normals[2](1), -sin60);
1632
1633 EXPECT_DOUBLE_EQ(normals[3](0), 1.0);
1634 EXPECT_DOUBLE_EQ(normals[3](1), 0.0);
1635
1636 EXPECT_DOUBLE_EQ(normals[4](0), 0.5);
1637 EXPECT_DOUBLE_EQ(normals[4](1), sin60);
1638
1639 EXPECT_DOUBLE_EQ(normals[5](0), -0.5);
1640 EXPECT_DOUBLE_EQ(normals[5](1), sin60);
1641}
1642
1644{
1645 Real bp = 4.0, pp = 0.8, pd = 0.6, wd = 0.05, wp = 50.0;
1646 unsigned int nr = 2, a = 2;
1647 HexagonalLatticeUtils hl(bp, pp, pd, wd, wp, nr, a);
1648 const auto & normals = hl.gapUnitNormals();
1649 Real sin60 = std::sqrt(3.0) / 2.0;
1650
1651 for (const auto & n : normals)
1652 EXPECT_DOUBLE_EQ(n(2), 0.0);
1653
1654 EXPECT_DOUBLE_EQ(normals[0](0), -sin60);
1655 EXPECT_DOUBLE_EQ(normals[0](1), 0.5);
1656
1657 EXPECT_DOUBLE_EQ(normals[1](0), -sin60);
1658 EXPECT_DOUBLE_EQ(normals[1](1), -0.5);
1659
1660 EXPECT_DOUBLE_EQ(normals[2](0), 0.0);
1661 EXPECT_DOUBLE_EQ(normals[2](1), -1.0);
1662
1663 EXPECT_DOUBLE_EQ(normals[3](0), sin60);
1664 EXPECT_DOUBLE_EQ(normals[3](1), -0.5);
1665
1666 EXPECT_DOUBLE_EQ(normals[4](0), sin60);
1667 EXPECT_DOUBLE_EQ(normals[4](1), 0.5);
1668
1669 EXPECT_DOUBLE_EQ(normals[5](0), 0.0);
1670 EXPECT_DOUBLE_EQ(normals[5](1), 1.0);
1671
1672 EXPECT_DOUBLE_EQ(normals[6](0), 0.0);
1673 EXPECT_DOUBLE_EQ(normals[6](1), -1.0);
1674
1675 EXPECT_DOUBLE_EQ(normals[7](0), -sin60);
1676 EXPECT_DOUBLE_EQ(normals[7](1), -0.5);
1677
1678 EXPECT_DOUBLE_EQ(normals[8](0), sin60);
1679 EXPECT_DOUBLE_EQ(normals[8](1), -0.5);
1680
1681 EXPECT_DOUBLE_EQ(normals[9](0), sin60);
1682 EXPECT_DOUBLE_EQ(normals[9](1), 0.5);
1683
1684 EXPECT_DOUBLE_EQ(normals[10](0), 0.0);
1685 EXPECT_DOUBLE_EQ(normals[10](1), 1.0);
1686
1687 EXPECT_DOUBLE_EQ(normals[11](0), -sin60);
1688 EXPECT_DOUBLE_EQ(normals[11](1), 0.5);
1689
1690 EXPECT_DOUBLE_EQ(normals[12](0), -1.0);
1691 EXPECT_DOUBLE_EQ(normals[12](1), 0.0);
1692
1693 EXPECT_DOUBLE_EQ(normals[13](0), -1.0);
1694 EXPECT_DOUBLE_EQ(normals[13](1), 0.0);
1695
1696 EXPECT_DOUBLE_EQ(normals[14](0), -0.5);
1697 EXPECT_DOUBLE_EQ(normals[14](1), -sin60);
1698
1699 EXPECT_DOUBLE_EQ(normals[15](0), -0.5);
1700 EXPECT_DOUBLE_EQ(normals[15](1), -sin60);
1701
1702 EXPECT_DOUBLE_EQ(normals[16](0), 0.5);
1703 EXPECT_DOUBLE_EQ(normals[16](1), -sin60);
1704
1705 EXPECT_DOUBLE_EQ(normals[17](0), 0.5);
1706 EXPECT_DOUBLE_EQ(normals[17](1), -sin60);
1707
1708 EXPECT_DOUBLE_EQ(normals[18](0), 1.0);
1709 EXPECT_DOUBLE_EQ(normals[18](1), 0.0);
1710
1711 EXPECT_DOUBLE_EQ(normals[19](0), 1.0);
1712 EXPECT_DOUBLE_EQ(normals[19](1), 0.0);
1713
1714 EXPECT_DOUBLE_EQ(normals[20](0), 0.5);
1715 EXPECT_DOUBLE_EQ(normals[20](1), sin60);
1716
1717 EXPECT_DOUBLE_EQ(normals[21](0), 0.5);
1718 EXPECT_DOUBLE_EQ(normals[21](1), sin60);
1719
1720 EXPECT_DOUBLE_EQ(normals[22](0), -0.5);
1721 EXPECT_DOUBLE_EQ(normals[22](1), sin60);
1722
1723 EXPECT_DOUBLE_EQ(normals[23](0), -0.5);
1724 EXPECT_DOUBLE_EQ(normals[23](1), sin60);
1725}
1726
1728{
1729 Real bp = 4.0, pp = 0.8, pd = 0.6, wd = 0.05, wp = 50.0;
1730 unsigned int nr = 3, a = 2;
1731 HexagonalLatticeUtils hl(bp, pp, pd, wd, wp, nr, a);
1732 const auto & normals = hl.gapUnitNormals();
1733 Real sin60 = std::sqrt(3.0) / 2.0;
1734
1735 for (const auto & n : normals)
1736 EXPECT_DOUBLE_EQ(n(2), 0.0);
1737
1738 EXPECT_DOUBLE_EQ(normals[0](0), -sin60);
1739 EXPECT_DOUBLE_EQ(normals[0](1), 0.5);
1740
1741 EXPECT_DOUBLE_EQ(normals[1](0), -sin60);
1742 EXPECT_DOUBLE_EQ(normals[1](1), -0.5);
1743
1744 EXPECT_DOUBLE_EQ(normals[2](0), 0.0);
1745 EXPECT_DOUBLE_EQ(normals[2](1), -1.0);
1746
1747 EXPECT_DOUBLE_EQ(normals[3](0), sin60);
1748 EXPECT_DOUBLE_EQ(normals[3](1), -0.5);
1749
1750 EXPECT_DOUBLE_EQ(normals[4](0), sin60);
1751 EXPECT_DOUBLE_EQ(normals[4](1), 0.5);
1752
1753 EXPECT_DOUBLE_EQ(normals[5](0), 0.0);
1754 EXPECT_DOUBLE_EQ(normals[5](1), 1.0);
1755
1756 EXPECT_DOUBLE_EQ(normals[6](0), 0.0);
1757 EXPECT_DOUBLE_EQ(normals[6](1), -1.0);
1758
1759 EXPECT_DOUBLE_EQ(normals[7](0), -sin60);
1760 EXPECT_DOUBLE_EQ(normals[7](1), -0.5);
1761
1762 EXPECT_DOUBLE_EQ(normals[8](0), -sin60);
1763 EXPECT_DOUBLE_EQ(normals[8](1), 0.5);
1764
1765 EXPECT_DOUBLE_EQ(normals[9](0), -sin60);
1766 EXPECT_DOUBLE_EQ(normals[9](1), -0.5);
1767
1768 EXPECT_DOUBLE_EQ(normals[10](0), 0.0);
1769 EXPECT_DOUBLE_EQ(normals[10](1), 1.0);
1770
1771 EXPECT_DOUBLE_EQ(normals[11](0), sin60);
1772 EXPECT_DOUBLE_EQ(normals[11](1), -0.5);
1773
1774 EXPECT_DOUBLE_EQ(normals[12](0), -sin60);
1775 EXPECT_DOUBLE_EQ(normals[12](1), 0.5);
1776
1777 EXPECT_DOUBLE_EQ(normals[13](0), -sin60);
1778 EXPECT_DOUBLE_EQ(normals[13](1), -0.5);
1779
1780 EXPECT_DOUBLE_EQ(normals[14](0), 0.0);
1781 EXPECT_DOUBLE_EQ(normals[14](1), -1.0);
1782
1783 EXPECT_DOUBLE_EQ(normals[15](0), sin60);
1784 EXPECT_DOUBLE_EQ(normals[15](1), 0.5);
1785
1786 EXPECT_DOUBLE_EQ(normals[16](0), -sin60);
1787 EXPECT_DOUBLE_EQ(normals[16](1), -0.5);
1788
1789 EXPECT_DOUBLE_EQ(normals[17](0), 0.0);
1790 EXPECT_DOUBLE_EQ(normals[17](1), -1.0);
1791
1792 EXPECT_DOUBLE_EQ(normals[18](0), sin60);
1793 EXPECT_DOUBLE_EQ(normals[18](1), -0.5);
1794
1795 EXPECT_DOUBLE_EQ(normals[19](0), 0.0);
1796 EXPECT_DOUBLE_EQ(normals[19](1), 1.0);
1797
1798 EXPECT_DOUBLE_EQ(normals[20](0), 0.0);
1799 EXPECT_DOUBLE_EQ(normals[20](1), -1.0);
1800
1801 EXPECT_DOUBLE_EQ(normals[21](0), sin60);
1802 EXPECT_DOUBLE_EQ(normals[21](1), -0.5);
1803
1804 EXPECT_DOUBLE_EQ(normals[22](0), sin60);
1805 EXPECT_DOUBLE_EQ(normals[22](1), 0.5);
1806
1807 EXPECT_DOUBLE_EQ(normals[23](0), -sin60);
1808 EXPECT_DOUBLE_EQ(normals[23](1), 0.5);
1809
1810 EXPECT_DOUBLE_EQ(normals[24](0), sin60);
1811 EXPECT_DOUBLE_EQ(normals[24](1), -0.5);
1812
1813 EXPECT_DOUBLE_EQ(normals[25](0), sin60);
1814 EXPECT_DOUBLE_EQ(normals[25](1), 0.5);
1815
1816 EXPECT_DOUBLE_EQ(normals[26](0), 0.0);
1817 EXPECT_DOUBLE_EQ(normals[26](1), 1.0);
1818
1819 EXPECT_DOUBLE_EQ(normals[27](0), sin60);
1820 EXPECT_DOUBLE_EQ(normals[27](1), 0.5);
1821
1822 EXPECT_DOUBLE_EQ(normals[28](0), 0.0);
1823 EXPECT_DOUBLE_EQ(normals[28](1), 1.0);
1824
1825 EXPECT_DOUBLE_EQ(normals[29](0), -sin60);
1826 EXPECT_DOUBLE_EQ(normals[29](1), 0.5);
1827
1828 EXPECT_DOUBLE_EQ(normals[30](0), 0.0);
1829 EXPECT_DOUBLE_EQ(normals[30](1), -1.0);
1830
1831 EXPECT_DOUBLE_EQ(normals[31](0), -sin60);
1832 EXPECT_DOUBLE_EQ(normals[31](1), -0.5);
1833
1834 EXPECT_DOUBLE_EQ(normals[32](0), 0.0);
1835 EXPECT_DOUBLE_EQ(normals[32](1), -1.0);
1836
1837 EXPECT_DOUBLE_EQ(normals[33](0), sin60);
1838 EXPECT_DOUBLE_EQ(normals[33](1), -0.5);
1839
1840 EXPECT_DOUBLE_EQ(normals[34](0), sin60);
1841 EXPECT_DOUBLE_EQ(normals[34](1), -0.5);
1842
1843 EXPECT_DOUBLE_EQ(normals[35](0), sin60);
1844 EXPECT_DOUBLE_EQ(normals[35](1), 0.5);
1845
1846 EXPECT_DOUBLE_EQ(normals[36](0), sin60);
1847 EXPECT_DOUBLE_EQ(normals[36](1), 0.5);
1848
1849 EXPECT_DOUBLE_EQ(normals[37](0), 0.0);
1850 EXPECT_DOUBLE_EQ(normals[37](1), 1.0);
1851
1852 EXPECT_DOUBLE_EQ(normals[38](0), 0.0);
1853 EXPECT_DOUBLE_EQ(normals[38](1), 1.0);
1854
1855 EXPECT_DOUBLE_EQ(normals[39](0), -sin60);
1856 EXPECT_DOUBLE_EQ(normals[39](1), 0.5);
1857
1858 EXPECT_DOUBLE_EQ(normals[40](0), -sin60);
1859 EXPECT_DOUBLE_EQ(normals[40](1), 0.5);
1860
1861 EXPECT_DOUBLE_EQ(normals[41](0), -sin60);
1862 EXPECT_DOUBLE_EQ(normals[41](1), -0.5);
1863
1864 EXPECT_DOUBLE_EQ(normals[42](0), -1.0);
1865 EXPECT_DOUBLE_EQ(normals[42](1), 0.0);
1866
1867 EXPECT_DOUBLE_EQ(normals[43](0), -1.0);
1868 EXPECT_DOUBLE_EQ(normals[43](1), 0.0);
1869
1870 EXPECT_DOUBLE_EQ(normals[44](0), -1.0);
1871 EXPECT_DOUBLE_EQ(normals[44](1), 0.0);
1872
1873 EXPECT_DOUBLE_EQ(normals[45](0), -0.5);
1874 EXPECT_DOUBLE_EQ(normals[45](1), -sin60);
1875
1876 EXPECT_DOUBLE_EQ(normals[46](0), -0.5);
1877 EXPECT_DOUBLE_EQ(normals[46](1), -sin60);
1878
1879 EXPECT_DOUBLE_EQ(normals[47](0), -0.5);
1880 EXPECT_DOUBLE_EQ(normals[47](1), -sin60);
1881
1882 EXPECT_DOUBLE_EQ(normals[48](0), 0.5);
1883 EXPECT_DOUBLE_EQ(normals[48](1), -sin60);
1884
1885 EXPECT_DOUBLE_EQ(normals[49](0), 0.5);
1886 EXPECT_DOUBLE_EQ(normals[49](1), -sin60);
1887
1888 EXPECT_DOUBLE_EQ(normals[50](0), 0.5);
1889 EXPECT_DOUBLE_EQ(normals[50](1), -sin60);
1890
1891 EXPECT_DOUBLE_EQ(normals[51](0), 1.0);
1892 EXPECT_DOUBLE_EQ(normals[51](1), 0.0);
1893
1894 EXPECT_DOUBLE_EQ(normals[52](0), 1.0);
1895 EXPECT_DOUBLE_EQ(normals[52](1), 0.0);
1896
1897 EXPECT_DOUBLE_EQ(normals[53](0), 1.0);
1898 EXPECT_DOUBLE_EQ(normals[53](1), 0.0);
1899
1900 EXPECT_DOUBLE_EQ(normals[54](0), 0.5);
1901 EXPECT_DOUBLE_EQ(normals[54](1), sin60);
1902
1903 EXPECT_DOUBLE_EQ(normals[55](0), 0.5);
1904 EXPECT_DOUBLE_EQ(normals[55](1), sin60);
1905
1906 EXPECT_DOUBLE_EQ(normals[56](0), 0.5);
1907 EXPECT_DOUBLE_EQ(normals[56](1), sin60);
1908
1909 EXPECT_DOUBLE_EQ(normals[57](0), -0.5);
1910 EXPECT_DOUBLE_EQ(normals[57](1), sin60);
1911
1912 EXPECT_DOUBLE_EQ(normals[58](0), -0.5);
1913 EXPECT_DOUBLE_EQ(normals[58](1), sin60);
1914
1915 EXPECT_DOUBLE_EQ(normals[59](0), -0.5);
1916 EXPECT_DOUBLE_EQ(normals[59](1), sin60);
1917}
1918
1920{
1921 Real bp = 4.0, pp = 0.8, pd = 0.6, wd = 0.05, wp = 50.0;
1922 unsigned int nr = 2, a = 2;
1923 HexagonalLatticeUtils hl(bp, pp, pd, wd, wp, nr, a);
1924 const auto & pin_corners = hl.pinCenteredCornerCoordinates();
1925 Real sin60 = std::sqrt(3.0) / 2.0;
1926 Real cos60 = 0.5;
1927
1928 // center pin
1929 double side = 0.46188021535170065;
1930 const auto & pin0 = pin_corners[0];
1931 EXPECT_DOUBLE_EQ(pin0[0](0), 0.0);
1932 EXPECT_DOUBLE_EQ(pin0[0](1), side);
1933
1934 EXPECT_DOUBLE_EQ(pin0[1](0), -side * sin60);
1935 EXPECT_DOUBLE_EQ(pin0[1](1), side * cos60);
1936
1937 EXPECT_DOUBLE_EQ(pin0[2](0), -side * sin60);
1938 EXPECT_DOUBLE_EQ(pin0[2](1), -side * cos60);
1939
1940 EXPECT_DOUBLE_EQ(pin0[3](0), (unsigned int)0);
1941 EXPECT_DOUBLE_EQ(pin0[3](1), -side);
1942
1943 EXPECT_DOUBLE_EQ(pin0[4](0), side * sin60);
1944 EXPECT_DOUBLE_EQ(pin0[4](1), -side * cos60);
1945
1946 EXPECT_DOUBLE_EQ(pin0[5](0), side * sin60);
1947 EXPECT_DOUBLE_EQ(pin0[5](1), side * cos60);
1948
1949 // second pin
1950 const auto & pin_centers = hl.pinCenters();
1951 const auto & pin1 = pin_corners[1];
1952 double x = pin_centers[1](0);
1953 double y = pin_centers[1](1);
1954
1955 EXPECT_DOUBLE_EQ(pin1[0](0), x + 0.0);
1956 EXPECT_DOUBLE_EQ(pin1[0](1), y + side);
1957
1958 ABS_DOUBLE_TEST(pin1[1](0), x + -side * sin60);
1959 EXPECT_DOUBLE_EQ(pin1[1](1), y + side * cos60);
1960
1961 ABS_DOUBLE_TEST(pin1[2](0), x + -side * sin60);
1962 EXPECT_DOUBLE_EQ(pin1[2](1), y + -side * cos60);
1963
1964 EXPECT_DOUBLE_EQ(pin1[3](0), x + 0);
1965 EXPECT_DOUBLE_EQ(pin1[3](1), y + -side);
1966
1967 EXPECT_DOUBLE_EQ(pin1[4](0), x + side * sin60);
1968 EXPECT_DOUBLE_EQ(pin1[4](1), y + -side * cos60);
1969
1970 EXPECT_DOUBLE_EQ(pin1[5](0), x + side * sin60);
1971 EXPECT_DOUBLE_EQ(pin1[5](1), y + side * cos60);
1972
1973 // check for bin indexing
1974 Point p(0.07, 0.195, 0.0);
1975 EXPECT_EQ(hl.pinIndex(p), (unsigned int)0);
1976
1977 p = {0.02, 0.42, 0.0};
1978 EXPECT_EQ(hl.pinIndex(p), (unsigned int)0);
1979
1980 p = {0.74, 0.46, 0.0};
1981 EXPECT_EQ(hl.pinIndex(p), (unsigned int)1);
1982
1983 p = {-0.206, 0.668, 0.0};
1984 EXPECT_EQ(hl.pinIndex(p), (unsigned int)2);
1985
1986 p = {-0.99, 0.313, 0.0};
1987 EXPECT_EQ(hl.pinIndex(p), (unsigned int)3);
1988
1989 p = {-0.257, -0.67, 0.0};
1990 EXPECT_EQ(hl.pinIndex(p), (unsigned int)4);
1991
1992 p = {0.67, -0.79, 0.0};
1993 EXPECT_EQ(hl.pinIndex(p), (unsigned int)5);
1994
1995 p = {0.43, 0.0206, 0.0};
1996 EXPECT_EQ(hl.pinIndex(p), (unsigned int)6);
1997
1998 p = {0.85, 0.51, 0.0};
1999 EXPECT_EQ(hl.pinIndex(p), (unsigned int)7);
2000}
2001
2003{
2004 Real bp = 4.0, pp = 0.8, pd = 0.6, wd = 0.05, wp = 50.0;
2005 unsigned int nr = 3, a = 2;
2006 HexagonalLatticeUtils hl(bp, pp, pd, wd, wp, nr, a);
2007 EXPECT_DOUBLE_EQ(hl.bundlePitch(), 4.0);
2008 EXPECT_DOUBLE_EQ(hl.pinPitch(), 0.8);
2009 EXPECT_DOUBLE_EQ(hl.pinDiameter(), 0.6);
2010 EXPECT_DOUBLE_EQ(hl.pinRadius(), 0.3);
2011 EXPECT_DOUBLE_EQ(hl.wireDiameter(), 0.05);
2012 EXPECT_DOUBLE_EQ(hl.wirePitch(), 50.0);
2013}
const std::vector< double > y
const std::vector< double > x
const Real p
TEST_F(HexagonalLatticeTest, rings_and_pins)
Class providing various utility functions related to triangular lattices of pins enclosed in a hexago...
Real wirePitch() const
Get the wire pitch.
Real pinBundleSpacing() const
Get the distance between the outermost pins and the duct walls.
unsigned int nCornerPins() const
Get the number of corner pins.
unsigned int rings(const unsigned int n) const
Get the number of rings for a specified number of pins.
const std::vector< Point > & pinCenters() const
Get the center coordinates of the pins.
unsigned int nInteriorChannels() const
Get the number of interior channels.
unsigned int nInteriorPins() const
Get the number of interior pins.
unsigned int pinIndex(const Point &point) const
Get the pin index given a point.
const std::vector< Point > & gapUnitNormals() const
Get the unit normals for all of the gaps.
Real hydraulicDiameter() const
Get the overall bundle hydraulic diameter.
Real pinPitch() const
Get the pin pitch.
const std::vector< std::vector< unsigned int > > & interiorChannelPinIndices() const
Get the pin indices forming the corners of all interior channels.
unsigned int nEdgePins() const
Get the number of edge pins.
Real interiorWettedArea() const
Get the wetted area of an interior channel per wire pitch.
unsigned int nCornerChannels() const
Get the number of corner channels.
const std::vector< std::pair< int, int > > & gapIndices() const
Get the pin and side indices on each gap.
const std::vector< std::vector< unsigned int > > & cornerChannelPinIndices() const
Get the pin indices forming one of the corners of all corner channels.
unsigned int nChannels() const
Get the total number of channels.
unsigned int lastPinInRing(const unsigned int ring) const
Get the index of the "last" pin in a ring.
Real edgeFlowVolume() const
Get the flow volume of an edge channel per wire pitch.
const std::vector< std::vector< int > > & localToGlobalGaps() const
For each subchannel, get the indices of the gaps that touch that subchannel.
Real wettedArea() const
Get the wetted area of entire bundle per wire pitch.
unsigned int nPins() const
Get the total number of pins for the lattice.
Real cornerWettedArea() const
Get the wetted area of a corner channel per wire pitch.
Real pinDiameter() const
Get the pin diameter.
unsigned int nGaps() const
Get the number of gaps.
Real flowVolume() const
Get the flow volume of the bundle per wire pitch.
bool lastGapInRing(const unsigned int gap_index) const
Whether this gap is the "last" in the ring, i.e.
Real pinRadius() const
Get the pin outer radius.
unsigned int firstPinInRing(const unsigned int ring) const
Get the index of the "first" pin in a ring.
Real cornerFlowVolume() const
Get the flow volume of an corner channel per wire pitch.
const std::vector< std::vector< Point > > & pinCenteredCornerCoordinates() const
Get the corner coordinates of a hexagon surrounding each pin.
unsigned int channelIndex(const Point &point) const
Get the channel index given a point.
Real bundlePitch() const
Get the bundle pitch.
Real interiorFlowVolume() const
Get the flow volume of an interior channel per wire pitch.
const std::vector< std::vector< unsigned int > > & edgeChannelPinIndices() const
Get the pin indices forming two of the corners of all edge channels.
channel_type::ChannelTypeEnum channelType(const Point &p) const
Get the channel type (interior, edge, corner) given a point.
unsigned int nInteriorGaps() const
Get the number of gaps that touch an interior channel.
unsigned int gapIndex(const Point &point) const
Get the index for the gap closest to the point.
unsigned int nEdgeChannels() const
Get the number of edge channels.
Real wireDiameter() const
Get the wire diameter.
Real edgeWettedArea() const
Get the wetted area of an edge channel per wire pitch.
unsigned int pins(const unsigned int n) const
Get the number of pins in a given ring.