Nektar++
Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
Nektar::SpatialDomains::Geometry Class Referenceabstract

Base class for shape geometry information. More...

#include <Geometry.h>

Inheritance diagram for Nektar::SpatialDomains::Geometry:
[legend]

Public Member Functions

 Geometry ()
 Default constructor. More...
 
 Geometry (int coordim)
 Constructor when supplied a coordinate dimension. More...
 
virtual ~Geometry ()
 Default destructor. More...
 
int GetCoordim () const
 Return the coordinate dimension of this object (i.e. the dimension of the space in which this object is embedded). More...
 
void SetCoordim (int coordim)
 Sets the coordinate dimension of this object (i.e. the dimension of the space in which this object is embedded). More...
 
GeomFactorsSharedPtr GetGeomFactors ()
 Get the geometric factors for this object, generating them if required. More...
 
GeomFactorsSharedPtr GetRefGeomFactors (const Array< OneD, const LibUtilities::BasisSharedPtr > &tbasis)
 
GeomFactorsSharedPtr GetMetricInfo ()
 Get the geometric factors for this object. More...
 
LibUtilities::ShapeType GetShapeType (void)
 Get the geometric shape type of this object. More...
 
int GetGlobalID (void) const
 Get the ID of this object. More...
 
void SetGlobalID (int globalid)
 Set the ID of this object. More...
 
int GetVid (int i) const
 Get the ID of vertex i of this object. More...
 
int GetEid (int i) const
 Get the ID of edge i of this object. More...
 
int GetFid (int i) const
 Get the ID of face i of this object. More...
 
int GetTid (int i) const
 Get the ID of trace i of this object. More...
 
PointGeomSharedPtr GetVertex (int i) const
 Returns vertex i of this object. More...
 
Geometry1DSharedPtr GetEdge (int i) const
 Returns edge i of this object. More...
 
Geometry2DSharedPtr GetFace (int i) const
 Returns face i of this object. More...
 
StdRegions::Orientation GetEorient (const int i) const
 Returns the orientation of edge i with respect to the ordering of edges in the standard element. More...
 
StdRegions::Orientation GetForient (const int i) const
 Returns the orientation of face i with respect to the ordering of faces in the standard element. More...
 
int GetNumVerts () const
 Get the number of vertices of this object. More...
 
int GetNumEdges () const
 Get the number of edges of this object. More...
 
int GetNumFaces () const
 Get the number of faces of this object. More...
 
int GetShapeDim () const
 Get the object's shape dimension. More...
 
StdRegions::StdExpansionSharedPtr GetXmap () const
 Return the mapping object Geometry::m_xmap that represents the coordinate transformation from standard element to physical element. More...
 
const Array< OneD, const NekDouble > & GetCoeffs (const int i) const
 Return the coefficients of the transformation Geometry::m_xmap in coordinate direction i. More...
 
void FillGeom ()
 Populate the coordinate mapping Geometry::m_coeffs information from any children geometry elements. More...
 
std::array< NekDouble, 6 > GetBoundingBox ()
 Generates the bounding box for the element. More...
 
void ClearBoundingBox ()
 
bool ContainsPoint (const Array< OneD, const NekDouble > &gloCoord, NekDouble tol=0.0)
 Determine whether an element contains a particular Cartesian coordinate \((x,y,z)\). More...
 
bool ContainsPoint (const Array< OneD, const NekDouble > &gloCoord, Array< OneD, NekDouble > &locCoord, NekDouble tol)
 Determine whether an element contains a particular Cartesian coordinate \((x,y,z)\). More...
 
bool ContainsPoint (const Array< OneD, const NekDouble > &gloCoord, Array< OneD, NekDouble > &locCoord, NekDouble tol, NekDouble &dist)
 Determine whether an element contains a particular Cartesian coordinate \(\vec{x} = (x,y,z)\). More...
 
NekDouble GetLocCoords (const Array< OneD, const NekDouble > &coords, Array< OneD, NekDouble > &Lcoords)
 Determine the local collapsed coordinates that correspond to a given Cartesian coordinate for this geometry object. More...
 
NekDouble GetCoord (const int i, const Array< OneD, const NekDouble > &Lcoord)
 Given local collapsed coordinate Lcoord, return the value of physical coordinate in direction i. More...
 
int PreliminaryCheck (const Array< OneD, const NekDouble > &gloCoord)
 A fast and robust check if a given global coord is outside of a deformed element. For regular elements, this check is unnecessary. More...
 
bool MinMaxCheck (const Array< OneD, const NekDouble > &gloCoord)
 Check if given global coord is within the BoundingBox of the element. More...
 
bool ClampLocCoords (Array< OneD, NekDouble > &locCoord, NekDouble tol=std::numeric_limits< NekDouble >::epsilon())
 Clamp local coords to be within standard regions [-1, 1]^dim. More...
 
NekDouble FindDistance (const Array< OneD, const NekDouble > &xs, Array< OneD, NekDouble > &xi)
 
int GetVertexEdgeMap (int i, int j) const
 Returns the standard element edge IDs that are connected to a given vertex. More...
 
int GetVertexFaceMap (int i, int j) const
 Returns the standard element face IDs that are connected to a given vertex. More...
 
int GetEdgeFaceMap (int i, int j) const
 Returns the standard element edge IDs that are connected to a given face. More...
 
int GetEdgeNormalToFaceVert (int i, int j) const
 Returns the standard lement edge IDs that are normal to a given face vertex. More...
 
int GetDir (const int i, const int j=0) const
 Returns the element coordinate direction corresponding to a given face coordinate direction. More...
 
void Reset (CurveMap &curvedEdges, CurveMap &curvedFaces)
 Reset this geometry object: unset the current state, zero Geometry::m_coeffs and remove allocated GeomFactors. More...
 
void ResetNonRecursive (CurveMap &curvedEdges, CurveMap &curvedFaces)
 Reset this geometry object non-recursively: unset the current state, zero Geometry::m_coeffs and remove allocated GeomFactors. More...
 
void Setup ()
 
void GenGeomFactors ()
 Handles generation of geometry factors. More...
 

Protected Member Functions

virtual PointGeomSharedPtr v_GetVertex (int i) const =0
 
virtual Geometry1DSharedPtr v_GetEdge (int i) const
 Returns edge i of this object. More...
 
virtual Geometry2DSharedPtr v_GetFace (int i) const
 Returns face i of this object. More...
 
virtual StdRegions::Orientation v_GetEorient (const int i) const
 Returns the orientation of edge i with respect to the ordering of edges in the standard element. More...
 
virtual StdRegions::Orientation v_GetForient (const int i) const
 Returns the orientation of face i with respect to the ordering of faces in the standard element. More...
 
virtual int v_GetNumVerts () const
 Get the number of vertices of this object. More...
 
virtual int v_GetNumEdges () const
 Get the number of edges of this object. More...
 
virtual int v_GetNumFaces () const
 Get the number of faces of this object. More...
 
virtual int v_GetShapeDim () const
 Get the object's shape dimension. More...
 
virtual StdRegions::StdExpansionSharedPtr v_GetXmap () const
 Return the mapping object Geometry::m_xmap that represents the coordinate transformation from standard element to physical element. More...
 
virtual void v_FillGeom ()
 Populate the coordinate mapping Geometry::m_coeffs information from any children geometry elements. More...
 
virtual bool v_ContainsPoint (const Array< OneD, const NekDouble > &gloCoord, Array< OneD, NekDouble > &locCoord, NekDouble tol, NekDouble &dist)
 Determine whether an element contains a particular Cartesian coordinate \(\vec{x} = (x,y,z)\). More...
 
virtual int v_AllLeftCheck (const Array< OneD, const NekDouble > &gloCoord)
 
virtual NekDouble v_GetCoord (const int i, const Array< OneD, const NekDouble > &Lcoord)
 Given local collapsed coordinate Lcoord, return the value of physical coordinate in direction i. More...
 
virtual NekDouble v_GetLocCoords (const Array< OneD, const NekDouble > &coords, Array< OneD, NekDouble > &Lcoords)
 Determine the local collapsed coordinates that correspond to a given Cartesian coordinate for this geometry object. More...
 
virtual NekDouble v_FindDistance (const Array< OneD, const NekDouble > &xs, Array< OneD, NekDouble > &xi)
 
virtual int v_GetVertexEdgeMap (int i, int j) const
 Returns the standard element edge IDs that are connected to a given vertex. More...
 
virtual int v_GetVertexFaceMap (int i, int j) const
 Returns the standard element face IDs that are connected to a given vertex. More...
 
virtual int v_GetEdgeFaceMap (int i, int j) const
 Returns the standard element edge IDs that are connected to a given face. More...
 
virtual int v_GetEdgeNormalToFaceVert (const int i, const int j) const
 Returns the standard lement edge IDs that are normal to a given face vertex. More...
 
virtual int v_GetDir (const int faceidx, const int facedir) const
 Returns the element coordinate direction corresponding to a given face coordinate direction. More...
 
