GCC Code Coverage Report


Directory: ./
File: FiniteElement/basisFunction.hpp
Date: 2024-04-14 07:32:34
Exec Total Coverage
Lines: 13 15 86.7%
Branches: 6 12 50.0%

Line Branch Exec Source
1 // ______ ______ _ _ _____ ______
2 // | ____| ____| | (_)/ ____| | ____|
3 // | |__ | |__ | | _| (___ ___| |__
4 // | __| | __| | | | |\___ \ / __| __|
5 // | | | |____| |____| |____) | (__| |____
6 // |_| |______|______|_|_____/ \___|______|
7 // Finite Elements for Life Sciences and Engineering
8 //
9 // License: LGL2.1 License
10 // FELiScE default license: LICENSE in root folder
11 //
12 // Main authors: J-F. Gerbeau
13 //
14
15 #ifndef BASISFUNCTION_H
16 #define BASISFUNCTION_H
17
18 // System includes
19 #include <string>
20 #include <cassert>
21
22 // External includes
23
24 // Project includes
25 #include "Core/felisce.hpp"
26
27 namespace felisce
28 {
29 /*!
30 \class BasisFunction
31 \authors J-F. Gerbeau
32 \brief Class implementing the basis functions
33 */
34
35 class BasisFunction {
36 protected:
37 std::string m_name;
38 const int m_size; //!< number of basis functions
39 const int m_numCoor; //!< number of coordinates used by the functions
40 const int m_dim; //!< dimension of the result (in general 1)
41 const FunctionXYZ* m_phi; //!< pointer on the basis functions
42 const FunctionXYZ* m_dPhi; //!< pointer on the derivatives of the basis functions
43 const FunctionXYZ* m_d2Phi; //!< pointer on the second derivatives of the basis functions
44 public:
45 BasisFunction(const std::string& name,int size,int numCoor,const FunctionXYZ* phi, const FunctionXYZ* dPhi,const FunctionXYZ* d2Phi);
46 BasisFunction(const std::string& name,int size,int numCoor,int dim,const FunctionXYZ* phi,const FunctionXYZ* dPhi,const FunctionXYZ* d2Phi);
47 inline const std::string& name() const {
48 return m_name;
49 }
50 10437281 inline int size() const {
51 10437281 return m_size;
52 }
53 12972 inline int numCoor() const {
54 12972 return m_numCoor;
55 }
56 void print(int verbose,std::ostream& c=std::cout) const;
57 //! return the value of the i-th basis function on point (x,y,z)
58 63065697 inline double phi( int i, const Point& pt) const {
59 63065697 return m_phi[ i ] (pt);
60 }
61 // \todo : change x,y,z by Point in the following functions :
62 10336095 inline double phi( const int i, const double x, const double y, const double z ) const {
63
2/4
✓ Branch 0 taken 10336095 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10336095 times.
10336095 FEL_ASSERT(m_dim == 1 && i < m_size);
64
1/2
✓ Branch 2 taken 10336095 times.
✗ Branch 3 not taken.
10336095 return m_phi[ i ] ( Point(x, y, z) );
65 }
66 inline double phi( const int i, const double x, const double y, const double z, const int idim) const {
67 FEL_ASSERT(idim < m_dim && i < m_size);
68 return m_phi[ m_dim*idim + i ] ( Point(x, y, z) );
69 }
70 //! return the value of the icoor-th derivative of the i-th basis function on point (x,y,z)
71 inline double dPhi( const int i, const int icoor, const double x, const double y, const double z ) const {
72 FEL_ASSERT(m_dim == 1);
73 FEL_ASSERT( i < m_size && icoor < m_numCoor );
74 return m_dPhi[ i * m_numCoor + icoor ] ( Point(x, y, z) );
75 }
76 37829574 inline double dPhi( const int i, const int icoor, const Point& pt) const {
77
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 37829574 times.
37829574 FEL_ASSERT(m_dim == 1);
78
2/4
✓ Branch 0 taken 37829574 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 37829574 times.
37829574 FEL_ASSERT( i < m_size && icoor < m_numCoor );
79 37829574 return m_dPhi[ i * m_numCoor + icoor ] (pt);
80 }
81 //! return the value of the (icoor,jcoor)-th second derivative of the i-th basis function on point (x,y,z)
82 inline double d2Phi( const int i, const int icoor, const int jcoor, const double x, const double y, const double z ) const {
83 FEL_ASSERT(m_dim == 1);
84 FEL_ASSERT( i < m_size && icoor < m_numCoor && jcoor < m_numCoor );
85 return m_d2Phi[ ( i * m_numCoor + icoor ) * m_numCoor + jcoor ] ( Point(x, y, z) );
86 }
87 inline double divPhi(const int i, const Point& pt) {
88 (void) pt;
89 (void) i;
90 FEL_ASSERT(m_dim == m_numCoor && i<m_size);
91 return 0.; // TODO !
92 }
93
94 };
95
96 //=============================================================================================
97
98 extern const BasisFunction basisFunctionNULL;
99 extern const BasisFunction basisFunction0d;
100 extern const BasisFunction basisFunction1dP1;
101 extern const BasisFunction basisFunction1dP1b;
102 extern const BasisFunction basisFunction1dP2;
103 extern const BasisFunction basisFunction1dP3H;
104 extern const BasisFunction basisFunction2dP1;
105 extern const BasisFunction basisFunction2dP1b;
106 extern const BasisFunction basisFunction2dP2;
107 extern const BasisFunction basisFunction2dQ1;
108 extern const BasisFunction basisFunction2dP1xP2;
109 extern const BasisFunction basisFunction2dQ1b;
110 extern const BasisFunction basisFunction2dQ2;
111 extern const BasisFunction basisFunction2dQ2c;
112 extern const BasisFunction basisFunction3dP1;
113 extern const BasisFunction basisFunction3dP1b;
114 extern const BasisFunction basisFunction3dP2;
115 extern const BasisFunction basisFunction3dQ1;
116 extern const BasisFunction basisFunction3dQ1b;
117 extern const BasisFunction basisFunction3dQ2;
118 extern const BasisFunction basisFunction3dQ2c;
119 extern const BasisFunction basisFunction3dR1; // prism
120 extern const BasisFunction basisFunction3dP1xP2; // prism
121 extern const BasisFunction basisFunction3dR2;
122 extern const BasisFunction basisFunction3dRT0Tetra;
123
124 }
125
126 #endif
127