|
virtual | ~BB_Tetrahedron ()=default |
|
virtual GEOS_HOST_DEVICE localIndex | getNumQuadraturePoints () const override |
| Virtual getter for the number of quadrature points per element. More...
|
|
GEOS_HOST_DEVICE virtual GEOS_FORCE_INLINE localIndex | getNumSupportPoints () const override |
| Virtual getter for the number of support points per element. More...
|
|
GEOS_HOST_DEVICE virtual GEOS_FORCE_INLINE localIndex | getMaxSupportPoints () const override |
| Get the maximum number of support points for this element. More...
|
|
| FiniteElementBase ()=default |
| Default Constructor.
|
|
GEOS_HOST_DEVICE | FiniteElementBase (FiniteElementBase const &source) |
| Copy Constructor. More...
|
|
| FiniteElementBase (FiniteElementBase &&)=default |
| Default Move constructor.
|
|
FiniteElementBase & | operator= (FiniteElementBase const &)=delete |
| Deleted copy assignment operator. More...
|
|
FiniteElementBase & | operator= (FiniteElementBase &&)=delete |
| Deleted move assignment operator. More...
|
|
virtual GEOS_HOST_DEVICE | ~FiniteElementBase () |
| Destructor.
|
|
template<typename LEAF , typename SUBREGION_TYPE > |
GEOS_HOST_DEVICE void | setup (localIndex const &cellIndex, typename LEAF::template MeshData< SUBREGION_TYPE > const &meshData, typename LEAF::StackVariables &stack) const |
| Abstract setup method, possibly computing cell-dependent properties. More...
|
|
template<typename LEAF > |
GEOS_HOST_DEVICE localIndex | numSupportPoints (typename LEAF::StackVariables const &stack) const |
| Getter for the number of support points per element. More...
|
|
template<typename LEAF > |
GEOS_HOST_DEVICE real64 | getGradN (localIndex const k, localIndex const q, real64 const (&X)[LEAF::maxSupportPoints][3], real64(&gradN)[LEAF::maxSupportPoints][3]) const |
| Get the shape function gradients. More...
|
|
template<typename LEAF > |
GEOS_HOST_DEVICE real64 | getGradN (localIndex const k, localIndex const q, real64 const (&X)[LEAF::maxSupportPoints][3], typename LEAF::StackVariables const &stack, real64(&gradN)[LEAF::maxSupportPoints][3]) const |
| Get the shape function gradients. More...
|
|
template<typename LEAF > |
GEOS_HOST_DEVICE real64 | getGradN (localIndex const k, localIndex const q, int const X, real64(&gradN)[LEAF::maxSupportPoints][3]) const |
| Get the shape function gradients. More...
|
|
template<typename LEAF > |
GEOS_HOST_DEVICE real64 | getGradN (localIndex const k, localIndex const q, int const X, typename LEAF::StackVariables const &stack, real64(&gradN)[LEAF::maxSupportPoints][3]) const |
| Get the shape function gradients. More...
|
|
template<typename LEAF , localIndex NUMDOFSPERTRIALSUPPORTPOINT, bool UPPER = false> |
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...
|
|
template<typename LEAF , localIndex NUMDOFSPERTRIALSUPPORTPOINT> |
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...
|
|
void | setGradNView (arrayView4d< real64 const > const &source) |
| Sets m_viewGradN equal to an input view. More...
|
|
void | setDetJView (arrayView2d< real64 const > const &source) |
| Sets m_viewDetJ equal to an input view. More...
|
|
arrayView4d< real64 const > | getGradNView () const |
| Getter for m_viewGradN. More...
|
|
arrayView2d< real64 const > | getDetJView () const |
| Getter for m_viewDetJ. 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 (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 | 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...
|
|
template<typename SUBREGION_TYPE > |
static void | fillMeshData (NodeManager const &nodeManager, EdgeManager const &edgeManager, FaceManager const &faceManager, SUBREGION_TYPE const &cellSubRegion, MeshData< SUBREGION_TYPE > &meshData) |
| Method to fill a MeshData object. More...
|
|
template<typename LEAF , typename SUBREGION_TYPE > |
static void | initialize (NodeManager const &nodeManager, EdgeManager const &edgeManager, FaceManager const &faceManager, SUBREGION_TYPE const &cellSubRegion, typename LEAF::template MeshData< SUBREGION_TYPE > &meshData) |
| Abstract initialization method. More...
|
|
template<typename SUBREGION_TYPE > |
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void | setupStack (localIndex const &cellIndex, MeshData< SUBREGION_TYPE > const &meshData, StackVariables &stack) |
| Empty setup method. More...
|
|
template<int N> |
constexpr static GEOS_HOST_DEVICE PDEUtilities::FunctionSpace | getFunctionSpace () |
| Getter for the function space. More...
|
|
template<localIndex NUMDOFSPERTRIALSUPPORTPOINT, localIndex MAXSUPPORTPOINTS, bool UPPER> |
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void | addGradGradStabilization (StackVariables 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...
|
|
template<localIndex NUMDOFSPERTRIALSUPPORTPOINT, localIndex MAXSUPPORTPOINTS> |
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void | addEvaluatedGradGradStabilization (StackVariables 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...
|
|
template<int NUM_SUPPORT_POINTS> |
static GEOS_HOST_DEVICE void | value (real64 const (&N)[NUM_SUPPORT_POINTS], real64 const (&var)[NUM_SUPPORT_POINTS], real64 &value) |
| Compute the interpolated value of a variable. More...
|
|
template<int NUM_SUPPORT_POINTS, int NUM_COMPONENTS> |
static GEOS_HOST_DEVICE void | value (real64 const (&N)[NUM_SUPPORT_POINTS], real64 const (&var)[NUM_SUPPORT_POINTS][NUM_COMPONENTS], real64(&value)[NUM_COMPONENTS]) |
| Compute the interpolated value of a vector variable. More...
|
|
template<int NUM_SUPPORT_POINTS, typename GRADIENT_TYPE > |
static GEOS_HOST_DEVICE void | symmetricGradient (GRADIENT_TYPE const &gradN, real64 const (&var)[NUM_SUPPORT_POINTS][3], real64(&gradVar)[6]) |
| Calculate the symmetric gradient of a vector valued support field at a point using the stored basis function gradients for all support points. More...
|
|
template<int NUM_SUPPORT_POINTS, typename GRADIENT_TYPE > |
static GEOS_HOST_DEVICE real64 | symmetricGradientTrace (GRADIENT_TYPE const &gradN, real64 const (&var)[NUM_SUPPORT_POINTS][3]) |
| Calculate the trace of the symmetric gradient of a vector valued support field (i.e. the volumetric strain for the displacement field) at a point using the stored basis function gradients for all support points. More...
|
|
template<int NUM_SUPPORT_POINTS, typename GRADIENT_TYPE > |
static GEOS_HOST_DEVICE void | gradient (GRADIENT_TYPE const &gradN, real64 const (&var)[NUM_SUPPORT_POINTS], real64(&gradVar)[3]) |
| Calculate the gradient of a scalar valued support field at a point using the input basis function gradients. More...
|
|
template<int NUM_SUPPORT_POINTS, typename GRADIENT_TYPE > |
static GEOS_HOST_DEVICE void | gradient (GRADIENT_TYPE const &gradN, real64 const (&var)[NUM_SUPPORT_POINTS][3], real64(&gradVar)[3][3]) |
| Calculate the gradient of a vector valued support field at a point using the input basis function gradients. More...
|
|
template<int NUM_SUPPORT_POINTS, typename GRADIENT_TYPE > |
static GEOS_HOST_DEVICE void | valueAndGradient (real64 const (&N)[NUM_SUPPORT_POINTS], GRADIENT_TYPE const &gradN, real64 const (&var)[NUM_SUPPORT_POINTS], real64 &value, real64(&gradVar)[3]) |
| Calculate the value and gradient of a scalar valued support field at a point using the input basis function gradients. More...
|
|
template<int NUM_SUPPORT_POINTS, typename GRADIENT_TYPE > |
static GEOS_HOST_DEVICE void | plusGradNajAij (GRADIENT_TYPE const &gradN, real64 const (&var_detJxW)[6], real64(&R)[NUM_SUPPORT_POINTS][3]) |
| Inner product of each basis function gradient with a rank-2 symmetric tensor. More...
|
|
template<int NUM_SUPPORT_POINTS, typename GRADIENT_TYPE > |
static GEOS_HOST_DEVICE void | plusGradNajAij (GRADIENT_TYPE const &gradN, real64 const (&var_detJxW)[3][3], real64(&R)[NUM_SUPPORT_POINTS][3]) |
| Inner product of each basis function gradient with a rank-2 symmetric tensor. More...
|
|
template<int NUM_SUPPORT_POINTS> |
static GEOS_HOST_DEVICE void | plusNaFi (real64 const (&N)[NUM_SUPPORT_POINTS], real64 const (&forcingTerm_detJxW)[3], real64(&R)[NUM_SUPPORT_POINTS][3]) |
| Product of each shape function with a vector forcing term. More...
|
|
template<int NUM_SUPPORT_POINTS, typename GRADIENT_TYPE > |
static GEOS_HOST_DEVICE void | plusGradNajAijPlusNaFi (GRADIENT_TYPE const &gradN, real64 const (&var_detJxW)[3][3], real64 const (&N)[NUM_SUPPORT_POINTS], real64 const (&forcingTerm_detJxW)[3], real64(&R)[NUM_SUPPORT_POINTS][3]) |
| Inner product of each basis function gradient with a rank-2 symmetric tensor added to the product each shape function with a vector. More...
|
|
template<int NUM_SUPPORT_POINTS, typename GRADIENT_TYPE > |
static GEOS_HOST_DEVICE void | plusGradNajAijPlusNaFi (GRADIENT_TYPE const &gradN, real64 const (&var_detJxW)[6], real64 const (&N)[NUM_SUPPORT_POINTS], real64 const (&forcingTerm_detJxW)[3], real64(&R)[NUM_SUPPORT_POINTS][3]) |
| Inner product of each basis function gradient with a rank-2 tensor added to the product each shape function with a vector. More...
|
|