virtual void v_Reset (CurveMap &curvedEdges, CurveMap &curvedFaces)
 Reset this geometry object: unset the current state, zero Geometry::m_coeffs and remove allocated GeomFactors. More...
 
virtual void v_Setup ()
 
virtual void v_GenGeomFactors ()=0
 
void SetUpCoeffs (const int nCoeffs)
 Initialise the Geometry::m_coeffs array. More...
 
virtual void v_CalculateInverseIsoParam ()
 

Static Protected Member Functions

static GeomFactorsSharedPtr ValidateRegGeomFactor (GeomFactorsSharedPtr geomFactor)
 Check to see if a geometric factor has already been created that contains the same regular information. More...
 

Protected Attributes

int m_coordim
 Coordinate dimension of this geometry object. More...
 
GeomFactorsSharedPtr m_geomFactors
 Geometric factors. More...
 
GeomState m_geomFactorsState
 State of the geometric factors. More...
 
StdRegions::StdExpansionSharedPtr m_xmap
 \(\chi\) mapping containing isoparametric transformation. More...
 
GeomState m_state
 Enumeration to dictate whether coefficients are filled. More...
 
bool m_setupState
 Wether or not the setup routines have been run. More...
 
GeomType m_geomType
 Type of geometry. More...
 
LibUtilities::ShapeType m_shapeType
 Type of shape. More...
 
int m_globalID
 Global ID. More...
 
Array< OneD, Array< OneD, NekDouble > > m_coeffs
 Array containing expansion coefficients of m_xmap. More...
 
Array< OneD, NekDoublem_boundingBox
 Array containing bounding box. More...
 
Array< OneD, Array< OneD, NekDouble > > m_isoParameter
 
Array< OneD, Array< OneD, NekDouble > > m_invIsoParam
 
int m_straightEdge
 

Static Protected Attributes

static GeomFactorsVector m_regGeomFactorsManager
 

Detailed Description

Base class for shape geometry information.

Definition at line 78 of file Geometry.h.

Constructor & Destructor Documentation

◆ Geometry() [1/2]

Nektar::SpatialDomains::Geometry::Geometry ( )

Default constructor.

Definition at line 50 of file Geometry.cpp.

54{
55}
bool m_setupState
Wether or not the setup routines have been run.
Definition: Geometry.h:199
GeomState m_state
Enumeration to dictate whether coefficients are filled.
Definition: Geometry.h:197
LibUtilities::ShapeType m_shapeType
Type of shape.
Definition: Geometry.h:203
GeomState m_geomFactorsState
State of the geometric factors.
Definition: Geometry.h:193
int m_coordim
Coordinate dimension of this geometry object.
Definition: Geometry.h:189
@ eNotFilled
Geometric information has not been generated.

◆ Geometry() [2/2]

Nektar::SpatialDomains::Geometry::Geometry ( int  coordim)

Constructor when supplied a coordinate dimension.

Definition at line 60 of file Geometry.cpp.

◆ ~Geometry()

Nektar::SpatialDomains::Geometry::~Geometry ( )
virtual

Default destructor.

Definition at line 70 of file Geometry.cpp.

71{
72}

Member Function Documentation

◆ ClampLocCoords()

bool Nektar::SpatialDomains::Geometry::ClampLocCoords ( Array< OneD, NekDouble > &  locCoord,
NekDouble  tol = std::numeric_limits<NekDouble>::epsilon() 
)

Clamp local coords to be within standard regions [-1, 1]^dim.

Parameters
LcoordsCorresponding local coordinates

Definition at line 561 of file Geometry.cpp.

562{
563 // Validation checks
564 ASSERTL1(locCoord.size() >= GetShapeDim(),
565 "Expects local coordinates to be same or "
566 "larger than shape dimension.");
567
568 // If out of range clamp locCoord to be within [-1,1]^dim
569 // since any larger value will be very oscillatory if
570 // called by 'returnNearestElmt' option in
571 // ExpList::GetExpIndex
572 bool clamp = false;
573 for (int i = 0; i < GetShapeDim(); ++i)
574 {
575 if (!std::isfinite(locCoord[i]))
576 {
577 locCoord[i] = 0.;
578 clamp = true;
579 }
580 else if (locCoord[i] < -(1. + tol))
581 {
582 locCoord[i] = -(1. + tol);
583 clamp = true;
584 }
585 else if (locCoord[i] > (1. + tol))
586 {
587 locCoord[i] = 1. + tol;
588 clamp = true;
589 }
590 }
591 return clamp;
592}
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
Definition: ErrorUtil.hpp:242
int GetShapeDim() const
Get the object's shape dimension.
Definition: Geometry.h:427

References ASSERTL1, and GetShapeDim().

Referenced by Nektar::SpatialDomains::Geometry2D::NewtonIterationForLocCoord(), Nektar::SpatialDomains::Geometry3D::NewtonIterationForLocCoord(), v_ContainsPoint(), Nektar::SpatialDomains::Geometry2D::v_FindDistance(), Nektar::SpatialDomains::SegGeom::v_FindDistance(), Nektar::SpatialDomains::Geometry2D::v_GetLocCoords(), and Nektar::SpatialDomains::Geometry3D::v_GetLocCoords().

◆ ClearBoundingBox()

void Nektar::SpatialDomains::Geometry::ClearBoundingBox ( )

Definition at line 496 of file Geometry.cpp.

497{
498 m_boundingBox = {};
499}
Array< OneD, NekDouble > m_boundingBox
Array containing bounding box.
Definition: Geometry.h:209

References m_boundingBox.

◆ ContainsPoint() [1/3]

bool Nektar::SpatialDomains::Geometry::ContainsPoint ( const Array< OneD, const NekDouble > &  gloCoord,
Array< OneD, NekDouble > &  locCoord,
NekDouble  tol 
)
inline

Determine whether an element contains a particular Cartesian coordinate \((x,y,z)\).

See also
Geometry::ContainsPoint

Definition at line 482 of file Geometry.h.

485{
486 NekDouble dist;
487 return v_ContainsPoint(gloCoord, locCoord, tol, dist);
488}
virtual bool v_ContainsPoint(const Array< OneD, const NekDouble > &gloCoord, Array< OneD, NekDouble > &locCoord, NekDouble tol, NekDouble &dist)
Determine whether an element contains a particular Cartesian coordinate .
Definition: Geometry.cpp:260
double NekDouble

References v_ContainsPoint().

◆ ContainsPoint() [2/3]

bool Nektar::SpatialDomains::Geometry::ContainsPoint ( const Array< OneD, const NekDouble > &  gloCoord,
Array< OneD, NekDouble > &  locCoord,
NekDouble  tol,
NekDouble dist 
)
inline

Determine whether an element contains a particular Cartesian coordinate \(\vec{x} = (x,y,z)\).

For curvilinear and non-affine elements (i.e. where the Jacobian varies as a function of the standard element coordinates), this is a non-linear optimisation problem that requires the use of a Newton iteration. Note therefore that this can be an expensive operation.

