v0.14.0
TetPolynomialBase.hpp
Go to the documentation of this file.
1 /** \file TetPolynomialBase.hpp
2 \brief Implementation of Ainsworth-Coyle / Demkowicz or any other H1, Hcurl,
3 Hdiv and L2 base on tetrahedral
4 
5 */
6 
7 
8 
9 #ifndef __TETPOLYNOMIALBASE_HPP__
10 #define __TETPOLYNOMIALBASE_HPP__
11 
12 namespace MoFEM {
13 
14 /**
15  * \brief Calculate base functions on tetrahedral
16  *
17  * \ingroup mofem_base_functions
18  */
20 
21  MoFEMErrorCode query_interface(boost::typeindex::type_index type_index,
22  UnknownInterface **iface) const;
23 
24  TetPolynomialBase(const void *ptr = nullptr);
25  virtual ~TetPolynomialBase();
26 
27  static bool swichCacheHDivBaseFaceDemkowicz(const void *ptr);
28  static bool swichCacheHdivBaseInteriorDemkowicz(const void *ptr);
29  static bool swichCacheHdivBrokenBaseInteriorDemkowicz(const void *ptr);
30  static void swichCacheHDivBaseDemkowiczOn(std::vector<void *> v);
31  static void swichCacheHDivBaseDemkowiczOff(std::vector<void *> v);
32 
33  static bool swichCacheHdivBrokenBaseInteriorAinsworth(const void *ptr);
34  static void swichCacheHDivBaseAinsworthOn(std::vector<void *> v);
35  static void swichCacheHDivBaseAinsworthOff(std::vector<void *> v);
36 
37  static void swichCacheHDivBaseOn(std::vector<void *> v);
38  static void swichCacheHDivBaseOff(std::vector<void *> v);
39 
41  boost::shared_ptr<BaseFunctionCtx> ctx_ptr);
42 
43 private:
44  const void *vPtr;
46 
47  /**
48  * @brief Get base functions for H1 space
49  *
50  * @param pts matrix of integration pts
51  * @return MoFEMErrorCode
52  *
53  * \note matrix of integration points on rows has local coordinates of
54  * finite element on columns are integration pts.
55  */
57 
58  /**
59  * @brief Get base functions for L2 space
60  *
61  * @param pts matrix of integration pts
62  * @return MoFEMErrorCode
63  *
64  * \note matrix of integration points on rows has local coordinates of finite
65  * element on columns are integration pts.
66  */
68 
69  /**
70  * @brief Get base functions for Hdiv space
71  *
72  * @param pts matrix of integration pts
73  * @return MoFEMErrorCode
74  *
75  * \note matrix of integration points on rows has local coordinates of finite
76  * element on columns are integration pts.
77  */
79 
80  /**
81  * @brief Get base functions for Hcurl space
82  *
83  * @param pts matrix of integration pts
84  * @return MoFEMErrorCode
85  *
86  * \note matrix of integration points on rows has local coordinates of finite
87  * element on columns are integration pts.
88  */
90 
91 private:
94 
97 
99 
100  MatrixDouble &pts,
101 
102  MatrixDouble &shape_functions, MatrixDouble &diff_shape_functions,
103 
104  int volume_order, std::array<int, 4> &faces_order,
105  std::array<int, 3 * 4> &faces_nodes
106 
107  );
111 
115 
117 
118  ublas::matrix<MatrixDouble> N_face_edge;
119  ublas::vector<MatrixDouble> N_face_bubble;
120  ublas::vector<MatrixDouble> N_volume_edge;
121  ublas::vector<MatrixDouble> N_volume_face;
123 
124  ublas::matrix<MatrixDouble> diffN_face_edge;
125  ublas::vector<MatrixDouble> diffN_face_bubble;
126  ublas::vector<MatrixDouble> diffN_volume_edge;
127  ublas::vector<MatrixDouble> diffN_volume_face;
129 
130 };
131 
132 } // namespace MoFEM
133 
134 #endif //__TETPOLYNOMIALBASE_HPP__
UBlasMatrix< double >
MoFEM::TetPolynomialBase::swichCacheHDivBaseAinsworthOn
static void swichCacheHDivBaseAinsworthOn(std::vector< void * > v)
Definition: TetPolynomialBase.cpp:2052
MoFEM::TetPolynomialBase::getValueH1
MoFEMErrorCode getValueH1(MatrixDouble &pts)
Get base functions for H1 space.
Definition: TetPolynomialBase.cpp:106
MoFEM::TetPolynomialBase::getValueL2
MoFEMErrorCode getValueL2(MatrixDouble &pts)
Get base functions for L2 space.
Definition: TetPolynomialBase.cpp:518
MoFEM::EntPolynomialBaseCtx
Class used to pass element data to calculate base functions on tet,triangle,edge.
Definition: EntPolynomialBaseCtx.hpp:22
MoFEM::TetPolynomialBase::N_face_bubble
ublas::vector< MatrixDouble > N_face_bubble
Definition: TetPolynomialBase.hpp:119
MoFEM::TetPolynomialBase::getValueHcurlAinsworthBase
MoFEMErrorCode getValueHcurlAinsworthBase(MatrixDouble &pts)
Definition: TetPolynomialBase.cpp:1634
MoFEM::Exceptions::MoFEMErrorCode
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
Definition: Exceptions.hpp:56
MoFEM::TetPolynomialBase::senseFaceAlpha
MatrixInt senseFaceAlpha
Definition: TetPolynomialBase.hpp:116
MoFEM::TetPolynomialBase::N_face_edge
ublas::matrix< MatrixDouble > N_face_edge
Definition: TetPolynomialBase.hpp:118
MoFEM::BaseFunction
Base class if inherited used to calculate base functions.
Definition: BaseFunction.hpp:40
MoFEM::TetPolynomialBase::getValueH1AinsworthBase
MoFEMErrorCode getValueH1AinsworthBase(MatrixDouble &pts)
Definition: TetPolynomialBase.cpp:124
MoFEM::TetPolynomialBase::diffN_volume_edge
ublas::vector< MatrixDouble > diffN_volume_edge
Definition: TetPolynomialBase.hpp:126
MoFEM::TetPolynomialBase::getValueL2AinsworthBase
MoFEMErrorCode getValueL2AinsworthBase(MatrixDouble &pts)
Definition: TetPolynomialBase.cpp:537
MoFEM::TetPolynomialBase::TetPolynomialBase
TetPolynomialBase(const void *ptr=nullptr)
Definition: TetPolynomialBase.cpp:93
MoFEM::TetPolynomialBase::getValueHcurl
MoFEMErrorCode getValueHcurl(MatrixDouble &pts)
Get base functions for Hcurl space.
Definition: TetPolynomialBase.cpp:1884
MoFEM
implementation of Data Operators for Forces and Sources
Definition: Common.hpp:10
MoFEM::TetPolynomialBase::swichCacheHdivBaseInteriorDemkowicz
static bool swichCacheHdivBaseInteriorDemkowicz(const void *ptr)
Definition: TetPolynomialBase.cpp:2007
MoFEM::TetPolynomialBase::diffN_volume_bubble
MatrixDouble diffN_volume_bubble
Definition: TetPolynomialBase.hpp:128
MoFEM::TetPolynomialBase::N_volume_edge
ublas::vector< MatrixDouble > N_volume_edge
Definition: TetPolynomialBase.hpp:120
MoFEM::Types::MatrixInt
UBlasMatrix< int > MatrixInt
Definition: Types.hpp:76
MoFEM::TetPolynomialBase::vPtr
const void * vPtr
Definition: TetPolynomialBase.hpp:44
MoFEM::TetPolynomialBase::diffN_face_edge
ublas::matrix< MatrixDouble > diffN_face_edge
Definition: TetPolynomialBase.hpp:124
MoFEM::TetPolynomialBase::getValueHdivAinsworthBaseImpl
MoFEMErrorCode getValueHdivAinsworthBaseImpl(MatrixDouble &pts, MatrixDouble &shape_functions, MatrixDouble &diff_shape_functions, int volume_order, std::array< int, 4 > &faces_order, std::array< int, 3 *4 > &faces_nodes)
Definition: TetPolynomialBase.cpp:743
MoFEM::TetPolynomialBase::N_volume_face
ublas::vector< MatrixDouble > N_volume_face
Definition: TetPolynomialBase.hpp:121
MoFEM::TetPolynomialBase::swichCacheHDivBaseOff
static void swichCacheHDivBaseOff(std::vector< void * > v)
Definition: TetPolynomialBase.cpp:2073
MoFEM::TetPolynomialBase::getValueHdiv
MoFEMErrorCode getValueHdiv(MatrixDouble &pts)
Get base functions for Hdiv space.
Definition: TetPolynomialBase.cpp:1599
MoFEM::TetPolynomialBase::getValueHdivAinsworthBase
MoFEMErrorCode getValueHdivAinsworthBase(MatrixDouble &pts)
Definition: TetPolynomialBase.cpp:861
MoFEM::TetPolynomialBase::diffN_volume_face
ublas::vector< MatrixDouble > diffN_volume_face
Definition: TetPolynomialBase.hpp:127
MoFEM::TetPolynomialBase::getValueHcurlDemkowiczBase
MoFEMErrorCode getValueHcurlDemkowiczBase(MatrixDouble &pts)
Definition: TetPolynomialBase.cpp:1752
MoFEM::TetPolynomialBase::getValueL2BernsteinBezierBase
MoFEMErrorCode getValueL2BernsteinBezierBase(MatrixDouble &pts)
Definition: TetPolynomialBase.cpp:567
MoFEM::TetPolynomialBase::swichCacheHDivBaseDemkowiczOff
static void swichCacheHDivBaseDemkowiczOff(std::vector< void * > v)
Definition: TetPolynomialBase.cpp:2032
MoFEM::UnknownInterface
base class for all interface classes
Definition: UnknownInterface.hpp:34
v
const double v
phase velocity of light in medium (cm/ns)
Definition: initial_diffusion.cpp:40
MoFEM::TetPolynomialBase::getValueHdivDemkowiczBrokenBase
MoFEMErrorCode getValueHdivDemkowiczBrokenBase(MatrixDouble &pts)
Definition: TetPolynomialBase.cpp:1452
MoFEM::TetPolynomialBase::swichCacheHDivBaseDemkowiczOn
static void swichCacheHDivBaseDemkowiczOn(std::vector< void * > v)
Definition: TetPolynomialBase.cpp:2018
MoFEM::TetPolynomialBase::cTx
EntPolynomialBaseCtx * cTx
Definition: TetPolynomialBase.hpp:45
MoFEM::TetPolynomialBase::swichCacheHdivBrokenBaseInteriorAinsworth
static bool swichCacheHdivBrokenBaseInteriorAinsworth(const void *ptr)
Definition: TetPolynomialBase.cpp:2046
MoFEM::TetPolynomialBase::swichCacheHDivBaseOn
static void swichCacheHDivBaseOn(std::vector< void * > v)
Definition: TetPolynomialBase.cpp:2068
MoFEM::TetPolynomialBase::swichCacheHDivBaseAinsworthOff
static void swichCacheHDivBaseAinsworthOff(std::vector< void * > v)
Definition: TetPolynomialBase.cpp:2060
MoFEM::TetPolynomialBase::diffN_face_bubble
ublas::vector< MatrixDouble > diffN_face_bubble
Definition: TetPolynomialBase.hpp:125
MoFEM::TetPolynomialBase::getValueHdivDemkowiczBase
MoFEMErrorCode getValueHdivDemkowiczBase(MatrixDouble &pts)
Definition: TetPolynomialBase.cpp:1316
MoFEM::TetPolynomialBase::getValue
MoFEMErrorCode getValue(MatrixDouble &pts, boost::shared_ptr< BaseFunctionCtx > ctx_ptr)
Definition: TetPolynomialBase.cpp:1903
MoFEM::TetPolynomialBase::swichCacheHdivBrokenBaseInteriorDemkowicz
static bool swichCacheHdivBrokenBaseInteriorDemkowicz(const void *ptr)
Definition: TetPolynomialBase.cpp:2012
MoFEM::TetPolynomialBase::N_volume_bubble
MatrixDouble N_volume_bubble
Definition: TetPolynomialBase.hpp:122
MoFEM::TetPolynomialBase::getValueH1BernsteinBezierBase
MoFEMErrorCode getValueH1BernsteinBezierBase(MatrixDouble &pts)
Definition: TetPolynomialBase.cpp:236
MoFEM::TetPolynomialBase::~TetPolynomialBase
virtual ~TetPolynomialBase()
Definition: TetPolynomialBase.cpp:95
MoFEM::TetPolynomialBase::query_interface
MoFEMErrorCode query_interface(boost::typeindex::type_index type_index, UnknownInterface **iface) const
Definition: TetPolynomialBase.cpp:85
MoFEM::TetPolynomialBase::swichCacheHDivBaseFaceDemkowicz
static bool swichCacheHDivBaseFaceDemkowicz(const void *ptr)
Definition: TetPolynomialBase.cpp:2002
MoFEM::TetPolynomialBase::getValueHdivAinsworthBrokenBase
MoFEMErrorCode getValueHdivAinsworthBrokenBase(MatrixDouble &pts)
Definition: TetPolynomialBase.cpp:1076
MoFEM::TetPolynomialBase
Calculate base functions on tetrahedral.
Definition: TetPolynomialBase.hpp:19