Branch data Line data Source code
1 : : #ifndef LINEAR_TET_HPP
2 : : #define LINEAR_TET_HPP
3 : : /**\brief Shape function space for trilinear tetrahedron, 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 LinearTet
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 Initialize this EvalSet */
37 : : static ErrorCode initFcn( const double* verts, const int nverts, double*& work );
38 : :
39 : : /** \brief Function that returns whether or not the parameters are inside the natural space of
40 : : * the element */
41 : : static int insideFcn( const double* params, const int ndim, const double tol );
42 : :
43 : : static ErrorCode evaluate_reverse( EvalFcn eval, JacobianFcn jacob, InsideFcn inside_f, const double* posn,
44 : : const double* verts, const int nverts, const int ndim, const double iter_tol,
45 : : const double inside_tol, double* work, double* params, int* inside );
46 : :
47 : 2 : static EvalSet eval_set()
48 : : {
49 : 2 : return EvalSet( evalFcn, reverseEvalFcn, normalFcn, jacobianFcn, integrateFcn, initFcn, insideFcn );
50 : : }
51 : :
52 : 0 : static bool compatible( EntityType tp, int numv, EvalSet& eset )
53 : : {
54 [ # # ][ # # ]: 0 : if( tp == MBTET && numv >= 4 )
55 : : {
56 [ # # ]: 0 : eset = eval_set();
57 : 0 : return true;
58 : : }
59 : : else
60 : 0 : return false;
61 : : }
62 : :
63 : : protected:
64 : : static const double corner[4][3];
65 : : }; // class LinearTet
66 : :
67 : : } // namespace moab
68 : :
69 : : #endif
|