Class documentation of Concepts

Loading...
Searching...
No Matches
formula.hh
Go to the documentation of this file.
1
6#ifndef formulahp2D_hh
7#define formulahp2D_hh
8
9#include "toolbox/sequence.hh"
10#include "toolbox/set.hh"
11#include "toolbox/hashMap.hh"
14#include "space/element.hh"
15#include "space/function.hh"
16
17// debugging
18#include "basics/debug.hh"
19
20#define FormulaFromWeightConstr_D 0
21#define FormulaFromWeightAppl_D 0
22
23namespace concepts {
24
25 template<typename F>
26 class Array;
27
28 template<typename F>
29 class Vector;
30
31 class Attribute;
32 class Edge;
33 class Edge2d;
34
35} // namespace concepts
36
37namespace hp2D {
38
39 // forward declarations
40 class TraceSpace;
41
42 template<typename F>
43 class BaseQuad;
44
45 template<typename F>
46 class Quad;
47
48 template<typename F>
49 class BaseEdge;
50
51 using concepts::Real;
52 using concepts::Real2d;
53
54 // *********************************************************** H1Extension **
55
66 template<class F>
68 public:
89 const concepts::Set<concepts::Attribute> attributes);
90
91 virtual ~H1Extension();
92
93 virtual F operator() (const concepts::ElementWithCell<Real>& elm,
94 const Real p, const Real t = 0.0) const;
95 virtual F operator() (const concepts::ElementWithCell<Real>& elm,
96 const Real2d& p, const Real t = 0.0) const;
97 virtual F operator() (const concepts::ElementWithCell<Real>& elm,
98 const concepts::Real3d& p, const Real t = 0.0) const;
99
101 virtual H1Extension<F>* clone() const {
102 return new H1Extension<F>(*frm_);
103 }
104 protected:
105 virtual std::ostream& info(std::ostream& os) const;
106 private:
108 std::unique_ptr<const concepts::ElementFormula<F> > frm_;
112 const concepts::Set<concepts::Attribute> attributes_;
114 mutable const concepts::ElementWithCell<Real>* elm_;
118 mutable concepts::Sequence<concepts::Edge2d*> cellEdges_;
122 mutable concepts::HashMap<F> vtxValues_;
123
124 bool compute_(const hp2D::Quad<Real>* quad, const Real2d& p, const Real t,
125 F& val) const;
126
128 void clear_() const;
129 };
130
131 // ********************************************** ElementFormulaInterpGrad **
132
140 template<typename F, uint dim = 2>
142
143 // ******************************************** ElementFormulaInterpGrad<2> **
144
145 template<typename F>
147 public concepts::ElementFormula<concepts::Point<F,2> > {
148 public:
150
151 virtual concepts::Point<F,2> operator()
153 const Real p, const Real t = 0.0) const { return concepts::Point<F,2>(0.0); }
154 virtual concepts::Point<F,2> operator()
156 const concepts::Real2d& p, const Real t = 0.0) const;
157 virtual concepts::Point<F,2> operator()
159 const concepts::Real3d& p, const Real t = 0.0) const { return concepts::Point<F,2>(0.0); }
160
163 return new ElementFormulaInterpGrad<F,2>(*f_);
164 }
165 protected:
166 virtual std::ostream& info(std::ostream& os) const;
167 private:
169 std::unique_ptr<const concepts::ElementFormula<F> > f_;
171 mutable const concepts::ElementWithCell<Real>* quad_;
173 mutable concepts::Array<Real> x_[2];
175 mutable bool samePoints_;
177 mutable concepts::Array<F> values_;
179 mutable bool zeroElement_;
180 };
181
182 // ********************************************* ElementFormulaInterpGradN **
183
192 template<typename F, uint dim = 2>
194
195 template<typename F>
197 public concepts::ElementFormula<concepts::Point<F,2> > {
198 public:
200
201 virtual concepts::Point<F,2> operator()
203 const Real p, const Real t = 0.0) const { return concepts::Point<F,2>(0.0); }
204 virtual concepts::Point<F,2> operator()
206 const concepts::Real2d& p, const Real t = 0.0) const;
207 virtual concepts::Point<F,2> operator()
209 const concepts::Real3d& p, const Real t = 0.0) const { return concepts::Point<F,2>(0.0); }
210
213 return new ElementFormulaInterpGradN<F,2>(*f_);
214 }
215 protected:
216 virtual std::ostream& info(std::ostream& os) const;
217 private:
219 std::unique_ptr<const concepts::ElementFormula<F> > f_;
221 mutable const concepts::ElementWithCell<Real>* quad_;
223 mutable concepts::Array<F> coeff_;
225 mutable bool zeroElement_;
226 };
227
228 // ************************************************ ElementFormulaEdgeMean **
229
235 template<typename F>
237 public:
239 const concepts::Vector<F>& v,
241
242 virtual F operator() (const concepts::ElementWithCell<Real>& elm,
243 const Real p, const Real t = 0.0) const;
244 virtual F operator() (const concepts::ElementWithCell<Real>& elm,
245 const concepts::Real2d& p,
246 const Real t = 0.0) const {
247 return (*this)(elm, p[0], t);
248 }
249 virtual F operator() (const concepts::ElementWithCell<Real>& elm,
250 const concepts::Real3d& p,
251 const Real t = 0.0) const {
252 return (*this)(elm, p[0], t);
253 }
254
257 return new ElementFormulaEdgeMean<F>(spc_, v_, *f_);
258 }
259 protected:
260 virtual std::ostream& info(std::ostream& os) const;
261 private:
263 const hp2D::TraceSpace& spc_;
265 const concepts::Vector<F>& v_;
267 std::unique_ptr<const concepts::ElementFunction<F> > f_;
268 };
269
270 // ************************************************ ElementFormulaEdgeJump **
271
278 template<typename F>
280 public:
282 const concepts::Vector<F>& v,
284
285 virtual F operator() (const concepts::ElementWithCell<Real>& elm,
286 const Real p, const Real t = 0.0) const;
287 virtual F operator() (const concepts::ElementWithCell<Real>& elm,
288 const concepts::Real2d& p,
289 const Real t = 0.0) const {
290 return (*this)(elm, p[0], t);
291 }
292 virtual F operator() (const concepts::ElementWithCell<Real>& elm,
293 const concepts::Real3d& p,
294 const Real t = 0.0) const {
295 return (*this)(elm, p[0], t);
296 }
297
300 return new ElementFormulaEdgeJump<F>(spc_, v_, *f_);
301 }
302 protected:
303 virtual std::ostream& info(std::ostream& os) const;
304 private:
306 const hp2D::TraceSpace& spc_;
308 const concepts::Vector<F>& v_;
310 std::unique_ptr<const concepts::ElementFunction<F> > f_;
311 };
312
313 // **************************************** ElementFormulaSignNormalVector **
314
321 public:
322 virtual Real operator() (const concepts::ElementWithCell<Real>& elm,
323 const Real p, const Real t = 0.0) const;
324 virtual Real operator() (const concepts::ElementWithCell<Real>& elm,
325 const concepts::Real2d& p,
326 const Real t = 0.0) const {
327 return (*this)(elm, p[0], t);
328 }
329 virtual Real operator() (const concepts::ElementWithCell<Real>& elm,
330 const concepts::Real3d& p,
331 const Real t = 0.0) const {
332 return (*this)(elm, p[0], t);
333 }
334
338 }
339 protected:
340 virtual std::ostream& info(std::ostream& os) const;
341 };
342
343
344} // namespace hp2D
345
346#endif // formulahp2D_hh
virtual std::ostream & info(std::ostream &os) const
Returns information in an output stream.
virtual ElementFormulaEdgeJump< F > * clone() const
Virtual copy constructor.
Definition formula.hh:299
virtual std::ostream & info(std::ostream &os) const
Returns information in an output stream.
virtual ElementFormulaEdgeMean< F > * clone() const
Virtual copy constructor.
Definition formula.hh:256
virtual ElementFormulaInterpGradN< F, 2 > * clone() const
Virtual copy constructor.
Definition formula.hh:212
virtual std::ostream & info(std::ostream &os) const
Returns information in an output stream.
virtual ElementFormulaInterpGrad< F, 2 > * clone() const
Virtual copy constructor.
Definition formula.hh:162
virtual std::ostream & info(std::ostream &os) const
Returns information in an output stream.
virtual ElementFormulaSignNormalVector * clone() const
Virtual copy constructor.
Definition formula.hh:336
virtual std::ostream & info(std::ostream &os) const
Returns information in an output stream.
virtual H1Extension< F > * clone() const
Virtual copy constructor.
Definition formula.hh:101
H1Extension(const concepts::ElementFormula< F > &frm)
virtual std::ostream & info(std::ostream &os) const
Returns information in an output stream.
H1Extension(const concepts::ElementFormula< F > &frm, const concepts::Set< concepts::Attribute > attributes)
double Real
Definition typedefs.hh:39