ParMooN
 All Classes Functions Variables Friends Pages
BF_D_Q_P7_2D.h
1 // ***********************************************************************
2 // P7 element, discontinous, 2D, quadrilateral
3 // ***********************************************************************
4 
5 // base function values
6 static void D_Q_P7_2D_Funct(double xi, double eta, double *values)
7 {
8  double t1 = xi*xi;
9  double t4 = xi*eta;
10  double t5 = eta*eta;
11  double t8 = t1*xi;
12  double t13 = -1.0+3.0*t1;
13  double t14 = t13*eta;
14  double t17 = -1.0+3.0*t5;
15  double t20 = t5*eta;
16  double t24 = t1*t1;
17  double t30 = xi*(5.0*t1-3.0);
18  double t36 = 5.0*t5-3.0;
19  double t39 = t5*t5;
20  double t43 = t24*xi;
21  double t50 = 3.0+35.0*t24-30.0*t1;
22  double t51 = t50*eta;
23  double t59 = 3.0+35.0*t39-30.0*t5;
24  double t62 = t39*eta;
25  double t67 = t24*t1;
26  double t75 = xi*(63.0*t24-70.0*t1+15.0);
27  double t87 = 63.0*t39-70.0*t5+15.0;
28  double t90 = t39*t5;
29 
30  values[0] = 1.0;
31  values[1] = xi;
32  values[2] = eta;
33  values[3] = -1.0/2.0+3.0/2.0*t1;
34  values[4] = t4;
35  values[5] = -1.0/2.0+3.0/2.0*t5;
36  values[6] = 5.0/2.0*t8-3.0/2.0*xi;
37  values[7] = t14/2.0;
38  values[8] = xi*t17/2.0;
39  values[9] = 5.0/2.0*t20-3.0/2.0*eta;
40  values[10] = 3.0/8.0+35.0/8.0*t24-15.0/4.0*t1;
41  values[11] = t30*eta/2.0;
42  values[12] = t13*t17/4.0;
43  values[13] = t4*t36/2.0;
44  values[14] = 3.0/8.0+35.0/8.0*t39-15.0/4.0*t5;
45  values[15] = 63.0/8.0*t43-35.0/4.0*t8+15.0/8.0*xi;
46  values[16] = t51/8.0;
47  values[17] = t30*t17/4.0;
48  values[18] = t14*t36/4.0;
49  values[19] = xi*t59/8.0;
50  values[20] = 63.0/8.0*t62-35.0/4.0*t20+15.0/8.0*eta;
51  values[21] = -5.0/16.0+231.0/16.0*t67-315.0/16.0*t24+105.0/16.0*t1;
52  values[22] = t75*eta/8.0;
53  values[23] = t50*t17/16.0;
54  values[24] = t30*eta*t36/4.0;
55  values[25] = t13*t59/16.0;
56  values[26] = t4*t87/8.0;
57  values[27] = -5.0/16.0+231.0/16.0*t90-315.0/16.0*t39+105.0/16.0*t5;
58  values[28] = 429.0/16.0*t24*t8-693.0/16.0*t43+315.0/16.0*t8-35.0/16.0*xi;
59  values[29] = (-5.0+231.0*t67-315.0*t24+105.0*t1)*eta/16.0;
60  values[30] = t75*t17/16.0;
61  values[31] = t51*t36/16.0;
62  values[32] = t30*t59/16.0;
63  values[33] = t14*t87/16.0;
64  values[34] = xi*(-5.0+231.0*t90-315.0*t39+105.0*t5)/16.0;
65  values[35] = 429.0/16.0*t39*t20-693.0/16.0*t62+315.0/16.0*t20-35.0/16.0*eta;
66 }
67 
68 // values of the derivatives in xi direction
69 static void D_Q_P7_2D_DeriveXi(double xi, double eta, double *values)
70 {
71  double t2 = xi*xi;
72  double t5 = xi*eta;
73  double t7 = eta*eta;
74  double t10 = t2*xi;
75  double t14 = t2*eta;
76  double t19 = -1.0+3.0*t7;
77  double t23 = 5.0*t7-3.0;
78  double t24 = eta*t23;
79  double t26 = t2*t2;
80  double t32 = xi*(7.0*t2-3.0);
81  double t36 = t2*t7;
82  double t42 = t7*t7;
83  double t58 = t7*eta;
84  double t72 = 63.0*t42-70.0*t7+15.0;
85 
86  values[0] = 0.0;
87  values[1] = 1.0;
88  values[2] = 0.0;
89  values[3] = 3.0*xi;
90  values[4] = eta;
91  values[5] = 0.0;
92  values[6] = 15.0/2.0*t2-3.0/2.0;
93  values[7] = 3.0*t5;
94  values[8] = -1.0/2.0+3.0/2.0*t7;
95  values[9] = 0.0;
96  values[10] = 35.0/2.0*t10-15.0/2.0*xi;
97  values[11] = 15.0/2.0*t14-3.0/2.0*eta;
98  values[12] = 3.0/2.0*xi*t19;
99  values[13] = t24/2.0;
100  values[14] = 0.0;
101  values[15] = 315.0/8.0*t26-105.0/4.0*t2+15.0/8.0;
102  values[16] = 5.0/2.0*t32*eta;
103  values[17] = -15.0/4.0*t2+45.0/4.0*t36+3.0/4.0-9.0/4.0*t7;
104  values[18] = 3.0/2.0*t5*t23;
105  values[19] = 3.0/8.0+35.0/8.0*t42-15.0/4.0*t7;
106  values[20] = 0.0;
107  values[21] = 693.0/8.0*t26*xi-315.0/4.0*t10+105.0/8.0*xi;
108  values[22] = 315.0/8.0*eta*t26-105.0/4.0*t14+15.0/8.0*eta;
109  values[23] = 5.0/4.0*t32*t19;
110  values[24] = 75.0/4.0*t2*t58-45.0/4.0*t14-15.0/4.0*t58+9.0/4.0*eta;
111  values[25] = 3.0/8.0*xi*(3.0+35.0*t42-30.0*t7);
112  values[26] = eta*t72/8.0;
113  values[27] = 0.0;
114  values[28] = 3003.0/16.0*t26*t2-3465.0/16.0*t26+945.0/16.0*t2-35.0/16.0;
115  values[29] = 21.0/8.0*xi*(33.0*t26-30.0*t2+5.0)*eta;
116  values[30] = -315.0/16.0*t26+945.0/16.0*t26*t7+105.0/8.0*t2-315.0/8.0*t36-15.0/16.0+45.0/16.0*t7;
117  values[31] = 5.0/4.0*t32*t24;
118  values[32] = 45.0/16.0*t2+525.0/16.0*t2*t42-225.0/8.0*t36-9.0/16.0-105.0/16.0*t42+45.0/8.0*t7;
119  values[33] = 3.0/8.0*t5*t72;
120  values[34] = -5.0/16.0+231.0/16.0*t42*t7-315.0/16.0*t42+105.0/16.0*t7;
121  values[35] = 0.0;
122 }
123 
124 // values of the derivatives in eta direction
125 static void D_Q_P7_2D_DeriveEta(double xi, double eta, double *values)
126 {
127  double t2 = xi*xi;
128  double t5 = xi*eta;
129  double t7 = eta*eta;
130  double t12 = xi*(5.0*t2-3.0);
131  double t16 = (-1.0+3.0*t2)*eta;
132  double t18 = xi*t7;
133  double t22 = t7*eta;
134  double t26 = t2*t2;
135  double t33 = t2*t7;
136  double t38 = 7.0*t7-3.0;
137  double t41 = t7*t7;
138  double t48 = xi*(63.0*t26-70.0*t2+15.0);
139  double t55 = t2*xi;
140 
141  values[0] = 0.0;
142  values[1] = 0.0;
143  values[2] = 1.0;
144  values[3] = 0.0;
145  values[4] = xi;
146  values[5] = 3.0*eta;
147  values[6] = 0.0;
148  values[7] = -1.0/2.0+3.0/2.0*t2;
149  values[8] = 3.0*t5;
150  values[9] = 15.0/2.0*t7-3.0/2.0;
151  values[10] = 0.0;
152  values[11] = t12/2.0;
153  values[12] = 3.0/2.0*t16;
154  values[13] = 15.0/2.0*t18-3.0/2.0*xi;
155  values[14] = 35.0/2.0*t22-15.0/2.0*eta;
156  values[15] = 0.0;
157  values[16] = 3.0/8.0+35.0/8.0*t26-15.0/4.0*t2;
158  values[17] = 3.0/2.0*t12*eta;
159  values[18] = -15.0/4.0*t7+3.0/4.0+45.0/4.0*t33-9.0/4.0*t2;
160  values[19] = 5.0/2.0*t5*t38;
161  values[20] = 315.0/8.0*t41-105.0/4.0*t7+15.0/8.0;
162  values[21] = 0.0;
163  values[22] = t48/8.0;
164  values[23] = 3.0/8.0*(3.0+35.0*t26-30.0*t2)*eta;
165  values[24] = 75.0/4.0*t55*t7-15.0/4.0*t55-45.0/4.0*t18+9.0/4.0*xi;
166  values[25] = 5.0/4.0*t16*t38;
167  values[26] = 315.0/8.0*xi*t41-105.0/4.0*t18+15.0/8.0*xi;
168  values[27] = 693.0/8.0*t41*eta-315.0/4.0*t22+105.0/8.0*eta;
169  values[28] = 0.0;
170  values[29] = -5.0/16.0+231.0/16.0*t26*t2-315.0/16.0*t26+105.0/16.0*t2;
171  values[30] = 3.0/8.0*t48*eta;
172  values[31] = 45.0/16.0*t7-9.0/16.0+525.0/16.0*t26*t7-105.0/16.0*t26-225.0/8.0*t33+45.0/8.0*t2;
173  values[32] = 5.0/4.0*t12*eta*t38;
174  values[33] = -315.0/16.0*t41+105.0/8.0*t7-15.0/16.0+945.0/16.0*t2*t41-315.0/8.0*t33+45.0/16.0*t2;
175  values[34] = 21.0/8.0*t5*(33.0*t41-30.0*t7+5.0);
176  values[35] = 3003.0/16.0*t41*t7-3465.0/16.0*t41+945.0/16.0*t7-35.0/16.0;
177 }
178 
179 // values of the derivatives in xi-xi direction
180 static void D_Q_P7_2D_DeriveXiXi(double xi, double eta,
181  double *values)
182 {
183  double t3 = xi*xi;
184  double t6 = xi*eta;
185  double t8 = eta*eta;
186  double t11 = t3*xi;
187  double t15 = t3*eta;
188  double t20 = xi*t8;
189  double t27 = t3*t3;
190  double t38 = 45.0/4.0*t8;
191  double t40 = t8*eta;
192  double t45 = t8*t8;
193 
194  values[0] = 0.0;
195  values[1] = 0.0;
196  values[2] = 0.0;
197  values[3] = 3.0;
198  values[4] = 0.0;
199  values[5] = 0.0;
200  values[6] = 15.0*xi;
201  values[7] = 3.0*eta;
202  values[8] = 0.0;
203  values[9] = 0.0;
204  values[10] = 105.0/2.0*t3-15.0/2.0;
205  values[11] = 15.0*t6;
206  values[12] = -3.0/2.0+9.0/2.0*t8;
207  values[13] = 0.0;
208  values[14] = 0.0;
209  values[15] = 315.0/2.0*t11-105.0/2.0*xi;
210  values[16] = 105.0/2.0*t15-15.0/2.0*eta;
211  values[17] = -15.0/2.0*xi+45.0/2.0*t20;
212  values[18] = 3.0/2.0*eta*(5.0*t8-3.0);
213  values[19] = 0.0;
214  values[20] = 0.0;
215  values[21] = 3465.0/8.0*t27-945.0/4.0*t3+105.0/8.0;
216  values[22] = 315.0/2.0*eta*t11-105.0/2.0*t6;
217  values[23] = -105.0/4.0*t3+315.0/4.0*t3*t8+15.0/4.0-t38;
218  values[24] = 75.0/2.0*xi*t40-45.0/2.0*t6;
219  values[25] = 9.0/8.0+105.0/8.0*t45-t38;
220  values[26] = 0.0;
221  values[27] = 0.0;
222  values[28] = 9009.0/8.0*t27*xi-3465.0/4.0*t11+945.0/8.0*xi;
223  values[29] = 3465.0/8.0*eta*t27-945.0/4.0*t15+105.0/8.0*eta;
224  values[30] = -315.0/4.0*t11+945.0/4.0*t11*t8+105.0/4.0*xi-315.0/4.0*t20;
225  values[31] = 525.0/4.0*t3*t40-315.0/4.0*t15-75.0/4.0*t40+45.0/4.0*eta;
226  values[32] = 45.0/8.0*xi+525.0/8.0*xi*t45-225.0/4.0*t20;
227  values[33] = 3.0/8.0*eta*(63.0*t45-70.0*t8+15.0);
228  values[34] = 0.0;
229  values[35] = 0.0;
230 }
231 
232 // values of the derivatives in xi-eta direction
233 static void D_Q_P7_2D_DeriveXiEta(double xi, double eta,
234  double *values)
235 {
236  double t3 = xi*xi;
237  double t6 = xi*eta;
238  double t8 = eta*eta;
239  double t13 = xi*(7.0*t3-3.0);
240  double t15 = t3*eta;
241  double t19 = xi*t8;
242  double t23 = t8*eta;
243  double t27 = t3*t3;
244  double t42 = t8*t8;
245  double t56 = t3*xi;
246 
247  values[0] = 0.0;
248  values[1] = 0.0;
249  values[2] = 0.0;
250  values[3] = 0.0;
251  values[4] = 1.0;
252  values[5] = 0.0;
253  values[6] = 0.0;
254  values[7] = 3.0*xi;
255  values[8] = 3.0*eta;
256  values[9] = 0.0;
257  values[10] = 0.0;
258  values[11] = 15.0/2.0*t3-3.0/2.0;
259  values[12] = 9.0*t6;
260  values[13] = 15.0/2.0*t8-3.0/2.0;
261  values[14] = 0.0;
262  values[15] = 0.0;
263  values[16] = 5.0/2.0*t13;
264  values[17] = 45.0/2.0*t15-9.0/2.0*eta;
265  values[18] = 45.0/2.0*t19-9.0/2.0*xi;
266  values[19] = 35.0/2.0*t23-15.0/2.0*eta;
267  values[20] = 0.0;
268  values[21] = 0.0;
269  values[22] = 315.0/8.0*t27-105.0/4.0*t3+15.0/8.0;
270  values[23] = 15.0/2.0*t13*eta;
271  values[24] = 225.0/4.0*t3*t8-45.0/4.0*t3-45.0/4.0*t8+9.0/4.0;
272  values[25] = 15.0/2.0*t6*(7.0*t8-3.0);
273  values[26] = 315.0/8.0*t42-105.0/4.0*t8+15.0/8.0;
274  values[27] = 0.0;
275  values[28] = 0.0;
276  values[29] = 21.0/8.0*xi*(33.0*t27-30.0*t3+5.0);
277  values[30] = 945.0/8.0*eta*t27-315.0/4.0*t15+45.0/8.0*eta;
278  values[31] = 525.0/4.0*t56*t8-105.0/4.0*t56-225.0/4.0*t19+45.0/4.0*xi;
279  values[32] = 525.0/4.0*t3*t23-225.0/4.0*t15-105.0/4.0*t23+45.0/4.0*eta;
280  values[33] = 945.0/8.0*xi*t42-315.0/4.0*t19+45.0/8.0*xi;
281  values[34] = 693.0/8.0*t42*eta-315.0/4.0*t23+105.0/8.0*eta;
282  values[35] = 0.0;
283 }
284 
285 // values of the derivatives in eta-eta direction
286 static void D_Q_P7_2D_DeriveEtaEta(double xi, double eta,
287  double *values)
288 {
289  double t3 = xi*xi;
290  double t6 = xi*eta;
291  double t8 = eta*eta;
292  double t16 = t3*eta;
293  double t19 = xi*t8;
294  double t23 = t8*eta;
295  double t27 = t3*t3;
296  double t29 = 45.0/4.0*t3;
297  double t31 = t3*xi;
298  double t44 = t8*t8;
299 
300  values[0] = 0.0;
301  values[1] = 0.0;
302  values[2] = 0.0;
303  values[3] = 0.0;
304  values[4] = 0.0;
305  values[5] = 3.0;
306  values[6] = 0.0;
307  values[7] = 0.0;
308  values[8] = 3.0*xi;
309  values[9] = 15.0*eta;
310  values[10] = 0.0;
311  values[11] = 0.0;
312  values[12] = 9.0/2.0*t3-3.0/2.0;
313  values[13] = 15.0*t6;
314  values[14] = 105.0/2.0*t8-15.0/2.0;
315  values[15] = 0.0;
316  values[16] = 0.0;
317  values[17] = 3.0/2.0*xi*(5.0*t3-3.0);
318  values[18] = -15.0/2.0*eta+45.0/2.0*t16;
319  values[19] = 105.0/2.0*t19-15.0/2.0*xi;
320  values[20] = 315.0/2.0*t23-105.0/2.0*eta;
321  values[21] = 0.0;
322  values[22] = 0.0;
323  values[23] = 9.0/8.0+105.0/8.0*t27-t29;
324  values[24] = 75.0/2.0*eta*t31-45.0/2.0*t6;
325  values[25] = -105.0/4.0*t8+15.0/4.0+315.0/4.0*t3*t8-t29;
326  values[26] = 315.0/2.0*xi*t23-105.0/2.0*t6;
327  values[27] = 3465.0/8.0*t44-945.0/4.0*t8+105.0/8.0;
328  values[28] = 0.0;
329  values[29] = 0.0;
330  values[30] = 3.0/8.0*xi*(63.0*t27-70.0*t3+15.0);
331  values[31] = 45.0/8.0*eta+525.0/8.0*eta*t27-225.0/4.0*t16;
332  values[32] = 525.0/4.0*t31*t8-75.0/4.0*t31-315.0/4.0*t19+45.0/4.0*xi;
333  values[33] = -315.0/4.0*t23+105.0/4.0*eta+945.0/4.0*t3*t23-315.0/4.0*t16;
334  values[34] = 3465.0/8.0*xi*t44-945.0/4.0*t19+105.0/8.0*xi;
335  values[35] = 9009.0/8.0*t44*eta-3465.0/4.0*t23+945.0/8.0*eta;
336 }
337 
338 // ***********************************************************************
339 
340 TBaseFunct2D *BF_D_Q_P7_2D_Obj = new TBaseFunct2D
341  (36, BF_D_Q_P7_2D, BFUnitSquare,
342  D_Q_P7_2D_Funct, D_Q_P7_2D_DeriveXi,
343  D_Q_P7_2D_DeriveEta, D_Q_P7_2D_DeriveXiXi,
344  D_Q_P7_2D_DeriveXiEta, D_Q_P7_2D_DeriveEtaEta, 7, 7,
345  0, NULL);
Definition: BaseFunct2D.h:27