ParMooN
 All Classes Functions Variables Friends Pages
BF_N_T_BDDF2_3D.h
1 // ***********************************************************************
2 // Brezzi-Douglas-Duran-Fortin element of second order on tetrahedra, 3D
3 // ***********************************************************************
4 
5 static double N_T_BDDF2_3D_CM[900] = {
6  0,-0,-0,-0,0,0,-0,-0,0,-0,0,0,-0,0,0,0,0,-0,-6,4,-1,4,-1,-1,0,0,0,0,-0,-0,
7  0,0,0,0,0,0,-6,4,-1,4,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0,0,
8  -6,4,-1,4,-1,-1,0,0,0,-0,-0,0,-0,-0,-0,0,-0,-0,-0,0,-0,-0,0,-0,0,0,-0,-0,0,0,
9  -2.25,5,-2.75,0.9999999997,-1,5e-10,-2.250000001,1,-2e-10,5,-0.9999999999,-2.75,-1.499999999,0.9999999997,-4,0.9999999996,1,-1.5,17.5,-8.000000001,3.250000001,-8,-6e-10,3.25,72,24,24,504,504,-3.56e-08,
10  0,0,0,0,0,0,17.5,-5,0,-25,5,7.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0,0,
11  17.5,-25,7.5,-5,5,-0,0,-0,0,0,0,-0,0,0,-0,-0,0,-0,0,-0,0,0,-0,-0,0,0,0,-0,-0,-0,
12  -0,0,-0,0,-0,-0,0,-0,0,-0,-0,-0,0,0,-0,-0,-0,0,17.5,-25,7.5,-5,5,-0,-0,-0,-0,-0,0,0,
13  -2.249999998,0.9999999992,2e-10,4.999999999,-0.9999999996,-2.75,17.5,-7.999999999,3.25,-8,-1e-10,3.25,-4.000000001,1.000000001,-1.500000001,0.9999999999,1.000000001,-1.500000001,-2.250000001,5.000000001,-2.750000001,1.000000001,-1,-5e-10,24.00000001,72.00000001,24.00000001,-504.0000001,-6.31e-08,503.9999998,
14  17.5,-5,0,-25,5,7.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0,0,
15  -0,0,-0,0,-0,-0,-0,0,-0,0,-0,0,-0,-0,0,-0,-0,0,17.5,-5,-0,-25,5,7.5,-0,-0,-0,0,0,0,
16  0,0,0,0,0,0,17.5,-25,7.5,-5,5,-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0,0,
17  17.5,-7.999999999,3.25,-7.999999999,-2e-10,3.25,-2.25,4.999999999,-2.75,0.9999999999,-1,-0,-1.5,0.9999999997,-1.499999999,1.000000001,0.9999999993,-3.999999999,-2.249999999,0.9999999995,-1e-10,4.999999999,-0.9999999991,-2.749999999,23.99999999,23.99999999,71.99999999,3.05e-08,-503.9999999,-503.9999998,
18  3.25,-9,8.75,3e-10,-3,0.9999999995,3.250000001,-4e-10,1,-9,-3,8.75,2.499999999,-5,10,4e-10,-5,2.5,-11.5,4.000000001,-2.250000001,4,1.000000001,-2.25,-72,-24,-24,-504,-504,3.56e-08,
19  0,0,0,0,0,0,-12.5,0,0,25,-0,-12.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0,0,
20  -12.5,25,-12.5,0,-0,-0,-0,0,-0,0,-0,-0,0,-0,0,0,-0,0,0,-0,-0,-0,0,-0,-0,-0,-0,0,0,0,
21  3.249999998,-4.5,-1.375,-4.499999998,9.500000001,-1.375000002,1.500000001,-0.500000001,-0.6249999997,-2.5,1.5,-2.375,-1.5e-09,7.500000001,-1e-10,-2.499999999,-2.5,2.5,-22.25,22.5,-3.625000002,4.499999999,-3.499999998,-0.6250000001,-48,-48,-24,-1260,-252,-251.9999999,
22  3.249999999,-4.499999999,-1.375,-4.500000001,9.499999999,-1.374999999,-22.25,4.5,-0.6250000001,22.5,-3.5,-3.625,1.7e-09,7.499999999,6e-10,-2.500000001,-2.5,2.500000001,1.500000001,-2.500000003,-2.374999998,-0.5,1.499999999,-0.6249999994,-48.00000001,-48.00000001,-24.00000001,1260,-252,-251.9999999,
23  -25,25,0,25,-25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0,0,
24  1.500000001,-2.5,-2.375,-0.500000001,1.5,-0.625,3.25,-4.5,-1.375,-4.5,9.5,-1.375,2.5,-2.5,-2e-10,-2.5,7.5,-1e-10,-22.25,4.500000001,-0.6250000004,22.5,-3.5,-3.625,-48,-24,-48,-252,-1260,252,
25  0,0,0,0,0,0,-25,25,0,25,-25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0,0,
26  -22.25,22.5,-3.625,4.5,-3.5,-0.6250000004,3.25,-4.499999999,-1.375,-4.5,9.5,-1.375,2.499999999,-2.5,-4e-10,-2.5,7.500000001,-7e-10,1.499999999,-0.4999999994,-0.6250000004,-2.499999999,1.5,-2.375000001,-48,-23.99999999,-47.99999999,-252,1260,251.9999999,
27  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12.5,25,-12.5,0,0,0,0,0,0,0,-0,0,
28  3.249999998,8e-10,0.9999999998,-8.999999999,-3,8.75,-11.5,3.999999999,-2.25,4,1,-2.25,10,-5.000000001,2.500000001,-5,-5e-10,2.500000001,3.250000001,-9.000000001,8.750000001,-9e-10,-3,1.000000001,-24.00000001,-72.00000001,-24.00000001,504.0000001,6.31e-08,-503.9999998,
29  -12.5,0,0,25,-0,-12.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0,0,
30  0,-0,-0,-0,-0,-0,-0,0,-0,0,0,0,0,0,0,0,0,-0,-25,25,0,25,-25,-0,0,0,0,0,-0,-0,
31  1.499999994,-0.499999998,-0.6250000007,-2.499999996,1.499999999,-2.375,-22.25,22.5,-3.625,4.5,-3.5,-0.6250000001,7e-10,-2.500000001,2.500000001,7.500000001,-2.500000001,1.6e-09,3.250000002,-4.500000002,-1.375,-4.500000003,9.500000002,-1.374999999,-24.00000001,-48.00000002,-48.00000003,252.0000001,252.0000002,-1260,
32  -22.24999999,4.499999998,-0.6249999992,22.5,-3.5,-3.624999999,1.499999999,-2.499999998,-2.375,-0.4999999997,1.5,-0.625,-1e-10,-2.499999999,2.499999999,7.499999998,-2.499999998,-1.6e-09,3.249999999,-4.499999999,-1.374999999,-4.499999997,9.499999997,-1.375000001,-23.99999999,-47.99999998,-47.99999997,251.9999999,251.9999998,1260,
33  0,-0,-0,-0,0,0,0,-0,0,-0,0,0,-0,0,0,0,0,-0,-12.5,-0,0,25,-0,-12.5,0,0,0,0,-0,-0,
34  0,0,0,0,0,0,-12.5,25,-12.5,0,-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0,0,
35  -11.5,3.999999999,-2.25,3.999999999,1,-2.25,3.25,-8.999999999,8.75,1e-10,-3,1,2.5,3e-10,2.499999999,-5.000000001,-4.999999999,9.999999999,3.249999999,5e-10,1,-8.999999999,-3.000000001,8.749999999,-23.99999999,-23.99999999,-71.99999999,-3.05e-08,503.9999999,503.9999998
36 };
37 
38 static void N_T_BDDF2_3D_Funct(double xi, double eta, double zeta,
39  double *values)
40 {
41  int nBF = 30; // number of basis functions
42  // monomials x-component, y-component and z-component
43  double mon_x[]={1,0,0,xi,0,0,eta,0,0,zeta,0,0,
44  xi*xi,0,0,xi*eta,0,0,xi*zeta,0,0,
45  eta*eta,0,0,eta*zeta,0,0,zeta*zeta,0,0};
46  double mon_y[]={0,1,0,0,xi,0,0,eta,0,0,zeta,0,
47  0,xi*xi,0,0,xi*eta,0,0,xi*zeta,0,
48  0,eta*eta,0,0,eta*zeta,0,0,zeta*zeta,0};
49  double mon_z[]={0,0,1,0,0,xi,0,0,eta,0,0,zeta,
50  0,0,xi*xi,0,0,xi*eta,0,0,xi*zeta,
51  0,0,eta*eta,0,0,eta*zeta,0,0,zeta*zeta};
52 
53  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
54  for(int i=0; i<nBF; i++)
55  {
56  for(int j=0; j<nBF; j++)
57  {
58  values[i ] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_x[j];
59  values[i+ nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_y[j];
60  values[i+2*nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_z[j];
61  }
62  }
63 }
64 
65 static void N_T_BDDF2_3D_DeriveXi(double xi, double eta, double zeta,
66  double *values)
67 {
68  int nBF = 30; // number of basis functions
69  // monomials x-component, y-component and z-component
70  double mon_x[]={0,0,0,1,0,0,0,0,0,0,0,0,
71  2*xi,0,0,eta,0,0,zeta,0,0,
72  0,0,0,0,0,0,0,0,0};
73  double mon_y[]={0,0,0,0,1,0,0,0,0,0,0,0,
74  0,2*xi,0,0,eta,0,0,zeta,0,
75  0,0,0,0,0,0,0,0,0};
76  double mon_z[]={0,0,0,0,0,1,0,0,0,0,0,0,
77  0,0,2*xi,0,0,eta,0,0,zeta,
78  0,0,0,0,0,0,0,0,0};
79 
80  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
81  for(int i=0; i<nBF; i++)
82  {
83  for(int j=0; j<nBF; j++)
84  {
85  values[i ] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_x[j];
86  values[i+ nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_y[j];
87  values[i+2*nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_z[j];
88  }
89  }
90 }
91 
92 static void N_T_BDDF2_3D_DeriveEta(double xi, double eta, double zeta,
93  double *values)
94 {
95  int nBF = 30; // number of basis functions
96  // monomials x-component, y-component and z-component
97  double mon_x[]={0,0,0,0,0,0,1,0,0,0,0,0,
98  0,0,0,xi,0,0,0,0,0,
99  2*eta,0,0,zeta,0,0,0,0,0};
100  double mon_y[]={0,0,0,0,0,0,0,1,0,0,0,0,
101  0,0,0,0,xi,0,0,0,0,
102  0,2*eta,0,0,zeta,0,0,0,0};
103  double mon_z[]={0,0,0,0,0,0,0,0,1,0,0,0,
104  0,0,0,0,0,xi,0,0,0,
105  0,0,2*eta,0,0,zeta,0,0,0};
106 
107  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
108  for(int i=0; i<nBF; i++)
109  {
110  for(int j=0; j<nBF; j++)
111  {
112  values[i ] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_x[j];
113  values[i+ nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_y[j];
114  values[i+2*nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_z[j];
115  }
116  }
117 }
118 
119 static void N_T_BDDF2_3D_DeriveZeta(double xi, double eta, double zeta,
120  double *values)
121 {
122  int nBF = 30; // number of basis functions
123  // monomials x-component, y-component and z-component
124  double mon_x[]={0,0,0,0,0,0,0,0,0,1,0,0,
125  0,0,0,0,0,0,xi,0,0,
126  0,0,0,eta,0,0,2*zeta,0,0};
127  double mon_y[]={0,0,0,0,0,0,0,0,0,0,1,0,
128  0,0,0,0,0,0,0,xi,0,
129  0,0,0,0,eta,0,0,2*zeta,0};
130  double mon_z[]={0,0,0,0,0,0,0,0,0,0,0,1,
131  0,0,0,0,0,0,0,0,xi,
132  0,0,0,0,0,eta,0,0,2*zeta};
133 
134  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
135  for(int i=0; i<nBF; i++)
136  {
137  for(int j=0; j<nBF; j++)
138  {
139  values[i ] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_x[j];
140  values[i+ nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_y[j];
141  values[i+2*nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_z[j];
142  }
143  }
144 }
145 
146 static void N_T_BDDF2_3D_DeriveXiXi(double xi, double eta, double zeta,
147  double *values)
148 {
149  int nBF = 30; // number of basis functions
150  // monomials x-component, y-component and z-component
151  double mon_x[]={0,0,0,0,0,0,0,0,0,0,0,0,
152  2,0,0,0,0,0,0,0,0,
153  0,0,0,0,0,0,0,0,0};
154  double mon_y[]={0,0,0,0,0,0,0,0,0,0,0,0,
155  0,2,0,0,0,0,0,0,0,
156  0,0,0,0,0,0,0,0,0};
157  double mon_z[]={0,0,0,0,0,0,0,0,0,0,0,0,
158  0,0,2,0,0,0,0,0,0,
159  0,0,0,0,0,0,0,0,0};
160 
161  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
162  for(int i=0; i<nBF; i++)
163  {
164  for(int j=0; j<nBF; j++)
165  {
166  values[i ] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_x[j];
167  values[i+ nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_y[j];
168  values[i+2*nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_z[j];
169  }
170  }
171 }
172 
173 static void N_T_BDDF2_3D_DeriveXiEta(double xi, double eta, double zeta,
174  double *values)
175 {
176  int nBF = 30; // number of basis functions
177  // monomials x-component, y-component and z-component
178  double mon_x[]={0,0,0,0,0,0,0,0,0,0,0,0,
179  0,0,0,1,0,0,0,0,0,
180  0,0,0,0,0,0,0,0,0};
181  double mon_y[]={0,0,0,0,0,0,0,0,0,0,0,0,
182  0,0,0,0,1,0,0,0,0,
183  0,0,0,0,0,0,0,0,0};
184  double mon_z[]={0,0,0,0,0,0,0,0,0,0,0,0,
185  0,0,0,0,0,1,0,0,0,
186  0,0,0,0,0,0,0,0,0};
187 
188  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
189  for(int i=0; i<nBF; i++)
190  {
191  for(int j=0; j<nBF; j++)
192  {
193  values[i ] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_x[j];
194  values[i+ nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_y[j];
195  values[i+2*nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_z[j];
196  }
197  }
198 }
199 
200 static void N_T_BDDF2_3D_DeriveXiZeta(double xi, double eta, double zeta,
201  double *values)
202 {
203  int nBF = 30; // number of basis functions
204  // monomials x-component, y-component and z-component
205  double mon_x[]={0,0,0,0,0,0,0,0,0,0,0,0,
206  0,0,0,0,0,0,1,0,0,
207  0,0,0,0,0,0,0,0,0};
208  double mon_y[]={0,0,0,0,0,0,0,0,0,0,0,0,
209  0,0,0,0,0,0,0,1,0,
210  0,0,0,0,0,0,0,0,0};
211  double mon_z[]={0,0,0,0,0,0,0,0,0,0,0,0,
212  0,0,0,0,0,0,0,0,1,
213  0,0,0,0,0,0,0,0,0};
214 
215  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
216  for(int i=0; i<nBF; i++)
217  {
218  for(int j=0; j<nBF; j++)
219  {
220  values[i ] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_x[j];
221  values[i+ nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_y[j];
222  values[i+2*nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_z[j];
223  }
224  }
225 }
226 
227 static void N_T_BDDF2_3D_DeriveEtaEta(double xi, double eta, double zeta,
228  double *values)
229 {
230  int nBF = 30; // number of basis functions
231  // monomials x-component, y-component and z-component
232  double mon_x[]={0,0,0,0,0,0,0,0,0,0,0,0,
233  0,0,0,0,0,0,0,0,0,
234  2,0,0,0,0,0,0,0,0};
235  double mon_y[]={0,0,0,0,0,0,0,0,0,0,0,0,
236  0,0,0,0,0,0,0,0,0,
237  0,2,0,0,0,0,0,0,0};
238  double mon_z[]={0,0,0,0,0,0,0,0,0,0,0,0,
239  0,0,0,0,0,0,0,0,0,
240  0,0,2,0,0,0,0,0,0};
241 
242  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
243  for(int i=0; i<nBF; i++)
244  {
245  for(int j=0; j<nBF; j++)
246  {
247  values[i ] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_x[j];
248  values[i+ nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_y[j];
249  values[i+2*nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_z[j];
250  }
251  }
252 }
253 
254 static void N_T_BDDF2_3D_DeriveEtaZeta(double xi, double eta, double zeta,
255  double *values)
256 {
257  int nBF = 30; // number of basis functions
258  // monomials x-component, y-component and z-component
259  double mon_x[]={0,0,0,0,0,0,0,0,0,0,0,0,
260  0,0,0,0,0,0,0,0,0,
261  0,0,0,1,0,0,0,0,0};
262  double mon_y[]={0,0,0,0,0,0,0,0,0,0,0,0,
263  0,0,0,0,0,0,0,0,0,
264  0,0,0,0,1,0,0,0,0};
265  double mon_z[]={0,0,0,0,0,0,0,0,0,0,0,0,
266  0,0,0,0,0,0,0,0,0,
267  0,0,0,0,0,1,0,0,0};
268 
269  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
270  for(int i=0; i<nBF; i++)
271  {
272  for(int j=0; j<nBF; j++)
273  {
274  values[i ] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_x[j];
275  values[i+ nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_y[j];
276  values[i+2*nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_z[j];
277  }
278  }
279 }
280 
281 static void N_T_BDDF2_3D_DeriveZetaZeta(double xi, double eta, double zeta,
282  double *values)
283 {
284  int nBF = 30; // number of basis functions
285  // monomials x-component, y-component and z-component
286  double mon_x[]={0,0,0,0,0,0,0,0,0,0,0,0,
287  0,0,0,0,0,0,0,0,0,
288  0,0,0,0,0,0,2,0,0};
289  double mon_y[]={0,0,0,0,0,0,0,0,0,0,0,0,
290  0,0,0,0,0,0,0,0,0,
291  0,0,0,0,0,0,0,2,0};
292  double mon_z[]={0,0,0,0,0,0,0,0,0,0,0,0,
293  0,0,0,0,0,0,0,0,0,
294  0,0,0,0,0,0,0,0,2};
295 
296  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
297  for(int i=0; i<nBF; i++)
298  {
299  for(int j=0; j<nBF; j++)
300  {
301  values[i ] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_x[j];
302  values[i+ nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_y[j];
303  values[i+2*nBF] += N_T_BDDF2_3D_CM[i+j*nBF]*mon_z[j];
304  }
305  }
306 }
307 
308 TBaseFunct3D *BF_N_T_BDDF2_3D_Obj =
309 new TBaseFunct3D(30, BF_N_T_BDDF2_3D, BFUnitTetrahedron,
310  N_T_BDDF2_3D_Funct, N_T_BDDF2_3D_DeriveXi,
311  N_T_BDDF2_3D_DeriveEta, N_T_BDDF2_3D_DeriveZeta,
312  N_T_BDDF2_3D_DeriveXiXi, N_T_BDDF2_3D_DeriveXiEta,
313  N_T_BDDF2_3D_DeriveXiZeta, N_T_BDDF2_3D_DeriveEtaEta,
314  N_T_BDDF2_3D_DeriveEtaZeta, N_T_BDDF2_3D_DeriveZetaZeta,
315  2, 1,
316  0, NULL, 3);
Definition: BaseFunct3D.h:27