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