Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 #ifndef QUADRATIC_HEX_HPP 00002 #define QUADRATIC_HEX_HPP 00003 /**\brief Shape function space for trilinear hexahedron, obtained by a pushforward of the canonical 00004 * linear (affine) functions. */ 00005 00006 #include "moab/ElemEvaluator.hpp" 00007 00008 namespace moab 00009 { 00010 00011 class QuadraticHex 00012 { 00013 public: 00014 /** \brief Forward-evaluation of field at parametric coordinates */ 00015 static ErrorCode evalFcn( const double* params, 00016 const double* field, 00017 const int ndim, 00018 const int num_tuples, 00019 double* work, 00020 double* result ); 00021 00022 /** \brief Reverse-evaluation of parametric coordinates at physical space position */ 00023 static ErrorCode reverseEvalFcn( EvalFcn eval, 00024 JacobianFcn jacob, 00025 InsideFcn ins, 00026 const double* posn, 00027 const double* verts, 00028 const int nverts, 00029 const int ndim, 00030 const double iter_tol, 00031 const double inside_tol, 00032 double* work, 00033 double* params, 00034 int* is_inside ); 00035 00036 /** \brief Evaluate the normal at a specified facet*/ 00037 static ErrorCode normalFcn( const int ientDim, 00038 const int facet, 00039 const int nverts, 00040 const double* verts, 00041 double normal[] ); 00042 00043 /** \brief Evaluate the jacobian at a specified parametric position */ 00044 static ErrorCode jacobianFcn( const double* params, 00045 const double* verts, 00046 const int nverts, 00047 const int ndim, 00048 double* work, 00049 double* result ); 00050 00051 /** \brief Forward-evaluation of field at parametric coordinates */ 00052 static ErrorCode integrateFcn( const double* field, 00053 const double* verts, 00054 const int nverts, 00055 const int ndim, 00056 const int num_tuples, 00057 double* work, 00058 double* result ); 00059 00060 /** \brief Function that returns whether or not the parameters are inside the natural space of 00061 * the element */ 00062 static int insideFcn( const double* params, const int ndim, const double tol ); 00063 00064 static EvalSet eval_set() 00065 { 00066 return EvalSet( evalFcn, reverseEvalFcn, normalFcn, jacobianFcn, integrateFcn, NULL, insideFcn ); 00067 } 00068 00069 static bool compatible( EntityType tp, int numv, EvalSet& eset ) 00070 { 00071 if( tp == MBHEX && numv == 27 ) 00072 { 00073 eset = eval_set(); 00074 return true; 00075 } 00076 else 00077 return false; 00078 } 00079 00080 protected: 00081 static double SH( const int i, const double params ); 00082 static double DSH( const int i, const double params ); 00083 00084 /* Preimages of the vertices -- "canonical vertices" -- are known as "corners". */ 00085 static const int corner[27][3]; 00086 static const double gauss[8][2]; // TODO fix me 00087 static const unsigned int corner_count = 27; 00088 static const unsigned int gauss_count = 8; // TODO fix me 00089 00090 }; // class QuadraticHex 00091 00092 } // namespace moab 00093 00094 #endif