GEOS
Public Types | Public Member Functions | List of all members
geos::finiteElement::BB_Tetrahedron< ORDER > Class Template Referencefinal

More...

#include <BB_Tetrahedron.hpp>

Inheritance diagram for geos::finiteElement::BB_Tetrahedron< ORDER >:
Inheritance graph
[legend]

Public Types

using ImplType = BB_Tetrahedron_impl< ORDER >
 The Implementation type.
 
- Public Types inherited from geos::finiteElement::BB_Tetrahedron_impl< ORDER >
using Base = FiniteElementBase_impl< BB_Tetrahedron_NumNodes< ORDER >, 4, BB_Tetrahedron_NumNodes< ORDER > >
 Convenience alias for base class type.
 
using StackVariables = typename Base::StackVariables
 Stack variables for the element.
 
template<typename SubregionType >
using MeshData = typename Base::template MeshData< SubregionType >
 Mesh data structure for the element.
 

Public Member Functions

ImplTypegetImpl ()
 Get the device-compatible implementation type. More...
 
ImplType const * getImpl () const
 Get the device-compatible implementation type. More...
 
- Public Member Functions inherited from geos::finiteElement::FiniteElementBase_impl< BB_Tetrahedron_NumNodes< ORDER >, 4, BB_Tetrahedron_NumNodes< ORDER > >
GEOS_HOST_DEVICE FiniteElementBase_impl ()=default
 Default constructor.
 
GEOS_HOST_DEVICE FiniteElementBase_impl (FiniteElementBase_impl const &)=default
 Default copy constructor.
 
GEOS_HOST_DEVICE FiniteElementBase_impl (FiniteElementBase_impl &&)=default
 Default move constructor.
 
GEOS_HOST_DEVICE ~FiniteElementBase_impl ()=default
 Default destructor.
 
GEOS_HOST_DEVICE FiniteElementBase_imploperator= (FiniteElementBase_impl const &)=default
 Default copy assignment operator. More...
 
GEOS_HOST_DEVICE FiniteElementBase_imploperator= (FiniteElementBase_impl &&)=default
 Default move assignment operator. More...
 
GEOS_HOST_DEVICE void setup (localIndex const &cellIndex, MESH_DATA_TYPE const &meshData, typename LEAF::StackVariables &stack) const
 Abstract setup method, possibly computing cell-dependent properties. More...
 
GEOS_HOST_DEVICE void addGradGradStabilizationMatrix (typename LEAF::StackVariables const &stack, real64(&matrix)[LEAF::maxSupportPoints *NUMDOFSPERTRIALSUPPORTPOINT][LEAF::maxSupportPoints *NUMDOFSPERTRIALSUPPORTPOINT], real64 const scaleFactor=1.0) const
 Add stabilization of grad-grad bilinear form to input matrix. More...
 
GEOS_HOST_DEVICE GEOS_FORCE_INLINE void addEvaluatedGradGradStabilizationVector (typename LEAF::StackVariables const &stack, real64 const(&dofs)[LEAF::maxSupportPoints][NUMDOFSPERTRIALSUPPORTPOINT], real64(&targetVector)[LEAF::maxSupportPoints][NUMDOFSPERTRIALSUPPORTPOINT], real64 const scaleFactor=1.0) const
 Add a grad-grad stabilization operator evaluated at a provided vector of dofs to input vector. More...
 
- Public Member Functions inherited from geos::finiteElement::FiniteElementBase
 FiniteElementBase (localIndex const numSupportPoints, localIndex const maxSupportPoints, localIndex const numQuadraturePoints)
 Default constructor. More...
 
virtual ~FiniteElementBase ()=default
 Destructor.
 
localIndex getNumQuadraturePoints () const
 Getter for the number of quadrature points per element. More...
 
localIndex getNumSupportPoints () const
 Getter for the number of support points per element. More...
 
localIndex getMaxSupportPoints () const
 Get the maximum number of support points for this element. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from geos::finiteElement::BB_Tetrahedron_impl< ORDER >
