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