ParMooN
 All Classes Functions Variables Friends Pages
BF_D_Q_P6_2D.h
1 // ***********************************************************************
2 // P6 element, discontinous, 2D, quadrilateral
3 // ***********************************************************************
4 
5 // base function values
6 static void D_Q_P6_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 t50 = 3.0+35.0*t24-30.0*t1;
21  double t59 = 3.0+35.0*t39-30.0*t5;
22 
23  values[0] = 1.0;
24  values[1] = xi;
25  values[2] = eta;
26  values[3] = -1.0/2.0+3.0/2.0*t1;
27  values[4] = t4;
28  values[5] = -1.0/2.0+3.0/2.0*t5;
29  values[6] = 5.0/2.0*t8-3.0/2.0*xi;
30  values[7] = t14/2.0;
31  values[8] = xi*t17/2.0;
32  values[9] = 5.0/2.0*t20-3.0/2.0*eta;
33  values[10] = 3.0/8.0+35.0/8.0*t24-15.0/4.0*t1;
34  values[11] = t30*eta/2.0;
35  values[12] = t13*t17/4.0;
36  values[13] = t4*t36/2.0;
37  values[14] = 3.0/8.0+35.0/8.0*t39-15.0/4.0*t5;
38  values[15] = 63.0/8.0*t24*xi-35.0/4.0*t8+15.0/8.0*xi;
39  values[16] = t50*eta/8.0;
40  values[17] = t30*t17/4.0;
41  values[18] = t14*t36/4.0;
42  values[19] = xi*t59/8.0;
43  values[20] = 63.0/8.0*t39*eta-35.0/4.0*t20+15.0/8.0*eta;
44  values[21] = -5.0/16.0+231.0/16.0*t24*t1-315.0/16.0*t24+105.0/16.0*t1;
45  values[22] = xi*(63.0*t24-70.0*t1+15.0)*eta/8.0;
46  values[23] = t50*t17/16.0;
47  values[24] = t30*eta*t36/4.0;
48  values[25] = t13*t59/16.0;
49  values[26] = t4*(63.0*t39-70.0*t5+15.0)/8.0;
50  values[27] = -5.0/16.0+231.0/16.0*t39*t5-315.0/16.0*t39+105.0/16.0*t5;
51 }
52 
53 // values of the derivatives in xi direction
54 static void D_Q_P6_2D_DeriveXi(double xi, double eta, double *values)
55 {
56  double t2 = xi*xi;
57  double t5 = xi*eta;
58  double t7 = eta*eta;
59  double t10 = t2*xi;
60  double t14 = t2*eta;
61  double t19 = -1.0+3.0*t7;
62  double t23 = 5.0*t7-3.0;
63  double t26 = t2*t2;
64  double t32 = xi*(7.0*t2-3.0);
65  double t42 = t7*t7;
66  double t58 = t7*eta;
67 
68  values[0] = 0.0;
69  values[1] = 1.0;
70  values[2] = 0.0;
71  values[3] = 3.0*xi;
72  values[4] = eta;
73  values[5] = 0.0;
74  values[6] = 15.0/2.0*t2-3.0/2.0;
75  values[7] = 3.0*t5;
76  values[8] = -1.0/2.0+3.0/2.0*t7;
77  values[9] = 0.0;
78  values[10] = 35.0/2.0*t10-15.0/2.0*xi;
79  values[11] = 15.0/2.0*t14-3.0/2.0*eta;
80  values[12] = 3.0/2.0*xi*t19;
81  values[13] = eta*t23/2.0;
82  values[14] = 0.0;
83  values[15] = 315.0/8.0*t26-105.0/4.0*t2+15.0/8.0;
84  values[16] = 5.0/2.0*t32*eta;
85  values[17] = -15.0/4.0*t2+45.0/4.0*t2*t7+3.0/4.0-9.0/4.0*t7;
86  values[18] = 3.0/2.0*t5*t23;
87  values[19] = 3.0/8.0+35.0/8.0*t42-15.0/4.0*t7;
88  values[20] = 0.0;
89  values[21] = 693.0/8.0*t26*xi-315.0/4.0*t10+105.0/8.0*xi;
90  values[22] = 315.0/8.0*eta*t26-105.0/4.0*t14+15.0/8.0*eta;
91  values[23] = 5.0/4.0*t32*t19;
92  values[24] = 75.0/4.0*t2*t58-45.0/4.0*t14-15.0/4.0*t58+9.0/4.0*eta;
93  values[25] = 3.0/8.0*xi*(3.0+35.0*t42-30.0*t7);
94  values[26] = eta*(63.0*t42-70.0*t7+15.0)/8.0;
95  values[27] = 0.0;
96 }
97 
98 // values of the derivatives in eta direction
99 static void D_Q_P6_2D_DeriveEta(double xi, double eta, double *values)
100 {
101  double t2 = xi*xi;
102  double t5 = xi*eta;
103  double t7 = eta*eta;
104  double t12 = xi*(5.0*t2-3.0);
105  double t16 = (-1.0+3.0*t2)*eta;
106  double t18 = xi*t7;
107  double t22 = t7*eta;
108  double t26 = t2*t2;
109  double t38 = 7.0*t7-3.0;
110  double t41 = t7*t7;
111  double t55 = t2*xi;
112 
113  values[0] = 0.0;
114  values[1] = 0.0;
115  values[2] = 1.0;
116  values[3] = 0.0;
117  values[4] = xi;
118  values[5] = 3.0*eta;
119  values[6] = 0.0;
120  values[7] = -1.0/2.0+3.0/2.0*t2;
121  values[8] = 3.0*t5;
122  values[9] = 15.0/2.0*t7-3.0/2.0;
123  values[10] = 0.0;
124  values[11] = t12/2.0;
125  values[12] = 3.0/2.0*t16;
126  values[13] = 15.0/2.0*t18-3.0/2.0*xi;
127  values[14] = 35.0/2.0*t22-15.0/2.0*eta;
128  values[15] = 0.0;
129  values[16] = 3.0/8.0+35.0/8.0*t26-15.0/4.0*t2;
130  values[17] = 3.0/2.0*t12*eta;
131  values[18] = -15.0/4.0*t7+3.0/4.0+45.0/4.0*t2*t7-9.0/4.0*t2;
132  values[19] = 5.0/2.0*t5*t38;
133  values[20] = 315.0/8.0*t41-105.0/4.0*t7+15.0/8.0;
134  values[21] = 0.0;
135  values[22] = xi*(63.0*t26-70.0*t2+15.0)/8.0;
136  values[23] = 3.0/8.0*(3.0+35.0*t26-30.0*t2)*eta;
137  values[24] = 75.0/4.0*t55*t7-15.0/4.0*t55-45.0/4.0*t18+9.0/4.0*xi;
138  values[25] = 5.0/4.0*t16*t38;
139  values[26] = 315.0/8.0*xi*t41-105.0/4.0*t18+15.0/8.0*xi;
140  values[27] = 693.0/8.0*t41*eta-315.0/4.0*t22+105.0/8.0*eta;
141 }
142 
143 // values of the derivatives in xi-xi direction
144 static void D_Q_P6_2D_DeriveXiXi(double xi, double eta,
145  double *values)
146 {
147  double t3 = xi*xi;
148  double t6 = xi*eta;
149  double t8 = eta*eta;
150  double t11 = t3*xi;
151  double t27 = t3*t3;
152  double t38 = 45.0/4.0*t8;
153  double t45 = t8*t8;
154 
155  values[0] = 0.0;
156  values[1] = 0.0;
157  values[2] = 0.0;
158  values[3] = 3.0;
159  values[4] = 0.0;
160  values[5] = 0.0;
161  values[6] = 15.0*xi;
162  values[7] = 3.0*eta;
163  values[8] = 0.0;
164  values[9] = 0.0;
165  values[10] = 105.0/2.0*t3-15.0/2.0;
166  values[11] = 15.0*t6;
167  values[12] = -3.0/2.0+9.0/2.0*t8;
168  values[13] = 0.0;
169  values[14] = 0.0;
170  values[15] = 315.0/2.0*t11-105.0/2.0*xi;
171  values[16] = 105.0/2.0*t3*eta-15.0/2.0*eta;
172  values[17] = -15.0/2.0*xi+45.0/2.0*xi*t8;
173  values[18] = 3.0/2.0*eta*(5.0*t8-3.0);
174  values[19] = 0.0;
175  values[20] = 0.0;
176  values[21] = 3465.0/8.0*t27-945.0/4.0*t3+105.0/8.0;
177  values[22] = 315.0/2.0*eta*t11-105.0/2.0*t6;
178  values[23] = -105.0/4.0*t3+315.0/4.0*t3*t8+15.0/4.0-t38;
179  values[24] = 75.0/2.0*xi*t8*eta-45.0/2.0*t6;
180  values[25] = 9.0/8.0+105.0/8.0*t45-t38;
181  values[26] = 0.0;
182  values[27] = 0.0;
183 }
184 
185 // values of the derivatives in xi-eta direction
186 static void D_Q_P6_2D_DeriveXiEta(double xi, double eta,
187  double *values)
188 {
189  double t3 = xi*xi;
190  double t6 = xi*eta;
191  double t8 = eta*eta;
192  double t13 = xi*(7.0*t3-3.0);
193  double t27 = t3*t3;
194  double t42 = t8*t8;
195 
196  values[0] = 0.0;
197  values[1] = 0.0;
198  values[2] = 0.0;
199  values[3] = 0.0;
200  values[4] = 1.0;
201  values[5] = 0.0;
202  values[6] = 0.0;
203  values[7] = 3.0*xi;
204  values[8] = 3.0*eta;
205  values[9] = 0.0;
206  values[10] = 0.0;
207  values[11] = 15.0/2.0*t3-3.0/2.0;
208  values[12] = 9.0*t6;
209  values[13] = -3.0/2.0+15.0/2.0*t8;
210  values[14] = 0.0;
211  values[15] = 0.0;
212  values[16] = 5.0/2.0*t13;
213  values[17] = 45.0/2.0*t3*eta-9.0/2.0*eta;
214  values[18] = 45.0/2.0*xi*t8-9.0/2.0*xi;
215  values[19] = 35.0/2.0*t8*eta-15.0/2.0*eta;
216  values[20] = 0.0;
217  values[21] = 0.0;
218  values[22] = 315.0/8.0*t27-105.0/4.0*t3+15.0/8.0;
219  values[23] = 15.0/2.0*t13*eta;
220  values[24] = 225.0/4.0*t3*t8-45.0/4.0*t3-45.0/4.0*t8+9.0/4.0;
221  values[25] = 15.0/2.0*t6*(7.0*t8-3.0);
222  values[26] = 315.0/8.0*t42-105.0/4.0*t8+15.0/8.0;
223  values[27] = 0.0;
224 }
225 
226 // values of the derivatives in eta-eta direction
227 static void D_Q_P6_2D_DeriveEtaEta(double xi, double eta,
228  double *values)
229 {
230  double t3 = xi*xi;
231  double t6 = xi*eta;
232  double t8 = eta*eta;
233  double t23 = t8*eta;
234  double t27 = t3*t3;
235  double t29 = 45.0/4.0*t3;
236  double t44 = t8*t8;
237 
238  values[0] = 0.0;
239  values[1] = 0.0;
240  values[2] = 0.0;
241  values[3] = 0.0;
242  values[4] = 0.0;
243  values[5] = 3.0;
244  values[6] = 0.0;
245  values[7] = 0.0;
246  values[8] = 3.0*xi;
247  values[9] = 15.0*eta;
248  values[10] = 0.0;
249  values[11] = 0.0;
250  values[12] = 9.0/2.0*t3-3.0/2.0;
251  values[13] = 15.0*t6;
252  values[14] = 105.0/2.0*t8-15.0/2.0;
253  values[15] = 0.0;
254  values[16] = 0.0;
255  values[17] = 3.0/2.0*xi*(5.0*t3-3.0);
256  values[18] = -15.0/2.0*eta+45.0/2.0*t3*eta;
257  values[19] = 105.0/2.0*xi*t8-15.0/2.0*xi;
258  values[20] = 315.0/2.0*t23-105.0/2.0*eta;
259  values[21] = 0.0;
260  values[22] = 0.0;
261  values[23] = 9.0/8.0+105.0/8.0*t27-t29;
262  values[24] = 75.0/2.0*eta*t3*xi-45.0/2.0*t6;
263  values[25] = -105.0/4.0*t8+15.0/4.0+315.0/4.0*t3*t8-t29;
264  values[26] = 315.0/2.0*xi*t23-105.0/2.0*t6;
265  values[27] = 3465.0/8.0*t44-945.0/4.0*t8+105.0/8.0;
266 }
267 
268 // ***********************************************************************
269 
270 TBaseFunct2D *BF_D_Q_P6_2D_Obj = new TBaseFunct2D
271  (28, BF_D_Q_P6_2D, BFUnitSquare,
272  D_Q_P6_2D_Funct, D_Q_P6_2D_DeriveXi,
273  D_Q_P6_2D_DeriveEta, D_Q_P6_2D_DeriveXiXi,
274  D_Q_P6_2D_DeriveXiEta, D_Q_P6_2D_DeriveEtaEta, 6, 6,
275  0, NULL);
Definition: BaseFunct2D.h:27