ParMooN
 All Classes Functions Variables Friends Pages
BF_N_Q_Q4_2D.h
1 // ***********************************************************************
2 // Q4 element, nonconforming, 2D
3 // ***********************************************************************
4 
5 // base function values
6 static void N_Q_Q4_2D_Funct(double xi, double eta, double *values)
7 {
8  double t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t15, t17;
9  double t19, t20, t21, t22, t23, t24, t26, t27, t28, t29, t31, t35, t36;
10  double t37, t38, t39, t40, t41, t43, t44, t45, t46, t47, t54, t61, t63;
11  double t64, t65, t66, t67, t69, t70, t71, t75, t76, t77, t78, t79, t80;
12  double t81, t82, t100, t101, t102;
13 
14  t1 = 3.0/4.0*eta;
15  t2 = eta*eta;
16  t3 = 15.0/8.0*t2;
17  t4 = t2*eta;
18  t5 = 5.0/4.0*t4;
19  t6 = t2*t2;
20  t7 = 35.0/16.0*t6;
21  t8 = xi*xi;
22  t9 = t8*t8;
23  t10 = 35.0/8.0*t9;
24  t11 = 15.0/4.0*t8;
25  t12 = 3.0/8.0+t10-t11;
26  t13 = 5.0/2.0*t4;
27  t15 = t13-3.0/2.0*eta;
28  t17 = t12*t15/2.0;
29  t19 = 3.0/4.0*xi;
30  t20 = 15.0/8.0*t8;
31  t21 = t8*xi;
32  t22 = 5.0/4.0*t21;
33  t23 = 35.0/16.0*t9;
34  t24 = 5.0/2.0*t21;
35  t26 = t24-3.0/2.0*xi;
36  t27 = 35.0/8.0*t6;
37  t28 = 15.0/4.0*t2;
38  t29 = 3.0/8.0+t27-t28;
39  t31 = t26*t29/2.0;
40  t35 = xi/4.0;
41  t36 = xi*eta;
42  t37 = 3.0/4.0*t36;
43  t38 = xi*t2;
44  t39 = 3.0/4.0*t38;
45  t40 = xi*t4;
46  t41 = 5.0/4.0*t40;
47  t43 = -1.0/2.0+3.0/2.0*t2;
48  t44 = t26*t43;
49  t45 = t44/2.0;
50  t46 = t26*t15;
51  t47 = t46/4.0;
52  t54 = (63.0/8.0*t9*xi-35.0/4.0*t21+15.0/8.0*xi)*t15/4.0;
53  t61 = t26*(63.0/8.0*t6*eta-35.0/4.0*t4+15.0/8.0*eta)/4.0;
54  t63 = eta/4.0;
55  t64 = t8*eta;
56  t65 = 3.0/4.0*t64;
57  t66 = t21*eta;
58  t67 = 5.0/4.0*t66;
59  t69 = -1.0/2.0+3.0/2.0*t8;
60  t70 = t69*t15;
61  t71 = t70/2.0;
62  t75 = 3.0/16.0*t8;
63  t76 = 3.0/16.0*t2;
64  t77 = t8*t2;
65  t78 = 9.0/16.0*t77;
66  t79 = t12*t43;
67  t80 = t79/4.0;
68  t81 = t69*t29;
69  t82 = t81/4.0;
70  t100 = 9.0/8.0*t77;
71  t101 = t79/2.0;
72  t102 = t81/2.0;
73 
74  values[0] = 3.0/16.0+t1-t3-t5+t7+t17;
75  values[1] = 3.0/16.0-t19-t20+t22+t23-t31;
76  values[2] = 3.0/16.0-t1-t3+t5+t7-t17;
77  values[3] = 3.0/16.0+t19-t20-t22+t23+t31;
78  values[4] = -t35+t37+t39-t41-t45+t47+t31+t54-t61;
79  values[5] = -t63-t37+t65+t67-t71-t47+t17+t54-t61;
80  values[6] = t35+t37-t39-t41+t45+t47-t31+t54-t61;
81  values[7] = t63-t37-t65+t67+t71-t47-t17+t54-t61;
82  values[8] = 1.0/16.0-t75-t76+t78-t71-t80+t82+t17;
83  values[9] = 1.0/16.0-t75-t76+t78+t45+t80-t82-t31;
84  values[10] = 1.0/16.0-t75-t76+t78+t71-t80+t82-t17;
85  values[11] = 1.0/16.0-t75-t76+t78-t45+t80-t82+t31;
86  values[12] = -t47+t31+t54-t61;
87  values[13] = t47+t17+t54-t61;
88  values[14] = -t47-t31+t54-t61;
89  values[15] = t47-t17+t54-t61;
90  values[16] = 1.0/4.0+t11+t28-t10-t27;
91  values[17] = 3.0*xi-t24-3.0/2.0*t38+t44;
92  values[18] = 3.0*eta-3.0/2.0*t64-t13+t70;
93  values[19] = -1.0+45.0/8.0*t8+3.0/8.0*t2-t10-t100+t101-t102;
94  values[20] = 4.0*t36-5.0/2.0*t66-5.0/2.0*t40+t46;
95  values[21] = -1.0+3.0/8.0*t8+45.0/8.0*t2-t100-t27-t101+t102;
96 }
97 
98 static void N_Q_Q4_2D_DeriveXi(double xi, double eta, double *values)
99 {
100  double t1, t2, t3, t5, t6, t7, t8, t10, t12, t13, t14, t15, t16, t17;
101  double t18, t21, t23, t26, t27, t28, t29, t30, t31, t32, t33, t34, t35;
102  double t40, t47, t49, t50, t51, t52, t53, t54, t58, t59, t60, t61, t62;
103  double t63, t64, t76, t77, t78;
104 
105  t1 = xi*xi;
106  t2 = t1*xi;
107  t3 = 35.0/2.0*t2;
108  t5 = t3-15.0/2.0*xi;
109  t6 = eta*eta;
110  t7 = t6*eta;
111  t8 = 5.0/2.0*t7;
112  t10 = t8-3.0/2.0*eta;
113  t12 = t5*t10/2.0;
114  t13 = 15.0/4.0*xi;
115  t14 = 15.0/4.0*t1;
116  t15 = 35.0/4.0*t2;
117  t16 = 15.0/2.0*t1;
118  t17 = t16-3.0/2.0;
119  t18 = t6*t6;
120  t21 = 3.0/8.0+35.0/8.0*t18-15.0/4.0*t6;
121  t23 = t17*t21/2.0;
122  t26 = 3.0/4.0*eta;
123  t27 = 3.0/4.0*t6;
124  t28 = 5.0/4.0*t7;
125  t29 = 3.0/2.0*t6;
126  t30 = -1.0/2.0+t29;
127  t31 = t17*t30;
128  t32 = t31/2.0;
129  t33 = t17*t10;
130  t34 = t33/4.0;
131  t35 = t1*t1;
132  t40 = (315.0/8.0*t35-105.0/4.0*t1+15.0/8.0)*t10/4.0;
133  t47 = t17*(63.0/8.0*t18*eta-35.0/4.0*t7+15.0/8.0*eta)/4.0;
134  t49 = xi*eta;
135  t50 = 3.0/2.0*t49;
136  t51 = t1*eta;
137  t52 = 15.0/4.0*t51;
138  t53 = xi*t10;
139  t54 = 3.0/2.0*t53;
140  t58 = 3.0/8.0*xi;
141  t59 = xi*t6;
142  t60 = 9.0/8.0*t59;
143  t61 = t5*t30;
144  t62 = t61/4.0;
145  t63 = xi*t21;
146  t64 = 3.0/4.0*t63;
147  t76 = 9.0/4.0*t59;
148  t77 = t61/2.0;
149  t78 = 3.0/2.0*t63;
150 
151  values[0] = t12;
152  values[1] = -3.0/4.0-t13+t14+t15-t23;
153  values[2] = -t12;
154  values[3] = 3.0/4.0-t13-t14+t15+t23;
155  values[4] = -1.0/4.0+t26+t27-t28-t32+t34+t23+t40-t47;
156  values[5] = -t26+t50+t52-t54-t34+t12+t40-t47;
157  values[6] = 1.0/4.0+t26-t27-t28+t32+t34-t23+t40-t47;
158  values[7] = -t26-t50+t52+t54-t34-t12+t40-t47;
159  values[8] = -t58+t60-t54-t62+t64+t12;
160  values[9] = -t58+t60+t32+t62-t64-t23;
161  values[10] = -t58+t60+t54-t62+t64-t12;
162  values[11] = -t58+t60-t32+t62-t64+t23;
163  values[12] = -t34+t23+t40-t47;
164  values[13] = t34+t12+t40-t47;
165  values[14] = -t34-t23+t40-t47;
166  values[15] = t34-t12+t40-t47;
167  values[16] = -t5;
168  values[17] = 3.0-t16-t29+t31;
169  values[18] = -3.0*t49+3.0*t53;
170  values[19] = 45.0/4.0*xi-t3-t76+t77-t78;
171  values[20] = 4.0*eta-15.0/2.0*t51-t8+t33;
172  values[21] = 3.0/4.0*xi-t76-t77+t78;
173 }
174 
175 static void N_Q_Q4_2D_DeriveEta(double xi, double eta, double *values)
176 {
177  double t1, t2, t3, t4, t5, t6, t7, t10, t11, t12, t14, t16, t17, t19;
178  double t20, t22, t24, t26, t27, t28, t29, t30, t31, t32, t33, t34, t41;
179  double t42, t47, t49, t50, t51, t52, t53, t54, t58, t59, t60, t61, t62;
180  double t63, t64, t76, t77, t78;
181 
182  t1 = 15.0/4.0*eta;
183  t2 = eta*eta;
184  t3 = 15.0/4.0*t2;
185  t4 = t2*eta;
186  t5 = 35.0/4.0*t4;
187  t6 = xi*xi;
188  t7 = t6*t6;
189  t10 = 3.0/8.0+35.0/8.0*t7-15.0/4.0*t6;
190  t11 = 15.0/2.0*t2;
191  t12 = t11-3.0/2.0;
192  t14 = t10*t12/2.0;
193  t16 = xi*t6;
194  t17 = 5.0/2.0*t16;
195  t19 = t17-3.0/2.0*xi;
196  t20 = 35.0/2.0*t4;
197  t22 = t20-15.0/2.0*eta;
198  t24 = t19*t22/2.0;
199  t26 = 3.0/4.0*xi;
200  t27 = xi*eta;
201  t28 = 3.0/2.0*t27;
202  t29 = xi*t2;
203  t30 = 15.0/4.0*t29;
204  t31 = t19*eta;
205  t32 = 3.0/2.0*t31;
206  t33 = t19*t12;
207  t34 = t33/4.0;
208  t41 = (63.0/8.0*t7*xi-35.0/4.0*t16+15.0/8.0*xi)*t12/4.0;
209  t42 = t2*t2;
210  t47 = t19*(315.0/8.0*t42-105.0/4.0*t2+15.0/8.0)/4.0;
211  t49 = 3.0/4.0*t6;
212  t50 = 5.0/4.0*t16;
213  t51 = 3.0/2.0*t6;
214  t52 = -1.0/2.0+t51;
215  t53 = t52*t12;
216  t54 = t53/2.0;
217  t58 = 3.0/8.0*eta;
218  t59 = t6*eta;
219  t60 = 9.0/8.0*t59;
220  t61 = t10*eta;
221  t62 = 3.0/4.0*t61;
222  t63 = t52*t22;
223  t64 = t63/4.0;
224  t76 = 9.0/4.0*t59;
225  t77 = 3.0/2.0*t61;
226  t78 = t63/2.0;
227 
228  values[0] = 3.0/4.0-t1-t3+t5+t14;
229  values[1] = -t24;
230  values[2] = -3.0/4.0-t1+t3+t5-t14;
231  values[3] = t24;
232  values[4] = t26+t28-t30-t32+t34+t24+t41-t47;
233  values[5] = -1.0/4.0-t26+t49+t50-t54-t34+t14+t41-t47;
234  values[6] = t26-t28-t30+t32+t34-t24+t41-t47;
235  values[7] = 1.0/4.0-t26-t49+t50+t54-t34-t14+t41-t47;
236  values[8] = -t58+t60-t54-t62+t64+t14;
237  values[9] = -t58+t60+t32+t62-t64-t24;
238  values[10] = -t58+t60+t54-t62+t64-t14;
239  values[11] = -t58+t60-t32+t62-t64+t24;
240  values[12] = -t34+t24+t41-t47;
241  values[13] = t34+t14+t41-t47;
242  values[14] = -t34-t24+t41-t47;
243  values[15] = t34-t14+t41-t47;
244  values[16] = -t22;
245  values[17] = -3.0*t27+3.0*t31;
246  values[18] = 3.0-t51-t11+t53;
247  values[19] = 3.0/4.0*eta-t76+t77-t78;
248  values[20] = 4.0*xi-t17-15.0/2.0*t29+t33;
249  values[21] = 45.0/4.0*eta-t76-t20-t77+t78;
250 }
251 
252 static void N_Q_Q4_2D_DeriveXiXi(double xi, double eta, double *values)
253 {
254  double t1, t2, t3, t4, t5, t8, t10, t11, t12, t13, t18, t22, t23, t24;
255  double t25, t26, t32, t39, t41, t42, t43, t44, t48, t49, t50, t51, t52;
256  double t54, t65, t66;
257 
258  t1 = xi*xi;
259  t2 = 105.0/2.0*t1;
260  t3 = t2-15.0/2.0;
261  t4 = eta*eta;
262  t5 = t4*eta;
263  t8 = 5.0/2.0*t5-3.0/2.0*eta;
264  t10 = t3*t8/2.0;
265  t11 = 15.0/2.0*xi;
266  t12 = 105.0/4.0*t1;
267  t13 = t4*t4;
268  t18 = 15.0/2.0*xi*(3.0/8.0+35.0/8.0*t13-15.0/4.0*t4);
269  t22 = -1.0/2.0+3.0/2.0*t4;
270  t23 = xi*t22;
271  t24 = 15.0/2.0*t23;
272  t25 = t8*xi;
273  t26 = 15.0/4.0*t25;
274  t32 = (315.0/2.0*t1*xi-105.0/2.0*xi)*t8/4.0;
275  t39 = 15.0/4.0*xi*(63.0/8.0*t13*eta-35.0/4.0*t5+15.0/8.0*eta);
276  t41 = 15.0/4.0*eta;
277  t42 = xi*eta;
278  t43 = 15.0/2.0*t42;
279  t44 = 15.0/4.0*t5;
280  t48 = 27.0/16.0*t4;
281  t49 = 9.0/4.0*eta;
282  t50 = t3*t22;
283  t51 = t50/4.0;
284  t52 = 105.0/32.0*t13;
285  t54 = 63.0/16.0*t4;
286  t65 = t50/2.0;
287  t66 = 105.0/16.0*t13;
288 
289  values[0] = t10;
290  values[1] = -15.0/4.0+t11+t12-t18;
291  values[2] = -t10;
292  values[3] = -15.0/4.0-t11+t12+t18;
293  values[4] = -t24+t26+t18+t32-t39;
294  values[5] = t41+t43-t44-t26+t10+t32-t39;
295  values[6] = t24+t26-t18+t32-t39;
296  values[7] = -t41+t43+t44-t26-t10+t32-t39;
297  values[8] = -3.0/32.0-t48-t44+t49-t51+t52+t10;
298  values[9] = -21.0/32.0+t54+t24+t51-t52-t18;
299  values[10] = -3.0/32.0-t48+t44-t49-t51+t52-t10;
300  values[11] = -21.0/32.0+t54-t24+t51-t52+t18;
301  values[12] = -t26+t18+t32-t39;
302  values[13] = t26+t10+t32-t39;
303  values[14] = -t26-t18+t32-t39;
304  values[15] = t26-t10+t32-t39;
305  values[16] = -t3;
306  values[17] = -15.0*xi+15.0*t23;
307  values[18] = -15.0/2.0*eta+15.0/2.0*t5;
308  values[19] = 171.0/16.0-t2+27.0/8.0*t4+t65-t66;
309  values[20] = -15.0*t42+15.0*t25;
310  values[21] = 21.0/16.0-63.0/8.0*t4-t65+t66;
311 }
312 
313 static void N_Q_Q4_2D_DeriveXiEta(double xi, double eta, double *values)
314 {
315  double t1, t5, t6, t7, t8, t10, t11, t12, t16, t18, t19, t20, t21, t22;
316  double t23, t24, t25, t30, t31, t36, t38, t39, t40, t41, t45, t46, t47;
317  double t48, t49, t50, t61, t62, t63;
318 
319  t1 = xi*xi;
320  t5 = 35.0/2.0*t1*xi-15.0/2.0*xi;
321  t6 = eta*eta;
322  t7 = 15.0/2.0*t6;
323  t8 = t7-3.0/2.0;
324  t10 = t5*t8/2.0;
325  t11 = 15.0/2.0*t1;
326  t12 = t11-3.0/2.0;
327  t16 = 35.0/2.0*t6*eta-15.0/2.0*eta;
328  t18 = t12*t16/2.0;
329  t19 = 3.0/2.0*eta;
330  t20 = 15.0/4.0*t6;
331  t21 = t12*eta;
332  t22 = 3.0/2.0*t21;
333  t23 = t12*t8;
334  t24 = t23/4.0;
335  t25 = t1*t1;
336  t30 = (315.0/8.0*t25-105.0/4.0*t1+15.0/8.0)*t8/4.0;
337  t31 = t6*t6;
338  t36 = t12*(315.0/8.0*t31-105.0/4.0*t6+15.0/8.0)/4.0;
339  t38 = 3.0/2.0*xi;
340  t39 = 15.0/4.0*t1;
341  t40 = t8*xi;
342  t41 = 3.0/2.0*t40;
343  t45 = xi*eta;
344  t46 = 9.0/4.0*t45;
345  t47 = t5*eta;
346  t48 = 3.0/4.0*t47;
347  t49 = xi*t16;
348  t50 = 3.0/4.0*t49;
349  t61 = 9.0/2.0*t45;
350  t62 = 3.0/2.0*t47;
351  t63 = 3.0/2.0*t49;
352 
353  values[0] = t10;
354  values[1] = -t18;
355  values[2] = -t10;
356  values[3] = t18;
357  values[4] = 3.0/4.0+t19-t20-t22+t24+t18+t30-t36;
358  values[5] = -3.0/4.0+t38+t39-t41-t24+t10+t30-t36;
359  values[6] = 3.0/4.0-t19-t20+t22+t24-t18+t30-t36;
360  values[7] = -3.0/4.0-t38+t39+t41-t24-t10+t30-t36;
361  values[8] = t46-t41-t48+t50+t10;
362  values[9] = t46+t22+t48-t50-t18;
363  values[10] = t46+t41-t48+t50-t10;
364  values[11] = t46-t22+t48-t50+t18;
365  values[12] = -t24+t18+t30-t36;
366  values[13] = t24+t10+t30-t36;
367  values[14] = -t24-t18+t30-t36;
368  values[15] = t24-t10+t30-t36;
369  values[16] = 0.0;
370  values[17] = -3.0*eta+3.0*t21;
371  values[18] = -3.0*xi+3.0*t40;
372  values[19] = -t61+t62-t63;
373  values[20] = 4.0-t11-t7+t23;
374  values[21] = -t61-t62+t63;
375 }
376 
377 static void N_Q_Q4_2D_DeriveEtaEta(double xi, double eta, double *values)
378 {
379  double t1, t2, t3, t4, t5, t10, t12, t15, t16, t17, t19, t21, t22, t23;
380  double t24, t25, t26, t33, t39, t42, t43, t44, t48, t49, t50, t51, t53;
381  double t54, t65, t66;
382 
383  t1 = 15.0/2.0*eta;
384  t2 = eta*eta;
385  t3 = 105.0/4.0*t2;
386  t4 = xi*xi;
387  t5 = t4*t4;
388  t10 = 15.0/2.0*(3.0/8.0+35.0/8.0*t5-15.0/4.0*t4)*eta;
389  t12 = t4*xi;
390  t15 = 5.0/2.0*t12-3.0/2.0*xi;
391  t16 = 105.0/2.0*t2;
392  t17 = t16-15.0/2.0;
393  t19 = t15*t17/2.0;
394  t21 = 15.0/4.0*xi;
395  t22 = xi*eta;
396  t23 = 15.0/2.0*t22;
397  t24 = 15.0/4.0*t12;
398  t25 = t15*eta;
399  t26 = 15.0/4.0*t25;
400  t33 = 15.0/4.0*(63.0/8.0*t5*xi-35.0/4.0*t12+15.0/8.0*xi)*eta;
401  t39 = t15*(315.0/2.0*t2*eta-105.0/2.0*eta)/4.0;
402  t42 = -1.0/2.0+3.0/2.0*t4;
403  t43 = t42*eta;
404  t44 = 15.0/2.0*t43;
405  t48 = 63.0/16.0*t4;
406  t49 = 105.0/32.0*t5;
407  t50 = t42*t17;
408  t51 = t50/4.0;
409  t53 = 27.0/16.0*t4;
410  t54 = 9.0/4.0*xi;
411  t65 = 105.0/16.0*t5;
412  t66 = t50/2.0;
413 
414  values[0] = -15.0/4.0-t1+t3+t10;
415  values[1] = -t19;
416  values[2] = -15.0/4.0+t1+t3-t10;
417  values[3] = t19;
418  values[4] = t21-t23-t24+t26+t19+t33-t39;
419  values[5] = -t44-t26+t10+t33-t39;
420  values[6] = -t21-t23+t24+t26-t19+t33-t39;
421  values[7] = t44-t26-t10+t33-t39;
422  values[8] = -21.0/32.0+t48-t44-t49+t51+t10;
423  values[9] = -3.0/32.0-t53+t24-t54+t49-t51-t19;
424  values[10] = -21.0/32.0+t48+t44-t49+t51-t10;
425  values[11] = -3.0/32.0-t53-t24+t54+t49-t51+t19;
426  values[12] = -t26+t19+t33-t39;
427  values[13] = t26+t10+t33-t39;
428  values[14] = -t26-t19+t33-t39;
429  values[15] = t26-t10+t33-t39;
430  values[16] = -t17;
431  values[17] = -15.0/2.0*xi+15.0/2.0*t12;
432  values[18] = -15.0*eta+15.0*t43;
433  values[19] = 21.0/16.0-63.0/8.0*t4+t65-t66;
434  values[20] = -15.0*t22+15.0*t25;
435  values[21] = 171.0/16.0+27.0/8.0*t4-t16-t65+t66;
436 }
437 
438 static int N_Q_Q4_2D_ChangeJ0[2] = { 4, 12 };
439 static int N_Q_Q4_2D_ChangeJ1[2] = { 5, 13 };
440 static int N_Q_Q4_2D_ChangeJ2[2] = { 6, 14 };
441 static int N_Q_Q4_2D_ChangeJ3[2] = { 7, 15 };
442 
443 static int *N_Q_Q4_2D_Change[4] = { N_Q_Q4_2D_ChangeJ0, N_Q_Q4_2D_ChangeJ1,
444  N_Q_Q4_2D_ChangeJ2, N_Q_Q4_2D_ChangeJ3 };
445 // ***********************************************************************
446 
447 TBaseFunct2D *BF_N_Q_Q4_2D_Obj = new TBaseFunct2D
448  (22, BF_N_Q_Q4_2D, BFUnitSquare,
449  N_Q_Q4_2D_Funct, N_Q_Q4_2D_DeriveXi,
450  N_Q_Q4_2D_DeriveEta, N_Q_Q4_2D_DeriveXiXi,
451  N_Q_Q4_2D_DeriveXiEta, N_Q_Q4_2D_DeriveEtaEta, 5, 4,
452  2, N_Q_Q4_2D_Change);
Definition: BaseFunct2D.h:27