ParMooN
 All Classes Functions Variables Friends Pages
BF_C_T_B3_2D.h
1 // ***********************************************************************
2 // conforming P3 element with cell bubbles
3 // ***********************************************************************
4 
5 // base function values
6 static void C_T_B3_2D_Funct(double xi, double eta, double *values)
7 {
8  double t1 = xi*eta;
9  double t2 = xi*xi;
10  double t3 = t2*eta;
11  double t4 = eta*eta;
12  double t5 = xi*t4;
13  double t6 = t2*xi;
14  double t7 = t6*eta;
15  double t8 = t2*t4;
16  double t9 = t4*eta;
17  double t10 = xi*t9;
18  double t12 = 1.0-11.0/2.0*xi-11.0/2.0*eta+9.0*t2+9.0*t1+9.0*t4
19  -9.0/2.0*t6+6.0*t3+6.0*t5-9.0/2.0*t9-21.0/2.0*t7
20  -21.0*t8-21.0/2.0*t10;
21 
22  values[0] = t12;
23  values[1] = 9.0*xi-45.0/2.0*t2-90.0*t1+27.0/2.0*t6+189.0*t3
24  +351.0/2.0*t5-189.0/2.0*t7-189.0*t8-189.0/2.0*t10;
25  values[2] = -9.0/2.0*xi+18.0*t2+63.0/2.0*t1-27.0/2.0*t6-135.0*t3
26  -27.0*t5+189.0/2.0*t7+189.0/2.0*t8;
27  values[3] = xi-9.0/2.0*t2+3.0/2.0*t1+9.0/2.0*t6-12.0*t3-3.0/2.0*t5
28  +21.0/2.0*t7+21.0/2.0*t8;
29  values[4] = 9.0*eta-90.0*t1-45.0/2.0*t4+351.0/2.0*t3+189.0*t5
30  +27.0/2.0*t9-189.0/2.0*t7-189.0*t8-189.0/2.0*t10;
31  values[5] = 45.0/2.0*t1-108.0*t3-27.0*t5+189.0/2.0*t7+189.0/2.0*t8;
32  values[6] = -9.0/2.0*eta+63.0/2.0*t1+18.0*t4-27.0*t3-135.0*t5
33  -27.0/2.0*t9+189.0/2.0*t8+189.0/2.0*t10;
34  values[7] = 45.0/2.0*t1-27.0*t3-108.0*t5+189.0/2.0*t8+189.0/2.0*t10;
35  values[8] = eta+3.0/2.0*t1-9.0/2.0*t4-3.0/2.0*t3-12.0*t5+9.0/2.0*t9
36  +21.0/2.0*t8+21.0/2.0*t10;
37  values[9] = 5.0*t1-12.0*t3-12.0*t5+7.0*t7+14.0*t8+7.0*t10;
38  values[10] = -7.0*t1+21.0*t3+14.0*t5-14.0*t7-21.0*t8-7.0*t10;
39  values[11] = -7.0*t1+14.0*t3+21.0*t5-7.0*t7-21.0*t8-14.0*t10;
40 }
41 
42 // values of the derivatives in xi direction
43 static void C_T_B3_2D_DeriveXi(double xi, double eta, double *values)
44 {
45  double t1 = xi*eta;
46  double t2 = eta*eta;
47  double t3 = xi*xi;
48  double t4 = t3*eta;
49  double t5 = xi*t2;
50  double t6 = t2*eta;
51 
52  values[0] = -11.0/2.0+18.0*xi+9.0*eta-27.0/2.0*t3+12.0*t1+6.0*t2
53  -63.0/2.0*t4-42.0*t5-21.0/2.0*t6;
54  values[1] = 9.0-45.0*xi-90.0*eta+81.0/2.0*t3+378.0*t1+351.0/2.0*t2
55  -567.0/2.0*t4-378.0*t5-189.0/2.0*t6;
56  values[2] = -9.0/2.0+36.0*xi+63.0/2.0*eta-81.0/2.0*t3-270.0*t1-27.0*t2
57  +567.0/2.0*t4+189.0*t5;
58  values[3] = 1.0-9.0*xi+3.0/2.0*eta+27.0/2.0*t3-24.0*t1-3.0/2.0*t2
59  +63.0/2.0*t4+21.0*t5;
60  values[4] = -90.0*eta+351.0*t1+189.0*t2-567.0/2.0*t4-378.0*t5-189.0/2.0*t6;
61  values[5] = 45.0/2.0*eta-216.0*t1-27.0*t2+567.0/2.0*t4+189.0*t5;
62  values[6] = 63.0/2.0*eta-54.0*t1-135.0*t2+189.0*t5+189.0/2.0*t6;
63  values[7] = 45.0/2.0*eta-54.0*t1-108.0*t2+189.0*t5+189.0/2.0*t6;
64  values[8] = 3.0/2.0*eta-3.0*t1-12.0*t2+21.0*t5+21.0/2.0*t6;
65  values[9] = 5.0*eta-24.0*t1-12.0*t2+21.0*t4+28.0*t5+7.0*t6;
66  values[10] = -7.0*eta+42.0*t1+14.0*t2-42.0*t4-42.0*t5-7.0*t6;
67  values[11] = -7.0*eta+28.0*t1+21.0*t2-21.0*t4-42.0*t5-14.0*t6;
68 }
69 
70 // values of the derivatives in eta direction
71 static void C_T_B3_2D_DeriveEta(double xi, double eta, double *values)
72 {
73  double t1 = xi*xi;
74  double t2 = xi*eta;
75  double t3 = t1*xi;
76  double t4 = t1*eta;
77  double t5 = eta*eta;
78  double t6 = xi*t5;
79 
80  values[0] = -11.0/2.0+9.0*xi+18.0*eta+6.0*t1+12.0*t2-27.0/2.0*t5
81  -21.0/2.0*t3-42.0*t4-63.0/2.0*t6;
82  values[1] = -90.0*xi+189.0*t1+351.0*t2-189.0/2.0*t3-378.0*t4-567.0/2.0*t6;
83  values[2] = 63.0/2.0*xi-135.0*t1-54.0*t2+189.0/2.0*t3+189.0*t4;
84  values[3] = 3.0/2.0*xi-12.0*t1-3.0*t2+21.0/2.0*t3+21.0*t4;
85  values[4] = 9.0-90.0*xi-45.0*eta+351.0/2.0*t1+378.0*t2+81.0/2.0*t5
86  -189.0/2.0*t3-378.0*t4-567.0/2.0*t6;
87  values[5] = 45.0/2.0*xi-108.0*t1-54.0*t2+189.0/2.0*t3+189.0*t4;
88  values[6] = -9.0/2.0+63.0/2.0*xi+36.0*eta-27.0*t1-270.0*t2-81.0/2.0*t5
89  +189.0*t4+567.0/2.0*t6;
90  values[7] = 45.0/2.0*xi-27.0*t1-216.0*t2+189.0*t4+567.0/2.0*t6;
91  values[8] = 1.0+3.0/2.0*xi-9.0*eta-3.0/2.0*t1-24.0*t2+27.0/2.0*t5+21.0*t4
92  +63.0/2.0*t6;
93  values[9] = 5.0*xi-12.0*t1-24.0*t2+7.0*t3+28.0*t4+21.0*t6;
94  values[10] = -7.0*xi+21.0*t1+28.0*t2-14.0*t3-42.0*t4-21.0*t6;
95  values[11] = -7.0*xi+14.0*t1+42.0*t2-7.0*t3-42.0*t4-42.0*t6;
96 }
97 
98 // values of the derivatives in xi-xi direction
99 static void C_T_B3_2D_DeriveXiXi(double xi, double eta, double *values)
100 {
101  double t1 = xi*eta;
102  double t2 = eta*eta;
103  double t10 = -54.0*eta+189.0*t2;
104 
105  values[0] = 18.0-27.0*xi+12.0*eta-63.0*t1-42.0*t2;
106  values[1] = -45.0+81.0*xi+378.0*eta-567.0*t1-378.0*t2;
107  values[2] = 36.0-81.0*xi-270.0*eta+567.0*t1+189.0*t2;
108  values[3] = -9.0+27.0*xi-24.0*eta+63.0*t1+21.0*t2;
109  values[4] = 351.0*eta-567.0*t1-378.0*t2;
110  values[5] = -216.0*eta+567.0*t1+189.0*t2;
111  values[6] = t10;
112  values[7] = t10;
113  values[8] = -3.0*eta+21.0*t2;
114  values[9] = -24.0*eta+42.0*t1+28.0*t2;
115  values[10] = 42.0*eta-84.0*t1-42.0*t2;
116  values[11] = 28.0*eta-42.0*t1-42.0*t2;
117 }
118 
119 // values of the derivatives in xi-eta direction
120 static void C_T_B3_2D_DeriveXiEta(double xi, double eta, double *values)
121 {
122  double t1 = xi*xi;
123  double t2 = xi*eta;
124  double t3 = eta*eta;
125 
126  values[0] = 9.0+12.0*xi+12.0*eta-63.0/2.0*t1-84.0*t2-63.0/2.0*t3;
127  values[1] = -90.0+378.0*xi+351.0*eta-567.0/2.0*t1-756.0*t2-567.0/2.0*t3;
128  values[2] = 63.0/2.0-270.0*xi-54.0*eta+567.0/2.0*t1+378.0*t2;
129  values[3] = 3.0/2.0-24.0*xi-3.0*eta+63.0/2.0*t1+42.0*t2;
130  values[4] = -90.0+351.0*xi+378.0*eta-567.0/2.0*t1-756.0*t2-567.0/2.0*t3;
131  values[5] = 45.0/2.0-216.0*xi-54.0*eta+567.0/2.0*t1+378.0*t2;
132  values[6] = 63.0/2.0-54.0*xi-270.0*eta+378.0*t2+567.0/2.0*t3;
133  values[7] = 45.0/2.0-54.0*xi-216.0*eta+378.0*t2+567.0/2.0*t3;
134  values[8] = 3.0/2.0-3.0*xi-24.0*eta+42.0*t2+63.0/2.0*t3;
135  values[9] = 5.0-24.0*xi-24.0*eta+21.0*t1+56.0*t2+21.0*t3;
136  values[10] = -7.0+42.0*xi+28.0*eta-42.0*t1-84.0*t2-21.0*t3;
137  values[11] = -7.0+28.0*xi+42.0*eta-21.0*t1-84.0*t2-42.0*t3;
138 }
139 
140 // values of the derivatives in eta-eta direction
141 static void C_T_B3_2D_DeriveEtaEta(double xi, double eta, double *values)
142 {
143  double t1 = xi*xi;
144  double t2 = xi*eta;
145  double t6 = -54.0*xi+189.0*t1;
146 
147  values[0] = 18.0+12.0*xi-27.0*eta-42.0*t1-63.0*t2;
148  values[1] = 351.0*xi-378.0*t1-567.0*t2;
149  values[2] = t6;
150  values[3] = -3.0*xi+21.0*t1;
151  values[4] = -45.0+378.0*xi+81.0*eta-378.0*t1-567.0*t2;
152  values[5] = t6;
153  values[6] = 36.0-270.0*xi-81.0*eta+189.0*t1+567.0*t2;
154  values[7] = -216.0*xi+189.0*t1+567.0*t2;
155  values[8] = -9.0-24.0*xi+27.0*eta+21.0*t1+63.0*t2;
156  values[9] = -24.0*xi+28.0*t1+42.0*t2;
157  values[10] = 28.0*xi-42.0*t1-42.0*t2;
158  values[11] = 42.0*xi-42.0*t1-84.0*t2;
159 }
160 
161 // ***********************************************************************
162 
163 TBaseFunct2D *BF_C_T_B3_2D_Obj = new TBaseFunct2D
164  (12, BF_C_T_B3_2D, BFUnitTriangle,
165  C_T_B3_2D_Funct, C_T_B3_2D_DeriveXi,
166  C_T_B3_2D_DeriveEta, C_T_B3_2D_DeriveXiXi,
167  C_T_B3_2D_DeriveXiEta, C_T_B3_2D_DeriveEtaEta, 4, 3,
168  0, NULL);
Definition: BaseFunct2D.h:27