ParMooN
 All Classes Functions Variables Friends Pages
BF_N_T_BDM1_2D.h
1 // ***********************************************************************
2 // P1 BDM vector element, nonconforming , 2D
3 // History: 12.09.2013 implementation (Markus Wolff)
4 // ***********************************************************************
5 
6 // base function values
7 // vector function, orthonormal to edges,
8 // functions 1 and 2 are orthogonal to edge 1
9 // functions 3 and 4 are orthogonal to edge 2
10 // functions 5 and 6 are orthogonal to edge 3
11 
12 // coefficient matrix
13 // NOTE: If you want to use other evaluation points for degress of freedom on
14 // the edges of a cell, you also have to change the evaluation points in NF_N_T_BDM1_2D.h
15 // using equidistant points on edges
16 /*
17 static double N_T_BDM1_2D_CM[36] = {
18 -0,0,0,0,1,-2,
19 -2,1,0,0,0,0,
20 -1,2,2,-1,-1,2,
21 3,-3,0,0,0,0,
22 0,0,0,0,-3,3,
23 2,-1,-1,2,2,-1
24 };*/
25 
26 // using Gauss-Points on edges
27 /*
28 static double N_T_BDM1_2D_CM[36] = {
29 -0,0,0,0,0.3660254,-1.3660254,
30 -1.3660254,0.3660254,0,0,0,0,
31 -0.3660254,1.3660254,1.3660254,-0.3660254,-0.3660254,1.3660254,
32 1.7320508,-1.7320508,0,0,0,0,
33 0,0,0,0,-1.7320508,1.7320508,
34 1.3660254,-0.3660254,-0.3660254,1.3660254,1.3660254,-0.3660254
35 };*/
36 
37 // using Tschebyscheff-points on edges
38 static double N_T_BDM1_2D_CM[36] = {
39 -0,0,0,0,0.20710678,-1.2071068,
40 -1.2071068,0.20710678,-0,0,0,-0,
41 -0.20710678,1.2071068,1.2071068,-0.20710678,-0.20710678,1.2071068,
42 1.4142136,-1.4142136,0,-0,-0,0,
43 0,0,0,0,-1.4142136,1.4142136,
44 1.2071068,-0.20710678,-0.20710678,1.2071068,1.2071068,-0.20710678
45 };
46 
47 static void N_T_BDM1_2D_Funct(double xi, double eta, double *values)
48 {
49  int nBF = 6; // number of basis functions
50  // monomials x-component and y-component
51  double mon_x[]={1,0,xi,0 ,eta,0 };
52  double mon_y[]={0,1,0 ,xi,0 ,eta};
53 
54  memset(values, 0.0, 2*nBF*SizeOfDouble); // 2 is the space dimension
55  for(int i=0; i<nBF; i++)
56  {
57  for(int j=0; j<nBF; j++)
58  {
59  values[i ] += N_T_BDM1_2D_CM[i+j*nBF]*mon_x[j];
60  values[i+nBF] += N_T_BDM1_2D_CM[i+j*nBF]*mon_y[j];
61  }
62  }
63 }
64 
65 // values of the derivatives in xi direction
66 static void N_T_BDM1_2D_DeriveXi(double xi, double eta, double *values)
67 {
68  int nBF = 6; // number of basis functions
69  // monomials x-component and y-component
70  double mon_x[]={0,0,1,0,0,0};
71  double mon_y[]={0,0,0,1,0,0};
72  memset(values, 0.0, 2*nBF*SizeOfDouble); // 2 is the space dimension
73  for(int i=0; i<nBF; i++)
74  {
75  for(int j=0; j<nBF; j++)
76  {
77  values[i ] += N_T_BDM1_2D_CM[i+j*nBF]*mon_x[j];
78  values[i+nBF] += N_T_BDM1_2D_CM[i+j*nBF]*mon_y[j];
79  }
80  }
81 }
82 
83 // values of the derivatives in eta direction
84 static void N_T_BDM1_2D_DeriveEta(double xi, double eta, double *values)
85 {
86  int nBF = 6; // number of basis functions
87  // monomials x-component and y-component
88  double mon_x[]={0,0,0,0,1,0};
89  double mon_y[]={0,0,0,0,0,1};
90  memset(values, 0.0, 2*nBF*SizeOfDouble); // 2 is the space dimension
91  for(int i=0; i<nBF; i++)
92  {
93  for(int j=0; j<nBF; j++)
94  {
95  values[i ] += N_T_BDM1_2D_CM[i+j*nBF]*mon_x[j];
96  values[i+nBF] += N_T_BDM1_2D_CM[i+j*nBF]*mon_y[j];
97  }
98  }
99 }
100 
101 // values of derivatives in xi-xi direction
102 static void N_T_BDM1_2D_DeriveXiXi(double xi, double eta, double *values)
103 {
104 /*
105  int nBF = 6; // number of basis functions
106  // monomials x-component and y-component
107  double mon_x[]={0,0,0,0,0,0};
108  double mon_y[]={0,0,0,0,0,0};
109  memset(values, 0.0, 2*nBF*SizeOfDouble); // 2 is the space dimension
110  for(int i=0; i<nBF; i++)
111  {
112  for(int j=0; j<nBF; j++)
113  {
114  values[i ] += N_T_BDM1_2D_CM[i+j*nBF]*mon_x[j];
115  values[i+nBF] += N_T_BDM1_2D_CM[i+j*nBF]*mon_y[j];
116  }
117  }
118  */
119 // first component
120  values[0]= 0;
121  values[1]= 0;
122  values[2]= 0;
123  values[3]= 0;
124  values[4]= 0;
125  values[5]= 0;
126 
127  // second component
128  values[6]= 0;
129  values[7]= 0;
130  values[8]= 0;
131  values[9]= 0;
132  values[10]= 0;
133  values[11]= 0;
134 }
135 
136 // values of derivatives in eta-eta direction
137 static void N_T_BDM1_2D_DeriveEtaEta(double xi, double eta, double *values)
138 {
139 /*
140  int nBF = 6; // number of basis functions
141  // monomials x-component and y-component
142  double mon_x[]={0,0,0,0,0,0};
143  double mon_y[]={0,0,0,0,0,0};
144  memset(values, 0.0, 2*nBF*SizeOfDouble); // 2 is the space dimension
145  for(int i=0; i<nBF; i++)
146  {
147  for(int j=0; j<nBF; j++)
148  {
149  values[i ] += N_T_BDM1_2D_CM[i+j*nBF]*mon_x[j];
150  values[i+nBF] += N_T_BDM1_2D_CM[i+j*nBF]*mon_y[j];
151  }
152  }
153  */
154 // first component
155  values[0]= 0;
156  values[1]= 0;
157  values[2]= 0;
158  values[3]= 0;
159  values[4]= 0;
160  values[5]= 0;
161 
162 // second component
163  values[6]= 0;
164  values[7]= 0;
165  values[8]= 0;
166  values[9]= 0;
167  values[10]= 0;
168  values[11]= 0;
169 }
170 
171 // values of derivatives in xi-eta direction
172 static void N_T_BDM1_2D_DeriveXiEta(double xi, double eta, double *values)
173 {
174  /*
175  int nBF = 6; // number of basis functions
176  // monomials x-component and y-component
177  double mon_x[]={0,0,0,0,0,0,0,1};
178  double mon_y[]={0,0,0,0,0,0,1,0};
179  memset(values, 0.0, 2*nBF*SizeOfDouble); // 2 is the space dimension
180  for(int i=0; i<nBF; i++)
181  {
182  for(int j=0; j<nBF; j++)
183  {
184  values[i ] += N_T_BDM1_2D_CM[i+j*nBF]*mon_x[j];
185  values[i+nBF] += N_T_BDM1_2D_CM[i+j*nBF]*mon_y[j];
186  }
187  }
188  */
189 // first component
190  values[0]= 0;
191  values[1]= 0;
192  values[2]= 0;
193  values[3]= 0;
194  values[4]= 0;
195  values[5]= 0;
196 
197  // second component
198  values[6]= 0;
199  values[7]= 0;
200  values[8]= 0;
201  values[9]= 0;
202  values[10]= 0;
203  values[11]= 0;
204 }
205 
206 // ***********************************************************************
207 //TODO die zahlen am ende
208 /*
209  int polynomialdegree,
210  int accuracy,
211  int n_bf2change,
212  int **bf2change,
213  int baseVectDim
214  */
215 TBaseFunct2D *BF_N_T_BDM1_2D_Obj = new TBaseFunct2D
216  (6, BF_N_T_BDM1_2D, BFUnitTriangle,
217  N_T_BDM1_2D_Funct, N_T_BDM1_2D_DeriveXi,
218  N_T_BDM1_2D_DeriveEta, N_T_BDM1_2D_DeriveXiXi,
219  N_T_BDM1_2D_DeriveXiEta, N_T_BDM1_2D_DeriveEtaEta, 2, 1,
220  0, NULL, 2);
Definition: BaseFunct2D.h:27