Loading [MathJax]/extensions/tex2jax.js
ug4
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
fvho_geom.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2013-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_VOLUME_HIGHER_ORDER_GEOMETRY__
34#define __H__UG__LIB_DISC__SPATIAL_DISC__DISC_HELPER__FINITE_VOLUME_HIGHER_ORDER_GEOMETRY__
35
36// extern libraries
37#include <cmath>
38#include <map>
39#include <vector>
40
41// other ug4 modules
42#include "common/common.h"
43
44// library intern includes
52#include "fv_util.h"
53#include "fv_geom_base.h"
54
55namespace ug{
56
58// FV Geometry for Reference Element Type (all orders)
60
62
69template < int TOrder, typename TElem, int TWorldDim,
70 int TQuadOrder = TOrder + 1>
72{
73 private:
75 static const int p = TOrder;
76
77 public:
79 typedef TElem elem_type;
80
83
85 static const int dim = ref_elem_type::dim;
86
88 static const int worldDim = TWorldDim;
89
90 public:
92 static const int order = TOrder;
93
95 static const size_t numSubElem = Pow<p, dim>::value;
96
97
100
102 typedef typename traits::scvf_type scvf_type;
103
105 static const size_t numSCVFPerSubElem = ref_elem_type::numEdges;
106
108 static const size_t numSCVF = numSubElem * numSCVFPerSubElem;
109
111 static const int quadOrderSCVF = TQuadOrder;
112
115
117 static const size_t numSCVFIP = scvf_quad_rule_type::nip * numSCVF;
118
119
121 typedef typename traits::scv_type scv_type;
122
124 static const size_t numSCVPerSubElem = ref_elem_type::numCorners;
125
127 static const size_t numSCV = numSubElem * numSCVPerSubElem;
128
130 static const int quadOrderSCV = TQuadOrder;
131
134
136 static const size_t numSCVIP = scv_quad_rule_type::nip * numSCV;
137
138
141
143 static const size_t nsh = local_shape_fct_set_type::nsh;
144
146 static const bool usesHangingNodes = false;
147
149 static const bool staticLocalData = true;
150
151 public:
153 class SCVF
154 {
155 public:
157 static const size_t nip = scvf_quad_rule_type::nip;
158
160 static const size_t numCo = traits::NumCornersOfSCVF;
161
162 public:
163 SCVF() {}
164
166 inline size_t from() const {return From;}
167
169 inline size_t to() const {return To;}
170
172 inline size_t num_ip() const {return nip;}
173
175 inline number weight(size_t ip) const
176 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vWeight[ip]*vDetJMap[ip];;}
177
179 inline const MathVector<dim>& local_ip(size_t ip) const
180 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vLocalIP[ip];}
181
183 inline const MathVector<worldDim>& global_ip(size_t ip) const
184 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vGlobalIP[ip];}
185
187 inline const MathVector<worldDim>& normal() const {return Normal;}
188
190 inline const MathMatrix<worldDim,dim>& JTInv(size_t ip) const
191 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vJtInv[ip];}
192
194 inline number detJ(size_t ip) const
195 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vDetJ[ip];}
196
198 inline size_t num_sh() const {return nsh;}
199
201 inline number shape(size_t ip, size_t sh) const
202 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vvShape[ip][sh];}
203
205 inline const number* shape_vector(size_t ip) const
206 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vvShape[ip];}
207
209 inline const MathVector<dim>& local_grad(size_t ip, size_t sh) const
210 {UG_ASSERT(sh < num_sh(), "Invalid index");
211 UG_ASSERT(ip<num_ip(), "Wrong index"); return vvLocalGrad[ip][sh];}
212
214 inline const MathVector<dim>* local_grad_vector(size_t ip) const
215 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vvLocalGrad[ip];}
216
218 inline const MathVector<worldDim>& global_grad(size_t ip, size_t sh) const
219 {UG_ASSERT(sh < num_sh(), "Invalid index");
220 UG_ASSERT(ip<num_ip(), "Wrong index"); return vvGlobalGrad[ip][sh];}
221
223 inline const MathVector<worldDim>* global_grad_vector(size_t ip) const
224 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vvGlobalGrad[ip];}
225
227 inline size_t num_corners() const {return numCo;}
228
230 inline const MathVector<dim>& local_corner(size_t co) const
231 {UG_ASSERT(co < num_corners(), "Invalid index."); return vLocPos[co];}
232
234 inline const MathVector<worldDim>& global_corner(size_t co) const
235 {UG_ASSERT(co < num_corners(), "Invalid index."); return vGloPos[co];}
236
237 private:
238 // let outer class access private members
239 friend class FVGeometry<TOrder, TElem, TWorldDim, TQuadOrder>;
240
241 // This scvf separates the scv with the ids given in "from" and "to"
242 // The computed normal points in direction from->to
243 size_t From, To;
244
245 // The normal on the SCVF pointing (from -> to)
246 MathVector<worldDim> Normal; // normal (incl. area)
247
248 // ordering is:
249 // 1D: edgeMidPoint
250 // 2D: edgeMidPoint, CenterOfElement
251 // 3D: edgeMidPoint, Side one, CenterOfElement, Side two
252 MathVector<dim> vLocPos[numCo]; // local corners of scvf
253 MathVector<worldDim> vGloPos[numCo]; // global corners of scvf
254 MidID vMidID[numCo]; // dimension and id of object, that's midpoint bounds the scvf
255
256 // scvf part
257 MathVector<dim> vLocalIP[nip]; // local integration point
258 MathVector<worldDim> vGlobalIP[nip]; // global integration point
259 const number* vWeight; // weight at ip
260
261 // shapes and derivatives
262 number vvShape[nip][nsh]; // shapes at ip
263 MathVector<dim> vvLocalGrad[nip][nsh]; // local grad at ip
264 MathVector<worldDim> vvGlobalGrad[nip][nsh]; // global grad at ip
265 MathMatrix<worldDim,dim> vJtInv[nip]; // Jacobian transposed at ip
266 number vDetJ[nip]; // Jacobian det at ip
267 number vDetJMap[nip]; // Jacobian det at ip
268 };
269
271 class SCV
272 {
273 public:
275 static const size_t nip = scv_quad_rule_type::nip;
276
278 static const size_t numCo = traits::NumCornersOfSCV;
279
280 public:
281 SCV() {};
282
284 inline size_t num_corners() const {return numCo;}
285
287 inline const MathVector<dim>& local_corner(size_t co) const
288 {UG_ASSERT(co < num_corners(), "Invalid index."); return vLocPos[co];}
289
291 inline const MathVector<worldDim>& global_corner(size_t co) const
292 {UG_ASSERT(co < num_corners(), "Invalid index."); return vGloPos[co];}
293
295 inline size_t node_id() const {return nodeId;}
296
298 inline size_t num_ip() const {return nip;}
299
301 inline number weight(size_t ip) const
302 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vWeight[ip]*vDetJMap[ip];}
303
305 inline const MathVector<dim>& local_ip(size_t ip) const
306 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vLocalIP[ip];}
307
309 inline const MathVector<worldDim>& global_ip(size_t ip) const
310 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vGlobalIP[ip];}
311
313 inline const MathMatrix<worldDim,dim>& JTInv(size_t ip) const
314 {UG_ASSERT(ip<num_ip(),"Wring index."); return vJtInv[ip];}
315
317 inline number detJ(size_t ip) const
318 {UG_ASSERT(ip<num_ip(),"Wring index."); return vDetJ[ip];}
319
321 inline size_t num_sh() const {return nsh;}
322
324 inline number shape(size_t ip, size_t sh) const
325 {UG_ASSERT(ip<num_ip(),"Wring index."); return vvShape[ip][sh];}
326
328 inline const number* shape_vector(size_t ip) const
329 {UG_ASSERT(ip<num_ip(),"Wring index."); return vvShape[ip];}
330
332 inline const MathVector<dim>& local_grad(size_t ip, size_t sh) const
333 {UG_ASSERT(sh < num_sh(), "Invalid index");
334 UG_ASSERT(ip<num_ip(),"Wring index."); return vvLocalGrad[ip][sh];}
335
337 inline const MathVector<dim>* local_grad_vector(size_t ip) const
338 {UG_ASSERT(ip<num_ip(),"Wring index."); return vvLocalGrad[ip];}
339
341 inline const MathVector<worldDim>& global_grad(size_t ip, size_t sh) const
342 {UG_ASSERT(sh < num_sh(), "Invalid index");
343 UG_ASSERT(ip<num_ip(),"Wring index."); return vvGlobalGrad[ip][sh];}
344
346 inline const MathVector<worldDim>* global_grad_vector(size_t ip) const
347 {UG_ASSERT(ip<num_ip(),"Wring index."); return vvGlobalGrad[ip];}
348
349 private:
350 // let outer class access private members
351 friend class FVGeometry<TOrder, TElem, TWorldDim, TQuadOrder>;
352
353 // node id of associated node
354 size_t nodeId;
355
356 // scv part
357 MathVector<dim> vLocalIP[nip]; // local integration point
358 MathVector<worldDim> vGlobalIP[nip]; // global intergration point
359 const number* vWeight; // weight at ip
360
361 // local and global positions of this element
362 MathVector<dim> vLocPos[numCo]; // local position of node
363 MathVector<worldDim> vGloPos[numCo]; // global position of node
364 MidID vMidID[numCo]; // dimension and id of object, that's midpoint bounds the scv
365
366 // shapes and derivatives
367 number vvShape[nip][nsh]; // shapes at ip
368 MathVector<dim> vvLocalGrad[nip][nsh]; // local grad at ip
369 MathVector<worldDim> vvGlobalGrad[nip][nsh]; // global grad at ip
370 MathMatrix<worldDim,dim> vJtInv[nip]; // Jacobian transposed at ip
371 number vDetJ[nip]; // Jacobian det at ip
372 number vDetJMap[nip]; // Jacobian det at ip for scv integral map
373 };
374
376 class BF
377 {
378 public:
380 static const size_t nip = scvf_quad_rule_type::nip;
381
383 static const size_t numCo = traits::NumCornersOfSCVF;
384
385 public:
386 BF() {}
387
389 inline size_t node_id() const {return nodeId;}
390
392 inline const MathVector<worldDim>& normal() const {return Normal;} // includes area
393
395 inline number volume() const {return Vol;}
396
398 inline size_t num_ip() const {return nip;}
399
401 inline number weight(size_t ip) const
402 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vWeight[ip];}
403
405 inline const MathVector<dim>& local_ip(size_t ip) const
406 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vLocalIP[ip];}
407
409 inline const MathVector<worldDim>& global_ip(size_t ip) const
410 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vGlobalIP[ip];}
411
413 inline const MathMatrix<worldDim,dim>& JTInv(size_t ip) const
414 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vJtInv[ip];}
415
417 inline number detJ(size_t ip) const
418 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vDetJ[ip];}
419
421 inline size_t num_sh() const {return nsh;}
422
424 inline number shape(size_t ip, size_t sh) const
425 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vvShape[ip][sh];}
426
428 inline const number* shape_vector(size_t ip) const
429 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vvShape[ip];}
430
432 inline const MathVector<dim>& local_grad(size_t ip, size_t sh) const
433 {UG_ASSERT(sh < num_sh(), "Invalid index");
434 UG_ASSERT(ip<num_ip(), "Wrong index"); return vvLocalGrad[ip][sh];}
435
437 inline const MathVector<dim>* local_grad_vector(size_t ip) const
438 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vvLocalGrad[ip];}
439
441 inline const MathVector<worldDim>& global_grad(size_t ip, size_t sh) const
442 {UG_ASSERT(sh < num_sh(), "Invalid index");
443 UG_ASSERT(ip<num_ip(), "Wrong index"); return vvGlobalGrad[ip][sh];}
444
446 inline const MathVector<worldDim>* global_grad_vector(size_t ip) const
447 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vvGlobalGrad[ip];}
448
450 inline size_t num_corners() const {return numCo;}
451
453 inline const MathVector<dim>& local_corner(size_t co) const
454 {UG_ASSERT(co < num_corners(), "Invalid index."); return vLocPos[co];}
455
457 inline const MathVector<worldDim>& global_corner(size_t co) const
458 {UG_ASSERT(co < num_corners(), "Invalid index."); return vGloPos[co];}
459
460 private:
462 friend class FVGeometry<TOrder, TElem, TWorldDim, TQuadOrder>;
463
464 // id of scv this bf belongs to
465 size_t nodeId;
466
467 // ordering is:
468 // 1D: edgeMidPoint
469 // 2D: edgeMidPoint, CenterOfElement
470 // 3D: edgeMidPoint, Side one, CenterOfElement, Side two
471 MathVector<dim> vLocPos[numCo]; // local corners of bf
472 MathVector<worldDim> vGloPos[numCo]; // global corners of bf
473 MidID vMidID[numCo]; // dimension and id of object, that's midpoint bounds the bf
474
475 // scvf part
476 MathVector<dim> vLocalIP[nip]; // local integration point
477 MathVector<worldDim> vGlobalIP[nip]; // global integration point
478 const number* vWeight; // weight at ip
479 MathVector<worldDim> Normal; // normal (incl. area)
480 number Vol; // volume of bf
481
482 // shapes and derivatives
483 number vvShape[nip][nsh]; // shapes at ip
484 MathVector<dim> vvLocalGrad[nip][nsh]; // local grad at ip
485 MathVector<worldDim> vvGlobalGrad[nip][nsh]; // global grad at ip
486 MathMatrix<worldDim,dim> vJtInv[nip]; // Jacobian transposed at ip
487 number vDetJ[nip]; // Jacobian det at ip
488 };
489
490
491 public:
493 FVGeometry();
494
496 void update_local_data();
497
500 const LFEID& lfeID = LFEID(LFEID::LAGRANGE, worldDim, 1),
501 size_t orderQuad = TQuadOrder);
502
504 void update(GridObject* elem, const MathVector<worldDim>* vCornerCoords,
505 const ISubsetHandler* ish = NULL);
506
509 const MathVector<worldDim>* vCornerCoords,
510 const ISubsetHandler* ish = NULL);
511
513 inline size_t num_scvf() const {return numSCVF;};
514
516 inline const SCVF& scvf(size_t i) const
517 {UG_ASSERT(i < num_scvf(), "Invalid Index."); return m_vSCVF[i];}
518
520 inline size_t num_scv() const {return numSCV;}
521
523 inline const SCV& scv(size_t i) const
524 {UG_ASSERT(i < num_scv(), "Invalid Index."); return m_vSCV[i];}
525
527 inline size_t num_sh() const {return nsh;}
528
529 public:
531 size_t num_scvf_ips() const {return numSCVFIP;}
532
535
538
540 size_t num_scv_ips() const {return numSCVIP;}
541
544
547
548
549 protected:
550 // global and local ips on SCVF
553
554 // global and local ips on SCVF
557
558 protected:
559 // maximum number of geom objects in a dimension
560 static const int maxMid = numSCVF + 1;
561
562 // subelement
564 {
565 // shape number of corners of subelement
566 size_t vDoFID[ref_elem_type::numCorners];
567
568 // local and global geom object midpoints for each dimension
569 // (most objects in 1 dim, i.e. number of edges, but +1 for 1D)
572
573 // flag is subelement has boundary sides
575
576 // -1 is no bnd side, >= 0 corresponding side of whole element
577 std::vector<int> vElemBndSide;
578 };
579
582
583 public:
585 inline void add_boundary_subset(int subsetIndex) {m_mapVectorBF[subsetIndex];}
586
588 inline void remove_boundary_subset(int subsetIndex) {m_mapVectorBF.erase(subsetIndex);}
589
591 inline void clear_boundary_subsets() {m_mapVectorBF.clear();}
592
594 inline size_t num_boundary_subsets() {return m_mapVectorBF.size();}
595
597 inline size_t num_bf() const
598 {
599 typename std::map<int, std::vector<BF> >::const_iterator it;
600 size_t num = 0;
601 for ( it=m_mapVectorBF.begin() ; it != m_mapVectorBF.end(); it++ )
602 num += (*it).second.size();
603 return num;
604 }
605
607 inline size_t num_bf(int si) const
608 {
609 typename std::map<int, std::vector<BF> >::const_iterator it;
610 it = m_mapVectorBF.find(si);
611 if(it == m_mapVectorBF.end()) return 0;
612 else return (*it).second.size();
613 }
614
616 inline const BF& bf(int si, size_t i) const
617 {
618 typename std::map<int, std::vector<BF> >::const_iterator it;
619 it = m_mapVectorBF.find(si);
620 if(it == m_mapVectorBF.end()) UG_THROW("FVGeom: No BndSubset"<<si);
621 return (*it).second[i];
622 }
623
625 inline const std::vector<BF>& bf(int si) const
626 {
627 typename std::map<int, std::vector<BF> >::const_iterator it;
628 it = m_mapVectorBF.find(si);
629 if(it == m_mapVectorBF.end()) return m_vEmptyVectorBF;
630 return (*it).second;
631 }
632
633 void reset_curr_elem() {m_pElem = NULL;}
634
635 protected:
636 std::map<int, std::vector<BF> > m_mapVectorBF;
637 std::vector<BF> m_vEmptyVectorBF;
638
639 private:
641 TElem* m_pElem;
642
644 MathVector<dim> m_vLocCorner[ref_elem_type::numCorners];
645
648
651
654
657
660
663
666};
667
669// Dimension FV Geometry (all orders) DIM FV
671
673
677template <int TWorldDim, int TDim = TWorldDim>
679{
680 public:
683
685 static const int dim = TDim;
686
688 static const int worldDim = TWorldDim;
689
690 public:
692 typedef typename traits::scvf_type scvf_type;
693
695 typedef typename traits::scv_type scv_type;
696
698 static const bool usesHangingNodes = false;
699
701 static const bool staticLocalData = false;
702
703 public:
705 class SCVF
706 {
707 public:
709 static const size_t numCo = traits::NumCornersOfSCVF;
710
711 public:
712 SCVF() {}
713
715 inline size_t from() const {return From;}
716
718 inline size_t to() const {return To;}
719
721 inline size_t num_ip() const {return nip;}
722
724 inline number weight(size_t ip) const
725 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vWeight[ip]*vDetJMap[ip];}
726
728 inline const MathVector<dim>& local_ip(size_t ip) const
729 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vLocalIP[ip];}
730
732 inline const MathVector<worldDim>& global_ip(size_t ip) const
733 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vGlobalIP[ip];}
734
736 inline const MathVector<worldDim>& normal() const {return Normal;}
737
739 inline const MathMatrix<worldDim,dim>& JTInv(size_t ip) const
740 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vJtInv[ip];}
741
743 inline number detJ(size_t ip) const
744 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vDetJ[ip];}
745
747 inline size_t num_sh() const {return nsh;}
748
750 inline number shape(size_t ip, size_t sh) const
751 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vvShape[ip][sh];}
752
754 inline const number* shape_vector(size_t ip) const
755 {UG_ASSERT(ip<num_ip(), "Wrong index"); return &vvShape[ip][0];}
756
758 inline const MathVector<dim>& local_grad(size_t ip, size_t sh) const
759 {UG_ASSERT(sh < num_sh(), "Invalid index");
760 UG_ASSERT(ip<num_ip(), "Wrong index"); return vvLocalGrad[ip][sh];}
761
763 inline const MathVector<dim>* local_grad_vector(size_t ip) const
764 {UG_ASSERT(ip<num_ip(), "Wrong index"); return &vvLocalGrad[ip][0];}
765
767 inline const MathVector<worldDim>& global_grad(size_t ip, size_t sh) const
768 {UG_ASSERT(sh < num_sh(), "Invalid index");
769 UG_ASSERT(ip<num_ip(), "Wrong index"); return vvGlobalGrad[ip][sh];}
770
772 inline const MathVector<worldDim>* global_grad_vector(size_t ip) const
773 {UG_ASSERT(ip<num_ip(), "Wrong index"); return &vvGlobalGrad[ip][0];}
774
776 inline size_t num_corners() const {return numCo;}
777
779 inline const MathVector<dim>& local_corner(size_t co) const
780 {UG_ASSERT(co < num_corners(), "Invalid index."); return vLocPos[co];}
781
783 inline const MathVector<worldDim>& global_corner(size_t co) const
784 {UG_ASSERT(co < num_corners(), "Invalid index."); return vGloPos[co];}
785
786 private:
787 // let outer class access private members
788 friend class DimFVGeometry<worldDim, dim>;
789
790 // This scvf separates the scv with the ids given in "from" and "to"
791 // The computed normal points in direction from->to
792 size_t From, To;
793
794 // The normal on the SCVF pointing (from -> to)
795 MathVector<worldDim> Normal; // normal (incl. area)
796
797 // ordering is:
798 // 1D: edgeMidPoint
799 // 2D: edgeMidPoint, CenterOfElement
800 // 3D: edgeMidPoint, Side one, CenterOfElement, Side two
801 MathVector<dim> vLocPos[numCo]; // local corners of scvf
802 MathVector<worldDim> vGloPos[numCo]; // global corners of scvf
803 MidID vMidID[numCo]; // dimension and id of object, that's midpoint bounds the scvf
804
805 // scvf part
806 size_t nip;
807 std::vector<MathVector<dim> > vLocalIP; // local integration point (size: nip)
808 std::vector<MathVector<worldDim> > vGlobalIP; // global integration point (size: nip)
809 const number* vWeight; // weight at ip
810
811 // shapes and derivatives
812 size_t nsh;
813 std::vector<std::vector<number> > vvShape; // shapes at ip (size: nip x nsh)
814 std::vector<std::vector<MathVector<dim> > > vvLocalGrad; // local grad at ip (size: nip x nsh)
815 std::vector<std::vector<MathVector<worldDim> > > vvGlobalGrad; // global grad at ip (size: nip x nsh)
816 std::vector<MathMatrix<worldDim,dim> > vJtInv; // Jacobian transposed at ip (size: nip)
817 std::vector<number> vDetJ; // Jacobian det at ip (size: nip)
818 std::vector<number> vDetJMap; // Jacobian det at ip (size: nip)
819 };
820
822 class SCV
823 {
824 public:
826 static const size_t numCo = traits::NumCornersOfSCV;
827
828 public:
829 SCV() {};
830
832 inline size_t num_corners() const {return numCo;}
833
835 inline const MathVector<dim>& local_corner(size_t co) const
836 {UG_ASSERT(co < num_corners(), "Invalid index."); return vLocPos[co];}
837
839 inline const MathVector<worldDim>& global_corner(size_t co) const
840 {UG_ASSERT(co < num_corners(), "Invalid index."); return vGloPos[co];}
841
843 inline size_t node_id() const {return nodeId;}
844
846 inline size_t num_ip() const {return nip;}
847
849 inline number weight(size_t ip) const
850 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vWeight[ip]*vDetJMap[ip];}
851
853 inline const MathVector<dim>& local_ip(size_t ip) const
854 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vLocalIP[ip];}
855
857 inline const MathVector<worldDim>& global_ip(size_t ip) const
858 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vGlobalIP[ip];}
859
861 inline const MathMatrix<worldDim,dim>& JTInv(size_t ip) const
862 {UG_ASSERT(ip<num_ip(),"Wring index."); return vJtInv[ip];}
863
865 inline number detJ(size_t ip) const
866 {UG_ASSERT(ip<num_ip(),"Wring index."); return vDetJ[ip];}
867
869 inline size_t num_sh() const {return nsh;}
870
872 inline number shape(size_t ip, size_t sh) const
873 {UG_ASSERT(ip<num_ip(),"Wring index."); return vvShape[ip][sh];}
874
876 inline const number* shape_vector(size_t ip) const
877 {UG_ASSERT(ip<num_ip(),"Wring index."); return &vvShape[ip][0];}
878
880 inline const MathVector<dim>& local_grad(size_t ip, size_t sh) const
881 {UG_ASSERT(sh < num_sh(), "Invalid index");
882 UG_ASSERT(ip<num_ip(),"Wring index."); return vvLocalGrad[ip][sh];}
883
885 inline const MathVector<dim>* local_grad_vector(size_t ip) const
886 {UG_ASSERT(ip<num_ip(),"Wring index."); return &vvLocalGrad[ip][0];}
887
889 inline const MathVector<worldDim>& global_grad(size_t ip, size_t sh) const
890 {UG_ASSERT(sh < num_sh(), "Invalid index");
891 UG_ASSERT(ip<num_ip(),"Wring index."); return vvGlobalGrad[ip][sh];}
892
894 inline const MathVector<worldDim>* global_grad_vector(size_t ip) const
895 {UG_ASSERT(ip<num_ip(),"Wring index."); return &vvGlobalGrad[ip][0];}
896
897 private:
898 // let outer class access private members
899 friend class DimFVGeometry<worldDim, dim>;
900
901 // node id of associated node
902 size_t nodeId;
903
904 // local and global positions of this element
905 MathVector<dim> vLocPos[numCo]; // local position of node
906 MathVector<worldDim> vGloPos[numCo]; // global position of node
907 MidID vMidID[numCo]; // dimension and id of object, that's midpoint bounds the scv
908
909 // scv part
910 size_t nip;
911 std::vector<MathVector<dim> > vLocalIP; // local integration point (size: nip)
912 std::vector<MathVector<worldDim> > vGlobalIP; // global intergration point (size: nip)
913 const number* vWeight; // weight at ip
914
915 // shapes and derivatives
916 size_t nsh;
917 std::vector<std::vector<number> > vvShape; // shapes at ip (size: nip x nsh)
918 std::vector<std::vector<MathVector<dim> > > vvLocalGrad; // local grad at ip (size: nip x nsh)
919 std::vector<std::vector<MathVector<worldDim> > > vvGlobalGrad; // global grad at ip (size: nip x nsh)
920 std::vector<MathMatrix<worldDim,dim> > vJtInv; // Jacobian transposed at ip (size: nip)
921 std::vector<number> vDetJ; // Jacobian det at ip (size: nip)
922 std::vector<number> vDetJMap; // Jacobian det at ip (size: nip)
923 };
924
926 class BF
927 {
928 public:
930 static const size_t numCo = traits::NumCornersOfSCVF;
931
932 public:
933 BF() {}
934
936 inline size_t node_id() const {return nodeId;}
937
939 inline const MathVector<worldDim>& normal() const {return Normal;} // includes area
940
942 inline number volume() const {return Vol;}
943
945 inline size_t num_ip() const {return nip;}
946
948 inline number weight(size_t ip) const
949 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vWeight[ip];}
950
952 inline const MathVector<dim>& local_ip(size_t ip) const
953 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vLocalIP[ip];}
954
956 inline const MathVector<worldDim>& global_ip(size_t ip) const
957 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vGlobalIP[ip];}
958
960 inline const MathMatrix<worldDim,dim>& JTInv(size_t ip) const
961 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vJtInv[ip];}
962
964 inline number detJ(size_t ip) const
965 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vDetJ[ip];}
966
968 inline size_t num_sh() const {return nsh;}
969
971 inline number shape(size_t ip, size_t sh) const
972 {UG_ASSERT(ip<num_ip(), "Wrong index"); return vvShape[ip][sh];}
973
975 inline const number* shape_vector(size_t ip) const
976 {UG_ASSERT(ip<num_ip(), "Wrong index"); return &vvShape[ip][0];}
977
979 inline const MathVector<dim>& local_grad(size_t ip, size_t sh) const
980 {UG_ASSERT(sh < num_sh(), "Invalid index");
981 UG_ASSERT(ip<num_ip(), "Wrong index"); return vvLocalGrad[ip][sh];}
982
984 inline const MathVector<dim>* local_grad_vector(size_t ip) const
985 {UG_ASSERT(ip<num_ip(), "Wrong index"); return &vvLocalGrad[ip][0];}
986
988 inline const MathVector<worldDim>& global_grad(size_t ip, size_t sh) const
989 {UG_ASSERT(sh < num_sh(), "Invalid index");
990 UG_ASSERT(ip<num_ip(), "Wrong index"); return vvGlobalGrad[ip][sh];}
991
993 inline const MathVector<worldDim>* global_grad_vector(size_t ip) const
994 {UG_ASSERT(ip<num_ip(), "Wrong index"); return &vvGlobalGrad[ip][0];}
995
997 inline size_t num_corners() const {return numCo;}
998
1000 inline const MathVector<dim>& local_corner(size_t co) const
1001 {UG_ASSERT(co < num_corners(), "Invalid index."); return vLocPos[co];}
1002
1004 inline const MathVector<worldDim>& global_corner(size_t co) const
1005 {UG_ASSERT(co < num_corners(), "Invalid index."); return vGloPos[co];}
1006
1007 private:
1009 friend class DimFVGeometry<worldDim, dim>;
1010
1011 // id of scv this bf belongs to
1012 size_t nodeId;
1013
1014 // ordering is:
1015 // 1D: edgeMidPoint
1016 // 2D: edgeMidPoint, CenterOfElement
1017 // 3D: edgeMidPoint, Side one, CenterOfElement, Side two
1018 MathVector<dim> vLocPos[numCo]; // local corners of bf
1019 MathVector<worldDim> vGloPos[numCo]; // global corners of bf
1020 MidID vMidID[numCo]; // dimension and id of object, that's midpoint bounds the bf
1021
1022 // scvf part
1023 size_t nip;
1024 std::vector<MathVector<dim> > vLocalIP; // local integration point (size: nip)
1025 std::vector<MathVector<worldDim> > vGlobalIP; // global integration point (size: nip)
1026 const number* vWeight; // weight at ip
1027 MathVector<worldDim> Normal; // normal (incl. area)
1028 number Vol; // volume of bf
1029
1030 // shapes and derivatives
1031 size_t nsh;
1032 std::vector<std::vector<number> > vvShape; // shapes at ip (size: nip x nsh)
1033 std::vector<std::vector<MathVector<dim> > > vvLocalGrad; // local grad at ip (size: nip x nsh)
1034 std::vector<std::vector<MathVector<worldDim> > > vvGlobalGrad; // global grad at ip (size: nip x nsh)
1035 std::vector<MathMatrix<worldDim,dim> > vJtInv; // Jacobian transposed at ip (size: nip)
1036 std::vector<number> vDetJ; // Jacobian det at ip (size: nip)
1037 };
1038
1039
1040 public:
1042 DimFVGeometry();
1043
1045 void update_local(ReferenceObjectID roid, const LFEID& lfeID, size_t orderQuad);
1046 void update_local(ReferenceObjectID roid, const LFEID& lfeID)
1047 {
1048 update_local(roid, lfeID, lfeID.order() + 1);
1049 }
1050
1052 void update(GridObject* pElem, const MathVector<worldDim>* vCornerCoords,
1053 const ISubsetHandler* ish = NULL)
1054 {
1055 update(pElem, vCornerCoords, m_lfeID, m_quadOrderSCV, ish);
1056 }
1057
1059 void update(GridObject* pElem, const MathVector<worldDim>* vCornerCoords,
1060 const LFEID& lfeID, size_t orderQuad,
1061 const ISubsetHandler* ish = NULL);
1062
1065 const MathVector<worldDim>* vCornerCoords,
1066 const ISubsetHandler* ish = NULL);
1067
1069 inline size_t num_scvf() const {return m_numSCVF;};
1070
1072 inline const SCVF& scvf(size_t i) const
1073 {UG_ASSERT(i < num_scvf(), "Invalid Index."); return m_vSCVF[i];}
1074
1076 inline size_t num_scv() const {return m_numSCV;}
1077
1079 inline const SCV& scv(size_t i) const
1080 {UG_ASSERT(i < num_scv(), "Invalid Index."); return m_vSCV[i];}
1081
1083 inline size_t num_sh() const {return m_nsh;};
1084
1085 public:
1087 size_t num_scvf_ips() const {return m_numSCVFIP;}
1088
1090 const MathVector<dim>* scvf_local_ips() const {return &(m_vLocSCVF_IP[0]);}
1091
1094
1096 size_t num_scv_ips() const {return m_numSCVIP;}
1097
1099 const MathVector<dim>* scv_local_ips() const {return &(m_vLocSCV_IP[0]);}
1100
1103
1104
1105 protected:
1106 // global and local ips on SCVF (size: numSCVFIP)
1107 std::vector<MathVector<worldDim> > m_vGlobSCVF_IP;
1108 std::vector<MathVector<dim> > m_vLocSCVF_IP;
1109
1110 // global and local ips on SCVF
1111 std::vector<MathVector<worldDim> > m_vGlobSCV_IP;
1112 std::vector<MathVector<dim> > m_vLocSCV_IP;
1113
1114 protected:
1115 // miximum number of geom objects in a dimension
1116 static const int maxMid = traits::maxNumSCVF +1;
1117
1118 // subelement
1120 {
1121 // shape number of corners of subelement
1122 size_t vDoFID[traits::maxNumSCV];
1123
1124 // local and global geom object midpoints for each dimension
1125 // (most objects in 1 dim, i.e. number of edges, but +1 for 1D)
1128
1129 // flag is subelement has boundary sides
1131
1132 // -1 is no bnd side, >= 0 corresponding side of whole element
1133 std::vector<int> vElemBndSide;
1134 };
1135
1137 std::vector<SubElement> m_vSubElem;
1138
1139 public:
1141 inline void add_boundary_subset(int subsetIndex) {m_mapVectorBF[subsetIndex];}
1142
1144 inline void remove_boundary_subset(int subsetIndex) {m_mapVectorBF.erase(subsetIndex);}
1145
1147 inline void clear_boundary_subsets() {m_mapVectorBF.clear();}
1148
1150 inline size_t num_boundary_subsets() {return m_mapVectorBF.size();}
1151
1153 inline size_t num_bf() const
1154 {
1155 typename std::map<int, std::vector<BF> >::const_iterator it;
1156 size_t num = 0;
1157 for ( it=m_mapVectorBF.begin() ; it != m_mapVectorBF.end(); it++ )
1158 num += (*it).second.size();
1159 return num;
1160 }
1161
1163 inline size_t num_bf(int si) const
1164 {
1165 typename std::map<int, std::vector<BF> >::const_iterator it;
1166 it = m_mapVectorBF.find(si);
1167 if(it == m_mapVectorBF.end()) return 0;
1168 else return (*it).second.size();
1169 }
1170
1172 inline const BF& bf(int si, size_t i) const
1173 {
1174 UG_ASSERT(i < num_bf(si), "Invalid index.");
1175 typename std::map<int, std::vector<BF> >::const_iterator it;
1176 it = m_mapVectorBF.find(si);
1177 if(it == m_mapVectorBF.end()) UG_THROW("DimFVGeom: No BndSubset: "<<si);
1178 return (*it).second[i];
1179 }
1180
1182 inline const std::vector<BF>& bf(int si) const
1183 {
1184 typename std::map<int, std::vector<BF> >::const_iterator it;
1185 it = m_mapVectorBF.find(si);
1186 if(it == m_mapVectorBF.end()) return m_vEmptyVectorBF;
1187 return (*it).second;
1188 }
1189
1190 void reset_curr_elem() {m_pElem = NULL;}
1191
1192 protected:
1193 std::map<int, std::vector<BF> > m_mapVectorBF;
1194 std::vector<BF> m_vEmptyVectorBF;
1195
1196 private:
1199
1202
1205
1208
1211
1213 size_t m_nsh;
1214
1217
1220
1222 std::vector<SCVF> m_vSCVF;
1223
1226
1229
1230
1232 size_t m_numSCV;
1233
1236
1238 std::vector<SCV> m_vSCV;
1239
1242
1245};
1246
1247}
1248
1249#endif /* __H__UG__LIB_DISC__SPATIAL_DISC__DISC_HELPER__FINITE_VOLUME_HIGHER_ORDER_GEOMETRY__ */
boundary face
Definition fvho_geom.h:927
const MathVector< dim > & local_corner(size_t co) const
return local corner number i
Definition fvho_geom.h:1000
const number * shape_vector(size_t ip) const
vector of shape functions in ip point
Definition fvho_geom.h:975
const MathVector< dim > & local_grad(size_t ip, size_t sh) const
value of local gradient of shape function i in integration point
Definition fvho_geom.h:979
std::vector< number > vDetJ
Definition fvho_geom.h:1036
size_t nodeId
Definition fvho_geom.h:1012
BF()
Definition fvho_geom.h:933
size_t num_corners() const
number of corners, that bound the scvf
Definition fvho_geom.h:997
number shape(size_t ip, size_t sh) const
value of shape function i in integration point
Definition fvho_geom.h:971
std::vector< std::vector< MathVector< dim > > > vvLocalGrad
Definition fvho_geom.h:1033
size_t num_sh() const
number of shape functions
Definition fvho_geom.h:968
const MathVector< dim > & local_ip(size_t ip) const
local integration point of scvf
Definition fvho_geom.h:952
size_t node_id() const
index of SubControlVolume of the bf
Definition fvho_geom.h:936
const MathMatrix< worldDim, dim > & JTInv(size_t ip) const
Transposed Inverse of Jacobian in integration point.
Definition fvho_geom.h:960
size_t nip
Definition fvho_geom.h:1023
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point of scvf
Definition fvho_geom.h:956
std::vector< MathMatrix< worldDim, dim > > vJtInv
Definition fvho_geom.h:1035
std::vector< MathVector< dim > > vLocalIP
Definition fvho_geom.h:1024
std::vector< MathVector< worldDim > > vGlobalIP
Definition fvho_geom.h:1025
const MathVector< worldDim > & global_grad(size_t ip, size_t sh) const
value of global gradient of shape function i in integration point
Definition fvho_geom.h:988
number Vol
Definition fvho_geom.h:1028
static const size_t numCo
Number of corners of bf.
Definition fvho_geom.h:930
MidID vMidID[numCo]
Definition fvho_geom.h:1020
std::vector< std::vector< MathVector< worldDim > > > vvGlobalGrad
Definition fvho_geom.h:1034
const MathVector< worldDim > * global_grad_vector(size_t ip) const
vector of global gradients in ip point
Definition fvho_geom.h:993
number weight(size_t ip) const
integration weight
Definition fvho_geom.h:948
number detJ(size_t ip) const
Determinant of Jacobian in integration point.
Definition fvho_geom.h:964
const number * vWeight
Definition fvho_geom.h:1026
size_t num_ip() const
number of integration points on scvf
Definition fvho_geom.h:945
number volume() const
volume of bf
Definition fvho_geom.h:942
MathVector< dim > vLocPos[numCo]
Definition fvho_geom.h:1018
std::vector< std::vector< number > > vvShape
Definition fvho_geom.h:1032
MathVector< worldDim > Normal
Definition fvho_geom.h:1027
MathVector< worldDim > vGloPos[numCo]
Definition fvho_geom.h:1019
const MathVector< worldDim > & global_corner(size_t co) const
return glbal corner number i
Definition fvho_geom.h:1004
const MathVector< worldDim > & normal() const
outer normal on bf. Norm is equal to area
Definition fvho_geom.h:939
const MathVector< dim > * local_grad_vector(size_t ip) const
vector of local gradients in ip point
Definition fvho_geom.h:984
size_t nsh
Definition fvho_geom.h:1031
Sub-Control Volume Face structure.
Definition fvho_geom.h:706
size_t From
Definition fvho_geom.h:792
const MathVector< dim > * local_grad_vector(size_t ip) const
vector of local gradients in ip point
Definition fvho_geom.h:763
std::vector< number > vDetJ
Definition fvho_geom.h:817
const MathVector< worldDim > & global_grad(size_t ip, size_t sh) const
value of global gradient of shape function i in integration point
Definition fvho_geom.h:767
const MathVector< dim > & local_corner(size_t co) const
return local corner number i
Definition fvho_geom.h:779
MathVector< worldDim > vGloPos[numCo]
Definition fvho_geom.h:802
size_t to() const
index of SubControlVolume on one side of the scvf
Definition fvho_geom.h:718
size_t num_sh() const
number of shape functions
Definition fvho_geom.h:747
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point of scvf
Definition fvho_geom.h:732
static const size_t numCo
Number of corners of scvf.
Definition fvho_geom.h:709
MidID vMidID[numCo]
Definition fvho_geom.h:803
size_t num_ip() const
number of integration points on scvf
Definition fvho_geom.h:721
number shape(size_t ip, size_t sh) const
value of shape function i in integration point
Definition fvho_geom.h:750
const MathVector< dim > & local_ip(size_t ip) const
local integration point of scvf
Definition fvho_geom.h:728
const MathVector< dim > & local_grad(size_t ip, size_t sh) const
value of local gradient of shape function i in integration point
Definition fvho_geom.h:758
std::vector< MathVector< dim > > vLocalIP
Definition fvho_geom.h:807
size_t To
Definition fvho_geom.h:792
std::vector< std::vector< MathVector< worldDim > > > vvGlobalGrad
Definition fvho_geom.h:815
std::vector< std::vector< MathVector< dim > > > vvLocalGrad
Definition fvho_geom.h:814
size_t from() const
index of SubControlVolume on one side of the scvf
Definition fvho_geom.h:715
size_t nip
Definition fvho_geom.h:806
number weight(size_t ip) const
integration weight
Definition fvho_geom.h:724
MathVector< worldDim > Normal
Definition fvho_geom.h:795
const MathVector< worldDim > & normal() const
normal on scvf (points direction "from"->"to"), normalized
Definition fvho_geom.h:736
const MathVector< worldDim > & global_corner(size_t co) const
return glbal corner number i
Definition fvho_geom.h:783
const MathVector< worldDim > * global_grad_vector(size_t ip) const
vector of gloabl gradients in ip point
Definition fvho_geom.h:772
std::vector< MathMatrix< worldDim, dim > > vJtInv
Definition fvho_geom.h:816
SCVF()
Definition fvho_geom.h:712
const number * shape_vector(size_t ip) const
vector of shape functions in ip point
Definition fvho_geom.h:754
std::vector< MathVector< worldDim > > vGlobalIP
Definition fvho_geom.h:808
size_t num_corners() const
number of corners, that bound the scvf
Definition fvho_geom.h:776
MathVector< dim > vLocPos[numCo]
Definition fvho_geom.h:801
const number * vWeight
Definition fvho_geom.h:809
size_t nsh
Definition fvho_geom.h:812
number detJ(size_t ip) const
Determinant of Jacobian in integration point.
Definition fvho_geom.h:743
const MathMatrix< worldDim, dim > & JTInv(size_t ip) const
Transposed Inverse of Jacobian in integration point.
Definition fvho_geom.h:739
std::vector< std::vector< number > > vvShape
Definition fvho_geom.h:813
std::vector< number > vDetJMap
Definition fvho_geom.h:818
sub control volume structure
Definition fvho_geom.h:823
std::vector< number > vDetJMap
Definition fvho_geom.h:922
const MathMatrix< worldDim, dim > & JTInv(size_t ip) const
Transposed Inverse of Jacobian in integration point.
Definition fvho_geom.h:861
MathVector< dim > vLocPos[numCo]
Definition fvho_geom.h:905
SCV()
Definition fvho_geom.h:829
size_t nip
Definition fvho_geom.h:910
const MathVector< dim > & local_ip(size_t ip) const
local integration point of scv
Definition fvho_geom.h:853
std::vector< std::vector< number > > vvShape
Definition fvho_geom.h:917
const MathVector< worldDim > & global_corner(size_t co) const
return glbal corner number i
Definition fvho_geom.h:839
number shape(size_t ip, size_t sh) const
value of shape function i in integration point
Definition fvho_geom.h:872
const MathVector< dim > * local_grad_vector(size_t ip) const
vector of local gradients in ip point
Definition fvho_geom.h:885
const MathVector< worldDim > & global_grad(size_t ip, size_t sh) const
value of global gradient of shape function i in integration point
Definition fvho_geom.h:889
size_t num_sh() const
number of shape functions
Definition fvho_geom.h:869
const MathVector< dim > & local_corner(size_t co) const
return local corner number i
Definition fvho_geom.h:835
const MathVector< dim > & local_grad(size_t ip, size_t sh) const
value of local gradient of shape function i in integration point
Definition fvho_geom.h:880
const number * vWeight
Definition fvho_geom.h:913
std::vector< MathMatrix< worldDim, dim > > vJtInv
Definition fvho_geom.h:920
size_t num_corners() const
number of corners, that bound the scvf
Definition fvho_geom.h:832
MidID vMidID[numCo]
Definition fvho_geom.h:907
static const size_t numCo
Number of corners of scvf.
Definition fvho_geom.h:826
const number * shape_vector(size_t ip) const
vector of shape functions in ip point
Definition fvho_geom.h:876
std::vector< MathVector< worldDim > > vGlobalIP
Definition fvho_geom.h:912
const MathVector< worldDim > * global_grad_vector(size_t ip) const
vector of global gradients in ip point
Definition fvho_geom.h:894
std::vector< number > vDetJ
Definition fvho_geom.h:921
MathVector< worldDim > vGloPos[numCo]
Definition fvho_geom.h:906
std::vector< MathVector< dim > > vLocalIP
Definition fvho_geom.h:911
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point
Definition fvho_geom.h:857
number weight(size_t ip) const
weigth of integration point
Definition fvho_geom.h:849
std::vector< std::vector< MathVector< dim > > > vvLocalGrad
Definition fvho_geom.h:918
size_t num_ip() const
number of integration points
Definition fvho_geom.h:846
size_t nodeId
Definition fvho_geom.h:902
number detJ(size_t ip) const
Determinant of Jacobian in integration point.
Definition fvho_geom.h:865
size_t nsh
Definition fvho_geom.h:916
size_t node_id() const
node id that this scv is associated to
Definition fvho_geom.h:843
std::vector< std::vector< MathVector< worldDim > > > vvGlobalGrad
Definition fvho_geom.h:919
Geometry and shape functions for any order Vertex-Centered Finite Volume.
Definition fvho_geom.h:679
DimFVGeometry()
construct object and initialize local values and sizes
Definition fvho_geom.cpp:1396
const MathVector< dim > * scv_local_ips() const
returns all ips of scv as they appear in scv loop
Definition fvho_geom.h:1099
void reset_curr_elem()
Definition fvho_geom.h:1190
std::vector< MathVector< dim > > m_vLocSCV_IP
Definition fvho_geom.h:1112
const BF & bf(int si, size_t i) const
returns the boundary face i for subsetIndex
Definition fvho_geom.h:1172
traits::scvf_type scvf_type
type of SubControlVolumeFace
Definition fvho_geom.h:692
void clear_boundary_subsets()
reset all boundary subsets
Definition fvho_geom.h:1147
void update_local(ReferenceObjectID roid, const LFEID &lfeID, size_t orderQuad)
update local data
Definition fvho_geom.cpp:1402
size_t num_scvf_ips() const
returns number of all scvf ips
Definition fvho_geom.h:1087
size_t num_scv_ips() const
returns number of all scv ips
Definition fvho_geom.h:1096
std::vector< SCVF > m_vSCVF
SubControlVolumeFaces (size: numSCVF)
Definition fvho_geom.h:1222
size_t m_numSCVFIP
number of scvf ip
Definition fvho_geom.h:1228
size_t m_numSCV
current number of scv
Definition fvho_geom.h:1232
size_t m_numSubElem
current number of subelements
Definition fvho_geom.h:1210
size_t num_scvf() const
number of SubControlVolumeFaces
Definition fvho_geom.h:1069
traits::scv_type scv_type
type of SubControlVolume
Definition fvho_geom.h:695
void add_boundary_subset(int subsetIndex)
add subset that is interpreted as boundary subset.
Definition fvho_geom.h:1141
static const bool usesHangingNodes
Hanging node flag: this Geometry does not support hanging nodes.
Definition fvho_geom.h:698
size_t num_scv() const
number of SubControlVolumes
Definition fvho_geom.h:1076
const SCVF & scvf(size_t i) const
const access to SubControlVolumeFace number i
Definition fvho_geom.h:1072
std::vector< BF > m_vEmptyVectorBF
Definition fvho_geom.h:1194
void update_boundary_faces(GridObject *pElem, const MathVector< worldDim > *vCornerCoords, const ISubsetHandler *ish=NULL)
update boundary data for given element
Definition fvho_geom.cpp:1731
void remove_boundary_subset(int subsetIndex)
removes subset that is interpreted as boundary subset.
Definition fvho_geom.h:1144
size_t num_bf() const
number of all boundary faces
Definition fvho_geom.h:1153
LFEID m_lfeID
current trial space
Definition fvho_geom.h:1207
static const int worldDim
dimension of world
Definition fvho_geom.h:688
std::vector< MathVector< worldDim > > m_vGlobSCVF_IP
Definition fvho_geom.h:1107
const MathVector< worldDim > * scv_global_ips() const
returns all ips of scv as they appear in scv loop
Definition fvho_geom.h:1102
const MathVector< worldDim > * scvf_global_ips() const
returns all ips of scvf as they appear in scv loop
Definition fvho_geom.h:1093
int m_quadOrderSCVF
quadrature order
Definition fvho_geom.h:1225
std::vector< SubElement > m_vSubElem
subelements (size: numSubElem)
Definition fvho_geom.h:1137
const std::vector< BF > & bf(int si) const
returns reference to vector of boundary faces for subsetIndex
Definition fvho_geom.h:1182
int m_orderShape
current order
Definition fvho_geom.h:1204
static const bool staticLocalData
flag indicating if local data may change
Definition fvho_geom.h:701
void update(GridObject *pElem, const MathVector< worldDim > *vCornerCoords, const ISubsetHandler *ish=NULL)
update data for given element
Definition fvho_geom.h:1052
std::vector< MathVector< dim > > m_vLocSCVF_IP
Definition fvho_geom.h:1108
const SCV & scv(size_t i) const
const access to SubControlVolume number i
Definition fvho_geom.h:1079
size_t m_nsh
number of shape functions
Definition fvho_geom.h:1213
size_t num_bf(int si) const
number of boundary faces on subset 'subsetIndex'
Definition fvho_geom.h:1163
size_t num_sh() const
number of shape functions
Definition fvho_geom.h:1083
std::vector< MathVector< worldDim > > m_vGlobSCV_IP
Definition fvho_geom.h:1111
std::map< int, std::vector< BF > > m_mapVectorBF
Definition fvho_geom.h:1193
size_t m_numSCVPerSubElem
number of SCV per SubElement
Definition fvho_geom.h:1235
size_t m_numSCVIP
number of scv ip
Definition fvho_geom.h:1244
size_t num_boundary_subsets()
number of registered boundary subsets
Definition fvho_geom.h:1150
size_t m_numSCVFPerSubElem
current number of SCVF per SubElement
Definition fvho_geom.h:1219
void update_local(ReferenceObjectID roid, const LFEID &lfeID)
Definition fvho_geom.h:1046
size_t m_numSCVF
current number of scvf
Definition fvho_geom.h:1216
static const int dim
dimension of reference element
Definition fvho_geom.h:685
std::vector< SCV > m_vSCV
SubControlVolumes (size: numSCV)
Definition fvho_geom.h:1238
ReferenceObjectID m_roid
current reference object id
Definition fvho_geom.h:1201
int m_quadOrderSCV
current quadrature order scv
Definition fvho_geom.h:1241
fv1_dim_traits< TDim, TWorldDim > traits
traits used
Definition fvho_geom.h:682
GridObject * m_pElem
pointer to current element
Definition fvho_geom.h:1198
static const int maxMid
Definition fvho_geom.h:1116
const MathVector< dim > * scvf_local_ips() const
returns all ips of scvf as they appear in scv loop
Definition fvho_geom.h:1090
boundary face
Definition fvho_geom.h:377
const MathVector< dim > & local_ip(size_t ip) const
local integration point of scvf
Definition fvho_geom.h:405
MathMatrix< worldDim, dim > vJtInv[nip]
Definition fvho_geom.h:486
const MathVector< dim > & local_grad(size_t ip, size_t sh) const
value of local gradient of shape function i in integration point
Definition fvho_geom.h:432
MathVector< worldDim > Normal
Definition fvho_geom.h:479
MathVector< dim > vvLocalGrad[nip][nsh]
Definition fvho_geom.h:484
const MathMatrix< worldDim, dim > & JTInv(size_t ip) const
Transposed Inverse of Jacobian in integration point.
Definition fvho_geom.h:413
number vDetJ[nip]
Definition fvho_geom.h:487
MathVector< worldDim > vGlobalIP[nip]
Definition fvho_geom.h:477
number weight(size_t ip) const
integration weight
Definition fvho_geom.h:401
size_t nodeId
Definition fvho_geom.h:465
size_t num_corners() const
number of corners, that bound the scvf
Definition fvho_geom.h:450
const MathVector< dim > & local_corner(size_t co) const
return local corner number i
Definition fvho_geom.h:453
static const size_t nip
number of integration points
Definition fvho_geom.h:380
const MathVector< worldDim > * global_grad_vector(size_t ip) const
vector of global gradients in ip point
Definition fvho_geom.h:446
size_t num_sh() const
number of shape functions
Definition fvho_geom.h:421
MathVector< dim > vLocPos[numCo]
Definition fvho_geom.h:471
MathVector< dim > vLocalIP[nip]
Definition fvho_geom.h:476
size_t node_id() const
index of SubControlVolume of the bf
Definition fvho_geom.h:389
const number * vWeight
Definition fvho_geom.h:478
MathVector< worldDim > vvGlobalGrad[nip][nsh]
Definition fvho_geom.h:485
const number * shape_vector(size_t ip) const
vector of shape functions in ip point
Definition fvho_geom.h:428
MidID vMidID[numCo]
Definition fvho_geom.h:473
const MathVector< dim > * local_grad_vector(size_t ip) const
vector of local gradients in ip point
Definition fvho_geom.h:437
const MathVector< worldDim > & global_corner(size_t co) const
return glbal corner number i
Definition fvho_geom.h:457
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point of scvf
Definition fvho_geom.h:409
number vvShape[nip][nsh]
Definition fvho_geom.h:483
BF()
Definition fvho_geom.h:386
number detJ(size_t ip) const
Determinant of Jacobian in integration point.
Definition fvho_geom.h:417
number volume() const
volume of bf
Definition fvho_geom.h:395
number shape(size_t ip, size_t sh) const
value of shape function i in integration point
Definition fvho_geom.h:424
const MathVector< worldDim > & normal() const
outer normal on bf. Norm is equal to area
Definition fvho_geom.h:392
const MathVector< worldDim > & global_grad(size_t ip, size_t sh) const
value of global gradient of shape function i in integration point
Definition fvho_geom.h:441
size_t num_ip() const
number of integration points on scvf
Definition fvho_geom.h:398
static const size_t numCo
Number of corners of bf.
Definition fvho_geom.h:383
MathVector< worldDim > vGloPos[numCo]
Definition fvho_geom.h:472
number Vol
Definition fvho_geom.h:480
Sub-Control Volume Face structure.
Definition fvho_geom.h:154
const MathVector< dim > * local_grad_vector(size_t ip) const
vector of local gradients in ip point
Definition fvho_geom.h:214
number detJ(size_t ip) const
Determinant of Jacobian in integration point.
Definition fvho_geom.h:194
size_t num_corners() const
number of corners, that bound the scvf
Definition fvho_geom.h:227
MathVector< worldDim > vGlobalIP[nip]
Definition fvho_geom.h:258
size_t To
Definition fvho_geom.h:243
MidID vMidID[numCo]
Definition fvho_geom.h:254
const MathMatrix< worldDim, dim > & JTInv(size_t ip) const
Transposed Inverse of Jacobian in integration point.
Definition fvho_geom.h:190
const number * vWeight
Definition fvho_geom.h:259
size_t to() const
index of SubControlVolume on one side of the scvf
Definition fvho_geom.h:169
size_t num_ip() const
number of integration points on scvf
Definition fvho_geom.h:172
const MathVector< dim > & local_corner(size_t co) const
return local corner number i
Definition fvho_geom.h:230
const MathVector< dim > & local_grad(size_t ip, size_t sh) const
value of local gradient of shape function i in integration point
Definition fvho_geom.h:209
number vDetJ[nip]
Definition fvho_geom.h:266
size_t from() const
index of SubControlVolume on one side of the scvf
Definition fvho_geom.h:166
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point of scvf
Definition fvho_geom.h:183
number weight(size_t ip) const
integration weight
Definition fvho_geom.h:175
static const size_t numCo
Number of corners of scvf.
Definition fvho_geom.h:160
size_t From
Definition fvho_geom.h:243
MathVector< dim > vLocPos[numCo]
Definition fvho_geom.h:252
const number * shape_vector(size_t ip) const
vector of shape functions in ip point
Definition fvho_geom.h:205
MathMatrix< worldDim, dim > vJtInv[nip]
Definition fvho_geom.h:265
const MathVector< worldDim > & global_corner(size_t co) const
return global corner number i
Definition fvho_geom.h:234
MathVector< worldDim > vGloPos[numCo]
Definition fvho_geom.h:253
MathVector< worldDim > vvGlobalGrad[nip][nsh]
Definition fvho_geom.h:264
const MathVector< worldDim > & global_grad(size_t ip, size_t sh) const
value of global gradient of shape function i in integration point
Definition fvho_geom.h:218
const MathVector< worldDim > * global_grad_vector(size_t ip) const
vector of global gradients in ip point
Definition fvho_geom.h:223
number vvShape[nip][nsh]
Definition fvho_geom.h:262
number shape(size_t ip, size_t sh) const
value of shape function i in integration point
Definition fvho_geom.h:201
number vDetJMap[nip]
Definition fvho_geom.h:267
MathVector< worldDim > Normal
Definition fvho_geom.h:246
SCVF()
Definition fvho_geom.h:163
static const size_t nip
Number of integration points.
Definition fvho_geom.h:157
const MathVector< worldDim > & normal() const
normal on scvf (points direction "from"->"to"), normalized
Definition fvho_geom.h:187
MathVector< dim > vLocalIP[nip]
Definition fvho_geom.h:257
MathVector< dim > vvLocalGrad[nip][nsh]
Definition fvho_geom.h:263
const MathVector< dim > & local_ip(size_t ip) const
local integration point of scvf
Definition fvho_geom.h:179
size_t num_sh() const
number of shape functions
Definition fvho_geom.h:198
sub control volume structure
Definition fvho_geom.h:272
const MathVector< worldDim > & global_corner(size_t co) const
return glbal corner number i
Definition fvho_geom.h:291
static const size_t numCo
Number of corners of scvf.
Definition fvho_geom.h:278
number vDetJMap[nip]
Definition fvho_geom.h:372
MathVector< worldDim > vGloPos[numCo]
Definition fvho_geom.h:363
const MathVector< dim > & local_ip(size_t ip) const
local integration point of scv
Definition fvho_geom.h:305
MathVector< dim > vLocalIP[nip]
Definition fvho_geom.h:357
MathVector< dim > vvLocalGrad[nip][nsh]
Definition fvho_geom.h:368
const MathVector< worldDim > & global_grad(size_t ip, size_t sh) const
value of global gradient of shape function i in integration point
Definition fvho_geom.h:341
static const size_t nip
Number of integration points.
Definition fvho_geom.h:275
const number * vWeight
Definition fvho_geom.h:359
number detJ(size_t ip) const
Determinant of Jacobian in integration point.
Definition fvho_geom.h:317
size_t node_id() const
node id that this scv is associated to
Definition fvho_geom.h:295
MathMatrix< worldDim, dim > vJtInv[nip]
Definition fvho_geom.h:370
const MathVector< dim > * local_grad_vector(size_t ip) const
vector of local gradients in ip point
Definition fvho_geom.h:337
size_t num_corners() const
number of corners, that bound the scvf
Definition fvho_geom.h:284
MathVector< worldDim > vvGlobalGrad[nip][nsh]
Definition fvho_geom.h:369
const MathVector< worldDim > * global_grad_vector(size_t ip) const
vector of global gradients in ip point
Definition fvho_geom.h:346
MathVector< dim > vLocPos[numCo]
Definition fvho_geom.h:362
const MathMatrix< worldDim, dim > & JTInv(size_t ip) const
Transposed Inverse of Jacobian in integration point.
Definition fvho_geom.h:313
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point
Definition fvho_geom.h:309
size_t num_sh() const
number of shape functions
Definition fvho_geom.h:321
const MathVector< dim > & local_grad(size_t ip, size_t sh) const
value of local gradient of shape function i in integration point
Definition fvho_geom.h:332
number shape(size_t ip, size_t sh) const
value of shape function i in integration point
Definition fvho_geom.h:324
const number * shape_vector(size_t ip) const
vector of shape functions in ip point
Definition fvho_geom.h:328
number vvShape[nip][nsh]
Definition fvho_geom.h:367
number vDetJ[nip]
Definition fvho_geom.h:371
MidID vMidID[numCo]
Definition fvho_geom.h:364
SCV()
Definition fvho_geom.h:281
MathVector< worldDim > vGlobalIP[nip]
Definition fvho_geom.h:358
number weight(size_t ip) const
weigth of integration point
Definition fvho_geom.h:301
const MathVector< dim > & local_corner(size_t co) const
return local corner number i
Definition fvho_geom.h:287
size_t num_ip() const
number of integration points
Definition fvho_geom.h:298
size_t nodeId
Definition fvho_geom.h:354
base class for all FVGeometries
Definition fv_geom_base.h:76
Geometry and shape functions for any order Vertex-Centered Finite Volume.
Definition fvho_geom.h:72
void update_local_data()
update local data
Definition fvho_geom.cpp:997
TElem * m_pElem
pointer to current element
Definition fvho_geom.h:641
const scvf_quad_rule_type & m_rSCVFQuadRule
Quad Rule scvf.
Definition fvho_geom.h:662
size_t num_scv() const
number of SubControlVolumes
Definition fvho_geom.h:520
SCV m_vSCV[numSCV]
SubControlVolumes.
Definition fvho_geom.h:650
FVGeometry()
construct object and initialize local values and sizes
Definition fvho_geom.cpp:957
static const bool staticLocalData
flag indicating if local data may change
Definition fvho_geom.h:149
MathVector< worldDim > m_vGlobSCV_IP[numSCVIP]
Definition fvho_geom.h:555
void update_boundary_faces(GridObject *elem, const MathVector< worldDim > *vCornerCoords, const ISubsetHandler *ish=NULL)
update boundary data for given element
Definition fvho_geom.cpp:1251
static const size_t numSCVFPerSubElem
number of SCVF per SubElement
Definition fvho_geom.h:105
static const int worldDim
dimension of world
Definition fvho_geom.h:88
size_t num_boundary_subsets()
number of registered boundary subsets
Definition fvho_geom.h:594
MathVector< dim > m_vLocSCV_IP[numSCVIP]
Definition fvho_geom.h:556
SCVF m_vSCVF[numSCVF]
SubControlVolumeFaces.
Definition fvho_geom.h:647
MathVector< worldDim > m_vGlobSCVF_IP[numSCVFIP]
Definition fvho_geom.h:551
void update(GridObject *elem, const MathVector< worldDim > *vCornerCoords, const ISubsetHandler *ish=NULL)
update data for given element
Definition fvho_geom.cpp:1134
static const int p
small abbreviation for order
Definition fvho_geom.h:75
std::vector< BF > m_vEmptyVectorBF
Definition fvho_geom.h:637
const MathVector< dim > * scvf_local_ips() const
returns all ips of scvf as they appear in scv loop
Definition fvho_geom.h:534
std::map< int, std::vector< BF > > m_mapVectorBF
Definition fvho_geom.h:636
size_t num_scvf() const
number of SubControlVolumeFaces
Definition fvho_geom.h:513
traits::scv_type scv_type
type of SubControlVolume
Definition fvho_geom.h:121
void add_boundary_subset(int subsetIndex)
add subset that is interpreted as boundary subset.
Definition fvho_geom.h:585
static const size_t nsh
number of shape functions
Definition fvho_geom.h:143
ReferenceMapping< ref_elem_type, worldDim > m_rMapping
Reference Mapping.
Definition fvho_geom.h:653
static const size_t numSCVFIP
number of scvf ip
Definition fvho_geom.h:117
void clear_boundary_subsets()
reset all boundary subsets
Definition fvho_geom.h:591
const SCVF & scvf(size_t i) const
const access to SubControlVolumeFace number i
Definition fvho_geom.h:516
const local_shape_fct_set_type & m_rTrialSpace
Shape function set.
Definition fvho_geom.h:659
GaussQuadrature< scvf_type, quadOrderSCVF > scvf_quad_rule_type
type of quadrature rule
Definition fvho_geom.h:114
static const int order
order
Definition fvho_geom.h:92
static const size_t numSCV
number of SubControlVolumes
Definition fvho_geom.h:127
static const int quadOrderSCV
quadrature order
Definition fvho_geom.h:130
GaussQuadrature< scv_type, quadOrderSCV > scv_quad_rule_type
type of quadrature rule
Definition fvho_geom.h:133
const MathVector< dim > * scv_local_ips() const
returns all ips of scv as they appear in scv loop
Definition fvho_geom.h:543
static const size_t numSCVPerSubElem
number of SCV per SubElement
Definition fvho_geom.h:124
void remove_boundary_subset(int subsetIndex)
removes subset that is interpreted as boundary subset.
Definition fvho_geom.h:588
SubElement m_vSubElem[numSubElem]
subelements
Definition fvho_geom.h:581
size_t num_bf() const
number of all boundary faces
Definition fvho_geom.h:597
MathVector< dim > m_vLocSCVF_IP[numSCVFIP]
Definition fvho_geom.h:552
static const int dim
dimension of reference element
Definition fvho_geom.h:85
fv1_traits< ref_elem_type, worldDim > traits
traits used
Definition fvho_geom.h:99
LagrangeLSFS< ref_elem_type, p > local_shape_fct_set_type
type of Shape function used
Definition fvho_geom.h:140
static const size_t numSCVIP
number of scv ip
Definition fvho_geom.h:136
size_t num_sh() const
number of shape functions
Definition fvho_geom.h:527
const scv_quad_rule_type & m_rSCVQuadRule
Quad Rule scv.
Definition fvho_geom.h:665
size_t num_scvf_ips() const
returns number of all scvf ips
Definition fvho_geom.h:531
static const size_t numSCVF
number of SubControlVolumeFaces
Definition fvho_geom.h:108
void reset_curr_elem()
Definition fvho_geom.h:633
static const size_t numSubElem
number of subelements
Definition fvho_geom.h:95
const ref_elem_type & m_rRefElem
Reference Element.
Definition fvho_geom.h:656
void update_local(ReferenceObjectID roid, const LFEID &lfeID=LFEID(LFEID::LAGRANGE, worldDim, 1), size_t orderQuad=TQuadOrder)
update Geometry for roid
Definition fvho_geom.cpp:968
MathVector< dim > m_vLocCorner[ref_elem_type::numCorners]
corners of reference element
Definition fvho_geom.h:644
reference_element_traits< TElem >::reference_element_type ref_elem_type
type of reference element
Definition fvho_geom.h:82
size_t num_bf(int si) const
number of boundary faces on subset 'subsetIndex'
Definition fvho_geom.h:607
traits::scvf_type scvf_type
type of SubControlVolumeFace
Definition fvho_geom.h:102
TElem elem_type
type of element
Definition fvho_geom.h:79
const MathVector< worldDim > * scvf_global_ips() const
returns all ips of scvf as they appear in scv loop
Definition fvho_geom.h:537
static const int quadOrderSCVF
quadrature order
Definition fvho_geom.h:111
const MathVector< worldDim > * scv_global_ips() const
returns all ips of scv as they appear in scv loop
Definition fvho_geom.h:546
const std::vector< BF > & bf(int si) const
returns reference to vector of boundary faces for subsetIndex
Definition fvho_geom.h:625
size_t num_scv_ips() const
returns number of all scv ips
Definition fvho_geom.h:540
static const int maxMid
Definition fvho_geom.h:560
const SCV & scv(size_t i) const
const access to SubControlVolume number i
Definition fvho_geom.h:523
const BF & bf(int si, size_t i) const
returns the boundary face i for subsetIndex
Definition fvho_geom.h:616
static const bool usesHangingNodes
Hanging node flag: this Geometry does not support hanging nodes.
Definition fvho_geom.h:146
fixed order gauss quadrature
Definition gauss_quad.h:44
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
@ LAGRANGE
Definition local_finite_element_id.h:104
Lagrange Shape Function Set without virtual functions and fixed order.
Definition lagrange.h:48
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
Definition fvho_geom.h:1120
MathVector< worldDim > vvGloMid[dim+1][maxMid]
Definition fvho_geom.h:1127
size_t vDoFID[traits::maxNumSCV]
Definition fvho_geom.h:1122
std::vector< int > vElemBndSide
Definition fvho_geom.h:1133
bool isBndElem
Definition fvho_geom.h:1130
MathVector< dim > vvLocMid[dim+1][maxMid]
Definition fvho_geom.h:1126
Definition fvho_geom.h:564
MathVector< worldDim > vvGloMid[dim+1][maxMid]
Definition fvho_geom.h:571
bool isBndElem
Definition fvho_geom.h:574
std::vector< int > vElemBndSide
Definition fvho_geom.h:577
size_t vDoFID[ref_elem_type::numCorners]
Definition fvho_geom.h:566
MathVector< dim > vvLocMid[dim+1][maxMid]
Definition fvho_geom.h:570
helper class to store dimension and id of a midpoint of a sub-element
Definition fv_geom_base.h:41
Definition metaprogramming_util.h:165
Traits for Finite Volumes for a generic element of the fixed dimensionalities.
Definition fv_util.h:1325
Traits for Finite Volumes (dummy implementation, s. the instantiations below)
Definition fv_util.h:178
traits for reference elements
Definition reference_element_traits.h:48