static GEOS_HOST_DEVICE localIndex getNumQuadraturePoints ()
 Get the number of quadrature points. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE localIndex getNumQuadraturePoints (StackVariables const &stack)
 Get the number of quadrature points. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE localIndex getNumSupportPoints ()
 Get the number of support points. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE localIndex getMaxSupportPoints ()
 Get the maximum number of support points. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE localIndex getNumSupportPoints (StackVariables const &stack)
 Get the number of support points. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE real64 jacobianDeterminant (real64 const (&X)[4][3])
 Returns the determinant of the Jacobian of the element. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE real64 faceJacobianDeterminant (localIndex face, real64 const (&X)[4][3])
 Calculate the determinant of the jacobian on the face opposite to the given vertex. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void calcN (localIndex const, real64(&N)[numNodes])
 Calculate shape functions values for each support point at a quadrature point. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void calcN (localIndex const q, StackVariables const &stack, real64(&N)[numNodes])
 Calculate shape functions values for each support point at a quadrature point. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void calcN (real64 const (&lambda)[4], real64(&N)[numNodes])
 Calculate shape functions values at a single point using De Casteljau's algorithm. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void calcN (real64 const (&X)[4][3], real64 const (&coords)[3], real64(&N)[numNodes])
 Calculate shape functions values at a single point, given the coordinates of the tetrahedron vertices, using De Casteljau's algorithm. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void calcNandGradN (real64 const (&lambda)[4], real64 const (&N)[numNodes], real64(&gradN)[numNodes][4])
 Calculate the values and derivatives of shape functions with respect to barycentric coordinates at a single point using De Casteljau's algorithm. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void calcNandGradN (real64 const (&X)[4][3], real64 const (&coords)[3], real64(&N)[numNodes], real64(&gradN)[numNodes][4])
 Calculate the shape functions values and derivatives at a single point, given the coorginates of the tetrahedron vertices, using De Casteljau's algorithm. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE real64 calcJacobian (localIndex const q, real64 const (&X)[numNodes][3], real64(&J)[3][3])
 Calculate the Jacobian matrix at a quadrature point. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE real64 calcJacobian (localIndex const q, real64 const (&X)[numNodes][3], StackVariables const &stack, real64(&J)[3][3])
 Calculate the Jacobian matrix at a quadrature point. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE real64 calcGradN (localIndex const q, real64 const (&X)[numNodes][3], real64(&gradN)[numNodes][3])
 Calculate the shape functions derivatives wrt the physical coordinates. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE real64 calcGradN (localIndex const q, real64 const (&X)[numNodes][3], StackVariables const &stack, real64(&gradN)[numNodes][3])
 Calculate the shape functions derivatives wrt the physical coordinates. More...
 
GEOS_HOST_DEVICE constexpr static GEOS_FORCE_INLINE real64 integralTerm (const int a, const int b, const int c)
 Computes a! / ( b! * c! ) with b + c >= a >= b, c. More...
 
GEOS_HOST_DEVICE static constexpr GEOS_FORCE_INLINE real64 correctionFactorDerivative (int const i1, int const j1, int const k1, int const l1, int const i2, int const j2, int const k2, int const l2, int const dim)
 Computes the correction factor for the superposition integral in case a function has been derived once. The indices of the original function are ii1, j1, k1 and l1, and those of the once-derived one are i2, j2, k2 and l2. More...
 
GEOS_HOST_DEVICE static constexpr GEOS_FORCE_INLINE real64 computeSuperpositionIntegral (const int i1, const int j1, const int k1, const int l1, const int i2, const int j2, const int k2, const int l2)
 Computes the superposition integral between Bernstein-Bézier functions indexed by (i1, j1, k1, l1) and (i1, j2, k2, l2) More...
 
GEOS_HOST_DEVICE constexpr static GEOS_FORCE_INLINE real64 computeFaceSuperpositionIntegral (const int i1, const int j1, const int k1, const int i2, const int j2, const int k2)
 Computes the superposition integral over a face between Bernstein-Bézier functions whose indices are given by (i1, j1, k1, l1=0 ) and (i1, j2, k2, l2=0) More...
 
template<int I, int J, int K>
GEOS_HOST_DEVICE static constexpr GEOS_FORCE_INLINE int dofIndex ()
 Computes the local degree of freedom index given the shape function indices (i, j, k, l) for each vertex. Only i, j and k are needed since i + j + k + l = order. More...
 
GEOS_HOST_DEVICE static constexpr GEOS_FORCE_INLINE int dofIndex (const int i, const int j, const int k)
 Computes the local degree of freedom index given the shape function indices (i, j, k, l) for each vertex. Only i, j and k are needed since i + j + k + l = order This version takes indices as parameters and can be called with non-constexpr index values. More...
 
template<int C, int VTX>
GEOS_HOST_DEVICE static constexpr GEOS_FORCE_INLINE int indexToIJKL ()
 Computes the local degree of freedom index given the shape function indices for each vertex. More...
 
