ParMooN
 All Classes Functions Variables Friends Pages
BF_C_Q_M4_2D.h
1 // ***********************************************************************
2 // Q4 element with bubbles, conforming, 2D
3 // ***********************************************************************
4 
5 // base function values
6 static void C_Q_M4_2D_Funct(double xi, double eta, double *values)
7 {
8  double t1 = 4.0/9.0*xi;
9  double t2 = 4.0/9.0*eta;
10  double t3 = xi*xi;
11  double t4 = 7.0/9.0*t3;
12  double t5 = xi*eta;
13  double t6 = 5.0/12.0*t5;
14  double t7 = eta*eta;
15  double t8 = 7.0/9.0*t7;
16  double t9 = t3*xi;
17  double t10 = t9/3.0;
18  double t11 = t3*eta;
19  double t12 = 13.0/36.0*t11;
20  double t13 = xi*t7;
21  double t14 = 13.0/36.0*t13;
22  double t15 = t7*eta;
23  double t16 = t15/3.0;
24  double t17 = t3*t3;
25  double t18 = 2.0/3.0*t17;
26  double t19 = t9*eta;
27  double t20 = t19/3.0;
28  double t21 = t3*t7;
29  double t22 = t21/4.0;
30  double t23 = xi*t15;
31  double t24 = t23/3.0;
32  double t25 = t7*t7;
33  double t26 = 2.0/3.0*t25;
34  double t32 = (1.0-t3)*(-1.0/2.0+3.0/2.0*t3)*(1.0+eta);
35  double t33 = 2.0/9.0*t32;
36  double t39 = (1.0-t7)*(-1.0/2.0+3.0/2.0*t7)*(1.0+xi);
37  double t40 = 2.0/9.0*t39;
38  double t41 = 2.0/9.0+t1+t2-t4-t6-t8-t10-t12-t14-t16+t18+t20+t22+t24+t26+t33+t40;
39  double t42 = 2.0/3.0*xi;
40  double t43 = 28.0/9.0*t3;
41  double t44 = 2.0/3.0*t5;
42  double t45 = 2.0/3.0*t9;
43  double t46 = 4.0/9.0*t11;
44  double t47 = 8.0/3.0*t17;
45  double t48 = 2.0/3.0*t19;
46  double t49 = 8.0/9.0*t32;
47  double t51 = eta/6.0;
48  double t53 = t7/2.0;
49  double t54 = t11/6.0;
50  double t56 = t21/2.0;
51  double t57 = 4.0/3.0*t32;
52  double t60 = t7/9.0;
53  double t61 = -t1+t2-t4+t6+t60+t10-t12+t14-t16+t18-t20+t22-t24+t33-t40;
54  double t62 = 2.0/3.0*eta;
55  double t63 = 4.0/9.0*t7;
56  double t64 = 4.0/9.0*t13;
57  double t65 = 2.0/3.0*t15;
58  double t66 = 2.0/3.0*t23;
59  double t67 = 8.0/9.0*t39;
60  double t69 = xi/6.0;
61  double t70 = t3/2.0;
62  double t72 = t13/6.0;
63  double t73 = 4.0/3.0*t39;
64  double t76 = t3/9.0;
65  double t77 = -2.0/9.0-t1-t2+t76-t6+t60+t10+t12+t14+t16+t20+t22+t24-t33-t40;
66  double t78 = 4.0/9.0*t3;
67  double t83 = t1-t2+t76+t6-t8-t10+t12-t14+t16-t20+t22-t24+t26-t33+t40;
68  double t84 = 28.0/9.0*t7;
69  double t85 = 8.0/3.0*t25;
70 
71  values[0] = t41;
72  values[1] = -4.0/9.0-t42-t2+t43+t44+t45+t46-t47-t48-t49;
73  values[2] = 2.0/3.0+t51-14.0/3.0*t3+t53-t54+4.0*t17-t56+t57;
74  values[3] = -4.0/9.0+t42-t2+t43-t44-t45+t46-t47+t48-t49;
75  values[4] = t61;
76  values[5] = 4.0/9.0+t1-t62-t44-t63-t64+t65+t66+t67;
77  values[6] = -2.0/3.0-t69+t70+2.0/3.0*t7+t72-t56-t73;
78  values[7] = 4.0/9.0+t1+t62+t44-t63-t64-t65-t66+t67;
79  values[8] = t77;
80  values[9] = 4.0/9.0+t42+t2-t78+t44-t45-t46-t48+t49;
81  values[10] = -2.0/3.0-t51+2.0/3.0*t3+t53+t54-t56-t57;
82  values[11] = 4.0/9.0-t42+t2-t78-t44+t45-t46+t48+t49;
83  values[12] = t83;
84  values[13] = -4.0/9.0-t1+t62-t44+t84+t64-t65+t66-t85-t67;
85  values[14] = 2.0/3.0+t69+t70-14.0/3.0*t7-t72-t56+4.0*t25+t73;
86  values[15] = -4.0/9.0-t1-t62+t44+t84+t64+t65-t66-t85-t67;
87  values[16] = 1.0-t3-t7+t21;
88 }
89 
90 // values of the derivatives in xi direction
91 static void C_Q_M4_2D_DeriveXi(double xi, double eta, double *values)
92 {
93  double t1 = 14.0/9.0*xi;
94  double t2 = 5.0/12.0*eta;
95  double t3 = xi*xi;
96  double t4 = xi*eta;
97  double t5 = 13.0/18.0*t4;
98  double t6 = eta*eta;
99  double t7 = 13.0/36.0*t6;
100  double t8 = t3*xi;
101  double t9 = 8.0/3.0*t8;
102  double t10 = t3*eta;
103  double t11 = xi*t6;
104  double t12 = t11/2.0;
105  double t13 = t6*eta;
106  double t14 = t13/3.0;
107  double t18 = 1.0+eta;
108  double t19 = xi*(-1.0/2.0+3.0/2.0*t3)*t18;
109  double t20 = 4.0/9.0*t19;
110  double t23 = (1.0-t3)*xi*t18;
111  double t24 = 2.0/3.0*t23;
112  double t28 = (1.0-t6)*(-1.0/2.0+3.0/2.0*t6);
113  double t29 = 2.0/9.0*t28;
114  double t30 = 4.0/9.0-t1-t2-t3-t5-t7+t9+t10+t12+t14-t20+t24+t29;
115  double t31 = 56.0/9.0*xi;
116  double t32 = 2.0/3.0*eta;
117  double t33 = 2.0*t3;
118  double t34 = 8.0/9.0*t4;
119  double t35 = 32.0/3.0*t8;
120  double t36 = 2.0*t10;
121  double t37 = 16.0/9.0*t19;
122  double t38 = 8.0/3.0*t23;
123  double t41 = t4/3.0;
124  double t43 = 8.0/3.0*t19;
125  double t44 = 4.0*t23;
126  double t47 = -4.0/9.0-t1+t2+t3-t5+t7+t9-t10+t12-t14-t20+t24-t29;
127  double t48 = 4.0/9.0*t6;
128  double t49 = 2.0/3.0*t13;
129  double t50 = 8.0/9.0*t28;
130  double t51 = 4.0/9.0-t32-t48+t49+t50;
131  double t52 = t6/6.0;
132  double t53 = 4.0/3.0*t28;
133  double t55 = 4.0/9.0+t32-t48-t49+t50;
134  double t56 = 2.0/9.0*xi;
135  double t57 = -4.0/9.0+t56-t2+t3+t5+t7+t10+t12+t14+t20-t24-t29;
136  double t58 = 8.0/9.0*xi;
137  double t63 = 4.0/9.0+t56+t2-t3+t5-t7-t10+t12-t14+t20-t24+t29;
138 
139  values[0] = t30;
140  values[1] = -2.0/3.0+t31+t32+t33+t34-t35-t36+t37-t38;
141  values[2] = -28.0/3.0*xi-t41+16.0*t8-t11-t43+t44;
142  values[3] = 2.0/3.0+t31-t32-t33+t34-t35+t36+t37-t38;
143  values[4] = t47;
144  values[5] = t51;
145  values[6] = -1.0/6.0+xi+t52-t11-t53;
146  values[7] = t55;
147  values[8] = t57;
148  values[9] = 2.0/3.0-t58+t32-t33-t34-t36-t37+t38;
149  values[10] = 4.0/3.0*xi+t41-t11+t43-t44;
150  values[11] = -2.0/3.0-t58-t32+t33-t34+t36-t37+t38;
151  values[12] = t63;
152  values[13] = -t55;
153  values[14] = 1.0/6.0+xi-t52-t11+t53;
154  values[15] = -t51;
155  values[16] = -2.0*xi+2.0*t11;
156 }
157 
158 // values of the derivatives in eta direction
159 static void C_Q_M4_2D_DeriveEta(double xi, double eta, double *values)
160 {
161  double t1 = 5.0/12.0*xi;
162  double t2 = 14.0/9.0*eta;
163  double t3 = xi*xi;
164  double t4 = 13.0/36.0*t3;
165  double t5 = xi*eta;
166  double t6 = 13.0/18.0*t5;
167  double t7 = eta*eta;
168  double t8 = t3*xi;
169  double t9 = t8/3.0;
170  double t10 = t3*eta;
171  double t11 = t10/2.0;
172  double t12 = xi*t7;
173  double t13 = t7*eta;
174  double t14 = 8.0/3.0*t13;
175  double t18 = (1.0-t3)*(-1.0/2.0+3.0/2.0*t3);
176  double t19 = 2.0/9.0*t18;
177  double t23 = 1.0+xi;
178  double t24 = eta*(-1.0/2.0+3.0/2.0*t7)*t23;
179  double t25 = 4.0/9.0*t24;
180  double t28 = (1.0-t7)*eta*t23;
181  double t29 = 2.0/3.0*t28;
182  double t30 = 4.0/9.0-t1-t2-t4-t6-t7+t9+t11+t12+t14+t19-t25+t29;
183  double t31 = 2.0/3.0*xi;
184  double t32 = 4.0/9.0*t3;
185  double t33 = 2.0/3.0*t8;
186  double t34 = 8.0/9.0*t18;
187  double t35 = -4.0/9.0+t31+t32-t33-t34;
188  double t36 = t3/6.0;
189  double t37 = 4.0/3.0*t18;
190  double t39 = -4.0/9.0-t31+t32+t33-t34;
191  double t40 = 2.0/9.0*eta;
192  double t41 = 4.0/9.0+t1+t40-t4+t6-t7-t9+t11-t12+t19+t25-t29;
193  double t42 = 8.0/9.0*eta;
194  double t43 = 8.0/9.0*t5;
195  double t44 = 2.0*t7;
196  double t45 = 2.0*t12;
197  double t46 = 16.0/9.0*t24;
198  double t47 = 8.0/3.0*t28;
199  double t50 = t5/3.0;
200  double t51 = 8.0/3.0*t24;
201  double t52 = 4.0*t28;
202  double t55 = -4.0/9.0-t1+t40+t4+t6+t7+t9+t11+t12-t19+t25-t29;
203  double t57 = -4.0/9.0+t1-t2+t4-t6+t7-t9+t11-t12+t14-t19-t25+t29;
204  double t58 = 56.0/9.0*eta;
205  double t59 = 32.0/3.0*t13;
206 
207  values[0] = t30;
208  values[1] = t35;
209  values[2] = 1.0/6.0+eta-t36-t10+t37;
210  values[3] = t39;
211  values[4] = t41;
212  values[5] = -2.0/3.0-t31-t42-t43+t44+t45-t46+t47;
213  values[6] = 4.0/3.0*eta+t50-t10+t51-t52;
214  values[7] = 2.0/3.0+t31-t42-t43-t44-t45-t46+t47;
215  values[8] = t55;
216  values[9] = -t39;
217  values[10] = -1.0/6.0+eta+t36-t10-t37;
218  values[11] = -t35;
219  values[12] = t57;
220  values[13] = 2.0/3.0-t31+t58+t43-t44+t45-t59+t46-t47;
221  values[14] = -28.0/3.0*eta-t50-t10+16.0*t13-t51+t52;
222  values[15] = -2.0/3.0+t31+t58+t43+t44-t45-t59+t46-t47;
223  values[16] = -2.0*eta+2.0*t10;
224 }
225 
226 // values of the derivatives in xi-xi direction
227 static void C_Q_M4_2D_DeriveXiXi(double xi, double eta, double *values)
228 {
229  double t1 = 2.0*xi;
230  double t2 = 13.0/18.0*eta;
231  double t3 = xi*xi;
232  double t4 = 8.0*t3;
233  double t5 = xi*eta;
234  double t6 = 2.0*t5;
235  double t7 = eta*eta;
236  double t8 = t7/2.0;
237  double t11 = 1.0+eta;
238  double t12 = (-1.0/2.0+3.0/2.0*t3)*t11;
239  double t13 = 4.0/9.0*t12;
240  double t14 = t3*t11;
241  double t15 = 8.0/3.0*t14;
242  double t17 = (1.0-t3)*t11;
243  double t18 = 2.0/3.0*t17;
244  double t20 = 4.0*xi;
245  double t21 = 8.0/9.0*eta;
246  double t22 = 32.0*t3;
247  double t23 = 4.0*t5;
248  double t24 = 16.0/9.0*t12;
249  double t25 = 32.0/3.0*t14;
250  double t26 = 8.0/3.0*t17;
251  double t28 = eta/3.0;
252  double t30 = 8.0/3.0*t12;
253  double t31 = 16.0*t14;
254  double t32 = 4.0*t17;
255  double t36 = 1.0-t7;
256 
257  values[0] = -14.0/9.0-t1-t2+t4+t6+t8-t13-t15+t18;
258  values[1] = 56.0/9.0+t20+t21-t22-t23+t24+t25-t26;
259  values[2] = -28.0/3.0-t28+48.0*t3-t7-t30-t31+t32;
260  values[3] = 56.0/9.0-t20+t21-t22+t23+t24+t25-t26;
261  values[4] = -14.0/9.0+t1-t2+t4-t6+t8-t13-t15+t18;
262  values[5] = 0.0;
263  values[6] = t36;
264  values[7] = 0.0;
265  values[8] = 2.0/9.0+t1+t2+t6+t8+t13+t15-t18;
266  values[9] = -8.0/9.0-t20-t21-t23-t24-t25+t26;
267  values[10] = 4.0/3.0+t28-t7+t30+t31-t32;
268  values[11] = -8.0/9.0+t20-t21+t23-t24-t25+t26;
269  values[12] = 2.0/9.0-t1+t2-t6+t8+t13+t15-t18;
270  values[13] = 0.0;
271  values[14] = t36;
272  values[15] = 0.0;
273  values[16] = -2.0*t36;
274 }
275 
276 // values of the derivatives in xi-eta direction
277 static void C_Q_M4_2D_DeriveXiEta(double xi, double eta, double *values)
278 {
279  double t1 = 13.0/18.0*xi;
280  double t2 = 13.0/18.0*eta;
281  double t3 = xi*xi;
282  double t4 = xi*eta;
283  double t5 = eta*eta;
284  double t8 = xi*(-1.0/2.0+3.0/2.0*t3);
285  double t9 = 4.0/9.0*t8;
286  double t11 = (1.0-t3)*xi;
287  double t12 = 2.0/3.0*t11;
288  double t15 = eta*(-1.0/2.0+3.0/2.0*t5);
289  double t16 = 4.0/9.0*t15;
290  double t18 = (1.0-t5)*eta;
291  double t19 = 2.0/3.0*t18;
292  double t21 = 8.0/9.0*xi;
293  double t22 = 2.0*t3;
294  double t23 = 16.0/9.0*t8;
295  double t24 = 8.0/3.0*t11;
296  double t25 = 2.0/3.0+t21-t22+t23-t24;
297  double t26 = xi/3.0;
298  double t27 = 2.0*t4;
299  double t28 = 8.0/3.0*t8;
300  double t29 = 4.0*t11;
301  double t31 = -2.0/3.0+t21+t22+t23-t24;
302  double t33 = 8.0/9.0*eta;
303  double t34 = 2.0*t5;
304  double t35 = 16.0/9.0*t15;
305  double t36 = 8.0/3.0*t18;
306  double t37 = -2.0/3.0-t33+t34-t35+t36;
307  double t38 = eta/3.0;
308  double t39 = 8.0/3.0*t15;
309  double t40 = 4.0*t18;
310  double t42 = 2.0/3.0-t33-t34-t35+t36;
311 
312  values[0] = -5.0/12.0-t1-t2+t3+t4+t5-t9+t12-t16+t19;
313  values[1] = t25;
314  values[2] = -t26-t27-t28+t29;
315  values[3] = t31;
316  values[4] = 5.0/12.0-t1+t2-t3+t4-t5-t9+t12+t16-t19;
317  values[5] = t37;
318  values[6] = t38-t27+t39-t40;
319  values[7] = t42;
320  values[8] = -5.0/12.0+t1+t2+t3+t4+t5+t9-t12+t16-t19;
321  values[9] = -t31;
322  values[10] = t26-t27+t28-t29;
323  values[11] = -t25;
324  values[12] = 5.0/12.0+t1-t2-t3+t4-t5+t9-t12-t16+t19;
325  values[13] = -t42;
326  values[14] = -t38-t27-t39+t40;
327  values[15] = -t37;
328  values[16] = 4.0*t4;
329 }
330 
331 // values of the derivatives in eta-eta direction
332 static void C_Q_M4_2D_DeriveEtaEta(double xi, double eta, double *values)
333 {
334  double t1 = 13.0/18.0*xi;
335  double t2 = 2.0*eta;
336  double t3 = xi*xi;
337  double t4 = t3/2.0;
338  double t5 = xi*eta;
339  double t6 = 2.0*t5;
340  double t7 = eta*eta;
341  double t8 = 8.0*t7;
342  double t11 = 1.0+xi;
343  double t12 = (-1.0/2.0+3.0/2.0*t7)*t11;
344  double t13 = 4.0/9.0*t12;
345  double t14 = t7*t11;
346  double t15 = 8.0/3.0*t14;
347  double t17 = (1.0-t7)*t11;
348  double t18 = 2.0/3.0*t17;
349  double t20 = 1.0-t3;
350  double t22 = 8.0/9.0*xi;
351  double t23 = 4.0*eta;
352  double t24 = 4.0*t5;
353  double t25 = 16.0/9.0*t12;
354  double t26 = 32.0/3.0*t14;
355  double t27 = 8.0/3.0*t17;
356  double t29 = xi/3.0;
357  double t30 = 8.0/3.0*t12;
358  double t31 = 16.0*t14;
359  double t32 = 4.0*t17;
360  double t37 = 32.0*t7;
361 
362  values[0] = -14.0/9.0-t1-t2+t4+t6+t8-t13-t15+t18;
363  values[1] = 0.0;
364  values[2] = t20;
365  values[3] = 0.0;
366  values[4] = 2.0/9.0+t1-t2+t4-t6+t13+t15-t18;
367  values[5] = -8.0/9.0-t22+t23+t24-t25-t26+t27;
368  values[6] = 4.0/3.0+t29-t3+t30+t31-t32;
369  values[7] = -8.0/9.0-t22-t23-t24-t25-t26+t27;
370  values[8] = 2.0/9.0+t1+t2+t4+t6+t13+t15-t18;
371  values[9] = 0.0;
372  values[10] = t20;
373  values[11] = 0.0;
374  values[12] = -14.0/9.0-t1+t2+t4-t6+t8-t13-t15+t18;
375  values[13] = 56.0/9.0+t22-t23+t24-t37+t25+t26-t27;
376  values[14] = -28.0/3.0-t29-t3+48.0*t7-t30-t31+t32;
377  values[15] = 56.0/9.0+t22+t23-t24-t37+t25+t26-t27;
378  values[16] = -2.0*t20;
379 }
380 
381 // ***********************************************************************
382 
383 TBaseFunct2D *BF_C_Q_M4_2D_Obj = new TBaseFunct2D
384  (17, BF_C_Q_M4_2D, BFUnitSquare,
385  C_Q_M4_2D_Funct, C_Q_M4_2D_DeriveXi,
386  C_Q_M4_2D_DeriveEta, C_Q_M4_2D_DeriveXiXi,
387  C_Q_M4_2D_DeriveXiEta, C_Q_M4_2D_DeriveEtaEta, 4, 4,
388  0, NULL);
Definition: BaseFunct2D.h:27