Branch data Line data Source code
1 : : #ifndef LINEAR_QUAD_HPP
2 : : #define LINEAR_QUAD_HPP
3 : : /**\brief Shape function space for trilinear quadahedron, obtained by a pushforward of the canonical
4 : : * linear (affine) functions. */
5 : :
6 : : #include "moab/ElemEvaluator.hpp"
7 : : #include "moab/CN.hpp"
8 : :
9 : : namespace moab
10 : : {
11 : :
12 : : class LinearQuad
13 : : {
14 : : public:
15 : : /** \brief Forward-evaluation of field at parametric coordinates */
16 : : static ErrorCode evalFcn( const double* params, const double* field, const int ndim, const int num_tuples,
17 : : double* work, double* result );
18 : :
19 : : /** \brief Reverse-evaluation of parametric coordinates at physical space position */
20 : : static ErrorCode reverseEvalFcn( EvalFcn eval, JacobianFcn jacob, InsideFcn ins, const double* posn,
21 : : const double* verts, const int nverts, const int ndim, const double iter_tol,
22 : : const double inside_tol, double* work, double* params, int* is_inside );
23 : :
24 : : /** \brief Evaluate the normal at a specified facet*/
25 : : static ErrorCode normalFcn( const int ientDim, const int facet, const int nverts, const double* verts,
26 : : double normal[] );
27 : :
28 : : /** \brief Evaluate the jacobian at a specified parametric position */
29 : : static ErrorCode jacobianFcn( const double* params, const double* verts, const int nverts, const int ndim,
30 : : double* work, double* result );
31 : :
32 : : /** \brief Forward-evaluation of field at parametric coordinates */
33 : : static ErrorCode integrateFcn( const double* field, const double* verts, const int nverts, const int ndim,
34 : : const int num_tuples, double* work, double* result );
35 : :
36 : : /** \brief Function that returns whether or not the parameters are inside the natural space of
37 : : * the element */
38 : : static int insideFcn( const double* params, const int ndim, const double tol );
39 : :
40 : 4 : static EvalSet eval_set()
41 : : {
42 : 4 : return EvalSet( evalFcn, reverseEvalFcn, normalFcn, jacobianFcn, integrateFcn, NULL, insideFcn );
43 : : }
44 : :
45 : 2 : static bool compatible( EntityType tp, int numv, EvalSet& eset )
46 : : {
47 [ + - ][ + - ]: 2 : if( tp == MBQUAD && numv == 4 )
48 : : {
49 [ + - ]: 2 : eset = eval_set();
50 : 2 : return true;
51 : : }
52 : : else
53 : 2 : return false;
54 : : }
55 : :
56 : : protected:
57 : : /* Preimages of the vertices -- "canonical vertices" -- are known as "corners". */
58 : : static const double corner[4][2];
59 : : static const double gauss[1][2];
60 : : static const unsigned int corner_count = 4;
61 : : static const unsigned int gauss_count = 1;
62 : :
63 : : }; // class LinearQuad
64 : :
65 : : } // namespace moab
66 : :
67 : : #endif
|