ParMooN
 All Classes Functions Variables Friends Pages
BF_N_T_P3_2D.h
1 // ***********************************************************************
2 // P3 element, nonconforming, 2D
3 // ***********************************************************************
4 
5 // base function values
6 static void N_T_P3_2D_Funct(double xi, double eta, double *values)
7 {
8  double t1, t2, t3, t4, t5, t7, t8, t9, t10, t12, t13, t14, t15, t16;
9  double t17, t21, t23, t26, t28, t29, t30, t31, t32, t33, t35, t36, t37;
10  double t45, t46, t48, t49, t53, t55, t58, t59, t64, t70, t72, t73, t83;
11  double t87, t98, t101, t105, t106, t108, t109, t112, t116, t119, t127;
12 
13  t1 = 12.0*eta;
14  t2 = eta*eta;
15  t3 = 30.0*t2;
16  t4 = t2*eta;
17  t5 = 20.0*t4;
18  t7 = 12.0*xi;
19  t8 = xi*xi;
20  t9 = 30.0*t8;
21  t10 = xi*eta;
22  t12 = t8*xi;
23  t13 = 20.0*t12;
24  t14 = t8*eta;
25  t15 = 60.0*t14;
26  t16 = xi*t2;
27  t17 = 60.0*t16;
28  t21 = 64.0/5.0*eta;
29  t23 = 6.0*t10;
30  t26 = 48.0*t14;
31  t28 = 64.0*t4;
32  t29 = t8*t2;
33  t30 = 42.0*t29;
34  t31 = t12*eta;
35  t32 = 28.0*t31;
36  t33 = xi*t4;
37  t35 = t2*t2;
38  t36 = 28.0*t35;
39  t37 = -4.0/5.0-2.0/5.0*xi+t21+6.0*t8-t23-48.0*t2-4.0*t12-t26+42.0*t16+t28+t30+t32-42.0*t33-t36;
40  t45 = t8*t8;
41  t46 = 28.0*t45;
42  t48 = 16.0/5.0*xi-16.0/5.0*eta-24.0*t8+24.0*t2+48.0*t12+t15-t17-48.0*t4-70.0*t31-t46+70.0*t33+t36;
43  t49 = 64.0/5.0*xi;
44  t53 = 64.0*t12;
45  t55 = 48.0*t16;
46  t58 = 28.0*t33;
47  t59 = 4.0/5.0-t49+2.0/5.0*eta+48.0*t8+t23-6.0*t2-t53-42.0*t14+t55+4.0*t4+42.0*t31+t46-t30-t58;
48  t64 = 102.0/5.0*t10;
49  t70 = 126.0/5.0*t29;
50  t72 = 84.0/5.0*t35;
51  t73 = 18.0/5.0*xi-204.0/25.0*eta+t3+336.0/5.0*t12-196.0/5.0*t4+t64+216.0/5.0*t14-414.0/5.0*t16-186.0/5.0*t8-168.0/5.0*t45-336.0/5.0*t31+t70+294.0/5.0*t33+t72+13.0/25.0;
52  t83 = 84.0/5.0*t45;
53  t87 = -36.0/25.0*xi-36.0/25.0*eta+66.0/5.0*t2-28.0*t12-28.0*t4-24.0/5.0*t10+48.0/5.0*t14+48.0/5.0*t16+66.0/5.0*t8+t83+42.0/5.0*t31-252.0/5.0*t29+42.0/5.0*t33+t72-1.0/25.0;
54  t98 = -204.0/25.0*xi+18.0/5.0*eta-186.0/5.0*t2-196.0/5.0*t12+336.0/5.0*t4+t64-414.0/5.0*t14+216.0/5.0*t16+t9+t83+294.0/5.0*t31+t70-336.0/5.0*t33-168.0/5.0*t35+13.0/25.0;
55  t101 = 144.0*t2;
56  t105 = 144.0*t8;
57  t106 = 56.0*t45;
58  t108 = 56.0*t35;
59  t109 = 224.0/5.0*xi+224.0/5.0*eta-t101+160.0*t12+160.0*t4-84.0*t10+t26+t55-t105-t106-t32+168.0*t29-t58-t108-16.0/5.0;
60  t112 = 72.0*t10;
61  t116 = 84.0*t29;
62  t119 = -t49-32.0*eta+t101+t53-224.0*t4+t112+156.0*t14-264.0*t16+8.0/5.0-t106-196.0*t31-t116+224.0*t33+112.0*t35;
63  t127 = -32.0*xi-t21-224.0*t12+t28+t112-264.0*t14+156.0*t16+t105+8.0/5.0+112.0*t45+224.0*t31-t116-196.0*t33-t108;
64 
65  values[0] = 1.0-t1+t3-t5;
66  values[1] = -1.0+t7+t1-t9-60.0*t10-t3+t13+t15+t17+t5;
67  values[2] = 1.0-t7+t9-t13;
68  values[3] = t37;
69  values[4] = t48;
70  values[5] = t59;
71  values[6] = t73;
72  values[7] = t87;
73  values[8] = t98;
74  values[9] = t109;
75  values[10] = t119;
76  values[11] = t127;
77 }
78 
79 // values of the derivatives in xi direction
80 static void N_T_P3_2D_DeriveXi(double xi, double eta, double *values)
81 {
82  double t1, t3, t4, t5, t6, t7, t8, t12, t14, t16, t17, t18, t19, t20;
83  double t26, t27, t31, t33, t35, t38, t44, t52, t65, t66, t69, t73;
84 
85  t1 = 60.0*xi;
86  t3 = xi*xi;
87  t4 = 60.0*t3;
88  t5 = xi*eta;
89  t6 = 120.0*t5;
90  t7 = eta*eta;
91  t8 = 60.0*t7;
92  t12 = 6.0*eta;
93  t14 = 96.0*t5;
94  t16 = xi*t7;
95  t17 = 84.0*t16;
96  t18 = t3*eta;
97  t19 = 84.0*t18;
98  t20 = t7*eta;
99  t26 = t3*xi;
100  t27 = 112.0*t26;
101  t31 = 192.0*t3;
102  t33 = 48.0*t7;
103  t35 = 28.0*t20;
104  t38 = 102.0/5.0*eta;
105  t44 = 252.0/5.0*t16;
106  t52 = 336.0/5.0*t26;
107  t65 = 288.0*xi;
108  t66 = 224.0*t26;
109  t69 = 72.0*eta;
110  t73 = 168.0*t16;
111 
112  values[0] = 0.0;
113  values[1] = 12.0-t1-60.0*eta+t4+t6+t8;
114  values[2] = -12.0+t1-t4;
115  values[3] = -2.0/5.0+12.0*xi-t12-12.0*t3-t14+42.0*t7+t17+t19-42.0*t20;
116  values[4] = 16.0/5.0-48.0*xi+144.0*t3+t6-t8-210.0*t18-t27+70.0*t20;
117  values[5] = -64.0/5.0+96.0*xi+t12-t31-84.0*t5+t33+126.0*t18+t27-t17-t35;
118  values[6] = 18.0/5.0+1008.0/5.0*t3+t38+432.0/5.0*t5-414.0/5.0*t7-372.0/5.0*xi-672.0/5.0*t26-1008.0/5.0*t18+t44+294.0/5.0*t20;
119  values[7] = -36.0/25.0-84.0*t3-24.0/5.0*eta+96.0/5.0*t5+48.0/5.0*t7+132.0/5.0*xi+t52+126.0/5.0*t18-504.0/5.0*t16+42.0/5.0*t20;
120  values[8] = -204.0/25.0-588.0/5.0*t3+t38-828.0/5.0*t5+216.0/5.0*t7+t1+t52+882.0/5.0*t18+t44-336.0/5.0*t20;
121  values[9] = 224.0/5.0+480.0*t3-84.0*eta+t14+t33-t65-t66-t19+336.0*t16-t35;
122  values[10] = -64.0/5.0+t31+t69+312.0*t5-264.0*t7-t66-588.0*t18-t73+224.0*t20;
123  values[11] = -32.0-672.0*t3+t69-528.0*t5+156.0*t7+t65+448.0*t26+672.0*t18-t73-196.0*t20;
124 }
125 
126 // values of the derivatives in eta direction
127 static void N_T_P3_2D_DeriveEta(double xi, double eta, double *values)
128 {
129  double t1, t2, t3, t6, t7, t8, t9, t11, t13, t15, t16, t17, t18, t19;
130  double t20, t22, t23, t32, t35, t38, t42, t44, t63, t67, t70, t74;
131 
132  t1 = 60.0*eta;
133  t2 = eta*eta;
134  t3 = 60.0*t2;
135  t6 = xi*xi;
136  t7 = 60.0*t6;
137  t8 = xi*eta;
138  t9 = 120.0*t8;
139  t11 = 6.0*xi;
140  t13 = 48.0*t6;
141  t15 = 192.0*t2;
142  t16 = t6*eta;
143  t17 = 84.0*t16;
144  t18 = t6*xi;
145  t19 = 28.0*t18;
146  t20 = xi*t2;
147  t22 = t2*eta;
148  t23 = 112.0*t22;
149  t32 = 96.0*t8;
150  t35 = 84.0*t20;
151  t38 = 102.0/5.0*xi;
152  t42 = 252.0/5.0*t16;
153  t44 = 336.0/5.0*t22;
154  t63 = 288.0*eta;
155  t67 = 224.0*t22;
156  t70 = 72.0*xi;
157  t74 = 168.0*t16;
158 
159  values[0] = -12.0+t1-t3;
160  values[1] = 12.0-60.0*xi-t1+t7+t9+t3;
161  values[2] = 0.0;
162  values[3] = 64.0/5.0-t11-96.0*eta-t13+84.0*t8+t15+t17+t19-126.0*t20-t23;
163  values[4] = -16.0/5.0+48.0*eta+t7-t9-144.0*t2-70.0*t18+210.0*t20+t23;
164  values[5] = 2.0/5.0+t11-12.0*eta-42.0*t6+t32+12.0*t2+42.0*t18-t17-t35;
165  values[6] = -204.0/25.0+t1-588.0/5.0*t2+t38+216.0/5.0*t6-828.0/5.0*t8-336.0/5.0*t18+t42+882.0/5.0*t20+t44;
166  values[7] = -36.0/25.0+132.0/5.0*eta-84.0*t2-24.0/5.0*xi+48.0/5.0*t6+96.0/5.0*t8+42.0/5.0*t18-504.0/5.0*t16+126.0/5.0*t20+t44;
167  values[8] = 18.0/5.0-372.0/5.0*eta+1008.0/5.0*t2+t38-414.0/5.0*t6+432.0/5.0*t8+294.0/5.0*t18+t42-1008.0/5.0*t20-672.0/5.0*t22;
168  values[9] = 224.0/5.0-t63+480.0*t2-84.0*xi+t13+t32-t19+336.0*t16-t35-t67;
169  values[10] = -32.0+t63-672.0*t2+t70+156.0*t6-528.0*t8-196.0*t18-t74+672.0*t20+448.0*t22;
170  values[11] = -64.0/5.0+t15+t70-264.0*t6+312.0*t8+224.0*t18-t74-588.0*t20-t67;
171 }
172 
173 // values of derivatives in xi-xi direction
174 static void N_T_P3_2D_DeriveXiXi(double xi, double eta, double *values)
175 {
176  double t1, t2, t6, t7, t8, t9, t10, t14, t15, t17, t25, t29, t38, t43;
177 
178  t1 = 120.0*xi;
179  t2 = 120.0*eta;
180  t6 = 96.0*eta;
181  t7 = eta*eta;
182  t8 = 84.0*t7;
183  t9 = xi*eta;
184  t10 = 168.0*t9;
185  t14 = xi*xi;
186  t15 = 336.0*t14;
187  t17 = 384.0*xi;
188  t25 = 252.0/5.0*t7;
189  t29 = 1008.0/5.0*t14;
190  t38 = 672.0*t14;
191  t43 = 168.0*t7;
192 
193  values[0] = 0.0;
194  values[1] = -60.0+t1+t2;
195  values[2] = 60.0-t1;
196  values[3] = 12.0-24.0*xi-t6+t8+t10;
197  values[4] = -48.0+288.0*xi+t2-420.0*t9-t15;
198  values[5] = 96.0-t17-84.0*eta+252.0*t9+t15-t8;
199  values[6] = 2016.0/5.0*xi+432.0/5.0*eta-372.0/5.0-2016.0/5.0*t14-2016.0/5.0*t9+t25;
200  values[7] = -168.0*xi+96.0/5.0*eta+132.0/5.0+t29+252.0/5.0*t9-504.0/5.0*t7;
201  values[8] = -1176.0/5.0*xi-828.0/5.0*eta+60.0+t29+1764.0/5.0*t9+t25;
202  values[9] = 960.0*xi+t6-288.0-t38-t10+336.0*t7;
203  values[10] = t17+312.0*eta-t38-1176.0*t9-t43;
204  values[11] = -1344.0*xi-528.0*eta+288.0+1344.0*t14+1344.0*t9-t43;
205 }
206 
207 // values of derivatives in eta-eta direction
208 static void N_T_P3_2D_DeriveXiEta(double xi, double eta, double *values)
209 {
210  double t1, t2, t4, t6, t7, t8, t9, t10, t17, t19, t24, t43;
211 
212  t1 = 120.0*xi;
213  t2 = 120.0*eta;
214  t4 = 96.0*xi;
215  t6 = xi*eta;
216  t7 = 168.0*t6;
217  t8 = xi*xi;
218  t9 = 84.0*t8;
219  t10 = eta*eta;
220  t17 = 96.0*eta;
221  t19 = 84.0*t10;
222  t24 = 504.0/5.0*t6;
223  t43 = 336.0*t6;
224 
225  values[0] = 0.0;
226  values[1] = -60.0+t1+t2;
227  values[2] = 0.0;
228  values[3] = -6.0-t4+84.0*eta+t7+t9-126.0*t10;
229  values[4] = t1-t2-210.0*t8+210.0*t10;
230  values[5] = 6.0-84.0*xi+t17+126.0*t8-t7-t19;
231  values[6] = 102.0/5.0+432.0/5.0*xi-828.0/5.0*eta-1008.0/5.0*t8+t24+882.0/5.0*t10;
232  values[7] = -24.0/5.0+96.0/5.0*xi+96.0/5.0*eta+126.0/5.0*t8-1008.0/5.0*t6+126.0/5.0*t10;
233  values[8] = 102.0/5.0-828.0/5.0*xi+432.0/5.0*eta+882.0/5.0*t8+t24-1008.0/5.0*t10;
234  values[9] = -84.0+t4+t17-t9+672.0*t6-t19;
235  values[10] = 72.0+312.0*xi-528.0*eta-588.0*t8-t43+672.0*t10;
236  values[11] = 72.0-528.0*xi+312.0*eta+672.0*t8-t43-588.0*t10;
237 }
238 
239 // values of derivatives in xi-eta direction
240 static void N_T_P3_2D_DeriveEtaEta(double xi, double eta, double *values)
241 {
242  double t1, t3, t6, t7, t8, t9, t11, t12, t17, t19, t23, t25, t39, t43;
243 
244  t1 = 120.0*eta;
245  t3 = 120.0*xi;
246  t6 = 384.0*eta;
247  t7 = xi*xi;
248  t8 = 84.0*t7;
249  t9 = xi*eta;
250  t11 = eta*eta;
251  t12 = 336.0*t11;
252  t17 = 96.0*xi;
253  t19 = 168.0*t9;
254  t23 = 252.0/5.0*t7;
255  t25 = 1008.0/5.0*t11;
256  t39 = 672.0*t11;
257  t43 = 168.0*t7;
258 
259  values[0] = 60.0-t1;
260  values[1] = -60.0+t3+t1;
261  values[2] = 0.0;
262  values[3] = -96.0+84.0*xi+t6+t8-252.0*t9-t12;
263  values[4] = 48.0-t3-288.0*eta+420.0*t9+t12;
264  values[5] = -12.0+t17+24.0*eta-t8-t19;
265  values[6] = 60.0-1176.0/5.0*eta-828.0/5.0*xi+t23+1764.0/5.0*t9+t25;
266  values[7] = 132.0/5.0-168.0*eta+96.0/5.0*xi-504.0/5.0*t7+252.0/5.0*t9+t25;
267  values[8] = -372.0/5.0+2016.0/5.0*eta+432.0/5.0*xi+t23-2016.0/5.0*t9-2016.0/5.0*t11;
268  values[9] = -288.0+960.0*eta+t17+336.0*t7-t19-t39;
269  values[10] = 288.0-1344.0*eta-528.0*xi-t43+1344.0*t9+1344.0*t11;
270  values[11] = t6+312.0*xi-t43-1176.0*t9-t39;
271 }
272 
273 static int N_T_P3_2D_ChangeJ0[1] = { 3 };
274 static int N_T_P3_2D_ChangeJ1[1] = { 4 };
275 static int N_T_P3_2D_ChangeJ2[1] = { 5 };
276 
277 static int *N_T_P3_2D_Change[3] = { N_T_P3_2D_ChangeJ0, N_T_P3_2D_ChangeJ1,
278  N_T_P3_2D_ChangeJ2 };
279 
280 // ***********************************************************************
281 
282 TBaseFunct2D *BF_N_T_P3_2D_Obj = new TBaseFunct2D
283  (12, BF_N_T_P3_2D, BFUnitTriangle,
284  N_T_P3_2D_Funct, N_T_P3_2D_DeriveXi,
285  N_T_P3_2D_DeriveEta, N_T_P3_2D_DeriveXiXi,
286  N_T_P3_2D_DeriveXiEta, N_T_P3_2D_DeriveEtaEta, 4, 3,
287  1, N_T_P3_2D_Change);
Definition: BaseFunct2D.h:27