ParMooN
 All Classes Functions Variables Friends Pages
BF_C_Q_Q4_2D.h
1 // ********************************************************************
2 // Q4 element, conforming, 2D
3 // ********************************************************************
4 
5 // base function values
6 static void C_Q_Q4_2D_Funct(double xi, double eta, double *values)
7 {
8 
9  double xi0 = 0.666666666666666666667*xi*xi*xi*xi-0.666666666666666666667*xi*xi*xi - 0.166666666666666666667*xi*xi+0.166666666666666666667*xi;
10  double xi1 = -2.66666666666666666667*xi*xi*xi*xi+1.33333333333333333333*xi*xi*xi+2.66666666666666666667*xi*xi-1.33333333333333333333*xi;
11  double xi2 = 4.0*xi*xi*xi*xi-5.0*xi*xi+1.0;
12  double xi3 = -2.66666666666666666667*xi*xi*xi*xi-1.33333333333333333333*xi*xi*xi+2.666666666666667*xi*xi+1.33333333333333333333*xi;
13  double xi4 = 0.666666666666666666667*xi*xi*xi*xi+0.666666666666666666667*xi*xi*xi-0.166666666666666666667*xi*xi-0.166666666666666666667*xi;
14  double eta0 = 0.666666666666666666667*eta*eta*eta*eta-0.666666666666666666667*eta*eta*eta-0.166666666666666666667*eta*eta+0.166666666666666666667*eta;
15  double eta1 = -2.66666666666666666667*eta*eta*eta*eta+1.33333333333333333333*eta*eta*eta+2.66666666666666666667*eta*eta-1.33333333333333333333*eta;
16  double eta2 = 4.0*eta*eta*eta*eta-5.0*eta*eta+1.0;
17  double eta3 = -2.66666666666666666667*eta*eta*eta*eta-1.33333333333333333333*eta*eta*eta+2.66666666666666666667*eta*eta+1.33333333333333333333*eta;
18  double eta4 = 0.666666666666666666667*eta*eta*eta*eta+0.666666666666666666667*eta*eta*eta-0.166666666666666666667*eta*eta-0.166666666666666666667*eta;
19 
20  values[0] = xi0*eta0;
21  values[1] = xi1*eta0;
22  values[2] = xi2*eta0;
23  values[3] = xi3*eta0;
24  values[4] = xi4*eta0;
25  values[5] = xi0*eta1;
26  values[6] = xi1*eta1;
27  values[7] = xi2*eta1;
28  values[8] = xi3*eta1;
29  values[9] = xi4*eta1;
30  values[10] = xi0*eta2;
31  values[11] = xi1*eta2;
32  values[12] = xi2*eta2;
33  values[13] = xi3*eta2;
34  values[14] = xi4*eta2;
35  values[15] = xi0*eta3;
36  values[16] = xi1*eta3;
37  values[17] = xi2*eta3;
38  values[18] = xi3*eta3;
39  values[19] = xi4*eta3;
40  values[20] = xi0*eta4;
41  values[21] = xi1*eta4;
42  values[22] = xi2*eta4;
43  values[23] = xi3*eta4;
44  values[24] = xi4*eta4;
45 }
46 
47 
48 // values of the derivatives in xi direction
49 static void C_Q_Q4_2D_DeriveXi(double xi, double eta, double *values)
50 {
51 
52  double xi0 = 2.666666666666666666667*xi*xi*xi-2*xi*xi-0.333333333333333333333*xi+0.1666666666666666666667;
53  double xi1 = -10.66666666666666666667*xi*xi*xi+4*xi*xi+5.33333333333333333333*xi-1.33333333333333333333;
54  double xi2 = 16.0*xi*xi*xi-10.0*xi;
55  double xi3 = -10.66666666666666666667*xi*xi*xi-4*xi*xi+5.33333333333333333333*xi+1.33333333333333333333;
56  double xi4 = 2.666666666666666666667*xi*xi*xi+2*xi*xi-0.333333333333333333333*xi-0.1666666666666666666667;
57  double eta0 = 0.666666666666666666667*eta*eta*eta*eta-0.6666666666666667*eta*eta*eta-0.166666666666666666667*eta*eta+0.166666666666666666667*eta;
58  double eta1 = -2.66666666666666666667*eta*eta*eta*eta+1.33333333333333333333*eta*eta*eta+2.66666666666666666667*eta*eta-1.33333333333333333333*eta;
59  double eta2 = 4.0*eta*eta*eta*eta-5.0*eta*eta+1.0;
60  double eta3 = -2.66666666666666666667*eta*eta*eta*eta-1.33333333333333333333*eta*eta*eta+2.66666666666666666667*eta*eta+1.33333333333333333333*eta;
61  double eta4 = 0.666666666666666666667*eta*eta*eta*eta+0.666666666666666666667*eta*eta*eta-0.166666666666666666667*eta*eta-0.166666666666666666667*eta;
62 
63  values[0] = xi0*eta0;
64  values[1] = xi1*eta0;
65  values[2] = xi2*eta0;
66  values[3] = xi3*eta0;
67  values[4] = xi4*eta0;
68  values[5] = xi0*eta1;
69  values[6] = xi1*eta1;
70  values[7] = xi2*eta1;
71  values[8] = xi3*eta1;
72  values[9] = xi4*eta1;
73  values[10] = xi0*eta2;
74  values[11] = xi1*eta2;
75  values[12] = xi2*eta2;
76  values[13] = xi3*eta2;
77  values[14] = xi4*eta2;
78  values[15] = xi0*eta3;
79  values[16] = xi1*eta3;
80  values[17] = xi2*eta3;
81  values[18] = xi3*eta3;
82  values[19] = xi4*eta3;
83  values[20] = xi0*eta4;
84  values[21] = xi1*eta4;
85  values[22] = xi2*eta4;
86  values[23] = xi3*eta4;
87  values[24] = xi4*eta4;
88 }
89 
90 // values of the derivatives in eta direction
91 static void C_Q_Q4_2D_DeriveEta(double xi, double eta, double *values)
92 {
93 
94  double xi0 = 0.666666666666666666667*xi*xi*xi*xi-0.666666666666666666667*xi*xi*xi-0.166666666666666666667*xi*xi+0.166666666666666666667*xi;
95  double xi1 = -2.66666666666666666667*xi*xi*xi*xi+1.33333333333333333333*xi*xi*xi+2.666666666666667*xi*xi-1.33333333333333333333*xi;
96  double xi2 = 4.0*xi*xi*xi*xi-5.0*xi*xi+1.0;
97  double xi3 = -2.66666666666666666667*xi*xi*xi*xi-1.33333333333333333333*xi*xi*xi+2.66666666666666666667*xi*xi+1.33333333333333333333*xi;
98  double xi4 = 0.666666666666666666667*xi*xi*xi*xi+0.6666666666666666666667*xi*xi*xi-0.166666666666666666667*xi*xi-0.1666666666666666666667*xi;
99  double eta0 = 2.666666666666666666667*eta*eta*eta-2*eta*eta-0.333333333333333333333*eta+0.1666666666666666666667;
100  double eta1 = -10.6666666666666666667*eta*eta*eta+4*eta*eta+5.33333333333333333333*eta-1.33333333333333333333;
101  double eta2 = 16.0*eta*eta*eta-10.0*eta;
102  double eta3 = -10.66666666666666666667*eta*eta*eta-4*eta*eta+5.33333333333333333333*eta+1.33333333333333333333;
103  double eta4 = 2.66666666666666666667*eta*eta*eta+2*eta*eta-0.333333333333333333333*eta-0.166666666666666666667;
104 
105  values[0] = xi0*eta0;
106  values[1] = xi1*eta0;
107  values[2] = xi2*eta0;
108  values[3] = xi3*eta0;
109  values[4] = xi4*eta0;
110  values[5] = xi0*eta1;
111  values[6] = xi1*eta1;
112  values[7] = xi2*eta1;
113  values[8] = xi3*eta1;
114  values[9] = xi4*eta1;
115  values[10] = xi0*eta2;
116  values[11] = xi1*eta2;
117  values[12] = xi2*eta2;
118  values[13] = xi3*eta2;
119  values[14] = xi4*eta2;
120  values[15] = xi0*eta3;
121  values[16] = xi1*eta3;
122  values[17] = xi2*eta3;
123  values[18] = xi3*eta3;
124  values[19] = xi4*eta3;
125  values[20] = xi0*eta4;
126  values[21] = xi1*eta4;
127  values[22] = xi2*eta4;
128  values[23] = xi3*eta4;
129  values[24] = xi4*eta4;
130 }
131 // values of the derivatives in xi-xi direction
132 static void C_Q_Q4_2D_DeriveXiXi(double xi, double eta, double *values)
133 {
134 
135  double xi0 = 8*xi*xi-4*xi-0.333333333333333333333;
136  double xi1 = -32*xi*xi+8*xi+5.33333333333333333333;
137  double xi2 = 48.0*xi*xi-10.0;
138  double xi3 = -32*xi*xi-8*xi+5.33333333333333333333;
139  double xi4 = 8*xi*xi+4*xi-0.333333333333333333333;
140  double eta0 = 0.6666666666666666666667*eta*eta*eta*eta-0.666666666666666666667*eta*eta*eta-0.166666666666666666667*eta*eta+0.166666666666666666667*eta;
141  double eta1 = -2.66666666666666666667*eta*eta*eta*eta+1.33333333333333333333*eta*eta*eta+2.66666666666666666667*eta*eta-1.33333333333333333333*eta;
142  double eta2 = 4.0*eta*eta*eta*eta-5.0*eta*eta+1.0;
143  double eta3 = -2.66666666666666666667*eta*eta*eta*eta-1.33333333333333333333*eta*eta*eta+2.66666666666666666667*eta*eta+1.33333333333333333333*eta;
144  double eta4 = 0.666666666666666666667*eta*eta*eta*eta+0.666666666666666666667*eta*eta*eta-0.166666666666666666667*eta*eta-0.166666666666666666667*eta;
145 
146  values[0] = xi0*eta0;
147  values[1] = xi1*eta0;
148  values[2] = xi2*eta0;
149  values[3] = xi3*eta0;
150  values[4] = xi4*eta0;
151  values[5] = xi0*eta1;
152  values[6] = xi1*eta1;
153  values[7] = xi2*eta1;
154  values[8] = xi3*eta1;
155  values[9] = xi4*eta1;
156  values[10] = xi0*eta2;
157  values[11] = xi1*eta2;
158  values[12] = xi2*eta2;
159  values[13] = xi3*eta2;
160  values[14] = xi4*eta2;
161  values[15] = xi0*eta3;
162  values[16] = xi1*eta3;
163  values[17] = xi2*eta3;
164  values[18] = xi3*eta3;
165  values[19] = xi4*eta3;
166  values[20] = xi0*eta4;
167  values[21] = xi1*eta4;
168  values[22] = xi2*eta4;
169  values[23] = xi3*eta4;
170  values[24] = xi4*eta4;
171 }
172 // values of the derivatives in xi-eta direction
173 static void C_Q_Q4_2D_DeriveXiEta(double xi, double eta, double *values)
174 {
175 
176  double xi0 = 2.666666666666666666667*xi*xi*xi-2*xi*xi-0.333333333333333333333*xi+0.166666666666666666667;
177  double xi1 = -10.6666666666666666667*xi*xi*xi+4*xi*xi+5.33333333333333333333*xi-1.33333333333333333333;
178  double xi2 = 16.0*xi*xi*xi-10.0*xi;
179  double xi3 = -10.6666666666666666667*xi*xi*xi-4*xi*xi+5.33333333333333333333*xi+1.33333333333333333333;
180  double xi4 = 2.66666666666666666667*xi*xi*xi+2*xi*xi-0.333333333333333333333*xi-0.166666666666666666667;
181  double eta0 = 2.66666666666666666667*eta*eta*eta-2*eta*eta-0.333333333333333333333*eta+0.166666666666666666667;
182  double eta1 = -10.6666666666666666667*eta*eta*eta+4*eta*eta+5.33333333333333333333*eta-1.33333333333333333333;
183  double eta2 = 16.0*eta*eta*eta-10.0*eta;
184  double eta3 = -10.6666666666666666667*eta*eta*eta-4*eta*eta+5.33333333333333333333*eta+1.33333333333333333333;
185  double eta4 = 2.66666666666666666667*eta*eta*eta+2*eta*eta-0.333333333333333333333*eta-0.166666666666666666667;
186 
187  values[0] = xi0*eta0;
188  values[1] = xi1*eta0;
189  values[2] = xi2*eta0;
190  values[3] = xi3*eta0;
191  values[4] = xi4*eta0;
192  values[5] = xi0*eta1;
193  values[6] = xi1*eta1;
194  values[7] = xi2*eta1;
195  values[8] = xi3*eta1;
196  values[9] = xi4*eta1;
197  values[10] = xi0*eta2;
198  values[11] = xi1*eta2;
199  values[12] = xi2*eta2;
200  values[13] = xi3*eta2;
201  values[14] = xi4*eta2;
202  values[15] = xi0*eta3;
203  values[16] = xi1*eta3;
204  values[17] = xi2*eta3;
205  values[18] = xi3*eta3;
206  values[19] = xi4*eta3;
207  values[20] = xi0*eta4;
208  values[21] = xi1*eta4;
209  values[22] = xi2*eta4;
210  values[23] = xi3*eta4;
211  values[24] = xi4*eta4;
212 }
213 
214 // values of the derivatives in eta-eta direction
215 static void C_Q_Q4_2D_DeriveEtaEta(double xi, double eta, double *values)
216 {
217 
218  double xi0 = 0.666666666666666666667*xi*xi*xi*xi-0.666666666666666666667*xi*xi*xi-0.166666666666666666667*xi*xi+0.166666666666666666667*xi;
219  double xi1 = -2.66666666666666666667*xi*xi*xi*xi+1.33333333333333333333*xi*xi*xi+2.66666666666666666667*xi*xi-1.33333333333333333333*xi;
220  double xi2 = 4.0*xi*xi*xi*xi-5.0*xi*xi+1.0;
221  double xi3 = -2.666666666666666666667*xi*xi*xi*xi-1.33333333333333333333*xi*xi*xi+2.66666666666666666667*xi*xi+1.33333333333333333333*xi;
222  double xi4 = 0.6666666666666667*xi*xi*xi*xi+0.6666666666666666666667*xi*xi*xi-0.1666666666666666666667*xi*xi-0.166666666666666666667*xi;
223  double eta0 = 8*eta*eta-4*eta-0.333333333333333333333;
224  double eta1 = -32*eta*eta+8*eta+5.33333333333333333333;
225  double eta2 = 48.0*eta*eta-10.0;
226  double eta3 = -32*eta*eta-8*eta+5.33333333333333333333;
227  double eta4 = 8*eta*eta+4*eta-0.333333333333333333333;
228 
229  values[0] = xi0*eta0;
230  values[1] = xi1*eta0;
231  values[2] = xi2*eta0;
232  values[3] = xi3*eta0;
233  values[4] = xi4*eta0;
234  values[5] = xi0*eta1;
235  values[6] = xi1*eta1;
236  values[7] = xi2*eta1;
237  values[8] = xi3*eta1;
238  values[9] = xi4*eta1;
239  values[10] = xi0*eta2;
240  values[11] = xi1*eta2;
241  values[12] = xi2*eta2;
242  values[13] = xi3*eta2;
243  values[14] = xi4*eta2;
244  values[15] = xi0*eta3;
245  values[16] = xi1*eta3;
246  values[17] = xi2*eta3;
247  values[18] = xi3*eta3;
248  values[19] = xi4*eta3;
249  values[20] = xi0*eta4;
250  values[21] = xi1*eta4;
251  values[22] = xi2*eta4;
252  values[23] = xi3*eta4;
253  values[24] = xi4*eta4;
254 }
255 
256 
257 // ***********************************************************************
258 
259 TBaseFunct2D *BF_C_Q_Q4_2D_Obj = new TBaseFunct2D
260  (25, BF_C_Q_Q4_2D, BFUnitSquare,
261  C_Q_Q4_2D_Funct, C_Q_Q4_2D_DeriveXi,
262  C_Q_Q4_2D_DeriveEta, C_Q_Q4_2D_DeriveXiXi,
263  C_Q_Q4_2D_DeriveXiEta, C_Q_Q4_2D_DeriveEtaEta, 4, 4,
264  0, NULL);
Definition: BaseFunct2D.h:27