The parameter tol which is by default 0, can be used to expand the coordinate range of the standard element from \([-1,1]^d\) to \([-1-\epsilon,1+\epsilon\) to handle challenging edge cases. The function also returns the local coordinates corresponding to gloCoord that can be used to speed up subsequent searches.

Parameters
gloCoordThe coordinate \( (x,y,z) \).
locCoordOn exit, this is the local coordinate \(\vec{\xi}\) such that \(\chi(\vec{\xi}) = \vec{x}\).
tolThe tolerance used to dictate the bounding box of the standard coordinates \(\vec{\xi}\).
distOn exit, returns the minimum distance between gloCoord and the quadrature points inside the element.
Returns
true if the coordinate gloCoord is contained in the element; false otherwise.
See also
Geometry::GetLocCoords.

Definition at line 518 of file Geometry.h.

521{
522 return v_ContainsPoint(gloCoord, locCoord, tol, dist);
523}

References v_ContainsPoint().

◆ ContainsPoint() [3/3]

bool Nektar::SpatialDomains::Geometry::ContainsPoint ( const Array< OneD, const NekDouble > &  gloCoord,
NekDouble  tol = 0.0 
)
inline

Determine whether an element contains a particular Cartesian coordinate \((x,y,z)\).

See also
Geometry::ContainsPoint

Definition at line 468 of file Geometry.h.

470{
471 Array<OneD, NekDouble> locCoord(GetCoordim(), 0.0);
472 NekDouble dist;
473 return v_ContainsPoint(gloCoord, locCoord, tol, dist);
474}
int GetCoordim() const
Return the coordinate dimension of this object (i.e. the dimension of the space in which this object ...
Definition: Geometry.h:284

References GetCoordim(), and v_ContainsPoint().

◆ FillGeom()

void Nektar::SpatialDomains::Geometry::FillGeom ( )
inline

Populate the coordinate mapping Geometry::m_coeffs information from any children geometry elements.

See also
v_FillGeom()

Definition at line 457 of file Geometry.h.

458{
459 v_FillGeom();
460}
virtual void v_FillGeom()
Populate the coordinate mapping Geometry::m_coeffs information from any children geometry elements.
Definition: Geometry.cpp:386

References v_FillGeom().

◆ FindDistance()

NekDouble Nektar::SpatialDomains::Geometry::FindDistance ( const Array< OneD, const NekDouble > &  xs,
Array< OneD, NekDouble > &  xi 
)
inline

Definition at line 561 of file Geometry.h.

563{
564 return v_FindDistance(xs, xi);
565}
virtual NekDouble v_FindDistance(const Array< OneD, const NekDouble > &xs, Array< OneD, NekDouble > &xi)
Definition: Geometry.cpp:295

References v_FindDistance().

◆ GenGeomFactors()

void Nektar::SpatialDomains::Geometry::GenGeomFactors ( )
inline

Handles generation of geometry factors.

Generate the geometric factors (i.e. derivatives of \(\chi\)) and related metrics.

See also
SpatialDomains::GeomFactors

Definition at line 693 of file Geometry.h.

694{
695 return v_GenGeomFactors();
696}

References v_GenGeomFactors().

Referenced by GetGeomFactors().

◆ GetBoundingBox()

std::array< NekDouble, 6 > Nektar::SpatialDomains::Geometry::GetBoundingBox ( )

Generates the bounding box for the element.

For regular elements, the vertices are sufficient to define the extent of the bounding box. For non-regular elements, the extremes of the quadrature point coordinates are used. A 10% margin is added around this computed region to account for convex hull elements where the true extent of the element may extend slightly beyond the quadrature points.

Definition at line 422 of file Geometry.cpp.

423{
424 if (m_boundingBox.size() == 6)
425 {
426 return {{m_boundingBox[0], m_boundingBox[1], m_boundingBox[2],
428 }
429 // NekDouble minx, miny, minz, maxx, maxy, maxz;
430 Array<OneD, NekDouble> min(3), max(3);
431
432 // Always get vertexes min/max
434 Array<OneD, NekDouble> x(3, 0.0);
435 p->GetCoords(x[0], x[1], x[2]);
436 for (int j = 0; j < 3; ++j)
437 {
438 min[j] = x[j];
439 max[j] = x[j];
440 }
441 for (int i = 1; i < GetNumVerts(); ++i)
442 {
443 p = GetVertex(i);
444 p->GetCoords(x[0], x[1], x[2]);
445 for (int j = 0; j < 3; ++j)
446 {
447 min[j] = (x[j] < min[j] ? x[j] : min[j]);
448 max[j] = (x[j] > max[j] ? x[j] : max[j]);
449 }
450 }
451 // If element is deformed loop over quadrature points
453 if (GetGeomFactors()->GetGtype() != eRegular)
454 {
455 marginFactor = 0.1;
456 const int nq = GetXmap()->GetTotPoints();
457 Array<OneD, Array<OneD, NekDouble>> xvec(3);
458 for (int j = 0; j < 3; ++j)
459 {
460 xvec[j] = Array<OneD, NekDouble>(nq, 0.0);
461 }
462 for (int j = 0; j < GetCoordim(); ++j)
463 {
464 GetXmap()->BwdTrans(m_coeffs[j], xvec[j]);
465 }
466 for (int j = 0; j < 3; ++j)
467 {
468 for (int i = 0; i < nq; ++i)
469 {
470 min[j] = (xvec[j][i] < min[j] ? xvec[j][i] : min[j]);
471 max[j] = (xvec[j][i] > max[j] ? xvec[j][i] : max[j]);
472 }
473 }
474 }
475 // Add margin to bounding box, in order to
476 // return the nearest element
477 for (int j = 0; j < 3; ++j)
478 {
479 NekDouble margin =
480 marginFactor * (max[j] - min[j]) + NekConstants::kFindDistanceMin;
481 min[j] -= margin;
482 max[j] += margin;
483 }
484
485 // save bounding box
486 m_boundingBox = Array<OneD, NekDouble>(6);
487 for (int j = 0; j < 3; ++j)
488 {
489 m_boundingBox[j] = min[j];
490 m_boundingBox[j + 3] = max[j];
491 }
492 // Return bounding box
493 return {{min[0], min[1], min[2], max[0], max[1], max[2]}};
494}
PointGeomSharedPtr GetVertex(int i) const
Returns vertex i of this object.
Definition: Geometry.h:358
Array< OneD, Array< OneD, NekDouble > > m_coeffs
Array containing expansion coefficients of m_xmap.
Definition: Geometry.h:207
StdRegions::StdExpansionSharedPtr GetXmap() const
Return the mapping object Geometry::m_xmap that represents the coordinate transformation from standar...
Definition: Geometry.h:436
int GetNumVerts() const
Get the number of vertices of this object.
Definition: Geometry.h:400
GeomFactorsSharedPtr GetGeomFactors()
Get the geometric factors for this object, generating them if required.
Definition: Geometry.h:302
static const NekDouble kGeomFactorsTol
static const NekDouble kFindDistanceMin
@ eRegular
Geometry is straight-sided with constant geometric factors.
std::shared_ptr< PointGeom > PointGeomSharedPtr
Definition: Geometry.h:57

References Nektar::SpatialDomains::eRegular, GetCoordim(), GetGeomFactors(), GetNumVerts(), GetVertex(), GetXmap(), Nektar::NekConstants::kFindDistanceMin, Nektar::NekConstants::kGeomFactorsTol, m_boundingBox, m_coeffs, and CellMLToNektar.cellml_metadata::p.

Referenced by MinMaxCheck().

◆ GetCoeffs()

const Array< OneD, const NekDouble > & Nektar::SpatialDomains::Geometry::GetCoeffs ( const int  i) const
inline

Return the coefficients of the transformation Geometry::m_xmap in coordinate direction i.

Definition at line 445 of file Geometry.h.

447{
448 return m_coeffs[i];
449}

References m_coeffs.

◆ GetCoord()

NekDouble Nektar::SpatialDomains::Geometry::GetCoord ( const int  i,
const Array< OneD, const NekDouble > &  Lcoord 
)
inline

Given local collapsed coordinate Lcoord, return the value of physical coordinate in direction i.

Definition at line 555 of file Geometry.h.

557{
558 return v_GetCoord(i, Lcoord);
559}
virtual NekDouble v_GetCoord(const int i, const Array< OneD, const NekDouble > &Lcoord)
Given local collapsed coordinate Lcoord, return the value of physical coordinate in direction i.
Definition: Geometry.cpp:362

References v_GetCoord().

Referenced by Nektar::SpatialDomains::Geometry2D::v_FindDistance(), and Nektar::SpatialDomains::SegGeom::v_FindDistance().

◆ GetCoordim()

int Nektar::SpatialDomains::Geometry::GetCoordim ( ) const
inline

Return the coordinate dimension of this object (i.e. the dimension of the space in which this object is embedded).

Definition at line 284 of file Geometry.h.

285{
286 return m_coordim;
287}

References m_coordim.

Referenced by Nektar::SpatialDomains::MeshGraph::CheckRange(), ContainsPoint(), GetBoundingBox(), and Nektar::SpatialDomains::SegGeom::v_FindDistance().

◆ GetDir()

int Nektar::SpatialDomains::Geometry::GetDir ( const int  i,
const int  j = 0 
) const
inline

Returns the element coordinate direction corresponding to a given face coordinate direction.

Definition at line 658 of file Geometry.h.

659{
660 return v_GetDir(faceidx, facedir);
661}
virtual int v_GetDir(const int faceidx, const int facedir) const
Returns the element coordinate direction corresponding to a given face coordinate direction.
Definition: Geometry.cpp:351

References v_GetDir().

◆ GetEdge()

Geometry1DSharedPtr Nektar::SpatialDomains::Geometry::GetEdge ( int  i) const
inline

Returns edge i of this object.

Definition at line 366 of file Geometry.h.

367{
368 return v_GetEdge(i);
369}
virtual Geometry1DSharedPtr v_GetEdge(int i) const
Returns edge i of this object.
Definition: Geometry.cpp:159

References v_GetEdge().

Referenced by GetEid(), Nektar::SpatialDomains::HexGeom::SetUpLocalEdges(), Nektar::SpatialDomains::PrismGeom::SetUpLocalEdges(), Nektar::SpatialDomains::PyrGeom::SetUpLocalEdges(), and Nektar::SpatialDomains::TetGeom::SetUpLocalEdges().

◆ GetEdgeFaceMap()

int Nektar::SpatialDomains::Geometry::GetEdgeFaceMap ( int  i,
int  j 
) const
inline

Returns the standard element edge IDs that are connected to a given face.

For example, on a prism, edge 0 is connnected to faces 0 and 1; GetEdgeFaceMap(0,j) would therefore return the values 0 and 1 respectively. We assume that j runs between 0 and 1 inclusive, since every face is connected to precisely two faces for all 3D elements.

This function is used in the construction of the low-energy preconditioner.

Parameters
iThe edge to query connectivity for.
jThe local face index between 0 and 1 connected to this element.
See also
MultiRegions::PreconditionerLowEnergy

Definition at line 627 of file Geometry.h.

628{
629 return v_GetEdgeFaceMap(i, j);
630}
virtual int v_GetEdgeFaceMap(int i, int j) const
Returns the standard element edge IDs that are connected to a given face.
Definition: Geometry.cpp:329

References v_GetEdgeFaceMap().

◆ GetEdgeNormalToFaceVert()

int Nektar::SpatialDomains::Geometry::GetEdgeNormalToFaceVert ( int  i,
int  j 
) const
inline

Returns the standard lement edge IDs that are normal to a given face vertex.

For example, on a hexahedron, on face 0 at vertices 0,1,2,3 the edges normal to that face are 4,5,6,7, ; so GetEdgeNormalToFaceVert(0,j) would therefore return the values 4, 5, 6 and 7 respectively. We assume that j runs between 0 and 3 inclusive on a quadrilateral face and between 0 and 2 inclusive on a triangular face.

This is used to help set up a length scale normal to an face

Parameters
iThe face to query for the normal edge
jThe local vertex index between 0 and nverts on this face

Definition at line 649 of file Geometry.h.

650{
651 return v_GetEdgeNormalToFaceVert(i, j);
652}
virtual int v_GetEdgeNormalToFaceVert(const int i, const int j) const
Returns the standard lement edge IDs that are normal to a given face vertex.
Definition: Geometry.cpp:340

References v_GetEdgeNormalToFaceVert().

◆ GetEid()

int Nektar::SpatialDomains::Geometry::GetEid ( int  i) const

Get the ID of edge i of this object.

Definition at line 143 of file Geometry.cpp.

144{
145 return GetEdge(i)->GetGlobalID();
146}
Geometry1DSharedPtr GetEdge(int i) const
Returns edge i of this object.
Definition: Geometry.h:366

References GetEdge().

Referenced by GetTid(), Nektar::SpatialDomains::HexGeom::SetUpLocalEdges(), Nektar::SpatialDomains::PrismGeom::SetUpLocalEdges(), Nektar::SpatialDomains::PyrGeom::SetUpLocalEdges(), and Nektar::SpatialDomains::TetGeom::SetUpLocalEdges().

◆ GetEorient()

StdRegions::Orientation Nektar::SpatialDomains::Geometry::GetEorient ( const int  i) const
inline

Returns the orientation of edge i with respect to the ordering of edges in the standard element.

Definition at line 383 of file Geometry.h.

384{
385 return v_GetEorient(i);
386}
virtual StdRegions::Orientation v_GetEorient(const int i) const
Returns the orientation of edge i with respect to the ordering of edges in the standard element.
Definition: Geometry.cpp:189

References v_GetEorient().

◆ GetFace()

Geometry2DSharedPtr Nektar::SpatialDomains::Geometry::GetFace ( int  i) const
inline

Returns face i of this object.

Definition at line 374 of file Geometry.h.

375{
376 return v_GetFace(i);
377}
virtual Geometry2DSharedPtr v_GetFace(int i) const
Returns face i of this object.
Definition: Geometry.cpp:169

References v_GetFace().

Referenced by GetFid().

◆ GetFid()

int Nektar::SpatialDomains::Geometry::GetFid ( int  i) const

Get the ID of face i of this object.

Definition at line 151 of file Geometry.cpp.

152{
153 return GetFace(i)->GetGlobalID();
154}
Geometry2DSharedPtr GetFace(int i) const
Returns face i of this object.
Definition: Geometry.h:374

References GetFace().

Referenced by GetTid().

◆ GetForient()

StdRegions::Orientation Nektar::SpatialDomains::Geometry::GetForient ( const int  i) const
inline

Returns the orientation of face i with respect to the ordering of faces in the standard element.

Definition at line 392 of file Geometry.h.

393{
394 return v_GetForient(i);
395}
virtual StdRegions::Orientation v_GetForient(const int i) const
Returns the orientation of face i with respect to the ordering of faces in the standard element.
Definition: Geometry.cpp:200

References v_GetForient().

◆ GetGeomFactors()

GeomFactorsSharedPtr Nektar::SpatialDomains::Geometry::GetGeomFactors ( )
inline

Get the geometric factors for this object, generating them if required.

Definition at line 302 of file Geometry.h.

303{
306}
void GenGeomFactors()
Handles generation of geometry factors.
Definition: Geometry.h:693
static GeomFactorsSharedPtr ValidateRegGeomFactor(GeomFactorsSharedPtr geomFactor)
Check to see if a geometric factor has already been created that contains the same regular informatio...
Definition: Geometry.cpp:88
GeomFactorsSharedPtr m_geomFactors
Geometric factors.
Definition: Geometry.h:191

References GenGeomFactors(), m_geomFactors, and ValidateRegGeomFactor().

Referenced by GetBoundingBox().

◆ GetGlobalID()

int Nektar::SpatialDomains::Geometry::GetGlobalID ( void  ) const
inline

◆ GetLocCoords()

NekDouble Nektar::SpatialDomains::Geometry::GetLocCoords ( const Array< OneD, const NekDouble > &  coords,
Array< OneD, NekDouble > &  Lcoords 
)
inline

Determine the local collapsed coordinates that correspond to a given Cartesian coordinate for this geometry object.

For curvilinear and non-affine elements (i.e. where the Jacobian varies as a function of the standard element coordinates), this is a non-linear optimisation problem that requires the use of a Newton iteration. Note therefore that this can be an expensive operation.

Note that, clearly, the provided Cartesian coordinate lie outside the element. The function therefore returns the minimum distance from some position in the element to . Lcoords will also be constrained to fit within the range \([-1,1]^d\) where \( d \) is the dimension of the element.

Parameters
coordsInput Cartesian global coordinates
LcoordsCorresponding local coordinates
Returns
Distance between obtained coordinates and provided ones.

Definition at line 545 of file Geometry.h.

547{
548 return v_GetLocCoords(coords, Lcoords);
549}
virtual NekDouble v_GetLocCoords(const Array< OneD, const NekDouble > &coords, Array< OneD, NekDouble > &Lcoords)
Determine the local collapsed coordinates that correspond to a given Cartesian coordinate for this ge...
Definition: Geometry.cpp:374

References v_GetLocCoords().

Referenced by v_ContainsPoint(), Nektar::SpatialDomains::Geometry2D::v_FindDistance(), and Nektar::SpatialDomains::SegGeom::v_FindDistance().

◆ GetMetricInfo()

GeomFactorsSharedPtr Nektar::SpatialDomains::Geometry::GetMetricInfo ( )
inline

◆ GetNumEdges()

int Nektar::SpatialDomains::Geometry::GetNumEdges ( ) const
inline

Get the number of edges of this object.

Definition at line 408 of file Geometry.h.

409{
410 return v_GetNumEdges();
411}
virtual int v_GetNumEdges() const
Get the number of edges of this object.
Definition: Geometry.cpp:211

References v_GetNumEdges().

◆ GetNumFaces()

int Nektar::SpatialDomains::Geometry::GetNumFaces ( ) const
inline

Get the number of faces of this object.

Definition at line 416 of file Geometry.h.

417{
418 return v_GetNumFaces();
419}
virtual int v_GetNumFaces() const
Get the number of faces of this object.
Definition: Geometry.cpp:219

References v_GetNumFaces().

◆ GetNumVerts()

int Nektar::SpatialDomains::Geometry::GetNumVerts ( ) const
inline

Get the number of vertices of this object.

Definition at line 400 of file Geometry.h.

401{
402 return v_GetNumVerts();
403}
virtual int v_GetNumVerts() const
Get the number of vertices of this object.
Definition: Geometry.cpp:179

References v_GetNumVerts().

Referenced by Nektar::SpatialDomains::MeshGraph::CheckRange(), and GetBoundingBox().

◆ GetRefGeomFactors()

GeomFactorsSharedPtr Nektar::SpatialDomains::Geometry::GetRefGeomFactors ( const Array< OneD, const LibUtilities::BasisSharedPtr > &  tbasis)

◆ GetShapeDim()

int Nektar::SpatialDomains::Geometry::GetShapeDim ( ) const
inline

Get the object's shape dimension.

For example, a segment is one dimensional and quadrilateral is two dimensional.

Definition at line 427 of file Geometry.h.

428{
429 return v_GetShapeDim();
430}
virtual int v_GetShapeDim() const
Get the object's shape dimension.
Definition: Geometry.cpp:227

References v_GetShapeDim().

Referenced by ClampLocCoords(), GetTid(), and v_ContainsPoint().

◆ GetShapeType()

LibUtilities::ShapeType Nektar::SpatialDomains::Geometry::GetShapeType ( void  )
inline

Get the geometric shape type of this object.

Definition at line 319 of file Geometry.h.

320{
321 return m_shapeType;
322}

References m_shapeType.

Referenced by Nektar::SpatialDomains::MeshGraph::CheckRange().

◆ GetTid()

int Nektar::SpatialDomains::Geometry::GetTid ( int  i) const
inline

Get the ID of trace i of this object.

The trace element is the facet one dimension lower than the object; for example, a quadrilateral has four trace segments forming its boundary.

Definition at line 346 of file Geometry.h.

347{
348 const int nDim = GetShapeDim();
349 return nDim == 1 ? GetVid(i)
350 : nDim == 2 ? GetEid(i)
351 : nDim == 3 ? GetFid(i)
352 : 0;
353}
int GetVid(int i) const
Get the ID of vertex i of this object.
Definition: Geometry.cpp:135
int GetFid(int i) const
Get the ID of face i of this object.
Definition: Geometry.cpp:151
int GetEid(int i) const
Get the ID of edge i of this object.
Definition: Geometry.cpp:143

References GetEid(), GetFid(), GetShapeDim(), and GetVid().

◆ GetVertex()

PointGeomSharedPtr Nektar::SpatialDomains::Geometry::GetVertex ( int  i) const
inline

◆ GetVertexEdgeMap()

int Nektar::SpatialDomains::Geometry::GetVertexEdgeMap ( int  i,
int  j 
) const
inline

Returns the standard element edge IDs that are connected to a given vertex.

For example, on a prism, vertex 0 is connnected to edges 0, 3, and 4; GetVertexEdgeMap(0,j) would therefore return the values 0, 1 and 4 respectively. We assume that j runs between 0 and 2 inclusive, which is true for every 3D element asides from the pyramid.

This function is used in the construction of the low-energy preconditioner.

Parameters
iThe vertex to query connectivity for.
jThe local edge index between 0 and 2 connected to this element.
Todo:
Expand to work with pyramid elements.
See also
MultiRegions::PreconditionerLowEnergy

Definition at line 584 of file Geometry.h.

585{
586 return v_GetVertexEdgeMap(i, j);
587}
virtual int v_GetVertexEdgeMap(int i, int j) const
Returns the standard element edge IDs that are connected to a given vertex.
Definition: Geometry.cpp:307

References v_GetVertexEdgeMap().

◆ GetVertexFaceMap()

int Nektar::SpatialDomains::Geometry::GetVertexFaceMap ( int  i,
int  j 
) const
inline

Returns the standard element face IDs that are connected to a given vertex.

For example, on a hexahedron, vertex 0 is connnected to faces 0, 1, and 4; GetVertexFaceMap(0,j) would therefore return the values 0, 1 and 4 respectively. We assume that j runs between 0 and 2 inclusive, which is true for every 3D element asides from the pyramid.

This is used in the construction of the low-energy preconditioner.

Parameters
iThe vertex to query connectivity for.
jThe local face index between 0 and 2 connected to this element.
Todo:
Expand to work with pyramid elements.
See also
MultiRegions::PreconditionerLowEnergy

Definition at line 606 of file Geometry.h.

607{
608 return v_GetVertexFaceMap(i, j);
609}
virtual int v_GetVertexFaceMap(int i, int j) const
Returns the standard element face IDs that are connected to a given vertex.
Definition: Geometry.cpp:318

References v_GetVertexFaceMap().

◆ GetVid()

int Nektar::SpatialDomains::Geometry::GetVid ( int  i) const

◆ GetXmap()

StdRegions::StdExpansionSharedPtr Nektar::SpatialDomains::Geometry::GetXmap ( ) const
inline

Return the mapping object Geometry::m_xmap that represents the coordinate transformation from standard element to physical element.

Definition at line 436 of file Geometry.h.

437{
438 return v_GetXmap();
439}
virtual StdRegions::StdExpansionSharedPtr v_GetXmap() const
Return the mapping object Geometry::m_xmap that represents the coordinate transformation from standar...
Definition: Geometry.cpp:249

References v_GetXmap().

Referenced by GetBoundingBox(), Nektar::SpatialDomains::HexGeom::SetUpXmap(), Nektar::SpatialDomains::PrismGeom::SetUpXmap(), Nektar::SpatialDomains::PyrGeom::SetUpXmap(), Nektar::SpatialDomains::QuadGeom::SetUpXmap(), Nektar::SpatialDomains::TetGeom::SetUpXmap(), Nektar::SpatialDomains::TriGeom::SetUpXmap(), Nektar::SpatialDomains::Geometry2D::v_AllLeftCheck(), Nektar::SpatialDomains::Geometry3D::v_FillGeom(), Nektar::SpatialDomains::QuadGeom::v_FillGeom(), and Nektar::SpatialDomains::TriGeom::v_FillGeom().

◆ MinMaxCheck()

bool Nektar::SpatialDomains::Geometry::MinMaxCheck ( const Array< OneD, const NekDouble > &  gloCoord)

Check if given global coord is within the BoundingBox of the element.

Parameters
coordsInput Cartesian global coordinates
Returns
True if within distance or False otherwise.

Definition at line 538 of file Geometry.cpp.

539{
540 // Validation checks
541 ASSERTL1(gloCoord.size() >= m_coordim,
542 "Expects number of global coordinates supplied to be greater than "
543 "or equal to the mesh dimension.");
544
545 std::array<NekDouble, 6> minMax = GetBoundingBox();
546 for (int i = 0; i < m_coordim; ++i)
547 {
548 if ((gloCoord[i] < minMax[i]) || (gloCoord[i] > minMax[i + 3]))
549 {
550 return false;
551 }
552 }
553 return true;
554}
std::array< NekDouble, 6 > GetBoundingBox()
Generates the bounding box for the element.
Definition: Geometry.cpp:422

References ASSERTL1, GetBoundingBox(), and m_coordim.

Referenced by PreliminaryCheck().

◆ PreliminaryCheck()

int Nektar::SpatialDomains::Geometry::PreliminaryCheck ( const Array< OneD, const NekDouble > &  gloCoord)

A fast and robust check if a given global coord is outside of a deformed element. For regular elements, this check is unnecessary.

Parameters
coordsInput Cartesian global coordinates
Returns
1 is inside of the element. 0 maybe inside -1 outside of the element

Definition at line 512 of file Geometry.cpp.

513{
514 // bounding box check
515 if (!MinMaxCheck(gloCoord))
516 {
517 return -1;
518 }
519
520 // regular element check
521 if (GetMetricInfo()->GetGtype() == eRegular)
522 {
523 return 0;
524 }
525
526 // All left check for straight edges/plane surfaces
527 return v_AllLeftCheck(gloCoord);
528}
virtual int v_AllLeftCheck(const Array< OneD, const NekDouble > &gloCoord)
Definition: Geometry.cpp:234
GeomFactorsSharedPtr GetMetricInfo()
Get the geometric factors for this object.
Definition: Geometry.h:311
bool MinMaxCheck(const Array< OneD, const NekDouble > &gloCoord)
Check if given global coord is within the BoundingBox of the element.
Definition: Geometry.cpp:538

References Nektar::SpatialDomains::eRegular, GetMetricInfo(), MinMaxCheck(), and v_AllLeftCheck().

Referenced by v_ContainsPoint().

◆ Reset()

void Nektar::SpatialDomains::Geometry::Reset ( CurveMap curvedEdges,
CurveMap curvedFaces 
)
inline

Reset this geometry object: unset the current state, zero Geometry::m_coeffs and remove allocated GeomFactors.

Definition at line 667 of file Geometry.h.

668{
669 v_Reset(curvedEdges, curvedFaces);
670}
virtual void v_Reset(CurveMap &curvedEdges, CurveMap &curvedFaces)
Reset this geometry object: unset the current state, zero Geometry::m_coeffs and remove allocated Geo...
Definition: Geometry.cpp:395

References v_Reset().

◆ ResetNonRecursive()

void Nektar::SpatialDomains::Geometry::ResetNonRecursive ( CurveMap curvedEdges,
CurveMap curvedFaces 
)
inline

Reset this geometry object non-recursively: unset the current state, zero Geometry::m_coeffs and remove allocated GeomFactors.

Definition at line 676 of file Geometry.h.

678{
679 Geometry::v_Reset(curvedEdges, curvedFaces);
680}

References v_Reset().

◆ SetCoordim()

void Nektar::SpatialDomains::Geometry::SetCoordim ( int  coordim)
inline

Sets the coordinate dimension of this object (i.e. the dimension of the space in which this object is embedded).

Definition at line 293 of file Geometry.h.

294{
295 m_coordim = dim;
296}

References m_coordim.

◆ SetGlobalID()

void Nektar::SpatialDomains::Geometry::SetGlobalID ( int  globalid)
inline

Set the ID of this object.

Definition at line 335 of file Geometry.h.

336{
337 m_globalID = globalid;
338}

References m_globalID.

◆ Setup()

void Nektar::SpatialDomains::Geometry::Setup ( )
inline

Definition at line 682 of file Geometry.h.

683{
684 v_Setup();
685}

References v_Setup().

◆ SetUpCoeffs()

void Nektar::SpatialDomains::Geometry::SetUpCoeffs ( const int  nCoeffs)
inlineprotected

◆ v_AllLeftCheck()

int Nektar::SpatialDomains::Geometry::v_AllLeftCheck ( const Array< OneD, const NekDouble > &  gloCoord)
protectedvirtual

Reimplemented in Nektar::SpatialDomains::Geometry2D, and Nektar::SpatialDomains::Geometry3D.

Definition at line 234 of file Geometry.cpp.

236{
237 return 0;
238}

Referenced by PreliminaryCheck().

◆ v_CalculateInverseIsoParam()

void Nektar::SpatialDomains::Geometry::v_CalculateInverseIsoParam ( )
protectedvirtual

Reimplemented in Nektar::SpatialDomains::Geometry2D, and Nektar::SpatialDomains::Geometry3D.

Definition at line 240 of file Geometry.cpp.

241{
243 "This function is only valid for shape type geometries");
244}
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
Definition: ErrorUtil.hpp:202

References Nektar::ErrorUtil::efatal, and NEKERROR.

◆ v_ContainsPoint()

bool Nektar::SpatialDomains::Geometry::v_ContainsPoint ( const Array< OneD, const NekDouble > &  gloCoord,
Array< OneD, NekDouble > &  locCoord,
NekDouble  tol,
NekDouble dist 
)
protectedvirtual

Determine whether an element contains a particular Cartesian coordinate \(\vec{x} = (x,y,z)\).

For curvilinear and non-affine elements (i.e. where the Jacobian varies as a function of the standard element coordinates), this is a non-linear optimisation problem that requires the use of a Newton iteration. Note therefore that this can be an expensive operation.

The parameter tol which is by default 0, can be used to expand the coordinate range of the standard element from \([-1,1]^d\) to \([-1-\epsilon,1+\epsilon\) to handle challenging edge cases. The function also returns the local coordinates corresponding to gloCoord that can be used to speed up subsequent searches.

Parameters
gloCoordThe coordinate \( (x,y,z) \).
locCoordOn exit, this is the local coordinate \(\vec{\xi}\) such that \(\chi(\vec{\xi}) = \vec{x}\).
tolThe tolerance used to dictate the bounding box of the standard coordinates \(\vec{\xi}\).
distOn exit, returns the minimum distance between gloCoord and the quadrature points inside the element.
Returns
true if the coordinate gloCoord is contained in the element; false otherwise.
See also
Geometry::GetLocCoords. dist is assigned value for curved elements

Reimplemented in Nektar::SpatialDomains::Geometry0D.

Definition at line 260 of file Geometry.cpp.

263{
264 int inside = PreliminaryCheck(gloCoord);
265 if (inside == -1)
266 {
267 dist = std::numeric_limits<double>::max();
268 return false;
269 }
270 dist = GetLocCoords(gloCoord, locCoord);
271 if (inside == 1)
272 {
273 dist = 0.;
274 return true;
275 }
276 else
277 {
278 Array<OneD, NekDouble> eta(GetShapeDim(), 0.);
279 m_xmap->LocCoordToLocCollapsed(locCoord, eta);
280 if (ClampLocCoords(eta, tol))
281 {
282 if (GetMetricInfo()->GetGtype() == eRegular)
283 {
284 dist = std::numeric_limits<double>::max();
285 }
286 return false;
287 }
288 return 3 != m_coordim ||
291 dist <= tol;
292 }
293}
NekDouble GetLocCoords(const Array< OneD, const NekDouble > &coords, Array< OneD, NekDouble > &Lcoords)
Determine the local collapsed coordinates that correspond to a given Cartesian coordinate for this ge...
Definition: Geometry.h:545
int PreliminaryCheck(const Array< OneD, const NekDouble > &gloCoord)
A fast and robust check if a given global coord is outside of a deformed element. For regular element...
Definition: Geometry.cpp:512
bool ClampLocCoords(Array< OneD, NekDouble > &locCoord, NekDouble tol=std::numeric_limits< NekDouble >::epsilon())
Clamp local coords to be within standard regions [-1, 1]^dim.
Definition: Geometry.cpp:561
StdRegions::StdExpansionSharedPtr m_xmap
mapping containing isoparametric transformation.
Definition: Geometry.h:195

References ClampLocCoords(), Nektar::LibUtilities::eQuadrilateral, Nektar::SpatialDomains::eRegular, Nektar::LibUtilities::eTriangle, GetLocCoords(), GetMetricInfo(), GetShapeDim(), m_coordim, m_shapeType, m_xmap, and PreliminaryCheck().

Referenced by ContainsPoint().

◆ v_FillGeom()

void Nektar::SpatialDomains::Geometry::v_FillGeom ( )
protectedvirtual

Populate the coordinate mapping Geometry::m_coeffs information from any children geometry elements.

See also
v_FillGeom()

Reimplemented in Nektar::SpatialDomains::Geometry3D, Nektar::SpatialDomains::QuadGeom, Nektar::SpatialDomains::SegGeom, and Nektar::SpatialDomains::TriGeom.

Definition at line 386 of file Geometry.cpp.

387{
389 "This function is only valid for expansion type geometries");
390}

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by FillGeom(), Nektar::SpatialDomains::Geometry1D::v_GetLocCoords(), and Nektar::SpatialDomains::Geometry2D::v_GetLocCoords().

◆ v_FindDistance()

NekDouble Nektar::SpatialDomains::Geometry::v_FindDistance ( const Array< OneD, const NekDouble > &  xs,
Array< OneD, NekDouble > &  xi 
)
protectedvirtual

Reimplemented in Nektar::SpatialDomains::Geometry2D, and Nektar::SpatialDomains::SegGeom.

Definition at line 295 of file Geometry.cpp.

298{
300 "This function has not been defined for this geometry");
301 return false;
302}

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by FindDistance().

◆ v_GenGeomFactors()

virtual void Nektar::SpatialDomains::Geometry::v_GenGeomFactors ( )
protectedpure virtual

◆ v_GetCoord()

NekDouble Nektar::SpatialDomains::Geometry::v_GetCoord ( const int  i,
const Array< OneD, const NekDouble > &  Lcoord 
)
protectedvirtual

Given local collapsed coordinate Lcoord, return the value of physical coordinate in direction i.

Reimplemented in Nektar::SpatialDomains::Geometry3D, Nektar::SpatialDomains::QuadGeom, Nektar::SpatialDomains::SegGeom, and Nektar::SpatialDomains::TriGeom.

Definition at line 362 of file Geometry.cpp.

365{
367 "This function is only valid for expansion type geometries");
368 return 0.0;
369}

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by GetCoord().

◆ v_GetDir()

int Nektar::SpatialDomains::Geometry::v_GetDir ( const int  i,
const int  j 
) const
protectedvirtual

Returns the element coordinate direction corresponding to a given face coordinate direction.

Reimplemented in Nektar::SpatialDomains::HexGeom, Nektar::SpatialDomains::PrismGeom, Nektar::SpatialDomains::PyrGeom, Nektar::SpatialDomains::QuadGeom, Nektar::SpatialDomains::TetGeom, and Nektar::SpatialDomains::TriGeom.

Definition at line 351 of file Geometry.cpp.

353{
355 "This function has not been defined for this geometry");
356 return 0;
357}

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by GetDir().

