Loading [MathJax]/extensions/tex2jax.js
ug4
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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
42
43#include <cmath>
44
45namespace ug{
46
47template < 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
181template <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:
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
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 number * shape_vector(size_t ip) const
vector of shape functions in ip point
Definition fe_geom.h:325
size_t nip
Definition fe_geom.h:350
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point of scvf
Definition fe_geom.h:306
const MathMatrix< worldDim, dim > & JTInv(size_t ip) const
Transposed Inverse of Jacobian in integration point.
Definition fe_geom.h:310
number weight(size_t ip) const
integration weight
Definition fe_geom.h:298
std::vector< number > vDetJ
Definition fe_geom.h:357
number volume() const
volume of bf
Definition fe_geom.h:292
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_grad_vector(size_t ip) const
vector of global gradients in ip point
Definition fe_geom.h:343
std::vector< std::vector< MathVector< dim > > > vvLocalGrad
Definition fe_geom.h:361
number shape(size_t ip, size_t sh) const
value of shape function i in integration point
Definition fe_geom.h:321
const MathVector< dim > & local_ip(size_t ip) const
local integration point of scvf
Definition fe_geom.h:302
number Vol
Definition fe_geom.h:355
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
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
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 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
const MathVector< worldDim > & normal() const
outer normal on bf. Norm is equal to area
Definition fe_geom.h:289
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
const MathVector< worldDim > & global_grad(size_t ip, size_t sh) const
global gradient at ip
Definition fe_geom.h:254
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
size_t m_nip
number of integration point
Definition fe_geom.h:440
std::vector< MathVector< worldDim > > m_vIPGlobal
global integration points (size = nip)
Definition fe_geom.h:449
const MathVector< dim > & local_ip(size_t ip) const
local integration point
Definition fe_geom.h:218
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_ips() const
local integration point
Definition fe_geom.h:232
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
const std::vector< BF > & bf(int si) const
returns reference to vector of boundary faces for subsetIndex
Definition fe_geom.h:414
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
const MathVector< worldDim > * global_ips() const
global integration point
Definition fe_geom.h:235
void update(GridObject *pElem, const MathVector< worldDim > *vCorner)
update Geometry for corners
Definition fe_geom.h:268
std::vector< std::vector< MathVector< worldDim > > > m_vvGradGlobal
local gradient evaluated at ip (size = nip x nsh)
Definition fe_geom.h:467
const MathVector< dim > & local_grad(size_t ip, size_t sh) const
local gradient at ip
Definition fe_geom.h:246
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
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
const BF & bf(int si, size_t i) const
returns the boundary face i for subsetIndex
Definition fe_geom.h:404
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
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point
Definition fe_geom.h:225
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
Definition fe_geom.h:50
static const int worldDim
world dimension
Definition fe_geom.h:59
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_ips() const
local integration point
Definition fe_geom.h:100
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
const MathVector< worldDim > & global_grad(size_t ip, size_t sh) const
global gradient at ip
Definition fe_geom.h:120
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< dim > & local_grad(size_t ip, size_t sh) const
local gradient at ip
Definition fe_geom.h:113
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
const MathVector< dim > & local_ip(size_t ip) const
local integration point
Definition fe_geom.h:90
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
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point
Definition fe_geom.h:93
size_t num_ip() const
number of integration points
Definition fe_geom.h:81
static const int dim
reference element dimension
Definition fe_geom.h:56
const MathVector< worldDim > * global_ips() const
global integration point
Definition fe_geom.h:103
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
A class for fixed size, dense matrices.
Definition math_matrix.h:63
a mathematical Vector with N entries.
Definition math_vector.h:97
Definition reference_mapping.h:65
#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