ParMooN
 All Classes Functions Variables Friends Pages
BF_C_Q_UL3SE_2D.h
1 // ***********************************************************************
2 // Q3 element with bubbles, conforming, 2D
3 // ***********************************************************************
4 
5 // base function values
6 static void C_Q_UL3SE_2D_Funct(double xi, double eta, double *values)
7 {
8  double t1 = xi/32.0;
9  double t2 = xi*xi;
10  double t3 = t2/32.0;
11  double t4 = eta/32.0;
12  double t6 = xi*eta/4.0;
13  double t8 = 9.0/32.0*t2*eta;
14  double t9 = eta*eta;
15  double t10 = t9/32.0;
16  double t12 = 9.0/32.0*xi*t9;
17  double t13 = t2*t9;
18  double t14 = 5.0/16.0*t13;
19  double t16 = 1.0-t2;
20  double t18 = (1.0-eta)*t16*xi;
21  double t19 = 9.0/32.0*t18;
22  double t21 = 1.0-t9;
23  double t23 = (1.0-xi)*t21*eta;
24  double t24 = 9.0/32.0*t23;
25  double t26 = 9.0/32.0*eta;
26  double t27 = 9.0/32.0*t9;
27  double t28 = 9.0/32.0*t13;
28  double t29 = 27.0/32.0*t18;
29  double t34 = (1.0+xi)*t21*eta;
30  double t35 = 9.0/32.0*t34;
31  double t37 = 9.0/32.0*xi;
32  double t38 = 9.0/32.0*t2;
33  double t39 = 27.0/32.0*t34;
34  double t44 = (1.0+eta)*t16*xi;
35  double t45 = 9.0/32.0*t44;
36  double t47 = 27.0/32.0*t44;
37  double t51 = 27.0/32.0*t23;
38  values[0] = t1-t3+t4+t6-t8-t10-t12+t14+t19+t24;
39  values[1] = -t26+t8+t27-t28-t29;
40  values[2] = -t26+t8+t27-t28+t29;
41  values[3] = -t1-t3+t4-t6-t8-t10+t12+t14-t19+t35;
42  values[4] = t37+t38-t12-t28-t39;
43  values[5] = t37+t38-t12-t28+t39;
44  values[6] = -t1-t3-t4+t6+t8-t10+t12+t14-t45-t35;
45  values[7] = t26-t8+t27-t28+t47;
46  values[8] = t26-t8+t27-t28-t47;
47  values[9] = t1-t3-t4-t6+t8-t10-t12+t14+t45-t24;
48  values[10] = -t37+t38+t12-t28+t51;
49  values[11] = -t37+t38+t12-t28-t51;
50  values[12] = 1.0-t2-t9+t13;
51 }
52 
53 // values of the derivatives in xi direction
54 static void C_Q_UL3SE_2D_DeriveXi(double xi, double eta, double *values)
55 {
56  double t1 = xi/16.0;
57  double t2 = eta/4.0;
58  double t4 = 9.0/16.0*xi*eta;
59  double t5 = eta*eta;
60  double t6 = 9.0/32.0*t5;
61  double t7 = xi*t5;
62  double t8 = 5.0/8.0*t7;
63  double t9 = 1.0-eta;
64  double t10 = xi*xi;
65  double t11 = t9*t10;
66  double t12 = 9.0/16.0*t11;
67  double t13 = 1.0-t10;
68  double t14 = t9*t13;
69  double t15 = 9.0/32.0*t14;
70  double t17 = (1.0-t5)*eta;
71  double t18 = 9.0/32.0*t17;
72  double t20 = 9.0/16.0*t7;
73  double t21 = 27.0/16.0*t11;
74  double t22 = 27.0/32.0*t14;
75  double t26 = 9.0/16.0*xi;
76  double t27 = 27.0/32.0*t17;
77  double t30 = 1.0+eta;
78  double t31 = t30*t10;
79  double t32 = 9.0/16.0*t31;
80  double t33 = t30*t13;
81  double t34 = 9.0/32.0*t33;
82  double t36 = 27.0/16.0*t31;
83  double t37 = 27.0/32.0*t33;
84  values[0] = 1.0/32.0-t1+t2-t4-t6+t8-t12+t15-t18;
85  values[1] = t4-t20+t21-t22;
86  values[2] = t4-t20-t21+t22;
87  values[3] = -1.0/32.0-t1-t2-t4+t6+t8+t12-t15+t18;
88  values[4] = 9.0/32.0+t26-t6-t20-t27;
89  values[5] = 9.0/32.0+t26-t6-t20+t27;
90  values[6] = -1.0/32.0-t1+t2+t4+t6+t8+t32-t34-t18;
91  values[7] = -t4-t20-t36+t37;
92  values[8] = -t4-t20+t36-t37;
93  values[9] = 1.0/32.0-t1-t2+t4-t6+t8-t32+t34+t18;
94  values[10] = -9.0/32.0+t26+t6-t20-t27;
95  values[11] = -9.0/32.0+t26+t6-t20+t27;
96  values[12] = -2.0*xi+2.0*t7;
97 }
98 
99 // values of the derivatives in eta direction
100 static void C_Q_UL3SE_2D_DeriveEta(double xi, double eta, double *values)
101 {
102  double t1 = xi/4.0;
103  double t2 = xi*xi;
104  double t3 = 9.0/32.0*t2;
105  double t4 = eta/16.0;
106  double t6 = 9.0/16.0*xi*eta;
107  double t7 = t2*eta;
108  double t8 = 5.0/8.0*t7;
109  double t10 = (1.0-t2)*xi;
110  double t11 = 9.0/32.0*t10;
111  double t12 = 1.0-xi;
112  double t13 = eta*eta;
113  double t14 = t12*t13;
114  double t15 = 9.0/16.0*t14;
115  double t16 = 1.0-t13;
116  double t17 = t12*t16;
117  double t18 = 9.0/32.0*t17;
118  double t20 = 9.0/16.0*eta;
119  double t21 = 9.0/16.0*t7;
120  double t22 = 27.0/32.0*t10;
121  double t25 = 1.0+xi;
122  double t26 = t25*t13;
123  double t27 = 9.0/16.0*t26;
124  double t28 = t25*t16;
125  double t29 = 9.0/32.0*t28;
126  double t31 = 27.0/16.0*t26;
127  double t32 = 27.0/32.0*t28;
128  double t39 = 27.0/16.0*t14;
129  double t40 = 27.0/32.0*t17;
130  values[0] = 1.0/32.0+t1-t3-t4-t6+t8-t11-t15+t18;
131  values[1] = -9.0/32.0+t3+t20-t21+t22;
132  values[2] = -9.0/32.0+t3+t20-t21-t22;
133  values[3] = 1.0/32.0-t1-t3-t4+t6+t8+t11-t27+t29;
134  values[4] = -t6-t21+t31-t32;
135  values[5] = -t6-t21-t31+t32;
136  values[6] = -1.0/32.0+t1+t3-t4+t6+t8-t11+t27-t29;
137  values[7] = 9.0/32.0-t3+t20-t21+t22;
138  values[8] = 9.0/32.0-t3+t20-t21-t22;
139  values[9] = -1.0/32.0-t1+t3-t4-t6+t8+t11+t15-t18;
140  values[10] = t6-t21-t39+t40;
141  values[11] = t6-t21+t39-t40;
142  values[12] = -2.0*eta+2.0*t7;
143 }
144 
145 // values of the derivatives in xi-xi direction
146 static void C_Q_UL3SE_2D_DeriveXiXi(double xi, double eta, double *values)
147 {
148  double t1 = 9.0/16.0*eta;
149  double t2 = eta*eta;
150  double t3 = 5.0/8.0*t2;
151  double t5 = (1.0-eta)*xi;
152  double t6 = 27.0/16.0*t5;
153  double t8 = 9.0/16.0*t2;
154  double t9 = 81.0/16.0*t5;
155  double t13 = 1.0-t2;
156  double t15 = (1.0+eta)*xi;
157  double t16 = 27.0/16.0*t15;
158  double t18 = 81.0/16.0*t15;
159  values[0] = -1.0/16.0-t1+t3-t6;
160  values[1] = t1-t8+t9;
161  values[2] = t1-t8-t9;
162  values[3] = -1.0/16.0-t1+t3+t6;
163  values[4] = 9.0/16.0*t13;
164  values[5] = 9.0/16.0*t13;
165  values[6] = -1.0/16.0+t1+t3+t16;
166  values[7] = -t1-t8-t18;
167  values[8] = -t1-t8+t18;
168  values[9] = -1.0/16.0+t1+t3-t16;
169  values[10] = 9.0/16.0*t13;
170  values[11] = 9.0/16.0*t13;
171  values[12] = -2.0*t13;
172 }
173 
174 // values of the derivatives in xi-eta direction
175 static void C_Q_UL3SE_2D_DeriveXiEta(double xi, double eta, double *values)
176 {
177  double t1 = 9.0/16.0*xi;
178  double t2 = 9.0/16.0*eta;
179  double t3 = xi*eta;
180  double t4 = 5.0/4.0*t3;
181  double t5 = xi*xi;
182  double t6 = 27.0/32.0*t5;
183  double t7 = eta*eta;
184  double t8 = 27.0/32.0*t7;
185  double t10 = 9.0/8.0*t3;
186  double t11 = 81.0/32.0*t5;
187  double t15 = 81.0/32.0*t7;
188  values[0] = -5.0/16.0-t1-t2+t4+t6+t8;
189  values[1] = t1-t10-t11+27.0/32.0;
190  values[2] = t1-t10+t11-27.0/32.0;
191  values[3] = 5.0/16.0-t1+t2+t4-t6-t8;
192  values[4] = -t2-t10+t15-27.0/32.0;
193  values[5] = -t2-t10-t15+27.0/32.0;
194  values[6] = -5.0/16.0+t1+t2+t4+t6+t8;
195  values[7] = -t1-t10-t11+27.0/32.0;
196  values[8] = -t1-t10+t11-27.0/32.0;
197  values[9] = 5.0/16.0+t1-t2+t4-t6-t8;
198  values[10] = t2-t10+t15-27.0/32.0;
199  values[11] = t2-t10-t15+27.0/32.0;
200  values[12] = 4.0*t3;
201 }
202 
203 // values of the derivatives in eta-eta direction
204 static void C_Q_UL3SE_2D_DeriveEtaEta(double xi, double eta, double *values)
205 {
206  double t1 = 9.0/16.0*xi;
207  double t2 = xi*xi;
208  double t3 = 5.0/8.0*t2;
209  double t5 = (1.0-xi)*eta;
210  double t6 = 27.0/16.0*t5;
211  double t8 = 1.0-t2;
212  double t10 = (1.0+xi)*eta;
213  double t11 = 27.0/16.0*t10;
214  double t13 = 9.0/16.0*t2;
215  double t14 = 81.0/16.0*t10;
216  double t19 = 81.0/16.0*t5;
217  values[0] = -1.0/16.0-t1+t3-t6;
218  values[1] = 9.0/16.0*t8;
219  values[2] = 9.0/16.0*t8;
220  values[3] = -1.0/16.0+t1+t3-t11;
221  values[4] = -t1-t13+t14;
222  values[5] = -t1-t13-t14;
223  values[6] = -1.0/16.0+t1+t3+t11;
224  values[7] = 9.0/16.0*t8;
225  values[8] = 9.0/16.0*t8;
226  values[9] = -1.0/16.0-t1+t3+t6;
227  values[10] = t1-t13-t19;
228  values[11] = t1-t13+t19;
229  values[12] = -2.0*t8;
230 }
231 
232 // ***********************************************************************
233 
234 TBaseFunct2D *BF_C_Q_UL3SE_2D_Obj = new TBaseFunct2D
235  (13, BF_C_Q_UL3SE_2D, BFUnitSquare,
236  C_Q_UL3SE_2D_Funct, C_Q_UL3SE_2D_DeriveXi,
237  C_Q_UL3SE_2D_DeriveEta, C_Q_UL3SE_2D_DeriveXiXi,
238  C_Q_UL3SE_2D_DeriveXiEta, C_Q_UL3SE_2D_DeriveEtaEta, 3, 3,
239  0, NULL);
Definition: BaseFunct2D.h:27