template<typename FUNC , int... Is>
GEOS_HOST_DEVICE static constexpr GEOS_FORCE_INLINE void loop_impl (FUNC &&func, std::integer_sequence< int, Is... >)
 Helper function for static for loop. More...
 
template<int N, typename FUNC >
static constexpr GEOS_HOST_DEVICE void loop (FUNC const &func)
 Helper function for static for loop. More...
 
template<typename FUNC >
GEOS_HOST_DEVICE static constexpr GEOS_FORCE_INLINE void barycentricCoordinateLoop (FUNC &&func)
 Helper function for loop over barycentric coordinates. More...
 
template<typename FUNC >
GEOS_HOST_DEVICE static constexpr GEOS_FORCE_INLINE void basisLoop (FUNC &&func)
 Helper function for loop over tet basis functions. More...
 
template<int c1, int i1, int j1, int k1, int l1, typename F , int... Is>
static constexpr GEOS_HOST_DEVICE void call_matching_cases (F &&func, std::integer_sequence< int, Is... >)
 Helper function for loop over tet basis functions that have one index in a given set of indices. If multiple indices are in the given list, the callback is called multiple times. This herlper is useful to avoid too much fold operations. More...
 
template<int... Is, typename FUNC >
static constexpr GEOS_HOST_DEVICE void conditionalBasisLoop (FUNC const &func)
 Helper function for loop over tet basis functions that have one index in a given set of indices. If multiple indices are in the given list, the callback is called multiple times. More...
 
template<typename FUNC >
GEOS_HOST_DEVICE static constexpr GEOS_FORCE_INLINE void faceBarycentricCoordinateLoop (FUNC &&func)
 Helper function for loop over barycentric coordinates of a face. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void computeReferenceMassMatrix (arraySlice2d< real64 > const &m)
 Computes the reference mass matrix, i.e., the superposition matrix of the shape functions in barycentric coordinates. The real-world mass matrix can be obtained by using the multiplying this matrix by the determinant of the Jacobian. More...
 
template<typename DAMPING >
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void computeReferenceDampingMatrix (real64(&d)[numNodes][numNodes], bool const face1Damped, bool const face2Damped, bool const face3Damped, bool const face4Damped)
 Computes the reference damping matrix, i.e., the superposition matrix of the shape functions in barycentric coordinates over faces. The real-world mass matrix can be obtained by using the multiplying this matrix by the determinant of the face Jacobian. More...
 
template<typename FUNC >
GEOS_HOST_DEVICE static constexpr GEOS_FORCE_INLINE void computeMassTerm (real64 const (&X)[4][3], FUNC &&func)
 Computes the non-zero contributions inside the element of the mass matrix M, i.e., the superposition matrix of shape functions. More...
 
GEOS_HOST_DEVICE static constexpr GEOS_FORCE_INLINE real64 computeFluxDerivativeFactor (real64 const (&X)[4][3], int x1, int x2, int o1, int o2)
 Function to compute the factor for the flux derivative term. More...
 
template<typename FUNC >
GEOS_HOST_DEVICE static constexpr GEOS_FORCE_INLINE void computeStiffnessTerm (real64 const (&X)[4][3], FUNC &&func)
 Computes the non-zero contributions inside the element of the stiffness matrix R, i.e., the superposition matrix of first derivatives of shape functions. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE real64 edgeLength2 (localIndex i1, localIndex i2, real64 const (&X)[4][3])
 
template<typename FUNCP , typename FUNCF >
GEOS_HOST_DEVICE static constexpr GEOS_FORCE_INLINE void computeSurfaceTerms (real64 const (&X)[4][3], FUNCP &&funcP, FUNCF &&funcF)
 Computes the non-zero contributions inside the element of the surface terms, including the value of the superposition integral of basis functions (used for the penalty and damping terms) and the superposition integral of the derivative of a function with the value of the other, used for the flux terms. More...
 
- Static Public Member Functions inherited from geos::finiteElement::FiniteElementBase_impl< BB_Tetrahedron_NumNodes< ORDER >, 4, BB_Tetrahedron_NumNodes< ORDER > >
static GEOS_HOST_DEVICE localIndex getNumQuadraturePoints ()
 Get the number of quadrature points. More...
 
static GEOS_HOST_DEVICE localIndex getNumQuadraturePoints (STACK_VARIABLES_TYPE const &stack)
 Get the number of quadrature points. More...
 
static GEOS_HOST_DEVICE localIndex getNumSupportPoints ()
 Get the number of support points. More...
 
static GEOS_HOST_DEVICE localIndex getNumSupportPoints (STACK_VARIABLES_TYPE const &stack)
 Get the number of support points. More...
 
