|
GEOS
|
#include <BB_Tetrahedron.hpp>

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 | |
| ImplType * | getImpl () |
| 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_impl & | operator= (FiniteElementBase_impl const &)=default |
| Default copy assignment operator. More... | |
| GEOS_HOST_DEVICE FiniteElementBase_impl & | operator= (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. | |
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.
|
inline |
Get the device-compatible implementation type.
Definition at line 1418 of file BB_Tetrahedron.hpp.
|
inline |
Get the device-compatible implementation type.
Definition at line 1427 of file BB_Tetrahedron.hpp.