KASKADE 7 development version
special_quadrature.hh
Go to the documentation of this file.
1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2/* */
3/* This file is part of the library KASKADE 7 */
4/* https://www.zib.de/research/projects/kaskade7-finite-element-toolbox */
5/* */
6/* Copyright (C) 2002-2011 Zuse Institute Berlin */
7/* */
8/* KASKADE 7 is distributed under the terms of the ZIB Academic License. */
9/* see $KASKADE/academic.txt */
10/* */
11/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
12
13#ifndef SPECIAL_QUADRATURE_Hh
14#define SPECIAL_QUADRATURE_Hh
15
16#include "dune/grid/common/quadraturerules.hh"
17
18namespace Kaskade
19{
20 template<class GType, int dim>
21 class TrapezoidalRule : public Dune::QuadratureRule<GType, dim>
22 {
23 public:
24 TrapezoidalRule() : Dune::QuadratureRule<GType, dim>()
25 {
27 for(int i=0; i<dim+1; ++i)
28 {
29 for(int k=0; k<dim; ++k)
30 {
31 pos[k]=0.0;
32 if(i==k) pos[k]=1.0;
33 }
34 double wgt=1.0/(dim+1);
35 this->push_back(Dune::QuadraturePoint<GType, dim>(pos,wgt));
36 }
37 }
38 };
39
40
41 template<class GType, int dim>
42 class NewtonCotesRule3 : public Dune::QuadratureRule<GType, dim>
43 {
44 public:
45 NewtonCotesRule3() : Dune::QuadratureRule<GType, dim>()
46 {
47 double wgt(0.0);
48 // if(dim==1) wgt=1.0/3.0;
49 // if(dim==2) wgt=1.0/6.0;
50 if(dim==3) wgt=-1.0/20.0;
51
53 for(int i=0; i<dim+1; ++i)
54 {
55 for(int k=0; k<dim; ++k)
56 {
57 pos[k]=0.0;
58 if(i==k) pos[k]=1.0;
59 }
60 this->push_back(Dune::QuadraturePoint<GType, dim>(pos,wgt));
61 }
62
63 if(dim==3) wgt=1.0/5.0;
64 for(int i=0; i<dim; ++i)
65 {
66 for(int k=0; k<dim; ++k)
67 {
68 pos[k]=0.5;
69 if(i==k) pos[k]=0.0;
70 }
71 Dune::QuadratureRule<GType, dim>::push_back(Dune::QuadraturePoint<GType, dim>(pos,wgt));
72 }
73
74 for(int i=0; i<dim; ++i)
75 {
76 for(int k=0; k<dim; ++k)
77 {
78 pos[k]=0.0;
79 if(i==k) pos[k]=0.5;
80 }
81 Dune::QuadratureRule<GType, dim>::push_back(Dune::QuadraturePoint<GType, dim>(pos,wgt));
82 }
83 }
84 };
85
86 template<class GType, int dim>
87 class RefinedTrapezoidal : public Dune::QuadratureRule<GType, dim>
88 {
89 public:
90 RefinedTrapezoidal() : Dune::QuadratureRule<GType, dim>()
91 {
93 assert(dim==2);
94 for(int ix=0; ix<2; ++ix)
95 {
96 for(int iy=0; iy<2-ix; ++iy)
97 {
98 pos[0]=0.5*ix;
99 pos[1]=0.5*iy;
100 double wgt=1.0/(dim+1)/4.0;
101 if(ix==1 || iy == 1) wgt*=3;
102 Dune::QuadratureRule<GType, dim>::push_back(Dune::QuadraturePoint<GType, dim>(pos,wgt));
103 }
104 }
105 }
106 };
107} // end of namespace Kaskade
108
109#endif