static GEOS_HOST_DEVICE localIndex getMaxSupportPoints ()
 Get the maximum number of support points. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void getSamplingPointCoordInParentSpace (int const &linearIndex, real64(&samplingPointCoord)[3])
 Get the Sampling Point Coord In the Parent Space. More...
 
static void fillMeshData (NodeManager const &nodeManager, EdgeManager const &edgeManager, FaceManager const &faceManager, SUBREGION_TYPE const &cellSubRegion, MESH_DATA_TYPE &meshData)
 Method to fill a MeshData object. More...
 
static void initialize (NodeManager const &nodeManager, EdgeManager const &edgeManager, FaceManager const &faceManager, SUBREGION_TYPE const &cellSubRegion, MESH_DATA_TYPE &meshData)
 Abstract initialization method. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void setupStack (localIndex const &cellIndex, MESH_DATA_TYPE const &meshData, STACK_VARIABLES_TYPE &stack)
 Empty setup method. More...
 
constexpr static GEOS_HOST_DEVICE PDEUtilities::FunctionSpace getFunctionSpace ()
 Getter for the function space. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void addGradGradStabilization (STACK_VARIABLES_TYPE const &stack, real64(&matrix)[MAXSUPPORTPOINTS *NUMDOFSPERTRIALSUPPORTPOINT][MAXSUPPORTPOINTS *NUMDOFSPERTRIALSUPPORTPOINT], real64 const &scaleFactor)
 Empty method, here for compatibility with methods that require a stabilization of the grad-grad bilinear form. More...
 
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void addEvaluatedGradGradStabilization (STACK_VARIABLES_TYPE const &stack, real64 const(&dofs)[MAXSUPPORTPOINTS][NUMDOFSPERTRIALSUPPORTPOINT], real64(&targetVector)[MAXSUPPORTPOINTS][NUMDOFSPERTRIALSUPPORTPOINT], real64 const scaleFactor)
 Empty method, here for compatibility with methods that require a stabilization of the grad-grad bilinear form. More...
 
- Static Public Attributes inherited from geos::finiteElement::BB_Tetrahedron_impl< ORDER >
static constexpr int order = ORDER
 The order of the finite element.
 
constexpr static localIndex numNodesPerFace = ( ORDER + 1 ) * ( ORDER + 2 ) / 2
 The number of shape functions per face.
 
- Static Public Attributes inherited from geos::finiteElement::FiniteElementBase_impl< BB_Tetrahedron_NumNodes< ORDER >, 4, BB_Tetrahedron_NumNodes< ORDER > >
constexpr static localIndex numNodes
 The number of nodes per element.
 
constexpr static localIndex numSupportPoints
 The number of support points per element.
 
constexpr static localIndex maxSupportPoints
 The maximum number of support points per element.
 
constexpr static localIndex numFaces
 The number of faces per element.
 
constexpr static localIndex numQuadraturePoints
 The number of quadrature points per element.
 
constexpr static int numSamplingPointsPerDirection
 Number of sampling points.
 
constexpr static int numSamplingPoints
 The number of sampling points per element.
 

Detailed Description

template<int ORDER>
class geos::finiteElement::BB_Tetrahedron< ORDER >

This class contains the kernel accessible functions specific to the Bernstein-Bézier (BB) modal any-order tetrahedron finite element with Gaussian quadrature rules. Available functions are tailored for Discontinuous Galerkin (DG) applications. In barycentric coordinates l1, l2, l3, l4, the function indexed by (i1, i2, i3, i4) corresponds to the function (i1+i2+i3+i4+3)! / (i1! i2! i3! i4!) l1^i1 l2^i2 l3^i3 l4^i4 and they integrate to one over the reference element defined by 0<=l1,l2,l3,l3<=1, l1+l2+l3+l4=1

Definition at line 1391 of file BB_Tetrahedron.hpp.

Member Function Documentation

◆ getImpl() [1/2]

template<int ORDER>
ImplType* geos::finiteElement::BB_Tetrahedron< ORDER >::getImpl ( )
inline

Get the device-compatible implementation type.

Returns
A pointer to the device-compatible implementation type.

Definition at line 1418 of file BB_Tetrahedron.hpp.

◆ getImpl() [2/2]

template<int ORDER>
ImplType const* geos::finiteElement::BB_Tetrahedron< ORDER >::getImpl ( ) const
inline

Get the device-compatible implementation type.

Returns
A pointer to the device-compatible implementation type.

Definition at line 1427 of file BB_Tetrahedron.hpp.


The documentation for this class was generated from the following file: