184{
186 using std::vector;
187 vector<int> vertex;
188 vector<int> iEdge_01;
189 vector<int> iEdge_12;
190 vector<int> iEdge_23;
191 vector<int> iEdge_30;
192 vector<int> iEdge_04;
193 vector<int> iEdge_14;
194 vector<int> iEdge_25;
195 vector<int> iEdge_35;
196 vector<int> iEdge_45;
197 vector<int> iFace_0123;
198 vector<int> iFace_014;
199 vector<int> iFace_1254;
200 vector<int> iFace_325;
201 vector<int> iFace_0354;
202 vector<int> interiorVolumePoints;
203 vector<int> map;
204
205
206 for (size_t y = 0, index = 0; y < npts; y++)
207 {
208 for (size_t t = 0; t < npts * (npts + 1) / 2; t++, index++)
209 {
210 if (isVertex(t, y, npts))
211 {
212 vertex.push_back(index);
213 }
214 else if (isEdge(t, y, npts))
215 {
216 if (isEdge_01(t, y, npts))
217 {
218 iEdge_01.push_back(index);
219 }
220 else if (isEdge_12(t, y, npts))
221 {
222 iEdge_12.push_back(index);
223 }
224 else if (isEdge_23(t, y, npts))
225 {
226 iEdge_23.push_back(index);
227 }
228 else if (isEdge_30(t, y, npts))
229 {
230 iEdge_30.push_back(index);
231 }
232 else if (isEdge_04(t, y, npts))
233 {
234 iEdge_04.push_back(index);
235 }
236 else if (isEdge_14(t, y, npts))
237 {
238 iEdge_14.push_back(index);
239 }
240 else if (isEdge_25(t, y, npts))
241 {
242 iEdge_25.push_back(index);
243 }
244 else if (isEdge_35(t, y, npts))
245 {
246 iEdge_35.push_back(index);
247 }
248 else if (isEdge_45(t, y, npts))
249 {
250 iEdge_45.push_back(index);
251 }
252 }
253 else if (isFace(t, y, npts))
254 {
255 if (isFace_0123(t, y, npts))
256 {
257 iFace_0123.push_back(index);
258 }
259 else if (isFace_014(t, y, npts))
260 {
261 iFace_014.push_back(index);
262 }
263 else if (isFace_1254(t, y, npts))
264 {
265 iFace_1254.push_back(index);
266 }
267 else if (isFace_325(t, y, npts))
268 {
269 iFace_325.push_back(index);
270 }
271 else if (isFace_0354(t, y, npts))
272 {
273 iFace_0354.push_back(index);
274 }
275 }
276 else
277 {
278 interiorVolumePoints.push_back(index);
279 }
280 }
281 }
282
283
284 std::swap(vertex[2], vertex[4]);
285
286 std::reverse(iEdge_23.begin(), iEdge_23.end());
287 std::reverse(iEdge_30.begin(), iEdge_30.end());
288 std::reverse(iEdge_04.begin(), iEdge_04.end());
289 std::reverse(iEdge_35.begin(), iEdge_35.end());
290
291
292 for (size_t i = 0; i < npts - 2; i++)
293 {
294 for (size_t j = i + 1; j < npts - 2; j++)
295 {
296 std::swap(iFace_1254[i * (npts - 2) + j],
297 iFace_1254[j * (npts - 2) + i]);
298 }
299 }
300 for (size_t i = 0; i < npts - 2; i++)
301 {
302 std::reverse(iFace_0354.begin() + (i * (npts - 2)),
303 iFace_0354.begin() + (i * (npts - 2) + npts - 2));
304 }
305 for (size_t i = 0; i < npts - 2; i++)
306 {
307 for (size_t j = i + 1; j < npts - 2; j++)
308 {
309 std::swap(iFace_0354[i * (npts - 2) + j],
310 iFace_0354[j * (npts - 2) + i]);
311 }
312 }
313
314 for (size_t n = 0; n < vertex.size(); ++n)
315 {
316 map.push_back(vertex[n]);
317 }
318
319 for (size_t n = 0; n < iEdge_01.size(); ++n)
320 {
321 map.push_back(iEdge_01[n]);
322 }
323
324 for (size_t n = 0; n < iEdge_12.size(); ++n)
325 {
326 map.push_back(iEdge_12[n]);
327 }
328
329 for (size_t n = 0; n < iEdge_23.size(); ++n)
330 {
331 map.push_back(iEdge_23[n]);
332 }
333
334 for (size_t n = 0; n < iEdge_30.size(); ++n)
335 {
336 map.push_back(iEdge_30[n]);
337 }
338
339 for (size_t n = 0; n < iEdge_04.size(); ++n)
340 {
341 map.push_back(iEdge_04[n]);
342 }
343
344 for (size_t n = 0; n < iEdge_14.size(); ++n)
345 {
346 map.push_back(iEdge_14[n]);
347 }
348
349 for (size_t n = 0; n < iEdge_25.size(); ++n)
350 {
351 map.push_back(iEdge_25[n]);
352 }
353
354 for (size_t n = 0; n < iEdge_35.size(); ++n)
355 {
356 map.push_back(iEdge_35[n]);
357 }
358
359 for (size_t n = 0; n < iEdge_45.size(); ++n)
360 {
361 map.push_back(iEdge_45[n]);
362 }
363
364 for (size_t n = 0; n < iFace_0123.size(); ++n)
365 {
366 map.push_back(iFace_0123[n]);
367 }
368
369 for (size_t n = 0; n < iFace_014.size(); ++n)
370 {
371 map.push_back(iFace_014[n]);
372 }
373
374 for (size_t n = 0; n < iFace_1254.size(); ++n)
375 {
376 map.push_back(iFace_1254[n]);
377 }
378
379 for (size_t n = 0; n < iFace_325.size(); ++n)
380 {
381 map.push_back(iFace_325[n]);
382 }
383
384 for (size_t n = 0; n < iFace_0354.size(); ++n)
385 {
386 map.push_back(iFace_0354[n]);
387 }
388
389 for (size_t n = 0; n < interiorVolumePoints.size(); ++n)
390 {
391 map.push_back(interiorVolumePoints[n]);
392 }
393
394 Array<OneD, NekDouble> points[3];
398
399 for (size_t index = 0; index < map.size(); ++index)
400 {
401 points[0][index] =
m_points[0][index];
402 points[1][index] =
m_points[1][index];
403 points[2][index] =
m_points[2][index];
404 }
405
406 for (size_t index = 0; index < map.size(); ++index)
407 {
408 m_points[0][index] = points[0][map[index]];
409 m_points[1][index] = points[1][map[index]];
410 m_points[2][index] = points[2][map[index]];
411 }
412}
Array< OneD, DataType > m_points[3]
Storage for the point locations, allowing for up to a 3D points storage.
size_t GetNumPoints() const
size_t GetTotNumPoints() const