ParMooN
 All Classes Functions Variables Friends Pages
BF_C_T_RR2_2D.h
1 // red refined triangle, second order, used for LPS
2 
3 // ***********************************************************************
4 // RR2 element, conforming, 2D
5 // ***********************************************************************
6 
7 // base function values
8 static void C_T_RR2_2D_Funct(double xi, double eta, double *values)
9 {
10  if(xi>=0.5)
11  {
12  // right triangle
13  values[0] = 0;
14  values[1] = 0;
15  values[2] = 8 * (xi + eta - 1) * (xi + eta - 0.75);
16  values[3] = -16 * (xi - 0.5) * (xi + eta - 1);
17  values[4] = 8 * (xi - 0.5) * (xi - 0.75);
18  values[5] = 16 * (xi - 0.5) * eta;
19  values[6] = 8 * eta * (-0.25 + eta);
20  values[7] = 0;
21  values[8] = 0;
22  values[9] = 0;
23  values[10] = 0;
24  values[11] = 0;
25  values[12] = 0;
26  values[13] = -16 * eta * (xi + eta - 1);
27  values[14] = 0;
28  }
29  else
30  {
31  if(eta>=0.5)
32  {
33  // upper triangle
34  values[0] = 0;
35  values[1] = 0;
36  values[2] = 0;
37  values[3] = 0;
38  values[4] = 0;
39  values[5] = 0;
40  values[6] = 8 * xi * (xi - 0.25);
41  values[7] = 16 * (-0.5 + eta) * xi;
42  values[8] = 8 * (-0.5 + eta) * (eta - 0.75);
43  values[9] = -16 * (-0.5 + eta) * (xi + eta - 1);
44  values[10] = 8 * (xi + eta - 1) * (xi + eta - 0.75);
45  values[11] = 0;
46  values[12] = 0;
47  values[13] = 0;
48  values[14] = -16 * xi * (xi + eta - 1);
49  }
50  else
51  {
52  if(xi+eta>=0.5)
53  {
54  // middle triangle
55  values[0] = 0;
56  values[1] = 0;
57  values[2] = 8 * (-0.5 + eta) * (-0.25 + eta);
58  values[3] = 0;
59  values[4] = 0;
60  values[5] = 0;
61  values[6] = 8 * (xi + eta - 0.5) * (xi + eta - 0.75);
62  values[7] = 0;
63  values[8] = 0;
64  values[9] = 0;
65  values[10] = 8 * (xi - 0.25) * (xi - 0.5);
66  values[11] = 0;
67  values[12] = 16 * (-0.5 + eta) * (xi - 0.5);
68  values[13] = -16 * (xi + eta - 0.5) * (-0.5 + eta);
69  values[14] = -16 * (xi + eta - 0.5) * (xi - 0.5);
70  }
71  else
72  {
73  // lower left triangle
74  values[0] = 8 * (xi + eta - 0.5) * (xi + eta - 0.25);
75  values[1] = -16 * xi * (xi + eta - 0.5);
76  values[2] = 8 * xi * (xi - 0.25);
77  values[3] = 0;
78  values[4] = 0;
79  values[5] = 0;
80  values[6] = 0;
81  values[7] = 0;
82  values[8] = 0;
83  values[9] = 0;
84  values[10] = 8 * eta * (-0.25 + eta);
85  values[11] = -16 * eta * (xi + eta - 0.5);
86  values[12] = 16 * eta * xi;
87  values[13] = 0;
88  values[14] = 0;
89  }
90  }
91  }
92 }
93 
94 // values of the derivatives in xi direction
95 static void C_T_RR2_2D_DeriveXi(double xi, double eta, double *values)
96 {
97  if(xi>=0.5)
98  {
99  // right triangle
100  values[0] = 0;
101  values[1] = 0;
102  values[2] = (16 * xi) + (16 * eta) - 14;
103  values[3] = - (32 * xi) - (16 * eta) + 24;
104  values[4] = (16 * xi) - 10;
105  values[5] = 16 * eta;
106  values[6] = 0;
107  values[7] = 0;
108  values[8] = 0;
109  values[9] = 0;
110  values[10] = 0;
111  values[11] = 0;
112  values[12] = 0;
113  values[13] = -16 * eta;
114  values[14] = 0;
115  }
116  else
117  {
118  if(eta>=0.5)
119  {
120  // upper triangle
121  values[0] = 0;
122  values[1] = 0;
123  values[2] = 0;
124  values[3] = 0;
125  values[4] = 0;
126  values[5] = 0;
127  values[6] = (16 * xi) - 2;
128  values[7] = -8 + (16 * eta);
129  values[8] = 0;
130  values[9] = 8 - (16 * eta);
131  values[10] = (16 * xi) + (16 * eta) - 14;
132  values[11] = 0;
133  values[12] = 0;
134  values[13] = 0;
135  values[14] = - (32 * xi) - (16 * eta) + 16;
136  }
137  else
138  {
139  if(xi+eta>=0.5)
140  {
141  // middle triangle
142  values[0] = 0;
143  values[1] = 0;
144  values[2] = 0;
145  values[3] = 0;
146  values[4] = 0;
147  values[5] = 0;
148  values[6] = (16 * xi) + (16 * eta) - 10;
149  values[7] = 0;
150  values[8] = 0;
151  values[9] = 0;
152  values[10] = (16 * xi) - 6;
153  values[11] = 0;
154  values[12] = -8 + (16 * eta);
155  values[13] = 8 - (16 * eta);
156  values[14] = - (32 * xi) - (16 * eta) + 16;
157  }
158  else
159  {
160  // lower left triangle
161  values[0] = (16 * xi) + (16 * eta) - 6;
162  values[1] = - (32 * xi) - (16 * eta) + 8;
163  values[2] = (16 * xi) - 2;
164  values[3] = 0;
165  values[4] = 0;
166  values[5] = 0;
167  values[6] = 0;
168  values[7] = 0;
169  values[8] = 0;
170  values[9] = 0;
171  values[10] = 0;
172  values[11] = -16 * eta;
173  values[12] = 16 * eta;
174  values[13] = 0;
175  values[14] = 0;
176  }
177  }
178  }
179 }
180 
181 // values of the derivatives in eta direction
182 static void C_T_RR2_2D_DeriveEta(double xi, double eta, double *values)
183 {
184  if(xi>=0.5)
185  {
186  // right triangle
187  values[0] = 0;
188  values[1] = 0;
189  values[2] = (16 * xi) + (16 * eta) - 14;
190  values[3] = - (16 * xi) + 8;
191  values[4] = 0;
192  values[5] = (16 * xi) - 8;
193  values[6] = -2 + (16 * eta);
194  values[7] = 0;
195  values[8] = 0;
196  values[9] = 0;
197  values[10] = 0;
198  values[11] = 0;
199  values[12] = 0;
200  values[13] = - (16 * xi) - (32 * eta) + 16;
201  values[14] = 0;
202  }
203  else
204  {
205  if(eta>=0.5)
206  {
207  // upper triangle
208  values[0] = 0;
209  values[1] = 0;
210  values[2] = 0;
211  values[3] = 0;
212  values[4] = 0;
213  values[5] = 0;
214  values[6] = 0;
215  values[7] = 16 * xi;
216  values[8] = (16 * eta) - 10;
217  values[9] = - (16 * xi) - (32 * eta) + 24;
218  values[10] = (16 * xi) + (16 * eta) - 14;
219  values[11] = 0;
220  values[12] = 0;
221  values[13] = 0;
222  values[14] = -16 * xi;
223  }
224  else
225  {
226  if(xi+eta>=0.5)
227  {
228  // middle triangle
229  values[0] = 0;
230  values[1] = 0;
231  values[2] = -6 + (16 * eta);
232  values[3] = 0;
233  values[4] = 0;
234  values[5] = 0;
235  values[6] = (16 * xi) + (16 * eta) - 10;
236  values[7] = 0;
237  values[8] = 0;
238  values[9] = 0;
239  values[10] = 0;
240  values[11] = 0;
241  values[12] = (16 * xi) - 8;
242  values[13] = - (16 * xi) - (32 * eta) + 16;
243  values[14] = - (16 * xi) + 0.80e1;
244  }
245  else
246  {
247  // lower left triangle
248  values[0] = (16 * xi) + (16 * eta) - 6;
249  values[1] = -16 * xi;
250  values[2] = 0;
251  values[3] = 0;
252  values[4] = 0;
253  values[5] = 0;
254  values[6] = 0;
255  values[7] = 0;
256  values[8] = 0;
257  values[9] = 0;
258  values[10] = -2 + (16 * eta);
259  values[11] = - (16 * xi) - (32 * eta) + 8;
260  values[12] = 16 * xi;
261  values[13] = 0;
262  values[14] = 0;
263  }
264  }
265  }
266 }
267 
268 // values of the derivatives in xi-xi direction
269 static void C_T_RR2_2D_DeriveXiXi(double xi, double eta, double *values)
270 {
271  if(xi>=0.5)
272  {
273  // right triangle
274  values[0] = 0;
275  values[1] = 0;
276  values[2] = 16;
277  values[3] = -32;
278  values[4] = 16;
279  values[5] = 0;
280  values[6] = 0;
281  values[7] = 0;
282  values[8] = 0;
283  values[9] = 0;
284  values[10] = 0;
285  values[11] = 0;
286  values[12] = 0;
287  values[13] = 0;
288  values[14] = 0;
289  }
290  else
291  {
292  if(eta>=0.5)
293  {
294  // upper triangle
295  values[0] = 0;
296  values[1] = 0;
297  values[2] = 0;
298  values[3] = 0;
299  values[4] = 0;
300  values[5] = 0;
301  values[6] = 16;
302  values[7] = 0;
303  values[8] = 0;
304  values[9] = 0;
305  values[10] = 16;
306  values[11] = 0;
307  values[12] = 0;
308  values[13] = 0;
309  values[14] = -32;
310  }
311  else
312  {
313  if(xi+eta>=0.5)
314  {
315  // middle triangle
316  values[0] = 0;
317  values[1] = 0;
318  values[2] = 0;
319  values[3] = 0;
320  values[4] = 0;
321  values[5] = 0;
322  values[6] = 16;
323  values[7] = 0;
324  values[8] = 0;
325  values[9] = 0;
326  values[10] = 16;
327  values[11] = 0;
328  values[12] = 0;
329  values[13] = 0;
330  values[14] = -32;
331  }
332  else
333  {
334  // lower left triangle
335  values[0] = 16;
336  values[1] = -32;
337  values[2] = 16;
338  values[3] = 0;
339  values[4] = 0;
340  values[5] = 0;
341  values[6] = 0;
342  values[7] = 0;
343  values[8] = 0;
344  values[9] = 0;
345  values[10] = 0;
346  values[11] = 0;
347  values[12] = 0;
348  values[13] = 0;
349  values[14] = 0;
350  }
351  }
352  }
353 }
354 
355 // values of the derivatives in xi-eta direction
356 static void C_T_RR2_2D_DeriveXiEta(double xi, double eta, double *values)
357 {
358  if(xi>=0.5)
359  {
360  // right triangle
361  values[0] = 0;
362  values[1] = 0;
363  values[2] = 16;
364  values[3] = -16;
365  values[4] = 0;
366  values[5] = 16;
367  values[6] = 0;
368  values[7] = 0;
369  values[8] = 0;
370  values[9] = 0;
371  values[10] = 0;
372  values[11] = 0;
373  values[12] = 0;
374  values[13] = -16;
375  values[14] = 0;
376  }
377  else
378  {
379  if(eta>=0.5)
380  {
381  // upper triangle
382  values[0] = 0;
383  values[1] = 0;
384  values[2] = 0;
385  values[3] = 0;
386  values[4] = 0;
387  values[5] = 0;
388  values[6] = 0;
389  values[7] = 16;
390  values[8] = 0;
391  values[9] = -16;
392  values[10] = 16;
393  values[11] = 0;
394  values[12] = 0;
395  values[13] = 0;
396  values[14] = -16;
397  }
398  else
399  {
400  if(xi+eta>=0.5)
401  {
402  // middle triangle
403  values[0] = 0;
404  values[1] = 0;
405  values[2] = 0;
406  values[3] = 0;
407  values[4] = 0;
408  values[5] = 0;
409  values[6] = 16;
410  values[7] = 0;
411  values[8] = 0;
412  values[9] = 0;
413  values[10] = 0;
414  values[11] = 0;
415  values[12] = 16;
416  values[13] = -16;
417  values[14] = -16;
418  }
419  else
420  {
421  // lower left triangle
422  values[0] = 16;
423  values[1] = -16;
424  values[2] = 0;
425  values[3] = 0;
426  values[4] = 0;
427  values[5] = 0;
428  values[6] = 0;
429  values[7] = 0;
430  values[8] = 0;
431  values[9] = 0;
432  values[10] = 0;
433  values[11] = -16;
434  values[12] = 16;
435  values[13] = 0;
436  values[14] = 0;
437  }
438  }
439  }
440 }
441 
442 // values of the derivatives in eta-eta direction
443 static void C_T_RR2_2D_DeriveEtaEta(double xi, double eta, double *values)
444 {
445  if(xi>=0.5)
446  {
447  // right triangle
448  values[0] = 0;
449  values[1] = 0;
450  values[2] = 16;
451  values[3] = 0;
452  values[4] = 0;
453  values[5] = 0;
454  values[6] = 16;
455  values[7] = 0;
456  values[8] = 0;
457  values[9] = 0;
458  values[10] = 0;
459  values[11] = 0;
460  values[12] = 0;
461  values[13] = -32;
462  values[14] = 0;
463  }
464  else
465  {
466  if(eta>=0.5)
467  {
468  // upper triangle
469  values[0] = 0;
470  values[1] = 0;
471  values[2] = 0;
472  values[3] = 0;
473  values[4] = 0;
474  values[5] = 0;
475  values[6] = 0;
476  values[7] = 0;
477  values[8] = 16;
478  values[9] = -32;
479  values[10] = 16;
480  values[11] = 0;
481  values[12] = 0;
482  values[13] = 0;
483  values[14] = 0;
484  }
485  else
486  {
487  if(xi+eta>=0.5)
488  {
489  // middle triangle
490  values[0] = 0;
491  values[1] = 0;
492  values[2] = 16;
493  values[3] = 0;
494  values[4] = 0;
495  values[5] = 0;
496  values[6] = 16;
497  values[7] = 0;
498  values[8] = 0;
499  values[9] = 0;
500  values[10] = 0;
501  values[11] = 0;
502  values[12] = 0;
503  values[13] = -32;
504  values[14] = 0;
505  }
506  else
507  {
508  // lower left triangle
509  values[0] = 16;
510  values[1] = 0;
511  values[2] = 0;
512  values[3] = 0;
513  values[4] = 0;
514  values[5] = 0;
515  values[6] = 0;
516  values[7] = 0;
517  values[8] = 0;
518  values[9] = 0;
519  values[10] = 16;
520  values[11] = -32;
521  values[12] = 0;
522  values[13] = 0;
523  values[14] = 0;
524  }
525  }
526  }
527 }
528 
529 // ***********************************************************************
530 
531 TBaseFunct2D *BF_C_T_RR2_2D_Obj = new TBaseFunct2D
532  (15, BF_C_T_B2_2D, BFUnitTriangle,
533  C_T_RR2_2D_Funct, C_T_RR2_2D_DeriveXi,
534  C_T_RR2_2D_DeriveEta, C_T_RR2_2D_DeriveXiXi,
535  C_T_RR2_2D_DeriveXiEta, C_T_RR2_2D_DeriveEtaEta, 2, 2,
536  0, NULL);
Definition: BaseFunct2D.h:27