Nektar++
Public Member Functions | Public Attributes | List of all members
Nektar::NekMeshUtils::HOQuadrilateral< T > Struct Template Reference

A lightweight struct for dealing with high-order quadrilateral alignment. More...

#include <HOAlignment.h>

Public Member Functions

 HOQuadrilateral (std::vector< int > pVertId, std::vector< T > pSurfVerts)
 
 HOQuadrilateral (std::vector< int > pVertId)
 
void ReverseX ()
 
void ReverseY ()
 
void Transpose ()
 
void Align (std::vector< int > vertId)
 Align this surface to a given vertex ID. More...
 

Public Attributes

std::vector< int > vertId
 The quadrilateral vertex IDs. More...
 
std::vector< T > surfVerts
 The quadrilateral surface vertices – templated so that this can either be nodes or IDs. More...
 

Detailed Description

template<typename T>
struct Nektar::NekMeshUtils::HOQuadrilateral< T >

A lightweight struct for dealing with high-order quadrilateral alignment.

Definition at line 208 of file HOAlignment.h.

Constructor & Destructor Documentation

◆ HOQuadrilateral() [1/2]

template<typename T>
Nektar::NekMeshUtils::HOQuadrilateral< T >::HOQuadrilateral ( std::vector< int >  pVertId,
std::vector< T >  pSurfVerts 
)
inline

Definition at line 210 of file HOAlignment.h.

211  : vertId(pVertId), surfVerts(pSurfVerts)
212  {
213  }
std::vector< T > surfVerts
The quadrilateral surface vertices – templated so that this can either be nodes or IDs...
Definition: HOAlignment.h:224
std::vector< int > vertId
The quadrilateral vertex IDs.
Definition: HOAlignment.h:220

◆ HOQuadrilateral() [2/2]

template<typename T>
Nektar::NekMeshUtils::HOQuadrilateral< T >::HOQuadrilateral ( std::vector< int >  pVertId)
inline

Definition at line 215 of file HOAlignment.h.

215  : vertId(pVertId)
216  {
217  }
std::vector< int > vertId
The quadrilateral vertex IDs.
Definition: HOAlignment.h:220

Member Function Documentation

◆ Align()

template<typename T>
void Nektar::NekMeshUtils::HOQuadrilateral< T >::Align ( std::vector< int >  vertId)
inline

Align this surface to a given vertex ID.

Definition at line 270 of file HOAlignment.h.

References ASSERTL1, Nektar::StdRegions::eDir1BwdDir1_Dir2BwdDir2, Nektar::StdRegions::eDir1BwdDir1_Dir2FwdDir2, Nektar::StdRegions::eDir1BwdDir2_Dir2BwdDir1, Nektar::StdRegions::eDir1BwdDir2_Dir2FwdDir1, Nektar::StdRegions::eDir1FwdDir1_Dir2BwdDir2, Nektar::StdRegions::eDir1FwdDir1_Dir2FwdDir2, Nektar::StdRegions::eDir1FwdDir2_Dir2BwdDir1, Nektar::StdRegions::eDir1FwdDir2_Dir2FwdDir1, Nektar::StdRegions::eNoOrientation, and Nektar::Transpose().

Referenced by Nektar::NekMeshUtils::Prism::GetCurvedNodes(), Nektar::Utilities::InputGmsh::PrismReordering(), and Nektar::Utilities::OutputGmsh::Process().

271  {
272 
273  int vmap[4] = {-1, -1, -1, -1};
274 
275  // Determine which vertices map to vertId
276  for (int i = 0; i < 4; ++i)
277  {
278  for (int j = 0; j < 4; ++j)
279  {
280  if (this->vertId[j] == vertId[i])
281  {
282  vmap[i] = j;
283  break;
284  }
285  }
286 
287  ASSERTL1(vmap[i] != -1,
288  "Could not determine mapping between vertex IDs");
289  }
290 
292 
293  if (vmap[1] == (vmap[0]+1) % 4)
294  {
295  switch (vmap[0])
296  {
297  case 0:
299  break;
300  case 1:
302  break;
303  case 2:
305  break;
306  case 3:
308  break;
309  }
310  }
311  else
312  {
313  switch (vmap[0])
314  {
315  case 0:
317  break;
318  case 1:
320  break;
321  case 2:
323  break;
324  case 3:
326  break;
327  }
328  }
329 
330  if (orient == StdRegions::eDir1FwdDir2_Dir2FwdDir1 ||
334  {
335  Transpose();
336  }
337 
338  if (orient == StdRegions::eDir1BwdDir1_Dir2FwdDir2 ||
342  {
343  ReverseX();
344  }
345 
346  if (orient == StdRegions::eDir1FwdDir1_Dir2BwdDir2 ||
350  {
351  ReverseY();
352  }
353  }
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:250

◆ ReverseX()

template<typename T>
void Nektar::NekMeshUtils::HOQuadrilateral< T >::ReverseX ( )
inline

Definition at line 226 of file HOAlignment.h.

227  {
228  int np = (int)(sqrt((NekDouble)surfVerts.size()) + 0.5);
229  for (int i = 0; i < np; ++i)
230  {
231  for (int j = 0; j < np/2; ++j)
232  {
233  swap(surfVerts[i*np + j], surfVerts[i*np + np-j-1]);
234  }
235  }
236  }
std::vector< T > surfVerts
The quadrilateral surface vertices – templated so that this can either be nodes or IDs...
Definition: HOAlignment.h:224
double NekDouble

◆ ReverseY()

template<typename T>
void Nektar::NekMeshUtils::HOQuadrilateral< T >::ReverseY ( )
inline

Definition at line 238 of file HOAlignment.h.

239  {
240  int np = (int)(sqrt((NekDouble)surfVerts.size()) + 0.5);
241  // Reverse y direction
242  for (int j = 0; j < np; ++j)
243  {
244  for (int i = 0; i < np/2; ++i)
245  {
246  swap(surfVerts[i*np + j], surfVerts[(np-i-1)*np + j]);
247  }
248  }
249  }
std::vector< T > surfVerts
The quadrilateral surface vertices – templated so that this can either be nodes or IDs...
Definition: HOAlignment.h:224
double NekDouble

◆ Transpose()

template<typename T>
void Nektar::NekMeshUtils::HOQuadrilateral< T >::Transpose ( )
inline

Definition at line 251 of file HOAlignment.h.

252  {
253  int np = (int)(sqrt((NekDouble)surfVerts.size()) + 0.5);
254  std::vector<T> tmp(surfVerts.size());
255 
256  for (int i = 0; i < np; ++i)
257  {
258  for (int j = 0; j < np; ++j)
259  {
260  tmp[i*np+j] = surfVerts[j*np+i];
261  }
262  }
263 
264  surfVerts = tmp;
265  }
std::vector< T > surfVerts
The quadrilateral surface vertices – templated so that this can either be nodes or IDs...
Definition: HOAlignment.h:224
double NekDouble

Member Data Documentation

◆ surfVerts

template<typename T>
std::vector<T> Nektar::NekMeshUtils::HOQuadrilateral< T >::surfVerts

The quadrilateral surface vertices – templated so that this can either be nodes or IDs.

Definition at line 224 of file HOAlignment.h.

Referenced by Nektar::NekMeshUtils::Prism::GetCurvedNodes(), Nektar::Utilities::InputGmsh::PrismReordering(), and Nektar::Utilities::OutputGmsh::Process().

◆ vertId

template<typename T>
std::vector<int> Nektar::NekMeshUtils::HOQuadrilateral< T >::vertId

The quadrilateral vertex IDs.

Definition at line 220 of file HOAlignment.h.