ParMooN
 All Classes Functions Variables Friends Pages
NF_N_T_RT3_3D.h
1 // ***********************************************************************
2 // Raviart-Thomas element of third order on hexahedra, 3D
3 // ***********************************************************************
4 
5 static double RT3T_tp = 0.16666666666666666667;
6 
7 /* for all functionals */
8 static double NF_N_T_RT3_3D_Xi[] = {
9  RT3T_tp,2*RT3T_tp,0.5,4*RT3T_tp,RT3T_tp,2*RT3T_tp,0.5,RT3T_tp,2*RT3T_tp,RT3T_tp,
10  RT3T_tp,RT3T_tp,RT3T_tp,RT3T_tp,2*RT3T_tp,2*RT3T_tp,2*RT3T_tp,0.5,0.5,4*RT3T_tp,
11  RT3T_tp,2*RT3T_tp,0.5,4*RT3T_tp,RT3T_tp,2*RT3T_tp,0.5,RT3T_tp,2*RT3T_tp,RT3T_tp,
12  0,0,0,0,0,0,0,0,0,0,
13  //inner dof
14  0.25,
15  0.206829931610673204083980900024961,
16  0.206829931610673204083980900024961,
17  0.379510205167980387748057299925117,
18  0.206829931610673204083980900024961,
19  0.821035883105467230906058078714215e-1,
20  0.821035883105467230906058078714215e-1,
21  0.753689235068359830728182576385735,
22  0.821035883105467230906058078714215e-1,
23  0.578195050519799725317663886414270e-2,
24  0.578195050519799725317663886414270e-2,
25  0.982654148484406008240470083407572,
26  0.578195050519799725317663886414270e-2,
27  0.50532740018894224425624528557907e-1,
28  0.449467259981105775574375471442092,
29  0.50532740018894224425624528557907e-1,
30  0.449467259981105775574375471442092,
31  0.50532740018894224425624528557907e-1,
32  0.449467259981105775574375471442092,
33  0.229066536116811139600408854554753,
34  0.356395827885340437169173969506114e-1,
35  0.229066536116811139600408854554753,
36  0.356395827885340437169173969506114e-1,
37  0.229066536116811139600408854554753,
38  0.229066536116811139600408854554753,
39  0.506227344977843677082264893939883,
40  0.506227344977843677082264893939883,
41  0.506227344977843677082264893939883,
42  0.229066536116811139600408854554753,
43  0.229066536116811139600408854554753,
44  0.356395827885340437169173969506114e-1,
45  0.366077495531974236787738546327104e-1,
46  0.190486041934633455699433285315099,
47  0.366077495531974236787738546327104e-1,
48  0.366077495531974236787738546327104e-1,
49  0.366077495531974236787738546327104e-1,
50  0.190486041934633455699433285315099,
51  0.736298458958971696943019005419480,
52  0.736298458958971696943019005419480,
53  0.736298458958971696943019005419480,
54  0.366077495531974236787738546327104e-1,
55  0.366077495531974236787738546327104e-1,
56  0.190486041934633455699433285315099
57 };
58 static double NF_N_T_RT3_3D_Eta[] = {
59  RT3T_tp,RT3T_tp,RT3T_tp,RT3T_tp,2*RT3T_tp,2*RT3T_tp,2*RT3T_tp,0.5,0.5,4*RT3T_tp,
60  0,0,0,0,0,0,0,0,0,0,
61  4*RT3T_tp,0.5,2*RT3T_tp,RT3T_tp,0.5,2*RT3T_tp,RT3T_tp,2*RT3T_tp,RT3T_tp,RT3T_tp,
62  RT3T_tp,2*RT3T_tp,0.5,4*RT3T_tp,RT3T_tp,2*RT3T_tp,0.5,RT3T_tp,2*RT3T_tp,RT3T_tp,
63  //inner dof
64  0.25,
65  0.206829931610673204083980900024961,
66  0.379510205167980387748057299925117,
67  0.206829931610673204083980900024961,
68  0.206829931610673204083980900024961,
69  0.821035883105467230906058078714215e-1,
70  0.753689235068359830728182576385735,
71  0.821035883105467230906058078714215e-1,
72  0.821035883105467230906058078714215e-1,
73  0.578195050519799725317663886414270e-2,
74  0.982654148484406008240470083407572,
75  0.578195050519799725317663886414270e-2,
76  0.578195050519799725317663886414270e-2,
77  0.449467259981105775574375471442092,
78  0.50532740018894224425624528557907e-1,
79  0.50532740018894224425624528557907e-1,
80  0.449467259981105775574375471442092,
81  0.449467259981105775574375471442092,
82  0.50532740018894224425624528557907e-1,
83  0.356395827885340437169173969506114e-1,
84  0.229066536116811139600408854554753,
85  0.229066536116811139600408854554753,
86  0.506227344977843677082264893939883,
87  0.506227344977843677082264893939883,
88  0.506227344977843677082264893939883,
89  0.229066536116811139600408854554753,
90  0.356395827885340437169173969506114e-1,
91  0.229066536116811139600408854554753,
92  0.229066536116811139600408854554753,
93  0.356395827885340437169173969506114e-1,
94  0.229066536116811139600408854554753,
95  0.190486041934633455699433285315099,
96  0.366077495531974236787738546327104e-1,
97  0.366077495531974236787738546327104e-1,
98  0.736298458958971696943019005419480,
99  0.736298458958971696943019005419480,
100  0.736298458958971696943019005419480,
101  0.366077495531974236787738546327104e-1,
102  0.190486041934633455699433285315099,
103  0.366077495531974236787738546327104e-1,
104  0.190486041934633455699433285315099,
105  0.366077495531974236787738546327104e-1,
106  0.366077495531974236787738546327104e-1
107 };
108 static double NF_N_T_RT3_3D_Zeta[]= {
109  0,0,0,0,0,0,0,0,0,0,
110  RT3T_tp,2*RT3T_tp,0.5,4*RT3T_tp,RT3T_tp,2*RT3T_tp,0.5,RT3T_tp,2*RT3T_tp,RT3T_tp,
111  RT3T_tp,RT3T_tp,RT3T_tp,RT3T_tp,2*RT3T_tp,2*RT3T_tp,2*RT3T_tp,0.5,0.5,4*RT3T_tp,
112  RT3T_tp,RT3T_tp,RT3T_tp,RT3T_tp,2*RT3T_tp,2*RT3T_tp,2*RT3T_tp,0.5,0.5,4*RT3T_tp,
113  //inner dof
114  0.25,
115  0.379510205167980387748057299925117,
116  0.206829931610673204083980900024961,
117  0.206829931610673204083980900024961,
118  0.206829931610673204083980900024961,
119  0.753689235068359830728182576385737,
120  0.82103588310546723090605807871423e-1,
121  0.821035883105467230906058078714225e-1,
122  0.821035883105467230906058078714225e-1,
123  0.982654148484406008240470083407571,
124  0.5781950505197997253176638864142e-2,
125  0.578195050519799725317663886414230e-2,
126  0.578195050519799725317663886414260e-2,
127  0.449467259981105775574375471442094,
128  0.449467259981105775574375471442094,
129  0.449467259981105775574375471442094,
130  0.50532740018894224425624528557909e-1,
131  0.50532740018894224425624528557909e-1,
132  0.50532740018894224425624528557909e-1,
133  0.506227344977843677082264893939883,
134  0.506227344977843677082264893939883,
135  0.506227344977843677082264893939883,
136  0.229066536116811139600408854554753,
137  0.229066536116811139600408854554753,
138  0.35639582788534043716917396950611e-1,
139  0.35639582788534043716917396950611e-1,
140  0.229066536116811139600408854554753,
141  0.229066536116811139600408854554753,
142  0.35639582788534043716917396950611e-1,
143  0.229066536116811139600408854554753,
144  0.229066536116811139600408854554753,
145  0.736298458958971696943019005419481,
146  0.736298458958971696943019005419481,
147  0.736298458958971696943019005419481,
148  0.190486041934633455699433285315100,
149  0.36607749553197423678773854632711e-1,
150  0.36607749553197423678773854632711e-1,
151  0.190486041934633455699433285315100,
152  0.36607749553197423678773854632711e-1,
153  0.366077495531974236787738546327106e-1,
154  0.36607749553197423678773854632711e-1,
155  0.190486041934633455699433285315100,
156  0.366077495531974236787738546327106e-1
157 };
158 
159 static double NF_N_T_RT3_3D_Weights[]= {
160  -0.205001886586399158405865177642941e-1,
161  0.142503058228669012484397415358704e-1,
162  0.142503058228669012484397415358704e-1,
163  0.142503058228669012484397415358704e-1,
164  0.142503058228669012484397415358704e-1,
165  0.196703331313390098756280342445466e-2,
166  0.196703331313390098756280342445466e-2,
167  0.196703331313390098756280342445466e-2,
168  0.196703331313390098756280342445466e-2,
169  0.169834109092887379837744566704016e-3,
170  0.169834109092887379837744566704016e-3,
171  0.169834109092887379837744566704016e-3,
172  0.169834109092887379837744566704016e-3,
173  0.457968382446728180074351446297276e-2,
174  0.457968382446728180074351446297276e-2,
175  0.457968382446728180074351446297276e-2,
176  0.457968382446728180074351446297276e-2,
177  0.457968382446728180074351446297276e-2,
178  0.457968382446728180074351446297276e-2,
179  0.570448580868191850680255862783040e-2,
180  0.570448580868191850680255862783040e-2,
181  0.570448580868191850680255862783040e-2,
182  0.570448580868191850680255862783040e-2,
183  0.570448580868191850680255862783040e-2,
184  0.570448580868191850680255862783040e-2,
185  0.570448580868191850680255862783040e-2,
186  0.570448580868191850680255862783040e-2,
187  0.570448580868191850680255862783040e-2,
188  0.570448580868191850680255862783040e-2,
189  0.570448580868191850680255862783040e-2,
190  0.570448580868191850680255862783040e-2,
191  0.214051914116209259648335300092023e-2,
192  0.214051914116209259648335300092023e-2,
193  0.214051914116209259648335300092023e-2,
194  0.214051914116209259648335300092023e-2,
195  0.214051914116209259648335300092023e-2,
196  0.214051914116209259648335300092023e-2,
197  0.214051914116209259648335300092023e-2,
198  0.214051914116209259648335300092023e-2,
199  0.214051914116209259648335300092023e-2,
200  0.214051914116209259648335300092023e-2,
201  0.214051914116209259648335300092023e-2,
202  0.214051914116209259648335300092023e-2
203 };
204 
205 /* face 0 0 */
206 static double NF_N_T_RT3_3D_F0_Xi[] = {RT3T_tp,2*RT3T_tp,0.5,4*RT3T_tp,RT3T_tp,2*RT3T_tp,0.5,RT3T_tp,2*RT3T_tp,RT3T_tp};
207 static double NF_N_T_RT3_3D_F0_Eta[] = {RT3T_tp,RT3T_tp,RT3T_tp,RT3T_tp,2*RT3T_tp,2*RT3T_tp,2*RT3T_tp,0.5,0.5,4*RT3T_tp};
208 static double NF_N_T_RT3_3D_F0_Zeta[] = {0,0,0,0,0,0,0,0,0,0};
209 
210 /* face 1 1 */
211 static double NF_N_T_RT3_3D_F1_Xi[] = {RT3T_tp,RT3T_tp,RT3T_tp,RT3T_tp,2*RT3T_tp,2*RT3T_tp,2*RT3T_tp,0.5,0.5,4*RT3T_tp};
212 static double NF_N_T_RT3_3D_F1_Eta[] = {0,0,0,0,0,0,0,0,0,0};
213 static double NF_N_T_RT3_3D_F1_Zeta[] = {RT3T_tp,2*RT3T_tp,0.5,4*RT3T_tp,RT3T_tp,2*RT3T_tp,0.5,RT3T_tp,2*RT3T_tp,RT3T_tp};
214 
215 /* face 2 2 */
216 static double NF_N_T_RT3_3D_F2_Xi[] = {RT3T_tp,2*RT3T_tp,0.5,4*RT3T_tp,RT3T_tp,2*RT3T_tp,0.5,RT3T_tp,2*RT3T_tp,RT3T_tp};
217 static double NF_N_T_RT3_3D_F2_Eta[] = {4*RT3T_tp,0.5,2*RT3T_tp,RT3T_tp,0.5,2*RT3T_tp,RT3T_tp,2*RT3T_tp,RT3T_tp,RT3T_tp};
218 static double NF_N_T_RT3_3D_F2_Zeta[] = {RT3T_tp,RT3T_tp,RT3T_tp,RT3T_tp,2*RT3T_tp,2*RT3T_tp,2*RT3T_tp,0.5,0.5,4*RT3T_tp};
219 
220 /* face 3 3 */
221 static double NF_N_T_RT3_3D_F3_Xi[] = {0,0,0,0,0,0,0,0,0,0};
222 static double NF_N_T_RT3_3D_F3_Eta[] = {RT3T_tp,2*RT3T_tp,0.5,4*RT3T_tp,RT3T_tp,2*RT3T_tp,0.5,RT3T_tp,2*RT3T_tp,RT3T_tp};
223 static double NF_N_T_RT3_3D_F3_Zeta[] = {RT3T_tp,RT3T_tp,RT3T_tp,RT3T_tp,2*RT3T_tp,2*RT3T_tp,2*RT3T_tp,0.5,0.5,4*RT3T_tp};
224 
225 static double *NF_N_T_RT3_3D_XiArray[4] = {
226  NF_N_T_RT3_3D_F0_Xi,
227  NF_N_T_RT3_3D_F1_Xi,
228  NF_N_T_RT3_3D_F2_Xi,
229  NF_N_T_RT3_3D_F3_Xi };
230 
231 static double *NF_N_T_RT3_3D_EtaArray[4] = {
232  NF_N_T_RT3_3D_F0_Eta,
233  NF_N_T_RT3_3D_F1_Eta,
234  NF_N_T_RT3_3D_F2_Eta,
235  NF_N_T_RT3_3D_F3_Eta };
236 
237 static double *NF_N_T_RT3_3D_ZetaArray[4] = {
238  NF_N_T_RT3_3D_F0_Zeta,
239  NF_N_T_RT3_3D_F1_Zeta,
240  NF_N_T_RT3_3D_F2_Zeta,
241  NF_N_T_RT3_3D_F3_Zeta };
242 
243 static double NF_N_T_RT3_3D_T[1] = {};// ???
244 static double NF_N_T_RT3_3D_S[1] = {};// ???
245 
246 void NF_N_T_RT3_3D_EvalAll(TCollection *Coll, TBaseCell *Cell,
247  double *PointValues, double *Functionals)
248 {
249  // PointValues[4*i + j] means i-th component (i=0 for x, i=1 for y, i=2 for z)
250  // at j-th evaluation point (see NF_N_T_RT3_3D_Xi, ...Eta, ...Zeta)
251  //face 0
252  Functionals[0] = -PointValues[166];
253  Functionals[1] = -PointValues[167];
254  Functionals[2] = -PointValues[168];
255  Functionals[3] = -PointValues[169];
256  Functionals[4] = -PointValues[170];
257  Functionals[5] = -PointValues[171];
258  Functionals[6] = -PointValues[172];
259  Functionals[7] = -PointValues[173];
260  Functionals[8] = -PointValues[174];
261  Functionals[9] = -PointValues[175];
262  //face 1
263  Functionals[10] = -PointValues[93];
264  Functionals[11] = -PointValues[94];
265  Functionals[12] = -PointValues[95];
266  Functionals[13] = -PointValues[96];
267  Functionals[14] = -PointValues[97];
268  Functionals[15] = -PointValues[98];
269  Functionals[16] = -PointValues[99];
270  Functionals[17] = -PointValues[100];
271  Functionals[18] = -PointValues[101];
272  Functionals[19] = -PointValues[102];
273  //face 2
274  Functionals[20] = PointValues[20]+PointValues[103]+PointValues[186];
275  Functionals[21] = PointValues[21]+PointValues[104]+PointValues[187];
276  Functionals[22] = PointValues[22]+PointValues[105]+PointValues[188];
277  Functionals[23] = PointValues[23]+PointValues[106]+PointValues[189];
278  Functionals[24] = PointValues[24]+PointValues[107]+PointValues[190];
279  Functionals[25] = PointValues[25]+PointValues[108]+PointValues[191];
280  Functionals[26] = PointValues[26]+PointValues[109]+PointValues[192];
281  Functionals[27] = PointValues[27]+PointValues[110]+PointValues[193];
282  Functionals[28] = PointValues[28]+PointValues[111]+PointValues[194];
283  Functionals[29] = PointValues[29]+PointValues[112]+PointValues[195];
284  //face 3
285  Functionals[30] = -PointValues[30];
286  Functionals[31] = -PointValues[31];
287  Functionals[32] = -PointValues[32];
288  Functionals[33] = -PointValues[33];
289  Functionals[34] = -PointValues[34];
290  Functionals[35] = -PointValues[35];
291  Functionals[36] = -PointValues[36];
292  Functionals[37] = -PointValues[37];
293  Functionals[38] = -PointValues[38];
294  Functionals[39] = -PointValues[39];
295 
296  //inner dofs
297  int i;
298  double s;
299 
300  //x-component
301  s = 0;
302  for(i=0;i<43;i++)
303  s += PointValues[i+40] * NF_N_T_RT3_3D_Weights[i];
304  Functionals[40] = s;
305  s = 0;
306  for(i=0;i<43;i++)
307  s += PointValues[i+40] * NF_N_T_RT3_3D_Xi[i+40] * NF_N_T_RT3_3D_Weights[i];
308  Functionals[41] = s;
309  s = 0;
310  for(i=0;i<43;i++)
311  s += PointValues[i+40] * NF_N_T_RT3_3D_Eta[i+40] * NF_N_T_RT3_3D_Weights[i];
312  Functionals[42] = s;
313  s = 0;
314  for(i=0;i<43;i++)
315  s += PointValues[i+40] * NF_N_T_RT3_3D_Zeta[i+40] * NF_N_T_RT3_3D_Weights[i];
316  Functionals[43] = s;
317  s = 0;
318  for(i=0;i<43;i++)
319  s += PointValues[i+40] * NF_N_T_RT3_3D_Xi[i+40]*NF_N_T_RT3_3D_Xi[i+40] * NF_N_T_RT3_3D_Weights[i];
320  Functionals[44] = s;
321  s = 0;
322  for(i=0;i<43;i++)
323  s += PointValues[i+40] * NF_N_T_RT3_3D_Xi[i+40]*NF_N_T_RT3_3D_Eta[i+40] * NF_N_T_RT3_3D_Weights[i];
324  Functionals[45] = s;
325  s = 0;
326  for(i=0;i<43;i++)
327  s += PointValues[i+40] * NF_N_T_RT3_3D_Xi[i+40]*NF_N_T_RT3_3D_Zeta[i+40] * NF_N_T_RT3_3D_Weights[i];
328  Functionals[46] = s;
329  s = 0;
330  for(i=0;i<43;i++)
331  s += PointValues[i+40] * NF_N_T_RT3_3D_Eta[i+40]*NF_N_T_RT3_3D_Eta[i+40] * NF_N_T_RT3_3D_Weights[i];
332  Functionals[47] = s;
333  s = 0;
334  for(i=0;i<43;i++)
335  s += PointValues[i+40] * NF_N_T_RT3_3D_Eta[i+40]*NF_N_T_RT3_3D_Zeta[i+40] * NF_N_T_RT3_3D_Weights[i];
336  Functionals[48] = s;
337  s = 0;
338  for(i=0;i<43;i++)
339  s += PointValues[i+40] * NF_N_T_RT3_3D_Zeta[i+40]*NF_N_T_RT3_3D_Zeta[i+40] * NF_N_T_RT3_3D_Weights[i];
340  Functionals[49] = s;
341 
342  //y-component
343  s = 0;
344  for(i=0;i<43;i++)
345  s += PointValues[i+123] * NF_N_T_RT3_3D_Weights[i];
346  Functionals[50] = s;
347  s = 0;
348  for(i=0;i<43;i++)
349  s += PointValues[i+123] * NF_N_T_RT3_3D_Xi[i+40] * NF_N_T_RT3_3D_Weights[i];
350  Functionals[51] = s;
351  s = 0;
352  for(i=0;i<43;i++)
353  s += PointValues[i+123] * NF_N_T_RT3_3D_Eta[i+40] * NF_N_T_RT3_3D_Weights[i];
354  Functionals[52] = s;
355  s = 0;
356  for(i=0;i<43;i++)
357  s += PointValues[i+123] * NF_N_T_RT3_3D_Zeta[i+40] * NF_N_T_RT3_3D_Weights[i];
358  Functionals[53] = s;
359  s = 0;
360  for(i=0;i<43;i++)
361  s += PointValues[i+123] * NF_N_T_RT3_3D_Xi[i+40]*NF_N_T_RT3_3D_Xi[i+40] * NF_N_T_RT3_3D_Weights[i];
362  Functionals[54] = s;
363  s = 0;
364  for(i=0;i<43;i++)
365  s += PointValues[i+123] * NF_N_T_RT3_3D_Xi[i+40]*NF_N_T_RT3_3D_Eta[i+40] * NF_N_T_RT3_3D_Weights[i];
366  Functionals[55] = s;
367  s = 0;
368  for(i=0;i<43;i++)
369  s += PointValues[i+123] * NF_N_T_RT3_3D_Xi[i+40]*NF_N_T_RT3_3D_Zeta[i+40] * NF_N_T_RT3_3D_Weights[i];
370  Functionals[56] = s;
371  s = 0;
372  for(i=0;i<43;i++)
373  s += PointValues[i+123] * NF_N_T_RT3_3D_Eta[i+40]*NF_N_T_RT3_3D_Eta[i+40] * NF_N_T_RT3_3D_Weights[i];
374  Functionals[57] = s;
375  s = 0;
376  for(i=0;i<43;i++)
377  s += PointValues[i+123] * NF_N_T_RT3_3D_Eta[i+40]*NF_N_T_RT3_3D_Zeta[i+40] * NF_N_T_RT3_3D_Weights[i];
378  Functionals[58] = s;
379  s = 0;
380  for(i=0;i<43;i++)
381  s += PointValues[i+123] * NF_N_T_RT3_3D_Zeta[i+40]*NF_N_T_RT3_3D_Zeta[i+40] * NF_N_T_RT3_3D_Weights[i];
382  Functionals[59] = s;
383 
384  //z-component
385  s = 0;
386  for(i=0;i<43;i++)
387  s += PointValues[i+206] * NF_N_T_RT3_3D_Weights[i];
388  Functionals[60] = s;
389  s = 0;
390  for(i=0;i<43;i++)
391  s += PointValues[i+206] * NF_N_T_RT3_3D_Xi[i+40] * NF_N_T_RT3_3D_Weights[i];
392  Functionals[61] = s;
393  s = 0;
394  for(i=0;i<43;i++)
395  s += PointValues[i+206] * NF_N_T_RT3_3D_Eta[i+40] * NF_N_T_RT3_3D_Weights[i];
396  Functionals[62] = s;
397  s = 0;
398  for(i=0;i<43;i++)
399  s += PointValues[i+206] * NF_N_T_RT3_3D_Zeta[i+40] * NF_N_T_RT3_3D_Weights[i];
400  Functionals[63] = s;
401  s = 0;
402  for(i=0;i<43;i++)
403  s += PointValues[i+206] * NF_N_T_RT3_3D_Xi[i+40]*NF_N_T_RT3_3D_Xi[i+40] * NF_N_T_RT3_3D_Weights[i];
404  Functionals[64] = s;
405  s = 0;
406  for(i=0;i<43;i++)
407  s += PointValues[i+206] * NF_N_T_RT3_3D_Xi[i+40]*NF_N_T_RT3_3D_Eta[i+40] * NF_N_T_RT3_3D_Weights[i];
408  Functionals[65] = s;
409  s = 0;
410  for(i=0;i<43;i++)
411  s += PointValues[i+206] * NF_N_T_RT3_3D_Xi[i+40]*NF_N_T_RT3_3D_Zeta[i+40] * NF_N_T_RT3_3D_Weights[i];
412  Functionals[66] = s;
413  s = 0;
414  for(i=0;i<43;i++)
415  s += PointValues[i+206] * NF_N_T_RT3_3D_Eta[i+40]*NF_N_T_RT3_3D_Eta[i+40] * NF_N_T_RT3_3D_Weights[i];
416  Functionals[67] = s;
417  s = 0;
418  for(i=0;i<43;i++)
419  s += PointValues[i+206] * NF_N_T_RT3_3D_Eta[i+40]*NF_N_T_RT3_3D_Zeta[i+40] * NF_N_T_RT3_3D_Weights[i];
420  Functionals[68] = s;
421  s = 0;
422  for(i=0;i<43;i++)
423  s += PointValues[i+206] * NF_N_T_RT3_3D_Zeta[i+40]*NF_N_T_RT3_3D_Zeta[i+40] * NF_N_T_RT3_3D_Weights[i];
424  Functionals[69] = s;
425 }
426 
427 void NF_N_T_RT3_3D_EvalFace(TCollection *Coll, TBaseCell *Cell, int face,
428  double *PointValues, double *Functionals)
429 {
430  double s; // size of face
431  double x0,x1,x2,y0,y1,y2,z0,z1,z2;
432  #ifdef __3D__
433  // find vertices of this face, then their coordinates
434  const int *faceVertex, *length;
435  int MaxLen;
436  Cell->GetShapeDesc()->GetFaceVertex(faceVertex, length, MaxLen);
437  // now MaxLen == 3, length == {3,3,3,3}
438  Cell->GetVertex(faceVertex[3*face ])->GetCoords(x0,y0,z0);
439  Cell->GetVertex(faceVertex[3*face + 1])->GetCoords(x1,y1,z1);
440  Cell->GetVertex(faceVertex[3*face + 2])->GetCoords(x2,y2,z2);
441  #endif
442  // compute measure of this face
443  s = sqrt( POW((y1-y0)*(z2-z0) - (z1-z0)*(y2-y0),2)
444  + POW((z1-z0)*(x2-x0) - (x1-x0)*(z2-z0),2)
445  + POW((x1-x0)*(y2-y0) - (x2-x0)*(y1-y0),2) );
446  for(int i=0; i<10; i++)
447  Functionals[i] = PointValues[i]*s;
448 }
449 
450 static int NF_N_T_RT3_3D_N_AllFunctionals = 70;
451 static int NF_N_T_RT3_3D_N_PointsAll = 83;
452 static int NF_N_T_RT3_3D_N_FaceFunctionals[] = {10,10,10,10};
453 static int NF_N_T_RT3_3D_N_PointsFace[] = {10,10,10,10};
454 
455 TNodalFunctional3D *NF_N_T_RT3_3D_Obj = new TNodalFunctional3D
456  (NF_N_T_RT3_3D, NF_N_T_RT3_3D_N_AllFunctionals,
457  NF_N_T_RT3_3D_N_FaceFunctionals, NF_N_T_RT3_3D_N_PointsAll,
458  NF_N_T_RT3_3D_N_PointsFace,
459  NF_N_T_RT3_3D_Xi, NF_N_T_RT3_3D_Eta, NF_N_T_RT3_3D_Zeta,
460  NF_N_T_RT3_3D_XiArray, NF_N_T_RT3_3D_EtaArray,
461  NF_N_T_RT3_3D_ZetaArray,
462  NF_N_T_RT3_3D_T, NF_N_T_RT3_3D_S,
463  NF_N_T_RT3_3D_EvalAll, NF_N_T_RT3_3D_EvalFace);
int GetFaceVertex(const int *&TmpFV, const int *&TmpLen, int &MaxLen)
Definition: ShapeDesc.h:124
TShapeDesc * GetShapeDesc() const
return shape descriptor of refinement descriptor
Definition: BaseCell.h:134
Definition: NodalFunctional3D.h:21
store cells in an array, used by cell iterators
Definition: Collection.h:18
virtual TVertex * GetVertex(int Vert_i)=0
return the pointer to vertex with number i
void GetCoords(double &x, double &y, double &z) const
Definition: Vertex.h:106
information for finite element data structure
Definition: BaseCell.h:25