◆ v_GetEdge()

Geometry1DSharedPtr Nektar::SpatialDomains::Geometry::v_GetEdge ( int  i) const
protectedvirtual

Returns edge i of this object.

Reimplemented in Nektar::SpatialDomains::Geometry2D, and Nektar::SpatialDomains::Geometry3D.

Definition at line 159 of file Geometry.cpp.

160{
162 "This function is only valid for shape type geometries");
163 return Geometry1DSharedPtr();
164}
std::shared_ptr< Geometry1D > Geometry1DSharedPtr
Definition: Geometry.h:61

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by GetEdge().

◆ v_GetEdgeFaceMap()

int Nektar::SpatialDomains::Geometry::v_GetEdgeFaceMap ( int  i,
int  j 
) const
protectedvirtual

Returns the standard element edge IDs that are connected to a given face.

For example, on a prism, edge 0 is connnected to faces 0 and 1; GetEdgeFaceMap(0,j) would therefore return the values 0 and 1 respectively. We assume that j runs between 0 and 1 inclusive, since every face is connected to precisely two faces for all 3D elements.

This function is used in the construction of the low-energy preconditioner.

Parameters
iThe edge to query connectivity for.
jThe local face index between 0 and 1 connected to this element.
See also
MultiRegions::PreconditionerLowEnergy

