ug4
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 
55 namespace ug{
56 
58 // FV Geometry for Reference Element Type (all orders)
60 
62 
69 template < int TOrder, typename TElem, int TWorldDim,
70  int TQuadOrder = TOrder + 1>
71 class FVGeometry : public FVGeometryBase
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 
543  const MathVector<dim>* scv_local_ips() const {return m_vLocSCV_IP;}
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
563  struct 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
574  bool isBndElem;
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 
677 template <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 
1064  void update_boundary_faces(GridObject* pElem,
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 
1093  const MathVector<worldDim>* scvf_global_ips() const {return &(m_vGlobSCVF_IP[0]);}
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 
1102  const MathVector<worldDim>* scv_global_ips() const {return &(m_vGlobSCV_IP[0]);}
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
1119  struct 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 
1216  size_t m_numSCVF;
1217 
1220 
1222  std::vector<SCVF> m_vSCVF;
1223 
1226 
1228  size_t m_numSCVFIP;
1229 
1230 
1232  size_t m_numSCV;
1233 
1236 
1238  std::vector<SCV> m_vSCV;
1239 
1242 
1244  size_t m_numSCVIP;
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_ip(size_t ip) const
local integration point of scvf
Definition: fvho_geom.h:952
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
size_t node_id() const
index of SubControlVolume of the bf
Definition: fvho_geom.h:936
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
const MathVector< dim > & local_corner(size_t co) const
return local corner number i
Definition: fvho_geom.h:1000
size_t nip
Definition: fvho_geom.h:1023
const MathVector< worldDim > & global_corner(size_t co) const
return glbal corner number i
Definition: fvho_geom.h:1004
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 > & normal() const
outer normal on bf. Norm is equal to area
Definition: fvho_geom.h:939
number Vol
Definition: fvho_geom.h:1028
static const size_t numCo
Number of corners of bf.
Definition: fvho_geom.h:930
const MathVector< worldDim > * global_grad_vector(size_t ip) const
vector of global gradients in ip point
Definition: fvho_geom.h:993
MidID vMidID[numCo]
Definition: fvho_geom.h:1020
const MathMatrix< worldDim, dim > & JTInv(size_t ip) const
Transposed Inverse of Jacobian in integration point.
Definition: fvho_geom.h:960
std::vector< std::vector< MathVector< worldDim > > > vvGlobalGrad
Definition: fvho_geom.h:1034
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
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point of scvf
Definition: fvho_geom.h:956
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
const number * shape_vector(size_t ip) const
vector of shape functions in ip point
Definition: fvho_geom.h:975
MathVector< worldDim > vGloPos[numCo]
Definition: fvho_geom.h:1019
const MathVector< dim > * local_grad_vector(size_t ip) const
vector of local gradients in ip point
Definition: fvho_geom.h:984
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
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
std::vector< number > vDetJ
Definition: fvho_geom.h:817
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 > & normal() const
normal on scvf (points direction "from"->"to"), normalized
Definition: fvho_geom.h:736
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
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 number * shape_vector(size_t ip) const
vector of shape functions in ip point
Definition: fvho_geom.h:754
number shape(size_t ip, size_t sh) const
value of shape function i in integration point
Definition: fvho_geom.h:750
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point of scvf
Definition: fvho_geom.h:732
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
const MathVector< worldDim > * global_grad_vector(size_t ip) const
vector of gloabl gradients in ip point
Definition: fvho_geom.h:772
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< dim > & local_ip(size_t ip) const
local integration point of scvf
Definition: fvho_geom.h:728
const MathMatrix< worldDim, dim > & JTInv(size_t ip) const
Transposed Inverse of Jacobian in integration point.
Definition: fvho_geom.h:739
const MathVector< dim > & local_corner(size_t co) const
return local corner number i
Definition: fvho_geom.h:779
const MathVector< dim > * local_grad_vector(size_t ip) const
vector of local gradients in ip point
Definition: fvho_geom.h:763
std::vector< MathMatrix< worldDim, dim > > vJtInv
Definition: fvho_geom.h:816
SCVF()
Definition: fvho_geom.h:712
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
const MathVector< worldDim > & global_corner(size_t co) const
return glbal corner number i
Definition: fvho_geom.h:783
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
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
MathVector< dim > vLocPos[numCo]
Definition: fvho_geom.h:905
SCV()
Definition: fvho_geom.h:829
const MathVector< dim > & local_corner(size_t co) const
return local corner number i
Definition: fvho_geom.h:835
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 nip
Definition: fvho_geom.h:910
std::vector< std::vector< number > > vvShape
Definition: fvho_geom.h:917
number shape(size_t ip, size_t sh) const
value of shape function i in integration point
Definition: fvho_geom.h:872
size_t num_sh() const
number of shape functions
Definition: fvho_geom.h:869
const number * shape_vector(size_t ip) const
vector of shape functions in ip point
Definition: fvho_geom.h:876
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
const MathVector< worldDim > * global_grad_vector(size_t ip) const
vector of global gradients in ip point
Definition: fvho_geom.h:894
std::vector< MathMatrix< worldDim, dim > > vJtInv
Definition: fvho_geom.h:920
const MathVector< worldDim > & global_corner(size_t co) const
return glbal corner number i
Definition: fvho_geom.h:839
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
const MathVector< dim > & local_ip(size_t ip) const
local integration point of scv
Definition: fvho_geom.h:853
static const size_t numCo
Number of corners of scvf.
Definition: fvho_geom.h:826
std::vector< MathVector< worldDim > > vGlobalIP
Definition: fvho_geom.h:912
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point
Definition: fvho_geom.h:857
std::vector< number > vDetJ
Definition: fvho_geom.h:921
const MathVector< dim > * local_grad_vector(size_t ip) const
vector of local gradients in ip point
Definition: fvho_geom.h:885
MathVector< worldDim > vGloPos[numCo]
Definition: fvho_geom.h:906
std::vector< MathVector< dim > > vLocalIP
Definition: fvho_geom.h:911
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
const MathMatrix< worldDim, dim > & JTInv(size_t ip) const
Transposed Inverse of Jacobian in integration point.
Definition: fvho_geom.h:861
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
void reset_curr_elem()
Definition: fvho_geom.h:1190
std::vector< MathVector< dim > > m_vLocSCV_IP
Definition: fvho_geom.h:1112
traits::scvf_type scvf_type
type of SubControlVolumeFace
Definition: fvho_geom.h:692
const std::vector< BF > & bf(int si) const
returns reference to vector of boundary faces for subsetIndex
Definition: fvho_geom.h:1182
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
const MathVector< dim > * scvf_local_ips() const
returns all ips of scvf as they appear in scv loop
Definition: fvho_geom.h:1090
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
const MathVector< worldDim > * scvf_global_ips() const
returns all ips of scvf as they appear in scv loop
Definition: fvho_geom.h:1093
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
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
const SCV & scv(size_t i) const
const access to SubControlVolume number i
Definition: fvho_geom.h:1079
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
int m_quadOrderSCVF
quadrature order
Definition: fvho_geom.h:1225
std::vector< SubElement > m_vSubElem
subelements (size: numSubElem)
Definition: fvho_geom.h:1137
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
size_t m_nsh
number of shape functions
Definition: fvho_geom.h:1213
const MathVector< dim > * scv_local_ips() const
returns all ips of scv as they appear in scv loop
Definition: fvho_geom.h:1099
size_t num_bf(int si) const
number of boundary faces on subset 'subsetIndex'
Definition: fvho_geom.h:1163
const BF & bf(int si, size_t i) const
returns the boundary face i for subsetIndex
Definition: fvho_geom.h:1172
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
const MathVector< worldDim > * scv_global_ips() const
returns all ips of scv as they appear in scv loop
Definition: fvho_geom.h:1102
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
const SCVF & scvf(size_t i) const
const access to SubControlVolumeFace number i
Definition: fvho_geom.h:1072
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
boundary face
Definition: fvho_geom.h:377
const MathVector< worldDim > & normal() const
outer normal on bf. Norm is equal to area
Definition: fvho_geom.h:392
MathMatrix< worldDim, dim > vJtInv[nip]
Definition: fvho_geom.h:486
MathVector< worldDim > Normal
Definition: fvho_geom.h:479
MathVector< dim > vvLocalGrad[nip][nsh]
Definition: fvho_geom.h:484
number vDetJ[nip]
Definition: fvho_geom.h:487
MathVector< worldDim > vGlobalIP[nip]
Definition: fvho_geom.h:477
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
const MathVector< worldDim > * global_grad_vector(size_t ip) const
vector of global gradients in ip point
Definition: fvho_geom.h:446
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_ip(size_t ip) const
global integration point of scvf
Definition: fvho_geom.h:409
const MathVector< dim > & local_ip(size_t ip) const
local integration point of scvf
Definition: fvho_geom.h:405
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
const MathVector< dim > * local_grad_vector(size_t ip) const
vector of local gradients in ip point
Definition: fvho_geom.h:437
size_t node_id() const
index of SubControlVolume of the bf
Definition: fvho_geom.h:389
const MathVector< worldDim > & global_corner(size_t co) const
return glbal corner number i
Definition: fvho_geom.h:457
const number * vWeight
Definition: fvho_geom.h:478
MathVector< worldDim > vvGlobalGrad[nip][nsh]
Definition: fvho_geom.h:485
MidID vMidID[numCo]
Definition: fvho_geom.h:473
const MathMatrix< worldDim, dim > & JTInv(size_t ip) const
Transposed Inverse of Jacobian in integration point.
Definition: fvho_geom.h:413
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 number * shape_vector(size_t ip) const
vector of shape functions in ip point
Definition: fvho_geom.h:428
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
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
number Vol
Definition: fvho_geom.h:480
Sub-Control Volume Face structure.
Definition: fvho_geom.h:154
const MathVector< worldDim > & global_corner(size_t co) const
return global corner number i
Definition: fvho_geom.h:234
number detJ(size_t ip) const
Determinant of Jacobian in integration point.
Definition: fvho_geom.h:194
const MathVector< worldDim > & global_ip(size_t ip) const
global integration point of scvf
Definition: fvho_geom.h:183
const number * shape_vector(size_t ip) const
vector of shape functions in ip point
Definition: fvho_geom.h:205
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
const MathVector< dim > * local_grad_vector(size_t ip) const
vector of local gradients in ip point
Definition: fvho_geom.h:214
const MathVector< dim > & local_ip(size_t ip) const
local integration point of scvf
Definition: fvho_geom.h:179
MidID vMidID[numCo]
Definition: fvho_geom.h:254
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 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
const MathVector< worldDim > * global_grad_vector(size_t ip) const
vector of global gradients in ip point
Definition: fvho_geom.h:223
size_t num_ip() const
number of integration points on scvf
Definition: fvho_geom.h:172
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 > & normal() const
normal on scvf (points direction "from"->"to"), normalized
Definition: fvho_geom.h:187
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
MathMatrix< worldDim, dim > vJtInv[nip]
Definition: fvho_geom.h:265
MathVector< worldDim > vGloPos[numCo]
Definition: fvho_geom.h:253
MathVector< worldDim > vvGlobalGrad[nip][nsh]
Definition: fvho_geom.h:264
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
MathVector< dim > vLocalIP[nip]
Definition: fvho_geom.h:257
MathVector< dim > vvLocalGrad[nip][nsh]
Definition: fvho_geom.h:263
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
const MathVector< dim > & local_corner(size_t co) const
return local corner number i
Definition: fvho_geom.h:230
size_t num_sh() const
number of shape functions
Definition: fvho_geom.h:198
const MathMatrix< worldDim, dim > & JTInv(size_t ip) const
Transposed Inverse of Jacobian in integration point.
Definition: fvho_geom.h:190
sub control volume structure
Definition: fvho_geom.h:272
const MathMatrix< worldDim, dim > & JTInv(size_t ip) const
Transposed Inverse of Jacobian in integration point.
Definition: fvho_geom.h:313
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< worldDim > & global_ip(size_t ip) const
global integration point
Definition: fvho_geom.h:309
MathVector< dim > vLocalIP[nip]
Definition: fvho_geom.h:357
MathVector< dim > vvLocalGrad[nip][nsh]
Definition: fvho_geom.h:368
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
const MathVector< dim > * local_grad_vector(size_t ip) const
vector of local gradients in ip point
Definition: fvho_geom.h:337
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
const number * shape_vector(size_t ip) const
vector of shape functions in ip point
Definition: fvho_geom.h:328
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
size_t num_corners() const
number of corners, that bound the scvf
Definition: fvho_geom.h:284
const MathVector< worldDim > & global_corner(size_t co) const
return glbal corner number i
Definition: fvho_geom.h:291
MathVector< worldDim > vvGlobalGrad[nip][nsh]
Definition: fvho_geom.h:369
const MathVector< dim > & local_corner(size_t co) const
return local corner number i
Definition: fvho_geom.h:287
MathVector< dim > vLocPos[numCo]
Definition: fvho_geom.h:362
size_t num_sh() const
number of shape functions
Definition: fvho_geom.h:321
number shape(size_t ip, size_t sh) const
value of shape function i in integration point
Definition: fvho_geom.h:324
number vvShape[nip][nsh]
Definition: fvho_geom.h:367
number vDetJ[nip]
Definition: fvho_geom.h:371
const MathVector< dim > & local_ip(size_t ip) const
local integration point of scv
Definition: fvho_geom.h:305
MidID vMidID[numCo]
Definition: fvho_geom.h:364
SCV()
Definition: fvho_geom.h:281
MathVector< worldDim > vGlobalIP[nip]
Definition: fvho_geom.h:358
const MathVector< worldDim > * global_grad_vector(size_t ip) const
vector of global gradients in ip point
Definition: fvho_geom.h:346
number weight(size_t ip) const
weigth of integration point
Definition: fvho_geom.h:301
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
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 MathVector< dim > * scv_local_ips() const
returns all ips of scv as they appear in scv loop
Definition: fvho_geom.h:543
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
const SCVF & scvf(size_t i) const
const access to SubControlVolumeFace number i
Definition: fvho_geom.h:516
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
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 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
const MathVector< dim > * scvf_local_ips() const
returns all ips of scvf as they appear in scv loop
Definition: fvho_geom.h:534
static const int order
order
Definition: fvho_geom.h:92
static const size_t numSCV
number of SubControlVolumes
Definition: fvho_geom.h:127
const std::vector< BF > & bf(int si) const
returns reference to vector of boundary faces for subsetIndex
Definition: fvho_geom.h:625
static const int quadOrderSCV
quadrature order
Definition: fvho_geom.h:130
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
GaussQuadrature< scv_type, quadOrderSCV > scv_quad_rule_type
type of quadrature rule
Definition: fvho_geom.h:133
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
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 MathVector< worldDim > * scv_global_ips() const
returns all ips of scv as they appear in scv loop
Definition: fvho_geom.h:546
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
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
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
static const size_t NumCornersOfSCV
Definition: fv_util.h:188
void scv_type
Definition: fv_util.h:204
static const size_t NumCornersOfSCVF
Definition: fv_util.h:185
void scvf_type
Definition: fv_util.h:205
traits for reference elements
Definition: reference_element_traits.h:48