ParMooN
 All Classes Functions Variables Friends Pages
BF_C_T_SV2_2D.h
1 // ***********************************************************************
2 // SV2 element, conforming, 2D
3 // ***********************************************************************
4 
5 // base function values
6 static void C_T_SV2_2D_Funct(double xi, double eta, double *values)
7 {
8  // first triangle
9  if( (xi-eta)>0 && (xi+2*eta-1)<0 )
10  {
11  values[0] = 2*xi*xi +8*xi*eta +8*eta*eta -3*xi -6*eta +1;
12  values[1] = -4*xi*xi -4*xi*eta +8*eta*eta +4*xi -4*eta;
13  values[2] = 2*xi*xi -4*xi*eta +2*eta*eta - xi + eta;
14  values[3] = 0;
15  values[4] = 0;
16  values[5] = 0;
17  values[6] = -12*xi*eta-24*eta*eta +12*eta;
18  values[7] = 12*xi*eta-12*eta*eta;
19  values[8] = 0;
20  values[9] = +18*eta*eta -3*eta;
21  }
22  else
23  // second triangle
24  if( (xi+2*eta-1)>=0 && (-2*xi-eta+1)<0 )
25  {
26  values[0] = 0;
27  values[1] = 0;
28  values[2] = 8*xi*xi +8*xi*eta +2*eta*eta -10*xi -5*eta +3;
29  values[3] = 8*xi*xi +20*xi*eta +8*eta*eta -12*xi -12*eta +4;
30  values[4] = 2*xi*xi +8*xi*eta +8*eta*eta -5*xi -10*eta +3;
31  values[5] = 0;
32  values[6] = 0;
33  values[7] =-24*xi*xi -36*xi*eta -12*eta*eta +36*xi +24*eta -12;
34  values[8] =-12*xi*xi -36*xi*eta -24*eta*eta +24*xi +36*eta -12;
35  values[9] = 18*xi*xi +36*xi*eta +18*eta*eta -33*xi -33*eta +15;
36  }
37  else
38  {
39  values[0] = 8*xi*xi +8*xi*eta +2*eta*eta -6*xi -3*eta +1;
40  values[1] = 0;
41  values[2] = 0;
42  values[3] = 0;
43  values[4] = 2*xi*xi -4*xi*eta +2*eta*eta + xi - eta;
44  values[5] = 8*xi*xi -4*xi*eta -4*eta*eta -4*xi +4*eta;
45  values[6] = -24*xi*xi -12*xi*eta +12*xi;
46  values[7] = 0;
47  values[8] = -12*xi*xi +12*xi*eta;
48  values[9] = 18*xi*xi -3*xi;
49  }
50 }
51 
52 // values of the derivatives in xi direction
53 static void C_T_SV2_2D_DeriveXi(double xi, double eta, double *values)
54 {
55  // first triangle
56  if( (xi-eta)>0 && (xi+2*eta-1)<0 )
57  {
58  values[0] = 4*xi +8*eta -3;
59  values[1] = -8*xi -4*eta +4;
60  values[2] = 4*xi -4*eta -1;
61  values[3] = 0;
62  values[4] = 0;
63  values[5] = 0;
64  values[6] = -12*eta;
65  values[7] = 12*eta;
66  values[8] = 0;
67  values[9] = 0;
68  }
69  else
70  // second triangle
71  if( (xi+2*eta-1)>=0 && (-2*xi-eta+1)<0 )
72  {
73  values[0] = 0;
74  values[1] = 0;
75  values[2] = 16*xi +8*eta -10;
76  values[3] = 16*xi +20*eta -12;
77  values[4] = 4*xi +8*eta -5;
78  values[5] = 0;
79  values[6] = 0;
80  values[7] =-48*xi -36*eta +36;
81  values[8] =-24*xi -36*eta +24;
82  values[9] = 36*xi +36*eta -33;
83  }
84  else
85  {
86  values[0] = 16*xi +8*eta -6;
87  values[1] = 0;
88  values[2] = 0;
89  values[3] = 0;
90  values[4] = 4*xi -4*eta +1;
91  values[5] = 16*xi -4*eta -4;
92  values[6] = -48*xi -12*eta +12;
93  values[7] = 0;
94  values[8] = -24*xi +12*eta;
95  values[9] = 36*xi -3;
96  }
97 }
98 
99 // values of the derivatives in eta direction
100 static void C_T_SV2_2D_DeriveEta(double xi, double eta, double *values)
101 {
102  // first triangle
103  if( (xi-eta)>0 && (xi+2*eta-1)<0 )
104  {
105  values[0] = +8*xi +16*eta -6;
106  values[1] = -4*xi +16*eta -4;
107  values[2] = -4*xi + 4*eta +1;
108  values[3] = 0;
109  values[4] = 0;
110  values[5] = 0;
111  values[6] = -12*xi -48*eta+12;
112  values[7] = 12*xi -24*eta;
113  values[8] = 0;
114  values[9] = +36*eta -3;
115  }
116  else
117  // second triangle
118  if( (xi+2*eta-1)>=0 && (-2*xi-eta+1)<0 )
119  {
120  values[0] = 0;
121  values[1] = 0;
122  values[2] = +8*xi + 4*eta - 5;
123  values[3] = +20*xi +16*eta -12;
124  values[4] = +8*xi +16*eta -10;
125  values[5] = 0;
126  values[6] = 0;
127  values[7] = -36*xi -24*eta +24;
128  values[8] = -36*xi -48*eta +36;
129  values[9] = +36*xi +36*eta -33;
130  }
131  else
132  {
133  values[0] = 8*xi +4*eta -3;
134  values[1] = 0;
135  values[2] = 0;
136  values[3] = 0;
137  values[4] = -4*xi +4*eta -1;
138  values[5] = -4*xi -8*eta +4;
139  values[6] = -12*xi;
140  values[7] = 0;
141  values[8] = +12*xi;
142  values[9] = 0;
143  }
144 }
145 
146 // values of the derivatives in xi-xi direction
147 static void C_T_SV2_2D_DeriveXiXi(double xi, double eta, double *values)
148 {
149  // first triangle
150  if( (xi-eta)>0 && (xi+2*eta-1)<0 )
151  {
152  values[0] = 4;
153  values[1] = -8;
154  values[2] = 4;
155  values[3] = 0;
156  values[4] = 0;
157  values[5] = 0;
158  values[6] = 0;
159  values[7] = 0;
160  values[8] = 0;
161  values[9] = 0;
162  }
163  else
164  // second triangle
165  if( (xi+2*eta-1)>=0 && (-2*xi-eta+1)<0 )
166  {
167  values[0] = 0;
168  values[1] = 0;
169  values[2] = 16;
170  values[3] = 16;
171  values[4] = 4;
172  values[5] = 0;
173  values[6] = 0;
174  values[7] = -48;
175  values[8] = -24;
176  values[9] = 36;
177  }
178  else
179  {
180  values[0] = 16;
181  values[1] = 0;
182  values[2] = 0;
183  values[3] = 0;
184  values[4] = 4;
185  values[5] = 16;
186  values[6] = -48;
187  values[7] = 0;
188  values[8] = -24;
189  values[9] = 36;
190  }
191 }
192 
193 // values of the derivatives in xi-eta direction
194 static void C_T_SV2_2D_DeriveXiEta(double xi, double eta, double *values)
195 {
196  // first triangle
197  if( (xi-eta)>0 && (xi+2*eta-1)<0 )
198  {
199  values[0] = 8;
200  values[1] = -4;
201  values[2] = -4;
202  values[3] = 0;
203  values[4] = 0;
204  values[5] = 0;
205  values[6] = -12;
206  values[7] = 12;
207  values[8] = 0;
208  values[9] = 0;
209  }
210  else
211  // second triangle
212  if( (xi+2*eta-1)>=0 && (-2*xi-eta+1)<0 )
213  {
214  values[0] = 0;
215  values[1] = 0;
216  values[2] = 8;
217  values[3] = 20;
218  values[4] = 8;
219  values[5] = 0;
220  values[6] = 0;
221  values[7] = -36;
222  values[8] = -36;
223  values[9] = 36;
224  }
225  else
226  {
227  values[0] = 8;
228  values[1] = 0;
229  values[2] = 0;
230  values[3] = 0;
231  values[4] = -4;
232  values[5] = -4;
233  values[6] = -12;
234  values[7] = 0;
235  values[8] = 12;
236  values[9] = 0;
237  }
238 }
239 
240 // values of the derivatives in eta-eta direction
241 static void C_T_SV2_2D_DeriveEtaEta(double xi, double eta, double *values)
242 {
243  // first triangle
244  if( (xi-eta)>0 && (xi+2*eta-1)<0 )
245  {
246  values[0] = 16;
247  values[1] = 16;
248  values[2] = 4;
249  values[3] = 0;
250  values[4] = 0;
251  values[5] = 0;
252  values[6] = -48;
253  values[7] = -24;
254  values[8] = 0;
255  values[9] = 36;
256  }
257  else
258  // second triangle
259  if( (xi+2*eta-1)>=0 && (-2*xi-eta+1)<0 )
260  {
261  values[0] = 0;
262  values[1] = 0;
263  values[2] = 4;
264  values[3] = 16;
265  values[4] = 16;
266  values[5] = 0;
267  values[6] = 0;
268  values[7] = -24;
269  values[8] = -48;
270  values[9] = 36;
271  }
272  else
273  {
274  values[0] = 4;
275  values[1] = 0;
276  values[2] = 0;
277  values[3] = 0;
278  values[4] = 4;
279  values[5] = -8;
280  values[6] = 0;
281  values[7] = 0;
282  values[8] = 0;
283  values[9] = 0;
284  }
285 }
286 
287 // ***********************************************************************
288 
289 TBaseFunct2D *BF_C_T_SV2_2D_Obj = new TBaseFunct2D
290  (10, BF_C_T_SV2_2D, BFUnitTriangle,
291  C_T_SV2_2D_Funct, C_T_SV2_2D_DeriveXi,
292  C_T_SV2_2D_DeriveEta, C_T_SV2_2D_DeriveXiXi,
293  C_T_SV2_2D_DeriveXiEta, C_T_SV2_2D_DeriveEtaEta, 2, 2,
294  0, NULL);
Definition: BaseFunct2D.h:27