Reimplemented in Nektar::SpatialDomains::HexGeom, Nektar::SpatialDomains::PrismGeom, and Nektar::SpatialDomains::TetGeom.

Definition at line 329 of file Geometry.cpp.

331{
333 "This function has not been defined for this geometry");
334 return 0;
335}

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by GetEdgeFaceMap().

◆ v_GetEdgeNormalToFaceVert()

int Nektar::SpatialDomains::Geometry::v_GetEdgeNormalToFaceVert ( const int  i,
const int  j 
) const
protectedvirtual

Returns the standard lement edge IDs that are normal to a given face vertex.

For example, on a hexahedron, on face 0 at vertices 0,1,2,3 the edges normal to that face are 4,5,6,7, ; so GetEdgeNormalToFaceVert(0,j) would therefore return the values 4, 5, 6 and 7 respectively. We assume that j runs between 0 and 3 inclusive on a quadrilateral face and between 0 and 2 inclusive on a triangular face.

This is used to help set up a length scale normal to an face

Parameters
iThe face to query for the normal edge
jThe local vertex index between 0 and nverts on this face

Reimplemented in Nektar::SpatialDomains::HexGeom, Nektar::SpatialDomains::PrismGeom, Nektar::SpatialDomains::PyrGeom, and Nektar::SpatialDomains::TetGeom.

