Branch data Line data Source code
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, const double* field, const int ndim, const int num_tuples,
16 : : double* work, double* result );
17 : :
18 : : /** \brief Reverse-evaluation of parametric coordinates at physical space position */
19 : : static ErrorCode reverseEvalFcn( EvalFcn eval, JacobianFcn jacob, InsideFcn ins, const double* posn,
20 : : const double* verts, const int nverts, const int ndim, const double iter_tol,
21 : : const double inside_tol, double* work, double* params, int* is_inside );
22 : :
23 : : /** \brief Evaluate the normal at a specified facet*/
24 : : static ErrorCode normalFcn( const int ientDim, const int facet, const int nverts, const double* verts,
25 : : double normal[] );
26 : :
27 : : /** \brief Evaluate the jacobian at a specified parametric position */
28 : : static ErrorCode jacobianFcn( const double* params, const double* verts, const int nverts, const int ndim,
29 : : double* work, double* result );
30 : :
31 : : /** \brief Forward-evaluation of field at parametric coordinates */
32 : : static ErrorCode integrateFcn( const double* field, const double* verts, const int nverts, const int ndim,
33 : : const int num_tuples, double* work, double* result );
34 : :
35 : : /** \brief Function that returns whether or not the parameters are inside the natural space of
36 : : * the element */
37 : : static int insideFcn( const double* params, const int ndim, const double tol );
38 : :
39 : 2 : static EvalSet eval_set()
40 : : {
41 : 2 : return EvalSet( evalFcn, reverseEvalFcn, normalFcn, jacobianFcn, integrateFcn, NULL, insideFcn );
42 : : }
43 : :
44 : 1 : static bool compatible( EntityType tp, int numv, EvalSet& eset )
45 : : {
46 [ + - ][ + - ]: 1 : if( tp == MBHEX && numv == 27 )
47 : : {
48 [ + - ]: 1 : eset = eval_set();
49 : 1 : return true;
50 : : }
51 : : else
52 : 1 : return false;
53 : : }
54 : :
55 : : protected:
56 : : static double SH( const int i, const double params );
57 : : static double DSH( const int i, const double params );
58 : :
59 : : /* Preimages of the vertices -- "canonical vertices" -- are known as "corners". */
60 : : static const int corner[27][3];
61 : : static const double gauss[8][2]; // TODO fix me
62 : : static const unsigned int corner_count = 27;
63 : : static const unsigned int gauss_count = 8; // TODO fix me
64 : :
65 : : }; // class QuadraticHex
66 : :
67 : : } // namespace moab
68 : :
69 : : #endif
|