LoAdSG
constantIntegrators.h
1/**********************************************************************************
2* Author: Christoph Pflaum, Riccarda Scherner-Griesshammer, Rainer Hartmann
3 * Department Informatik Lehrstuhl 10 - Systemsimulation
4 * Friedrich-Alexander Universität Erlangen-Nürnberg
5 *
6*********************************************/
7
8
9
10
14template <size_t DIM>
16 public:
18 double stencil_integration(double p_left[DIM], double p_right[DIM],
19 BasisFunctionType u[DIM], BasisFunctionType v[DIM]) const;
20};
21
22
23template <size_t DIM>
24double IntegratorPoisson<DIM>::stencil_integration(double p_left[DIM], double p_right[DIM],
25 BasisFunctionType u[DIM], BasisFunctionType v[DIM]) const {
26 static double h[DIM];
27 for(int i=0;i<DIM;++i) h[i] = p_right[i] - p_left[i];
28
29 double sum=0.0;
30 for(int i=0;i<DIM;++i) { // int du/dxi * dv/dxi d(x1...xd)
31 double prod=1.0;
32 for(int j=0;j<DIM;++j) { // integral factor in direction j
33 if(i==j) { // factor: int du/dxi * dv/dxi dxi
34 if(u[j]==v[j]) prod = prod / h[j];
35 else prod = - prod / h[j];
36 }
37 else { // factor: int du/dxi * dv/dxi dxj == int u*v dxj
38 if(u[j]==v[j]) prod = prod * (1.0/3.0) * h[j];
39 else prod = prod * (1.0/6.0) * h[j];
40 }
41 }
42 sum = sum + prod;
43 }
44 return sum; // sum = sum_i int du/dxi * dv/dxi d(x1...xd)
45
46}
47
48
49
53template <size_t DIM>
55 public:
56 IntegratorHelmConstant(double valueC_) : valueC(valueC_) {}
57 double stencil_integration(double p_left[DIM], double p_right[DIM],
58 BasisFunctionType u[DIM], BasisFunctionType v[DIM]) const;
59 private:
60 double valueC;
61};
62
63
64template <size_t DIM>
65double IntegratorHelmConstant<DIM>::stencil_integration(double p_left[DIM], double p_right[DIM],
66 BasisFunctionType u[DIM], BasisFunctionType v[DIM]) const {
67 static double h[DIM];
68 for(int i=0;i<DIM;++i) h[i] = p_right[i] - p_left[i];
69
70 double prod=1.0;
71 for(int j=0;j<DIM;++j) { // integral factor in direction j
72 if(u[j]==v[j]) prod = prod * (1.0/3.0) * h[j];
73 else prod = prod * (1.0/6.0) * h[j];
74 }
75 return prod * valueC;
76}
77
78
79
Definition constantIntegrators.h:54
double stencil_integration(double p_left[DIM], double p_right[DIM], BasisFunctionType u[DIM], BasisFunctionType v[DIM]) const
Definition constantIntegrators.h:65
Definition constantIntegrators.h:15
double stencil_integration(double p_left[DIM], double p_right[DIM], BasisFunctionType u[DIM], BasisFunctionType v[DIM]) const
Definition constantIntegrators.h:24
Definition interfaceMatrices.h:21