Definition at line 340 of file Geometry.cpp.

342{
344 "This function has not been defined for this geometry");
345 return 0;
346}

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by GetEdgeNormalToFaceVert().

◆ v_GetEorient()

StdRegions::Orientation Nektar::SpatialDomains::Geometry::v_GetEorient ( const int  i) const
protectedvirtual

Returns the orientation of edge i with respect to the ordering of edges in the standard element.

Reimplemented in Nektar::SpatialDomains::Geometry2D, and Nektar::SpatialDomains::Geometry3D.

Definition at line 189 of file Geometry.cpp.

191{
193 "This function is not valid for this geometry.");
195}

References Nektar::ErrorUtil::efatal, Nektar::StdRegions::eForwards, and NEKERROR.

Referenced by GetEorient().

◆ v_GetFace()

Geometry2DSharedPtr Nektar::SpatialDomains::Geometry::v_GetFace ( int  i) const
protectedvirtual

Returns face i of this object.

Reimplemented in Nektar::SpatialDomains::Geometry3D.

Definition at line 169 of file Geometry.cpp.

170{
172 "This function is only valid for shape type geometries");
173 return Geometry2DSharedPtr();
174}
std::shared_ptr< Geometry2D > Geometry2DSharedPtr
Definition: Geometry.h:62

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by GetFace().

