Flow123d  JS_before_hm-62-ge56f9d5
fe_p.hh
Go to the documentation of this file.
1 /*!
2  *
3  * Copyright (C) 2015 Technical University of Liberec. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of the GNU General Public License version 3 as published by the
7  * Free Software Foundation. (http://www.gnu.org/licenses/gpl-3.0.en.html)
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12  *
13  *
14  * @file fe_p.hh
15  * @brief Definitions of basic Lagrangean finite elements with polynomial shape functions.
16  * @author Jan Stebel
17  */
18 
19 #ifndef FE_P_HH_
20 #define FE_P_HH_
21 
22 #include <boost/exception/detail/error_info_impl.hpp> // for error_info
23 #include <boost/exception/info.hpp> // for operator<<
24 #include <string> // for string
25 #include <vector> // for vector
26 #include <armadillo>
27 #include "fem/finite_element.hh" // for FiniteElement
28 #include "system/exc_common.hh" // for ExcAssertMsg
29 #include "system/exceptions.hh" // for ExcAssertMsg::...
30 #include "system/global_defs.h" // for OLD_ASSERT, msg
31 
32 
33 /**
34  * @brief Space of polynomial functions.
35  *
36  * This class serves for evaluation of the value and gradient
37  * of a polynomial of order @p degree in @p dim variables.
38  */
40 {
41 public:
42 
43  /**
44  * @brief Constructor.
45  *
46  * Creates the coefficients of the basis.
47  */
48  PolynomialSpace(unsigned int degree, unsigned int dim);
49 
50  double basis_value(unsigned int basis_index,
51  const arma::vec &point,
52  unsigned int comp_index = 0
53  ) const override;
54 
55  const arma::vec basis_grad(unsigned int basis_index,
56  const arma::vec &point,
57  unsigned int comp_index = 0
58  ) const override;
59 
60  unsigned int dim() const override { return powers.size(); }
61 
62 private:
63 
64  /// Max. degree of polynomials.
65  const unsigned int degree_;
66 
67  /**
68  * @brief Coefficients of basis functions.
69  *
70  * Powers of x, y, z, ... in the i-th basis function are stored
71  * in powers[i].
72  */
74 
75 };
76 
77 
78 
79 
80 
81 
82 /**
83  * @brief Conforming Lagrangean finite element on @p dim dimensional simplex.
84  *
85  * The finite element functions are continuous across the interfaces.
86  */
87 template <unsigned int dim>
88 class FE_P : public FiniteElement<dim>
89 {
90 public:
91  /// Constructor.
92  FE_P(unsigned int degree);
93 
94 protected:
95 
96  void init_dofs();
97 
98  /// Maximum degree of polynomials.
99  unsigned int degree_;
100 };
101 
102 
103 /**
104  * @brief Discontinuous Lagrangean finite element on @p dim dimensional simplex.
105  *
106  * No continuity of the finite element functions across the interfaces is
107  * imposed.
108  */
109 template <unsigned int dim>
110 class FE_P_disc : public FE_P<dim>
111 {
112 public:
113 
114  /// Constructor.
115  FE_P_disc(unsigned int degree);
116 
117 };
118 
119 
120 /**
121  * @brief Crouzeix-Raviart finite element on @p dim dimensional simplex.
122  *
123  * Consists of linear functions with continuity at side barycenters.
124  */
125 template<unsigned int dim>
126 class FE_CR : public FiniteElement<dim>
127 {
128 public:
129  FE_CR();
130 
131 };
132 
133 
134 /**
135  * @brief Discontinuos Crouzeix-Raviart finite element on @p dim dimensional simplex.
136  *
137  * Consists of linear functions with continuity at side barycenters.
138  */
139 template<unsigned int dim>
140 class FE_CR_disc : public FiniteElement<dim>
141 {
142 public:
143  FE_CR_disc();
144 
145 };
146 
147 
148 
149 
150 
151 
152 
153 
154 
155 
156 #endif /* FE_P_HH_ */
const arma::vec basis_grad(unsigned int basis_index, const arma::vec &point, unsigned int comp_index=0) const override
Gradient of the i th basis function at point point.
Definition: fe_p.cc:79
PolynomialSpace(unsigned int degree, unsigned int dim)
Constructor.
Definition: fe_p.cc:25
Space of polynomial functions.
Definition: fe_p.hh:39
Discontinuos Crouzeix-Raviart finite element on dim dimensional simplex.
Definition: fe_p.hh:140
Mat< double, N, 1 > vec
Definition: armor.hh:211
unsigned int degree_
Maximum degree of polynomials.
Definition: fe_p.hh:99
std::vector< arma::uvec > powers
Coefficients of basis functions.
Definition: fe_p.hh:73
Discontinuous Lagrangean finite element on dim dimensional simplex.
Definition: fe_p.hh:110
Global macros to enhance readability and debugging, general constants.
unsigned int dim() const override
Dimension of function space (number of basis functions).
Definition: fe_p.hh:60
double basis_value(unsigned int basis_index, const arma::vec &point, unsigned int comp_index=0) const override
Value of the i th basis function at point point.
Definition: fe_p.cc:62
Conforming Lagrangean finite element on dim dimensional simplex.
Definition: fe_p.hh:88
Abstract class for description of finite elements.
Abstract class for the description of a general finite element on a reference simplex in dim dimensio...
Crouzeix-Raviart finite element on dim dimensional simplex.
Definition: fe_p.hh:126
const unsigned int degree_
Max. degree of polynomials.
Definition: fe_p.hh:65