GCC Code Coverage Report


Directory: ./
File: FiniteElement/basisFunction.cpp
Date: 2024-04-14 07:32:34
Exec Total Coverage
Lines: 6 13 46.2%
Branches: 0 2 0.0%

Line Branch Exec Source
1 // ______ ______ _ _ _____ ______
2 // | ____| ____| | (_)/ ____| | ____|
3 // | |__ | |__ | | _| (___ ___| |__
4 // | __| | __| | | | |\___ \ / __| __|
5 // | | | |____| |____| |____) | (__| |____
6 // |_| |______|______|_|_____/ \___|______|
7 // Finite Elements for Life Sciences and Engineering
8 //
9 // License: LGL2.1 License
10 // FELiScE default license: LICENSE in root folder
11 //
12 // Main authors: J-F. Gerbeau
13 //
14
15 // System includes
16 #include <iomanip>
17
18 // External includes
19
20 // Project includes
21 #include "FiniteElement/basisFunction.hpp"
22
23 namespace felisce
24 {
25
26 13536 BasisFunction::BasisFunction(const std::string& name,int size,int numCoor, const FunctionXYZ* phi, const FunctionXYZ* dPhi,const FunctionXYZ* d2Phi):
27 13536 m_name(name),m_size(size),m_numCoor(numCoor),m_dim(1),m_phi( phi ), m_dPhi( dPhi ), m_d2Phi( d2Phi ) {
28 FEL_DEBUG("Constructing " << m_name << std::endl);
29 13536 }
30
31 /***********************************************************************************/
32 /***********************************************************************************/
33
34 564 BasisFunction::BasisFunction(const std::string& name,int size,int numCoor, int dim, const FunctionXYZ* phi, const FunctionXYZ* dPhi,const FunctionXYZ* d2Phi):
35 564 m_name(name),m_size(size),m_numCoor(numCoor),m_dim(dim),m_phi( phi ), m_dPhi( dPhi ), m_d2Phi( d2Phi ) {
36 FEL_DEBUG("Constructing " << m_name << std::endl);
37 564 }
38
39 /***********************************************************************************/
40 /***********************************************************************************/
41
42 void BasisFunction::print(int verbose,std::ostream& c) const {
43 if(verbose) {
44 c << "BasisFunction: " << std::endl;
45 c << " name: " << m_name << std::endl;
46 c << " size: " << m_size << " (number of basis functions)" << std::endl;
47 c << " numCoor: " << m_numCoor << " (number of coordinates)" << std::endl;
48 c << " dim: " << m_dim << " (number of scalar components of the functions)" << std::endl;
49 }
50 }
51
52 #define _JFG_OUT_
53
54 #ifndef _JFG_OUT_
55 //======================================================================
56 //
57 // P2 (1D)
58 //
59 //======================================================================
60 /*
61 1--3--2
62 */
63 const double fct1_P2_1D( const double x, const double, const double ) {
64 return 2. * ( x - 1. ) * ( x - 0.5 );
65 }
66 const double fct3_P2_1D( const double x, const double, const double ) {
67 return 4. * x * ( 1. - x );
68 }
69 const double fct2_P2_1D( const double x, const double, const double ) {
70 return 2. * x * ( x - 0.5 );
71 }
72
73 const double derfct1_1_P2_1D( const double x, const double, const double ) {
74 return 4. * x - 3.;
75 }
76 const double derfct3_1_P2_1D( const double x, const double, const double ) {
77 return -8. * x + 4.;
78 }
79 const double derfct2_1_P2_1D( const double x, const double, const double ) {
80 return 4. * x - 1.;
81 }
82
83 const double der2fct1_11_P2_1D(const Point&) {
84 return 4;
85 }
86 const double der2fct3_11_P2_1D(const Point&) {
87 return -8;
88 }
89 const double der2fct2_11_P2_1D(const Point&) {
90 return 4;
91 }
92
93 static const FunctionXYZ fct_P2_1D[ 3 ] = {
94 fct1_P2_1D, fct2_P2_1D, fct3_P2_1D
95 }
96 static const FunctionXYZ derfct_P2_1D[ 3 ] = {
97 derfct1_1_P2_1D, derfct2_1_P2_1D, derfct3_1_P2_1D
98 }
99 static const FunctionXYZ der2fct_P2_1D[ 3 ] = {
100 der2fct1_11_P2_1D, der2fct2_11_P2_1D, der2fct3_11_P2_1D
101 }
102
103 const BasisFunction basisFunctionP2Seg(3,1,fct_P2_1D,derfct_P2_1D,der2fct_P2_1D);
104
105
106 //======================================================================
107 //
108 // P0 (2D)
109 //
110 //======================================================================
111 /*
112
113 |\
114 | \
115 | 1\
116 ---
117 */
118 const double fct1_P0_2D(const Point&) {
119 return 1. ;
120 }
121
122 const double derfct1_P0_2D(const Point&) {
123 return 0. ;
124 }
125 const double der2fct1_P0_2D(const Point&) {
126 return 0. ;
127 }
128
129
130 static const FunctionXYZ fct_P0_2D[ 1 ] = {
131 fct1_P0_2D
132 }
133
134 static const FunctionXYZ derfct_P0_2D[ 2 ] = {
135 derfct1_P0_2D, derfct1_P0_2D
136 }
137
138 static const FunctionXYZ der2fct_P0_2D[ 4 ] = {
139 der2fct1_P0_2D, der2fct1_P0_2D,
140 der2fct1_P0_2D, der2fct1_P0_2D
141 }
142
143 const BasisFunction basisFunctionP0Tria(1,2,fct_P0_2D,derfct_P0_2D,der2fct_P0_2D);
144
145 //======================================================================
146 //
147 // P2 (2D)
148 //
149 //======================================================================
150 /*
151 3
152 |\
153 6 5
154 | \
155 1-4-2
156 */
157 const double fct1_P2_2D( const double x, const double y, const double ) {
158 return ( 1 -x - y ) * ( 1 - x - x - y - y );
159 }
160 const double fct2_P2_2D( const double x, const double, const double ) {
161 return -x * ( 1 - x - x );
162 }
163 const double fct3_P2_2D( const double, const double y, const double ) {
164 return -y * ( 1 - y - y );
165 }
166 const double fct4_P2_2D( const double x, const double y, const double ) {
167 return 4 * x * ( 1 - x - y );
168 }
169 const double fct5_P2_2D( const double x, const double y, const double ) {
170 return 4 * x * y;
171 }
172 const double fct6_P2_2D( const double x, const double y, const double ) {
173 return 4 * y * ( 1 - x - y );
174 }
175
176 const double derfct1_1_P2_2D( const double x, const double y, const double ) {
177 return 4 * ( x + y ) - 3;
178 }
179 const double derfct1_2_P2_2D( const double x, const double y, const double ) {
180 return 4 * ( x + y ) - 3;
181 }
182 const double derfct2_1_P2_2D( const double x, const double, const double ) {
183 return 4 * x - 1;
184 }
185 const double derfct2_2_P2_2D(const Point&) {
186 return 0;
187 }
188 const double derfct3_1_P2_2D(const Point&) {
189 return 0;
190 }
191 const double derfct3_2_P2_2D( const double, const double y, const double ) {
192 return 4 * y - 1;
193 }
194 const double derfct4_1_P2_2D( const double x, const double y, const double ) {
195 return 4 * ( 1 - x - x - y );
196 }
197 const double derfct4_2_P2_2D( const double x, const double, const double ) {
198 return -4 * x;
199 }
200 const double derfct5_1_P2_2D( const double, const double y, const double ) {
201 return 4 * y;
202 }
203 const double derfct5_2_P2_2D( const double x, const double, const double ) {
204 return 4 * x;
205 }
206 const double derfct6_1_P2_2D( const double, const double y, const double ) {
207 return -4 * y;
208 }
209 const double derfct6_2_P2_2D( const double x, const double y, const double ) {
210 return 4 * ( 1 - x - y - y );
211 }
212
213 const double der2fct1_11_P2_2D(const Point&) {
214 return 4;
215 }
216 const double der2fct1_12_P2_2D(const Point&) {
217 return 4;
218 }
219 const double der2fct1_21_P2_2D(const Point&) {
220 return 4;
221 }
222 const double der2fct1_22_P2_2D(const Point&) {
223 return 4;
224 }
225
226 const double der2fct2_11_P2_2D(const Point&) {
227 return 4;
228 }
229 const double der2fct2_12_P2_2D(const Point&) {
230 return 0;
231 }
232 const double der2fct2_21_P2_2D(const Point&) {
233 return 0;
234 }
235 const double der2fct2_22_P2_2D(const Point&) {
236 return 0;
237 }
238
239 const double der2fct3_11_P2_2D(const Point&) {
240 return 0;
241 }
242 const double der2fct3_12_P2_2D(const Point&) {
243 return 0;
244 }
245 const double der2fct3_21_P2_2D(const Point&) {
246 return 0;
247 }
248 const double der2fct3_22_P2_2D(const Point&) {
249 return 4;
250 }
251
252 const double der2fct4_11_P2_2D(const Point&) {
253 return -8;
254 }
255 const double der2fct4_12_P2_2D(const Point&) {
256 return -4;
257 }
258 const double der2fct4_21_P2_2D(const Point&) {
259 return -4;
260 }
261 const double der2fct4_22_P2_2D(const Point&) {
262 return 0;
263 }
264
265 const double der2fct5_11_P2_2D(const Point&) {
266 return 0;
267 }
268 const double der2fct5_12_P2_2D(const Point&) {
269 return 4;
270 }
271 const double der2fct5_21_P2_2D(const Point&) {
272 return 4;
273 }
274 const double der2fct5_22_P2_2D(const Point&) {
275 return 0;
276 }
277
278 const double der2fct6_11_P2_2D(const Point&) {
279 return 0;
280 }
281 const double der2fct6_12_P2_2D(const Point&) {
282 return -4;
283 }
284 const double der2fct6_21_P2_2D(const Point&) {
285 return -4;
286 }
287 const double der2fct6_22_P2_2D(const Point&) {
288 return -8;
289 }
290
291
292 static const FunctionXYZ fct_P2_2D[ 6 ] = {
293 fct1_P2_2D, fct2_P2_2D, fct3_P2_2D,
294 fct4_P2_2D, fct5_P2_2D, fct6_P2_2D
295 }
296
297 static const FunctionXYZ derfct_P2_2D[ 12 ] = {
298 derfct1_1_P2_2D, derfct1_2_P2_2D,
299 derfct2_1_P2_2D, derfct2_2_P2_2D,
300 derfct3_1_P2_2D, derfct3_2_P2_2D,
301 derfct4_1_P2_2D, derfct4_2_P2_2D,
302 derfct5_1_P2_2D, derfct5_2_P2_2D,
303 derfct6_1_P2_2D, derfct6_2_P2_2D
304 }
305 static const FunctionXYZ der2fct_P2_2D[ 24 ] = {
306 der2fct1_11_P2_2D, der2fct1_12_P2_2D, der2fct1_21_P2_2D, der2fct1_22_P2_2D,
307 der2fct2_11_P2_2D, der2fct2_12_P2_2D, der2fct2_21_P2_2D, der2fct2_22_P2_2D,
308 der2fct3_11_P2_2D, der2fct3_12_P2_2D, der2fct3_21_P2_2D, der2fct3_22_P2_2D,
309 der2fct4_11_P2_2D, der2fct4_12_P2_2D, der2fct4_21_P2_2D, der2fct4_22_P2_2D,
310 der2fct5_11_P2_2D, der2fct5_12_P2_2D, der2fct5_21_P2_2D, der2fct5_22_P2_2D,
311 der2fct6_11_P2_2D, der2fct6_12_P2_2D, der2fct6_21_P2_2D, der2fct6_22_P2_2D
312 }
313
314 const BasisFunction basisFunctionP2Tria(6,2,fct_P2_2D,derfct_P2_2D,der2fct_P2_2D);
315
316 //======================================================================
317 //
318 // Q0 (2D)
319 //
320 //======================================================================
321 /*
322 -------
323 | |
324 | 1 |
325 | |
326 -------
327 */
328 const double fct1_Q0_2D(const Point&) {
329 return 1. ;
330 }
331 const double derfct1_Q0_2D(const Point&) {
332 return 0. ;
333 }
334 // The second derivative is equal to the first : both are equal to 0.
335 const double der2fct1_Q0_2D(const Point&) {
336 return 0. ;
337 }
338
339 static const FunctionXYZ fct_Q0_2D[ 1 ] = {
340 fct1_Q0_2D
341 }
342
343 static const FunctionXYZ derfct_Q0_2D[ 2 ] = {
344 derfct1_Q0_2D, derfct1_Q0_2D
345 }
346
347 static const FunctionXYZ der2fct_Q0_2D[ 4 ] = {
348 der2fct1_Q0_2D, der2fct1_Q0_2D,
349 der2fct1_Q0_2D, der2fct1_Q0_2D
350 }
351
352 const BasisFunction basisFunctionP0Quad(1,2,fct_Q0_2D,derfct_Q0_2D,der2fct_Q0_2D);
353
354
355 //======================================================================
356 //
357 // Q1 (2D)
358 //
359 //======================================================================
360 /*
361 4-------3
362 | |
363 | |
364 | |
365 1-------2
366 */
367 const double fct1_Q1_2D( const double x, const double y, const double ) {
368 return ( 1. - x ) * ( 1. - y );
369 }
370 const double fct2_Q1_2D( const double x, const double y, const double ) {
371 return ( 1. - y ) * x;
372 }
373 const double fct3_Q1_2D( const double x, const double y, const double ) {
374 return x * y;
375 }
376 const double fct4_Q1_2D( const double x, const double y, const double ) {
377 return y * ( 1. - x );
378 }
379
380 const double derfct1_1_Q1_2D( const double, const double y, const double ) {
381 return -( 1. - y );
382 }
383 const double derfct1_2_Q1_2D( const double x, const double, const double ) {
384 return -( 1. - x );
385 }
386 const double derfct2_1_Q1_2D( const double, const double y, const double ) {
387 return ( 1. - y );
388 }
389 const double derfct2_2_Q1_2D( const double x, const double, const double ) {
390 return -x;
391 }
392 const double derfct3_1_Q1_2D( const double, const double y, const double ) {
393 return y;
394 }
395 const double derfct3_2_Q1_2D( const double x, const double, const double ) {
396 return x;
397 }
398 const double derfct4_1_Q1_2D( const double, const double y, const double ) {
399 return -y;
400 }
401 const double derfct4_2_Q1_2D( const double x, const double, const double ) {
402 return ( 1. - x );
403 }
404
405 // Second derivatives
406 const double der2fctx_xx_Q1_2D(const Point&) {
407 return 0;
408 }
409
410
411 static const FunctionXYZ fct_Q1_2D[ 4 ] = {
412 fct1_Q1_2D, fct2_Q1_2D, fct3_Q1_2D, fct4_Q1_2D
413 }
414
415 static const FunctionXYZ derfct_Q1_2D[ 8 ] = {
416 derfct1_1_Q1_2D, derfct1_2_Q1_2D,
417 derfct2_1_Q1_2D, derfct2_2_Q1_2D,
418 derfct3_1_Q1_2D, derfct3_2_Q1_2D,
419 derfct4_1_Q1_2D, derfct4_2_Q1_2D
420 }
421 static const FunctionXYZ der2fct_Q1_2D[ 16 ] = {
422 der2fctx_xx_Q1_2D, der2fctx_xx_Q1_2D, der2fctx_xx_Q1_2D, der2fctx_xx_Q1_2D,
423 der2fctx_xx_Q1_2D, der2fctx_xx_Q1_2D, der2fctx_xx_Q1_2D, der2fctx_xx_Q1_2D,
424 der2fctx_xx_Q1_2D, der2fctx_xx_Q1_2D, der2fctx_xx_Q1_2D, der2fctx_xx_Q1_2D,
425 der2fctx_xx_Q1_2D, der2fctx_xx_Q1_2D, der2fctx_xx_Q1_2D, der2fctx_xx_Q1_2D
426 }
427
428 const BasisFunction basisFunctionQ1Quad(4,2,fct_Q1_2D,derfct_Q1_2D,der2fct_Q1_2D);
429
430 //======================================================================
431 //
432 // Q2 (2D)
433 //
434 //======================================================================
435 /*
436 4---7---3
437 | |
438 8 9 6
439 | |
440 1---5---2
441 */
442 const double fct1_Q2_2D( const double x, const double y, const double ) {
443 return 4. * ( 1 - x ) * ( 0.5 - x ) * ( 1 - y ) * ( 0.5 - y );
444 }
445 const double fct5_Q2_2D( const double x, const double y, const double ) {
446 return 8. * x * ( 1 - x ) * ( 1 - y ) * ( 0.5 - y );
447 }
448 const double fct2_Q2_2D( const double x, const double y, const double ) {
449 return 4. * x * ( x - 0.5 ) * ( 1 - y ) * ( 0.5 - y );
450 }
451 const double fct6_Q2_2D( const double x, const double y, const double ) {
452 return 8. * x * ( x - 0.5 ) * y * ( 1 - y );
453 }
454 const double fct3_Q2_2D( const double x, const double y, const double ) {
455 return 4. * x * ( x - 0.5 ) * y * ( y - 0.5 );
456 }
457 const double fct7_Q2_2D( const double x, const double y, const double ) {
458 return 8. * x * ( 1 - x ) * y * ( y - 0.5 );
459 }
460 const double fct4_Q2_2D( const double x, const double y, const double ) {
461 return 4. * ( 1 - x ) * ( 0.5 - x ) * y * ( y - 0.5 );
462 }
463 const double fct8_Q2_2D( const double x, const double y, const double ) {
464 return 8. * ( 0.5 - x ) * ( 1 - x ) * y * ( 1 - y );
465 }
466 const double fct9_Q2_2D( const double x, const double y, const double ) {
467 return 16. * x * ( 1 - x ) * y * ( 1 - y );
468 }
469
470 const double derfct1_1_Q2_2D( const double x, const double y, const double ) {
471 return ( 2. * y - 1. ) * ( y - 1. ) * ( 4. * x - 3. );
472 }
473 const double derfct1_2_Q2_2D( const double x, const double y, const double ) {
474 return ( 2. * x - 1. ) * ( x - 1. ) * ( 4. * y - 3. );
475 }
476 const double derfct5_1_Q2_2D( const double x, const double y, const double ) {
477 return -4. * ( 2. * y - 1. ) * ( y - 1. ) * ( 2. * x - 1. );
478 }
479 const double derfct5_2_Q2_2D( const double x, const double y, const double ) {
480 return -4. * x * ( x - 1. ) * ( 4. * y - 3. );
481 }
482 const double derfct2_1_Q2_2D( const double x, const double y, const double ) {
483 return ( 2. * y - 1. ) * ( y - 1. ) * ( 4. * x - 1. );
484 }
485 const double derfct2_2_Q2_2D( const double x, const double y, const double ) {
486 return x * ( 2. * x - 1. ) * ( 4. * y - 3. );
487 }
488 const double derfct6_1_Q2_2D( const double x, const double y, const double ) {
489 return -4. * y * ( 4. * x - 1. ) * ( y - 1. );
490 }
491 const double derfct6_2_Q2_2D( const double x, const double y, const double ) {
492 return -4. * x * ( 2. * x - 1. ) * ( 2. * y - 1. );
493 }
494 const double derfct3_1_Q2_2D( const double x, const double y, const double ) {
495 return y * ( 4. * x - 1. ) * ( 2. * y - 1. );
496 }
497 const double derfct3_2_Q2_2D( const double x, const double y, const double ) {
498 return x * ( 2. * x - 1. ) * ( 4. * y - 1. );
499 }
500 const double derfct7_1_Q2_2D( const double x, const double y, const double ) {
501 return -4. * y * ( 2. * x - 1. ) * ( 2. * y - 1. );
502 }
503 const double derfct7_2_Q2_2D( const double x, const double y, const double ) {
504 return -4. * x * ( x - 1. ) * ( 4. * y - 1. );
505 }
506 const double derfct4_1_Q2_2D( const double x, const double y, const double ) {
507 return y * ( 4. * x - 3. ) * ( 2. * y - 1. );
508 }
509 const double derfct4_2_Q2_2D( const double x, const double y, const double ) {
510 return ( 2. * x - 1. ) * ( x - 1. ) * ( 4. * y - 1. );
511 }
512 const double derfct8_1_Q2_2D( const double x, const double y, const double ) {
513 return -4. * y * ( 4. * x - 3. ) * ( y - 1. );
514 }
515 const double derfct8_2_Q2_2D( const double x, const double y, const double ) {
516 return -4. * ( 2. * x - 1. ) * ( x - 1. ) * ( 2. * y - 1. );
517 }
518 const double derfct9_1_Q2_2D( const double x, const double y, const double ) {
519 return 16. * y * ( 2. * x - 1. ) * ( y - 1. );
520 }
521 const double derfct9_2_Q2_2D( const double x, const double y, const double ) {
522 return 16. * x * ( x - 1. ) * ( 2. * y - 1. );
523 }
524
525 const double der2fct1_11_Q2_2D( const double, const double y, const double ) {
526 return ( 2. * y - 1. ) * ( y - 1. ) * 4.;
527 }
528 const double der2fct1_12_Q2_2D( const double x, const double y, const double ) {
529 return ( 4. * y - 3. ) * ( 4. * x - 3. );
530 }
531 const double der2fct1_21_Q2_2D( const double x, const double y, const double ) {
532 return ( 4. * y - 3. ) * ( 4. * x - 3. );
533 }
534 const double der2fct1_22_Q2_2D( const double x, const double, const double ) {
535 return ( 2. * x - 1. ) * ( x - 1. ) * 4.;
536 }
537
538 const double der2fct5_11_Q2_2D( const double, const double y, const double ) {
539 return -8. * ( 2. * y - 1. ) * ( y - 1. );
540 }
541 const double der2fct5_12_Q2_2D( const double x, const double y, const double ) {
542 return -4. * ( 2. * x - 1 ) * ( 4. * y - 3 );
543 }
544 const double der2fct5_21_Q2_2D( const double x, const double y, const double ) {
545 return -4. * ( 2. * x - 1 ) * ( 4. * y - 3 );
546 ;
547 }
548 const double der2fct5_22_Q2_2D( const double x, const double, const double ) {
549 return -16. * x * ( x - 1. );
550 }
551
552 const double der2fct2_11_Q2_2D( const double, const double y, const double ) {
553 return ( 2. * y - 1. ) * ( y - 1. ) * 4.;
554 }
555 const double der2fct2_12_Q2_2D( const double x, const double y, const double ) {
556 return ( 4. * x - 1 ) * ( 4. * y - 3. );
557 }
558 const double der2fct2_21_Q2_2D( const double x, const double y, const double ) {
559 return ( 4. * y - 3. ) * ( 4. * x - 1. );
560 }
561 const double der2fct2_22_Q2_2D( const double x, const double, const double ) {
562 return x * ( 2. * x - 1. ) * 4.;
563 }
564
565 const double der2fct6_11_Q2_2D( const double, const double y, const double ) {
566 return -16. * y * ( y - 1. );
567 }
568 const double der2fct6_12_Q2_2D( const double x, const double y, const double ) {
569 return -4. * ( 4. * x - 1. ) * ( 2. * y - 1. );
570 }
571 const double der2fct6_21_Q2_2D( const double x, const double y, const double ) {
572 return -4. * ( 4. * x - 1. ) * ( 2. * y - 1. );
573 }
574 const double der2fct6_22_Q2_2D( const double x, const double, const double ) {
575 return -8. * x * ( 2. * x - 1. );
576 }
577
578 const double der2fct3_11_Q2_2D( const double, const double y, const double ) {
579 return 4. * y * ( 2. * y - 1. );
580 }
581 const double der2fct3_12_Q2_2D( const double x, const double y, const double ) {
582 return ( 4. * x - 1. ) * ( 4. * y - 1. );
583 }
584 const double der2fct3_21_Q2_2D( const double x, const double y, const double ) {
585 return ( 4. * x - 1. ) * ( 4. * y - 1. );
586 }
587 const double der2fct3_22_Q2_2D( const double x, const double, const double ) {
588 return 4. * x * ( 2. * x - 1. );
589 }
590
591 const double der2fct7_11_Q2_2D( const double, const double y, const double ) {
592 return -8. * y * ( 2. * y - 1. );
593 }
594 const double der2fct7_12_Q2_2D( const double x, const double y, const double ) {
595 return -4. * ( 2. * x - 1. ) * ( 4. * y - 1. );
596 }
597 const double der2fct7_21_Q2_2D( const double x, const double y, const double ) {
598 return -4. * ( 2. * x - 1. ) * ( 4. * y - 1. );
599 }
600 const double der2fct7_22_Q2_2D( const double x, const double, const double ) {
601 return -16. * x * ( x - 1. );
602 }
603
604 const double der2fct4_11_Q2_2D( const double, const double y, const double ) {
605 return 4. * y * ( 2. * y - 1. );
606 }
607 const double der2fct4_12_Q2_2D( const double x, const double y, const double ) {
608 return ( 4. * x - 3. ) * ( 4. * y - 1. );
609 }
610 const double der2fct4_21_Q2_2D( const double x, const double y, const double ) {
611 return ( 4. * x - 3. ) * ( 4. * y - 1. );
612 }
613 const double der2fct4_22_Q2_2D( const double x, const double, const double ) {
614 return 4. * ( 2. * x - 1. ) * ( x - 1. );
615 }
616
617 const double der2fct8_11_Q2_2D( const double, const double y, const double ) {
618 return -16. * y * ( y - 1. );
619 }
620 const double der2fct8_12_Q2_2D( const double x, const double y, const double ) {
621 return -4. * ( 4. * x - 3. ) * ( 2. * y - 1. );
622 }
623 const double der2fct8_21_Q2_2D( const double x, const double y, const double ) {
624 return -4. * ( 4. * x - 3. ) * ( 2. * y - 1. );
625 }
626 const double der2fct8_22_Q2_2D( const double x, const double, const double ) {
627 return -8. * ( 2. * x - 1. ) * ( x - 1. );
628 }
629
630 const double der2fct9_11_Q2_2D( const double, const double y, const double ) {
631 return 32. * y * ( y - 1. );
632 }
633 const double der2fct9_12_Q2_2D( const double x, const double y, const double ) {
634 return 16. * ( 2. * x - 1. ) * ( 2. * y - 1. );
635 }
636 const double der2fct9_21_Q2_2D( const double x, const double y, const double ) {
637 return 16. * ( 2. * x - 1. ) * ( 2. * y - 1. );
638 }
639 const double der2fct9_22_Q2_2D( const double x, const double, const double ) {
640 return 32. * x * ( x - 1. );
641 }
642
643
644 static const FunctionXYZ fct_Q2_2D[ 9 ] = {
645 fct1_Q2_2D, fct2_Q2_2D, fct3_Q2_2D, fct4_Q2_2D,
646 fct5_Q2_2D, fct6_Q2_2D, fct7_Q2_2D, fct8_Q2_2D,
647 fct9_Q2_2D
648 }
649
650
651 static const FunctionXYZ derfct_Q2_2D[ 18 ] = {
652 derfct1_1_Q2_2D, derfct1_2_Q2_2D,
653 derfct2_1_Q2_2D, derfct2_2_Q2_2D,
654 derfct3_1_Q2_2D, derfct3_2_Q2_2D,
655 derfct4_1_Q2_2D, derfct4_2_Q2_2D,
656 derfct5_1_Q2_2D, derfct5_2_Q2_2D,
657 derfct6_1_Q2_2D, derfct6_2_Q2_2D,
658 derfct7_1_Q2_2D, derfct7_2_Q2_2D,
659 derfct8_1_Q2_2D, derfct8_2_Q2_2D,
660 derfct9_1_Q2_2D, derfct9_2_Q2_2D
661 }
662
663 static const FunctionXYZ der2fct_Q2_2D[ 36 ] = {
664 der2fct1_11_Q2_2D, der2fct1_12_Q2_2D, der2fct1_21_Q2_2D, der2fct1_22_Q2_2D,
665 der2fct2_11_Q2_2D, der2fct2_12_Q2_2D, der2fct2_21_Q2_2D, der2fct2_22_Q2_2D,
666 der2fct3_11_Q2_2D, der2fct3_12_Q2_2D, der2fct3_21_Q2_2D, der2fct3_22_Q2_2D,
667 der2fct4_11_Q2_2D, der2fct4_12_Q2_2D, der2fct4_21_Q2_2D, der2fct4_22_Q2_2D,
668 der2fct5_11_Q2_2D, der2fct5_12_Q2_2D, der2fct5_21_Q2_2D, der2fct5_22_Q2_2D,
669 der2fct6_11_Q2_2D, der2fct6_12_Q2_2D, der2fct6_21_Q2_2D, der2fct6_22_Q2_2D,
670 der2fct7_11_Q2_2D, der2fct7_12_Q2_2D, der2fct7_21_Q2_2D, der2fct7_22_Q2_2D,
671 der2fct8_11_Q2_2D, der2fct8_12_Q2_2D, der2fct8_21_Q2_2D, der2fct8_22_Q2_2D,
672 der2fct9_11_Q2_2D, der2fct9_12_Q2_2D, der2fct9_21_Q2_2D, der2fct9_22_Q2_2D
673 }
674
675 const BasisFunction basisFunctionQ2Quad(9,2,fct_Q2_2D,derfct_Q2_2D,der2fct_Q2_2D);
676
677
678 //======================================================================
679 //
680 // P0 (3D)
681 //
682 //======================================================================
683 /*
684 4
685 / .
686 / \.3
687 / . \\
688 / . \\
689 /. \!
690 1 ----------2
691 */
692 const double fct1_P0_3D(const Point&) {
693 return 1.;
694 }
695
696 const double derfct1_P0_3D(const Point&) {
697 return 0.;
698 }
699
700 // Second derivatives
701 const double der2fct1_P0_3D(const Point&) {
702 return 0;
703 }
704
705
706
707 static const FunctionXYZ fct_P0_3D[ 1 ] = {
708 fct1_P0_3D
709 }
710
711 static const FunctionXYZ derfct_P0_3D[ 3 ] = {
712 derfct1_P0_3D, derfct1_P0_3D, derfct1_P0_3D
713 }
714 static const FunctionXYZ der2fct_P0_3D[ 9 ] = {
715 derfct1_P0_3D, derfct1_P0_3D, derfct1_P0_3D,
716 derfct1_P0_3D, derfct1_P0_3D, derfct1_P0_3D,
717 derfct1_P0_3D, derfct1_P0_3D, derfct1_P0_3D
718 }
719
720 const BasisFunction basisFunctionP0Tetra(1,3,fct_P0_3D,derfct_P0_3D,der2fct_P0_3D);
721
722 //======================================================================
723 //======================================================================
724 //
725 // P1bubble (3D)
726 //
727 //======================================================================
728 /*
729 4
730 / .
731 / \.3
732 / . \\
733 / . .5 \\
734 /. \!
735 1 ----------2
736 */
737 const double fct1_P1bubble_3D( const double x, const double y, const double z ) {
738 return 1 -x - y - z;
739 }
740 const double fct2_P1bubble_3D( const double x, const double, const double ) {
741 return x;
742 }
743 const double fct3_P1bubble_3D( const double, const double y, const double ) {
744 return y;
745 }
746 const double fct4_P1bubble_3D( const double, const double, const double z ) {
747 return z;
748 }
749 const double fct5_P1bubble_3D( const double x, const double y, const double z ) {
750 return ( 1 -x - y - z ) * x * y * z;
751 }
752
753 const double derfct1_1_P1bubble_3D(const Point&) {
754 return -1;
755 }
756 const double derfct1_2_P1bubble_3D(const Point&) {
757 return -1;
758 }
759 const double derfct1_3_P1bubble_3D(const Point&) {
760 return -1;
761 }
762 const double derfct2_1_P1bubble_3D(const Point&) {
763 return 1;
764 }
765 const double derfct2_2_P1bubble_3D(const Point&) {
766 return 0;
767 }
768 const double derfct2_3_P1bubble_3D(const Point&) {
769 return 0;
770 }
771 const double derfct3_1_P1bubble_3D(const Point&) {
772 return 0;
773 }
774 const double derfct3_2_P1bubble_3D(const Point&) {
775 return 1;
776 }
777 const double derfct3_3_P1bubble_3D(const Point&) {
778 return 0;
779 }
780 const double derfct4_1_P1bubble_3D(const Point&) {
781 return 0;
782 }
783 const double derfct4_2_P1bubble_3D(const Point&) {
784 return 0;
785 }
786 const double derfct4_3_P1bubble_3D(const Point&) {
787 return 1;
788 }
789 const double derfct5_1_P1bubble_3D( const double x, const double y, const double z ) {
790 return ( 1 -2 * x - y - z ) * y * z;
791 }
792 const double derfct5_2_P1bubble_3D( const double x, const double y, const double z ) {
793 return ( 1 -x - 2 * y - z ) * x * z;
794 }
795 const double derfct5_3_P1bubble_3D( const double x, const double y, const double z ) {
796 return ( 1 -x - y - 2 * z ) * x * y;
797 }
798
799 // Second derivatives
800 const double der2fctx_xx_P1bubble_3D(const Point&) {
801 return 0;
802 }
803 const double der2fct5_11_P1bubble_3D( const double, const double y, const double z ) {
804 return -2 * y * z;
805 }
806 const double der2fct5_12_P1bubble_3D( const double x, const double y, const double z ) {
807 return ( 1 -2 * x - 2 * y - z ) * z;
808 }
809 const double der2fct5_13_P1bubble_3D( const double x, const double y, const double z ) {
810 return ( 1 -2 * x - y - 2 * z ) * y;
811 }
812 const double der2fct5_21_P1bubble_3D( const double x, const double y, const double z ) {
813 return ( 1 -2 * x - 2 * y - z ) * z;
814 }
815 const double der2fct5_22_P1bubble_3D( const double x, const double, const double z ) {
816 return -2 * x * z;
817 }
818 const double der2fct5_23_P1bubble_3D( const double x, const double y, const double z ) {
819 return ( 1 -x - 2 * y - 2 * z ) * x;
820 }
821 const double der2fct5_31_P1bubble_3D( const double x, const double y, const double z ) {
822 return ( 1 -2 * x - y - 2 * z ) * y;
823 }
824 const double der2fct5_32_P1bubble_3D( const double x, const double y, const double z ) {
825 return ( 1 -x - 2 * y - 2 * z ) * x;
826 }
827 const double der2fct5_33_P1bubble_3D( const double x, const double y, const double ) {
828 return -2 * x * y;
829 }
830
831
832 static const FunctionXYZ fct_P1bubble_3D[ 5 ] = {
833 fct1_P1bubble_3D, fct2_P1bubble_3D, fct3_P1bubble_3D, fct4_P1bubble_3D, fct5_P1bubble_3D
834 }
835
836 static const FunctionXYZ derfct_P1bubble_3D[ 15 ] = {
837 derfct1_1_P1bubble_3D, derfct1_2_P1bubble_3D, derfct1_3_P1bubble_3D,
838 derfct2_1_P1bubble_3D, derfct2_2_P1bubble_3D, derfct2_3_P1bubble_3D,
839 derfct3_1_P1bubble_3D, derfct3_2_P1bubble_3D, derfct3_3_P1bubble_3D,
840 derfct4_1_P1bubble_3D, derfct4_2_P1bubble_3D, derfct4_3_P1bubble_3D,
841 derfct5_1_P1bubble_3D, derfct5_2_P1bubble_3D, derfct5_3_P1bubble_3D
842 }
843 static const FunctionXYZ der2fct_P1bubble_3D[ 45 ] = {
844 der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D,
845 der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D,
846 der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D,
847 der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D,
848 der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D,
849 der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D,
850 der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D,
851 der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D,
852 der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D,
853 der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D,
854 der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D,
855 der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D, der2fctx_xx_P1bubble_3D,
856 der2fct5_11_P1bubble_3D, der2fct5_12_P1bubble_3D, der2fct5_13_P1bubble_3D,
857 der2fct5_21_P1bubble_3D, der2fct5_22_P1bubble_3D, der2fct5_23_P1bubble_3D,
858 der2fct5_31_P1bubble_3D, der2fct5_32_P1bubble_3D, der2fct5_33_P1bubble_3D
859 }
860
861 const BasisFunction basisFunction3dP1bubble(5,3,fct_P1bubble_3D,derfct_P1bubble_3D,der2fct_P1bubble_3D);
862
863
864 //======================================================================
865 //
866 // P2 (3D)
867 //
868 //======================================================================
869 /*
870 4
871 / .10
872 / \.3
873 8 . 9\
874 / 7 \6
875 /. \!
876 1 -----5----2
877 */
878 const double fct1_P2_3D( const double x, const double y, const double z ) {
879 return -( 1 - x - y - z ) * ( 1 - 2 * ( 1 - x - y - z ) );
880 }
881 const double fct2_P2_3D( const double x, const double, const double ) {
882 return -x * ( 1 - 2 * x );
883 }
884 const double fct3_P2_3D( const double, const double y, const double ) {
885 return -y * ( 1 - 2 * y );
886 }
887 const double fct4_P2_3D( const double, const double, const double z ) {
888 return -z * ( 1 - 2 * z );
889 }
890 const double fct5_P2_3D( const double x, const double y, const double z ) {
891 return 4 * x * ( 1 - x - y - z );
892 }
893 const double fct6_P2_3D( const double x, const double y, const double ) {
894 return 4 * x * y;
895 }
896 const double fct7_P2_3D( const double x, const double y, const double z ) {
897 return 4 * y * ( 1 - x - y - z );
898 }
899 const double fct8_P2_3D( const double x, const double y, const double z ) {
900 return 4 * z * ( 1 - x - y - z );
901 }
902 const double fct9_P2_3D( const double x, const double, const double z ) {
903 return 4 * x * z;
904 }
905 const double fct10_P2_3D( const double, const double y, const double z ) {
906 return 4 * y * z;
907 }
908
909
910 const double derfct1_1_P2_3D( const double x, const double y, const double z ) {
911 return -3 + 4 * x + 4 * y + 4 * z;
912 }
913 const double derfct1_2_P2_3D( const double x, const double y, const double z ) {
914 return -3 + 4 * x + 4 * y + 4 * z;
915 }
916 const double derfct1_3_P2_3D( const double x, const double y, const double z ) {
917 return -3 + 4 * x + 4 * y + 4 * z;
918 }
919
920 const double derfct2_1_P2_3D( const double x, const double, const double ) {
921 return -1 + 4 * x;
922 }
923 const double derfct2_2_P2_3D(const Point&) {
924 return 0.;
925 }
926 const double derfct2_3_P2_3D(const Point&) {
927 return 0.;
928 }
929
930 const double derfct3_1_P2_3D(const Point&) {
931 return 0.;
932 }
933 const double derfct3_2_P2_3D( const double, const double y, const double ) {
934 return -1 + 4 * y;
935 }
936 const double derfct3_3_P2_3D(const Point&) {
937 return 0.;
938 }
939
940 const double derfct4_1_P2_3D(const Point&) {
941 return 0.;
942 }
943 const double derfct4_2_P2_3D(const Point&) {
944 return 0.;
945 }
946 const double derfct4_3_P2_3D( const double, const double, const double z ) {
947 return -1 + 4 * z;
948 }
949
950 const double derfct5_1_P2_3D( const double x, const double y, const double z ) {
951 return 4 - 8 * x - 4 * y - 4 * z;
952 }
953 const double derfct5_2_P2_3D( const double x, const double, const double ) {
954 return -4 * x;
955 }
956 const double derfct5_3_P2_3D( const double x, const double, const double ) {
957 return -4 * x;
958 }
959
960 const double derfct6_1_P2_3D( const double, const double y, const double ) {
961 return 4 * y;
962 }
963 const double derfct6_2_P2_3D( const double x, const double, const double ) {
964 return 4 * x;
965 }
966 const double derfct6_3_P2_3D(const Point&) {
967 return 0.;
968 }
969
970 const double derfct7_1_P2_3D( const double, const double y, const double ) {
971 return -4 * y;
972 }
973 const double derfct7_2_P2_3D( const double x, const double y, const double z ) {
974 return 4 - 4 * x - 8 * y - 4 * z;
975 }
976 const double derfct7_3_P2_3D( const double, const double y, const double ) {
977 return -4 * y;
978 }
979
980 const double derfct8_1_P2_3D( const double, const double, const double z ) {
981 return -4 * z;
982 }
983 const double derfct8_2_P2_3D( const double, const double, const double z ) {
984 return -4 * z;
985 }
986 const double derfct8_3_P2_3D( const double x, const double y, const double z ) {
987 return 4 - 4 * x - 4 * y - 8 * z;
988 }
989
990 const double derfct9_1_P2_3D( const double, const double, const double z ) {
991 return 4 * z;
992 }
993 const double derfct9_2_P2_3D(const Point&) {
994 return 0.;
995 }
996 const double derfct9_3_P2_3D( const double x, const double, const double ) {
997 return 4 * x;
998 }
999
1000 const double derfct10_1_P2_3D(const Point&) {
1001 return 0.;
1002 }
1003 const double derfct10_2_P2_3D( const double, const double, const double z ) {
1004 return 4 * z;
1005 }
1006 const double derfct10_3_P2_3D( const double, const double y, const double ) {
1007 return 4 * y;
1008 }
1009
1010
1011 const double der2fct1_11_P2_3D(const Point&) {
1012 return 4;
1013 }
1014 const double der2fct1_12_P2_3D(const Point&) {
1015 return 4;
1016 }
1017 const double der2fct1_13_P2_3D(const Point&) {
1018 return 4;
1019 }
1020 const double der2fct1_21_P2_3D(const Point&) {
1021 return 4;
1022 }
1023 const double der2fct1_22_P2_3D(const Point&) {
1024 return 4;
1025 }
1026 const double der2fct1_23_P2_3D(const Point&) {
1027 return 4;
1028 }
1029 const double der2fct1_31_P2_3D(const Point&) {
1030 return 4;
1031 }
1032 const double der2fct1_32_P2_3D(const Point&) {
1033 return 4;
1034 }
1035 const double der2fct1_33_P2_3D(const Point&) {
1036 return 4;
1037 }
1038
1039 const double der2fct2_11_P2_3D(const Point&) {
1040 return 4;
1041 }
1042 const double der2fct2_12_P2_3D(const Point&) {
1043 return 0;
1044 }
1045 const double der2fct2_13_P2_3D(const Point&) {
1046 return 0;
1047 }
1048 const double der2fct2_21_P2_3D(const Point&) {
1049 return 0;
1050 }
1051 const double der2fct2_22_P2_3D(const Point&) {
1052 return 0;
1053 }
1054 const double der2fct2_23_P2_3D(const Point&) {
1055 return 0;
1056 }
1057 const double der2fct2_31_P2_3D(const Point&) {
1058 return 0;
1059 }
1060 const double der2fct2_32_P2_3D(const Point&) {
1061 return 0;
1062 }
1063 const double der2fct2_33_P2_3D(const Point&) {
1064 return 0;
1065 }
1066
1067 const double der2fct3_11_P2_3D(const Point&) {
1068 return 0;
1069 }
1070 const double der2fct3_12_P2_3D(const Point&) {
1071 return 0;
1072 }
1073 const double der2fct3_13_P2_3D(const Point&) {
1074 return 0;
1075 }
1076 const double der2fct3_21_P2_3D(const Point&) {
1077 return 0;
1078 }
1079 const double der2fct3_22_P2_3D(const Point&) {
1080 return 4;
1081 }
1082 const double der2fct3_23_P2_3D(const Point&) {
1083 return 0;
1084 }
1085 const double der2fct3_31_P2_3D(const Point&) {
1086 return 0;
1087 }
1088 const double der2fct3_32_P2_3D(const Point&) {
1089 return 0;
1090 }
1091 const double der2fct3_33_P2_3D(const Point&) {
1092 return 0;
1093 }
1094
1095 const double der2fct4_11_P2_3D(const Point&) {
1096 return 0;
1097 }
1098 const double der2fct4_12_P2_3D(const Point&) {
1099 return 0;
1100 }
1101 const double der2fct4_13_P2_3D(const Point&) {
1102 return 0;
1103 }
1104 const double der2fct4_21_P2_3D(const Point&) {
1105 return 0;
1106 }
1107 const double der2fct4_22_P2_3D(const Point&) {
1108 return 0;
1109 }
1110 const double der2fct4_23_P2_3D(const Point&) {
1111 return 0;
1112 }
1113 const double der2fct4_31_P2_3D(const Point&) {
1114 return 0;
1115 }
1116 const double der2fct4_32_P2_3D(const Point&) {
1117 return 0;
1118 }
1119 const double der2fct4_33_P2_3D(const Point&) {
1120 return 4;
1121 }
1122
1123 const double der2fct5_11_P2_3D(const Point&) {
1124 return -8;
1125 }
1126 const double der2fct5_12_P2_3D(const Point&) {
1127 return -4;
1128 }
1129 const double der2fct5_13_P2_3D(const Point&) {
1130 return -4;
1131 }
1132 const double der2fct5_21_P2_3D(const Point&) {
1133 return -4;
1134 }
1135 const double der2fct5_22_P2_3D(const Point&) {
1136 return 0;
1137 }
1138 const double der2fct5_23_P2_3D(const Point&) {
1139 return 0;
1140 }
1141 const double der2fct5_31_P2_3D(const Point&) {
1142 return -4;
1143 }
1144 const double der2fct5_32_P2_3D(const Point&) {
1145 return 0;
1146 }
1147 const double der2fct5_33_P2_3D(const Point&) {
1148 return 0;
1149 }
1150
1151 const double der2fct6_11_P2_3D(const Point&) {
1152 return 0;
1153 }
1154 const double der2fct6_12_P2_3D(const Point&) {
1155 return 4;
1156 }
1157 const double der2fct6_13_P2_3D(const Point&) {
1158 return 0;
1159 }
1160 const double der2fct6_21_P2_3D(const Point&) {
1161 return 4;
1162 }
1163 const double der2fct6_22_P2_3D(const Point&) {
1164 return 0;
1165 }
1166 const double der2fct6_23_P2_3D(const Point&) {
1167 return 0;
1168 }
1169 const double der2fct6_31_P2_3D(const Point&) {
1170 return 0;
1171 }
1172 const double der2fct6_32_P2_3D(const Point&) {
1173 return 0;
1174 }
1175 const double der2fct6_33_P2_3D(const Point&) {
1176 return 0;
1177 }
1178
1179 const double der2fct7_11_P2_3D(const Point&) {
1180 return 0;
1181 }
1182 const double der2fct7_12_P2_3D(const Point&) {
1183 return -4;
1184 }
1185 const double der2fct7_13_P2_3D(const Point&) {
1186 return 0;
1187 }
1188 const double der2fct7_21_P2_3D(const Point&) {
1189 return -4;
1190 }
1191 const double der2fct7_22_P2_3D(const Point&) {
1192 return -8;
1193 }
1194 const double der2fct7_23_P2_3D(const Point&) {
1195 return -4;
1196 }
1197 const double der2fct7_31_P2_3D(const Point&) {
1198 return 0;
1199 }
1200 const double der2fct7_32_P2_3D(const Point&) {
1201 return -4;
1202 }
1203 const double der2fct7_33_P2_3D(const Point&) {
1204 return 0;
1205 }
1206
1207 const double der2fct8_11_P2_3D(const Point&) {
1208 return 0;
1209 }
1210 const double der2fct8_12_P2_3D(const Point&) {
1211 return 0;
1212 }
1213 const double der2fct8_13_P2_3D(const Point&) {
1214 return -4;
1215 }
1216 const double der2fct8_21_P2_3D(const Point&) {
1217 return 0;
1218 }
1219 const double der2fct8_22_P2_3D(const Point&) {
1220 return 0;
1221 }
1222 const double der2fct8_23_P2_3D(const Point&) {
1223 return -4;
1224 }
1225 const double der2fct8_31_P2_3D(const Point&) {
1226 return -4;
1227 }
1228 const double der2fct8_32_P2_3D(const Point&) {
1229 return -4;
1230 }
1231 const double der2fct8_33_P2_3D(const Point&) {
1232 return -8;
1233 }
1234
1235 const double der2fct9_11_P2_3D(const Point&) {
1236 return 0;
1237 }
1238 const double der2fct9_12_P2_3D(const Point&) {
1239 return 0;
1240 }
1241 const double der2fct9_13_P2_3D(const Point&) {
1242 return 4;
1243 }
1244 const double der2fct9_21_P2_3D(const Point&) {
1245 return 0;
1246 }
1247 const double der2fct9_22_P2_3D(const Point&) {
1248 return 0;
1249 }
1250 const double der2fct9_23_P2_3D(const Point&) {
1251 return 0;
1252 }
1253 const double der2fct9_31_P2_3D(const Point&) {
1254 return 4;
1255 }
1256 const double der2fct9_32_P2_3D(const Point&) {
1257 return 0;
1258 }
1259 const double der2fct9_33_P2_3D(const Point&) {
1260 return 0;
1261 }
1262
1263 const double der2fct10_11_P2_3D(const Point&) {
1264 return 0;
1265 }
1266 const double der2fct10_12_P2_3D(const Point&) {
1267 return 0;
1268 }
1269 const double der2fct10_13_P2_3D(const Point&) {
1270 return 0;
1271 }
1272 const double der2fct10_21_P2_3D(const Point&) {
1273 return 0;
1274 }
1275 const double der2fct10_22_P2_3D(const Point&) {
1276 return 0;
1277 }
1278 const double der2fct10_23_P2_3D(const Point&) {
1279 return 4;
1280 }
1281 const double der2fct10_31_P2_3D(const Point&) {
1282 return 0;
1283 }
1284 const double der2fct10_32_P2_3D(const Point&) {
1285 return 4;
1286 }
1287 const double der2fct10_33_P2_3D(const Point&) {
1288 return 0;
1289 }
1290
1291
1292 static const FunctionXYZ fct_P2_3D[ 10 ] = {
1293 fct1_P2_3D, fct2_P2_3D, fct3_P2_3D, fct4_P2_3D,
1294 fct5_P2_3D, fct6_P2_3D, fct7_P2_3D, fct8_P2_3D,
1295 fct9_P2_3D, fct10_P2_3D
1296 }
1297
1298 static const FunctionXYZ derfct_P2_3D[ 30 ] = {
1299 derfct1_1_P2_3D, derfct1_2_P2_3D, derfct1_3_P2_3D,
1300 derfct2_1_P2_3D, derfct2_2_P2_3D, derfct2_3_P2_3D,
1301 derfct3_1_P2_3D, derfct3_2_P2_3D, derfct3_3_P2_3D,
1302 derfct4_1_P2_3D, derfct4_2_P2_3D, derfct4_3_P2_3D,
1303 derfct5_1_P2_3D, derfct5_2_P2_3D, derfct5_3_P2_3D,
1304 derfct6_1_P2_3D, derfct6_2_P2_3D, derfct6_3_P2_3D,
1305 derfct7_1_P2_3D, derfct7_2_P2_3D, derfct7_3_P2_3D,
1306 derfct8_1_P2_3D, derfct8_2_P2_3D, derfct8_3_P2_3D,
1307 derfct9_1_P2_3D, derfct9_2_P2_3D, derfct9_3_P2_3D,
1308 derfct10_1_P2_3D, derfct10_2_P2_3D, derfct10_3_P2_3D
1309 }
1310 /*the perl-script:
1311 #!/usr/bin/perl
1312 for($i=1;$i<=10;$i++){
1313 for($j=1;$j<=3;$j++){
1314 printf "der2fct$i\_$j"."1\_P2\_3D, der2fct$i\_$j"."2\_P2\_3D, der2fct$i\_$j"."3_P2\_3D,\n";
1315 }
1316 }
1317 */
1318 static const FunctionXYZ der2fct_P2_3D[ 90 ] = {
1319 der2fct1_11_P2_3D, der2fct1_12_P2_3D, der2fct1_13_P2_3D,
1320 der2fct1_21_P2_3D, der2fct1_22_P2_3D, der2fct1_23_P2_3D,
1321 der2fct1_31_P2_3D, der2fct1_32_P2_3D, der2fct1_33_P2_3D,
1322 der2fct2_11_P2_3D, der2fct2_12_P2_3D, der2fct2_13_P2_3D,
1323 der2fct2_21_P2_3D, der2fct2_22_P2_3D, der2fct2_23_P2_3D,
1324 der2fct2_31_P2_3D, der2fct2_32_P2_3D, der2fct2_33_P2_3D,
1325 der2fct3_11_P2_3D, der2fct3_12_P2_3D, der2fct3_13_P2_3D,
1326 der2fct3_21_P2_3D, der2fct3_22_P2_3D, der2fct3_23_P2_3D,
1327 der2fct3_31_P2_3D, der2fct3_32_P2_3D, der2fct3_33_P2_3D,
1328 der2fct4_11_P2_3D, der2fct4_12_P2_3D, der2fct4_13_P2_3D,
1329 der2fct4_21_P2_3D, der2fct4_22_P2_3D, der2fct4_23_P2_3D,
1330 der2fct4_31_P2_3D, der2fct4_32_P2_3D, der2fct4_33_P2_3D,
1331 der2fct5_11_P2_3D, der2fct5_12_P2_3D, der2fct5_13_P2_3D,
1332 der2fct5_21_P2_3D, der2fct5_22_P2_3D, der2fct5_23_P2_3D,
1333 der2fct5_31_P2_3D, der2fct5_32_P2_3D, der2fct5_33_P2_3D,
1334 der2fct6_11_P2_3D, der2fct6_12_P2_3D, der2fct6_13_P2_3D,
1335 der2fct6_21_P2_3D, der2fct6_22_P2_3D, der2fct6_23_P2_3D,
1336 der2fct6_31_P2_3D, der2fct6_32_P2_3D, der2fct6_33_P2_3D,
1337 der2fct7_11_P2_3D, der2fct7_12_P2_3D, der2fct7_13_P2_3D,
1338 der2fct7_21_P2_3D, der2fct7_22_P2_3D, der2fct7_23_P2_3D,
1339 der2fct7_31_P2_3D, der2fct7_32_P2_3D, der2fct7_33_P2_3D,
1340 der2fct8_11_P2_3D, der2fct8_12_P2_3D, der2fct8_13_P2_3D,
1341 der2fct8_21_P2_3D, der2fct8_22_P2_3D, der2fct8_23_P2_3D,
1342 der2fct8_31_P2_3D, der2fct8_32_P2_3D, der2fct8_33_P2_3D,
1343 der2fct9_11_P2_3D, der2fct9_12_P2_3D, der2fct9_13_P2_3D,
1344 der2fct9_21_P2_3D, der2fct9_22_P2_3D, der2fct9_23_P2_3D,
1345 der2fct9_31_P2_3D, der2fct9_32_P2_3D, der2fct9_33_P2_3D,
1346 der2fct10_11_P2_3D, der2fct10_12_P2_3D, der2fct10_13_P2_3D,
1347 der2fct10_21_P2_3D, der2fct10_22_P2_3D, der2fct10_23_P2_3D,
1348 der2fct10_31_P2_3D, der2fct10_32_P2_3D, der2fct10_33_P2_3D
1349 }
1350
1351 const BasisFunction basisFunctionP2Tetra(10,3,fct_P2_3D,derfct_P2_3D,der2fct_P2_3D);
1352
1353 //======================================================================
1354 //
1355 // Q1 (3D)
1356 //
1357 //======================================================================
1358 /*
1359 8-------7
1360 /. /|
1361 / . / |
1362 5_______6 |
1363 | . | |
1364 | 4....|..3
1365 | . | /
1366 |. |/
1367 1_______2
1368 */
1369 const double fct1_Q1_3D( const double x, const double y, const double z ) {
1370 return ( 1. - x ) * ( 1. - y ) * ( 1. - z );
1371 }
1372 const double fct2_Q1_3D( const double x, const double y, const double z ) {
1373 return x * ( 1. - y ) * ( 1. - z );
1374 }
1375 const double fct3_Q1_3D( const double x, const double y, const double z ) {
1376 return x * y * ( 1. - z );
1377 }
1378 const double fct4_Q1_3D( const double x, const double y, const double z ) {
1379 return ( 1. - x ) * y * ( 1. - z );
1380 }
1381 const double fct5_Q1_3D( const double x, const double y, const double z ) {
1382 return ( 1. - x ) * ( 1. - y ) * z;
1383 }
1384 const double fct6_Q1_3D( const double x, const double y, const double z ) {
1385 return x * ( 1. - y ) * z;
1386 }
1387 const double fct7_Q1_3D( const double x, const double y, const double z ) {
1388 return x * y * z;
1389 }
1390 const double fct8_Q1_3D( const double x, const double y, const double z ) {
1391 return ( 1. - x ) * y * z;
1392 }
1393
1394 const double derfct1_1_Q1_3D( const double, const double y, const double z ) {
1395 return -( 1. - y ) * ( 1. - z );
1396 }
1397 const double derfct1_2_Q1_3D( const double x, const double, const double z ) {
1398 return -( 1. - x ) * ( 1. - z );
1399 }
1400 const double derfct1_3_Q1_3D( const double x, const double y, const double ) {
1401 return -( 1. - x ) * ( 1. - y );
1402 }
1403 const double derfct2_1_Q1_3D( const double, const double y, const double z ) {
1404 return ( 1. - y ) * ( 1. - z );
1405 }
1406 const double derfct2_2_Q1_3D( const double x, const double, const double z ) {
1407 return -x * ( 1. - z ) ;
1408 }
1409 const double derfct2_3_Q1_3D( const double x, const double y, const double ) {
1410 return -x * ( 1. - y );
1411 }
1412 const double derfct3_1_Q1_3D( const double, const double y, const double z ) {
1413 return y * ( 1. - z );
1414 }
1415 const double derfct3_2_Q1_3D( const double x, const double, const double z ) {
1416 return x * ( 1. - z );
1417 }
1418 const double derfct3_3_Q1_3D( const double x, const double y, const double ) {
1419 return -x * y ;
1420 }
1421 const double derfct4_1_Q1_3D( const double, const double y, const double z ) {
1422 return -y * ( 1. - z );
1423 }
1424 const double derfct4_2_Q1_3D( const double x, const double, const double z ) {
1425 return ( 1. - x ) * ( 1. - z );
1426 }
1427 const double derfct4_3_Q1_3D( const double x, const double y, const double ) {
1428 return -( 1. - x ) * y;
1429 }
1430 const double derfct5_1_Q1_3D( const double, const double y, const double z ) {
1431 return -( 1. - y ) * z;
1432 }
1433 const double derfct5_2_Q1_3D( const double x, const double, const double z ) {
1434 return -( 1. - x ) * z;
1435 }
1436 const double derfct5_3_Q1_3D( const double x, const double y, const double ) {
1437 return ( 1. - x ) * ( 1. - y );
1438 }
1439 const double derfct6_1_Q1_3D( const double, const double y, const double z ) {
1440 return ( 1. - y ) * z ;
1441 }
1442 const double derfct6_2_Q1_3D( const double x, const double, const double z ) {
1443 return -x * z;
1444 }
1445 const double derfct6_3_Q1_3D( const double x, const double y, const double ) {
1446 return x * ( 1. - y );
1447 }
1448 const double derfct7_1_Q1_3D( const double, const double y, const double z ) {
1449 return y * z;
1450 }
1451 const double derfct7_2_Q1_3D( const double x, const double, const double z ) {
1452 return x * z;
1453 }
1454 const double derfct7_3_Q1_3D( const double x, const double y, const double ) {
1455 return x * y;
1456 }
1457 const double derfct8_1_Q1_3D( const double, const double y, const double z ) {
1458 return -y * z;
1459 }
1460 const double derfct8_2_Q1_3D( const double x, const double, const double z ) {
1461 return ( 1. - x ) * z;
1462 }
1463 const double derfct8_3_Q1_3D( const double x, const double y, const double ) {
1464 return ( 1. - x ) * y;
1465 }
1466
1467 const double der2fct1_11_Q1_3D(const Point&) {
1468 return 0;
1469 }
1470 const double der2fct1_12_Q1_3D( const double, const double, const double z ) {
1471 return 1. - z;
1472 }
1473 const double der2fct1_13_Q1_3D( const double, const double y, const double ) {
1474 return 1. - y;
1475 }
1476 const double der2fct1_21_Q1_3D( const double, const double, const double z ) {
1477 return 1. - z;
1478 }
1479 const double der2fct1_22_Q1_3D(const Point&) {
1480 return 0;
1481 }
1482 const double der2fct1_23_Q1_3D( const double x, const double, const double ) {
1483 return 1. - x;
1484 }
1485 const double der2fct1_31_Q1_3D( const double, const double y, const double ) {
1486 return 1. - y;
1487 }
1488 const double der2fct1_32_Q1_3D( const double x, const double, const double ) {
1489 return 1. - x;
1490 }
1491 const double der2fct1_33_Q1_3D(const Point&) {
1492 return 0;
1493 }
1494
1495 const double der2fct2_11_Q1_3D(const Point&) {
1496 return 0;
1497 }
1498 const double der2fct2_12_Q1_3D( const double, const double, const double z ) {
1499 return -( 1. - z );
1500 }
1501 const double der2fct2_13_Q1_3D( const double, const double y, const double ) {
1502 return -( 1. - y );
1503 }
1504 const double der2fct2_21_Q1_3D( const double, const double, const double z ) {
1505 return -( 1. - z );
1506 }
1507 const double der2fct2_22_Q1_3D(const Point&) {
1508 return 0;
1509 }
1510 const double der2fct2_23_Q1_3D( const double x, const double, const double ) {
1511 return x;
1512 }
1513 const double der2fct2_31_Q1_3D( const double, const double y, const double ) {
1514 return -( 1. - y );
1515 }
1516 const double der2fct2_32_Q1_3D( const double x, const double, const double ) {
1517 return x;
1518 }
1519 const double der2fct2_33_Q1_3D(const Point&) {
1520 return 0;
1521 }
1522
1523 const double der2fct3_11_Q1_3D(const Point&) {
1524 return 0;
1525 }
1526 const double der2fct3_12_Q1_3D( const double, const double, const double z ) {
1527 return ( 1. - z );
1528 }
1529 const double der2fct3_13_Q1_3D( const double, const double y, const double ) {
1530 return -y;
1531 }
1532 const double der2fct3_21_Q1_3D( const double, const double, const double z ) {
1533 return ( 1. - z );
1534 }
1535 const double der2fct3_22_Q1_3D(const Point&) {
1536 return 0;
1537 }
1538 const double der2fct3_23_Q1_3D( const double x, const double, const double ) {
1539 return -x;
1540 }
1541 const double der2fct3_31_Q1_3D( const double, const double y, const double ) {
1542 return -y;
1543 }
1544 const double der2fct3_32_Q1_3D( const double x, const double, const double ) {
1545 return -x;
1546 }
1547 const double der2fct3_33_Q1_3D(const Point&) {
1548 return 0;
1549 }
1550
1551 const double der2fct4_11_Q1_3D(const Point&) {
1552 return 0;
1553 }
1554 const double der2fct4_12_Q1_3D( const double, const double, const double z ) {
1555 return -( 1. - z );
1556 }
1557 const double der2fct4_13_Q1_3D( const double, const double y, const double ) {
1558 return y;
1559 }
1560 const double der2fct4_21_Q1_3D( const double, const double, const double z ) {
1561 return -( 1. - z );
1562 }
1563 const double der2fct4_22_Q1_3D(const Point&) {
1564 return 0;
1565 }
1566 const double der2fct4_23_Q1_3D( const double x, const double, const double ) {
1567 return -( 1. - x );
1568 }
1569 const double der2fct4_31_Q1_3D( const double, const double y, const double ) {
1570 return y;
1571 }
1572 const double der2fct4_32_Q1_3D( const double x, const double, const double ) {
1573 return -( 1. - x );
1574 }
1575 const double der2fct4_33_Q1_3D(const Point&) {
1576 return 0;
1577 }
1578
1579 const double der2fct5_11_Q1_3D(const Point&) {
1580 return 0;
1581 }
1582 const double der2fct5_12_Q1_3D( const double, const double, const double z ) {
1583 return z;
1584 }
1585 const double der2fct5_13_Q1_3D( const double, const double y, const double ) {
1586 return -( 1. - y );
1587 }
1588 const double der2fct5_21_Q1_3D( const double, const double, const double z ) {
1589 return z;
1590 }
1591 const double der2fct5_22_Q1_3D(const Point&) {
1592 return 0;
1593 }
1594 const double der2fct5_23_Q1_3D( const double x, const double, const double ) {
1595 return -( 1. - x );
1596 }
1597 const double der2fct5_31_Q1_3D( const double, const double y, const double ) {
1598 return -( 1. - y );
1599 }
1600 const double der2fct5_32_Q1_3D( const double x, const double, const double ) {
1601 return -( 1. - x );
1602 }
1603 const double der2fct5_33_Q1_3D(const Point&) {
1604 return 0;
1605 }
1606
1607 const double der2fct6_11_Q1_3D(const Point&) {
1608 return 0;
1609 }
1610 const double der2fct6_12_Q1_3D( const double, const double, const double z ) {
1611 return -z;
1612 }
1613 const double der2fct6_13_Q1_3D( const double, const double y, const double ) {
1614 return 1. - y;
1615 }
1616 const double der2fct6_21_Q1_3D( const double, const double, const double z ) {
1617 return -z;
1618 }
1619 const double der2fct6_22_Q1_3D(const Point&) {
1620 return 0;
1621 }
1622 const double der2fct6_23_Q1_3D( const double x, const double, const double ) {
1623 return -x;
1624 }
1625 const double der2fct6_31_Q1_3D( const double, const double y, const double ) {
1626 return 1. - y;
1627 }
1628 const double der2fct6_32_Q1_3D( const double x, const double, const double ) {
1629 return -x;
1630 }
1631 const double der2fct6_33_Q1_3D(const Point&) {
1632 return 0;
1633 }
1634
1635 const double der2fct7_11_Q1_3D(const Point&) {
1636 return 0;
1637 }
1638 const double der2fct7_12_Q1_3D( const double, const double, const double z ) {
1639 return z;
1640 }
1641 const double der2fct7_13_Q1_3D( const double, const double y, const double ) {
1642 return y;
1643 }
1644 const double der2fct7_21_Q1_3D( const double, const double, const double z ) {
1645 return z;
1646 }
1647 const double der2fct7_22_Q1_3D(const Point&) {
1648 return 0;
1649 }
1650 const double der2fct7_23_Q1_3D( const double x, const double, const double ) {
1651 return x;
1652 }
1653 const double der2fct7_31_Q1_3D( const double, const double y, const double ) {
1654 return y;
1655 }
1656 const double der2fct7_32_Q1_3D( const double x, const double, const double ) {
1657 return x;
1658 }
1659 const double der2fct7_33_Q1_3D(const Point&) {
1660 return 0;
1661 }
1662
1663 const double der2fct8_11_Q1_3D(const Point&) {
1664 return 0;
1665 }
1666 const double der2fct8_12_Q1_3D( const double, const double, const double z ) {
1667 return -z;
1668 }
1669 const double der2fct8_13_Q1_3D( const double, const double y, const double ) {
1670 return -y;
1671 }
1672 const double der2fct8_21_Q1_3D( const double, const double, const double z ) {
1673 return -z;
1674 }
1675 const double der2fct8_22_Q1_3D(const Point&) {
1676 return 0;
1677 }
1678 const double der2fct8_23_Q1_3D( const double x, const double, const double ) {
1679 return 1. - x;
1680 }
1681 const double der2fct8_31_Q1_3D( const double, const double y, const double ) {
1682 return -y;
1683 }
1684 const double der2fct8_32_Q1_3D( const double x, const double, const double ) {
1685 return 1 -x;
1686 }
1687 const double der2fct8_33_Q1_3D(const Point&) {
1688 return 0;
1689 }
1690
1691 static const FunctionXYZ fct_Q1_3D[ 8 ] = {
1692 fct1_Q1_3D, fct2_Q1_3D, fct3_Q1_3D, fct4_Q1_3D, fct5_Q1_3D,
1693 fct6_Q1_3D, fct7_Q1_3D, fct8_Q1_3D
1694 }
1695
1696
1697 static const FunctionXYZ derfct_Q1_3D[ 24 ] = {
1698 derfct1_1_Q1_3D, derfct1_2_Q1_3D, derfct1_3_Q1_3D,
1699 derfct2_1_Q1_3D, derfct2_2_Q1_3D, derfct2_3_Q1_3D,
1700 derfct3_1_Q1_3D, derfct3_2_Q1_3D, derfct3_3_Q1_3D,
1701 derfct4_1_Q1_3D, derfct4_2_Q1_3D, derfct4_3_Q1_3D,
1702 derfct5_1_Q1_3D, derfct5_2_Q1_3D, derfct5_3_Q1_3D,
1703 derfct6_1_Q1_3D, derfct6_2_Q1_3D, derfct6_3_Q1_3D,
1704 derfct7_1_Q1_3D, derfct7_2_Q1_3D, derfct7_3_Q1_3D,
1705 derfct8_1_Q1_3D, derfct8_2_Q1_3D, derfct8_3_Q1_3D
1706 }
1707 /*the perl-script:
1708 #!/usr/bin/perl
1709 for($i=1;$i<=10;$i++){
1710 for($j=1;$j<=3;$j++){
1711 printf "der2fct$i\_$j"."1\_P2\_3D, der2fct$i\_$j"."2\_P2\_3D, der2fct$i\_$j"."3_P2\_3D,\n";
1712 }
1713 }
1714 */
1715 static const FunctionXYZ der2fct_Q1_3D[ 72 ] = {
1716 der2fct1_11_Q1_3D, der2fct1_12_Q1_3D, der2fct1_13_Q1_3D,
1717 der2fct1_21_Q1_3D, der2fct1_22_Q1_3D, der2fct1_23_Q1_3D,
1718 der2fct1_31_Q1_3D, der2fct1_32_Q1_3D, der2fct1_33_Q1_3D,
1719 der2fct2_11_Q1_3D, der2fct2_12_Q1_3D, der2fct2_13_Q1_3D,
1720 der2fct2_21_Q1_3D, der2fct2_22_Q1_3D, der2fct2_23_Q1_3D,
1721 der2fct2_31_Q1_3D, der2fct2_32_Q1_3D, der2fct2_33_Q1_3D,
1722 der2fct3_11_Q1_3D, der2fct3_12_Q1_3D, der2fct3_13_Q1_3D,
1723 der2fct3_21_Q1_3D, der2fct3_22_Q1_3D, der2fct3_23_Q1_3D,
1724 der2fct3_31_Q1_3D, der2fct3_32_Q1_3D, der2fct3_33_Q1_3D,
1725 der2fct4_11_Q1_3D, der2fct4_12_Q1_3D, der2fct4_13_Q1_3D,
1726 der2fct4_21_Q1_3D, der2fct4_22_Q1_3D, der2fct4_23_Q1_3D,
1727 der2fct4_31_Q1_3D, der2fct4_32_Q1_3D, der2fct4_33_Q1_3D,
1728 der2fct5_11_Q1_3D, der2fct5_12_Q1_3D, der2fct5_13_Q1_3D,
1729 der2fct5_21_Q1_3D, der2fct5_22_Q1_3D, der2fct5_23_Q1_3D,
1730 der2fct5_31_Q1_3D, der2fct5_32_Q1_3D, der2fct5_33_Q1_3D,
1731 der2fct6_11_Q1_3D, der2fct6_12_Q1_3D, der2fct6_13_Q1_3D,
1732 der2fct6_21_Q1_3D, der2fct6_22_Q1_3D, der2fct6_23_Q1_3D,
1733 der2fct6_31_Q1_3D, der2fct6_32_Q1_3D, der2fct6_33_Q1_3D,
1734 der2fct7_11_Q1_3D, der2fct7_12_Q1_3D, der2fct7_13_Q1_3D,
1735 der2fct7_21_Q1_3D, der2fct7_22_Q1_3D, der2fct7_23_Q1_3D,
1736 der2fct7_31_Q1_3D, der2fct7_32_Q1_3D, der2fct7_33_Q1_3D,
1737 der2fct8_11_Q1_3D, der2fct8_12_Q1_3D, der2fct8_13_Q1_3D,
1738 der2fct8_21_Q1_3D, der2fct8_22_Q1_3D, der2fct8_23_Q1_3D,
1739 der2fct8_31_Q1_3D, der2fct8_32_Q1_3D, der2fct8_33_Q1_3D
1740 }
1741
1742 const BasisFunction basisFunctionQ1Hexa(8,3,fct_Q1_3D,derfct_Q1_3D,der2fct_Q1_3D);
1743 #endif
1744
1745 }
1746