◆ v_GetForient()

StdRegions::Orientation Nektar::SpatialDomains::Geometry::v_GetForient ( const int  i) const
protectedvirtual

Returns the orientation of face i with respect to the ordering of faces in the standard element.

Reimplemented in Nektar::SpatialDomains::Geometry3D.

Definition at line 200 of file Geometry.cpp.

202{
204 "This function is not valid for this geometry.");
205 return StdRegions::eFwd;
206}

References Nektar::ErrorUtil::efatal, Nektar::StdRegions::eFwd, and NEKERROR.

Referenced by GetForient().

◆ v_GetLocCoords()

NekDouble Nektar::SpatialDomains::Geometry::v_GetLocCoords ( const Array< OneD, const NekDouble > &  coords,
Array< OneD, NekDouble > &  Lcoords 
)
protectedvirtual

Determine the local collapsed coordinates that correspond to a given Cartesian coordinate for this geometry object.

For curvilinear and non-affine elements (i.e. where the Jacobian varies as a function of the standard element coordinates), this is a non-linear optimisation problem that requires the use of a Newton iteration. Note therefore that this can be an expensive operation.

Note that, clearly, the provided Cartesian coordinate lie outside the element. The function therefore returns the minimum distance from some position in the element to . Lcoords will also be constrained to fit within the range \([-1,1]^d\) where \( d \) is the dimension of the element.

Parameters
coordsInput Cartesian global coordinates
LcoordsCorresponding local coordinates
Returns
Distance between obtained coordinates and provided ones.

Reimplemented in Nektar::SpatialDomains::Geometry1D, Nektar::SpatialDomains::Geometry2D, and Nektar::SpatialDomains::Geometry3D.

Definition at line 374 of file Geometry.cpp.

377{
379 "This function is only valid for expansion type geometries");
380 return 0.0;
381}

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by GetLocCoords().

◆ v_GetNumEdges()

int Nektar::SpatialDomains::Geometry::v_GetNumEdges ( ) const
protectedvirtual

Get the number of edges of this object.

Reimplemented in Nektar::SpatialDomains::Geometry2D, and Nektar::SpatialDomains::Geometry3D.

Definition at line 211 of file Geometry.cpp.

212{
213 return 0;
214}

Referenced by GetNumEdges().

◆ v_GetNumFaces()

int Nektar::SpatialDomains::Geometry::v_GetNumFaces ( ) const
protectedvirtual

Get the number of faces of this object.

Reimplemented in Nektar::SpatialDomains::Geometry3D.

Definition at line 219 of file Geometry.cpp.

220{
221 return 0;
222}

Referenced by GetNumFaces().

◆ v_GetNumVerts()

int Nektar::SpatialDomains::Geometry::v_GetNumVerts ( ) const
protectedvirtual

Get the number of vertices of this object.

Reimplemented in Nektar::SpatialDomains::Geometry2D, Nektar::SpatialDomains::Geometry3D, and Nektar::SpatialDomains::SegGeom.

Definition at line 179 of file Geometry.cpp.

180{
182 "This function is only valid for shape type geometries");
183 return 0;
184}

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by GetNumVerts().

◆ v_GetShapeDim()

int Nektar::SpatialDomains::Geometry::v_GetShapeDim ( ) const
protectedvirtual

Get the object's shape dimension.

For example, a segment is one dimensional and quadrilateral is two dimensional.

Reimplemented in Nektar::SpatialDomains::Geometry0D, Nektar::SpatialDomains::Geometry1D, Nektar::SpatialDomains::Geometry2D, and Nektar::SpatialDomains::Geometry3D.

Definition at line 227 of file Geometry.cpp.

228{
230 "This function is only valid for shape type geometries");
231 return 0;
232}

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by GetShapeDim().

◆ v_GetVertex()

virtual PointGeomSharedPtr Nektar::SpatialDomains::Geometry::v_GetVertex ( int  i) const
protectedpure virtual

◆ v_GetVertexEdgeMap()

int Nektar::SpatialDomains::Geometry::v_GetVertexEdgeMap ( int  i,
int  j 
) const
protectedvirtual

Returns the standard element edge IDs that are connected to a given vertex.

For example, on a prism, vertex 0 is connnected to edges 0, 3, and 4; GetVertexEdgeMap(0,j) would therefore return the values 0, 1 and 4 respectively. We assume that j runs between 0 and 2 inclusive, which is true for every 3D element asides from the pyramid.

This function is used in the construction of the low-energy preconditioner.

Parameters
iThe vertex to query connectivity for.
jThe local edge index between 0 and 2 connected to this element.
Todo:
Expand to work with pyramid elements.
See also
MultiRegions::PreconditionerLowEnergy

Reimplemented in Nektar::SpatialDomains::HexGeom, Nektar::SpatialDomains::PrismGeom, and Nektar::SpatialDomains::TetGeom.

Definition at line 307 of file Geometry.cpp.

309{
311 "This function has not been defined for this geometry");
312 return 0;
313}

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by GetVertexEdgeMap().

◆ v_GetVertexFaceMap()

int Nektar::SpatialDomains::Geometry::v_GetVertexFaceMap ( int  i,
int  j 
) const
protectedvirtual

Returns the standard element face IDs that are connected to a given vertex.

For example, on a hexahedron, vertex 0 is connnected to faces 0, 1, and 4; GetVertexFaceMap(0,j) would therefore return the values 0, 1 and 4 respectively. We assume that j runs between 0 and 2 inclusive, which is true for every 3D element asides from the pyramid.

This is used in the construction of the low-energy preconditioner.

Parameters
iThe vertex to query connectivity for.
jThe local face index between 0 and 2 connected to this element.
Todo:
Expand to work with pyramid elements.
See also
MultiRegions::PreconditionerLowEnergy

Reimplemented in Nektar::SpatialDomains::HexGeom, Nektar::SpatialDomains::PrismGeom, and Nektar::SpatialDomains::TetGeom.

Definition at line 318 of file Geometry.cpp.

320{
322 "This function has not been defined for this geometry");
323 return 0;
324}

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by GetVertexFaceMap().

◆ v_GetXmap()

StdRegions::StdExpansionSharedPtr Nektar::SpatialDomains::Geometry::v_GetXmap ( ) const
protectedvirtual

Return the mapping object Geometry::m_xmap that represents the coordinate transformation from standard element to physical element.

Definition at line 249 of file Geometry.cpp.

250{
251 return m_xmap;
252}

References m_xmap.

Referenced by GetXmap().

◆ v_Reset()

void Nektar::SpatialDomains::Geometry::v_Reset ( CurveMap curvedEdges,
CurveMap curvedFaces 
)
protectedvirtual

◆ v_Setup()

void Nektar::SpatialDomains::Geometry::v_Setup ( )
protectedvirtual

◆ ValidateRegGeomFactor()

GeomFactorsSharedPtr Nektar::SpatialDomains::Geometry::ValidateRegGeomFactor ( GeomFactorsSharedPtr  geomFactor)
staticprotected

Check to see if a geometric factor has already been created that contains the same regular information.

