ug4
fe_geom.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010-2015: G-CSC, Goethe University Frankfurt
3  * Author: Andreas Vogel
4  *
5  * This file is part of UG4.
6  *
7  * UG4 is free software: you can redistribute it and/or modify it under the
8  * terms of the GNU Lesser General Public License version 3 (as published by the
9  * Free Software Foundation) with the following additional attribution
10  * requirements (according to LGPL/GPL v3 §7):
11  *
12  * (1) The following notice must be displayed in the Appropriate Legal Notices
13  * of covered and combined works: "Based on UG4 (www.ug4.org/license)".
14  *
15  * (2) The following notice must be displayed at a prominent place in the
16  * terminal output of covered works: "Based on UG4 (www.ug4.org/license)".
17  *
18  * (3) The following bibliography is recommended for citation and must be
19  * preserved in all covered files:
20  * "Reiter, S., Vogel, A., Heppner, I., Rupp, M., and Wittum, G. A massively
21  * parallel geometric multigrid solver on hierarchically distributed grids.
22  * Computing and visualization in science 16, 4 (2013), 151-164"
23  * "Vogel, A., Reiter, S., Rupp, M., Nägel, A., and Wittum, G. UG4 -- a novel
24  * flexible software system for simulating pde based models on high performance
25  * computers. Computing and visualization in science 16, 4 (2013), 165-179"
26  *
27  * This program is distributed in the hope that it will be useful,
28  * but WITHOUT ANY WARRANTY; without even the implied warranty of
29  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30  * GNU Lesser General Public License for more details.
31  */
32 
33 #ifndef __H__UG__LIB_DISC__SPATIAL_DISC__DISC_HELPER__FINITE_ELEMENT_GEOMETRY__
34 #define __H__UG__LIB_DISC__SPATIAL_DISC__DISC_HELPER__FINITE_ELEMENT_GEOMETRY__
35 
41 #include "common/util/provider.h"
42 
43 #include <cmath>
44 
45 namespace ug{
46 
47 template < typename TElem, int TWorldDim,
48  typename TTrialSpace, typename TQuadratureRule>
50 {
51  public:
54 
56  static const int dim = ref_elem_type::dim;
57 
59  static const int worldDim = TWorldDim;
60 
62  typedef TTrialSpace trial_space_type;
63 
65  typedef TQuadratureRule quad_rule_type;
66 
68  static const size_t nsh = trial_space_type::nsh;
69 
71  static const size_t nip = quad_rule_type::nip;
72 
74  static const bool staticLocalData = true;
75 
76  public:
78  FEGeometry();
79 
81  size_t num_ip() const {return nip;}
82 
84  size_t num_sh() const {return nsh;}
85 
87  number weight(size_t ip) const {return m_vDetJ[ip] * m_rQuadRule.weight(ip);}
88 
90  const MathVector<dim>& local_ip(size_t ip) const {return m_rQuadRule.point(ip);}
91 
93  const MathVector<worldDim>& global_ip(size_t ip) const
94  {
95  UG_ASSERT(ip < nip, "Wrong ip.");
96  return m_vIPGlobal[ip];
97  }
98 
100  const MathVector<dim>* local_ips() const {return m_rQuadRule.points();}
101 
103  const MathVector<worldDim>* global_ips() const{return &m_vIPGlobal[0];}
104 
106  number shape(size_t ip, size_t sh) const
107  {
108  UG_ASSERT(ip < nip, "Wrong index"); UG_ASSERT(sh < nsh, "Wrong index");
109  return m_vvShape[ip][sh];
110  }
111 
113  const MathVector<dim>& local_grad(size_t ip, size_t sh) const
114  {
115  UG_ASSERT(ip < nip, "Wrong index"); UG_ASSERT(sh < nsh, "Wrong index");
116  return m_vvGradLocal[ip][sh];
117  }
118 
120  const MathVector<worldDim>& global_grad(size_t ip, size_t sh) const
121  {
122  UG_ASSERT(ip < nip, "Wrong index"); UG_ASSERT(sh < nsh, "Wrong index");
123  return m_vvGradGlobal[ip][sh];
124  }
125 
126  public:
128  void update_local(ReferenceObjectID roid, const LFEID& lfeID, size_t orderQuad);
129  void update_local(ReferenceObjectID roid, const LFEID& lfeID){
130  update_local(roid, lfeID, 2*lfeID.order() + 1);
131  }
132 
134  void update(GridObject* pElem, const MathVector<worldDim>* vCorner)
135  {
136  update(pElem, vCorner, LFEID(), m_rQuadRule.order());
137  }
138 
140  void update(GridObject* pElem, const MathVector<worldDim>* vCorner,
141  const LFEID& lfeID, size_t orderQuad);
142  void update(GridObject* pElem, const MathVector<worldDim>* vCorner,
143  const LFEID& lfeID){
144  update(pElem, vCorner, lfeID, 2*lfeID.order() + 1);
145  }
146 
147  protected:
149  TElem* m_pElem;
150 
153 
156 
159 
162 
165 
168 
171 
174 
177 };
178 
179 
180 
181 template <int TWorldDim, int TRefDim = TWorldDim>
183 {
184  public:
186  static const int dim = TRefDim;
187 
189  static const int worldDim = TWorldDim;
190 
192  static const bool staticLocalData = false;
193 
194  public:
196  DimFEGeometry();
197 
199  DimFEGeometry(size_t order, LFEID lfeid);
200 
202  DimFEGeometry(ReferenceObjectID roid, size_t order, LFEID lfeid);
203 
205  size_t num_ip() const {return m_nip;}
206 
208  size_t num_sh() const {return m_nsh;}
209 
211  number weight(size_t ip) const
212  {
213  UG_ASSERT(ip < m_nip, "Wrong index");
214  return m_vDetJ[ip] * m_vQuadWeight[ip];
215  }
216 
218  const MathVector<dim>& local_ip(size_t ip) const
219  {
220  UG_ASSERT(ip < m_nip, "Wrong index");
221  return m_vIPLocal[ip];
222  }
223 
225  const MathVector<worldDim>& global_ip(size_t ip) const
226  {
227  UG_ASSERT(ip < m_vIPGlobal.size(), "Wrong ip.");
228  return m_vIPGlobal[ip];
229  }
230 
232  const MathVector<dim>* local_ips() const {return m_vIPLocal;}
233 
235  const MathVector<worldDim>* global_ips() const{return &m_vIPGlobal[0];}
236 
238  number shape(size_t ip, size_t sh) const
239  {
240  UG_ASSERT(ip < m_vvShape.size(), "Wrong index");
241  UG_ASSERT(sh < m_vvShape[ip].size(), "Wrong index");
242  return m_vvShape[ip][sh];
243  }
244 
246  const MathVector<dim>& local_grad(size_t ip, size_t sh) const
247  {
248  UG_ASSERT(ip < m_vvGradLocal.size(), "Wrong index");
249  UG_ASSERT(sh < m_vvGradLocal[ip].size(), "Wrong index");
250  return m_vvGradLocal[ip][sh];
251  }
252 
254  const MathVector<worldDim>& global_grad(size_t ip, size_t sh) const
255  {
256  UG_ASSERT(ip < m_vvGradGlobal.size(), "Wrong index");
257  UG_ASSERT(sh < m_vvGradGlobal[ip].size(), "Wrong index");
258  return m_vvGradGlobal[ip][sh];
259  }
260 
262  void update_local(ReferenceObjectID roid, const LFEID& lfeID, size_t orderQuad);
263  void update_local(ReferenceObjectID roid, const LFEID& lfeID){
264  update_local(roid, lfeID, 2*lfeID.order() + 1);
265  }
266 
268  void update(GridObject* pElem, const MathVector<worldDim>* vCorner)
269  {
270  update(pElem, vCorner, m_lfeID, m_quadOrder);
271  }
272 
274  void update(GridObject* pElem, const MathVector<worldDim>* vCorner,
275  const LFEID& lfeID, size_t orderQuad);
276  void update(GridObject* pElem, const MathVector<worldDim>* vCorner,
277  const LFEID& lfeID){
278  update(pElem, vCorner, lfeID, 2*lfeID.order() + 1);
279  }
280 
281  public:
283  class BF
284  {
285  public:
286  BF() {}
287 
289  inline const MathVector<worldDim>& normal() const {return Normal;} // includes area
290 
292  inline number volume() const {return Vol;}
293 
295  inline size_t num_ip() const {return nip;}
296 
298  inline number weight(size_t ip) const
299  {UG_ASSERT(ip<num_ip(), "Wrong index"); return vDetJ[ip] * vWeight[ip];}
300 
302  inline const MathVector<dim>& local_ip(size_t ip) const
303  {UG_ASSERT(ip<num_ip(), "Wrong index"); return vLocalIP[ip];}
304 
306  inline const MathVector<worldDim>& global_ip(size_t ip) const
307  {UG_ASSERT(ip<num_ip(), "Wrong index"); return vGlobalIP[ip];}
308 
310  inline const MathMatrix<worldDim,dim>& JTInv(size_t ip) const
311  {UG_ASSERT(ip<num_ip(), "Wrong index"); return vJtInv[ip];}
312 
314  inline number detJ(size_t ip) const
315  {UG_ASSERT(ip<num_ip(), "Wrong index"); return vDetJ[ip];}
316 
318  inline size_t num_sh() const {return nsh;}
319 
321  inline number shape(size_t ip, size_t sh) const
322  {UG_ASSERT(ip<num_ip(), "Wrong index"); return vvShape[ip][sh];}
323 
325  inline const number* shape_vector(size_t ip) const
326  {UG_ASSERT(ip<num_ip(), "Wrong index"); return &vvShape[ip][0];}
327 
329  inline const MathVector<dim>& local_grad(size_t ip, size_t sh) const
330  {UG_ASSERT(sh < num_sh(), "Invalid index");
331  UG_ASSERT(ip<num_ip(), "Wrong index"); return vvLocalGrad[ip][sh];}
332 
334  inline const MathVector<dim>* local_grad_vector(size_t ip) const
335  {UG_ASSERT(ip<num_ip(), "Wrong index"); return &vvLocalGrad[ip][0];}
336 
338  inline const MathVector<worldDim>& global_grad(size_t ip, size_t sh) const
339  {UG_ASSERT(sh < num_sh(), "Invalid index");
340  UG_ASSERT(ip<num_ip(), "Wrong index"); return vvGlobalGrad[ip][sh];}
341 
343  inline const MathVector<worldDim>* global_grad_vector(size_t ip) const
344  {UG_ASSERT(ip<num_ip(), "Wrong index"); return &vvGlobalGrad[ip][0];}
345 
346  protected:
348  friend class DimFEGeometry<worldDim, dim>;
349 
350  size_t nip;
351  std::vector<MathVector<dim> > vLocalIP; // local integration point (size: nip)
352  std::vector<MathVector<worldDim> > vGlobalIP; // global integration point (size: nip)
353  const number* vWeight; // weight at ip
354  MathVector<worldDim> Normal; // normal (incl. area)
355  number Vol; // volume of bf
356  std::vector<MathMatrix<worldDim,dim> > vJtInv; // Jacobian transposed at ip (size: nip)
357  std::vector<number> vDetJ; // Jacobian det at ip (size: nip)
358 
359  size_t nsh;
360  std::vector<std::vector<number> > vvShape; // shapes at ip (size: nip x nsh)
361  std::vector<std::vector<MathVector<dim> > > vvLocalGrad; // local grad at ip (size: nip x nsh)
362  std::vector<std::vector<MathVector<worldDim> > > vvGlobalGrad; // global grad at ip (size: nip x nsh)
363  };
364 
366  void update_boundary_faces(GridObject* pElem,
367  const MathVector<worldDim>* vCornerCoords,
368  size_t orderQuad,
369  const ISubsetHandler* ish);
370 
371  public:
373  inline void add_boundary_subset(int subsetIndex) {m_mapVectorBF[subsetIndex];}
374 
376  inline void remove_boundary_subset(int subsetIndex) {m_mapVectorBF.erase(subsetIndex);}
377 
379  inline void clear_boundary_subsets() {m_mapVectorBF.clear();}
380 
382  inline size_t num_boundary_subsets() {return m_mapVectorBF.size();}
383 
385  inline size_t num_bf() const
386  {
387  typename std::map<int, std::vector<BF> >::const_iterator it;
388  size_t num = 0;
389  for ( it=m_mapVectorBF.begin() ; it != m_mapVectorBF.end(); it++ )
390  num += (*it).second.size();
391  return num;
392  }
393 
395  inline size_t num_bf(int si) const
396  {
397  typename std::map<int, std::vector<BF> >::const_iterator it;
398  it = m_mapVectorBF.find(si);
399  if(it == m_mapVectorBF.end()) return 0;
400  else return (*it).second.size();
401  }
402 
404  inline const BF& bf(int si, size_t i) const
405  {
406  UG_ASSERT(i < num_bf(si), "Invalid index.");
407  typename std::map<int, std::vector<BF> >::const_iterator it;
408  it = m_mapVectorBF.find(si);
409  if(it == m_mapVectorBF.end()) UG_THROW("DimFVGeom: No BndSubset: "<<si);
410  return (*it).second[i];
411  }
412 
414  inline const std::vector<BF>& bf(int si) const
415  {
416  typename std::map<int, std::vector<BF> >::const_iterator it;
417  it = m_mapVectorBF.find(si);
418  if(it == m_mapVectorBF.end()) return m_vEmptyVectorBF;
419  return (*it).second;
420  }
421 
422  protected:
423  std::map<int, std::vector<BF> > m_mapVectorBF;
424  std::vector<BF> m_vEmptyVectorBF;
425 
426  protected:
429 
432 
435 
438 
440  size_t m_nip;
441 
444 
447 
449  std::vector<MathVector<worldDim> > m_vIPGlobal;
450 
452  std::vector<MathMatrix<worldDim,dim> > m_vJTInv;
453 
455  std::vector<number> m_vDetJ;
456 
458  size_t m_nsh;
459 
461  std::vector<std::vector<number> > m_vvShape;
462 
464  std::vector<std::vector<MathVector<dim> > > m_vvGradLocal;
465 
467  std::vector<std::vector<MathVector<worldDim> > > m_vvGradGlobal;
468 };
469 
470 } // end namespace ug
471 
472 #include "fe_geom_impl.h"
473 
474 #endif /* __H__UG__LIB_DISC__SPATIAL_DISC__DISC_HELPER__FINITE_ELEMENT_GEOMETRY__ */
boundary face
Definition: fe_geom.h:284
std::vector< std::vector< MathVector< worldDim > > > vvGlobalGrad
Definition: fe_geom.h:362
const MathVector< dim > & local_grad(size_t ip, size_t sh) const
value of local gradient of shape function i in integration point
Definition: fe_geom.h:329
size_t nip
Definition: fe_geom.h:350
number weight(size_t ip) const
integration weight
Definition: fe_geom.h:298
const MathVector< dim > & local_ip(size_t ip) const
local integration point of scvf
Definition: fe_geom.h:302
std::vector< number > vDetJ
Definition: fe_geom.h:357
number volume() const
volume of bf
Definition: fe_geom.h:292
const MathVector< worldDim > * global_grad_vector(size_t ip) const
vector of global gradients in ip point
Definition: fe_geom.h:343
const MathVector< worldDim > & normal() const
outer normal on bf. Norm is equal to area
Definition: fe_geom.h:289
std::vector< std::vector< MathVector< dim > > > vvLocalGrad
Definition: fe_geom.h:361
const MathVector< worldDim > & global_grad(size_t ip, size_t sh) const
value of global gradient of shape function i in integration point
Definition: fe_geom.h:338
number shape(size_t ip, size_t sh) const
value of shape function i in integration point
Definition: fe_geom.h:321
const number * shape_vector(size_t ip) const
vector of shape functions in ip point
Definition: fe_geom.h:325
number Vol
Definition: fe_geom.h:355
const MathMatrix< worldDim, dim > & JTInv(size_t ip) const
Transposed Inverse of Jacobian in integration point.
Definition: fe_geom.h:310
const MathVector< dim > * local_grad_vector(size_t ip) const
vector of local gradients in ip point
Definition: fe_geom.h:334
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point of scvf
Definition: fe_geom.h:306
BF()
Definition: fe_geom.h:286
const number * vWeight
Definition: fe_geom.h:353
number detJ(size_t ip) const
Determinant of Jacobian in integration point.
Definition: fe_geom.h:314
std::vector< std::vector< number > > vvShape
Definition: fe_geom.h:360
MathVector< worldDim > Normal
Definition: fe_geom.h:354
std::vector< MathVector< worldDim > > vGlobalIP
Definition: fe_geom.h:352
size_t num_ip() const
number of integration points on scvf
Definition: fe_geom.h:295
std::vector< MathMatrix< worldDim, dim > > vJtInv
Definition: fe_geom.h:356
size_t num_sh() const
number of shape functions
Definition: fe_geom.h:318
std::vector< MathVector< dim > > vLocalIP
Definition: fe_geom.h:351
size_t nsh
Definition: fe_geom.h:359
Definition: fe_geom.h:183
std::vector< number > m_vDetJ
determinant of transformation at ip (size = nip)
Definition: fe_geom.h:455
void update(GridObject *pElem, const MathVector< worldDim > *vCorner, const LFEID &lfeID)
Definition: fe_geom.h:276
static const int worldDim
world dimension
Definition: fe_geom.h:189
std::vector< MathMatrix< worldDim, dim > > m_vJTInv
jacobian of transformation at ip (size = nip)
Definition: fe_geom.h:452
size_t num_bf(int si) const
number of boundary faces on subset 'subsetIndex'
Definition: fe_geom.h:395
const MathVector< dim > * local_ips() const
local integration point
Definition: fe_geom.h:232
size_t m_nip
number of integration point
Definition: fe_geom.h:440
const BF & bf(int si, size_t i) const
returns the boundary face i for subsetIndex
Definition: fe_geom.h:404
const MathVector< worldDim > * global_ips() const
global integration point
Definition: fe_geom.h:235
std::vector< MathVector< worldDim > > m_vIPGlobal
global integration points (size = nip)
Definition: fe_geom.h:449
static const bool staticLocalData
flag indicating if local data may change
Definition: fe_geom.h:192
number weight(size_t ip) const
weight for integration point
Definition: fe_geom.h:211
static const int dim
reference element dimension
Definition: fe_geom.h:186
const MathVector< dim > & local_grad(size_t ip, size_t sh) const
local gradient at ip
Definition: fe_geom.h:246
void remove_boundary_subset(int subsetIndex)
removes subset that is interpreted as boundary subset.
Definition: fe_geom.h:376
void add_boundary_subset(int subsetIndex)
add subset that is interpreted as boundary subset.
Definition: fe_geom.h:373
std::vector< BF > m_vEmptyVectorBF
Definition: fe_geom.h:424
GridObject * m_pElem
current element
Definition: fe_geom.h:431
size_t m_nsh
number of shape functions
Definition: fe_geom.h:458
int m_quadOrder
current integration order
Definition: fe_geom.h:434
ReferenceObjectID m_roid
current reference object id the local values are prepared for
Definition: fe_geom.h:428
const number * m_vQuadWeight
local quadrature weights
Definition: fe_geom.h:446
size_t num_sh() const
number of shape functions
Definition: fe_geom.h:208
void update_local(ReferenceObjectID roid, const LFEID &lfeID, size_t orderQuad)
update Geometry for roid
Definition: fe_geom.cpp:69
void update_boundary_faces(GridObject *pElem, const MathVector< worldDim > *vCornerCoords, size_t orderQuad, const ISubsetHandler *ish)
update boundary data for given element
Definition: fe_geom.cpp:164
void update(GridObject *pElem, const MathVector< worldDim > *vCorner)
update Geometry for corners
Definition: fe_geom.h:268
const MathVector< dim > & local_ip(size_t ip) const
local integration point
Definition: fe_geom.h:218
std::vector< std::vector< MathVector< worldDim > > > m_vvGradGlobal
local gradient evaluated at ip (size = nip x nsh)
Definition: fe_geom.h:467
void clear_boundary_subsets()
reset all boundary subsets
Definition: fe_geom.h:379
DimFEGeometry()
default Constructor
Definition: fe_geom.cpp:46
void update_local(ReferenceObjectID roid, const LFEID &lfeID)
Definition: fe_geom.h:263
const MathVector< worldDim > & global_grad(size_t ip, size_t sh) const
global gradient at ip
Definition: fe_geom.h:254
number shape(size_t ip, size_t sh) const
shape function at ip
Definition: fe_geom.h:238
std::map< int, std::vector< BF > > m_mapVectorBF
Definition: fe_geom.h:423
const MathVector< dim > * m_vIPLocal
local quadrature points
Definition: fe_geom.h:443
size_t num_boundary_subsets()
number of registered boundary subsets
Definition: fe_geom.h:382
std::vector< std::vector< number > > m_vvShape
shape functions evaluated at ip (size = nip x nsh)
Definition: fe_geom.h:461
std::vector< std::vector< MathVector< dim > > > m_vvGradLocal
global gradient evaluated at ip (size = nip x nsh)
Definition: fe_geom.h:464
size_t num_bf() const
number of all boundary faces
Definition: fe_geom.h:385
size_t num_ip() const
number of integration points
Definition: fe_geom.h:205
LFEID m_lfeID
current local finite element id
Definition: fe_geom.h:437
const std::vector< BF > & bf(int si) const
returns reference to vector of boundary faces for subsetIndex
Definition: fe_geom.h:414
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point
Definition: fe_geom.h:225
Definition: fe_geom.h:50
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point
Definition: fe_geom.h:93
static const int worldDim
world dimension
Definition: fe_geom.h:59
const MathVector< dim > * local_ips() const
local integration point
Definition: fe_geom.h:100
void update_local(ReferenceObjectID roid, const LFEID &lfeID)
Definition: fe_geom.h:129
MathMatrix< worldDim, dim > m_vJTInv[nip]
jacobian of transformation at ip
Definition: fe_geom.h:173
TTrialSpace trial_space_type
type of trial space
Definition: fe_geom.h:62
ReferenceMapping< ref_elem_type, worldDim > m_mapping
reference mapping
Definition: fe_geom.h:158
static const size_t nip
number of integration points
Definition: fe_geom.h:71
size_t num_sh() const
number of shape functions
Definition: fe_geom.h:84
number m_vDetJ[nip]
determinate of transformation at ip
Definition: fe_geom.h:176
const MathVector< dim > & local_ip(size_t ip) const
local integration point
Definition: fe_geom.h:90
const MathVector< worldDim > * global_ips() const
global integration point
Definition: fe_geom.h:103
void update(GridObject *pElem, const MathVector< worldDim > *vCorner, const LFEID &lfeID)
Definition: fe_geom.h:142
reference_element_traits< TElem >::reference_element_type ref_elem_type
type of reference element
Definition: fe_geom.h:53
const quad_rule_type & m_rQuadRule
Quadrature rule.
Definition: fe_geom.h:152
TQuadratureRule quad_rule_type
type of quadrature rule
Definition: fe_geom.h:65
FEGeometry()
Constructor.
Definition: fe_geom_impl.h:44
MathVector< worldDim > m_vvGradGlobal[nip][nsh]
local gradient evaluated at ip
Definition: fe_geom.h:170
static const bool staticLocalData
flag indicating if local data may change
Definition: fe_geom.h:74
const MathVector< worldDim > & global_grad(size_t ip, size_t sh) const
global gradient at ip
Definition: fe_geom.h:120
TElem * m_pElem
current element
Definition: fe_geom.h:149
number shape(size_t ip, size_t sh) const
shape function at ip
Definition: fe_geom.h:106
number m_vvShape[nip][nsh]
shape functions evaluated at ip
Definition: fe_geom.h:164
static const size_t nsh
number of shape functions
Definition: fe_geom.h:68
const trial_space_type & m_rTrialSpace
Quadrature rule.
Definition: fe_geom.h:155
MathVector< dim > m_vvGradLocal[nip][nsh]
global gradient evaluated at ip
Definition: fe_geom.h:167
MathVector< worldDim > m_vIPGlobal[nip]
global integration points
Definition: fe_geom.h:161
void update(GridObject *pElem, const MathVector< worldDim > *vCorner)
update Geometry for corners
Definition: fe_geom.h:134
void update_local(ReferenceObjectID roid, const LFEID &lfeID, size_t orderQuad)
update Geometry for roid
Definition: fe_geom_impl.h:61
size_t num_ip() const
number of integration points
Definition: fe_geom.h:81
const MathVector< dim > & local_grad(size_t ip, size_t sh) const
local gradient at ip
Definition: fe_geom.h:113
static const int dim
reference element dimension
Definition: fe_geom.h:56
number weight(size_t ip) const
weight for integration point
Definition: fe_geom.h:87
The base class for all geometric objects, such as vertices, edges, faces, volumes,...
Definition: grid_base_objects.h:157
Definition: subset_handler_interface.h:223
Identifier for Local Finite Elements.
Definition: local_finite_element_id.h:98
int order() const
returns the order of the local finite element
Definition: local_finite_element_id.h:126
static const int dim
#define UG_ASSERT(expr, msg)
Definition: assert.h:70
#define UG_THROW(msg)
Definition: error.h:57
double number
Definition: types.h:124
the ug namespace
ReferenceObjectID
these ids are used to identify the shape of a geometric object.
Definition: grid_base_objects.h:74
traits for reference elements
Definition: reference_element_traits.h:48