Loading [MathJax]/extensions/tex2jax.js
Mesh Oriented datABase  (version 5.5.1)
An array-based unstructured mesh library
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
QuadraticHex.hpp
Go to the documentation of this file.
1 #ifndef QUADRATIC_HEX_HPP 2 #define QUADRATIC_HEX_HPP 3 /**\brief Shape function space for trilinear hexahedron, obtained by a pushforward of the canonical 4  * linear (affine) functions. */ 5  6 #include "moab/ElemEvaluator.hpp" 7  8 namespace moab 9 { 10  11 class QuadraticHex 12 { 13  public: 14  /** \brief Forward-evaluation of field at parametric coordinates */ 15  static ErrorCode evalFcn( const double* params, 16  const double* field, 17  const int ndim, 18  const int num_tuples, 19  double* work, 20  double* result ); 21  22  /** \brief Reverse-evaluation of parametric coordinates at physical space position */ 23  static ErrorCode reverseEvalFcn( EvalFcn eval, 24  JacobianFcn jacob, 25  InsideFcn ins, 26  const double* posn, 27  const double* verts, 28  const int nverts, 29  const int ndim, 30  const double iter_tol, 31  const double inside_tol, 32  double* work, 33  double* params, 34  int* is_inside ); 35  36  /** \brief Evaluate the normal at a specified facet*/ 37  static ErrorCode normalFcn( const int ientDim, 38  const int facet, 39  const int nverts, 40  const double* verts, 41  double normal[] ); 42  43  /** \brief Evaluate the jacobian at a specified parametric position */ 44  static ErrorCode jacobianFcn( const double* params, 45  const double* verts, 46  const int nverts, 47  const int ndim, 48  double* work, 49  double* result ); 50  51  /** \brief Forward-evaluation of field at parametric coordinates */ 52  static ErrorCode integrateFcn( const double* field, 53  const double* verts, 54  const int nverts, 55  const int ndim, 56  const int num_tuples, 57  double* work, 58  double* result ); 59  60  /** \brief Function that returns whether or not the parameters are inside the natural space of 61  * the element */ 62  static int insideFcn( const double* params, const int ndim, const double tol ); 63  64  static EvalSet eval_set() 65  { 66  return EvalSet( evalFcn, reverseEvalFcn, normalFcn, jacobianFcn, integrateFcn, NULL, insideFcn ); 67  } 68  69  static bool compatible( EntityType tp, int numv, EvalSet& eset ) 70  { 71  if( tp == MBHEX && numv == 27 ) 72  { 73  eset = eval_set(); 74  return true; 75  } 76  else 77  return false; 78  } 79  80  protected: 81  static double SH( const int i, const double params ); 82  static double DSH( const int i, const double params ); 83  84  /* Preimages of the vertices -- "canonical vertices" -- are known as "corners". */ 85  static const int corner[27][3]; 86  static const double gauss[8][2]; // TODO fix me 87  static const unsigned int corner_count = 27; 88  static const unsigned int gauss_count = 8; // TODO fix me 89  90 }; // class QuadraticHex 91  92 } // namespace moab 93  94 #endif