The principle behind this is that many regular (i.e. constant Jacobian) elements have identicial geometric factors. Memory may therefore be reduced by storing only the unique factors.

Parameters
geomFactorThe GeomFactor to check.
Returns
Either the cached GeomFactor or geomFactor.
Todo:
Currently this method is disabled since the lookup is very expensive.
Todo:
should this '#if 0' statement be removed?

Definition at line 88 of file Geometry.cpp.

90{
91 GeomFactorsSharedPtr returnval = geomFactor;
92
93/// \todo should this '#if 0' statement be removed?
94#if 0
95 bool found = false;
96 if (geomFactor->GetGtype() == eRegular)
97 {
98 for (GeomFactorsVectorIter iter = m_regGeomFactorsManager.begin();
99 iter != m_regGeomFactorsManager.end();
100 ++iter)
101 {
102 if (**iter == *geomFactor)
103 {
104 returnval = *iter;
105 found = true;
106 break;
107 }
108 }
109
110 if (!found)
111 {
112 m_regGeomFactorsManager.push_back(geomFactor);
113 returnval = geomFactor;
114 }
115 }
116#endif
117 return returnval;
118}
static GeomFactorsVector m_regGeomFactorsManager
Definition: Geometry.h:186

References Nektar::SpatialDomains::eRegular, and m_regGeomFactorsManager.

Referenced by GetGeomFactors().

Member Data Documentation

◆ m_boundingBox

Array<OneD, NekDouble> Nektar::SpatialDomains::Geometry::m_boundingBox
protected

Array containing bounding box.

Definition at line 209 of file Geometry.h.

Referenced by ClearBoundingBox(), and GetBoundingBox().

◆ m_coeffs

Array<OneD, Array<OneD, NekDouble> > Nektar::SpatialDomains::Geometry::m_coeffs
protected

◆ m_coordim

int Nektar::SpatialDomains::Geometry::m_coordim
protected

Coordinate dimension of this geometry object.

Definition at line 189 of file Geometry.h.

Referenced by Nektar::SpatialDomains::PointGeom::Add(), Nektar::SpatialDomains::Geometry2D::Geometry2D(), Nektar::SpatialDomains::Geometry3D::Geometry3D(), GetCoordim(), Nektar::SpatialDomains::PointGeom::GetCoords(), MinMaxCheck(), Nektar::SpatialDomains::PointGeom::Mult(), Nektar::SpatialDomains::PointGeom::PointGeom(), Nektar::SpatialDomains::QuadGeom::QuadGeom(), Nektar::SpatialDomains::SegGeom::SegGeom(), SetCoordim(), SetUpCoeffs(), Nektar::SpatialDomains::HexGeom::SetUpFaceOrientation(), Nektar::SpatialDomains::PrismGeom::SetUpFaceOrientation(), Nektar::SpatialDomains::PyrGeom::SetUpFaceOrientation(), Nektar::SpatialDomains::TetGeom::SetUpFaceOrientation(), Nektar::SpatialDomains::PointGeom::Sub(), Nektar::SpatialDomains::TriGeom::TriGeom(), Nektar::SpatialDomains::Geometry2D::v_AllLeftCheck(), v_ContainsPoint(), Nektar::SpatialDomains::Geometry3D::v_FillGeom(), Nektar::SpatialDomains::QuadGeom::v_FillGeom(), Nektar::SpatialDomains::SegGeom::v_FillGeom(), Nektar::SpatialDomains::TriGeom::v_FillGeom(), Nektar::SpatialDomains::SegGeom::v_FindDistance(), Nektar::SpatialDomains::HexGeom::v_GenGeomFactors(), Nektar::SpatialDomains::PrismGeom::v_GenGeomFactors(), Nektar::SpatialDomains::PyrGeom::v_GenGeomFactors(), Nektar::SpatialDomains::QuadGeom::v_GenGeomFactors(), Nektar::SpatialDomains::SegGeom::v_GenGeomFactors(), Nektar::SpatialDomains::TetGeom::v_GenGeomFactors(), Nektar::SpatialDomains::TriGeom::v_GenGeomFactors(), Nektar::SpatialDomains::Geometry1D::v_GetLocCoords(), and Nektar::SpatialDomains::Geometry2D::v_GetLocCoords().

◆ m_geomFactors

GeomFactorsSharedPtr Nektar::SpatialDomains::Geometry::m_geomFactors
protected

◆ m_geomFactorsState

GeomState Nektar::SpatialDomains::Geometry::m_geomFactorsState
protected

◆ m_geomType

GeomType Nektar::SpatialDomains::Geometry::m_geomType
protected

Type of geometry.

Definition at line 201 of file Geometry.h.

◆ m_globalID

int Nektar::SpatialDomains::Geometry::m_globalID
protected

◆ m_invIsoParam

Array<OneD, Array<OneD, NekDouble> > Nektar::SpatialDomains::Geometry::m_invIsoParam
protected

◆ m_isoParameter

Array<OneD, Array<OneD, NekDouble> > Nektar::SpatialDomains::Geometry::m_isoParameter
protected

◆ m_regGeomFactorsManager

GeomFactorsVector Nektar::SpatialDomains::Geometry::m_regGeomFactorsManager
staticprotected

Definition at line 186 of file Geometry.h.

Referenced by ValidateRegGeomFactor().

◆ m_setupState

bool Nektar::SpatialDomains::Geometry::m_setupState
protected

◆ m_shapeType

LibUtilities::ShapeType Nektar::SpatialDomains::Geometry::m_shapeType
protected

◆ m_state

GeomState Nektar::SpatialDomains::Geometry::m_state
protected

◆ m_straightEdge

int Nektar::SpatialDomains::Geometry::m_straightEdge
protected

◆ m_xmap

StdRegions::StdExpansionSharedPtr Nektar::SpatialDomains::Geometry::m_xmap
protected

\(\chi\) mapping containing isoparametric transformation.

Definition at line 195 of file Geometry.h.

Referenced by Nektar::SpatialDomains::SegGeom::GenerateOneSpaceDimGeom(), Nektar::SpatialDomains::Geometry3D::NewtonIterationForLocCoord(), Nektar::SpatialDomains::Geometry2D::NewtonIterationForLocCoord(), Nektar::SpatialDomains::SegGeom::SegGeom(), Nektar::SpatialDomains::HexGeom::SetUpXmap(), Nektar::SpatialDomains::PrismGeom::SetUpXmap(), Nektar::SpatialDomains::PyrGeom::SetUpXmap(), Nektar::SpatialDomains::QuadGeom::SetUpXmap(), Nektar::SpatialDomains::SegGeom::SetUpXmap(), Nektar::SpatialDomains::TetGeom::SetUpXmap(), Nektar::SpatialDomains::TriGeom::SetUpXmap(), v_ContainsPoint(), Nektar::SpatialDomains::Geometry3D::v_FillGeom(), Nektar::SpatialDomains::QuadGeom::v_FillGeom(), Nektar::SpatialDomains::SegGeom::v_FillGeom(), Nektar::SpatialDomains::TriGeom::v_FillGeom(), Nektar::SpatialDomains::Geometry2D::v_FindDistance(), Nektar::SpatialDomains::SegGeom::v_FindDistance(), Nektar::SpatialDomains::HexGeom::v_GenGeomFactors(), Nektar::SpatialDomains::PrismGeom::v_GenGeomFactors(), Nektar::SpatialDomains::PyrGeom::v_GenGeomFactors(), Nektar::SpatialDomains::QuadGeom::v_GenGeomFactors(), Nektar::SpatialDomains::SegGeom::v_GenGeomFactors(), Nektar::SpatialDomains::TetGeom::v_GenGeomFactors(), Nektar::SpatialDomains::TriGeom::v_GenGeomFactors(), Nektar::SpatialDomains::Geometry3D::v_GetCoord(), Nektar::SpatialDomains::QuadGeom::v_GetCoord(), Nektar::SpatialDomains::SegGeom::v_GetCoord(), Nektar::SpatialDomains::TriGeom::v_GetCoord(), Nektar::SpatialDomains::Geometry1D::v_GetLocCoords(), Nektar::SpatialDomains::Geometry2D::v_GetLocCoords(), Nektar::SpatialDomains::Geometry3D::v_GetLocCoords(), v_GetXmap(), Nektar::SpatialDomains::HexGeom::v_Reset(), Nektar::SpatialDomains::PyrGeom::v_Reset(), Nektar::SpatialDomains::QuadGeom::v_Reset(), Nektar::SpatialDomains::SegGeom::v_Reset(), Nektar::SpatialDomains::TriGeom::v_Reset(), Nektar::SpatialDomains::HexGeom::v_Setup(), Nektar::SpatialDomains::PrismGeom::v_Setup(), Nektar::SpatialDomains::PyrGeom::v_Setup(), Nektar::SpatialDomains::QuadGeom::v_Setup(), Nektar::SpatialDomains::SegGeom::v_Setup(), Nektar::SpatialDomains::TetGeom::v_Setup(), and Nektar::SpatialDomains::TriGeom::v_Setup().