GCC Code Coverage Report


Directory: ./
File: FiniteElement/definitionGlobalVariables.cpp
Date: 2024-04-14 07:32:34
Exec Total Coverage
Lines: 403 1629 24.7%
Branches: 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 <string>
17 #include <cmath>
18 #include <iostream>
19
20 // External includes
21
22 // Project includes
23 #include "FiniteElement/quadratureRule.hpp"
24 #include "FiniteElement/basisFunction.hpp"
25 #include "FiniteElement/geoElement.hpp"
26 #include "FiniteElement/refElement.hpp"
27
28 /*!
29 \file definitionGlobalVariables.cpp
30 \authors J-F. Gerbeau
31
32 \brief Basis functions, quadrature rules, geometric and reference elements
33
34 This file contains the definition of all the basis functions (basisFunction.hpp),
35 quadrature rules (quadratureRule.hpp), geometric elements (geoElement.hpp)
36 and reference elements (refElement.hpp) used in FELiScE.
37
38 The instances of these classes must be declared as \c extern in their respective \c .hpp file and
39 defined in the present file.
40
41 \todo Add new finite elements !
42
43 \see basisFunction.hpp, quadratureRule.hpp, geoElement.hpp, refElement.hpp
44
45 */
46
47 namespace felisce
48 {
49 const char *strComponent[8] = {"CompNA", "Comp1", "Comp2", "Comp12",
50 "Comp3", "Comp13", "Comp23", "Comp123"
51 };
52
53 const std::size_t numElementFieldType = 3;
54 const char *strElementFieldType[3] = {"CONSTANT_FIELD", "DOF_FIELD", "QUAD_POINT_FIELD"};
55
56 const std::size_t numTypeValueOfElementField = 3;
57 const char *strTypeValueOfElementField[3] = {"FROM_CONSTANT", "FROM_FUNCTION", "FROM_FILE"};
58
59 /*========================================================================
60 !
61 ! BASIS FUNCTIONS
62 !
63 =======================================================================*/
64
65 /************************************************************************
66 * basisFunctionNULL
67 *************************************************************************/
68 double basisFuncNULL(const Point&);
69 double basisFuncNULL(const Point& pt) {
70 (void) pt;
71 return 0.;
72 }
73
74 static const FunctionXYZ _FuncNULL[] = {basisFuncNULL};
75 static const FunctionXYZ _FuncDiffNULL[] = {basisFuncNULL};
76 static const FunctionXYZ _FuncDiffHessNULL[] = {basisFuncNULL};
77
78 const BasisFunction basisFunctionNULL("basisFunctionNULL",1,0,_FuncNULL,_FuncDiffNULL,_FuncDiffHessNULL);
79
80 /************************************************************************
81 * basisFunction0d
82 *************************************************************************/
83 456 double basisFunc0d(const Point&) {
84 456 return 1.0;
85 }
86 double basisFuncDiff0d(const Point&) {
87 return 0.0;
88 }
89 static const FunctionXYZ _Func0d[] = {basisFunc0d};
90 static const FunctionXYZ _FuncDiff0d[] = {basisFuncDiff0d};
91 static const FunctionXYZ _FuncDiffHess0d[] = {basisFuncNULL};
92
93 const BasisFunction basisFunction0d("basisFunction0d",1,0,_Func0d,_FuncDiff0d,_FuncDiffHess0d);
94
95 /************************************************************************
96 * basisFunction1dP1
97 *************************************************************************/
98 double basis1Func1dP1(const Point&);
99 double basis2Func1dP1(const Point&);
100 double basis1FuncDiffr1dP1(const Point&);
101 double basis2FuncDiffr1dP1(const Point&);
102 double basis1FuncDiffrr1dP1(const Point&);
103 1435954 double basis1Func1dP1(const Point& pt) {
104 1435954 return 0.5*(1-pt.x());
105 }
106 1435954 double basis2Func1dP1(const Point& pt) {
107 1435954 return 0.5*(1+pt.x());
108 }
109 400786 double basis1FuncDiffr1dP1(const Point&) {
110 400786 return -.5;
111 }
112 400786 double basis2FuncDiffr1dP1(const Point&) {
113 400786 return .5;
114 }
115 double basis1FuncDiffrr1dP1(const Point&) {
116 return 0.;
117 }
118
119 static const FunctionXYZ _Func1dP1[] = {basis1Func1dP1, basis2Func1dP1};
120 static const FunctionXYZ _FuncDiff1dP1[] = {basis1FuncDiffr1dP1, basis2FuncDiffr1dP1};
121 static const FunctionXYZ _FuncDiffHess1dP1[] = {basis1FuncDiffrr1dP1, basis1FuncDiffrr1dP1};
122
123 const BasisFunction basisFunction1dP1("basisFunction1dP1",2,1,_Func1dP1,_FuncDiff1dP1,_FuncDiffHess1dP1);
124
125 /************************************************************************
126 * basisFunction1dP1b = P1 + bubble
127 *************************************************************************/
128 double basis3Func1dP1b(const Point&);
129 double basis3Func1dP1b(const Point& pt) {
130 return 1.-pt.x()*pt.x();
131 }
132
133 // first derivative
134 double basis3FuncDiffr1dP1b(const Point&);
135 double basis3FuncDiffr1dP1b(const Point& pt) {
136 return -2.*pt.x();
137 }
138
139 // second derivative
140 double basis3FuncDiffrr1dP1b(const Point&);
141 double basis3FuncDiffrr1dP1b(const Point&) {
142 return -2.;
143 }
144
145 static const FunctionXYZ _Func1dP1b[] = {basis1Func1dP1, basis2Func1dP1, basis3Func1dP1b};
146 static const FunctionXYZ _FuncDiff1dP1b[] = {basis1FuncDiffr1dP1, basis2FuncDiffr1dP1, basis3FuncDiffr1dP1b};
147 static const FunctionXYZ _FuncDiffHess1dP1b[] = {basis1FuncDiffrr1dP1, basis1FuncDiffrr1dP1, basis3FuncDiffrr1dP1b};
148
149 const BasisFunction basisFunction1dP1b("basisFunction1dP1b",3,1,_Func1dP1b,_FuncDiff1dP1b,_FuncDiffHess1dP1b);
150
151 /************************************************************************
152 * basisFunction1dP2
153 *************************************************************************/
154
155 //\todo WARNING : P2 FUNCTIONS ARE WRONG (still in [0,1] -> move them to [-1,1] !!!!!!)
156 // I try to correct this. VM+JF 07/2011
157 /*
158 double basis1Func1dP2(const Point& pt){ return 2. * ( pt.x() - 1. ) * ( pt.x() - 0.5 ) ;}
159 double basis2Func1dP2(const Point& pt){ return 2. * pt.x() * ( pt.x() - 0.5 ) ;}
160 double basis3Func1dP2(const Point& pt){ return 4. * pt.x() * ( 1. - pt.x() ) ;}
161
162 double basis1FuncDiffr1dP2(const Point& pt){return 4. * pt.x() - 3. ;}
163 double basis2FuncDiffr1dP2(const Point& pt){return 4. * pt.x() - 1.;}
164 double basis3FuncDiffr1dP2(const Point& pt){return -8. * pt.x() + 4.;}
165
166 double basis1FuncDiffrr1dP2(const Point& pt){return 4.;}
167 double basis2FuncDiffrr1dP2(const Point& pt){return 4.;}
168 double basis3FuncDiffrr1dP2(const Point& pt){return -8.;}
169
170 static const FunctionXYZ _Func1dP2[] = {basis1Func1dP2, basis2Func1dP2, basis3Func1dP2}
171
172 static const FunctionXYZ _FuncDiff1dP2[] = {basis1FuncDiffr1dP2, basis2FuncDiffr1dP2,basis3FuncDiffr1dP2}
173
174 static const FunctionXYZ _FuncDiffHess1dP2[] = {basis1FuncDiffrr1dP2, basis2FuncDiffrr1dP2, basis3FuncDiffrr1dP2}
175
176 const BasisFunction basisFunction1dP2("basisFunction1dP2",3,1,_Func1dP2,_FuncDiff1dP2,_FuncDiffHess1dP2);
177 */
178 double basis1Func1dP2(const Point& pt);
179 double basis2Func1dP2(const Point& pt);
180 double basis3Func1dP2(const Point& pt);
181 72 double basis1Func1dP2(const Point& pt) {
182 72 return -0.5 * ( 1. - pt.x() ) * pt.x() ;
183 }
184 72 double basis2Func1dP2(const Point& pt) {
185 72 return 0.5 * ( 1. + pt.x() ) * pt.x() ;
186 }
187 72 double basis3Func1dP2(const Point& pt) {
188 72 return ( 1. - pt.x() ) * ( 1. + pt.x() ) ;
189 }
190
191 double basis1FuncDiffr1dP2(const Point& pt);
192 double basis2FuncDiffr1dP2(const Point& pt);
193 double basis3FuncDiffr1dP2(const Point& pt);
194 72 double basis1FuncDiffr1dP2(const Point& pt) {
195 72 return pt.x() - 0.5 ;
196 }
197 72 double basis2FuncDiffr1dP2(const Point& pt) {
198 72 return pt.x() + 0.5;
199 }
200 72 double basis3FuncDiffr1dP2(const Point& pt) {
201 72 return -2. * pt.x();
202 }
203
204 double basis1FuncDiffrr1dP2(const Point&);
205 double basis2FuncDiffrr1dP2(const Point&);
206 double basis3FuncDiffrr1dP2(const Point&);
207 double basis1FuncDiffrr1dP2(const Point& pt) {
208 (void) pt;
209 return 1.;
210 }
211 double basis2FuncDiffrr1dP2(const Point& pt) {
212 (void) pt;
213 return 1.;
214 }
215 double basis3FuncDiffrr1dP2(const Point& pt) {
216 (void) pt;
217 return -2.;
218 }
219
220 static const FunctionXYZ _Func1dP2[] = {basis1Func1dP2, basis2Func1dP2, basis3Func1dP2};
221
222 static const FunctionXYZ _FuncDiff1dP2[] = {basis1FuncDiffr1dP2, basis2FuncDiffr1dP2,basis3FuncDiffr1dP2};
223
224 static const FunctionXYZ _FuncDiffHess1dP2[] = {basis1FuncDiffrr1dP2, basis2FuncDiffrr1dP2, basis3FuncDiffrr1dP2};
225
226 const BasisFunction basisFunction1dP2("basisFunction1dP2",3,1,_Func1dP2,_FuncDiff1dP2,_FuncDiffHess1dP2);
227
228 /************************************************************************
229 * basisFunction1dP3H = P3-Hermite
230 *************************************************************************/
231 double basis1Func1dP3H(const Point&);
232 double basis2Func1dP3H(const Point&);
233 double basis3Func1dP3H(const Point&);
234 double basis4Func1dP3H(const Point&);
235 double basis1Func1dP3H(const Point& pt) {
236 return 0.25*( 2. +pt.x()*(pt.x()*pt.x() -3.));
237 }
238 double basis2Func1dP3H(const Point& pt) {
239 return 0.25*( 1. +pt.x()*(pt.x()*pt.x() -pt.x() -1.));
240 }
241 double basis3Func1dP3H(const Point& pt) {
242 return 0.25*( 2. +pt.x()*(3. -pt.x()*pt.x()));
243 }
244 double basis4Func1dP3H(const Point& pt) {
245 return 0.25*(-1. +pt.x()*(pt.x()*pt.x() +pt.x() -1.));
246 }
247
248 // first derivatives
249 double basis1FuncDiffr1dP3H(const Point& pt);
250 double basis2FuncDiffr1dP3H(const Point& pt);
251 double basis3FuncDiffr1dP3H(const Point& pt);
252 double basis4FuncDiffr1dP3H(const Point& pt);
253 double basis1FuncDiffr1dP3H(const Point& pt) {
254 return 0.75*( pt.x()*pt.x() -1. );
255 }
256 double basis2FuncDiffr1dP3H(const Point& pt) {
257 return 0.25*( 3.*pt.x()*pt.x() -2.*pt.x() -1. );
258 }
259 double basis3FuncDiffr1dP3H(const Point& pt) {
260 return 0.75*( 1. -pt.x()*pt.x() );
261 }
262 double basis4FuncDiffr1dP3H(const Point& pt) {
263 return 0.25*( 3.*pt.x()*pt.x() +2.*pt.x() -1. );
264 }
265
266 // second derivatives
267 double basis1FuncDiffrr1dP3H(const Point& pt);
268 double basis2FuncDiffrr1dP3H(const Point& pt);
269 double basis3FuncDiffrr1dP3H(const Point& pt);
270 double basis4FuncDiffrr1dP3H(const Point& pt);
271 double basis1FuncDiffrr1dP3H(const Point& pt) {
272 return 1.5*pt.x();
273 }
274 double basis2FuncDiffrr1dP3H(const Point& pt) {
275 return 0.25*(6.*pt.x() -2.);
276 }
277 double basis3FuncDiffrr1dP3H(const Point& pt) {
278 return -1.5*pt.x();
279 }
280 double basis4FuncDiffrr1dP3H(const Point& pt) {
281 return 0.25*(6.*pt.x() +2.);
282 }
283
284 static const FunctionXYZ _Func1dP3H[] = {basis1Func1dP3H, basis2Func1dP3H, basis3Func1dP3H, basis4Func1dP3H};
285 static const FunctionXYZ _FuncDiff1dP3H[] = {basis1FuncDiffr1dP3H, basis2FuncDiffr1dP3H, basis3FuncDiffr1dP3H, basis4FuncDiffr1dP3H};
286 static const FunctionXYZ _FuncDiffHess1dP3H[] = {basis1FuncDiffrr1dP3H, basis2FuncDiffrr1dP3H, basis3FuncDiffrr1dP3H, basis4FuncDiffrr1dP3H};
287
288 const BasisFunction basisFunction1dP3H("basisFunction1dP3H",4,1,_Func1dP3H,_FuncDiff1dP3H,_FuncDiffHess1dP3H);
289
290 /************************************************************************
291 * basisFunction2dP1
292 *************************************************************************/
293
294 template <int i>
295 84122664 double basisFunc2dP1(const Point& pt) {
296 if constexpr( i == 0 )
297 28040888 return 1. - pt.x() - pt.y();
298 else if constexpr( i == 1 )
299 28040888 return pt.x();
300 else
301 28040888 return pt.y();
302 }
303
304 // first derivatives
305 template <int i>
306 32795166 double basisFuncDiffr2dP1(const Point& pt) {
307 (void) pt;
308 if constexpr( i == 0 )
309 10931722 return -1.;
310 else if constexpr( i == 1 )
311 10931722 return 1.;
312 else
313 10931722 return 0.;
314 }
315
316 template <int i>
317 32795166 double basisFuncDiffs2dP1(const Point& pt) {
318 (void) pt;
319 if constexpr( i == 0 )
320 10931722 return -1.;
321 else if constexpr( i == 1 )
322 10931722 return 0.;
323 else
324 10931722 return 1.;
325 }
326
327 // Second derivatives
328 template <int i>
329 double basisFuncDiffrr2dP1(const Point& pt) {
330 (void) pt;
331 return 0.;
332 }
333
334 template <int i>
335 double basisFuncDiffrs2dP1(const Point& pt) {
336 (void) pt;
337 return 0.;
338 }
339
340 template <int i>
341 double basisFuncDiffsr2dP1(const Point& pt) {
342 (void) pt;
343 return 0.;
344 }
345
346 template <int i>
347 double basisFuncDiffss2dP1(const Point& pt) {
348 (void) pt;
349 return 0.;
350 }
351
352 static const FunctionXYZ _Func2dP1[] = {basisFunc2dP1<0>, basisFunc2dP1<1>, basisFunc2dP1<2>};
353
354 static const FunctionXYZ _FuncDiff2dP1[] = {
355 basisFuncDiffr2dP1<0>, basisFuncDiffs2dP1<0>,
356 basisFuncDiffr2dP1<1>, basisFuncDiffs2dP1<1>,
357 basisFuncDiffr2dP1<2>, basisFuncDiffs2dP1<2>
358 };
359 static const FunctionXYZ _FuncDiffHess2dP1[] = {
360 basisFuncDiffrr2dP1<0>, basisFuncDiffrs2dP1<0>, basisFuncDiffsr2dP1<0>, basisFuncDiffss2dP1<0>,
361 basisFuncDiffrr2dP1<0>, basisFuncDiffrs2dP1<0>, basisFuncDiffsr2dP1<0>, basisFuncDiffss2dP1<0>,
362 basisFuncDiffrr2dP1<0>, basisFuncDiffrs2dP1<0>, basisFuncDiffsr2dP1<0>, basisFuncDiffss2dP1<0>
363 };
364
365 const BasisFunction basisFunction2dP1("basisFunction2dP1",3,2,_Func2dP1,_FuncDiff2dP1,_FuncDiffHess2dP1);
366
367 /************************************************************************
368 * basisFunction2dP1b = P1 + bubble
369 *************************************************************************/
370 // function
371 template <int i>
372 double basisFunc2dP1b(const Point& pt) {
373 if constexpr( i == 0 )
374 return 1. - pt.x() - pt.y();
375 else if constexpr( i == 1 )
376 return pt.x();
377 else if constexpr( i == 2 )
378 return pt.y();
379 else
380 return 27. * (1. - pt.x() - pt.y()) * pt.x() * pt.y();
381 }
382
383 // first derivatives
384 template <int i>
385 double basisFuncDiffr2dP1b(const Point& pt) {
386 if constexpr( i == 0 )
387 return -1.;
388 else if constexpr( i == 1 )
389 return 1.;
390 else if constexpr( i == 2 )
391 return 0.;
392 else
393 return 27. * (1. - 2. * pt.x() - pt.y()) * pt.y();
394 }
395
396 template <int i>
397 double basisFuncDiffs2dP1b(const Point& pt) {
398 if constexpr( i == 0 )
399 return -1.;
400 else if constexpr( i == 1 )
401 return 0.;
402 else if constexpr( i == 2 )
403 return 1.;
404 else
405 return 27. * (1. - pt.x() - 2. * pt.y()) * pt.x();
406 }
407
408 // Second derivatives
409 template <int i>
410 double basisFuncDiffrr2dP1b(const Point& pt) {
411 if constexpr( i < 3 )
412 return 0.;
413 else
414 return -54. * pt.y();
415 }
416
417 template <int i>
418 double basisFuncDiffrs2dP1b(const Point& pt) {
419 if constexpr( i < 3 )
420 return 0.;
421 else
422 return 27. * (1. - 2. * pt.x() - 2. * pt.y());
423 }
424
425 template <int i>
426 double basisFuncDiffsr2dP1b(const Point& pt) {
427 if constexpr( i < 3 )
428 return 0.;
429 else
430 return 27. * (1. - 2. * pt.x() - 2. * pt.y());
431 }
432
433 template <int i>
434 double basisFuncDiffss2dP1b(const Point& pt) {
435 if constexpr( i < 3 )
436 return 0.;
437 else
438 return -54. * pt.x();
439 }
440
441 static const FunctionXYZ _Func2dP1b[] = {basisFunc2dP1b<0>, basisFunc2dP1b<1>, basisFunc2dP1b<2>, basisFunc2dP1b<3>};
442
443 static const FunctionXYZ _FuncDiff2dP1b[] = {
444 basisFuncDiffr2dP1b<0>, basisFuncDiffs2dP1b<0>,
445 basisFuncDiffr2dP1b<1>, basisFuncDiffs2dP1b<1>,
446 basisFuncDiffr2dP1b<2>, basisFuncDiffs2dP1b<2>,
447 basisFuncDiffr2dP1b<3>, basisFuncDiffs2dP1b<3>
448 };
449
450 static const FunctionXYZ _FuncDiffHess2dP1b[] = {
451 basisFuncDiffrr2dP1b<0>, basisFuncDiffrs2dP1b<0>, basisFuncDiffsr2dP1b<0>, basisFuncDiffss2dP1b<0>,
452 basisFuncDiffrr2dP1b<1>, basisFuncDiffrs2dP1b<1>, basisFuncDiffsr2dP1b<1>, basisFuncDiffss2dP1b<1>,
453 basisFuncDiffrr2dP1b<2>, basisFuncDiffrs2dP1b<2>, basisFuncDiffsr2dP1b<2>, basisFuncDiffss2dP1b<2>,
454 basisFuncDiffrr2dP1b<3>, basisFuncDiffrs2dP1b<3>, basisFuncDiffsr2dP1b<3>, basisFuncDiffss2dP1b<3>
455 };
456
457 const BasisFunction basisFunction2dP1b("basisFunction2dP1b",4,2,_Func2dP1b,_FuncDiff2dP1b,_FuncDiffHess2dP1b);
458
459
460 /************************************************************************
461 * basisFunction2dP2
462 *************************************************************************/
463 template <int i>
464 103944 double basisFunc2dP2(const Point& pt) {
465 if constexpr( i == 0 )
466 17468 return ( 1. -pt.x() - pt.y() ) * ( 1. - pt.x() - pt.x() - pt.y() - pt.y() );
467 else if constexpr( i == 1 )
468 17468 return -pt.x() * ( 1. - pt.x() - pt.x() );
469 else if constexpr( i == 2 )
470 17468 return ( -pt.y() * ( 1. - pt.y() - pt.y() ) );
471 else if constexpr( i == 3 )
472 17180 return ( 4. * pt.x() * ( 1. - pt.x() - pt.y() ) );
473 else if constexpr( i == 4 )
474 17180 return ( 4. * pt.x() * pt.y() );
475 else
476 17180 return ( 4. * pt.y() * ( 1. - pt.x() - pt.y() ) );
477 }
478
479 // first derivatives
480
481 template <int i>
482 101784 double basisFuncDiffr2dP2(const Point& pt) {
483 if constexpr( i == 0 )
484 17036 return 4. * ( pt.x() + pt.y() ) - 3.;
485 else if constexpr( i == 1 )
486 17036 return 4. * pt.x() - 1.;
487 else if constexpr( i == 2 )
488 17036 return 0.;
489 else if constexpr( i == 3 )
490 16892 return 4. * ( 1. - pt.x() - pt.x() - pt.y() );
491 else if constexpr( i == 4 )
492 16892 return 4. * pt.y();
493 else
494 16892 return -4. * pt.y();
495 }
496
497
498 template <int i>
499 101784 double basisFuncDiffs2dP2(const Point& pt) {
500 if constexpr( i == 0 )
501 17036 return 4. * ( pt.x() + pt.y() ) - 3.;
502 else if constexpr( i == 1 )
503 17036 return 0.;
504 else if constexpr( i == 2 )
505 17036 return 4. * pt.y() - 1.;
506 else if constexpr( i == 3 )
507 16892 return -4. * pt.x();
508 else if constexpr( i == 4 )
509 16892 return 4. * pt.x();
510 else
511 16892 return 4. * ( 1. - pt.x() - pt.y() - pt.y() );
512 }
513 /*
514
515 double basis1FuncDiffr2dP2(const Point& pt){return ( 4. * ( pt.x() + pt.y() ) - 3. );}
516 double basis1FuncDiffs2dP2(const Point& pt){return ( 4. * ( pt.x() + pt.y() ) - 3. );}
517
518 double basis2FuncDiffr2dP2(const Point& pt){return ( 4. * pt.x() - 1. );}
519 double basis2FuncDiffs2dP2(const Point& pt){return ( 0. );}
520
521 double basis3FuncDiffr2dP2(const Point& pt){return ( 0. );}
522 double basis3FuncDiffs2dP2(const Point& pt){return ( 4. * pt.y() - 1. );}
523
524 double basis4FuncDiffr2dP2(const Point& pt){return ( 4. * ( 1. - pt.x() - pt.x() - pt.y() ) );}
525 double basis4FuncDiffs2dP2(const Point& pt){return ( -4. * pt.x() );}
526
527 double basis5FuncDiffr2dP2(const Point& pt){return ( 4. * pt.y() );}
528 double basis5FuncDiffs2dP2(const Point& pt){return ( 4. * pt.x() );}
529
530 double basis6FuncDiffr2dP2(const Point& pt){return ( -4. * pt.y() );}
531 double basis6FuncDiffs2dP2(const Point& pt){return ( 4. * ( 1. - pt.x() - pt.y() - pt.y() ) );}
532 */
533 // Second derivatives
534 template <int i>
535 double basisFuncDiffrr2dP2(const Point& pt) {
536 (void) pt;
537 if constexpr( i == 0 )
538 return 4.;
539 else if constexpr( i == 1 )
540 return 4.;
541 else if constexpr( i == 2 )
542 return 0.;
543 else if constexpr( i == 3 )
544 return -8.;
545 else if constexpr( i == 4 )
546 return 0.;
547 else
548 return 0.;
549 }
550
551 template <int i>
552 double basisFuncDiffrs2dP2(const Point& pt) {
553 (void) pt;
554 if constexpr( i == 0 )
555 return 4.;
556 else if constexpr( i == 1 )
557 return 0.;
558 else if constexpr( i == 2 )
559 return 0.;
560 else if constexpr( i == 3 )
561 return -4.;
562 else if constexpr( i == 4 )
563 return 4.;
564 else
565 return -4.;
566 }
567
568 template <int i>
569 double basisFuncDiffsr2dP2(const Point& pt) {
570 (void) pt;
571 if ( i == 0 )
572 return 4.;
573 else if constexpr( i == 1 )
574 return 0.;
575 else if constexpr( i == 2 )
576 return 0.;
577 else if constexpr( i == 3 )
578 return -4.;
579 else if constexpr( i == 4 )
580 return 4.;
581 else
582 return -4.;
583 }
584
585
586 template <int i>
587 double basisFuncDiffss2dP2(const Point& pt) {
588 (void) pt;
589 if constexpr( i == 0 )
590 return 4.;
591 else if constexpr( i == 1 )
592 return 0.;
593 else if constexpr( i == 2 )
594 return 4.;
595 else if constexpr( i == 3 )
596 return 0.;
597 else if constexpr( i == 4 )
598 return 0.;
599 else
600 return -8.;
601 }
602
603 static const FunctionXYZ _Func2dP2[] = {basisFunc2dP2<0>, basisFunc2dP2<1>, basisFunc2dP2<2>, basisFunc2dP2<3>, basisFunc2dP2<4>, basisFunc2dP2<5>};
604
605 static const FunctionXYZ _FuncDiff2dP2[] = {
606 basisFuncDiffr2dP2<0>, basisFuncDiffs2dP2<0>,
607 basisFuncDiffr2dP2<1>, basisFuncDiffs2dP2<1>,
608 basisFuncDiffr2dP2<2>, basisFuncDiffs2dP2<2>,
609 basisFuncDiffr2dP2<3>, basisFuncDiffs2dP2<3>,
610 basisFuncDiffr2dP2<4>, basisFuncDiffs2dP2<4>,
611 basisFuncDiffr2dP2<5>, basisFuncDiffs2dP2<5>,
612 };
613
614 static const FunctionXYZ _FuncDiffHess2dP2[] = {
615 basisFuncDiffrr2dP2<0>, basisFuncDiffrs2dP2<0>, basisFuncDiffsr2dP2<0>, basisFuncDiffss2dP2<0>,
616 basisFuncDiffrr2dP2<1>, basisFuncDiffrs2dP2<1>, basisFuncDiffsr2dP2<1>, basisFuncDiffss2dP2<1>,
617 basisFuncDiffrr2dP2<2>, basisFuncDiffrs2dP2<2>, basisFuncDiffsr2dP2<2>, basisFuncDiffss2dP2<2>,
618 basisFuncDiffrr2dP2<3>, basisFuncDiffrs2dP2<3>, basisFuncDiffsr2dP2<3>, basisFuncDiffss2dP2<3>,
619 basisFuncDiffrr2dP2<4>, basisFuncDiffrs2dP2<4>, basisFuncDiffsr2dP2<4>, basisFuncDiffss2dP2<4>,
620 basisFuncDiffrr2dP2<5>, basisFuncDiffrs2dP2<5>, basisFuncDiffsr2dP2<5>, basisFuncDiffss2dP2<5>
621 };
622
623
624 const BasisFunction basisFunction2dP2("basisFunction2dP2",6,2,_Func2dP2,_FuncDiff2dP2,_FuncDiffHess2dP2);
625
626 /************************************************************************
627 * basisFunction2dQ1
628 *************************************************************************/
629 double basis1Func2dQ1(const Point&);
630 double basis2Func2dQ1(const Point&);
631 double basis3Func2dQ1(const Point&);
632 double basis4Func2dQ1(const Point&);
633 149694 double basis1Func2dQ1(const Point& pt) {
634 149694 return ( 0.25*( 1. - pt.x() ) * ( 1. - pt.y()) );
635 }
636 149694 double basis2Func2dQ1(const Point& pt) {
637 149694 return ( 0.25*( 1. + pt.x() ) * ( 1. - pt.y()) );
638 }
639 149694 double basis3Func2dQ1(const Point& pt) {
640 149694 return ( 0.25*( 1. + pt.x() ) * ( 1. + pt.y()) );
641 }
642 149694 double basis4Func2dQ1(const Point& pt) {
643 149694 return ( 0.25*( 1. - pt.x() ) * ( 1. + pt.y()) );
644 }
645 // first derivatives
646 double basis1FuncDiffr2dQ1(const Point&);
647 double basis1FuncDiffs2dQ1(const Point&);
648 87910 double basis1FuncDiffr2dQ1(const Point& pt) {
649 87910 return ( -0.25*( 1. - pt.y() ) );
650 }
651 87910 double basis1FuncDiffs2dQ1(const Point& pt) {
652 87910 return ( -0.25*( 1. - pt.x() ) );
653 }
654
655 double basis2FuncDiffr2dQ1(const Point&);
656 double basis2FuncDiffs2dQ1(const Point&);
657 87910 double basis2FuncDiffr2dQ1(const Point& pt) {
658 87910 return ( 0.25*( 1. - pt.y() ) );
659 }
660 87910 double basis2FuncDiffs2dQ1(const Point& pt) {
661 87910 return ( -0.25*( 1. + pt.x() ) );
662 }
663
664 double basis3FuncDiffr2dQ1(const Point&);
665 double basis3FuncDiffs2dQ1(const Point&);
666 87910 double basis3FuncDiffr2dQ1(const Point& pt) {
667 87910 return ( 0.25*( 1. + pt.y() ) );
668 }
669 87910 double basis3FuncDiffs2dQ1(const Point& pt) {
670 87910 return ( 0.25*( 1. + pt.x() ) );
671 }
672
673 double basis4FuncDiffr2dQ1(const Point&);
674 double basis4FuncDiffs2dQ1(const Point&);
675 87910 double basis4FuncDiffr2dQ1(const Point& pt) {
676 87910 return ( -0.25*(1. + pt.y() ) );
677 }
678 87910 double basis4FuncDiffs2dQ1(const Point& pt) {
679 87910 return ( 0.25*( 1. - pt.x() ) );
680 }
681 // Second derivatives
682 double basis1FuncDiffrr2dQ1(const Point&);
683 double basis1FuncDiffrs2dQ1(const Point&);
684 double basis1FuncDiffsr2dQ1(const Point&);
685 double basis1FuncDiffss2dQ1(const Point&);
686 double basis1FuncDiffrr2dQ1(const Point& pt) {
687 (void) pt;
688 return ( 0. );
689 }
690 double basis1FuncDiffrs2dQ1(const Point& pt) {
691 (void) pt;
692 return ( 0.25 );
693 }
694 double basis1FuncDiffsr2dQ1(const Point& pt) {
695 (void) pt;
696 return ( 0.25 );
697 }
698 double basis1FuncDiffss2dQ1(const Point& pt) {
699 (void) pt;
700 return ( 0. );
701 }
702
703 double basis2FuncDiffrr2dQ1(const Point&);
704 double basis2FuncDiffrs2dQ1(const Point&);
705 double basis2FuncDiffsr2dQ1(const Point&);
706 double basis2FuncDiffss2dQ1(const Point&);
707 double basis2FuncDiffrr2dQ1(const Point& pt) {
708 (void) pt;
709 return ( 0. );
710 }
711 double basis2FuncDiffrs2dQ1(const Point& pt) {
712 (void) pt;
713 return ( -0.25 );
714 }
715 double basis2FuncDiffsr2dQ1(const Point& pt) {
716 (void) pt;
717 return ( -0.25 );
718 }
719 double basis2FuncDiffss2dQ1(const Point& pt) {
720 (void) pt;
721 return ( 0. );
722 }
723
724 double basis3FuncDiffrr2dQ1(const Point&);
725 double basis3FuncDiffrs2dQ1(const Point&);
726 double basis3FuncDiffsr2dQ1(const Point&);
727 double basis3FuncDiffss2dQ1(const Point&);
728 double basis3FuncDiffrr2dQ1(const Point& pt) {
729 (void) pt;
730 return ( 0. );
731 }
732 double basis3FuncDiffrs2dQ1(const Point& pt) {
733 (void) pt;
734 return ( 0.25 );
735 }
736 double basis3FuncDiffsr2dQ1(const Point& pt) {
737 (void) pt;
738 return ( 0.25 );
739 }
740 double basis3FuncDiffss2dQ1(const Point& pt) {
741 (void) pt;
742 return ( 0. );
743 }
744
745 double basis4FuncDiffrr2dQ1(const Point&);
746 double basis4FuncDiffrs2dQ1(const Point&);
747 double basis4FuncDiffsr2dQ1(const Point&);
748 double basis4FuncDiffss2dQ1(const Point&);
749 double basis4FuncDiffrr2dQ1(const Point& pt) {
750 (void) pt;
751 return ( 0. );
752 }
753 double basis4FuncDiffrs2dQ1(const Point& pt) {
754 (void) pt;
755 return ( -0.25 );
756 }
757 double basis4FuncDiffsr2dQ1(const Point& pt) {
758 (void) pt;
759 return ( -0.25 );
760 }
761 double basis4FuncDiffss2dQ1(const Point& pt) {
762 (void) pt;
763 return ( 0. );
764 }
765
766 static const FunctionXYZ _Func2dQ1[] = {basis1Func2dQ1, basis2Func2dQ1, basis3Func2dQ1, basis4Func2dQ1};
767
768 static const FunctionXYZ _FuncDiff2dQ1[] = {
769 basis1FuncDiffr2dQ1, basis1FuncDiffs2dQ1,
770 basis2FuncDiffr2dQ1, basis2FuncDiffs2dQ1,
771 basis3FuncDiffr2dQ1, basis3FuncDiffs2dQ1,
772 basis4FuncDiffr2dQ1, basis4FuncDiffs2dQ1
773 };
774 static const FunctionXYZ _FuncDiffHess2dQ1[] = {
775 basis1FuncDiffrr2dQ1, basis1FuncDiffrs2dQ1, basis1FuncDiffsr2dQ1, basis1FuncDiffss2dQ1,
776 basis2FuncDiffrr2dQ1, basis2FuncDiffrs2dQ1, basis2FuncDiffsr2dQ1, basis2FuncDiffss2dQ1,
777 basis3FuncDiffrr2dQ1, basis3FuncDiffrs2dQ1, basis3FuncDiffsr2dQ1, basis3FuncDiffss2dQ1,
778 basis4FuncDiffrr2dQ1, basis4FuncDiffrs2dQ1, basis4FuncDiffsr2dQ1, basis4FuncDiffss2dQ1,
779 };
780
781 const BasisFunction basisFunction2dQ1("basisFunction2dQ1",4,2,_Func2dQ1,_FuncDiff2dQ1,_FuncDiffHess2dQ1);
782
783 /************************************************************************
784 * basisFunction2dP1xP2
785 *************************************************************************/
786 double basis1Func2dP1xP2(const Point&);
787 double basis2Func2dP1xP2(const Point&);
788 double basis3Func2dP1xP2(const Point&);
789 double basis4Func2dP1xP2(const Point&);
790 double basis5Func2dP1xP2(const Point&);
791 double basis6Func2dP1xP2(const Point&);
792
793 38480 double basis1Func2dP1xP2(const Point& pt) {
794 38480 return ( -0.25*( 1. - pt.x() ) * ( 1. - pt.y()) * pt.y() );
795 }
796 38480 double basis2Func2dP1xP2(const Point& pt) {
797 38480 return ( -0.25*( 1. + pt.x() ) * ( 1. - pt.y()) * pt.y() );
798 }
799 38480 double basis3Func2dP1xP2(const Point& pt) {
800 38480 return ( 0.25*( 1. + pt.x() ) * ( 1. + pt.y()) * pt.y() );
801 }
802 38480 double basis4Func2dP1xP2(const Point& pt) {
803 38480 return ( 0.25*( 1. - pt.x() ) * ( 1. + pt.y()) * pt.y() );
804 }
805 38480 double basis5Func2dP1xP2(const Point& pt) {
806 38480 return ( 0.5*( 1. - pt.x() ) * ( 1. + pt.y()) * ( 1. - pt.y() ) );
807 }
808 38480 double basis6Func2dP1xP2(const Point& pt) {
809 38480 return ( 0.5*( 1. + pt.x() ) * ( 1. + pt.y()) * ( 1. - pt.y() ) );
810 }
811
812 // first derivatives
813 double basis1FuncDiffr2dP1xP2(const Point&);
814 double basis1FuncDiffs2dP1xP2(const Point&);
815 20512 double basis1FuncDiffr2dP1xP2(const Point& pt) {
816 20512 return ( 0.25 * ( 1. - pt.y() ) * pt.y() );
817 }
818 20512 double basis1FuncDiffs2dP1xP2(const Point& pt) {
819 20512 return ( -0.25 * ( 1. - pt.x() ) * ( 1. - 2*pt.y() ) );
820 }
821
822 double basis2FuncDiffr2dP1xP2(const Point&);
823 double basis2FuncDiffs2dP1xP2(const Point&);
824 20512 double basis2FuncDiffr2dP1xP2(const Point& pt) {
825 20512 return ( -0.25 * ( 1. - pt.y() ) * pt.y() );
826 }
827 20512 double basis2FuncDiffs2dP1xP2(const Point& pt) {
828 20512 return ( -0.25 * ( 1. + pt.x() ) * ( 1. - 2*pt.y() ) );
829 }
830
831 double basis3FuncDiffr2dP1xP2(const Point&);
832 double basis3FuncDiffs2dP1xP2(const Point&);
833 20512 double basis3FuncDiffr2dP1xP2(const Point& pt) {
834 20512 return ( 0.25 * ( 1. + pt.y() ) * pt.y() );
835 }
836 20512 double basis3FuncDiffs2dP1xP2(const Point& pt) {
837 20512 return ( 0.25 * ( 1. + pt.x() ) * ( 1. - 2*pt.y() ) );
838 }
839
840 double basis4FuncDiffr2dP1xP2(const Point&);
841 double basis4FuncDiffs2dP1xP2(const Point&);
842 20512 double basis4FuncDiffr2dP1xP2(const Point& pt) {
843 20512 return ( -0.25 * ( 1. + pt.y() ) * pt.y() );
844 }
845 20512 double basis4FuncDiffs2dP1xP2(const Point& pt) {
846 20512 return ( 0.25 * ( 1. - pt.x() ) * ( 1. - 2*pt.y() ) );
847 }
848
849 double basis5FuncDiffr2dP1xP2(const Point&);
850 double basis5FuncDiffs2dP1xP2(const Point&);
851 20512 double basis5FuncDiffr2dP1xP2(const Point& pt) {
852 20512 return ( -0.5*( 1. + pt.y() ) * ( 1. - pt.y() ) );
853 }
854 20512 double basis5FuncDiffs2dP1xP2(const Point& pt) {
855 20512 return ( - ( 1. - pt.x() ) * pt.y() );
856 }
857
858 double basis6FuncDiffr2dP1xP2(const Point&);
859 double basis6FuncDiffs2dP1xP2(const Point&);
860 20512 double basis6FuncDiffr2dP1xP2(const Point& pt) {
861 20512 return ( 0.5*( 1. + pt.y() ) * ( 1. - pt.y() ) );
862 }
863 20512 double basis6FuncDiffs2dP1xP2(const Point& pt) {
864 20512 return ( - ( 1. + pt.x() ) * pt.y() );
865 }
866
867 // Second derivatives
868 double basis1FuncDiffrr2dP1xP2(const Point&);
869 double basis1FuncDiffrs2dP1xP2(const Point&);
870 double basis1FuncDiffsr2dP1xP2(const Point&);
871 double basis1FuncDiffss2dP1xP2(const Point&);
872 double basis1FuncDiffrr2dP1xP2(const Point& pt) {
873 (void) pt;
874 return ( 0. );
875 }
876 double basis1FuncDiffrs2dP1xP2(const Point& pt) {
877 return ( 0.25 * ( 1. - 2.*pt.y() ) );
878 }
879 double basis1FuncDiffsr2dP1xP2(const Point& pt) {
880 return ( 0.25 * ( 1. - 2.*pt.y() ) );
881 }
882 double basis1FuncDiffss2dP1xP2(const Point& pt) {
883 return ( 0.5 * ( 1. - pt.x() ) );
884 }
885
886 double basis2FuncDiffrr2dP1xP2(const Point&);
887 double basis2FuncDiffrs2dP1xP2(const Point&);
888 double basis2FuncDiffsr2dP1xP2(const Point&);
889 double basis2FuncDiffss2dP1xP2(const Point&);
890 double basis2FuncDiffrr2dP1xP2(const Point& pt) {
891 (void) pt;
892 return ( 0. );
893 }
894 double basis2FuncDiffrs2dP1xP2(const Point& pt) {
895 return ( -0.25 * ( 1. - 2.*pt.y() ) );
896 }
897 double basis2FuncDiffsr2dP1xP2(const Point& pt) {
898 return ( -0.25 * ( 1. - 2.*pt.y() ) );
899 }
900 double basis2FuncDiffss2dP1xP2(const Point& pt) {
901 return ( 0.5 * ( 1. + pt.x() ) );
902 }
903
904 double basis3FuncDiffrr2dP1xP2(const Point&);
905 double basis3FuncDiffrs2dP1xP2(const Point&);
906 double basis3FuncDiffsr2dP1xP2(const Point&);
907 double basis3FuncDiffss2dP1xP2(const Point&);
908 double basis3FuncDiffrr2dP1xP2(const Point& pt) {
909 (void) pt;
910 return ( 0. );
911 }
912 double basis3FuncDiffrs2dP1xP2(const Point& pt) {
913 return ( 0.25 * ( 1. + 2.*pt.y() ) );
914 }
915 double basis3FuncDiffsr2dP1xP2(const Point& pt) {
916 return ( 0.25 * ( 1. + 2.*pt.y() ) );
917 }
918 double basis3FuncDiffss2dP1xP2(const Point& pt) {
919 return ( 0.5 * ( 1. + pt.x() ) );
920 }
921
922
923 double basis4FuncDiffrr2dP1xP2(const Point&);
924 double basis4FuncDiffrs2dP1xP2(const Point&);
925 double basis4FuncDiffsr2dP1xP2(const Point&);
926 double basis4FuncDiffss2dP1xP2(const Point&);
927 double basis4FuncDiffrr2dP1xP2(const Point& pt) {
928 (void) pt;
929 return ( 0. );
930 }
931 double basis4FuncDiffrs2dP1xP2(const Point& pt) {
932 return ( -0.25 * ( 1. + 2.*pt.y() ) );
933 }
934 double basis4FuncDiffsr2dP1xP2(const Point& pt) {
935 return ( -0.25 * ( 1. + 2.*pt.y() ) );
936 }
937 double basis4FuncDiffss2dP1xP2(const Point& pt) {
938 return ( 0.5 * ( 1. - pt.x() ) );
939 }
940
941
942 double basis5FuncDiffrr2dP1xP2(const Point&);
943 double basis5FuncDiffrs2dP1xP2(const Point&);
944 double basis5FuncDiffsr2dP1xP2(const Point&);
945 double basis5FuncDiffss2dP1xP2(const Point&);
946 double basis5FuncDiffrr2dP1xP2(const Point& pt) {
947 (void) pt;
948 return ( 0. );
949 }
950 double basis5FuncDiffrs2dP1xP2(const Point& pt) {
951 return ( pt.y() );
952 }
953 double basis5FuncDiffsr2dP1xP2(const Point& pt) {
954 return ( pt.y() );
955 }
956 double basis5FuncDiffss2dP1xP2(const Point& pt) {
957 return ( - ( 1. - pt.x() ) );
958 }
959
960
961 double basis6FuncDiffrr2dP1xP2(const Point&);
962 double basis6FuncDiffrs2dP1xP2(const Point&);
963 double basis6FuncDiffsr2dP1xP2(const Point&);
964 double basis6FuncDiffss2dP1xP2(const Point&);
965 double basis6FuncDiffrr2dP1xP2(const Point& pt) {
966 (void) pt;
967 return ( 0. );
968 }
969 double basis6FuncDiffrs2dP1xP2(const Point& pt) {
970 return ( -pt.y() );
971 }
972 double basis6FuncDiffsr2dP1xP2(const Point& pt) {
973 return ( -pt.y() );
974 }
975 double basis6FuncDiffss2dP1xP2(const Point& pt) {
976 return ( - ( 1. + pt.x() ) );
977 }
978
979
980 static const FunctionXYZ _Func2dP1xP2[] = {basis1Func2dP1xP2, basis2Func2dP1xP2, basis3Func2dP1xP2, basis4Func2dP1xP2, basis5Func2dP1xP2, basis6Func2dP1xP2};
981
982 static const FunctionXYZ _FuncDiff2dP1xP2[] = {
983 basis1FuncDiffr2dP1xP2, basis1FuncDiffs2dP1xP2,
984 basis2FuncDiffr2dP1xP2, basis2FuncDiffs2dP1xP2,
985 basis3FuncDiffr2dP1xP2, basis3FuncDiffs2dP1xP2,
986 basis4FuncDiffr2dP1xP2, basis4FuncDiffs2dP1xP2,
987 basis5FuncDiffr2dP1xP2, basis5FuncDiffs2dP1xP2,
988 basis6FuncDiffr2dP1xP2, basis6FuncDiffs2dP1xP2
989 };
990 static const FunctionXYZ _FuncDiffHess2dP1xP2[] = {
991 basis1FuncDiffrr2dP1xP2, basis1FuncDiffrs2dP1xP2, basis1FuncDiffsr2dP1xP2, basis1FuncDiffss2dP1xP2,
992 basis2FuncDiffrr2dP1xP2, basis2FuncDiffrs2dP1xP2, basis2FuncDiffsr2dP1xP2, basis2FuncDiffss2dP1xP2,
993 basis3FuncDiffrr2dP1xP2, basis3FuncDiffrs2dP1xP2, basis3FuncDiffsr2dP1xP2, basis3FuncDiffss2dP1xP2,
994 basis4FuncDiffrr2dP1xP2, basis4FuncDiffrs2dP1xP2, basis4FuncDiffsr2dP1xP2, basis4FuncDiffss2dP1xP2,
995 basis5FuncDiffrr2dP1xP2, basis5FuncDiffrs2dP1xP2, basis5FuncDiffsr2dP1xP2, basis5FuncDiffss2dP1xP2,
996 basis6FuncDiffrr2dP1xP2, basis6FuncDiffrs2dP1xP2, basis6FuncDiffsr2dP1xP2, basis6FuncDiffss2dP1xP2,
997 };
998
999 const BasisFunction basisFunction2dP1xP2("basisFunction2dP1xP2",6,2,_Func2dP1xP2,_FuncDiff2dP1xP2,_FuncDiffHess2dP1xP2);
1000
1001
1002
1003 /************************************************************************
1004 * basisFunction2dQ1b = Q1 + bubble
1005 *************************************************************************/
1006 double basis5Func2dQ1b(const Point&);
1007 double basis5Func2dQ1b(const Point& pt) {
1008 return ( (pt.x() * pt.x() - 1.) * (pt.y() * pt.y() - 1.) );
1009 }
1010
1011 // first derivatives
1012 double basis5FuncDiffr2dQ1b(const Point&);
1013 double basis5FuncDiffs2dQ1b(const Point&);
1014 double basis5FuncDiffr2dQ1b(const Point& pt) {
1015 return ( 2. * pt.x() * (pt.y() * pt.y() - 1.) );
1016 }
1017 double basis5FuncDiffs2dQ1b(const Point& pt) {
1018 return ( 2. * pt.y() * (pt.x() * pt.x() - 1.) );
1019 }
1020
1021 // Second derivatives
1022 double basis5FuncDiffrr2dQ1b(const Point&);
1023 double basis5FuncDiffrs2dQ1b(const Point&);
1024 double basis5FuncDiffsr2dQ1b(const Point&);
1025 double basis5FuncDiffss2dQ1b(const Point&);
1026 double basis5FuncDiffrr2dQ1b(const Point& pt) {
1027 return ( 2. * (pt.y() * pt.y() - 1.) );
1028 }
1029 double basis5FuncDiffrs2dQ1b(const Point& pt) {
1030 return ( 4. * pt.x() * pt.y() );
1031 }
1032 double basis5FuncDiffsr2dQ1b(const Point& pt) {
1033 return ( 4. * pt.x() * pt.y() );
1034 }
1035 double basis5FuncDiffss2dQ1b(const Point& pt) {
1036 return ( 2. * (pt.x() * pt.x() - 1.) );
1037 }
1038
1039 static const FunctionXYZ _Func2dQ1b[] = {basis1Func2dQ1, basis2Func2dQ1, basis3Func2dQ1, basis4Func2dQ1, basis5Func2dQ1b};
1040
1041 static const FunctionXYZ _FuncDiff2dQ1b[] = {
1042 basis1FuncDiffr2dQ1, basis1FuncDiffs2dQ1,
1043 basis2FuncDiffr2dQ1, basis2FuncDiffs2dQ1,
1044 basis3FuncDiffr2dQ1, basis3FuncDiffs2dQ1,
1045 basis4FuncDiffr2dQ1, basis4FuncDiffs2dQ1,
1046 basis5FuncDiffr2dQ1b, basis5FuncDiffs2dQ1b
1047 };
1048 static const FunctionXYZ _FuncDiffHess2dQ1b[] = {
1049 basis1FuncDiffrr2dQ1, basis1FuncDiffrs2dQ1, basis1FuncDiffsr2dQ1, basis1FuncDiffss2dQ1,
1050 basis2FuncDiffrr2dQ1, basis2FuncDiffrs2dQ1, basis2FuncDiffsr2dQ1, basis2FuncDiffss2dQ1,
1051 basis3FuncDiffrr2dQ1, basis3FuncDiffrs2dQ1, basis3FuncDiffsr2dQ1, basis3FuncDiffss2dQ1,
1052 basis4FuncDiffrr2dQ1, basis4FuncDiffrs2dQ1, basis4FuncDiffsr2dQ1, basis4FuncDiffss2dQ1,
1053 basis5FuncDiffrr2dQ1b, basis5FuncDiffrs2dQ1b, basis5FuncDiffsr2dQ1b, basis5FuncDiffss2dQ1b
1054 };
1055
1056 const BasisFunction basisFunction2dQ1b("basisFunction2dQ1b",5,2,_Func2dQ1b,_FuncDiff2dQ1b,_FuncDiffHess2dQ1b);
1057
1058
1059
1060 /************************************************************************
1061 * basisFunction2dQ2
1062 *************************************************************************/
1063 double basis1Func2dQ2(const Point&);
1064 double basis2Func2dQ2(const Point&);
1065 double basis3Func2dQ2(const Point&);
1066 double basis4Func2dQ2(const Point&);
1067 double basis5Func2dQ2(const Point&);
1068 double basis6Func2dQ2(const Point&);
1069 double basis7Func2dQ2(const Point&);
1070 double basis8Func2dQ2(const Point&);
1071 32 double basis1Func2dQ2(const Point& pt) {
1072 32 return ( 0.25*(-1.-1.*pt.x()-1.*pt.y())*(1.-pt.x())*(1.-1.*pt.y()) );
1073 }
1074 32 double basis2Func2dQ2(const Point& pt) {
1075 32 return ( 0.25*(-1.+1.*pt.x()-1.*pt.y())*(1.+pt.x())*(1.-1.*pt.y()) );
1076 }
1077 32 double basis3Func2dQ2(const Point& pt) {
1078 32 return ( 0.25*(-1.+1.*pt.x()+1.*pt.y())*(1.+pt.x())*(1.+1.*pt.y()) );
1079 }
1080 32 double basis4Func2dQ2(const Point& pt) {
1081 32 return ( 0.25*(-1.-1.*pt.x()+1.*pt.y())*(1.-pt.x())*(1.+1.*pt.y()) );
1082 }
1083 32 double basis5Func2dQ2(const Point& pt) {
1084 32 return ( 0.5*(1.-(pt.x()*pt.x()))*(1.-1.*pt.y()) );
1085 }
1086 32 double basis6Func2dQ2(const Point& pt) {
1087 32 return ( 0.5*(1.+pt.x()*1.)*(1.-1.*(pt.y()*pt.y())) );
1088 }
1089 32 double basis7Func2dQ2(const Point& pt) {
1090 32 return ( 0.5*(1.-(pt.x()*pt.x()))*(1.+1.*pt.y()) );
1091 }
1092 32 double basis8Func2dQ2(const Point& pt) {
1093 32 return ( 0.5*(1.+pt.x()*(-1.))*(1.-1.*(pt.y()*pt.y())) );
1094 }
1095 // first derivatives
1096 double basis1FuncDiffr2dQ2(const Point&);
1097 double basis1FuncDiffs2dQ2(const Point&);
1098 32 double basis1FuncDiffr2dQ2(const Point& pt) {
1099 32 return ( -0.25*( 1. - pt.y() )*( -2.*pt.x() + pt.y() ) );
1100 }
1101 32 double basis1FuncDiffs2dQ2(const Point& pt) {
1102 32 return ( -0.25*( 1. - pt.x() )*( -1.*pt.x() - 2.*pt.y() ) );
1103 }
1104
1105 double basis2FuncDiffr2dQ2(const Point&);
1106 double basis2FuncDiffs2dQ2(const Point&);
1107 32 double basis2FuncDiffr2dQ2(const Point& pt) {
1108 32 return ( 0.25*( 1. - pt.y() )*( 2.*pt.x() + pt.y() ) );
1109 }
1110 32 double basis2FuncDiffs2dQ2(const Point& pt) {
1111 32 return ( -0.25*( 1. + pt.x() )*( 1.*pt.x() - 2.*pt.y() ) );
1112 }
1113
1114 double basis3FuncDiffr2dQ2(const Point&);
1115 double basis3FuncDiffs2dQ2(const Point&);
1116 32 double basis3FuncDiffr2dQ2(const Point& pt) {
1117 32 return ( 0.25*( 1. + pt.y() )*( 2.*pt.x() - pt.y() ) );
1118 }
1119 32 double basis3FuncDiffs2dQ2(const Point& pt) {
1120 32 return ( 0.25*( 1. + pt.x() )*( 1.*pt.x() + 2.*pt.y() ) );
1121 }
1122
1123 double basis4FuncDiffr2dQ2(const Point&);
1124 double basis4FuncDiffs2dQ2(const Point&);
1125 32 double basis4FuncDiffr2dQ2(const Point& pt) {
1126 32 return ( -0.25*( 1. + pt.y() )*( -2.*pt.x() - pt.y() ) );
1127 }
1128 32 double basis4FuncDiffs2dQ2(const Point& pt) {
1129 32 return ( 0.25*( 1. - pt.x() )*( -1.*pt.x() + 2.*pt.y() ) );
1130 }
1131
1132 double basis5FuncDiffr2dQ2(const Point&);
1133 double basis5FuncDiffs2dQ2(const Point&);
1134 32 double basis5FuncDiffr2dQ2(const Point& pt) {
1135 32 return ( -pt.x()*(1. - pt.y() ) );
1136 }
1137 32 double basis5FuncDiffs2dQ2(const Point& pt) {
1138 32 return ( -0.5*( 1. - pt.x()*pt.x() ) );
1139 }
1140
1141 double basis6FuncDiffr2dQ2(const Point&);
1142 double basis6FuncDiffs2dQ2(const Point&);
1143 32 double basis6FuncDiffr2dQ2(const Point& pt) {
1144 32 return ( 0.5*( 1. - pt.y()*pt.y() ) );
1145 }
1146 32 double basis6FuncDiffs2dQ2(const Point& pt) {
1147 32 return ( -pt.y()*( 1. + pt.x() ) );
1148 }
1149
1150 double basis7FuncDiffr2dQ2(const Point&);
1151 double basis7FuncDiffs2dQ2(const Point&);
1152 32 double basis7FuncDiffr2dQ2(const Point& pt) {
1153 32 return ( -pt.x()*(1. + pt.y() ) );
1154 }
1155 32 double basis7FuncDiffs2dQ2(const Point& pt) {
1156 32 return ( 0.5*( 1. - pt.x()*pt.x() ) );
1157 }
1158
1159 double basis8FuncDiffr2dQ2(const Point&);
1160 double basis8FuncDiffs2dQ2(const Point&);
1161 32 double basis8FuncDiffr2dQ2(const Point& pt) {
1162 32 return ( -0.5*( 1. - pt.y()*pt.y() ) );
1163 }
1164 32 double basis8FuncDiffs2dQ2(const Point& pt) {
1165 32 return ( -pt.y()*( 1. - pt.x() ) );
1166 }
1167
1168 // Second derivatives
1169 double basis1FuncDiffrr2dQ2(const Point&);
1170 double basis1FuncDiffrs2dQ2(const Point&);
1171 double basis1FuncDiffsr2dQ2(const Point&);
1172 double basis1FuncDiffss2dQ2(const Point&);
1173 double basis1FuncDiffrr2dQ2(const Point& pt) {
1174 return ( 0.5*( 1. - pt.y() ) );
1175 }
1176 double basis1FuncDiffrs2dQ2(const Point& pt) {
1177 return ( 0.25*( -2.*pt.x() + 2.*pt.y() - 1. ) );
1178 }
1179 double basis1FuncDiffsr2dQ2(const Point& pt) {
1180 return ( 0.25*( -2.*pt.x() - 2.*pt.y() + 1. ) );
1181 }
1182 double basis1FuncDiffss2dQ2(const Point& pt) {
1183 return ( 0.5*( 1. - pt.x() ) );
1184 }
1185
1186 double basis2FuncDiffrr2dQ2(const Point&);
1187 double basis2FuncDiffrs2dQ2(const Point&);
1188 double basis2FuncDiffsr2dQ2(const Point&);
1189 double basis2FuncDiffss2dQ2(const Point&);
1190 double basis2FuncDiffrr2dQ2(const Point& pt) {
1191 return ( 0.5*( 1. - pt.y() ) );
1192 }
1193 double basis2FuncDiffrs2dQ2(const Point& pt) {
1194 return ( -0.25*( 2.*pt.x() + 2.*pt.y() - 1. ) );
1195 }
1196 double basis2FuncDiffsr2dQ2(const Point& pt) {
1197 return ( -0.25*( 2.*pt.x() - 2.*pt.y() + 1. ) );
1198 }
1199 double basis2FuncDiffss2dQ2(const Point& pt) {
1200 return ( 0.5*( 1. + pt.x() ) );
1201 }
1202
1203 double basis3FuncDiffrr2dQ2(const Point&);
1204 double basis3FuncDiffrs2dQ2(const Point&);
1205 double basis3FuncDiffsr2dQ2(const Point&);
1206 double basis3FuncDiffss2dQ2(const Point&);
1207 double basis3FuncDiffrr2dQ2(const Point& pt) {
1208 return ( 0.5*( 1. + pt.y() ) );
1209 }
1210 double basis3FuncDiffrs2dQ2(const Point& pt) {
1211 return ( 0.25*( 2.*pt.x() - 2.*pt.y() - 1. ) );
1212 }
1213 double basis3FuncDiffsr2dQ2(const Point& pt) {
1214 return ( 0.25*( 2.*pt.x() + 2.*pt.y() + 1. ) );
1215 }
1216 double basis3FuncDiffss2dQ2(const Point& pt) {
1217 return ( 0.5*( 1. + pt.x() ) );
1218 }
1219
1220 double basis4FuncDiffrr2dQ2(const Point&);
1221 double basis4FuncDiffrs2dQ2(const Point&);
1222 double basis4FuncDiffsr2dQ2(const Point&);
1223 double basis4FuncDiffss2dQ2(const Point&);
1224 double basis4FuncDiffrr2dQ2(const Point& pt) {
1225 return ( 0.5*( 1. + pt.y() ) );
1226 }
1227 double basis4FuncDiffrs2dQ2(const Point& pt) {
1228 return ( -0.25*( -2.*pt.x() - 2.*pt.y() - 1. ) );
1229 }
1230 double basis4FuncDiffsr2dQ2(const Point& pt) {
1231 return ( -0.25*( -2.*pt.x() + 2.*pt.y() +1. ) );
1232 }
1233 double basis4FuncDiffss2dQ2(const Point& pt) {
1234 return ( 0.5*( 1. - pt.x() ) );
1235 }
1236
1237 double basis5FuncDiffrr2dQ2(const Point&);
1238 double basis5FuncDiffrs2dQ2(const Point&);
1239 double basis5FuncDiffsr2dQ2(const Point&);
1240 double basis5FuncDiffss2dQ2(const Point&);
1241 double basis5FuncDiffrr2dQ2(const Point& pt) {
1242 return ( -1. + pt.y() );
1243 }
1244 double basis5FuncDiffrs2dQ2(const Point& pt) {
1245 return ( pt.x() );
1246 }
1247 double basis5FuncDiffsr2dQ2(const Point& pt) {
1248 return ( pt.x() );
1249 }
1250 double basis5FuncDiffss2dQ2(const Point& pt) {
1251 (void) pt;
1252 return ( 0. );
1253 }
1254
1255 double basis6FuncDiffrr2dQ2(const Point&);
1256 double basis6FuncDiffrs2dQ2(const Point&);
1257 double basis6FuncDiffsr2dQ2(const Point&);
1258 double basis6FuncDiffss2dQ2(const Point&);
1259 double basis6FuncDiffrr2dQ2(const Point& pt) {
1260 (void) pt;
1261 return ( 0. );
1262 }
1263 double basis6FuncDiffrs2dQ2(const Point& pt) {
1264 return ( -pt.y() );
1265 }
1266 double basis6FuncDiffsr2dQ2(const Point& pt) {
1267 return ( -pt.y() );
1268 }
1269 double basis6FuncDiffss2dQ2(const Point& pt) {
1270 return ( -1. - pt.x() );
1271 }
1272
1273 double basis7FuncDiffrr2dQ2(const Point&);
1274 double basis7FuncDiffrs2dQ2(const Point&);
1275 double basis7FuncDiffsr2dQ2(const Point&);
1276 double basis7FuncDiffss2dQ2(const Point&);
1277 double basis7FuncDiffrr2dQ2(const Point& pt) {
1278 return ( -1. - pt.y() );
1279 }
1280 double basis7FuncDiffrs2dQ2(const Point& pt) {
1281 return ( -pt.x() );
1282 }
1283 double basis7FuncDiffsr2dQ2(const Point& pt) {
1284 return ( -pt.x() );
1285 }
1286 double basis7FuncDiffss2dQ2(const Point& pt) {
1287 (void) pt;
1288 return ( 0. );
1289 }
1290
1291 double basis8FuncDiffrr2dQ2(const Point&);
1292 double basis8FuncDiffrs2dQ2(const Point&);
1293 double basis8FuncDiffsr2dQ2(const Point&);
1294 double basis8FuncDiffss2dQ2(const Point&);
1295 double basis8FuncDiffrr2dQ2(const Point& pt) {
1296 (void) pt;
1297 return ( 0. );
1298 }
1299 double basis8FuncDiffrs2dQ2(const Point& pt) {
1300 return ( pt.y() );
1301 }
1302 double basis8FuncDiffsr2dQ2(const Point& pt) {
1303 return ( pt.y() );
1304 }
1305 double basis8FuncDiffss2dQ2(const Point& pt) {
1306 return ( -1. + pt.x() );
1307 }
1308
1309 static const FunctionXYZ _Func2dQ2[] = {
1310 basis1Func2dQ2, basis2Func2dQ2, basis3Func2dQ2, basis4Func2dQ2,
1311 basis5Func2dQ2, basis6Func2dQ2, basis7Func2dQ2, basis8Func2dQ2,
1312 };
1313
1314
1315 static const FunctionXYZ _FuncDiff2dQ2[] = {
1316 basis1FuncDiffr2dQ2, basis1FuncDiffs2dQ2,
1317 basis2FuncDiffr2dQ2, basis2FuncDiffs2dQ2,
1318 basis3FuncDiffr2dQ2, basis3FuncDiffs2dQ2,
1319 basis4FuncDiffr2dQ2, basis4FuncDiffs2dQ2,
1320 basis5FuncDiffr2dQ2, basis5FuncDiffs2dQ2,
1321 basis6FuncDiffr2dQ2, basis6FuncDiffs2dQ2,
1322 basis7FuncDiffr2dQ2, basis7FuncDiffs2dQ2,
1323 basis8FuncDiffr2dQ2, basis8FuncDiffs2dQ2,
1324 };
1325
1326 static const FunctionXYZ _FuncDiffHess2dQ2[] = {
1327 basis1FuncDiffrr2dQ2, basis1FuncDiffrs2dQ2, basis1FuncDiffsr2dQ2, basis1FuncDiffss2dQ2,
1328 basis2FuncDiffrr2dQ2, basis2FuncDiffrs2dQ2, basis2FuncDiffsr2dQ2, basis2FuncDiffss2dQ2,
1329 basis3FuncDiffrr2dQ2, basis3FuncDiffrs2dQ2, basis3FuncDiffsr2dQ2, basis3FuncDiffss2dQ2,
1330 basis4FuncDiffrr2dQ2, basis4FuncDiffrs2dQ2, basis4FuncDiffsr2dQ2, basis4FuncDiffss2dQ2,
1331 basis5FuncDiffrr2dQ2, basis5FuncDiffrs2dQ2, basis5FuncDiffsr2dQ2, basis5FuncDiffss2dQ2,
1332 basis6FuncDiffrr2dQ2, basis6FuncDiffrs2dQ2, basis6FuncDiffsr2dQ2, basis6FuncDiffss2dQ2,
1333 basis7FuncDiffrr2dQ2, basis7FuncDiffrs2dQ2, basis7FuncDiffsr2dQ2, basis7FuncDiffss2dQ2,
1334 basis8FuncDiffrr2dQ2, basis8FuncDiffrs2dQ2, basis8FuncDiffsr2dQ2, basis8FuncDiffss2dQ2
1335 };
1336
1337 const BasisFunction basisFunction2dQ2("basisFunction2dQ2",8,2,_Func2dQ2,_FuncDiff2dQ2,_FuncDiffHess2dQ2);
1338
1339
1340 /************************************************************************
1341 * basisFunction2dQ2c
1342 *************************************************************************/
1343 double basis1Func2dQ2c(const Point&);
1344 double basis2Func2dQ2c(const Point&);
1345 double basis3Func2dQ2c(const Point&);
1346 double basis4Func2dQ2c(const Point&);
1347 double basis5Func2dQ2c(const Point&);
1348 double basis6Func2dQ2c(const Point&);
1349 double basis7Func2dQ2c(const Point&);
1350 double basis8Func2dQ2c(const Point&);
1351 double basis9Func2dQ2c(const Point&);
1352 double basis1Func2dQ2c(const Point& pt) {
1353 return ( 0.25*( 1. - pt.x() )*( 1. - pt.y() )*pt.x()*pt.y() );
1354 }
1355 double basis2Func2dQ2c(const Point& pt) {
1356 return ( -0.25*( 1. + pt.x() )*( 1. - pt.y() )*pt.x()*pt.y() );
1357 }
1358 double basis3Func2dQ2c(const Point& pt) {
1359 return ( 0.25*( 1. + pt.x() )*( 1. + pt.y() )*pt.x()*pt.y() );
1360 }
1361 double basis4Func2dQ2c(const Point& pt) {
1362 return ( -0.25*( 1. - pt.x() )*( 1. + pt.y() )*pt.x()*pt.y() );
1363 }
1364 double basis5Func2dQ2c(const Point& pt) {
1365 return ( -0.5*( 1. - pt.x()*pt.x() )*(1. - pt.y() )*pt.y() );
1366 }
1367 double basis6Func2dQ2c(const Point& pt) {
1368 return ( 0.5*( 1. + pt.x() )*( 1. - pt.y()*pt.y() )*pt.x() );
1369 }
1370 double basis7Func2dQ2c(const Point& pt) {
1371 return ( 0.5*( 1. - pt.x()*pt.x() )*(1. + pt.y() )*pt.y() );
1372 }
1373 double basis8Func2dQ2c(const Point& pt) {
1374 return ( -0.5*( 1. - pt.x() )*( 1. - pt.y()*pt.y() )*pt.x() );
1375 }
1376 double basis9Func2dQ2c(const Point& pt) {
1377 return ( ( 1. - pt.x() )*( 1. + pt.x() )*( 1. - pt.y() )*( 1. + pt.y() ) );
1378 }
1379 // first derivatives
1380 double basis1FuncDiffr2dQ2c(const Point&);
1381 double basis1FuncDiffs2dQ2c(const Point&);
1382 double basis1FuncDiffr2dQ2c(const Point& pt) {
1383 return ( -0.25*( 1. - pt.y() )*pt.x()*pt.y() + 0.25*( 1. - pt.x() )*( 1. - pt.y() )*pt.y() );
1384 }
1385 double basis1FuncDiffs2dQ2c(const Point& pt) {
1386 return ( -0.25*( 1. - pt.x() )*pt.x()*pt.y() + 0.25*( 1. - pt.x() )*( 1. - pt.y() )*pt.x() );
1387 }
1388
1389 double basis2FuncDiffr2dQ2c(const Point&);
1390 double basis2FuncDiffs2dQ2c(const Point&);
1391 double basis2FuncDiffr2dQ2c(const Point& pt) {
1392 return ( -0.25*( 1. - pt.y() )*pt.x()*pt.y() - 0.25*( 1. + pt.x() )*( 1. - pt.y() )*pt.y() );
1393 }
1394 double basis2FuncDiffs2dQ2c(const Point& pt) {
1395 return ( 0.25*( 1. + pt.x() )*pt.x()*pt.y() - 0.25*( 1. + pt.x() )*( 1. - pt.y() )*pt.x() );
1396 }
1397
1398 double basis3FuncDiffr2dQ2c(const Point&);
1399 double basis3FuncDiffs2dQ2c(const Point&);
1400 double basis3FuncDiffr2dQ2c(const Point& pt) {
1401 return ( 0.25*( 1. + pt.y() )*pt.x()*pt.y() + 0.25*( 1. + pt.x() )*( 1. + pt.y() )*pt.y() );
1402 }
1403 double basis3FuncDiffs2dQ2c(const Point& pt) {
1404 return ( 0.25*( 1. + pt.x() )*pt.x()*pt.y() + 0.25*( 1. + pt.x() )*( 1. + pt.y() )*pt.x() );
1405 }
1406
1407 double basis4FuncDiffr2dQ2c(const Point&);
1408 double basis4FuncDiffs2dQ2c(const Point&);
1409 double basis4FuncDiffr2dQ2c(const Point& pt) {
1410 return ( 0.25*( 1. + pt.y() )*pt.x()*pt.y() - 0.25*( 1. - pt.x() )*( 1. + pt.y() )*pt.y() );
1411 }
1412 double basis4FuncDiffs2dQ2c(const Point& pt) {
1413 return ( -0.25*( 1. - pt.x() )*pt.x()*pt.y() - 0.25*( 1. - pt.x() )*( 1. + pt.y() )*pt.x() );
1414 }
1415
1416 double basis5FuncDiffr2dQ2c(const Point&);
1417 double basis5FuncDiffs2dQ2c(const Point&);
1418 double basis5FuncDiffr2dQ2c(const Point& pt) {
1419 return ( pt.x()*pt.y()*( 1. - pt.y() ) );
1420 }
1421 double basis5FuncDiffs2dQ2c(const Point& pt) {
1422 return ( 0.5*( 1. - pt.x()*pt.x() )*( pt.y() - ( 1. - pt.y() ) ) );
1423 }
1424
1425 double basis6FuncDiffr2dQ2c(const Point&);
1426 double basis6FuncDiffs2dQ2c(const Point&);
1427 double basis6FuncDiffr2dQ2c(const Point& pt) {
1428 return (0.5*pt.x()*(1-pt.y()*pt.y())+0.5*(1+pt.x())*(1-pt.y()*pt.y()));
1429 }
1430 double basis6FuncDiffs2dQ2c(const Point& pt) {
1431 return ( -pt.x()*pt.y()*( 1. + pt.x() ) );
1432 }
1433
1434 double basis7FuncDiffr2dQ2c(const Point&);
1435 double basis7FuncDiffs2dQ2c(const Point&);
1436 double basis7FuncDiffr2dQ2c(const Point& pt) {
1437 return ( -pt.x()*pt.y()*( 1. + pt.y() ) );
1438 }
1439 double basis7FuncDiffs2dQ2c(const Point& pt) {
1440 return ( 0.5*( 1. - pt.x()*pt.x() )*( pt.y() + ( 1. + pt.y() ) ) );
1441 }
1442
1443 double basis8FuncDiffr2dQ2c(const Point&);
1444 double basis8FuncDiffs2dQ2c(const Point&);
1445 double basis8FuncDiffr2dQ2c(const Point& pt) {
1446 return ( 0.5*pt.x()*(1-pt.y()*pt.y())-0.5*(1-pt.x())*(1-pt.y()*pt.y()));
1447 }
1448 double basis8FuncDiffs2dQ2c(const Point& pt) {
1449 return ( pt.x()*pt.y()*( 1. - pt.x() ) );
1450 }
1451
1452 double basis9FuncDiffr2dQ2c(const Point&);
1453 double basis9FuncDiffs2dQ2c(const Point&);
1454 double basis9FuncDiffr2dQ2c(const Point& pt) {
1455 return ( -2.*pt.x()*( 1. - pt.y() )*( 1. + pt.y() ) );
1456 }
1457 double basis9FuncDiffs2dQ2c(const Point& pt) {
1458 return ( -2.*pt.y()*( 1. - pt.x() )*( 1. + pt.x() ) );
1459 }
1460
1461 // Second derivatives
1462 double basis1FuncDiffrr2dQ2c(const Point&);
1463 double basis1FuncDiffrs2dQ2c(const Point&);
1464 double basis1FuncDiffsr2dQ2c(const Point&);
1465 double basis1FuncDiffss2dQ2c(const Point&);
1466 double basis1FuncDiffrr2dQ2c(const Point& pt) {
1467 return ( -0.25*( 1. - pt.y() )*pt.y() - 0.25*(1. - pt.y() )*pt.y() );
1468 }
1469 double basis1FuncDiffrs2dQ2c(const Point& pt) {
1470 return ( -0.25*pt.x()*( -2.*pt.y() + 1. ) );
1471 }
1472 double basis1FuncDiffsr2dQ2c(const Point& pt) {
1473 return ( -0.25*( 1. - 2.*pt.x() )*( pt.y() - ( 1. - pt.y() ) ) );
1474 }
1475 double basis1FuncDiffss2dQ2c(const Point& pt) {
1476 return ( -0.5*( 1. - pt.x() )*pt.x() );
1477 }
1478
1479 double basis2FuncDiffrr2dQ2c(const Point&);
1480 double basis2FuncDiffrs2dQ2c(const Point&);
1481 double basis2FuncDiffsr2dQ2c(const Point&);
1482 double basis2FuncDiffss2dQ2c(const Point&);
1483 double basis2FuncDiffrr2dQ2c(const Point& pt) {
1484 return ( -0.25*( 1. - pt.y() )*pt.y() - 0.25*(1. - pt.y() )*pt.y() );
1485 }
1486 double basis2FuncDiffrs2dQ2c(const Point& pt) {
1487 return ( -0.25*pt.x()*( -2.*pt.y() + 1. ) );
1488 }
1489 double basis2FuncDiffsr2dQ2c(const Point& pt) {
1490 return ( 0.25*( 1. + 2.*pt.x() )*( pt.y() - ( 1. - pt.y() ) ) );
1491 }
1492 double basis2FuncDiffss2dQ2c(const Point& pt) {
1493 return ( 0.5*( 1. + pt.x() )*pt.x() );
1494 }
1495
1496 double basis3FuncDiffrr2dQ2c(const Point&);
1497 double basis3FuncDiffrs2dQ2c(const Point&);
1498 double basis3FuncDiffsr2dQ2c(const Point&);
1499 double basis3FuncDiffss2dQ2c(const Point&);
1500 double basis3FuncDiffrr2dQ2c(const Point& pt) {
1501 return ( 0.25*( 1. + pt.y() )*pt.y() + 0.25*(1. + pt.y() )*pt.y() );
1502 }
1503 double basis3FuncDiffrs2dQ2c(const Point& pt) {
1504 return ( 0.25*pt.x()*( 2.*pt.y() + 1. ) );
1505 }
1506 double basis3FuncDiffsr2dQ2c(const Point& pt) {
1507 return ( 0.25*( 1. + 2.*pt.x() )*( pt.y() + ( 1. + pt.y() ) ) );
1508 }
1509 double basis3FuncDiffss2dQ2c(const Point& pt) {
1510 return ( 0.5*( 1. + pt.x() )*pt.x() );
1511 }
1512
1513 double basis4FuncDiffrr2dQ2c(const Point&);
1514 double basis4FuncDiffrs2dQ2c(const Point&);
1515 double basis4FuncDiffsr2dQ2c(const Point&);
1516 double basis4FuncDiffss2dQ2c(const Point&);
1517 double basis4FuncDiffrr2dQ2c(const Point& pt) {
1518 return ( 0.25*( 1. + pt.y() )*pt.y() + 0.25*(1. + pt.y() )*pt.y() );
1519 }
1520 double basis4FuncDiffrs2dQ2c(const Point& pt) {
1521 return ( 0.25*pt.x()*( 2.*pt.y() + 1. ) );
1522 }
1523 double basis4FuncDiffsr2dQ2c(const Point& pt) {
1524 return ( -0.25*( 1. - 2.*pt.x() )*( pt.y() + ( 1. + pt.y() ) ) );
1525 }
1526 double basis4FuncDiffss2dQ2c(const Point& pt) {
1527 return ( -0.5*( 1. - pt.x() )*pt.x() );
1528 }
1529
1530 double basis5FuncDiffrr2dQ2c(const Point&);
1531 double basis5FuncDiffrs2dQ2c(const Point&);
1532 double basis5FuncDiffsr2dQ2c(const Point&);
1533 double basis5FuncDiffss2dQ2c(const Point&);
1534 double basis5FuncDiffrr2dQ2c(const Point& pt) {
1535 return ( pt.y()*( 1. - pt.y() ) );
1536 }
1537 double basis5FuncDiffrs2dQ2c(const Point& pt) {
1538 return ( pt.x()*( 1. - 2.*pt.y() ) );
1539 }
1540 double basis5FuncDiffsr2dQ2c(const Point& pt) {
1541 return ( - pt.x()*( pt.y() - ( 1. - pt.y() ) ) );
1542 }
1543 double basis5FuncDiffss2dQ2c(const Point& pt) {
1544 return ( 1. - pt.x()*pt.x() );
1545 }
1546
1547 double basis6FuncDiffrr2dQ2c(const Point&);
1548 double basis6FuncDiffrs2dQ2c(const Point&);
1549 double basis6FuncDiffsr2dQ2c(const Point&);
1550 double basis6FuncDiffss2dQ2c(const Point&);
1551 double basis6FuncDiffrr2dQ2c(const Point& pt) {
1552 return ( 0.5*( 1. - pt.y()*pt.y() ) );
1553 }
1554 double basis6FuncDiffrs2dQ2c(const Point& pt) {
1555 return ( -pt.y()*( 1. + pt.x() ) );
1556 }
1557 double basis6FuncDiffsr2dQ2c(const Point& pt) {
1558 return ( -pt.y()*( 1. + 2.*pt.x() ) );
1559 }
1560 double basis6FuncDiffss2dQ2c(const Point& pt) {
1561 return ( -pt.x()*( 1. + pt.x() ) );
1562 }
1563
1564 double basis7FuncDiffrr2dQ2c(const Point&);
1565 double basis7FuncDiffrs2dQ2c(const Point&);
1566 double basis7FuncDiffsr2dQ2c(const Point&);
1567 double basis7FuncDiffss2dQ2c(const Point&);
1568 double basis7FuncDiffrr2dQ2c(const Point& pt) {
1569 return ( -pt.y()*( 1. + pt.y() ) );
1570 }
1571 double basis7FuncDiffrs2dQ2c(const Point& pt) {
1572 return ( -pt.x()*( 1. + 2.*pt.y() ) );
1573 }
1574 double basis7FuncDiffsr2dQ2c(const Point& pt) {
1575 return ( - pt.x()*( pt.y() + ( 1. + pt.y() ) ) );
1576 }
1577 double basis7FuncDiffss2dQ2c(const Point& pt) {
1578 return ( 1. - pt.x()*pt.x() );
1579 }
1580
1581 double basis8FuncDiffrr2dQ2c(const Point&);
1582 double basis8FuncDiffrs2dQ2c(const Point&);
1583 double basis8FuncDiffsr2dQ2c(const Point&);
1584 double basis8FuncDiffss2dQ2c(const Point&);
1585 double basis8FuncDiffrr2dQ2c(const Point& pt) {
1586 return ( 0.5*( 1. - pt.y()*pt.y() ) );
1587 }
1588 double basis8FuncDiffrs2dQ2c(const Point& pt) {
1589 return ( pt.y()*( 1. - pt.x() ) );
1590 }
1591 double basis8FuncDiffsr2dQ2c(const Point& pt) {
1592 return ( pt.y()*( 1. - 2.*pt.x() ) );
1593 }
1594 double basis8FuncDiffss2dQ2c(const Point& pt) {
1595 return ( pt.x()*( 1. - pt.x() ) );
1596 }
1597
1598 double basis9FuncDiffrr2dQ2c(const Point&);
1599 double basis9FuncDiffrs2dQ2c(const Point&);
1600 double basis9FuncDiffsr2dQ2c(const Point&);
1601 double basis9FuncDiffss2dQ2c(const Point&);
1602 double basis9FuncDiffrr2dQ2c(const Point& pt) {
1603 return ( -2.*( 1. - pt.y() )*( 1. + pt.y() ) );
1604 }
1605 double basis9FuncDiffrs2dQ2c(const Point& pt) {
1606 return ( 4.*pt.x()*pt.y() );
1607 }
1608 double basis9FuncDiffsr2dQ2c(const Point& pt) {
1609 return ( 4.*pt.x()*pt.y() );
1610 }
1611 double basis9FuncDiffss2dQ2c(const Point& pt) {
1612 return ( -2.*(1. - pt.x() )*( 1. + pt.x() ) );
1613 }
1614
1615 static const FunctionXYZ _Func2dQ2c[] = {
1616 basis1Func2dQ2c, basis2Func2dQ2c, basis3Func2dQ2c, basis4Func2dQ2c,
1617 basis5Func2dQ2c, basis6Func2dQ2c, basis7Func2dQ2c, basis8Func2dQ2c,
1618 basis9Func2dQ2c
1619 };
1620
1621
1622 static const FunctionXYZ _FuncDiff2dQ2c[] = {
1623 basis1FuncDiffr2dQ2c, basis1FuncDiffs2dQ2c,
1624 basis2FuncDiffr2dQ2c, basis2FuncDiffs2dQ2c,
1625 basis3FuncDiffr2dQ2c, basis3FuncDiffs2dQ2c,
1626 basis4FuncDiffr2dQ2c, basis4FuncDiffs2dQ2c,
1627 basis5FuncDiffr2dQ2c, basis5FuncDiffs2dQ2c,
1628 basis6FuncDiffr2dQ2c, basis6FuncDiffs2dQ2c,
1629 basis7FuncDiffr2dQ2c, basis7FuncDiffs2dQ2c,
1630 basis8FuncDiffr2dQ2c, basis8FuncDiffs2dQ2c,
1631 basis9FuncDiffr2dQ2c, basis9FuncDiffs2dQ2c
1632 };
1633
1634 static const FunctionXYZ _FuncDiffHess2dQ2c[] = {
1635 basis1FuncDiffrr2dQ2c, basis1FuncDiffrs2dQ2c, basis1FuncDiffsr2dQ2c, basis1FuncDiffss2dQ2c,
1636 basis2FuncDiffrr2dQ2c, basis2FuncDiffrs2dQ2c, basis2FuncDiffsr2dQ2c, basis2FuncDiffss2dQ2c,
1637 basis3FuncDiffrr2dQ2c, basis3FuncDiffrs2dQ2c, basis3FuncDiffsr2dQ2c, basis3FuncDiffss2dQ2c,
1638 basis4FuncDiffrr2dQ2c, basis4FuncDiffrs2dQ2c, basis4FuncDiffsr2dQ2c, basis4FuncDiffss2dQ2c,
1639 basis5FuncDiffrr2dQ2c, basis5FuncDiffrs2dQ2c, basis5FuncDiffsr2dQ2c, basis5FuncDiffss2dQ2c,
1640 basis6FuncDiffrr2dQ2c, basis6FuncDiffrs2dQ2c, basis6FuncDiffsr2dQ2c, basis6FuncDiffss2dQ2c,
1641 basis7FuncDiffrr2dQ2c, basis7FuncDiffrs2dQ2c, basis7FuncDiffsr2dQ2c, basis7FuncDiffss2dQ2c,
1642 basis8FuncDiffrr2dQ2c, basis8FuncDiffrs2dQ2c, basis8FuncDiffsr2dQ2c, basis8FuncDiffss2dQ2c,
1643 basis9FuncDiffrr2dQ2c, basis9FuncDiffrs2dQ2c, basis9FuncDiffsr2dQ2c, basis9FuncDiffss2dQ2c
1644 };
1645
1646 const BasisFunction basisFunction2dQ2c("basisFunction2dQ2c",9,2,_Func2dQ2c,_FuncDiff2dQ2c,_FuncDiffHess2dQ2c);
1647
1648 /************************************************************************
1649 * basisFunction3dP1
1650 *************************************************************************/
1651 double basis1Func3dP1(const Point&);
1652 double basis2Func3dP1(const Point&);
1653 double basis3Func3dP1(const Point&);
1654 double basis4Func3dP1(const Point&);
1655 7194182 double basis1Func3dP1(const Point& pt) {
1656 7194182 return (1.- pt.x() - pt.y() - pt.z());
1657 }
1658 7194182 double basis2Func3dP1(const Point& pt) {
1659 7194182 return pt.x();
1660 }
1661 7194182 double basis3Func3dP1(const Point& pt) {
1662 7194182 return pt.y();
1663 }
1664 7194182 double basis4Func3dP1(const Point& pt) {
1665 7194182 return pt.z();
1666 }
1667 // First derivatives
1668 double basis1FuncDiffr3dP1(const Point&);
1669 double basis1FuncDiffs3dP1(const Point&);
1670 double basis1FuncDifft3dP1(const Point&);
1671 double basis2FuncDiffr3dP1(const Point&);
1672 double basis2FuncDiffs3dP1(const Point&);
1673 double basis2FuncDifft3dP1(const Point&);
1674 double basis3FuncDiffr3dP1(const Point&);
1675 double basis3FuncDiffs3dP1(const Point&);
1676 double basis3FuncDifft3dP1(const Point&);
1677 double basis4FuncDiffr3dP1(const Point&);
1678 double basis4FuncDiffs3dP1(const Point&);
1679 double basis4FuncDifft3dP1(const Point&);
1680 141434 double basis1FuncDiffr3dP1(const Point&) {
1681 141434 return -1.;
1682 }
1683 141434 double basis1FuncDiffs3dP1(const Point&) {
1684 141434 return -1.;
1685 }
1686 141434 double basis1FuncDifft3dP1(const Point&) {
1687 141434 return -1.;
1688 }
1689 141434 double basis2FuncDiffr3dP1(const Point&) {
1690 141434 return 1.;
1691 }
1692 141434 double basis2FuncDiffs3dP1(const Point&) {
1693 141434 return 0.;
1694 }
1695 141434 double basis2FuncDifft3dP1(const Point&) {
1696 141434 return 0.;
1697 }
1698 141434 double basis3FuncDiffr3dP1(const Point&) {
1699 141434 return 0.;
1700 }
1701 141434 double basis3FuncDiffs3dP1(const Point&) {
1702 141434 return 1.;
1703 }
1704 141434 double basis3FuncDifft3dP1(const Point&) {
1705 141434 return 0.;
1706 }
1707 141434 double basis4FuncDiffr3dP1(const Point&) {
1708 141434 return 0.;
1709 }
1710 141434 double basis4FuncDiffs3dP1(const Point&) {
1711 141434 return 0.;
1712 }
1713 141434 double basis4FuncDifft3dP1(const Point&) {
1714 141434 return 1.;
1715 }
1716 // Second derivatives
1717 double basisFuncDiffrr3dP1(const Point&);
1718 double basisFuncDiffrr3dP1(const Point&) {
1719 return 0.;
1720 }
1721
1722 static const FunctionXYZ _Func3dP1[] = {basis1Func3dP1, basis2Func3dP1, basis3Func3dP1, basis4Func3dP1};
1723
1724 static const FunctionXYZ _FuncDiff3dP1[] = {
1725 basis1FuncDiffr3dP1, basis1FuncDiffs3dP1, basis1FuncDifft3dP1,
1726 basis2FuncDiffr3dP1, basis2FuncDiffs3dP1, basis2FuncDifft3dP1,
1727 basis3FuncDiffr3dP1, basis3FuncDiffs3dP1, basis3FuncDifft3dP1,
1728 basis4FuncDiffr3dP1, basis4FuncDiffs3dP1, basis4FuncDifft3dP1
1729 };
1730
1731 static const FunctionXYZ _FuncDiffHess3dP1[] = {
1732 basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1,
1733 basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1,
1734 basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1,
1735 basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1,
1736 basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1,
1737 basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1,
1738 basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1,
1739 basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1,
1740 basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1
1741 };
1742
1743 const BasisFunction basisFunction3dP1("basisFunction3dP1",4,3,_Func3dP1,_FuncDiff3dP1,_FuncDiffHess3dP1);
1744
1745
1746
1747 /************************************************************************
1748 * basisFunction3dP1b = P1 + bubble
1749 *************************************************************************/
1750 double basis5Func3dP1b(const Point&);
1751 double basis5Func3dP1b(const Point& pt) {
1752 return 256.*(1.-pt.x()-pt.y()-pt.z())*pt.x()*pt.y()*pt.z();
1753 }
1754
1755 // First derivatives
1756 double basis5FuncDiffr3dP1b(const Point&);
1757 double basis5FuncDiffs3dP1b(const Point&);
1758 double basis5FuncDifft3dP1b(const Point&);
1759 double basis5FuncDiffr3dP1b(const Point& pt) {
1760 return 256.*(1.-2.*pt.x()-pt.y()-pt.z())*pt.y()*pt.z();
1761 }
1762 double basis5FuncDiffs3dP1b(const Point& pt) {
1763 return 256.*(1.-pt.x()-2.*pt.y()-pt.z())*pt.x()*pt.z();
1764 }
1765 double basis5FuncDifft3dP1b(const Point& pt) {
1766 return 256.*(1.-pt.x()-pt.y()-2.*pt.z())*pt.x()*pt.y();
1767 }
1768
1769 // Second derivatives
1770 double basis5FuncDiffrr3dP1b(const Point&);
1771 double basis5FuncDiffrs3dP1b(const Point&);
1772 double basis5FuncDiffrt3dP1b(const Point&);
1773 double basis5FuncDiffsr3dP1b(const Point&);
1774 double basis5FuncDiffss3dP1b(const Point&);
1775 double basis5FuncDiffst3dP1b(const Point&);
1776 double basis5FuncDifftr3dP1b(const Point&);
1777 double basis5FuncDiffts3dP1b(const Point&);
1778 double basis5FuncDifftt3dP1b(const Point&);
1779 double basis5FuncDiffrr3dP1b(const Point& pt) {
1780 return -512.*pt.y()*pt.z();
1781 }
1782 double basis5FuncDiffrs3dP1b(const Point& pt) {
1783 return 256.*(1.-2.*pt.x()-2.*pt.y()-pt.z())*pt.z();
1784 }
1785 double basis5FuncDiffrt3dP1b(const Point& pt) {
1786 return 256.*(1.-2.*pt.x()-pt.y()-2.*pt.z())*pt.y();
1787 }
1788 double basis5FuncDiffsr3dP1b(const Point& pt) {
1789 return 256.*(1.-2.*pt.x()-2.*pt.y()-pt.z())*pt.z();
1790 }
1791 double basis5FuncDiffss3dP1b(const Point& pt) {
1792 return -512.*pt.x()*pt.z();
1793 }
1794 double basis5FuncDiffst3dP1b(const Point& pt) {
1795 return 256.*(1.-pt.x()-2.*pt.y()-2.*pt.z())*pt.x();
1796 }
1797 double basis5FuncDifftr3dP1b(const Point& pt) {
1798 return 256.*(1.-2.*pt.x()-pt.y()-2.*pt.z())*pt.y();
1799 }
1800 double basis5FuncDiffts3dP1b(const Point& pt) {
1801 return 256.*(1.-pt.x()-2.*pt.y()-2.*pt.z())*pt.x();
1802 }
1803 double basis5FuncDifftt3dP1b(const Point& pt) {
1804 return -512.*pt.x()*pt.y();
1805 }
1806
1807
1808 static const FunctionXYZ _Func3dP1b[] = {basis1Func3dP1, basis2Func3dP1, basis3Func3dP1, basis4Func3dP1, basis5Func3dP1b};
1809
1810 static const FunctionXYZ _FuncDiff3dP1b[] = {
1811 basis1FuncDiffr3dP1, basis1FuncDiffs3dP1, basis1FuncDifft3dP1,
1812 basis2FuncDiffr3dP1, basis2FuncDiffs3dP1, basis2FuncDifft3dP1,
1813 basis3FuncDiffr3dP1, basis3FuncDiffs3dP1, basis3FuncDifft3dP1,
1814 basis4FuncDiffr3dP1, basis4FuncDiffs3dP1, basis4FuncDifft3dP1,
1815 basis5FuncDiffr3dP1b, basis5FuncDiffs3dP1b, basis5FuncDifft3dP1b
1816 };
1817
1818 static const FunctionXYZ _FuncDiffHess3dP1b[] = {
1819 basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1,
1820 basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1,
1821 basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1,
1822 basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1, basisFuncDiffrr3dP1,
1823 basis5FuncDiffrr3dP1b, basis5FuncDiffrs3dP1b, basis5FuncDiffrt3dP1b, basis5FuncDiffsr3dP1b, basis5FuncDiffss3dP1b, basis5FuncDiffst3dP1b, basis5FuncDifftr3dP1b, basis5FuncDiffts3dP1b, basis5FuncDifftt3dP1b
1824 };
1825
1826 const BasisFunction basisFunction3dP1b("basisFunction3dP1b",5,3,_Func3dP1b,_FuncDiff3dP1b,_FuncDiffHess3dP1b);
1827
1828 /************************************************************************
1829 * basisFunction3dP2
1830 *************************************************************************/
1831 double basis1Func3dP2(const Point&);
1832 double basis2Func3dP2(const Point&);
1833 double basis3Func3dP2(const Point&);
1834 double basis4Func3dP2(const Point&);
1835 double basis5Func3dP2(const Point&);
1836 double basis6Func3dP2(const Point&);
1837 double basis7Func3dP2(const Point&);
1838 double basis8Func3dP2(const Point&);
1839 double basis9Func3dP2(const Point&);
1840 double basis10Func3dP2(const Point&);
1841 6704 double basis1Func3dP2(const Point& pt) {
1842 6704 return -( 1. - pt.x() - pt.y() - pt.z() ) * ( 1. - 2. * ( 1. - pt.x() - pt.y() - pt.z() ) ) ;
1843 }
1844 6704 double basis2Func3dP2(const Point& pt) {
1845 6704 return -pt.x() * ( 1. - 2. * pt.x() ) ;
1846 }
1847 6704 double basis3Func3dP2(const Point& pt) {
1848 6704 return -pt.y() * ( 1. - 2. * pt.y() ) ;
1849 }
1850 6704 double basis4Func3dP2(const Point& pt) {
1851 6704 return -pt.z() * ( 1. - 2. * pt.z() ) ;
1852 }
1853 6704 double basis5Func3dP2(const Point& pt) {
1854 6704 return 4. * pt.x() * ( 1. - pt.x() - pt.y() - pt.z() ) ;
1855 }
1856 6704 double basis6Func3dP2(const Point& pt) {
1857 6704 return 4. * pt.x() * pt.y() ;
1858 }
1859 6704 double basis7Func3dP2(const Point& pt) {
1860 6704 return 4. * pt.y() * ( 1. - pt.x() - pt.y() - pt.z() ) ;
1861 }
1862 6704 double basis8Func3dP2(const Point& pt) {
1863 6704 return 4. * pt.z() * ( 1. - pt.x() - pt.y() - pt.z() ) ;
1864 }
1865 6704 double basis9Func3dP2(const Point& pt) {
1866 6704 return 4. * pt.x() * pt.z() ;
1867 }
1868 6704 double basis10Func3dP2(const Point& pt) {
1869 6704 return 4. * pt.y() * pt.z() ;
1870 }
1871
1872 // First derivatives
1873 double basis1FuncDiffr3dP2(const Point&);
1874 double basis1FuncDiffs3dP2(const Point&);
1875 double basis1FuncDifft3dP2(const Point&);
1876 6704 double basis1FuncDiffr3dP2(const Point& pt) {
1877 6704 return -3. + 4. * pt.x() + 4. * pt.y() + 4. * pt.z() ;
1878 }
1879 6704 double basis1FuncDiffs3dP2(const Point& pt) {
1880 6704 return -3. + 4. * pt.x() + 4. * pt.y() + 4. * pt.z() ;
1881 }
1882 6704 double basis1FuncDifft3dP2(const Point& pt) {
1883 6704 return -3. + 4. * pt.x() + 4. * pt.y() + 4. * pt.z() ;
1884 }
1885
1886 double basis2FuncDiffr3dP2(const Point&);
1887 double basis2FuncDiffs3dP2(const Point&);
1888 double basis2FuncDifft3dP2(const Point&);
1889 6704 double basis2FuncDiffr3dP2(const Point& pt) {
1890 6704 return -1. + 4. * pt.x() ;
1891 }
1892 6704 double basis2FuncDiffs3dP2(const Point& pt) {
1893 (void) pt;
1894 6704 return 0. ;
1895 }
1896 6704 double basis2FuncDifft3dP2(const Point& pt) {
1897 (void) pt;
1898 6704 return 0. ;
1899 }
1900
1901 double basis3FuncDiffr3dP2(const Point&);
1902 double basis3FuncDiffs3dP2(const Point&);
1903 double basis3FuncDifft3dP2(const Point&);
1904 6704 double basis3FuncDiffr3dP2(const Point& pt) {
1905 (void) pt;
1906 6704 return 0. ;
1907 }
1908 6704 double basis3FuncDiffs3dP2(const Point& pt) {
1909 6704 return -1. + 4. * pt.y() ;
1910 }
1911 6704 double basis3FuncDifft3dP2(const Point& pt) {
1912 (void) pt;
1913 6704 return 0. ;
1914 }
1915
1916 double basis4FuncDiffr3dP2(const Point&);
1917 double basis4FuncDiffs3dP2(const Point&);
1918 double basis4FuncDifft3dP2(const Point&);
1919 6704 double basis4FuncDiffr3dP2(const Point& pt) {
1920 (void) pt;
1921 6704 return 0. ;
1922 }
1923 6704 double basis4FuncDiffs3dP2(const Point& pt) {
1924 (void) pt;
1925 6704 return 0. ;
1926 }
1927 6704 double basis4FuncDifft3dP2(const Point& pt) {
1928 6704 return -1. + 4. * pt.z() ;
1929 }
1930
1931 double basis5FuncDiffr3dP2(const Point&);
1932 double basis5FuncDiffs3dP2(const Point&);
1933 double basis5FuncDifft3dP2(const Point&);
1934 6704 double basis5FuncDiffr3dP2(const Point& pt) {
1935 6704 return 4. - 8. * pt.x() - 4. * pt.y() - 4. * pt.z() ;
1936 }
1937 6704 double basis5FuncDiffs3dP2(const Point& pt) {
1938 6704 return -4. * pt.x() ;
1939 }
1940 6704 double basis5FuncDifft3dP2(const Point& pt) {
1941 6704 return -4. * pt.x() ;
1942 }
1943
1944 double basis6FuncDiffr3dP2(const Point&);
1945 double basis6FuncDiffs3dP2(const Point&);
1946 double basis6FuncDifft3dP2(const Point&);
1947 6704 double basis6FuncDiffr3dP2(const Point& pt) {
1948 6704 return 4. * pt.y() ;
1949 }
1950 6704 double basis6FuncDiffs3dP2(const Point& pt) {
1951 6704 return 4. * pt.x() ;
1952 }
1953 6704 double basis6FuncDifft3dP2(const Point& pt) {
1954 (void) pt;
1955 6704 return 0. ;
1956 }
1957
1958 double basis7FuncDiffr3dP2(const Point&);
1959 double basis7FuncDiffs3dP2(const Point&);
1960 double basis7FuncDifft3dP2(const Point&);
1961 6704 double basis7FuncDiffr3dP2(const Point& pt) {
1962 6704 return -4. * pt.y() ;
1963 }
1964 6704 double basis7FuncDiffs3dP2(const Point& pt) {
1965 6704 return 4. - 4. * pt.x() - 8. * pt.y() - 4. * pt.z() ;
1966 }
1967 6704 double basis7FuncDifft3dP2(const Point& pt) {
1968 6704 return -4. * pt.y() ;
1969 }
1970
1971 double basis8FuncDiffr3dP2(const Point&);
1972 double basis8FuncDiffs3dP2(const Point&);
1973 double basis8FuncDifft3dP2(const Point&);
1974 6704 double basis8FuncDiffr3dP2(const Point& pt) {
1975 6704 return -4. * pt.z() ;
1976 }
1977 6704 double basis8FuncDiffs3dP2(const Point& pt) {
1978 6704 return -4. * pt.z() ;
1979 }
1980 6704 double basis8FuncDifft3dP2(const Point& pt) {
1981 6704 return 4. - 4. * pt.x() - 4. * pt.y() - 8. * pt.z() ;
1982 }
1983
1984 double basis9FuncDiffr3dP2(const Point&);
1985 double basis9FuncDiffs3dP2(const Point&);
1986 double basis9FuncDifft3dP2(const Point&);
1987 6704 double basis9FuncDiffr3dP2(const Point& pt) {
1988 6704 return 4. * pt.z() ;
1989 }
1990 6704 double basis9FuncDiffs3dP2(const Point& pt) {
1991 (void) pt;
1992 6704 return 0. ;
1993 }
1994 6704 double basis9FuncDifft3dP2(const Point& pt) {
1995 6704 return 4. * pt.x() ;
1996 }
1997
1998 double basis10FuncDiffr3dP2(const Point&);
1999 double basis10FuncDiffs3dP2(const Point&);
2000 double basis10FuncDifft3dP2(const Point&);
2001 6704 double basis10FuncDiffr3dP2(const Point& pt) {
2002 (void) pt;
2003 6704 return 0. ;
2004 }
2005 6704 double basis10FuncDiffs3dP2(const Point& pt) {
2006 6704 return 4. * pt.z() ;
2007 }
2008 6704 double basis10FuncDifft3dP2(const Point& pt) {
2009 6704 return 4. * pt.y() ;
2010 }
2011
2012 // Second derivatives
2013 double basis1FuncDiffrr3dP2(const Point&);
2014 double basis1FuncDiffrs3dP2(const Point&);
2015 double basis1FuncDiffrt3dP2(const Point&);
2016 double basis1FuncDiffrr3dP2(const Point& pt) {
2017 (void) pt;
2018 return 4. ;
2019 }
2020 double basis1FuncDiffrs3dP2(const Point& pt) {
2021 (void) pt;
2022 return 4. ;
2023 }
2024 double basis1FuncDiffrt3dP2(const Point& pt) {
2025 (void) pt;
2026 return 4. ;
2027 }
2028
2029 double basis1FuncDiffsr3dP2(const Point&);
2030 double basis1FuncDiffss3dP2(const Point&);
2031 double basis1FuncDiffst3dP2(const Point&);
2032 double basis1FuncDiffsr3dP2(const Point& pt) {
2033 (void) pt;
2034 return 4. ;
2035 }
2036 double basis1FuncDiffss3dP2(const Point& pt) {
2037 (void) pt;
2038 return 4. ;
2039 }
2040 double basis1FuncDiffst3dP2(const Point& pt) {
2041 (void) pt;
2042 return 4. ;
2043 }
2044
2045 double basis1FuncDifftr3dP2(const Point&);
2046 double basis1FuncDiffts3dP2(const Point&);
2047 double basis1FuncDifftt3dP2(const Point&);
2048 double basis1FuncDifftr3dP2(const Point& pt) {
2049 (void) pt;
2050 return 4. ;
2051 }
2052 double basis1FuncDiffts3dP2(const Point& pt) {
2053 (void) pt;
2054 return 4. ;
2055 }
2056 double basis1FuncDifftt3dP2(const Point& pt) {
2057 (void) pt;
2058 return 4. ;
2059 }
2060
2061 double basis2FuncDiffrr3dP2(const Point&);
2062 double basis2FuncDiffrs3dP2(const Point&);
2063 double basis2FuncDiffrt3dP2(const Point&);
2064 double basis2FuncDiffrr3dP2(const Point& pt) {
2065 (void) pt;
2066 return 4. ;
2067 }
2068 double basis2FuncDiffrs3dP2(const Point& pt) {
2069 (void) pt;
2070 return 0. ;
2071 }
2072 double basis2FuncDiffrt3dP2(const Point& pt) {
2073 (void) pt;
2074 return 0. ;
2075 }
2076
2077 double basis2FuncDiffsr3dP2(const Point&);
2078 double basis2FuncDiffss3dP2(const Point&);
2079 double basis2FuncDiffst3dP2(const Point&);
2080 double basis2FuncDiffsr3dP2(const Point& pt) {
2081 (void) pt;
2082 return 0. ;
2083 }
2084 double basis2FuncDiffss3dP2(const Point& pt) {
2085 (void) pt;
2086 return 0. ;
2087 }
2088 double basis2FuncDiffst3dP2(const Point& pt) {
2089 (void) pt;
2090 return 0. ;
2091 }
2092
2093 double basis2FuncDifftr3dP2(const Point&);
2094 double basis2FuncDiffts3dP2(const Point&);
2095 double basis2FuncDifftt3dP2(const Point&);
2096 double basis2FuncDifftr3dP2(const Point& pt) {
2097 (void) pt;
2098 return 0. ;
2099 }
2100 double basis2FuncDiffts3dP2(const Point& pt) {
2101 (void) pt;
2102 return 0. ;
2103 }
2104 double basis2FuncDifftt3dP2(const Point& pt) {
2105 (void) pt;
2106 return 0. ;
2107 }
2108
2109 double basis3FuncDiffrr3dP2(const Point&);
2110 double basis3FuncDiffrs3dP2(const Point&);
2111 double basis3FuncDiffrt3dP2(const Point&);
2112 double basis3FuncDiffrr3dP2(const Point& pt) {
2113 (void) pt;
2114 return 0. ;
2115 }
2116 double basis3FuncDiffrs3dP2(const Point& pt) {
2117 (void) pt;
2118 return 0. ;
2119 }
2120 double basis3FuncDiffrt3dP2(const Point& pt) {
2121 (void) pt;
2122 return 0. ;
2123 }
2124
2125 double basis3FuncDiffsr3dP2(const Point&);
2126 double basis3FuncDiffss3dP2(const Point&);
2127 double basis3FuncDiffst3dP2(const Point&);
2128 double basis3FuncDiffsr3dP2(const Point& pt) {
2129 (void) pt;
2130 return 0. ;
2131 }
2132 double basis3FuncDiffss3dP2(const Point& pt) {
2133 (void) pt;
2134 return 4. ;
2135 }
2136 double basis3FuncDiffst3dP2(const Point& pt) {
2137 (void) pt;
2138 return 0. ;
2139 }
2140
2141 double basis3FuncDifftr3dP2(const Point&);
2142 double basis3FuncDiffts3dP2(const Point&);
2143 double basis3FuncDifftt3dP2(const Point&);
2144 double basis3FuncDifftr3dP2(const Point& pt) {
2145 (void) pt;
2146 return 0. ;
2147 }
2148 double basis3FuncDiffts3dP2(const Point& pt) {
2149 (void) pt;
2150 return 0. ;
2151 }
2152 double basis3FuncDifftt3dP2(const Point& pt) {
2153 (void) pt;
2154 return 0. ;
2155 }
2156
2157 double basis4FuncDiffrr3dP2(const Point&);
2158 double basis4FuncDiffrs3dP2(const Point&);
2159 double basis4FuncDiffrt3dP2(const Point&);
2160 double basis4FuncDiffrr3dP2(const Point& pt) {
2161 (void) pt;
2162 return 0. ;
2163 }
2164 double basis4FuncDiffrs3dP2(const Point& pt) {
2165 (void) pt;
2166 return 0. ;
2167 }
2168 double basis4FuncDiffrt3dP2(const Point& pt) {
2169 (void) pt;
2170 return 0. ;
2171 }
2172
2173 double basis4FuncDiffsr3dP2(const Point&);
2174 double basis4FuncDiffss3dP2(const Point&);
2175 double basis4FuncDiffst3dP2(const Point&);
2176 double basis4FuncDiffsr3dP2(const Point& pt) {
2177 (void) pt;
2178 return 0. ;
2179 }
2180 double basis4FuncDiffss3dP2(const Point& pt) {
2181 (void) pt;
2182 return 0. ;
2183 }
2184 double basis4FuncDiffst3dP2(const Point& pt) {
2185 (void) pt;
2186 return 0. ;
2187 }
2188
2189 double basis4FuncDifftr3dP2(const Point&);
2190 double basis4FuncDiffts3dP2(const Point&);
2191 double basis4FuncDifftt3dP2(const Point&);
2192 double basis4FuncDifftr3dP2(const Point& pt) {
2193 (void) pt;
2194 return 0. ;
2195 }
2196 double basis4FuncDiffts3dP2(const Point& pt) {
2197 (void) pt;
2198 return 0. ;
2199 }
2200 double basis4FuncDifftt3dP2(const Point& pt) {
2201 (void) pt;
2202 return 4. ;
2203 }
2204
2205 double basis5FuncDiffrr3dP2(const Point&);
2206 double basis5FuncDiffrs3dP2(const Point&);
2207 double basis5FuncDiffrt3dP2(const Point&);
2208 double basis5FuncDiffrr3dP2(const Point& pt) {
2209 (void) pt;
2210 return -8. ;
2211 }
2212 double basis5FuncDiffrs3dP2(const Point& pt) {
2213 (void) pt;
2214 return -4. ;
2215 }
2216 double basis5FuncDiffrt3dP2(const Point& pt) {
2217 (void) pt;
2218 return -4. ;
2219 }
2220
2221 double basis5FuncDiffsr3dP2(const Point&);
2222 double basis5FuncDiffss3dP2(const Point&);
2223 double basis5FuncDiffst3dP2(const Point&);
2224 double basis5FuncDiffsr3dP2(const Point& pt) {
2225 (void) pt;
2226 return -4. ;
2227 }
2228 double basis5FuncDiffss3dP2(const Point& pt) {
2229 (void) pt;
2230 return 0. ;
2231 }
2232 double basis5FuncDiffst3dP2(const Point& pt) {
2233 (void) pt;
2234 return 0. ;
2235 }
2236
2237 double basis5FuncDifftr3dP2(const Point&);
2238 double basis5FuncDiffts3dP2(const Point&);
2239 double basis5FuncDifftt3dP2(const Point&);
2240 double basis5FuncDifftr3dP2(const Point& pt) {
2241 (void) pt;
2242 return -4. ;
2243 }
2244 double basis5FuncDiffts3dP2(const Point& pt) {
2245 (void) pt;
2246 return 0. ;
2247 }
2248 double basis5FuncDifftt3dP2(const Point& pt) {
2249 (void) pt;
2250 return 0. ;
2251 }
2252
2253 double basis6FuncDiffrr3dP2(const Point&);
2254 double basis6FuncDiffrs3dP2(const Point&);
2255 double basis6FuncDiffrt3dP2(const Point&);
2256 double basis6FuncDiffrr3dP2(const Point& pt) {
2257 (void) pt;
2258 return 0. ;
2259 }
2260 double basis6FuncDiffrs3dP2(const Point& pt) {
2261 (void) pt;
2262 return 4. ;
2263 }
2264 double basis6FuncDiffrt3dP2(const Point& pt) {
2265 (void) pt;
2266 return 0. ;
2267 }
2268
2269 double basis6FuncDiffsr3dP2(const Point&);
2270 double basis6FuncDiffss3dP2(const Point&);
2271 double basis6FuncDiffst3dP2(const Point&);
2272 double basis6FuncDiffsr3dP2(const Point& pt) {
2273 (void) pt;
2274 return 4. ;
2275 }
2276 double basis6FuncDiffss3dP2(const Point& pt) {
2277 (void) pt;
2278 return 0. ;
2279 }
2280 double basis6FuncDiffst3dP2(const Point& pt) {
2281 (void) pt;
2282 return 0. ;
2283 }
2284
2285 double basis6FuncDifftr3dP2(const Point&);
2286 double basis6FuncDiffts3dP2(const Point&);
2287 double basis6FuncDifftt3dP2(const Point&);
2288 double basis6FuncDifftr3dP2(const Point& pt) {
2289 (void) pt;
2290 return 0. ;
2291 }
2292 double basis6FuncDiffts3dP2(const Point& pt) {
2293 (void) pt;
2294 return 0. ;
2295 }
2296 double basis6FuncDifftt3dP2(const Point& pt) {
2297 (void) pt;
2298 return 0. ;
2299 }
2300
2301 double basis7FuncDiffrr3dP2(const Point&);
2302 double basis7FuncDiffrs3dP2(const Point&);
2303 double basis7FuncDiffrt3dP2(const Point&);
2304 double basis7FuncDiffrr3dP2(const Point& pt) {
2305 (void) pt;
2306 return 0. ;
2307 }
2308 double basis7FuncDiffrs3dP2(const Point& pt) {
2309 (void) pt;
2310 return -4. ;
2311 }
2312 double basis7FuncDiffrt3dP2(const Point& pt) {
2313 (void) pt;
2314 return 0. ;
2315 }
2316
2317 double basis7FuncDiffsr3dP2(const Point&);
2318 double basis7FuncDiffss3dP2(const Point&);
2319 double basis7FuncDiffst3dP2(const Point&);
2320 double basis7FuncDiffsr3dP2(const Point& pt) {
2321 (void) pt;
2322 return -4. ;
2323 }
2324 double basis7FuncDiffss3dP2(const Point& pt) {
2325 (void) pt;
2326 return -8. ;
2327 }
2328 double basis7FuncDiffst3dP2(const Point& pt) {
2329 (void) pt;
2330 return -4. ;
2331 }
2332
2333 double basis7FuncDifftr3dP2(const Point&);
2334 double basis7FuncDiffts3dP2(const Point&);
2335 double basis7FuncDifftt3dP2(const Point&);
2336 double basis7FuncDifftr3dP2(const Point& pt) {
2337 (void) pt;
2338 return 0. ;
2339 }
2340 double basis7FuncDiffts3dP2(const Point& pt) {
2341 (void) pt;
2342 return -4. ;
2343 }
2344 double basis7FuncDifftt3dP2(const Point& pt) {
2345 (void) pt;
2346 return 0. ;
2347 }
2348
2349 double basis8FuncDiffrr3dP2(const Point&);
2350 double basis8FuncDiffrs3dP2(const Point&);
2351 double basis8FuncDiffrt3dP2(const Point&);
2352 double basis8FuncDiffrr3dP2(const Point& pt) {
2353 (void) pt;
2354 return 0. ;
2355 }
2356 double basis8FuncDiffrs3dP2(const Point& pt) {
2357 (void) pt;
2358 return 0. ;
2359 }
2360 double basis8FuncDiffrt3dP2(const Point& pt) {
2361 (void) pt;
2362 return -4. ;
2363 }
2364
2365 double basis8FuncDiffsr3dP2(const Point&);
2366 double basis8FuncDiffss3dP2(const Point&);
2367 double basis8FuncDiffst3dP2(const Point&);
2368 double basis8FuncDiffsr3dP2(const Point& pt) {
2369 (void) pt;
2370 return 0. ;
2371 }
2372 double basis8FuncDiffss3dP2(const Point& pt) {
2373 (void) pt;
2374 return 0. ;
2375 }
2376 double basis8FuncDiffst3dP2(const Point& pt) {
2377 (void) pt;
2378 return -4. ;
2379 }
2380
2381 double basis8FuncDifftr3dP2(const Point&);
2382 double basis8FuncDiffts3dP2(const Point&);
2383 double basis8FuncDifftt3dP2(const Point&);
2384 double basis8FuncDifftr3dP2(const Point& pt) {
2385 (void) pt;
2386 return -4. ;
2387 }
2388 double basis8FuncDiffts3dP2(const Point& pt) {
2389 (void) pt;
2390 return -4. ;
2391 }
2392 double basis8FuncDifftt3dP2(const Point& pt) {
2393 (void) pt;
2394 return -8. ;
2395 }
2396
2397 double basis9FuncDiffrr3dP2(const Point&);
2398 double basis9FuncDiffrs3dP2(const Point&);
2399 double basis9FuncDiffrt3dP2(const Point&);
2400 double basis9FuncDiffrr3dP2(const Point& pt) {
2401 (void) pt;
2402 return 0. ;
2403 }
2404 double basis9FuncDiffrs3dP2(const Point& pt) {
2405 (void) pt;
2406 return 0. ;
2407 }
2408 double basis9FuncDiffrt3dP2(const Point& pt) {
2409 (void) pt;
2410 return 4. ;
2411 }
2412
2413 double basis9FuncDiffsr3dP2(const Point&);
2414 double basis9FuncDiffss3dP2(const Point&);
2415 double basis9FuncDiffst3dP2(const Point&);
2416 double basis9FuncDiffsr3dP2(const Point& pt) {
2417 (void) pt;
2418 return 0. ;
2419 }
2420 double basis9FuncDiffss3dP2(const Point& pt) {
2421 (void) pt;
2422 return 0. ;
2423 }
2424 double basis9FuncDiffst3dP2(const Point& pt) {
2425 (void) pt;
2426 return 0. ;
2427 }
2428
2429 double basis9FuncDifftr3dP2(const Point&);
2430 double basis9FuncDiffts3dP2(const Point&);
2431 double basis9FuncDifftt3dP2(const Point&);
2432 double basis9FuncDifftr3dP2(const Point& pt) {
2433 (void) pt;
2434 return 4. ;
2435 }
2436 double basis9FuncDiffts3dP2(const Point& pt) {
2437 (void) pt;
2438 return 0. ;
2439 }
2440 double basis9FuncDifftt3dP2(const Point& pt) {
2441 (void) pt;
2442 return 0. ;
2443 }
2444
2445 double basis10FuncDiffrr3dP2(const Point&);
2446 double basis10FuncDiffrs3dP2(const Point&);
2447 double basis10FuncDiffrt3dP2(const Point&);
2448 double basis10FuncDiffrr3dP2(const Point& pt) {
2449 (void) pt;
2450 return 0. ;
2451 }
2452 double basis10FuncDiffrs3dP2(const Point& pt) {
2453 (void) pt;
2454 return 0. ;
2455 }
2456 double basis10FuncDiffrt3dP2(const Point& pt) {
2457 (void) pt;
2458 return 0. ;
2459 }
2460
2461 double basis10FuncDiffsr3dP2(const Point&);
2462 double basis10FuncDiffss3dP2(const Point&);
2463 double basis10FuncDiffst3dP2(const Point&);
2464 double basis10FuncDiffsr3dP2(const Point& pt) {
2465 (void) pt;
2466 return 0. ;
2467 }
2468 double basis10FuncDiffss3dP2(const Point& pt) {
2469 (void) pt;
2470 return 0. ;
2471 }
2472 double basis10FuncDiffst3dP2(const Point& pt) {
2473 (void) pt;
2474 return 4. ;
2475 }
2476
2477 double basis10FuncDifftr3dP2(const Point&);
2478 double basis10FuncDiffts3dP2(const Point&);
2479 double basis10FuncDifftt3dP2(const Point&);
2480 double basis10FuncDifftr3dP2(const Point& pt) {
2481 (void) pt;
2482 return 0. ;
2483 }
2484 double basis10FuncDiffts3dP2(const Point& pt) {
2485 (void) pt;
2486 return 4. ;
2487 }
2488 double basis10FuncDifftt3dP2(const Point& pt) {
2489 (void) pt;
2490 return 0. ;
2491 }
2492
2493 static const FunctionXYZ _Func3dP2[10] = {basis1Func3dP2, basis2Func3dP2, basis3Func3dP2, basis4Func3dP2,basis5Func3dP2, basis6Func3dP2, basis7Func3dP2, basis8Func3dP2, basis9Func3dP2, basis10Func3dP2
2494 };
2495
2496 static const FunctionXYZ _FuncDiff3dP2[30] = {
2497 basis1FuncDiffr3dP2, basis1FuncDiffs3dP2, basis1FuncDifft3dP2,
2498 basis2FuncDiffr3dP2, basis2FuncDiffs3dP2, basis2FuncDifft3dP2,
2499 basis3FuncDiffr3dP2, basis3FuncDiffs3dP2, basis3FuncDifft3dP2,
2500 basis4FuncDiffr3dP2, basis4FuncDiffs3dP2, basis4FuncDifft3dP2,
2501 basis5FuncDiffr3dP2, basis5FuncDiffs3dP2, basis5FuncDifft3dP2,
2502 basis6FuncDiffr3dP2, basis6FuncDiffs3dP2, basis6FuncDifft3dP2,
2503 basis7FuncDiffr3dP2, basis7FuncDiffs3dP2, basis7FuncDifft3dP2,
2504 basis8FuncDiffr3dP2, basis8FuncDiffs3dP2, basis8FuncDifft3dP2,
2505 basis9FuncDiffr3dP2, basis9FuncDiffs3dP2, basis9FuncDifft3dP2,
2506 basis10FuncDiffr3dP2, basis10FuncDiffs3dP2, basis10FuncDifft3dP2
2507 };
2508
2509 static const FunctionXYZ _FuncDiffHess3dP2[90] = {
2510 basis1FuncDiffrr3dP2, basis1FuncDiffrs3dP2, basis1FuncDiffrt3dP2, basis1FuncDiffsr3dP2, basis1FuncDiffss3dP2, basis1FuncDiffst3dP2, basis1FuncDifftr3dP2, basis1FuncDiffts3dP2, basis1FuncDifftt3dP2,
2511 basis2FuncDiffrr3dP2, basis2FuncDiffrs3dP2, basis2FuncDiffrt3dP2, basis2FuncDiffsr3dP2, basis2FuncDiffss3dP2, basis2FuncDiffst3dP2, basis2FuncDifftr3dP2, basis2FuncDiffts3dP2, basis2FuncDifftt3dP2,
2512 basis3FuncDiffrr3dP2, basis3FuncDiffrs3dP2, basis3FuncDiffrt3dP2, basis3FuncDiffsr3dP2, basis3FuncDiffss3dP2, basis3FuncDiffst3dP2, basis3FuncDifftr3dP2, basis3FuncDiffts3dP2, basis3FuncDifftt3dP2,
2513 basis4FuncDiffrr3dP2, basis4FuncDiffrs3dP2, basis4FuncDiffrt3dP2, basis4FuncDiffsr3dP2, basis4FuncDiffss3dP2, basis4FuncDiffst3dP2, basis4FuncDifftr3dP2, basis4FuncDiffts3dP2, basis4FuncDifftt3dP2,
2514 basis5FuncDiffrr3dP2, basis5FuncDiffrs3dP2, basis5FuncDiffrt3dP2, basis5FuncDiffsr3dP2, basis5FuncDiffss3dP2, basis5FuncDiffst3dP2, basis5FuncDifftr3dP2, basis5FuncDiffts3dP2, basis5FuncDifftt3dP2,
2515 basis6FuncDiffrr3dP2, basis6FuncDiffrs3dP2, basis6FuncDiffrt3dP2, basis6FuncDiffsr3dP2, basis6FuncDiffss3dP2, basis6FuncDiffst3dP2, basis6FuncDifftr3dP2, basis6FuncDiffts3dP2, basis6FuncDifftt3dP2,
2516 basis7FuncDiffrr3dP2, basis7FuncDiffrs3dP2, basis7FuncDiffrt3dP2, basis7FuncDiffsr3dP2, basis7FuncDiffss3dP2, basis7FuncDiffst3dP2, basis7FuncDifftr3dP2, basis7FuncDiffts3dP2, basis7FuncDifftt3dP2,
2517 basis8FuncDiffrr3dP2, basis8FuncDiffrs3dP2, basis8FuncDiffrt3dP2, basis8FuncDiffsr3dP2, basis8FuncDiffss3dP2, basis8FuncDiffst3dP2, basis8FuncDifftr3dP2, basis8FuncDiffts3dP2, basis8FuncDifftt3dP2,
2518 basis9FuncDiffrr3dP2, basis9FuncDiffrs3dP2, basis9FuncDiffrt3dP2, basis9FuncDiffsr3dP2, basis9FuncDiffss3dP2, basis9FuncDiffst3dP2, basis9FuncDifftr3dP2, basis9FuncDiffts3dP2, basis9FuncDifftt3dP2,
2519 basis10FuncDiffrr3dP2, basis10FuncDiffrs3dP2, basis10FuncDiffrt3dP2, basis10FuncDiffsr3dP2, basis10FuncDiffss3dP2, basis10FuncDiffst3dP2, basis10FuncDifftr3dP2, basis10FuncDiffts3dP2, basis10FuncDifftt3dP2,
2520 };
2521
2522 const BasisFunction basisFunction3dP2("basisFunction3dP2",10,3,_Func3dP2,_FuncDiff3dP2,_FuncDiffHess3dP2);
2523
2524
2525
2526 /************************************************************************
2527 * basisFunction3dQ1
2528 *************************************************************************/
2529 double basis1Func3dQ1(const Point&);
2530 double basis2Func3dQ1(const Point&);
2531 double basis3Func3dQ1(const Point&);
2532 double basis4Func3dQ1(const Point&);
2533 double basis5Func3dQ1(const Point&);
2534 double basis6Func3dQ1(const Point&);
2535 double basis7Func3dQ1(const Point&);
2536 double basis8Func3dQ1(const Point&);
2537 775 double basis1Func3dQ1(const Point& pt) {
2538 (void) pt;
2539 775 return 0.125*( 1. - pt.x() )*( 1. - pt.y() )*( 1. - pt.z() ) ;
2540 }
2541 775 double basis2Func3dQ1(const Point& pt) {
2542 (void) pt;
2543 775 return 0.125*( 1. + pt.x() )*( 1. - pt.y() )*( 1. - pt.z() ) ;
2544 }
2545 775 double basis3Func3dQ1(const Point& pt) {
2546 775 return 0.125*( 1. + pt.x() )*( 1. + pt.y() )*( 1. - pt.z() ) ;
2547 }
2548 775 double basis4Func3dQ1(const Point& pt) {
2549 775 return 0.125*( 1. - pt.x() )*( 1. + pt.y() )*( 1. - pt.z() ) ;
2550 }
2551 775 double basis5Func3dQ1(const Point& pt) {
2552 775 return 0.125*( 1. - pt.x() )*( 1. - pt.y() )*( 1. + pt.z() ) ;
2553 }
2554 775 double basis6Func3dQ1(const Point& pt) {
2555 775 return 0.125*( 1. + pt.x() )*( 1. - pt.y() )*( 1. + pt.z() ) ;
2556 }
2557 775 double basis7Func3dQ1(const Point& pt) {
2558 775 return 0.125*( 1. + pt.x() )*( 1. + pt.y() )*( 1. + pt.z() ) ;
2559 }
2560 775 double basis8Func3dQ1(const Point& pt) {
2561 775 return 0.125*( 1. - pt.x() )*( 1. + pt.y() )*( 1. + pt.z() ) ;
2562 }
2563 // First derivatives
2564 double basis1FuncDiffr3dQ1(const Point&);
2565 double basis1FuncDiffs3dQ1(const Point&);
2566 double basis1FuncDifft3dQ1(const Point&);
2567 775 double basis1FuncDiffr3dQ1(const Point& pt) {
2568 775 return -0.125*( 1. - pt.y() )*( 1. - pt.z() ) ;
2569 }
2570 775 double basis1FuncDiffs3dQ1(const Point& pt) {
2571 775 return -0.125*( 1. - pt.x() )*( 1. - pt.z() ) ;
2572 }
2573 775 double basis1FuncDifft3dQ1(const Point& pt) {
2574 775 return -0.125*( 1. - pt.x() )*( 1. - pt.y() ) ;
2575 }
2576
2577 double basis2FuncDiffr3dQ1(const Point&);
2578 double basis2FuncDiffs3dQ1(const Point&);
2579 double basis2FuncDifft3dQ1(const Point&);
2580 775 double basis2FuncDiffr3dQ1(const Point& pt) {
2581 775 return 0.125*( 1. - pt.y() )*( 1. - pt.z() ) ;
2582 }
2583 775 double basis2FuncDiffs3dQ1(const Point& pt) {
2584 775 return -0.125*( 1. + pt.x() )*( 1. - pt.z() ) ;
2585 }
2586 775 double basis2FuncDifft3dQ1(const Point& pt) {
2587 775 return -0.125*( 1. + pt.x() )*( 1. - pt.y() ) ;
2588 }
2589
2590 double basis3FuncDiffr3dQ1(const Point&);
2591 double basis3FuncDiffs3dQ1(const Point&);
2592 double basis3FuncDifft3dQ1(const Point&);
2593 775 double basis3FuncDiffr3dQ1(const Point& pt) {
2594 775 return 0.125*( 1. + pt.y() )*(1. - pt.z() ) ;
2595 }
2596 775 double basis3FuncDiffs3dQ1(const Point& pt) {
2597 775 return 0.125*( 1. + pt.x() )*(1. - pt.z() ) ;
2598 }
2599 775 double basis3FuncDifft3dQ1(const Point& pt) {
2600 775 return -0.125*( 1. + pt.x() )*(1. + pt.y() ) ;
2601 }
2602
2603 double basis4FuncDiffr3dQ1(const Point&);
2604 double basis4FuncDiffs3dQ1(const Point&);
2605 double basis4FuncDifft3dQ1(const Point&);
2606 775 double basis4FuncDiffr3dQ1(const Point& pt) {
2607 775 return -0.125*( 1. + pt.y() )*( 1. - pt.z() ) ;
2608 }
2609 775 double basis4FuncDiffs3dQ1(const Point& pt) {
2610 775 return 0.125*( 1. - pt.x() )*( 1. - pt.z() ) ;
2611 }
2612 775 double basis4FuncDifft3dQ1(const Point& pt) {
2613 775 return -0.125*( 1. - pt.x() )*( 1. + pt.y() ) ;
2614 }
2615
2616 double basis5FuncDiffr3dQ1(const Point&);
2617 double basis5FuncDiffs3dQ1(const Point&);
2618 double basis5FuncDifft3dQ1(const Point&);
2619 775 double basis5FuncDiffr3dQ1(const Point& pt) {
2620 775 return -0.125*( 1. - pt.y() )*( 1. + pt.z() ) ;
2621 }
2622 775 double basis5FuncDiffs3dQ1(const Point& pt) {
2623 775 return -0.125*( 1. - pt.x() )*( 1. + pt.z() ) ;
2624 }
2625 775 double basis5FuncDifft3dQ1(const Point& pt) {
2626 775 return 0.125*( 1. - pt.x() )*( 1. - pt.y() ) ;
2627 }
2628
2629 double basis6FuncDiffr3dQ1(const Point&);
2630 double basis6FuncDiffs3dQ1(const Point&);
2631 double basis6FuncDifft3dQ1(const Point&);
2632 775 double basis6FuncDiffr3dQ1(const Point& pt) {
2633 775 return 0.125*( 1. - pt.y() )*( 1. + pt.z() ) ;
2634 }
2635 775 double basis6FuncDiffs3dQ1(const Point& pt) {
2636 775 return -0.125*( 1. + pt.x() )*( 1. + pt.z() ) ;
2637 }
2638 775 double basis6FuncDifft3dQ1(const Point& pt) {
2639 775 return 0.125*( 1. + pt.x() )*( 1. - pt.y() ) ;
2640 }
2641
2642 double basis7FuncDiffr3dQ1(const Point&);
2643 double basis7FuncDiffs3dQ1(const Point&);
2644 double basis7FuncDifft3dQ1(const Point&);
2645 775 double basis7FuncDiffr3dQ1(const Point& pt) {
2646 775 return 0.125*( 1. + pt.y() )*(1. + pt.z() ) ;
2647 }
2648 775 double basis7FuncDiffs3dQ1(const Point& pt) {
2649 775 return 0.125*( 1. + pt.x() )*(1. + pt.z() ) ;
2650 }
2651 775 double basis7FuncDifft3dQ1(const Point& pt) {
2652 775 return 0.125*( 1. + pt.x() )*(1. + pt.y() ) ;
2653 }
2654
2655 double basis8FuncDiffr3dQ1(const Point&);
2656 double basis8FuncDiffs3dQ1(const Point&);
2657 double basis8FuncDifft3dQ1(const Point&);
2658 775 double basis8FuncDiffr3dQ1(const Point& pt) {
2659 775 return -0.125*( 1. + pt.y() )*(1. + pt.z() ) ;
2660 }
2661 775 double basis8FuncDiffs3dQ1(const Point& pt) {
2662 775 return 0.125*( 1. - pt.x() )*(1. + pt.z() ) ;
2663 }
2664 775 double basis8FuncDifft3dQ1(const Point& pt) {
2665 775 return 0.125*( 1. - pt.x() )*(1. + pt.y() );
2666 }
2667
2668 // Second derivatives
2669 double basis1FuncDiffrr3dQ1(const Point&);
2670 double basis1FuncDiffrs3dQ1(const Point&);
2671 double basis1FuncDiffrt3dQ1(const Point&);
2672 double basis1FuncDiffrr3dQ1(const Point& pt) {
2673 (void) pt;
2674 return 0. ;
2675 }
2676 double basis1FuncDiffrs3dQ1(const Point& pt) {
2677 return 0.125*( 1. - pt.z() ) ;
2678 }
2679 double basis1FuncDiffrt3dQ1(const Point& pt) {
2680 return 0.125*( 1. - pt.y() ) ;
2681 }
2682
2683 double basis1FuncDiffsr3dQ1(const Point&);
2684 double basis1FuncDiffss3dQ1(const Point&);
2685 double basis1FuncDiffst3dQ1(const Point&);
2686 double basis1FuncDiffsr3dQ1(const Point& pt) {
2687 return 0.125*( 1. - pt.z() ) ;
2688 }
2689 double basis1FuncDiffss3dQ1(const Point& pt) {
2690 (void) pt;
2691 return 0. ;
2692 }
2693 double basis1FuncDiffst3dQ1(const Point& pt) {
2694 return 0.125*( 1. - pt.x() ) ;
2695 }
2696
2697 double basis1FuncDifftr3dQ1(const Point&);
2698 double basis1FuncDiffts3dQ1(const Point&);
2699 double basis1FuncDifftt3dQ1(const Point&);
2700 double basis1FuncDifftr3dQ1(const Point& pt) {
2701 return 0.125*( 1. - pt.y() ) ;
2702 }
2703 double basis1FuncDiffts3dQ1(const Point& pt) {
2704 return 0.125*( 1. - pt.x() ) ;
2705 }
2706 double basis1FuncDifftt3dQ1(const Point& pt) {
2707 (void) pt;
2708 return 0. ;
2709 }
2710
2711 double basis2FuncDiffrr3dQ1(const Point&);
2712 double basis2FuncDiffrs3dQ1(const Point&);
2713 double basis2FuncDiffrt3dQ1(const Point&);
2714 double basis2FuncDiffrr3dQ1(const Point& pt) {
2715 (void) pt;
2716 return 0. ;
2717 }
2718 double basis2FuncDiffrs3dQ1(const Point& pt) {
2719 return -0.125*( 1. - pt.z() ) ;
2720 }
2721 double basis2FuncDiffrt3dQ1(const Point& pt) {
2722 return -0.125*( 1. - pt.y() ) ;
2723 }
2724
2725 double basis2FuncDiffsr3dQ1(const Point&);
2726 double basis2FuncDiffss3dQ1(const Point&);
2727 double basis2FuncDiffst3dQ1(const Point&);
2728 double basis2FuncDiffsr3dQ1(const Point& pt) {
2729 return -0.125*( 1. - pt.z() ) ;
2730 }
2731 double basis2FuncDiffss3dQ1(const Point& pt) {
2732 (void) pt;
2733 return 0. ;
2734 }
2735 double basis2FuncDiffst3dQ1(const Point& pt) {
2736 return -0.125*( 1. + pt.x() ) ;
2737 }
2738
2739 double basis2FuncDifftr3dQ1(const Point&);
2740 double basis2FuncDiffts3dQ1(const Point&);
2741 double basis2FuncDifftt3dQ1(const Point&);
2742 double basis2FuncDifftr3dQ1(const Point& pt) {
2743 return -0.125*( 1. - pt.y() );
2744 }
2745 double basis2FuncDiffts3dQ1(const Point& pt) {
2746 return 0.125*( 1. + pt.x() );
2747 }
2748 double basis2FuncDifftt3dQ1(const Point& pt) {
2749 (void) pt;
2750 return 0. ;
2751 }
2752
2753 double basis3FuncDiffrr3dQ1(const Point&);
2754 double basis3FuncDiffrs3dQ1(const Point&);
2755 double basis3FuncDiffrt3dQ1(const Point&);
2756 double basis3FuncDiffrr3dQ1(const Point& pt) {
2757 (void) pt;
2758 return 0. ;
2759 }
2760 double basis3FuncDiffrs3dQ1(const Point& pt) {
2761 return 0.125*( 1. - pt.z() ) ;
2762 }
2763 double basis3FuncDiffrt3dQ1(const Point& pt) {
2764 return -0.125*( 1. + pt.y() ) ;
2765 }
2766
2767 double basis3FuncDiffsr3dQ1(const Point&);
2768 double basis3FuncDiffss3dQ1(const Point&);
2769 double basis3FuncDiffst3dQ1(const Point&);
2770 double basis3FuncDiffsr3dQ1(const Point& pt) {
2771 return 0.125*( 1. - pt.z() ) ;
2772 }
2773 double basis3FuncDiffss3dQ1(const Point& pt) {
2774 (void) pt;
2775 return 0. ;
2776 }
2777 double basis3FuncDiffst3dQ1(const Point& pt) {
2778 return -0.125*( 1. + pt.x() ) ;
2779 }
2780
2781 double basis3FuncDifftr3dQ1(const Point&);
2782 double basis3FuncDiffts3dQ1(const Point&);
2783 double basis3FuncDifftt3dQ1(const Point&);
2784 double basis3FuncDifftr3dQ1(const Point& pt) {
2785 return -0.125*( 1. + pt.y() ) ;
2786 }
2787 double basis3FuncDiffts3dQ1(const Point& pt) {
2788 return -0.125*( 1. + pt.x() ) ;
2789 }
2790 double basis3FuncDifftt3dQ1(const Point& pt) {
2791 (void) pt;
2792 return 0. ;
2793 }
2794
2795 double basis4FuncDiffrr3dQ1(const Point&);
2796 double basis4FuncDiffrs3dQ1(const Point&);
2797 double basis4FuncDiffrt3dQ1(const Point&);
2798 double basis4FuncDiffrr3dQ1(const Point& pt) {
2799 (void) pt;
2800 return 0. ;
2801 }
2802 double basis4FuncDiffrs3dQ1(const Point& pt) {
2803 return -0.125*( 1. - pt.z() );
2804 }
2805 double basis4FuncDiffrt3dQ1(const Point& pt) {
2806 return 0.125*( 1. + pt.y() );
2807 }
2808
2809 double basis4FuncDiffsr3dQ1(const Point&);
2810 double basis4FuncDiffss3dQ1(const Point&);
2811 double basis4FuncDiffst3dQ1(const Point&);
2812 double basis4FuncDiffsr3dQ1(const Point& pt) {
2813 return -0.125*( 1. -pt.z() ) ;
2814 }
2815 double basis4FuncDiffss3dQ1(const Point& pt) {
2816 (void) pt;
2817 return 0. ;
2818 }
2819 double basis4FuncDiffst3dQ1(const Point& pt) {
2820 return -0.125*(1. - pt.x() ) ;
2821 }
2822
2823 double basis4FuncDifftr3dQ1(const Point&);
2824 double basis4FuncDiffts3dQ1(const Point&);
2825 double basis4FuncDifftt3dQ1(const Point&);
2826 double basis4FuncDifftr3dQ1(const Point& pt) {
2827 return 0.125*( 1. + pt.y() ) ;
2828 }
2829 double basis4FuncDiffts3dQ1(const Point& pt) {
2830 return -0.125*( 1. - pt.x() ) ;
2831 }
2832 double basis4FuncDifftt3dQ1(const Point& pt) {
2833 (void) pt;
2834 return 0. ;
2835 }
2836
2837 double basis5FuncDiffrr3dQ1(const Point&);
2838 double basis5FuncDiffrs3dQ1(const Point&);
2839 double basis5FuncDiffrt3dQ1(const Point&);
2840 double basis5FuncDiffrr3dQ1(const Point& pt) {
2841 (void) pt;
2842 return 0. ;
2843 }
2844 double basis5FuncDiffrs3dQ1(const Point& pt) {
2845 return 0.125*( 1. + pt.z() ) ;
2846 }
2847 double basis5FuncDiffrt3dQ1(const Point& pt) {
2848 return -0.125*( 1. -pt.y() ) ;
2849 }
2850
2851 double basis5FuncDiffsr3dQ1(const Point&);
2852 double basis5FuncDiffss3dQ1(const Point&);
2853 double basis5FuncDiffst3dQ1(const Point&);
2854 double basis5FuncDiffsr3dQ1(const Point& pt) {
2855 return 0.125*( 1. + pt.z() );
2856 }
2857 double basis5FuncDiffss3dQ1(const Point& pt) {
2858 (void) pt;
2859 return 0. ;
2860 }
2861 double basis5FuncDiffst3dQ1(const Point& pt) {
2862 return -0.125*( 1. - pt.x() ) ;
2863 }
2864
2865 double basis5FuncDifftr3dQ1(const Point&);
2866 double basis5FuncDiffts3dQ1(const Point&);
2867 double basis5FuncDifftt3dQ1(const Point&);
2868 double basis5FuncDifftr3dQ1(const Point& pt) {
2869 return -0.125*( 1. - pt.y() ) ;
2870 }
2871 double basis5FuncDiffts3dQ1(const Point& pt) {
2872 return -0.125*( 1. - pt.x() ) ;
2873 }
2874 double basis5FuncDifftt3dQ1(const Point& pt) {
2875 (void) pt;
2876 return 0. ;
2877 }
2878
2879 double basis6FuncDiffrr3dQ1(const Point&);
2880 double basis6FuncDiffrs3dQ1(const Point&);
2881 double basis6FuncDiffrt3dQ1(const Point&);
2882 double basis6FuncDiffrr3dQ1(const Point& pt) {
2883 (void) pt;
2884 return 0. ;
2885 }
2886 double basis6FuncDiffrs3dQ1(const Point& pt) {
2887 return -0.125*( 1. + pt.z() ) ;
2888 }
2889 double basis6FuncDiffrt3dQ1(const Point& pt) {
2890 return 0.125*( 1. - pt.y() ) ;
2891 }
2892
2893 double basis6FuncDiffsr3dQ1(const Point&);
2894 double basis6FuncDiffss3dQ1(const Point&);
2895 double basis6FuncDiffst3dQ1(const Point&);
2896 double basis6FuncDiffsr3dQ1(const Point& pt) {
2897 return -0.125*( 1. + pt.z() ) ;
2898 }
2899 double basis6FuncDiffss3dQ1(const Point& pt) {
2900 (void) pt;
2901 return 0. ;
2902 }
2903 double basis6FuncDiffst3dQ1(const Point& pt) {
2904 return -0.125*( 1. + pt.x() );
2905 }
2906
2907 double basis6FuncDifftr3dQ1(const Point&);
2908 double basis6FuncDiffts3dQ1(const Point&);
2909 double basis6FuncDifftt3dQ1(const Point&);
2910 double basis6FuncDifftr3dQ1(const Point& pt) {
2911 return 0.125*( 1. - pt.y() );
2912 }
2913 double basis6FuncDiffts3dQ1(const Point& pt) {
2914 return -0.125*( 1. + pt.x() ) ;
2915 }
2916 double basis6FuncDifftt3dQ1(const Point& pt) {
2917 (void) pt;
2918 return 0. ;
2919 }
2920
2921 double basis7FuncDiffrr3dQ1(const Point&);
2922 double basis7FuncDiffrs3dQ1(const Point&);
2923 double basis7FuncDiffrt3dQ1(const Point&);
2924 double basis7FuncDiffrr3dQ1(const Point& pt) {
2925 (void) pt;
2926 return 0. ;
2927 }
2928 double basis7FuncDiffrs3dQ1(const Point& pt) {
2929 return 0.125*( 1. + pt.z() );
2930 }
2931 double basis7FuncDiffrt3dQ1(const Point& pt) {
2932 return 0.125*( 1. + pt.z() );
2933 }
2934
2935 double basis7FuncDiffsr3dQ1(const Point&);
2936 double basis7FuncDiffss3dQ1(const Point&);
2937 double basis7FuncDiffst3dQ1(const Point&);
2938 double basis7FuncDiffsr3dQ1(const Point& pt) {
2939 return 0.125*( 1. + pt.z() ) ;
2940 }
2941 double basis7FuncDiffss3dQ1(const Point& pt) {
2942 (void) pt;
2943 return 0. ;
2944 }
2945 double basis7FuncDiffst3dQ1(const Point& pt) {
2946 return 0.125*( 1. + pt.x() ) ;
2947 }
2948
2949 double basis7FuncDifftr3dQ1(const Point&);
2950 double basis7FuncDiffts3dQ1(const Point&);
2951 double basis7FuncDifftt3dQ1(const Point&);
2952 double basis7FuncDifftr3dQ1(const Point& pt) {
2953 return 0.125*( 1. + pt.y() );
2954 }
2955 double basis7FuncDiffts3dQ1(const Point& pt) {
2956 return 0.125*( 1. + pt.x() );
2957 }
2958 double basis7FuncDifftt3dQ1(const Point& pt) {
2959 (void) pt;
2960 return 0. ;
2961 }
2962
2963 double basis8FuncDiffrr3dQ1(const Point&);
2964 double basis8FuncDiffrs3dQ1(const Point&);
2965 double basis8FuncDiffrt3dQ1(const Point&);
2966 double basis8FuncDiffrr3dQ1(const Point& pt) {
2967 (void) pt;
2968 return 0. ;
2969 }
2970 double basis8FuncDiffrs3dQ1(const Point& pt) {
2971 return -0.125*( 1. + pt.z() );
2972 }
2973 double basis8FuncDiffrt3dQ1(const Point& pt) {
2974 return -0.125*( 1. + pt.y() );
2975 }
2976
2977 double basis8FuncDiffsr3dQ1(const Point&);
2978 double basis8FuncDiffss3dQ1(const Point&);
2979 double basis8FuncDiffst3dQ1(const Point&);
2980 double basis8FuncDiffsr3dQ1(const Point& pt) {
2981 return -0.125*( 1. + pt.z() ) ;
2982 }
2983 double basis8FuncDiffss3dQ1(const Point& pt) {
2984 (void) pt;
2985 return 0. ;
2986 }
2987 double basis8FuncDiffst3dQ1(const Point& pt) {
2988 return 0.125*( 1. - pt.x() ) ;
2989 }
2990
2991 double basis8FuncDifftr3dQ1(const Point&);
2992 double basis8FuncDiffts3dQ1(const Point&);
2993 double basis8FuncDifftt3dQ1(const Point&);
2994 double basis8FuncDifftr3dQ1(const Point& pt) {
2995 return -0.125*( 1. + pt.y() );
2996 }
2997 double basis8FuncDiffts3dQ1(const Point& pt) {
2998 return 0.125*( 1. - pt.x() );
2999 }
3000 double basis8FuncDifftt3dQ1(const Point& pt) {
3001 (void) pt;
3002 return 0. ;
3003 }
3004
3005 static const FunctionXYZ _Func3dQ1[8] = {basis1Func3dQ1, basis2Func3dQ1, basis3Func3dQ1, basis4Func3dQ1,
3006 basis5Func3dQ1, basis6Func3dQ1, basis7Func3dQ1, basis8Func3dQ1
3007 };
3008
3009 static const FunctionXYZ _FuncDiff3dQ1[24] = {
3010 basis1FuncDiffr3dQ1, basis1FuncDiffs3dQ1, basis1FuncDifft3dQ1,
3011 basis2FuncDiffr3dQ1, basis2FuncDiffs3dQ1, basis2FuncDifft3dQ1,
3012 basis3FuncDiffr3dQ1, basis3FuncDiffs3dQ1, basis3FuncDifft3dQ1,
3013 basis4FuncDiffr3dQ1, basis4FuncDiffs3dQ1, basis4FuncDifft3dQ1,
3014 basis5FuncDiffr3dQ1, basis5FuncDiffs3dQ1, basis5FuncDifft3dQ1,
3015 basis6FuncDiffr3dQ1, basis6FuncDiffs3dQ1, basis6FuncDifft3dQ1,
3016 basis7FuncDiffr3dQ1, basis7FuncDiffs3dQ1, basis7FuncDifft3dQ1,
3017 basis8FuncDiffr3dQ1, basis8FuncDiffs3dQ1, basis8FuncDifft3dQ1
3018 };
3019
3020 static const FunctionXYZ _FuncDiffHess3dQ1[72] = {
3021 basis1FuncDiffrr3dQ1, basis1FuncDiffrs3dQ1, basis1FuncDiffrt3dQ1, basis1FuncDiffsr3dQ1, basis1FuncDiffss3dQ1, basis1FuncDiffst3dQ1, basis1FuncDifftr3dQ1, basis1FuncDiffts3dQ1, basis1FuncDifftt3dQ1,
3022 basis2FuncDiffrr3dQ1, basis2FuncDiffrs3dQ1, basis2FuncDiffrt3dQ1, basis2FuncDiffsr3dQ1, basis2FuncDiffss3dQ1, basis2FuncDiffst3dQ1, basis2FuncDifftr3dQ1, basis2FuncDiffts3dQ1, basis2FuncDifftt3dQ1,
3023 basis3FuncDiffrr3dQ1, basis3FuncDiffrs3dQ1, basis3FuncDiffrt3dQ1, basis3FuncDiffsr3dQ1, basis3FuncDiffss3dQ1, basis3FuncDiffst3dQ1, basis3FuncDifftr3dQ1, basis3FuncDiffts3dQ1, basis3FuncDifftt3dQ1,
3024 basis4FuncDiffrr3dQ1, basis4FuncDiffrs3dQ1, basis4FuncDiffrt3dQ1, basis4FuncDiffsr3dQ1, basis4FuncDiffss3dQ1, basis4FuncDiffst3dQ1, basis4FuncDifftr3dQ1, basis4FuncDiffts3dQ1, basis4FuncDifftt3dQ1,
3025 basis5FuncDiffrr3dQ1, basis5FuncDiffrs3dQ1, basis5FuncDiffrt3dQ1, basis5FuncDiffsr3dQ1, basis5FuncDiffss3dQ1, basis5FuncDiffst3dQ1, basis5FuncDifftr3dQ1, basis5FuncDiffts3dQ1, basis5FuncDifftt3dQ1,
3026 basis6FuncDiffrr3dQ1, basis6FuncDiffrs3dQ1, basis6FuncDiffrt3dQ1, basis6FuncDiffsr3dQ1, basis6FuncDiffss3dQ1, basis6FuncDiffst3dQ1, basis6FuncDifftr3dQ1, basis6FuncDiffts3dQ1, basis6FuncDifftt3dQ1,
3027 basis7FuncDiffrr3dQ1, basis7FuncDiffrs3dQ1, basis7FuncDiffrt3dQ1, basis7FuncDiffsr3dQ1, basis7FuncDiffss3dQ1, basis7FuncDiffst3dQ1, basis7FuncDifftr3dQ1, basis7FuncDiffts3dQ1, basis7FuncDifftt3dQ1,
3028 basis8FuncDiffrr3dQ1, basis8FuncDiffrs3dQ1, basis8FuncDiffrt3dQ1, basis8FuncDiffsr3dQ1, basis8FuncDiffss3dQ1, basis8FuncDiffst3dQ1, basis8FuncDifftr3dQ1, basis8FuncDiffts3dQ1, basis8FuncDifftt3dQ1
3029 };
3030
3031 const BasisFunction basisFunction3dQ1("basisFunction3dQ1",8,3,_Func3dQ1,_FuncDiff3dQ1,_FuncDiffHess3dQ1);
3032
3033
3034
3035 /************************************************************************
3036 * basisFunction3dQ1b = Q1 + bubble
3037 *************************************************************************/
3038 double basis9Func3dQ1b(const Point&);
3039 double basis9Func3dQ1b(const Point& pt) {
3040 return (1. - pt.x()*pt.x())*(1. - pt.y()*pt.y())*(1. - pt.z()*pt.z()) ;
3041 }
3042
3043 // First derivatives
3044 double basis9FuncDiffr3dQ1b(const Point&);
3045 double basis9FuncDiffs3dQ1b(const Point&);
3046 double basis9FuncDifft3dQ1b(const Point&);
3047 double basis9FuncDiffr3dQ1b(const Point& pt) {
3048 return -2.*pt.x()*(1. - pt.y()*pt.y())*(1. - pt.z()*pt.z());
3049 }
3050 double basis9FuncDiffs3dQ1b(const Point& pt) {
3051 return -2.*pt.y()*(1. - pt.x()*pt.x())*(1. - pt.z()*pt.z());
3052 }
3053 double basis9FuncDifft3dQ1b(const Point& pt) {
3054 return -2.*pt.z()*(1. - pt.x()*pt.x())*(1. - pt.y()*pt.y());
3055 }
3056
3057 // Second derivatives
3058 double basis9FuncDiffrr3dQ1b(const Point&);
3059 double basis9FuncDiffrs3dQ1b(const Point&);
3060 double basis9FuncDiffrt3dQ1b(const Point&);
3061 double basis9FuncDiffrr3dQ1b(const Point& pt) {
3062 return -2.*(1. - pt.y()*pt.y())*(1. - pt.z()*pt.z());
3063 }
3064 double basis9FuncDiffrs3dQ1b(const Point& pt) {
3065 return 4.*pt.x()*pt.y()*(1.-pt.z());
3066 }
3067 double basis9FuncDiffrt3dQ1b(const Point& pt) {
3068 return 4.*pt.x()*pt.z()*(1.-pt.y());
3069 }
3070
3071 double basis9FuncDiffsr3dQ1b(const Point&);
3072 double basis9FuncDiffss3dQ1b(const Point&);
3073 double basis9FuncDiffst3dQ1b(const Point&);
3074 double basis9FuncDiffsr3dQ1b(const Point& pt) {
3075 return 4.*pt.x()*pt.y()*(1.-pt.z());
3076 }
3077 double basis9FuncDiffss3dQ1b(const Point& pt) {
3078 return -2.*(1. - pt.x()*pt.x())*(1. - pt.z()*pt.z());
3079 }
3080 double basis9FuncDiffst3dQ1b(const Point& pt) {
3081 return 4.*pt.y()*pt.z()*(1.-pt.x());
3082 }
3083
3084 double basis9FuncDifftr3dQ1b(const Point&);
3085 double basis9FuncDiffts3dQ1b(const Point&);
3086 double basis9FuncDifftt3dQ1b(const Point&);
3087 double basis9FuncDifftr3dQ1b(const Point& pt) {
3088 return 4.*pt.x()*pt.z()*(1.-pt.y());
3089 }
3090 double basis9FuncDiffts3dQ1b(const Point& pt) {
3091 return 4.*pt.y()*pt.z()*(1.-pt.x());
3092 }
3093 double basis9FuncDifftt3dQ1b(const Point& pt) {
3094 return -2.*(1. - pt.x()*pt.x())*(1. - pt.y()*pt.y());
3095 }
3096
3097 static const FunctionXYZ _Func3dQ1b[9] = {basis1Func3dQ1, basis2Func3dQ1, basis3Func3dQ1, basis4Func3dQ1,
3098 basis5Func3dQ1, basis6Func3dQ1, basis7Func3dQ1, basis8Func3dQ1,
3099 basis9Func3dQ1b
3100 };
3101
3102 static const FunctionXYZ _FuncDiff3dQ1b[27] = {
3103 basis1FuncDiffr3dQ1, basis1FuncDiffs3dQ1, basis1FuncDifft3dQ1,
3104 basis2FuncDiffr3dQ1, basis2FuncDiffs3dQ1, basis2FuncDifft3dQ1,
3105 basis3FuncDiffr3dQ1, basis3FuncDiffs3dQ1, basis3FuncDifft3dQ1,
3106 basis4FuncDiffr3dQ1, basis4FuncDiffs3dQ1, basis4FuncDifft3dQ1,
3107 basis5FuncDiffr3dQ1, basis5FuncDiffs3dQ1, basis5FuncDifft3dQ1,
3108 basis6FuncDiffr3dQ1, basis6FuncDiffs3dQ1, basis6FuncDifft3dQ1,
3109 basis7FuncDiffr3dQ1, basis7FuncDiffs3dQ1, basis7FuncDifft3dQ1,
3110 basis8FuncDiffr3dQ1, basis8FuncDiffs3dQ1, basis8FuncDifft3dQ1,
3111 basis9FuncDiffr3dQ1b, basis9FuncDiffs3dQ1b, basis9FuncDifft3dQ1b
3112 };
3113
3114 static const FunctionXYZ _FuncDiffHess3dQ1b[81] = {
3115 basis1FuncDiffrr3dQ1, basis1FuncDiffrs3dQ1, basis1FuncDiffrt3dQ1, basis1FuncDiffsr3dQ1, basis1FuncDiffss3dQ1, basis1FuncDiffst3dQ1, basis1FuncDifftr3dQ1, basis1FuncDiffts3dQ1, basis1FuncDifftt3dQ1,
3116 basis2FuncDiffrr3dQ1, basis2FuncDiffrs3dQ1, basis2FuncDiffrt3dQ1, basis2FuncDiffsr3dQ1, basis2FuncDiffss3dQ1, basis2FuncDiffst3dQ1, basis2FuncDifftr3dQ1, basis2FuncDiffts3dQ1, basis2FuncDifftt3dQ1,
3117 basis3FuncDiffrr3dQ1, basis3FuncDiffrs3dQ1, basis3FuncDiffrt3dQ1, basis3FuncDiffsr3dQ1, basis3FuncDiffss3dQ1, basis3FuncDiffst3dQ1, basis3FuncDifftr3dQ1, basis3FuncDiffts3dQ1, basis3FuncDifftt3dQ1,
3118 basis4FuncDiffrr3dQ1, basis4FuncDiffrs3dQ1, basis4FuncDiffrt3dQ1, basis4FuncDiffsr3dQ1, basis4FuncDiffss3dQ1, basis4FuncDiffst3dQ1, basis4FuncDifftr3dQ1, basis4FuncDiffts3dQ1, basis4FuncDifftt3dQ1,
3119 basis5FuncDiffrr3dQ1, basis5FuncDiffrs3dQ1, basis5FuncDiffrt3dQ1, basis5FuncDiffsr3dQ1, basis5FuncDiffss3dQ1, basis5FuncDiffst3dQ1, basis5FuncDifftr3dQ1, basis5FuncDiffts3dQ1, basis5FuncDifftt3dQ1,
3120 basis6FuncDiffrr3dQ1, basis6FuncDiffrs3dQ1, basis6FuncDiffrt3dQ1, basis6FuncDiffsr3dQ1, basis6FuncDiffss3dQ1, basis6FuncDiffst3dQ1, basis6FuncDifftr3dQ1, basis6FuncDiffts3dQ1, basis6FuncDifftt3dQ1,
3121 basis7FuncDiffrr3dQ1, basis7FuncDiffrs3dQ1, basis7FuncDiffrt3dQ1, basis7FuncDiffsr3dQ1, basis7FuncDiffss3dQ1, basis7FuncDiffst3dQ1, basis7FuncDifftr3dQ1, basis7FuncDiffts3dQ1, basis7FuncDifftt3dQ1,
3122 basis8FuncDiffrr3dQ1, basis8FuncDiffrs3dQ1, basis8FuncDiffrt3dQ1, basis8FuncDiffsr3dQ1, basis8FuncDiffss3dQ1, basis8FuncDiffst3dQ1, basis8FuncDifftr3dQ1, basis8FuncDiffts3dQ1, basis8FuncDifftt3dQ1,
3123 basis9FuncDiffrr3dQ1b, basis9FuncDiffrs3dQ1b, basis9FuncDiffrt3dQ1b, basis9FuncDiffsr3dQ1b, basis9FuncDiffss3dQ1b, basis9FuncDiffst3dQ1b, basis9FuncDifftr3dQ1b, basis9FuncDiffts3dQ1b, basis9FuncDifftt3dQ1b
3124 };
3125
3126 const BasisFunction basisFunction3dQ1b("basisFunction3dQ1b",9,3,_Func3dQ1b,_FuncDiff3dQ1b,_FuncDiffHess3dQ1b);
3127
3128
3129
3130 /************************************************************************
3131 * basisFunction3dQ2
3132 *************************************************************************/
3133
3134 static const double refcoor_Q2_3D[] = {-1.,-1.,-1., 1.,-1.,-1., 1.,1.,-1., -1.,1.,-1., -1.,-1.,1., 1.,-1.,1., 1.,1.,1., -1.,1.,1., 0.,-1.,-1., 1.,0.,-1.,
3135 0.,1.,-1., -1.,0.,-1., -1.,-1.,0., 1.,-1.,0., 1.,1.,0., -1.,1.,0., 0.,-1.,1., 1.,0.,1., 0.,1.,1., -1.,0.,1.
3136 };
3137
3138 template <int i>
3139 double basisFunc3dQ2(const Point& pt) {
3140 if constexpr(i < 8)
3141 return 0.125*( -2. + refcoor_Q2_3D[3*i]*pt.x() + refcoor_Q2_3D[3*i+1]*pt.y() + refcoor_Q2_3D[3*i+2]*pt.z() )*
3142 ( 1. + refcoor_Q2_3D[3*i]*pt.x() )*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() )*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3143 else if constexpr(i==8 || i==10 || i==16 || i==18)
3144 return .25*( 1. - pt.x()*pt.x() )*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() )*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3145 else if constexpr(i==9 || i==11 || i==17 || i==19)
3146 return .25*( 1. + pt.x()*refcoor_Q2_3D[3*i] )*( 1. - pt.y()*pt.y() )*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3147 else if constexpr(i==12 || i==13 || i==14 || i==15)
3148 return .25*( 1. + pt.x()*refcoor_Q2_3D[3*i] )*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() )*( 1. - pt.z()*pt.z() );
3149 }
3150
3151 // first derivatives
3152
3153 template <int i>
3154 double basisFuncDiffr3dQ2(const Point& pt) {
3155 if constexpr(i < 8)
3156 return 0.125*refcoor_Q2_3D[3*i]*( -1. + 2.*refcoor_Q2_3D[3*i]*pt.x() + refcoor_Q2_3D[3*i+1]*pt.y() + refcoor_Q2_3D[3*i+2]*pt.z() )*
3157 ( 1. + refcoor_Q2_3D[3*i+1]*pt.y() )*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3158 else if constexpr(i==8 || i==10 || i==16 || i==18)
3159 return -.5*pt.x()*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() )*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3160 else if constexpr(i==9 || i==11 || i==17 || i==19)
3161 return .25*refcoor_Q2_3D[3*i]*( 1. - pt.y()*pt.y() )*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3162 else if constexpr(i==12 || i==13 || i==14 || i==15)
3163 return .25*refcoor_Q2_3D[3*i]*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() )*( 1. - pt.z()*pt.z() );
3164 }
3165
3166 template <int i>
3167 double basisFuncDiffs3dQ2(const Point& pt) {
3168 if constexpr(i < 8)
3169 return 0.125*refcoor_Q2_3D[3*i+1]*( -1. + refcoor_Q2_3D[3*i]*pt.x() + 2.*refcoor_Q2_3D[3*i+1]*pt.y() + refcoor_Q2_3D[3*i+2]*pt.z() )
3170 *( 1. + refcoor_Q2_3D[3*i]*pt.x() )*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3171 else if constexpr(i==8 || i==10 || i==16 || i==18)
3172 return .25*( 1. - pt.x()*pt.x() )*refcoor_Q2_3D[3*i+1]*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3173 else if constexpr(i==9 || i==11 || i==17 || i==19)
3174 return -.5*pt.y()*( 1. + pt.x()*refcoor_Q2_3D[3*i] )*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3175 else if constexpr(i==12 || i==13 || i==14 || i==15)
3176 return .25*( 1. + pt.x()*refcoor_Q2_3D[3*i] )*refcoor_Q2_3D[3*i+1]*( 1. - pt.z()*pt.z() );
3177 }
3178
3179 template <int i>
3180 double basisFuncDifft3dQ2(const Point& pt) {
3181 if constexpr(i < 8)
3182 return 0.125*refcoor_Q2_3D[3*i+2]*( -1. + refcoor_Q2_3D[3*i]*pt.x() + refcoor_Q2_3D[3*i+1]*pt.y() + 2.*refcoor_Q2_3D[3*i+2]*pt.z() )
3183 *( 1. + refcoor_Q2_3D[3*i]*pt.x() )*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() );
3184 else if constexpr(i==8 || i==10 || i==16 || i==18)
3185 return .25*( 1. - pt.x()*pt.x() )*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() )*refcoor_Q2_3D[3*i+2];
3186 else if constexpr(i==9 || i==11 || i==17 || i==19)
3187 return .25*( 1. + pt.x()*refcoor_Q2_3D[3*i] )*( 1. - pt.y()*pt.y() )*refcoor_Q2_3D[3*i+2];
3188 else if constexpr(i==12 || i==13 || i==14 || i==15)
3189 return -.5*pt.z()*( 1. + pt.x()*refcoor_Q2_3D[3*i] )*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() );
3190 }
3191
3192 // Second derivatives
3193
3194 template <int i>
3195 double basisFuncDiffrr3dQ2(const Point& pt) {
3196 if constexpr(i < 8)
3197 return 0.25*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() )*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3198 else if constexpr(i==8 || i==10 || i==16 || i==18)
3199 return -0.5*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() )*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3200 else if constexpr(i==9 || i==11 || i==17 || i==19)
3201 return 0.;
3202 else if constexpr(i==12 || i==13 || i==14 || i==15)
3203 return 0.;
3204 }
3205
3206 template <int i>
3207 double basisFuncDiffrs3dQ2(const Point& pt) {
3208 if constexpr(i < 8)
3209 return 0.125*refcoor_Q2_3D[3*i]*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() )*( 2.*pt.y() + 2.*
3210 refcoor_Q2_3D[3*i]*refcoor_Q2_3D[3*i+1]*pt.x() + refcoor_Q2_3D[3*i+1]*
3211 refcoor_Q2_3D[3*i+2]*pt.z() );
3212 else if constexpr(i==8 || i==10 || i==16 || i==18)
3213 return -0.5*refcoor_Q2_3D[3*i+1]*pt.x()*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3214 else if constexpr(i==9 || i==11 || i==17 || i==19)
3215 return -0.5*refcoor_Q2_3D[3*i]*pt.y()*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3216 else if constexpr(i==12 || i==13 || i==14 || i==15)
3217 return 0.25*refcoor_Q2_3D[3*i]*refcoor_Q2_3D[3*i+1]*( 1. - pt.z()*pt.z() );
3218 }
3219
3220 template <int i>
3221 double basisFuncDiffrt3dQ2(const Point& pt) {
3222 if constexpr(i < 8)
3223 return 0.125*refcoor_Q2_3D[3*i]*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() )*
3224 ( 2.*pt.z() + 2.*refcoor_Q2_3D[3*i]*refcoor_Q2_3D[3*i+2]*pt.x() + refcoor_Q2_3D[3*i+2]*pt.y() );
3225 else if constexpr(i==8 || i==10 || i==16 || i==18)
3226 return -0.5*refcoor_Q2_3D[3*i+2]*pt.x()*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() );
3227 else if constexpr(i==9 || i==11 || i==17 || i==19)
3228 return 0.25*refcoor_Q2_3D[3*i]*refcoor_Q2_3D[3*i+2]*( 1. - pt.y()*pt.y() );
3229 else if constexpr(i==12 || i==13 || i==14 || i==15)
3230 return -0.5*refcoor_Q2_3D[3*i]*pt.z()*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() );
3231 }
3232
3233 template <int i>
3234 double basisFuncDiffsr3dQ2(const Point& pt) {
3235 if constexpr(i < 8)
3236 return 0.125*refcoor_Q2_3D[3*i+1]*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() )*
3237 ( 2.*pt.x() + 2.*refcoor_Q2_3D[3*i]*refcoor_Q2_3D[3*i+1]*pt.y() + refcoor_Q2_3D[3*i]*refcoor_Q2_3D[3*i+2]*pt.z() );
3238 else if constexpr(i==8 || i==10 || i==16 || i==18)
3239 return -0.5*refcoor_Q2_3D[3*i+1]*pt.x()*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3240 else if constexpr(i==9 || i==11 || i==17 || i==19)
3241 return -0.5*refcoor_Q2_3D[3*i]*pt.y()*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3242 else if constexpr(i==12 || i==13 || i==14 || i==15)
3243 return 0.25*refcoor_Q2_3D[3*i]*refcoor_Q2_3D[3*i+1]*( 1. - pt.z()*pt.z() );
3244 }
3245
3246 template <int i>
3247 double basisFuncDiffss3dQ2(const Point& pt) {
3248 if constexpr(i < 8)
3249 return 0.25*( 1. + refcoor_Q2_3D[3*i]*pt.x() )*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3250 else if constexpr(i==8 || i==10 || i==16 || i==18)
3251 return 0.;
3252 else if constexpr(i==9 || i==11 || i==17 || i==19)
3253 return -0.5*( 1. + refcoor_Q2_3D[3*i]*pt.x() )*( 1. + refcoor_Q2_3D[3*i+2]*pt.z() );
3254 else if constexpr(i==12 || i==13 || i==14 || i==15)
3255 return 0.;
3256 }
3257
3258 template <int i>
3259 double basisFuncDiffst3dQ2(const Point& pt) {
3260 if constexpr(i < 8)
3261 return 0.125*refcoor_Q2_3D[3*i+1]*( 1. + refcoor_Q2_3D[3*i]*pt.x() )*
3262 ( 2.*pt.z() + 2.*refcoor_Q2_3D[3*i+1]*refcoor_Q2_3D[3*i+2]*pt.y() + refcoor_Q2_3D[3*i]*refcoor_Q2_3D[3*i+2]*pt.x() );
3263 else if constexpr(i==8 || i==10 || i==16 || i==18)
3264 return 0.25*refcoor_Q2_3D[3*i+1]*refcoor_Q2_3D[3*i+2]*(1. - pt.x()*pt.x() );
3265 else if constexpr(i==9 || i==11 || i==17 || i==19)
3266 return -0.5*refcoor_Q2_3D[3*i+2]*pt.z()*( 1. + refcoor_Q2_3D[3*i]*pt.x() );
3267 else if constexpr(i==12 || i==13 || i==14 || i==15)
3268 return -0.5*refcoor_Q2_3D[3*i+1]*pt.z()*( 1. + refcoor_Q2_3D[3*i]*pt.x() );
3269 }
3270
3271 template <int i>
3272 double basisFuncDifftr3dQ2(const Point& pt) {
3273 if constexpr(i < 8)
3274 return 0.125*pt.z()*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() )*
3275 ( 2.*pt.x() + refcoor_Q2_3D[3*i]*refcoor_Q2_3D[3*i+1]*pt.y() + 2.*refcoor_Q2_3D[3*i]*refcoor_Q2_3D[3*i+2]*pt.z() );
3276 else if constexpr(i==8 || i==10 || i==16 || i==18)
3277 return 0.5*refcoor_Q2_3D[3*i+2]*pt.x()*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() );
3278 else if constexpr(i==9 || i==11 || i==17 || i==19)
3279 return 0.25*refcoor_Q2_3D[3*i]*refcoor_Q2_3D[3*i+2]*( 1. - pt.y()*pt.y() );
3280 else if constexpr(i==12 || i==13 || i==14 || i==15)
3281 return -0.5*refcoor_Q2_3D[3*i]*pt.z()*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() );
3282 }
3283
3284 template <int i>
3285 double basisFuncDiffts3dQ2(const Point& pt) {
3286 if constexpr(i < 8)
3287 return 0.125*pt.z()*( 1. + refcoor_Q2_3D[3*i]*pt.x() )*( 2.*pt.y() + refcoor_Q2_3D[3*i]*refcoor_Q2_3D[3*i+1]*pt.x() +
3288 refcoor_Q2_3D[3*i+1]*refcoor_Q2_3D[3*i+2]*pt.z() );
3289 else if constexpr(i==8 || i==10 || i==16 || i==18)
3290 return 0.25*refcoor_Q2_3D[3*i+1]*refcoor_Q2_3D[3*i+2]*( 1. - pt.x()*pt.x() );
3291 else if constexpr(i==9 || i==11 || i==17 || i==19)
3292 return -0.5*refcoor_Q2_3D[3*i+2]*pt.y()*( 1. + refcoor_Q2_3D[3*i]*pt.x() );
3293 else if constexpr(i==12 || i==13 || i==14 || i==15)
3294 return -0.5*refcoor_Q2_3D[3*i+1]*pt.z()*( 1. + refcoor_Q2_3D[3*i]*pt.x() );
3295 }
3296
3297 template <int i>
3298 double basisFuncDifftt3dQ2(const Point& pt) {
3299 if constexpr(i < 8)
3300 return 0.125*( 1. + refcoor_Q2_3D[3*i]*pt.x() )*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() )*
3301 ( -1. + refcoor_Q2_3D[3*i]*pt.x() + refcoor_Q2_3D[3*i+1]*pt.y() + 4.*refcoor_Q2_3D[3*i+2]*pt.z() );
3302 else if constexpr(i==8 || i==10 || i==16 || i==18)
3303 return 0.;
3304 else if constexpr(i==9 || i==11 || i==17 || i==19)
3305 return 0.;
3306 else if constexpr(i==12 || i==13 || i==14 || i==15)
3307 return -0.5*( 1. + refcoor_Q2_3D[3*i]*pt.x() )*( 1. + refcoor_Q2_3D[3*i+1]*pt.y() );
3308 }
3309
3310
3311 static const FunctionXYZ _Func3dQ2[20] = { basisFunc3dQ2<0>,basisFunc3dQ2<1>,basisFunc3dQ2<2>,basisFunc3dQ2<3>,basisFunc3dQ2<4>,basisFunc3dQ2<5>,
3312 basisFunc3dQ2<6>,basisFunc3dQ2<7>,basisFunc3dQ2<8>,basisFunc3dQ2<9>,basisFunc3dQ2<10>,basisFunc3dQ2<11>,basisFunc3dQ2<12>,basisFunc3dQ2<13>,basisFunc3dQ2<14>,
3313 basisFunc3dQ2<15>,basisFunc3dQ2<16>,basisFunc3dQ2<17>,basisFunc3dQ2<18>,basisFunc3dQ2<19>
3314 };
3315
3316 static const FunctionXYZ _FuncDiff3dQ2[60] = {
3317 basisFuncDiffr3dQ2<0>, basisFuncDiffs3dQ2<0>, basisFuncDifft3dQ2<0>,
3318 basisFuncDiffr3dQ2<1>, basisFuncDiffs3dQ2<1>, basisFuncDifft3dQ2<1>,
3319 basisFuncDiffr3dQ2<2>, basisFuncDiffs3dQ2<2>, basisFuncDifft3dQ2<2>,
3320 basisFuncDiffr3dQ2<3>, basisFuncDiffs3dQ2<3>, basisFuncDifft3dQ2<3>,
3321 basisFuncDiffr3dQ2<4>, basisFuncDiffs3dQ2<4>, basisFuncDifft3dQ2<4>,
3322 basisFuncDiffr3dQ2<5>, basisFuncDiffs3dQ2<5>, basisFuncDifft3dQ2<5>,
3323 basisFuncDiffr3dQ2<6>, basisFuncDiffs3dQ2<6>, basisFuncDifft3dQ2<6>,
3324 basisFuncDiffr3dQ2<7>, basisFuncDiffs3dQ2<7>, basisFuncDifft3dQ2<7>,
3325 basisFuncDiffr3dQ2<8>, basisFuncDiffs3dQ2<8>, basisFuncDifft3dQ2<8>,
3326 basisFuncDiffr3dQ2<9>, basisFuncDiffs3dQ2<9>, basisFuncDifft3dQ2<9>,
3327 basisFuncDiffr3dQ2<10>, basisFuncDiffs3dQ2<10>, basisFuncDifft3dQ2<10>,
3328 basisFuncDiffr3dQ2<11>, basisFuncDiffs3dQ2<11>, basisFuncDifft3dQ2<11>,
3329 basisFuncDiffr3dQ2<12>, basisFuncDiffs3dQ2<12>, basisFuncDifft3dQ2<12>,
3330 basisFuncDiffr3dQ2<13>, basisFuncDiffs3dQ2<13>, basisFuncDifft3dQ2<13>,
3331 basisFuncDiffr3dQ2<14>, basisFuncDiffs3dQ2<14>, basisFuncDifft3dQ2<14>,
3332 basisFuncDiffr3dQ2<15>, basisFuncDiffs3dQ2<15>, basisFuncDifft3dQ2<15>,
3333 basisFuncDiffr3dQ2<16>, basisFuncDiffs3dQ2<16>, basisFuncDifft3dQ2<16>,
3334 basisFuncDiffr3dQ2<17>, basisFuncDiffs3dQ2<17>, basisFuncDifft3dQ2<17>,
3335 basisFuncDiffr3dQ2<18>, basisFuncDiffs3dQ2<18>, basisFuncDifft3dQ2<18>,
3336 basisFuncDiffr3dQ2<19>, basisFuncDiffs3dQ2<19>, basisFuncDifft3dQ2<19>
3337 };
3338
3339
3340 static const FunctionXYZ _FuncDiffHess3dQ2[180] = {
3341 basisFuncDiffrr3dQ2<0>,basisFuncDiffrs3dQ2<0>,basisFuncDiffrt3dQ2<0>,basisFuncDiffsr3dQ2<0>,basisFuncDiffss3dQ2<0>,basisFuncDiffst3dQ2<0>,basisFuncDifftr3dQ2<0>,basisFuncDiffts3dQ2<0>,basisFuncDifftt3dQ2<0>,
3342 basisFuncDiffrr3dQ2<1>,basisFuncDiffrs3dQ2<1>,basisFuncDiffrt3dQ2<1>,basisFuncDiffsr3dQ2<1>,basisFuncDiffss3dQ2<1>,basisFuncDiffst3dQ2<1>,basisFuncDifftr3dQ2<1>,basisFuncDiffts3dQ2<1>,basisFuncDifftt3dQ2<1>,
3343 basisFuncDiffrr3dQ2<2>,basisFuncDiffrs3dQ2<2>,basisFuncDiffrt3dQ2<2>,basisFuncDiffsr3dQ2<2>,basisFuncDiffss3dQ2<2>,basisFuncDiffst3dQ2<2>,basisFuncDifftr3dQ2<2>,basisFuncDiffts3dQ2<2>,basisFuncDifftt3dQ2<2>,
3344 basisFuncDiffrr3dQ2<3>,basisFuncDiffrs3dQ2<3>,basisFuncDiffrt3dQ2<3>,basisFuncDiffsr3dQ2<3>,basisFuncDiffss3dQ2<3>,basisFuncDiffst3dQ2<3>,basisFuncDifftr3dQ2<3>,basisFuncDiffts3dQ2<3>,basisFuncDifftt3dQ2<3>,
3345 basisFuncDiffrr3dQ2<4>,basisFuncDiffrs3dQ2<4>,basisFuncDiffrt3dQ2<4>,basisFuncDiffsr3dQ2<4>,basisFuncDiffss3dQ2<4>,basisFuncDiffst3dQ2<4>,basisFuncDifftr3dQ2<4>,basisFuncDiffts3dQ2<4>,basisFuncDifftt3dQ2<4>,
3346 basisFuncDiffrr3dQ2<5>,basisFuncDiffrs3dQ2<5>,basisFuncDiffrt3dQ2<5>,basisFuncDiffsr3dQ2<5>,basisFuncDiffss3dQ2<5>,basisFuncDiffst3dQ2<5>,basisFuncDifftr3dQ2<5>,basisFuncDiffts3dQ2<5>,basisFuncDifftt3dQ2<5>,
3347 basisFuncDiffrr3dQ2<6>,basisFuncDiffrs3dQ2<6>,basisFuncDiffrt3dQ2<6>,basisFuncDiffsr3dQ2<6>,basisFuncDiffss3dQ2<6>,basisFuncDiffst3dQ2<6>,basisFuncDifftr3dQ2<6>,basisFuncDiffts3dQ2<6>,basisFuncDifftt3dQ2<6>,
3348 basisFuncDiffrr3dQ2<7>,basisFuncDiffrs3dQ2<7>,basisFuncDiffrt3dQ2<7>,basisFuncDiffsr3dQ2<7>,basisFuncDiffss3dQ2<7>,basisFuncDiffst3dQ2<7>,basisFuncDifftr3dQ2<7>,basisFuncDiffts3dQ2<7>,basisFuncDifftt3dQ2<7>,
3349 basisFuncDiffrr3dQ2<8>,basisFuncDiffrs3dQ2<8>,basisFuncDiffrt3dQ2<8>,basisFuncDiffsr3dQ2<8>,basisFuncDiffss3dQ2<8>,basisFuncDiffst3dQ2<8>,basisFuncDifftr3dQ2<8>,basisFuncDiffts3dQ2<8>,basisFuncDifftt3dQ2<8>,
3350 basisFuncDiffrr3dQ2<9>,basisFuncDiffrs3dQ2<9>,basisFuncDiffrt3dQ2<9>,basisFuncDiffsr3dQ2<9>,basisFuncDiffss3dQ2<9>,basisFuncDiffst3dQ2<9>,basisFuncDifftr3dQ2<9>,basisFuncDiffts3dQ2<9>,basisFuncDifftt3dQ2<9>,
3351 basisFuncDiffrr3dQ2<10>,basisFuncDiffrs3dQ2<10>,basisFuncDiffrt3dQ2<10>,basisFuncDiffsr3dQ2<10>,basisFuncDiffss3dQ2<10>,basisFuncDiffst3dQ2<10>,basisFuncDifftr3dQ2<10>,basisFuncDiffts3dQ2<10>,basisFuncDifftt3dQ2<10>,
3352 basisFuncDiffrr3dQ2<11>,basisFuncDiffrs3dQ2<11>,basisFuncDiffrt3dQ2<11>,basisFuncDiffsr3dQ2<11>,basisFuncDiffss3dQ2<11>,basisFuncDiffst3dQ2<11>,basisFuncDifftr3dQ2<11>,basisFuncDiffts3dQ2<11>,basisFuncDifftt3dQ2<11>,
3353 basisFuncDiffrr3dQ2<12>,basisFuncDiffrs3dQ2<12>,basisFuncDiffrt3dQ2<12>,basisFuncDiffsr3dQ2<12>,basisFuncDiffss3dQ2<12>,basisFuncDiffst3dQ2<12>,basisFuncDifftr3dQ2<12>,basisFuncDiffts3dQ2<12>,basisFuncDifftt3dQ2<12>,
3354 basisFuncDiffrr3dQ2<13>,basisFuncDiffrs3dQ2<13>,basisFuncDiffrt3dQ2<13>,basisFuncDiffsr3dQ2<13>,basisFuncDiffss3dQ2<13>,basisFuncDiffst3dQ2<13>,basisFuncDifftr3dQ2<13>,basisFuncDiffts3dQ2<13>,basisFuncDifftt3dQ2<13>,
3355 basisFuncDiffrr3dQ2<14>,basisFuncDiffrs3dQ2<14>,basisFuncDiffrt3dQ2<14>,basisFuncDiffsr3dQ2<14>,basisFuncDiffss3dQ2<14>,basisFuncDiffst3dQ2<14>,basisFuncDifftr3dQ2<14>,basisFuncDiffts3dQ2<14>,basisFuncDifftt3dQ2<14>,
3356 basisFuncDiffrr3dQ2<15>,basisFuncDiffrs3dQ2<15>,basisFuncDiffrt3dQ2<15>,basisFuncDiffsr3dQ2<15>,basisFuncDiffss3dQ2<15>,basisFuncDiffst3dQ2<15>,basisFuncDifftr3dQ2<15>,basisFuncDiffts3dQ2<15>,basisFuncDifftt3dQ2<15>,
3357 basisFuncDiffrr3dQ2<16>,basisFuncDiffrs3dQ2<16>,basisFuncDiffrt3dQ2<16>,basisFuncDiffsr3dQ2<16>,basisFuncDiffss3dQ2<16>,basisFuncDiffst3dQ2<16>,basisFuncDifftr3dQ2<16>,basisFuncDiffts3dQ2<16>,basisFuncDifftt3dQ2<16>,
3358 basisFuncDiffrr3dQ2<17>,basisFuncDiffrs3dQ2<17>,basisFuncDiffrt3dQ2<17>,basisFuncDiffsr3dQ2<17>,basisFuncDiffss3dQ2<17>,basisFuncDiffst3dQ2<17>,basisFuncDifftr3dQ2<17>,basisFuncDiffts3dQ2<17>,basisFuncDifftt3dQ2<17>,
3359 basisFuncDiffrr3dQ2<18>,basisFuncDiffrs3dQ2<18>,basisFuncDiffrt3dQ2<18>,basisFuncDiffsr3dQ2<18>,basisFuncDiffss3dQ2<18>,basisFuncDiffst3dQ2<18>,basisFuncDifftr3dQ2<18>,basisFuncDiffts3dQ2<18>,basisFuncDifftt3dQ2<18>,
3360 basisFuncDiffrr3dQ2<19>,basisFuncDiffrs3dQ2<19>,basisFuncDiffrt3dQ2<19>,basisFuncDiffsr3dQ2<19>,basisFuncDiffss3dQ2<19>,basisFuncDiffst3dQ2<19>,basisFuncDifftr3dQ2<19>,basisFuncDiffts3dQ2<19>,basisFuncDifftt3dQ2<19>,
3361 };
3362
3363 const BasisFunction basisFunction3dQ2("basisFunction3dQ2",20,3,_Func3dQ2,_FuncDiff3dQ2,_FuncDiffHess3dQ2);
3364
3365 /************************************************************************
3366 * basisFunction3dQ2c
3367 *************************************************************************/
3368
3369 static const double refcoor_Q2c_3D[] = {-1.,-1.,-1., 1.,-1.,-1., 1.,1.,-1., -1.,1.,-1., -1.,-1.,1., 1.,-1.,1., 1.,1.,1., -1.,1.,1., 0.,-1.,-1., 1.,0.,-1.,
3370 0.,1.,-1., -1.,0.,-1., -1.,-1.,0., 1.,-1.,0., 1.,1.,0., -1.,1.,0., 0.,-1.,1., 1.,0.,1., 0.,1.,1., -1.,0.,1., 0.,0.,-1. ,
3371 -1.,0.,0., 0.,-1.,0., 0.,0.,1., 1.,0.,0., 0.,1.,0., 0.,0.,0.
3372 };
3373
3374 template <int i>
3375 double basisFunc3dQ2c(const Point& pt) {
3376 if constexpr(i < 8)
3377 return 0.125*( 1. + refcoor_Q2c_3D[3*i]*pt.x() )*refcoor_Q2c_3D[3*i]*pt.x()*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )*
3378 refcoor_Q2c_3D[3*i+1]*pt.y()*( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() )*refcoor_Q2c_3D[3*i+2]*pt.z();
3379 else if constexpr(i==8 || i==10 || i==16 || i==18)
3380 return .25*( 1. - pt.x()*pt.x() )*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )*refcoor_Q2c_3D[3*i+1]*pt.y()*
3381 ( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() )*refcoor_Q2c_3D[3*i+2]*pt.z();
3382 else if constexpr(i==9 || i==11 || i==17 || i==19)
3383 return .25*( 1. + pt.x()*refcoor_Q2c_3D[3*i] )*pt.x()*refcoor_Q2c_3D[3*i]*( 1. - pt.y()*pt.y() )*
3384 ( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() )*refcoor_Q2c_3D[3*i+2]*pt.z();
3385 else if constexpr(i==12 || i==13 || i==14 || i==15)
3386 return .25*( 1. + pt.x()*refcoor_Q2c_3D[3*i] )*pt.x()*refcoor_Q2c_3D[3*i]*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )*
3387 refcoor_Q2c_3D[3*i+1]*pt.y()*( 1. - pt.z()*pt.z() );
3388 else if constexpr(i==20 || i == 23)
3389 return .5*( 1. - pt.x()*pt.x() )*( 1. - pt.y()*pt.y() )*refcoor_Q2c_3D[3*i+2]*pt.z()*( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() );
3390 else if constexpr(i==21 || i == 24)
3391 return .5*( 1. + pt.x()*refcoor_Q2c_3D[3*i] )*refcoor_Q2c_3D[3*i]*pt.x()*( 1. - pt.y()*pt.y() )*( 1. - pt.z()*pt.z() );
3392 else if constexpr(i==22 || i==25)
3393 return .5*( 1. - pt.x()*pt.x() )*refcoor_Q2c_3D[3*i+1]*pt.y()*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )*( 1. - pt.z()*pt.z() );
3394 else if constexpr(i==26)
3395 return ( 1. - pt.x()*pt.x() )*( 1. - pt.y()*pt.y() )*( 1. - pt.z()*pt.z() );
3396 }
3397
3398 static const FunctionXYZ _Func3dQ2c[27] = { basisFunc3dQ2c<0>,basisFunc3dQ2c<1>,basisFunc3dQ2c<2>,basisFunc3dQ2c<3>,basisFunc3dQ2c<4>,basisFunc3dQ2c<5>,
3399 basisFunc3dQ2c<6>,basisFunc3dQ2c<7>,basisFunc3dQ2c<8>,basisFunc3dQ2c<9>,basisFunc3dQ2c<10>,basisFunc3dQ2c<11>,basisFunc3dQ2c<12>,basisFunc3dQ2c<13>,basisFunc3dQ2c<14>,
3400 basisFunc3dQ2c<15>,basisFunc3dQ2c<16>,basisFunc3dQ2c<17>,basisFunc3dQ2c<18>,basisFunc3dQ2c<19>,basisFunc3dQ2c<20>,basisFunc3dQ2c<21>,basisFunc3dQ2c<22>,
3401 basisFunc3dQ2c<23>,basisFunc3dQ2c<24>,basisFunc3dQ2c<25>,basisFunc3dQ2c<26>
3402 };
3403
3404 // first derivatives
3405
3406 template <int i>
3407 double basisFuncDiffr3dQ2c(const Point& pt) {
3408 if constexpr(i < 8)
3409 return 0.125*refcoor_Q2c_3D[3*i]*(1. + 2.*refcoor_Q2c_3D[3*i]*pt.x() )*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )
3410 *refcoor_Q2c_3D[3*i+1]*pt.y()*( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() )*refcoor_Q2c_3D[3*i+2]*pt.z();
3411 else if constexpr(i==8 || i==10 || i==16 || i==18)
3412 return -.5*pt.x()*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )*refcoor_Q2c_3D[3*i+1]*pt.y()*( 1. +
3413 refcoor_Q2c_3D[3*i+2]*pt.z() )*refcoor_Q2c_3D[3*i+2]*pt.z();
3414 else if constexpr(i==9 || i==11 || i==17 || i==19)
3415 return .25*( 1. + 2.*pt.x()*refcoor_Q2c_3D[3*i] )*refcoor_Q2c_3D[3*i]*( 1. - pt.y()*pt.y() )
3416 *( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() )*refcoor_Q2c_3D[3*i+2]*pt.z();
3417 else if constexpr(i==12 || i==13 || i==14 || i==15)
3418 return .25*( 1. + 2.*pt.x()*refcoor_Q2c_3D[3*i] )*refcoor_Q2c_3D[3*i]*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )
3419 *refcoor_Q2c_3D[3*i+1]*pt.y()*( 1. - pt.z()*pt.z() );
3420 else if constexpr(i==20 || i == 23)
3421 return -pt.x()*( 1. - pt.y()*pt.y() )*refcoor_Q2c_3D[3*i+2]*pt.z()*( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() );
3422 else if constexpr(i==21 || i == 24)
3423 return .5*( 1. + 2.*pt.x()*refcoor_Q2c_3D[3*i] )*refcoor_Q2c_3D[3*i]*( 1. - pt.y()*pt.y() )
3424 *( 1. - pt.z()*pt.z() );
3425 else if constexpr(i==22 || i==25)
3426 return -pt.x()*refcoor_Q2c_3D[3*i+1]*pt.y()*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )
3427 *( 1. - pt.z()*pt.z() );
3428 else if constexpr(i==26)
3429 return -2*pt.x()*( 1. - pt.y()*pt.y() )*( 1. - pt.z()*pt.z() );
3430 }
3431
3432 template <int i>
3433 double basisFuncDiffs3dQ2c(const Point& pt) {
3434 if constexpr(i < 8)
3435 return 0.125*( 1. + refcoor_Q2c_3D[3*i]*pt.x() )*refcoor_Q2c_3D[3*i]*pt.x()*( 1. + 2.*refcoor_Q2c_3D[3*i+1]
3436 *pt.y() )*refcoor_Q2c_3D[3*i+1]*( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() )*refcoor_Q2c_3D[3*i+2]*pt.z();
3437 else if constexpr(i==8 || i==10 || i==16 || i==18)
3438 return .25*( 1. - pt.x()*pt.x() )*( 1. + 2.*refcoor_Q2c_3D[3*i+1]*pt.y() )*refcoor_Q2c_3D[3*i+1]*
3439 ( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() )*refcoor_Q2c_3D[3*i+2]*pt.z();
3440 else if constexpr(i==9 || i==11 || i==17 || i==19)
3441 return -.5*pt.y()*( 1. + pt.x()*refcoor_Q2c_3D[3*i] )*pt.x()*refcoor_Q2c_3D[3*i]*( 1. + refcoor_Q2c_3D[3*i+2]
3442 *pt.z() )*refcoor_Q2c_3D[3*i+2]*pt.z();
3443 else if constexpr(i==12 || i==13 || i==14 || i==15)
3444 return .25*( 1. + pt.x()*refcoor_Q2c_3D[3*i] )*pt.x()*refcoor_Q2c_3D[3*i]*( 1. + 2.*refcoor_Q2c_3D[3*i+1]*
3445 pt.y() )*refcoor_Q2c_3D[3*i+1]*( 1. - pt.z()*pt.z() );
3446 else if constexpr(i==20 || i == 23)
3447 return -pt.y()*( 1. - pt.x()*pt.x() )*refcoor_Q2c_3D[3*i+2]*pt.z()*( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() );
3448 else if constexpr(i==21 || i == 24)
3449 return -pt.y()*( 1. + pt.x()*refcoor_Q2c_3D[3*i] )*refcoor_Q2c_3D[3*i]*pt.x()*( 1. - pt.z()*pt.z() );
3450 else if constexpr(i==22 || i==25)
3451 return .5*( 1. - pt.x()*pt.x() )*refcoor_Q2c_3D[3*i+1]*( 1. + 2.*refcoor_Q2c_3D[3*i+1]*pt.y() )*
3452 ( 1. - pt.z()*pt.z() );
3453 else if constexpr(i==26)
3454 return -2*pt.y()*( 1. - pt.x()*pt.x() )*( 1. - pt.z()*pt.z() );
3455 }
3456
3457 template <int i>
3458 double basisFuncDifft3dQ2c(const Point& pt) {
3459 if constexpr(i < 8)
3460 return 0.125*( 1. + refcoor_Q2c_3D[3*i]*pt.x() )*refcoor_Q2c_3D[3*i]*pt.x()*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )
3461 *refcoor_Q2c_3D[3*i+1]*pt.y()*( 1. + 2.*refcoor_Q2c_3D[3*i+2]*pt.z() )*refcoor_Q2c_3D[3*i+2];
3462 else if constexpr(i==8 || i==10 || i==16 || i==18)
3463 return .25*( 1. - pt.x()*pt.x() )*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )*refcoor_Q2c_3D[3*i+1]*pt.y()*
3464 ( 1. + 2.*refcoor_Q2c_3D[3*i+2]*pt.z() )*refcoor_Q2c_3D[3*i+2];
3465 else if constexpr(i==9 || i==11 || i==17 || i==19)
3466 return .25*( 1. + pt.x()*refcoor_Q2c_3D[3*i] )*pt.x()*refcoor_Q2c_3D[3*i]*( 1. - pt.y()*pt.y() )*( 1. + 2.
3467 *refcoor_Q2c_3D[3*i+2]*pt.z() )*refcoor_Q2c_3D[3*i+2];
3468 else if constexpr(i==12 || i==13 || i==14 || i==15)
3469 return -.5*pt.z()*( 1. + pt.x()*refcoor_Q2c_3D[3*i] )*pt.x()*refcoor_Q2c_3D[3*i]*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )
3470 *refcoor_Q2c_3D[3*i+1]*pt.y();
3471 else if constexpr(i==20 || i == 23)
3472 return .5*( 1. - pt.x()*pt.x() )*( 1. - pt.y()*pt.y() )*refcoor_Q2c_3D[3*i+2]*( 1. + 2.*refcoor_Q2c_3D[3*i+2]*pt.z() );
3473 else if constexpr(i==21 || i == 24)
3474 return -pt.z()*( 1. + pt.x()*refcoor_Q2c_3D[3*i] )*refcoor_Q2c_3D[3*i]*pt.x()*( 1. - pt.y()*pt.y() );
3475 else if constexpr(i==22 || i==25)
3476 return -pt.z()*( 1. - pt.x()*pt.x() )*refcoor_Q2c_3D[3*i+1]*pt.y()*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() );
3477 else if constexpr(i==26)
3478 return -2.*pt.z()*( 1. - pt.x()*pt.x() )*( 1. - pt.y()*pt.y() );
3479 }
3480
3481 static const FunctionXYZ _FuncDiff3dQ2c[81] = {
3482 basisFuncDiffr3dQ2c<0>, basisFuncDiffs3dQ2c<0>, basisFuncDifft3dQ2c<0>,
3483 basisFuncDiffr3dQ2c<1>, basisFuncDiffs3dQ2c<1>, basisFuncDifft3dQ2c<1>,
3484 basisFuncDiffr3dQ2c<2>, basisFuncDiffs3dQ2c<2>, basisFuncDifft3dQ2c<2>,
3485 basisFuncDiffr3dQ2c<3>, basisFuncDiffs3dQ2c<3>, basisFuncDifft3dQ2c<3>,
3486 basisFuncDiffr3dQ2c<4>, basisFuncDiffs3dQ2c<4>, basisFuncDifft3dQ2c<4>,
3487 basisFuncDiffr3dQ2c<5>, basisFuncDiffs3dQ2c<5>, basisFuncDifft3dQ2c<5>,
3488 basisFuncDiffr3dQ2c<6>, basisFuncDiffs3dQ2c<6>, basisFuncDifft3dQ2c<6>,
3489 basisFuncDiffr3dQ2c<7>, basisFuncDiffs3dQ2c<7>, basisFuncDifft3dQ2c<7>,
3490 basisFuncDiffr3dQ2c<8>, basisFuncDiffs3dQ2c<8>, basisFuncDifft3dQ2c<8>,
3491 basisFuncDiffr3dQ2c<9>, basisFuncDiffs3dQ2c<9>, basisFuncDifft3dQ2c<9>,
3492 basisFuncDiffr3dQ2c<10>, basisFuncDiffs3dQ2c<10>, basisFuncDifft3dQ2c<10>,
3493 basisFuncDiffr3dQ2c<11>, basisFuncDiffs3dQ2c<11>, basisFuncDifft3dQ2c<11>,
3494 basisFuncDiffr3dQ2c<12>, basisFuncDiffs3dQ2c<12>, basisFuncDifft3dQ2c<12>,
3495 basisFuncDiffr3dQ2c<13>, basisFuncDiffs3dQ2c<13>, basisFuncDifft3dQ2c<13>,
3496 basisFuncDiffr3dQ2c<14>, basisFuncDiffs3dQ2c<14>, basisFuncDifft3dQ2c<14>,
3497 basisFuncDiffr3dQ2c<15>, basisFuncDiffs3dQ2c<15>, basisFuncDifft3dQ2c<15>,
3498 basisFuncDiffr3dQ2c<16>, basisFuncDiffs3dQ2c<16>, basisFuncDifft3dQ2c<16>,
3499 basisFuncDiffr3dQ2c<17>, basisFuncDiffs3dQ2c<17>, basisFuncDifft3dQ2c<17>,
3500 basisFuncDiffr3dQ2c<18>, basisFuncDiffs3dQ2c<18>, basisFuncDifft3dQ2c<18>,
3501 basisFuncDiffr3dQ2c<19>, basisFuncDiffs3dQ2c<19>, basisFuncDifft3dQ2c<19>,
3502 basisFuncDiffr3dQ2c<20>, basisFuncDiffs3dQ2c<20>, basisFuncDifft3dQ2c<20>,
3503 basisFuncDiffr3dQ2c<21>, basisFuncDiffs3dQ2c<21>, basisFuncDifft3dQ2c<21>,
3504 basisFuncDiffr3dQ2c<22>, basisFuncDiffs3dQ2c<22>, basisFuncDifft3dQ2c<22>,
3505 basisFuncDiffr3dQ2c<23>, basisFuncDiffs3dQ2c<23>, basisFuncDifft3dQ2c<23>,
3506 basisFuncDiffr3dQ2c<24>, basisFuncDiffs3dQ2c<24>, basisFuncDifft3dQ2c<24>,
3507 basisFuncDiffr3dQ2c<25>, basisFuncDiffs3dQ2c<25>, basisFuncDifft3dQ2c<25>,
3508 basisFuncDiffr3dQ2c<26>, basisFuncDiffs3dQ2c<26>, basisFuncDifft3dQ2c<26>
3509 };
3510
3511 // Second derivatives
3512
3513 template <int i>
3514 double basisFuncDiffrr3dQ2c(const Point& pt) {
3515 if constexpr(i < 8)
3516 return 0.25*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*
3517 pt.y()*pt.z()*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )*( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() );
3518 else if constexpr(i==8 || i==10 || i==16 || i==18)
3519 return -0.5*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*pt.y()*pt.z()*( 1. + refcoor_Q2c_3D[3*i+1]*
3520 pt.y() )*( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() );
3521 else if constexpr(i==9 || i==11 || i==17 || i==19)
3522 return 0.5*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+2]*pt.z()*
3523 ( 1. - pt.y()*pt.y() )*( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() );
3524 else if constexpr(i==12 || i==13 || i==14 || i==15)
3525 return 0.5*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*
3526 (1. + refcoor_Q2c_3D[3*i+1]*pt.y() )*( 1. - pt.z()*pt.z() );
3527 else if constexpr(i==20 || i == 23)
3528 return -refcoor_Q2c_3D[3*i+2]*pt.z()*(1. - pt.y()*pt.y() )*( 1. +
3529 refcoor_Q2c_3D[3*i+2]*pt.z() );
3530 else if constexpr(i==21 || i == 24)
3531 return refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i]*( 1. - pt.y()*
3532 pt.y() )*( 1. - pt.z()*pt.z() );
3533 else if constexpr(i==22 || i==25)
3534 return -refcoor_Q2c_3D[3*i+1]*pt.y()*(1. + refcoor_Q2c_3D[3*i+1]*pt.y() )*
3535 (1. - pt.z()*pt.z() );
3536 else if constexpr(i==26)
3537 return -2.*( 1. - pt.y()*pt.y() )*( 1. - pt.z()*
3538 pt.z() );
3539 }
3540
3541 template <int i>
3542 double basisFuncDiffrs3dQ2c(const Point& pt) {
3543 if constexpr(i < 8)
3544 return 0.125*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*pt.z()*
3545 ( 1. + 2.*refcoor_Q2c_3D[3*i]*pt.x() )*( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() )*
3546 ( 1. + 2.*refcoor_Q2c_3D[3*i+1]*pt.y() );
3547 else if constexpr(i==8 || i==10 || i==16 || i==18)
3548 return -0.5*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*pt.x()*( 1. +
3549 refcoor_Q2c_3D[3*i+2]*pt.z() )*( 1. + 2.*refcoor_Q2c_3D[3*i+1]*pt.y() );
3550 else if constexpr(i==9 || i==11 || i==17 || i==19)
3551 return -0.5*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+2]*pt.y()*pt.z()*
3552 ( 1. + 2.*refcoor_Q2c_3D[3*i]*pt.x() )*( 1. + refcoor_Q2c_3D[3*i]*pt.z() );
3553 else if constexpr(i==12 || i==13 || i==14 || i==15)
3554 return 0.25*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*( 1. + 2.*refcoor_Q2c_3D[3*i]*
3555 pt.x() )*( 1. - pt.z()*pt.z() )*( 1. + 2.*refcoor_Q2c_3D[3*i+1]*pt.y() );
3556 else if constexpr(i==20 || i == 23)
3557 return 2.*refcoor_Q2c_3D[3*i+2]*pt.x()*pt.y()*pt.z()*( 1. +
3558 refcoor_Q2c_3D[3*i+2]*pt.z() );
3559 else if constexpr(i==21 || i == 24)
3560 return -refcoor_Q2c_3D[3*i]*pt.y()*( 1. + 2.*refcoor_Q2c_3D[3*i]*
3561 pt.x() )*( 1. - pt.z()*pt.z() );
3562 else if constexpr(i==22 || i==25)
3563 return -refcoor_Q2c_3D[3*i+1]*pt.x()*(1. - pt.z()*pt.z() )*
3564 ( 1. + 2.*refcoor_Q2c_3D[3*i+1]*pt.y() );
3565 else if constexpr(i==26)
3566 return 4.*pt.x()*pt.y()*( 1. - pt.z()*pt.z() ) ;
3567 }
3568
3569 template <int i>
3570 double basisFuncDiffrt3dQ2c(const Point& pt) {
3571 if constexpr(i < 8)
3572 return 0.125*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*pt.y()*
3573 ( 1. + 2.*refcoor_Q2c_3D[3*i]*pt.x() )*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )*
3574 ( 1. + 2.*refcoor_Q2c_3D[3*i+2]*pt.z() );
3575 else if constexpr(i==8 || i==10 || i==16 || i==18)
3576 return -0.5*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*pt.x()*pt.y()*
3577 ( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )*( 1. + 2.*refcoor_Q2c_3D[3*i+2]*
3578 pt.z() );
3579 else if constexpr(i==9 || i==11 || i==17 || i==19)
3580 return 0.25*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+2]*(1. + 2.*
3581 refcoor_Q2c_3D[3*i]*pt.x() )*( 1. - pt.y()*pt.y() )*
3582 ( 1. + 2.*refcoor_Q2c_3D[3*i+2]*pt.z() );
3583 else if constexpr(i==12 || i==13 || i==14 || i==15)
3584 return -0.5*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*pt.z()*
3585 pt.y()*( 1. + 2.*refcoor_Q2c_3D[3*i]*pt.x() )*( 1. + refcoor_Q2c_3D[3*i+1]*
3586 pt.y() );
3587 else if constexpr(i==20 || i == 23)
3588 return -refcoor_Q2c_3D[3*i+2]*pt.x()*( 1. - pt.y()*pt.y() )*
3589 ( 1. + 2.*refcoor_Q2c_3D[3*i+2]*pt.z() );
3590 else if constexpr(i==21 || i == 24)
3591 return -refcoor_Q2c_3D[3*i]*pt.z()*( 1. + 2.*refcoor_Q2c_3D[3*i]*
3592 pt.x() )*( 1. - pt.y()*pt.y() ) ;
3593 else if constexpr(i==22 || i==25)
3594 return 2.*refcoor_Q2c_3D[3*i+1]*pt.x()*pt.y()*pt.z()*
3595 ( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() );
3596 else if constexpr(i==26)
3597 return 4.*pt.x()*pt.z()*( 1. - pt.y()*pt.y() ) ;
3598 }
3599
3600 template <int i>
3601 double basisFuncDiffsr3dQ2c(const Point& pt) {
3602 if constexpr(i < 8)
3603 return 0.125*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*
3604 pt.z()*( 1. + 2.*refcoor_Q2c_3D[3*i+1]*pt.y() )*( 1. + refcoor_Q2c_3D[3*i+2]*
3605 pt.z() )*( 1. + 2.*refcoor_Q2c_3D[3*i]*pt.x() );
3606 else if constexpr(i==8 || i==10 || i==16 || i==18)
3607 return -0.5*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*pt.z()*
3608 ( 1. + 2.*refcoor_Q2c_3D[3*i+1]*pt.y() )*( 1. + refcoor_Q2c_3D[3*i+2]*
3609 pt.z() );
3610 else if constexpr(i==9 || i==11 || i==17 || i==19)
3611 return -0.5*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+2]*pt.y()*
3612 pt.z()*( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() )*( 1. + 2.*
3613 refcoor_Q2c_3D[3*i]*pt.x() );
3614 else if constexpr(i==12 || i==13 || i==14 || i==15)
3615 return 0.25*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*( 1. + 2.*
3616 refcoor_Q2c_3D[3*i+1]*pt.y() )*( 1. - pt.z()*pt.z() )*
3617 ( 1. + 2.*refcoor_Q2c_3D[3*i]*pt.x() );
3618 else if constexpr(i==20 || i == 23)
3619 return 2.*refcoor_Q2c_3D[3*i+2]*pt.x()*pt.y()*pt.z()*
3620 ( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() );
3621 else if constexpr(i==21 || i == 24)
3622 return -refcoor_Q2c_3D[3*i]*pt.y()*(1. - pt.z()*pt.z() )*
3623 ( 1. + 2.*refcoor_Q2c_3D[3*i]*pt.x() );
3624 else if constexpr(i==22 || i==25)
3625 return -refcoor_Q2c_3D[3*i+1]*pt.x()*(1. + 2.*refcoor_Q2c_3D[3*i+1]*
3626 pt.y() )*( 1. - pt.z()*pt.z() );
3627 else if constexpr(i==26)
3628 return 4.*pt.x()*pt.y()*( 1. - pt.z()*pt.z() ) ;
3629 }
3630
3631 template <int i>
3632 double basisFuncDiffss3dQ2c(const Point& pt) {
3633 if constexpr(i < 8)
3634 return 0.25*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+1]*
3635 pt.x()*pt.z()*(1. + refcoor_Q2c_3D[3*i]*pt.x() )*( 1. + refcoor_Q2c_3D[3*i+2]*
3636 pt.z() );
3637 else if constexpr(i==8 || i==10 || i==16 || i==18)
3638 return 0.5*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*
3639 pt.y()*pt.z()*( 1. - pt.x()*pt.x() )*( 1. + refcoor_Q2c_3D[3*i+2]*
3640 pt.z() );
3641 else if constexpr(i==9 || i==11 || i==17 || i==19)
3642 return -0.5*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+2]*pt.x()*
3643 pt.z()*( 1. + refcoor_Q2c_3D[3*i]*pt.x() )*( 1. +
3644 refcoor_Q2c_3D[3*i+2]*pt.z() );
3645 else if constexpr(i==12 || i==13 || i==14 || i==15)
3646 return 0.5*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+1]*
3647 pt.x()*( 1. + refcoor_Q2c_3D[3*i]*pt.x() )*( 1. - pt.z()*pt.z() );
3648 else if constexpr(i==20 || i == 23)
3649 return -refcoor_Q2c_3D[3*i+2]*pt.z()*( 1. - pt.x()*pt.x() )*
3650 ( 1. + refcoor_Q2c_3D[3*i+2]*pt.z() );
3651 else if constexpr(i==21 || i == 24)
3652 return -refcoor_Q2c_3D[3*i]*pt.x()*(1.+refcoor_Q2c_3D[3*i]*pt.x() )*
3653 ( 1. - pt.z()*pt.z() );
3654 else if constexpr(i==22 || i==25)
3655 return refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+1]*( 1. -
3656 pt.x()*pt.x() )*(1. - pt.z()*pt.z() );
3657 else if constexpr(i==26)
3658 return -2.*( 1. - pt.x()*pt.x() )*( 1. - pt.z()*pt.z() ) ;
3659 }
3660
3661 template <int i>
3662 double basisFuncDiffst3dQ2c(const Point& pt) {
3663 if constexpr(i < 8)
3664 return 0.125*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*
3665 pt.x()*( 1. + refcoor_Q2c_3D[3*i]*pt.x() )*( 1. + 2.*refcoor_Q2c_3D[3*i+1]*
3666 pt.y() )*( 1. + 2.*refcoor_Q2c_3D[3*i+2]*pt.z() );
3667 else if constexpr(i==8 || i==10 || i==16 || i==18)
3668 return 0.25*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*
3669 ( 1. - pt.x()*pt.x() )*( 1. + 2.*refcoor_Q2c_3D[3*i+1]*pt.y() )*
3670 ( 1. + 2.*refcoor_Q2c_3D[3*i+2]*pt.z() );
3671 else if constexpr(i==9 || i==11 || i==17 || i==19)
3672 return -0.5*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+2]*pt.x()*pt.y()*
3673 ( 1. + refcoor_Q2c_3D[3*i]*pt.x() )*( 1. + 2.*refcoor_Q2c_3D[3*i+2]*
3674 pt.z() );
3675 else if constexpr(i==12 || i==13 || i==14 || i==15)
3676 return -0.5*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*pt.x()*
3677 pt.z()*( 1. + refcoor_Q2c_3D[3*i]*pt.x() )*( 1. + 2.*
3678 refcoor_Q2c_3D[3*i+1]*pt.y() );
3679 else if constexpr(i==20 || i == 23)
3680 return -refcoor_Q2c_3D[3*i+2]*pt.y()*( 1. - pt.x()*pt.x() )*
3681 (1. + 2.*refcoor_Q2c_3D[3*i+2]*pt.z() );
3682 else if constexpr(i==21 || i == 24)
3683 return 2.*refcoor_Q2c_3D[3*i]*pt.x()*pt.y()*pt.z()*( 1. + refcoor_Q2c_3D[3*i]*pt.x() ) ;
3684 else if constexpr(i==22 || i==25)
3685 return -refcoor_Q2c_3D[3*i+1]*pt.z()*( 1. - pt.x()*pt.x() )*
3686 ( 1. + 2.*refcoor_Q2c_3D[3*i+1]*pt.y() );
3687 else if constexpr(i==26)
3688 return 4.*pt.y()*pt.z()*( 1. - pt.x()*pt.x() ) ;
3689 }
3690
3691 template <int i>
3692 double basisFuncDifftr3dQ2c(const Point& pt) {
3693 if constexpr(i < 8)
3694 return 0.125*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*
3695 pt.y()*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )*( 1. + refcoor_Q2c_3D[3*i+2]*
3696 pt.z() )*( 1. + 2.*refcoor_Q2c_3D[3*i]*pt.x() );
3697 else if constexpr(i==8 || i==10 || i==16 || i==18)
3698 return -0.25*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*pt.x()*
3699 pt.y()*(1. + refcoor_Q2c_3D[3*i+1]*pt.y() )*( 1. + 2.*
3700 refcoor_Q2c_3D[3*i+2]*pt.z() );
3701 else if constexpr(i==9 || i==11 || i==17 || i==19)
3702 return 0.25*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+2]*(1. -
3703 pt.y()*pt.y() )*( 1. + 2.*refcoor_Q2c_3D[3*i+2]*pt.z() )*
3704 ( 1. + 2.*refcoor_Q2c_3D[3*i]*pt.z() );
3705 else if constexpr(i==12 || i==13 || i==14 || i==15)
3706 return -0.5*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*pt.y()*
3707 pt.z()*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() )*( 1. + 2.*
3708 refcoor_Q2c_3D[3*i]*pt.x() );
3709 else if constexpr(i==20 || i == 23)
3710 return -refcoor_Q2c_3D[3*i+2]*pt.x()*( 1. - pt.y()*pt.y() )*
3711 ( 1. + 2.*refcoor_Q2c_3D[3*i+2]*pt.z() );
3712 else if constexpr(i==21 || i == 24)
3713 return -refcoor_Q2c_3D[3*i]*pt.z()*( 1. - pt.y()*pt.y() )*
3714 ( 1. + 2.*refcoor_Q2c_3D[3*i]*pt.x() );
3715 else if constexpr(i==22 || i==25)
3716 return 2.*refcoor_Q2c_3D[3*i+1]*pt.x()*pt.y()*pt.z()*
3717 ( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() );
3718 else if constexpr(i==26)
3719 return 4.*pt.x()*pt.z()*( 1. - pt.y()*pt.y() ) ;
3720 }
3721
3722 template <int i>
3723 double basisFuncDiffts3dQ2c(const Point& pt) {
3724 if constexpr(i < 8)
3725 return 0.125*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*
3726 pt.x()*( 1. + refcoor_Q2c_3D[3*i]*pt.x() )*( 1. + 2.*refcoor_Q2c_3D[3*i+2]*
3727 pt.z() )*( 1. + 2.*refcoor_Q2c_3D[3*i+1]*pt.y() ) ;
3728 else if constexpr(i==8 || i==10 || i==16 || i==18)
3729 return 0.125*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*( 1. - pt.x()*
3730 pt.x() )*( 1. + 2.*refcoor_Q2c_3D[3*i+2]*pt.z() )*( 1. + 2.*
3731 refcoor_Q2c_3D[3*i+1]*pt.y() );
3732 else if constexpr(i==9 || i==11 || i==17 || i==19)
3733 return -0.5*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+2]*pt.x()*
3734 pt.y()*(1. + refcoor_Q2c_3D[3*i]*pt.x() )*( 1. + 2.*
3735 refcoor_Q2c_3D[3*i+2]*pt.z() );
3736 else if constexpr(i==12 || i==13 || i==14 || i==15)
3737 return -0.5*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*pt.x()*
3738 pt.z()*( 1. + refcoor_Q2c_3D[3*i]*pt.x() )*( 1. + 2.*
3739 refcoor_Q2c_3D[3*i+1]*pt.y() );
3740 else if constexpr(i==20 || i == 23)
3741 return -refcoor_Q2c_3D[3*i+2]*pt.y()*(1. - pt.x()*pt.x() )*
3742 (1. + 2.*refcoor_Q2c_3D[3*i+2]*pt.z() );
3743 else if constexpr(i==21 || i == 24)
3744 return 2.*refcoor_Q2c_3D[3*i]*pt.x()*pt.y()*pt.z()*(
3745 1. + refcoor_Q2c_3D[3*i]*pt.x() );
3746 else if constexpr(i==22 || i==25)
3747 return -refcoor_Q2c_3D[3*i+1]*pt.z()*( 1. - pt.x()*pt.x() )*
3748 ( 1. + 2.*refcoor_Q2c_3D[3*i+1]*pt.y() );
3749 else if constexpr(i==26)
3750 return 4.*pt.y()*pt.z()*( 1. - pt.x()*pt.x() ) ;
3751 }
3752
3753 template <int i>
3754 double basisFuncDifftt3dQ2c(const Point& pt) {
3755 if constexpr(i < 8)
3756 return 0.25*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*
3757 refcoor_Q2c_3D[3*i+2]*pt.x()*pt.y()*( 1. + refcoor_Q2c_3D[3*i]*pt.x() )*
3758 ( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() );
3759 else if constexpr(i==8 || i==10 || i==16 || i==18)
3760 return 0.25*refcoor_Q2c_3D[3*i+1]*refcoor_Q2c_3D[3*i+2]*refcoor_Q2c_3D[3*i+2]*
3761 pt.y()*pt.z()*( 1. - pt.x()*pt.x() )*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() );
3762 else if constexpr(i==9 || i==11 || i==17 || i==19)
3763 return 0.5*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+2]*refcoor_Q2c_3D[3*i+2]*pt.x()*
3764 ( 1. + refcoor_Q2c_3D[3*i]*pt.x() )*(1. - pt.y()*pt.y() );
3765 else if constexpr(i==12 || i==13 || i==14 || i==15)
3766 return -0.5*refcoor_Q2c_3D[3*i]*refcoor_Q2c_3D[3*i+1]*pt.x()*pt.y()*
3767 ( 1. + refcoor_Q2c_3D[3*i]*pt.x() )*( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() );
3768 else if constexpr(i==20 || i == 23)
3769 return -2.*refcoor_Q2c_3D[3*i+2]*refcoor_Q2c_3D[3*i+2]*pt.x()*( 1. -
3770 pt.y()*pt.y() );
3771 else if constexpr(i==21 || i == 24)
3772 return -refcoor_Q2c_3D[3*i]*pt.x()*(1. + refcoor_Q2c_3D[3*i]*pt.x() )*
3773 ( 1. - pt.y()*pt.y() );
3774 else if constexpr(i==22 || i==25)
3775 return -refcoor_Q2c_3D[3*i+1]*pt.y()*( 1. - pt.x()*pt.x() )*
3776 ( 1. + refcoor_Q2c_3D[3*i+1]*pt.y() );
3777 else if constexpr(i==26)
3778 return -2.*( 1. - pt.x()*pt.x() )*( 1. - pt.y()*pt.y() ) ;
3779 }
3780
3781 static const FunctionXYZ _FuncDiffHess3dQ2c[243] = {
3782 basisFuncDiffrr3dQ2c<0>,basisFuncDiffrs3dQ2c<0>,basisFuncDiffrt3dQ2c<0>,basisFuncDiffsr3dQ2c<0>,basisFuncDiffss3dQ2c<0>,basisFuncDiffst3dQ2c<0>,basisFuncDifftr3dQ2c<0>,basisFuncDiffts3dQ2c<0>,basisFuncDifftt3dQ2c<0>,
3783 basisFuncDiffrr3dQ2c<1>,basisFuncDiffrs3dQ2c<1>,basisFuncDiffrt3dQ2c<1>,basisFuncDiffsr3dQ2c<1>,basisFuncDiffss3dQ2c<1>,basisFuncDiffst3dQ2c<1>,basisFuncDifftr3dQ2c<1>,basisFuncDiffts3dQ2c<1>,basisFuncDifftt3dQ2c<1>,
3784 basisFuncDiffrr3dQ2c<2>,basisFuncDiffrs3dQ2c<2>,basisFuncDiffrt3dQ2c<2>,basisFuncDiffsr3dQ2c<2>,basisFuncDiffss3dQ2c<2>,basisFuncDiffst3dQ2c<2>,basisFuncDifftr3dQ2c<2>,basisFuncDiffts3dQ2c<2>,basisFuncDifftt3dQ2c<2>,
3785 basisFuncDiffrr3dQ2c<3>,basisFuncDiffrs3dQ2c<3>,basisFuncDiffrt3dQ2c<3>,basisFuncDiffsr3dQ2c<3>,basisFuncDiffss3dQ2c<3>,basisFuncDiffst3dQ2c<3>,basisFuncDifftr3dQ2c<3>,basisFuncDiffts3dQ2c<3>,basisFuncDifftt3dQ2c<3>,
3786 basisFuncDiffrr3dQ2c<4>,basisFuncDiffrs3dQ2c<4>,basisFuncDiffrt3dQ2c<4>,basisFuncDiffsr3dQ2c<4>,basisFuncDiffss3dQ2c<4>,basisFuncDiffst3dQ2c<4>,basisFuncDifftr3dQ2c<4>,basisFuncDiffts3dQ2c<4>,basisFuncDifftt3dQ2c<4>,
3787 basisFuncDiffrr3dQ2c<5>,basisFuncDiffrs3dQ2c<5>,basisFuncDiffrt3dQ2c<5>,basisFuncDiffsr3dQ2c<5>,basisFuncDiffss3dQ2c<5>,basisFuncDiffst3dQ2c<5>,basisFuncDifftr3dQ2c<5>,basisFuncDiffts3dQ2c<5>,basisFuncDifftt3dQ2c<5>,
3788 basisFuncDiffrr3dQ2c<6>,basisFuncDiffrs3dQ2c<6>,basisFuncDiffrt3dQ2c<6>,basisFuncDiffsr3dQ2c<6>,basisFuncDiffss3dQ2c<6>,basisFuncDiffst3dQ2c<6>,basisFuncDifftr3dQ2c<6>,basisFuncDiffts3dQ2c<6>,basisFuncDifftt3dQ2c<6>,
3789 basisFuncDiffrr3dQ2c<7>,basisFuncDiffrs3dQ2c<7>,basisFuncDiffrt3dQ2c<7>,basisFuncDiffsr3dQ2c<7>,basisFuncDiffss3dQ2c<7>,basisFuncDiffst3dQ2c<7>,basisFuncDifftr3dQ2c<7>,basisFuncDiffts3dQ2c<7>,basisFuncDifftt3dQ2c<7>,
3790 basisFuncDiffrr3dQ2c<8>,basisFuncDiffrs3dQ2c<8>,basisFuncDiffrt3dQ2c<8>,basisFuncDiffsr3dQ2c<8>,basisFuncDiffss3dQ2c<8>,basisFuncDiffst3dQ2c<8>,basisFuncDifftr3dQ2c<8>,basisFuncDiffts3dQ2c<8>,basisFuncDifftt3dQ2c<8>,
3791 basisFuncDiffrr3dQ2c<9>,basisFuncDiffrs3dQ2c<9>,basisFuncDiffrt3dQ2c<9>,basisFuncDiffsr3dQ2c<9>,basisFuncDiffss3dQ2c<9>,basisFuncDiffst3dQ2c<9>,basisFuncDifftr3dQ2c<9>,basisFuncDiffts3dQ2c<9>,basisFuncDifftt3dQ2c<9>,
3792 basisFuncDiffrr3dQ2c<10>,basisFuncDiffrs3dQ2c<10>,basisFuncDiffrt3dQ2c<10>,basisFuncDiffsr3dQ2c<10>,basisFuncDiffss3dQ2c<10>,basisFuncDiffst3dQ2c<10>,basisFuncDifftr3dQ2c<10>,basisFuncDiffts3dQ2c<10>,basisFuncDifftt3dQ2c<10>,
3793 basisFuncDiffrr3dQ2c<11>,basisFuncDiffrs3dQ2c<11>,basisFuncDiffrt3dQ2c<11>,basisFuncDiffsr3dQ2c<11>,basisFuncDiffss3dQ2c<11>,basisFuncDiffst3dQ2c<11>,basisFuncDifftr3dQ2c<11>,basisFuncDiffts3dQ2c<11>,basisFuncDifftt3dQ2c<11>,
3794 basisFuncDiffrr3dQ2c<12>,basisFuncDiffrs3dQ2c<12>,basisFuncDiffrt3dQ2c<12>,basisFuncDiffsr3dQ2c<12>,basisFuncDiffss3dQ2c<12>,basisFuncDiffst3dQ2c<12>,basisFuncDifftr3dQ2c<12>,basisFuncDiffts3dQ2c<12>,basisFuncDifftt3dQ2c<12>,
3795 basisFuncDiffrr3dQ2c<13>,basisFuncDiffrs3dQ2c<13>,basisFuncDiffrt3dQ2c<13>,basisFuncDiffsr3dQ2c<13>,basisFuncDiffss3dQ2c<13>,basisFuncDiffst3dQ2c<13>,basisFuncDifftr3dQ2c<13>,basisFuncDiffts3dQ2c<13>,basisFuncDifftt3dQ2c<13>,
3796 basisFuncDiffrr3dQ2c<14>,basisFuncDiffrs3dQ2c<14>,basisFuncDiffrt3dQ2c<14>,basisFuncDiffsr3dQ2c<14>,basisFuncDiffss3dQ2c<14>,basisFuncDiffst3dQ2c<14>,basisFuncDifftr3dQ2c<14>,basisFuncDiffts3dQ2c<14>,basisFuncDifftt3dQ2c<14>,
3797 basisFuncDiffrr3dQ2c<15>,basisFuncDiffrs3dQ2c<15>,basisFuncDiffrt3dQ2c<15>,basisFuncDiffsr3dQ2c<15>,basisFuncDiffss3dQ2c<15>,basisFuncDiffst3dQ2c<15>,basisFuncDifftr3dQ2c<15>,basisFuncDiffts3dQ2c<15>,basisFuncDifftt3dQ2c<15>,
3798 basisFuncDiffrr3dQ2c<16>,basisFuncDiffrs3dQ2c<16>,basisFuncDiffrt3dQ2c<16>,basisFuncDiffsr3dQ2c<16>,basisFuncDiffss3dQ2c<16>,basisFuncDiffst3dQ2c<16>,basisFuncDifftr3dQ2c<16>,basisFuncDiffts3dQ2c<16>,basisFuncDifftt3dQ2c<16>,
3799 basisFuncDiffrr3dQ2c<17>,basisFuncDiffrs3dQ2c<17>,basisFuncDiffrt3dQ2c<17>,basisFuncDiffsr3dQ2c<17>,basisFuncDiffss3dQ2c<17>,basisFuncDiffst3dQ2c<17>,basisFuncDifftr3dQ2c<17>,basisFuncDiffts3dQ2c<17>,basisFuncDifftt3dQ2c<17>,
3800 basisFuncDiffrr3dQ2c<18>,basisFuncDiffrs3dQ2c<18>,basisFuncDiffrt3dQ2c<18>,basisFuncDiffsr3dQ2c<18>,basisFuncDiffss3dQ2c<18>,basisFuncDiffst3dQ2c<18>,basisFuncDifftr3dQ2c<18>,basisFuncDiffts3dQ2c<18>,basisFuncDifftt3dQ2c<18>,
3801 basisFuncDiffrr3dQ2c<19>,basisFuncDiffrs3dQ2c<19>,basisFuncDiffrt3dQ2c<19>,basisFuncDiffsr3dQ2c<19>,basisFuncDiffss3dQ2c<19>,basisFuncDiffst3dQ2c<19>,basisFuncDifftr3dQ2c<19>,basisFuncDiffts3dQ2c<19>,basisFuncDifftt3dQ2c<19>,
3802 basisFuncDiffrr3dQ2c<20>,basisFuncDiffrs3dQ2c<20>,basisFuncDiffrt3dQ2c<20>,basisFuncDiffsr3dQ2c<20>,basisFuncDiffss3dQ2c<20>,basisFuncDiffst3dQ2c<20>,basisFuncDifftr3dQ2c<20>,basisFuncDiffts3dQ2c<20>,basisFuncDifftt3dQ2c<20>,
3803 basisFuncDiffrr3dQ2c<21>,basisFuncDiffrs3dQ2c<21>,basisFuncDiffrt3dQ2c<21>,basisFuncDiffsr3dQ2c<21>,basisFuncDiffss3dQ2c<21>,basisFuncDiffst3dQ2c<21>,basisFuncDifftr3dQ2c<21>,basisFuncDiffts3dQ2c<21>,basisFuncDifftt3dQ2c<21>,
3804 basisFuncDiffrr3dQ2c<22>,basisFuncDiffrs3dQ2c<22>,basisFuncDiffrt3dQ2c<22>,basisFuncDiffsr3dQ2c<22>,basisFuncDiffss3dQ2c<22>,basisFuncDiffst3dQ2c<22>,basisFuncDifftr3dQ2c<22>,basisFuncDiffts3dQ2c<22>,basisFuncDifftt3dQ2c<22>,
3805 basisFuncDiffrr3dQ2c<23>,basisFuncDiffrs3dQ2c<23>,basisFuncDiffrt3dQ2c<23>,basisFuncDiffsr3dQ2c<23>,basisFuncDiffss3dQ2c<23>,basisFuncDiffst3dQ2c<23>,basisFuncDifftr3dQ2c<23>,basisFuncDiffts3dQ2c<23>,basisFuncDifftt3dQ2c<23>,
3806 basisFuncDiffrr3dQ2c<24>,basisFuncDiffrs3dQ2c<24>,basisFuncDiffrt3dQ2c<24>,basisFuncDiffsr3dQ2c<24>,basisFuncDiffss3dQ2c<24>,basisFuncDiffst3dQ2c<24>,basisFuncDifftr3dQ2c<24>,basisFuncDiffts3dQ2c<24>,basisFuncDifftt3dQ2c<24>,
3807 basisFuncDiffrr3dQ2c<25>,basisFuncDiffrs3dQ2c<25>,basisFuncDiffrt3dQ2c<25>,basisFuncDiffsr3dQ2c<25>,basisFuncDiffss3dQ2c<25>,basisFuncDiffst3dQ2c<25>,basisFuncDifftr3dQ2c<25>,basisFuncDiffts3dQ2c<25>,basisFuncDifftt3dQ2c<25>,
3808 basisFuncDiffrr3dQ2c<26>,basisFuncDiffrs3dQ2c<26>,basisFuncDiffrt3dQ2c<26>,basisFuncDiffsr3dQ2c<26>,basisFuncDiffss3dQ2c<26>,basisFuncDiffst3dQ2c<26>,basisFuncDifftr3dQ2c<26>,basisFuncDiffts3dQ2c<26>,basisFuncDifftt3dQ2c<26>
3809 };
3810
3811 const BasisFunction basisFunction3dQ2c("basisFunction3dQ2c",27,3,_Func3dQ2c,_FuncDiff3dQ2c,_FuncDiffHess3dQ2c);
3812
3813 /************************************************************************
3814 * basisFunction3dR1
3815 *************************************************************************/
3816
3817 static const double refcoor_R1_3D[] = {0.,0.,-1., 1.,0.,-1., 0.,1.,-1., 0.,0.,1., 1.,0.,1., 0.,1.,1.};
3818
3819 template <int i>
3820 964608 double basisFunc3dR1(const Point& pt) {
3821 if constexpr(i < 3)
3822 482304 return 0.5*(basisFunc2dP1<i>(pt))*( 1. - pt.z() );
3823 else {
3824 482304 return 0.5*(basisFunc2dP1<i-3>(pt))*( 1. + pt.z() );
3825 }
3826 }
3827
3828 static const FunctionXYZ _Func3dR1[] = {basisFunc3dR1<0>, basisFunc3dR1<1>, basisFunc3dR1<2>, basisFunc3dR1<3>, basisFunc3dR1<4>, basisFunc3dR1<5>};
3829
3830 // first derivatives
3831
3832 template <int i>
3833 793536 double basisFuncDiffr3dR1(const Point& pt) {
3834 if constexpr(i < 3)
3835 396768 return 0.5*( 1. - pt.z() )*basisFuncDiffr2dP1<i>(pt);
3836 else
3837 396768 return 0.5*( 1. + pt.z() )*basisFuncDiffr2dP1<i - 3>(pt);
3838 }
3839
3840 template <int i>
3841 793536 double basisFuncDiffs3dR1(const Point& pt) {
3842 if constexpr(i < 3)
3843 396768 return 0.5*( 1. - pt.z() )*basisFuncDiffs2dP1<i>(pt);
3844 else
3845 396768 return 0.5*( 1. + pt.z() )*basisFuncDiffs2dP1<i - 3>(pt);
3846 }
3847
3848 template <int i>
3849 793536 double basisFuncDifft3dR1(const Point& pt) {
3850 if constexpr(i < 3)
3851 396768 return -0.5*(basisFunc2dP1<i>(pt));
3852 else
3853 396768 return 0.5*(basisFunc2dP1<i-3>(pt));
3854 }
3855
3856
3857 static const FunctionXYZ _FuncDiff3dR1[] = {
3858 basisFuncDiffr3dR1<0>, basisFuncDiffs3dR1<0>, basisFuncDifft3dR1<0>,
3859 basisFuncDiffr3dR1<1>, basisFuncDiffs3dR1<1>, basisFuncDifft3dR1<1>,
3860 basisFuncDiffr3dR1<2>, basisFuncDiffs3dR1<2>, basisFuncDifft3dR1<2>,
3861 basisFuncDiffr3dR1<3>, basisFuncDiffs3dR1<3>, basisFuncDifft3dR1<3>,
3862 basisFuncDiffr3dR1<4>, basisFuncDiffs3dR1<4>, basisFuncDifft3dR1<4>,
3863 basisFuncDiffr3dR1<5>, basisFuncDiffs3dR1<5>, basisFuncDifft3dR1<5>
3864 };
3865
3866 // Second derivatives
3867 template <int i>
3868 double basisFuncDiffrr3dR1(const Point& pt) {
3869 if constexpr(i < 3)
3870 return 0.5*( 1. - pt.z() )*basisFuncDiffrr2dP1<i>(pt);
3871 else
3872 return 0.5*( 1. + pt.z() )*basisFuncDiffrr2dP1<i-3>(pt);
3873 }
3874
3875 template <int i>
3876 double basisFuncDiffrs3dR1(const Point& pt) {
3877 if constexpr(i < 3)
3878 return 0.5*( 1. - pt.z() )*basisFuncDiffrs2dP1<i>(pt);
3879 else
3880 return 0.5*( 1. + pt.z() )*basisFuncDiffrs2dP1<i-3>(pt);
3881 }
3882
3883 template <int i>
3884 double basisFuncDiffrt3dR1(const Point& pt) {
3885 if constexpr(i < 3)
3886 return -0.5*basisFuncDiffr2dP1<i>(pt);
3887 else
3888 return 0.5*basisFuncDiffr2dP1<i-3>(pt);
3889 }
3890
3891 template <int i>
3892 double basisFuncDiffsr3dR1(const Point& pt) {
3893 if constexpr(i < 3)
3894 return 0.5*( 1. - pt.z() )*basisFuncDiffsr2dP1<i>(pt);
3895 else
3896 return 0.5*( 1. + pt.z() )*basisFuncDiffsr2dP1<i-3>(pt);
3897 }
3898
3899 template <int i>
3900 double basisFuncDiffss3dR1(const Point& pt) {
3901 if constexpr(i < 3)
3902 return 0.5*( 1. - pt.z() )*basisFuncDiffss2dP1<i>(pt);
3903 else
3904 return 0.5*( 1. + pt.z() )*basisFuncDiffss2dP1<i-3>(pt);
3905 }
3906
3907 template <int i>
3908 double basisFuncDiffst3dR1(const Point& pt) {
3909 if constexpr(i < 3)
3910 return -0.5*basisFuncDiffs2dP1<i>(pt);
3911 else
3912 return 0.5*basisFuncDiffs2dP1<i-3>(pt);
3913 }
3914
3915 template <int i>
3916 double basisFuncDifftr3dR1(const Point& pt) {
3917 if constexpr(i < 3)
3918 return -0.5*basisFuncDiffr2dP1<i>(pt);
3919 else
3920 return 0.5*basisFuncDiffr2dP1<i>(pt);
3921 }
3922
3923 template <int i>
3924 double basisFuncDiffts3dR1(const Point& pt) {
3925 if constexpr(i < 3)
3926 return -0.5*basisFuncDiffs2dP1<i>(pt);
3927 else
3928 return 0.5*basisFuncDiffr2dP1<i>(pt);
3929 }
3930
3931 template <int i>
3932 double basisFuncDifftt3dR1(const Point& pt) {
3933 (void) pt;
3934 return 0.;
3935 }
3936
3937 static const FunctionXYZ _FuncDiffHess3dR1[] = {
3938 basisFuncDiffrr3dR1<0>, basisFuncDiffrs3dR1<0>, basisFuncDiffrt3dR1<0>, basisFuncDiffsr3dR1<0>, basisFuncDiffss3dR1<0>, basisFuncDiffst3dR1<0>, basisFuncDifftr3dR1<0>, basisFuncDiffts3dR1<0>, basisFuncDifftt3dR1<0>,
3939 basisFuncDiffrr3dR1<1>, basisFuncDiffrs3dR1<1>, basisFuncDiffrt3dR1<1>, basisFuncDiffsr3dR1<1>, basisFuncDiffss3dR1<1>, basisFuncDiffst3dR1<1>, basisFuncDifftr3dR1<1>, basisFuncDiffts3dR1<1>, basisFuncDifftt3dR1<1>,
3940 basisFuncDiffrr3dR1<2>, basisFuncDiffrs3dR1<2>, basisFuncDiffrt3dR1<2>, basisFuncDiffsr3dR1<2>, basisFuncDiffss3dR1<2>, basisFuncDiffst3dR1<2>, basisFuncDifftr3dR1<2>, basisFuncDiffts3dR1<2>, basisFuncDifftt3dR1<2>,
3941 basisFuncDiffrr3dR1<3>, basisFuncDiffrs3dR1<3>, basisFuncDiffrt3dR1<3>, basisFuncDiffsr3dR1<3>, basisFuncDiffss3dR1<3>, basisFuncDiffst3dR1<3>, basisFuncDifftr3dR1<3>, basisFuncDiffts3dR1<3>, basisFuncDifftt3dR1<3>,
3942 basisFuncDiffrr3dR1<4>, basisFuncDiffrs3dR1<4>, basisFuncDiffrt3dR1<4>, basisFuncDiffsr3dR1<4>, basisFuncDiffss3dR1<4>, basisFuncDiffst3dR1<4>, basisFuncDifftr3dR1<4>, basisFuncDiffts3dR1<4>, basisFuncDifftt3dR1<4>,
3943 basisFuncDiffrr3dR1<5>, basisFuncDiffrs3dR1<5>, basisFuncDiffrt3dR1<5>, basisFuncDiffsr3dR1<5>, basisFuncDiffss3dR1<5>, basisFuncDiffst3dR1<5>, basisFuncDifftr3dR1<5>, basisFuncDiffts3dR1<5>, basisFuncDifftt3dR1<5>
3944 };
3945
3946 const BasisFunction basisFunction3dR1("basisFunction3dR1",6,3,_Func3dR1,_FuncDiff3dR1,_FuncDiffHess3dR1);
3947
3948 /************************************************************************
3949 * basisFunction3dP1xP2
3950 *************************************************************************/
3951
3952 // NOTE: Auxiliary shape functions and derivatives for a second order line
3953 double basis1Func1dP2t(const Point& pt);
3954 double basis2Func1dP2t(const Point& pt);
3955 double basis3Func1dP2t(const Point& pt);
3956
3957 1225116 double basis1Func1dP2t(const Point& pt) {
3958 1225116 return -0.5 * ( 1. - pt.z() ) * pt.z() ;
3959 }
3960 1225116 double basis2Func1dP2t(const Point& pt) {
3961 1225116 return 0.5 * ( 1. + pt.z() ) * pt.z() ;
3962 }
3963 1225116 double basis3Func1dP2t(const Point& pt) {
3964 1225116 return ( 1. - pt.z() ) * ( 1. + pt.z() ) ;
3965 }
3966
3967 double basis1FuncDifft1dP2(const Point& pt);
3968 double basis2FuncDifft1dP2(const Point& pt);
3969 double basis3FuncDifft1dP2(const Point& pt);
3970
3971 288708 double basis1FuncDifft1dP2(const Point& pt) {
3972 288708 return pt.z() - 0.5 ;
3973 }
3974 288708 double basis2FuncDifft1dP2(const Point& pt) {
3975 288708 return pt.z() + 0.5;
3976 }
3977 288708 double basis3FuncDifft1dP2(const Point& pt) {
3978 288708 return -2. * pt.z();
3979 }
3980
3981 static const double refcoor_P1xP2_3D[] = {0.,0.,-1., 1.,0.,-1., 0.,1.,-1., 0.,0.,1., 1.,0.,1., 0.,1.,1., 0.,0.,0., 1.,0.,0., 0.,1.,0.};
3982
3983 template <int i>
3984 3886200 double basisFunc3dP1xP2(const Point& pt) {
3985 if constexpr(i < 3)
3986 1295400 return (basisFunc2dP1<i >(pt)) * (basis1Func1dP2t(pt));
3987 else if constexpr( i < 6 ) {
3988 1295400 return (basisFunc2dP1<i-3>(pt)) * (basis2Func1dP2t(pt));
3989 } else {
3990 1295400 return (basisFunc2dP1<i-6>(pt)) * (basis3Func1dP2t(pt));
3991 }
3992 }
3993
3994 static const FunctionXYZ _Func3dP1xP2[] = {basisFunc3dP1xP2<0>, basisFunc3dP1xP2<1>, basisFunc3dP1xP2<2>,
3995 basisFunc3dP1xP2<3>, basisFunc3dP1xP2<4>, basisFunc3dP1xP2<5>,
3996 basisFunc3dP1xP2<6>, basisFunc3dP1xP2<7>, basisFunc3dP1xP2<8>};
3997
3998 // first derivatives
3999
4000 template <int i>
4001 1732248 double basisFuncDiffr3dP1xP2(const Point& pt) {
4002 if constexpr(i < 3)
4003 577416 return (basisFuncDiffr2dP1<i >(pt)) * (basis1Func1dP2t(pt));
4004 else if constexpr( i < 6 ) {
4005 577416 return (basisFuncDiffr2dP1<i-3>(pt)) * (basis2Func1dP2t(pt));
4006 } else {
4007 577416 return (basisFuncDiffr2dP1<i-6>(pt)) * (basis3Func1dP2t(pt));
4008 }
4009 }
4010
4011 template <int i>
4012 1732248 double basisFuncDiffs3dP1xP2(const Point& pt) {
4013 if constexpr(i < 3)
4014 577416 return (basisFuncDiffs2dP1<i >(pt)) * (basis1Func1dP2t(pt));
4015 else if constexpr( i < 6 ) {
4016 577416 return (basisFuncDiffs2dP1<i-3>(pt)) * (basis2Func1dP2t(pt));
4017 } else {
4018 577416 return (basisFuncDiffs2dP1<i-6>(pt)) * (basis3Func1dP2t(pt));
4019 }
4020 }
4021
4022 template <int i>
4023 1732248 double basisFuncDifft3dP1xP2(const Point& pt) {
4024 if constexpr(i < 3)
4025 577416 return (basisFunc2dP1<i >(pt)) * (basis1FuncDifft1dP2(pt));
4026 else if constexpr( i < 6 ) {
4027 577416 return (basisFunc2dP1<i-3>(pt)) * (basis2FuncDifft1dP2(pt));
4028 } else {
4029 577416 return (basisFunc2dP1<i-6>(pt)) * (basis3FuncDifft1dP2(pt));
4030 }
4031 }
4032
4033 static const FunctionXYZ _FuncDiff3dP1xP2[] = {
4034 basisFuncDiffr3dP1xP2<0>, basisFuncDiffs3dP1xP2<0>, basisFuncDifft3dP1xP2<0>,
4035 basisFuncDiffr3dP1xP2<1>, basisFuncDiffs3dP1xP2<1>, basisFuncDifft3dP1xP2<1>,
4036 basisFuncDiffr3dP1xP2<2>, basisFuncDiffs3dP1xP2<2>, basisFuncDifft3dP1xP2<2>,
4037 basisFuncDiffr3dP1xP2<3>, basisFuncDiffs3dP1xP2<3>, basisFuncDifft3dP1xP2<3>,
4038 basisFuncDiffr3dP1xP2<4>, basisFuncDiffs3dP1xP2<4>, basisFuncDifft3dP1xP2<4>,
4039 basisFuncDiffr3dP1xP2<5>, basisFuncDiffs3dP1xP2<5>, basisFuncDifft3dP1xP2<5>,
4040 basisFuncDiffr3dP1xP2<6>, basisFuncDiffs3dP1xP2<6>, basisFuncDifft3dP1xP2<6>,
4041 basisFuncDiffr3dP1xP2<7>, basisFuncDiffs3dP1xP2<7>, basisFuncDifft3dP1xP2<7>,
4042 basisFuncDiffr3dP1xP2<8>, basisFuncDiffs3dP1xP2<8>, basisFuncDifft3dP1xP2<8>
4043 };
4044
4045 // Second derivatives
4046 template <int i>
4047 double basisFuncDiffrr3dP1xP2(const Point& pt) {
4048 if constexpr(i < 3) {
4049 return (basisFuncDiffrr2dP1<i >(pt)) * (basis1Func1dP2t(pt));
4050 } else if constexpr( i < 6 ) {
4051 return (basisFuncDiffrr2dP1<i-3>(pt)) * (basis2Func1dP2t(pt));
4052 } else {
4053 return (basisFuncDiffrr2dP1<i-6>(pt)) * (basis3Func1dP2t(pt));
4054 }
4055 }
4056
4057 template <int i>
4058 double basisFuncDiffrs3dP1xP2(const Point& pt) {
4059 if constexpr(i < 3) {
4060 return (basisFuncDiffrs2dP1<i >(pt)) * (basis1Func1dP2t(pt));
4061 } else if constexpr( i < 6 ) {
4062 return (basisFuncDiffrs2dP1<i-3>(pt)) * (basis2Func1dP2t(pt));
4063 } else {
4064 return (basisFuncDiffrs2dP1<i-6>(pt)) * (basis3Func1dP2t(pt));
4065 }
4066 }
4067
4068 template <int i>
4069 double basisFuncDiffrt3dP1xP2(const Point& pt) {
4070 if constexpr(i < 3) {
4071 return (basisFuncDiffr2dP1<i >(pt)) * (basis1FuncDifft1dP2(pt));
4072 } else if constexpr( i < 6 ) {
4073 return (basisFuncDiffr2dP1<i-3>(pt)) * (basis2FuncDifft1dP2(pt));
4074 } else {
4075 return (basisFuncDiffr2dP1<i-6>(pt)) * (basis3FuncDifft1dP2(pt));
4076 }
4077 }
4078
4079 template <int i>
4080 double basisFuncDiffsr3dP1xP2(const Point& pt) {
4081 if constexpr(i < 3)
4082 return (basisFuncDiffsr2dP1<i >(pt)) * (basis1Func1dP2t(pt));
4083 else if constexpr( i < 6 ) {
4084 return (basisFuncDiffsr2dP1<i-3>(pt)) * (basis2Func1dP2t(pt));
4085 } else {
4086 return (basisFuncDiffsr2dP1<i-6>(pt)) * (basis3Func1dP2t(pt));
4087 }
4088
4089 }
4090
4091 template <int i>
4092 double basisFuncDiffss3dP1xP2(const Point& pt) {
4093 if constexpr(i < 3)
4094 return (basisFuncDiffss2dP1<i >(pt)) * (basis1Func1dP2t(pt));
4095 else if constexpr( i < 6 ) {
4096 return (basisFuncDiffss2dP1<i-3>(pt)) * (basis2Func1dP2t(pt));
4097 } else {
4098 return (basisFuncDiffss2dP1<i-6>(pt)) * (basis3Func1dP2t(pt));
4099 }
4100 }
4101
4102 template <int i>
4103 double basisFuncDiffst3dP1xP2(const Point& pt) {
4104 if constexpr(i < 3)
4105 return (basisFuncDiffs2dP1<i >(pt)) * (basis1FuncDifft1dP2(pt));
4106 else if constexpr( i < 6 ) {
4107 return (basisFuncDiffs2dP1<i-3>(pt)) * (basis2FuncDifft1dP2(pt));
4108 } else {
4109 return (basisFuncDiffs2dP1<i-6>(pt)) * (basis3FuncDifft1dP2(pt));
4110 }
4111 }
4112
4113
4114 template <int i>
4115 double basisFuncDifftr3dP1xP2(const Point& pt) {
4116 if constexpr(i < 3)
4117 return (basisFuncDiffr2dP1<i >(pt)) * (basis1FuncDifft1dP2(pt));
4118 else if constexpr( i < 6 ) {
4119 return (basisFuncDiffr2dP1<i-3>(pt)) * (basis2FuncDifft1dP2(pt));
4120 } else {
4121 return (basisFuncDiffr2dP1<i-6>(pt)) * (basis3FuncDifft1dP2(pt));
4122 }
4123 }
4124
4125 template <int i>
4126 double basisFuncDiffts3dP1xP2(const Point& pt) {
4127 if constexpr(i < 3)
4128 return (basisFuncDiffs2dP1<i >(pt)) * (basis1FuncDifft1dP2(pt));
4129 else if constexpr( i < 6 ) {
4130 return (basisFuncDiffs2dP1<i-3>(pt)) * (basis2FuncDifft1dP2(pt));
4131 } else {
4132 return (basisFuncDiffs2dP1<i-6>(pt)) * (basis3FuncDifft1dP2(pt));
4133 }
4134 }
4135
4136 template <int i>
4137 double basisFuncDifftt3dP1xP2(const Point& pt) {
4138 if constexpr(i < 3)
4139 return (basisFunc2dP1<i >(pt)) * (basis1FuncDiffrr1dP2(pt));
4140 else if constexpr( i < 6 ) {
4141 return (basisFunc2dP1<i-3>(pt)) * (basis2FuncDiffrr1dP2(pt));
4142 } else {
4143 return (basisFunc2dP1<i-6>(pt)) * (basis3FuncDiffrr1dP2(pt));
4144 }
4145 }
4146
4147 static const FunctionXYZ _FuncDiffHess3dP1xP2[] = {
4148 basisFuncDiffrr3dP1xP2<0>, basisFuncDiffrs3dP1xP2<0>, basisFuncDiffrt3dP1xP2<0>, basisFuncDiffsr3dP1xP2<0>, basisFuncDiffss3dP1xP2<0>, basisFuncDiffst3dP1xP2<0>, basisFuncDifftr3dP1xP2<0>, basisFuncDiffts3dP1xP2<0>, basisFuncDifftt3dP1xP2<0>,
4149 basisFuncDiffrr3dP1xP2<1>, basisFuncDiffrs3dP1xP2<1>, basisFuncDiffrt3dP1xP2<1>, basisFuncDiffsr3dP1xP2<1>, basisFuncDiffss3dP1xP2<1>, basisFuncDiffst3dP1xP2<1>, basisFuncDifftr3dP1xP2<1>, basisFuncDiffts3dP1xP2<1>, basisFuncDifftt3dP1xP2<1>,
4150 basisFuncDiffrr3dP1xP2<2>, basisFuncDiffrs3dP1xP2<2>, basisFuncDiffrt3dP1xP2<2>, basisFuncDiffsr3dP1xP2<2>, basisFuncDiffss3dP1xP2<2>, basisFuncDiffst3dP1xP2<2>, basisFuncDifftr3dP1xP2<2>, basisFuncDiffts3dP1xP2<2>, basisFuncDifftt3dP1xP2<2>,
4151 basisFuncDiffrr3dP1xP2<3>, basisFuncDiffrs3dP1xP2<3>, basisFuncDiffrt3dP1xP2<3>, basisFuncDiffsr3dP1xP2<3>, basisFuncDiffss3dP1xP2<3>, basisFuncDiffst3dP1xP2<3>, basisFuncDifftr3dP1xP2<3>, basisFuncDiffts3dP1xP2<3>, basisFuncDifftt3dP1xP2<3>,
4152 basisFuncDiffrr3dP1xP2<4>, basisFuncDiffrs3dP1xP2<4>, basisFuncDiffrt3dP1xP2<4>, basisFuncDiffsr3dP1xP2<4>, basisFuncDiffss3dP1xP2<4>, basisFuncDiffst3dP1xP2<4>, basisFuncDifftr3dP1xP2<4>, basisFuncDiffts3dP1xP2<4>, basisFuncDifftt3dP1xP2<4>,
4153 basisFuncDiffrr3dP1xP2<5>, basisFuncDiffrs3dP1xP2<5>, basisFuncDiffrt3dP1xP2<5>, basisFuncDiffsr3dP1xP2<5>, basisFuncDiffss3dP1xP2<5>, basisFuncDiffst3dP1xP2<5>, basisFuncDifftr3dP1xP2<5>, basisFuncDiffts3dP1xP2<5>, basisFuncDifftt3dP1xP2<5>,
4154 basisFuncDiffrr3dP1xP2<6>, basisFuncDiffrs3dP1xP2<6>, basisFuncDiffrt3dP1xP2<6>, basisFuncDiffsr3dP1xP2<6>, basisFuncDiffss3dP1xP2<6>, basisFuncDiffst3dP1xP2<6>, basisFuncDifftr3dP1xP2<6>, basisFuncDiffts3dP1xP2<6>, basisFuncDifftt3dP1xP2<6>,
4155 basisFuncDiffrr3dP1xP2<7>, basisFuncDiffrs3dP1xP2<7>, basisFuncDiffrt3dP1xP2<7>, basisFuncDiffsr3dP1xP2<7>, basisFuncDiffss3dP1xP2<7>, basisFuncDiffst3dP1xP2<7>, basisFuncDifftr3dP1xP2<7>, basisFuncDiffts3dP1xP2<7>, basisFuncDifftt3dP1xP2<7>,
4156 basisFuncDiffrr3dP1xP2<8>, basisFuncDiffrs3dP1xP2<8>, basisFuncDiffrt3dP1xP2<8>, basisFuncDiffsr3dP1xP2<8>, basisFuncDiffss3dP1xP2<8>, basisFuncDiffst3dP1xP2<8>, basisFuncDifftr3dP1xP2<8>, basisFuncDiffts3dP1xP2<8>, basisFuncDifftt3dP1xP2<8>
4157 };
4158
4159 const BasisFunction basisFunction3dP1xP2("basisFunction3dP1xP2",9,3,_Func3dP1xP2,_FuncDiff3dP1xP2,_FuncDiffHess3dP1xP2);
4160
4161
4162 /************************************************************************
4163 * basisFunction3dR2
4164 *************************************************************************/
4165
4166 static const double refcoor_R2_3D[] = {0.,0.,-1., 1.,0.,-1., 0.,1.,-1., 0.,0.,1., 1.,0.,1., 0.,1.,1.,
4167 0.5,0.,-1., 0.5,0.5,-1., 0.,0.5,-1., 0.5,0.,1., 0.5,0.5,1., 0.,0.5,1., 0.,0.,0., 1.,0.,0., 0.,1.,0.
4168 };
4169
4170 //int ip[] = {2,3,1}
4171 // #define ip(i) ( (i) == (0) ? (2) : ( (i) == (1) ? (3) : (1) ) )
4172 template <int i>
4173 2160 double basisFunc3dR2(const Point& pt) {
4174 if constexpr(i < 3)
4175 432 return -0.5*basisFunc2dP2<i>(pt)*pt.z()*( 1. - pt.z() );
4176 else if constexpr( i < 6 )
4177 432 return 0.5*basisFunc2dP2<i-3>(pt)*pt.z()*( 1. + pt.z() );
4178 else if constexpr( i < 9 )
4179 432 return -0.5*basisFunc2dP2<i-3>(pt)*pt.z()*( 1. - pt.z() );
4180 else if constexpr( i < 12 )
4181 432 return 0.5*basisFunc2dP2<i-6>(pt)*pt.z()*( 1. + pt.z() );
4182 else
4183 432 return basisFunc2dP2<i-12>(pt)*( 1. - pt.z() )*( 1. + pt.z() );
4184 }
4185
4186 static const FunctionXYZ _Func3dR2[] = {basisFunc3dR2<0>, basisFunc3dR2<1>, basisFunc3dR2<2>, basisFunc3dR2<3>, basisFunc3dR2<4>, basisFunc3dR2<5>,
4187 basisFunc3dR2<6>, basisFunc3dR2<7>, basisFunc3dR2<8>, basisFunc3dR2<9>, basisFunc3dR2<10>, basisFunc3dR2<11>,
4188 basisFunc3dR2<12>, basisFunc3dR2<13>, basisFunc3dR2<14>
4189 };
4190
4191 // first derivatives
4192
4193 template <int i>
4194 2160 double basisFuncDiffr3dR2(const Point& pt) {
4195 if constexpr(i < 3)
4196 432 return -0.5*pt.z()*( 1. - pt.z() )*basisFuncDiffr2dP2<i>(pt);
4197 else if constexpr( i < 6 )
4198 432 return 0.5*pt.z()*( 1. + pt.z() )*basisFuncDiffr2dP2<i-3>(pt);
4199 else if constexpr( i < 9 )
4200 432 return -0.5*pt.z()*( 1. - pt.z() )*basisFuncDiffr2dP2<i-3>(pt);
4201 else if constexpr( i < 12 )
4202 432 return 0.5*pt.z()*( 1. + pt.z() )*basisFuncDiffr2dP2<i-6>(pt);
4203 else
4204 432 return ( 1. - pt.z() )*( 1. + pt.z() )*basisFuncDiffr2dP2<i-12>(pt);
4205 }
4206
4207 template <int i>
4208 2160 double basisFuncDiffs3dR2(const Point& pt) {
4209 if constexpr(i < 3)
4210 432 return -0.5*pt.z()*( 1. - pt.z() )*basisFuncDiffs2dP2<i>(pt);
4211 else if constexpr( i < 6 )
4212 432 return 0.5*pt.z()*( 1. + pt.z() )*basisFuncDiffs2dP2<i-3>(pt);
4213 else if constexpr( i < 9 )
4214 432 return -0.5*pt.z()*( 1. - pt.z() )*basisFuncDiffs2dP2<i-3>(pt);
4215 else if constexpr( i < 12 )
4216 432 return 0.5*pt.z()*( 1. + pt.z() )*basisFuncDiffs2dP2<i-6>(pt);
4217 else
4218 432 return ( 1. - pt.z() )*( 1. + pt.z() )*basisFuncDiffs2dP2<i-12>(pt);
4219 }
4220
4221 template <int i>
4222 2160 double basisFuncDifft3dR2(const Point& pt) {
4223 if constexpr(i < 3)
4224 432 return -0.5*basisFunc2dP2<i>(pt)*( 1. - 2.*pt.z() );
4225 else if constexpr( i < 6 )
4226 432 return 0.5*basisFunc2dP2<i-3>(pt)*( 1. + 2.*pt.z() );
4227 else if constexpr( i < 9 )
4228 432 return -0.5*basisFunc2dP2<i-3>(pt)*( 1. - 2.*pt.z() );
4229 else if constexpr( i < 12 )
4230 432 return 0.5*basisFunc2dP2<i-6>(pt)*( 1. + 2.*pt.z() );
4231 else
4232 432 return -2.*pt.z()*basisFunc2dP2<i-12>(pt);
4233 }
4234
4235 static const FunctionXYZ _FuncDiff3dR2[] = {
4236 basisFuncDiffr3dR2<0>, basisFuncDiffs3dR2<0>, basisFuncDifft3dR2<0>,
4237 basisFuncDiffr3dR2<1>, basisFuncDiffs3dR2<1>, basisFuncDifft3dR2<1>,
4238 basisFuncDiffr3dR2<2>, basisFuncDiffs3dR2<2>, basisFuncDifft3dR2<2>,
4239 basisFuncDiffr3dR2<3>, basisFuncDiffs3dR2<3>, basisFuncDifft3dR2<3>,
4240 basisFuncDiffr3dR2<4>, basisFuncDiffs3dR2<4>, basisFuncDifft3dR2<4>,
4241 basisFuncDiffr3dR2<5>, basisFuncDiffs3dR2<5>, basisFuncDifft3dR2<5>,
4242 basisFuncDiffr3dR2<6>, basisFuncDiffs3dR2<6>, basisFuncDifft3dR2<6>,
4243 basisFuncDiffr3dR2<7>, basisFuncDiffs3dR2<7>, basisFuncDifft3dR2<7>,
4244 basisFuncDiffr3dR2<8>, basisFuncDiffs3dR2<8>, basisFuncDifft3dR2<8>,
4245 basisFuncDiffr3dR2<9>, basisFuncDiffs3dR2<9>, basisFuncDifft3dR2<9>,
4246 basisFuncDiffr3dR2<10>, basisFuncDiffs3dR2<10>, basisFuncDifft3dR2<10>,
4247 basisFuncDiffr3dR2<11>, basisFuncDiffs3dR2<11>, basisFuncDifft3dR2<11>,
4248 basisFuncDiffr3dR2<12>, basisFuncDiffs3dR2<12>, basisFuncDifft3dR2<12>,
4249 basisFuncDiffr3dR2<13>, basisFuncDiffs3dR2<13>, basisFuncDifft3dR2<13>,
4250 basisFuncDiffr3dR2<14>, basisFuncDiffs3dR2<14>, basisFuncDifft3dR2<14>
4251 };
4252
4253
4254 // Second derivatives
4255 template <int i>
4256 double basisFuncDiffrr3dR2(const Point& pt) {
4257 if constexpr(i < 3)
4258 return -0.5*pt.z()*( 1. - pt.z() )*basisFuncDiffrr2dP2<i>(pt);
4259 else if constexpr( i < 6 )
4260 return 0.5*pt.z()*( 1. + pt.z() )*basisFuncDiffrr2dP2<i-3>(pt);
4261 else if constexpr( i < 9 )
4262 return -0.5*pt.z()*( 1. - pt.z() )*basisFuncDiffrr2dP2<i-3>(pt);
4263 else if constexpr( i < 12 )
4264 return 0.5*pt.z()*( 1. + pt.z() )*basisFuncDiffrr2dP2<i-6>(pt);
4265 else
4266 return ( 1. - pt.z() )*( 1. + pt.z() )*basisFuncDiffrr2dP2<i-12>(pt);
4267 }
4268
4269 template <int i>
4270 double basisFuncDiffrs3dR2(const Point& pt) {
4271 if constexpr(i < 3)
4272 return -0.5*pt.z()*( 1. - pt.z() )*basisFuncDiffrs2dP2<i>(pt);
4273 else if constexpr( i < 6 )
4274 return 0.5*pt.z()*( 1. + pt.z() )*basisFuncDiffrs2dP2<i-3>(pt);
4275 else if constexpr( i < 9 )
4276 return -0.5*pt.z()*( 1. - pt.z() )*basisFuncDiffrs2dP2<i-3>(pt);
4277 else if constexpr( i < 12 )
4278 return 0.5*pt.z()*( 1. + pt.z() )*basisFuncDiffrs2dP2<i-6>(pt);
4279 else
4280 return ( 1. - pt.z() )*( 1. + pt.z() )*basisFuncDiffrs2dP2<i-12>(pt);
4281 }
4282
4283 template <int i>
4284 double basisFuncDiffrt3dR2(const Point& pt) {
4285 if constexpr(i < 3)
4286 return -0.5*basisFuncDiffr2dP2<i>(pt)*( 1. - 2.*pt.z() );
4287 else if constexpr( i < 6 )
4288 return 0.5*basisFuncDiffr2dP2<i-3>(pt)*( 1. + 2.*pt.z() );
4289 else if constexpr( i < 9 )
4290 return -0.5*basisFuncDiffr2dP2<i-3>(pt)*( 1. - 2.*pt.z() );
4291 else if constexpr( i < 12 )
4292 return 0.5*basisFuncDiffr2dP2<i-6>(pt)*( 1. + 2.*pt.z() );
4293 else
4294 return -2.*pt.z()*basisFuncDiffr2dP2<i-12>(pt);
4295 }
4296
4297 template <int i>
4298 double basisFuncDiffsr3dR2(const Point& pt) {
4299 if constexpr(i < 3)
4300 return -0.5*pt.z()*( 1. - pt.z() )*basisFuncDiffsr2dP2<i>(pt);
4301 else if constexpr( i < 6 )
4302 return 0.5*pt.z()*( 1. + pt.z() )*basisFuncDiffsr2dP2<i-3>(pt);
4303 else if constexpr( i < 9 )
4304 return -0.5*pt.z()*( 1. - pt.z() )*basisFuncDiffsr2dP2<i-3>(pt);
4305 else if constexpr( i < 12 )
4306 return 0.5*pt.z()*( 1. + pt.z() )*basisFuncDiffsr2dP2<i-6>(pt);
4307 else
4308 return ( 1. - pt.z() )*( 1. + pt.z() )*basisFuncDiffsr2dP2<i-12>(pt);
4309 }
4310
4311 template <int i>
4312 double basisFuncDiffss3dR2(const Point& pt) {
4313 if constexpr(i < 3)
4314 return -0.5*pt.z()*( 1. - pt.z() )*basisFuncDiffss2dP2<i>(pt);
4315 else if constexpr( i < 6 )
4316 return 0.5*pt.z()*( 1. + pt.z() )*basisFuncDiffss2dP2<i-3>(pt);
4317 else if constexpr( i < 9 )
4318 return -0.5*pt.z()*( 1. - pt.z() )*basisFuncDiffss2dP2<i-3>(pt);
4319 else if constexpr( i < 12 )
4320 return 0.5*pt.z()*( 1. + pt.z() )*basisFuncDiffss2dP2<i-6>(pt);
4321 else
4322 return ( 1. - pt.z() )*( 1. + pt.z() )*basisFuncDiffss2dP2<i-12>(pt);
4323 }
4324
4325 template <int i>
4326 double basisFuncDiffst3dR2(const Point& pt) {
4327 if constexpr(i < 3)
4328 return -0.5*basisFuncDiffs2dP2<i>(pt)*( 1. - 2.*pt.z() );
4329 else if constexpr( i < 6 )
4330 return 0.5*basisFuncDiffs2dP2<i-3>(pt)*( 1. + 2.*pt.z() );
4331 else if constexpr( i < 9 )
4332 return -0.5*basisFuncDiffs2dP2<i-3>(pt)*( 1. - 2.*pt.z() );
4333 else if constexpr( i < 12 )
4334 return 0.5*basisFuncDiffs2dP2<i-6>(pt)*( 1. + 2.*pt.z() );
4335 else
4336 return -2.*pt.z()*basisFuncDiffs2dP2<i-12>(pt);
4337 }
4338
4339
4340 template <int i>
4341 double basisFuncDifftr3dR2(const Point& pt) {
4342 if constexpr(i < 3)
4343 return -0.5*( 1. - 2.*pt.z() )*basisFuncDiffr2dP2<i>(pt);
4344 else if constexpr( i < 6 )
4345 return 0.5*( 1. + 2.*pt.z() )*basisFuncDiffr2dP2<i-3>(pt);
4346 else if constexpr( i < 9 )
4347 return -0.5*( 1. - 2.*pt.z() )*basisFuncDiffr2dP2<i-3>(pt);
4348 else if constexpr( i < 12 )
4349 return 0.5*( 1. + 2.*pt.z() )*basisFuncDiffr2dP2<i-6>(pt);
4350 else
4351 return -2.*pt.z()*basisFuncDiffr2dP2<i-12>(pt);
4352 }
4353
4354 template <int i>
4355 double basisFuncDiffts3dR2(const Point& pt) {
4356 if constexpr(i < 3)
4357 return -0.5*( 1. - 2.*pt.z() )*basisFuncDiffs2dP2<i>(pt);
4358 else if constexpr( i < 6 )
4359 return 0.5*( 1. + 2.*pt.z() )*basisFuncDiffs2dP2<i-3>(pt);
4360 else if constexpr( i < 9 )
4361 return -0.5*( 1. - 2.*pt.z() )*basisFuncDiffs2dP2<i-3>(pt);
4362 else if constexpr( i < 12 )
4363 return 0.5*( 1. + 2.*pt.z() )*basisFuncDiffs2dP2<i-6>(pt);
4364 else
4365 return -2.*pt.z()*basisFuncDiffs2dP2<i-12>(pt);
4366 }
4367
4368 template <int i>
4369 double basisFuncDifftt3dR2(const Point& pt) {
4370 if constexpr(i < 3)
4371 return basisFunc2dP2<i>(pt);
4372 else if constexpr( i < 6 )
4373 return basisFunc2dP2<i-3>(pt);
4374 else if constexpr( i < 9 )
4375 return basisFunc2dP2<i-3>(pt);
4376 else if constexpr( i < 12 )
4377 return basisFunc2dP2<i-6>(pt);
4378 else
4379 return -2.*basisFunc2dP2<i-12>(pt);
4380 }
4381
4382 static const FunctionXYZ _FuncDiffHess3dR2[] = {
4383 basisFuncDiffrr3dR2<0>, basisFuncDiffrs3dR2<0>, basisFuncDiffrt3dR2<0>, basisFuncDiffsr3dR2<0>, basisFuncDiffss3dR2<0>, basisFuncDiffst3dR2<0>, basisFuncDifftr3dR2<0>, basisFuncDiffts3dR2<0>, basisFuncDifftt3dR2<0>,
4384 basisFuncDiffrr3dR2<1>, basisFuncDiffrs3dR2<1>, basisFuncDiffrt3dR2<1>, basisFuncDiffsr3dR2<1>, basisFuncDiffss3dR2<1>, basisFuncDiffst3dR2<1>, basisFuncDifftr3dR2<1>, basisFuncDiffts3dR2<1>, basisFuncDifftt3dR2<1>,
4385 basisFuncDiffrr3dR2<2>, basisFuncDiffrs3dR2<2>, basisFuncDiffrt3dR2<2>, basisFuncDiffsr3dR2<2>, basisFuncDiffss3dR2<2>, basisFuncDiffst3dR2<2>, basisFuncDifftr3dR2<2>, basisFuncDiffts3dR2<2>, basisFuncDifftt3dR2<2>,
4386 basisFuncDiffrr3dR2<3>, basisFuncDiffrs3dR2<3>, basisFuncDiffrt3dR2<3>, basisFuncDiffsr3dR2<3>, basisFuncDiffss3dR2<3>, basisFuncDiffst3dR2<3>, basisFuncDifftr3dR2<3>, basisFuncDiffts3dR2<3>, basisFuncDifftt3dR2<3>,
4387 basisFuncDiffrr3dR2<4>, basisFuncDiffrs3dR2<4>, basisFuncDiffrt3dR2<4>, basisFuncDiffsr3dR2<4>, basisFuncDiffss3dR2<4>, basisFuncDiffst3dR2<4>, basisFuncDifftr3dR2<4>, basisFuncDiffts3dR2<4>, basisFuncDifftt3dR2<4>,
4388 basisFuncDiffrr3dR2<5>, basisFuncDiffrs3dR2<5>, basisFuncDiffrt3dR2<5>, basisFuncDiffsr3dR2<5>, basisFuncDiffss3dR2<5>, basisFuncDiffst3dR2<5>, basisFuncDifftr3dR2<5>, basisFuncDiffts3dR2<5>, basisFuncDifftt3dR2<5>,
4389 basisFuncDiffrr3dR2<6>, basisFuncDiffrs3dR2<6>, basisFuncDiffrt3dR2<6>, basisFuncDiffsr3dR2<6>, basisFuncDiffss3dR2<6>, basisFuncDiffst3dR2<6>, basisFuncDifftr3dR2<6>, basisFuncDiffts3dR2<6>, basisFuncDifftt3dR2<6>,
4390 basisFuncDiffrr3dR2<7>, basisFuncDiffrs3dR2<7>, basisFuncDiffrt3dR2<7>, basisFuncDiffsr3dR2<7>, basisFuncDiffss3dR2<7>, basisFuncDiffst3dR2<7>, basisFuncDifftr3dR2<7>, basisFuncDiffts3dR2<7>, basisFuncDifftt3dR2<7>,
4391 basisFuncDiffrr3dR2<8>, basisFuncDiffrs3dR2<8>, basisFuncDiffrt3dR2<8>, basisFuncDiffsr3dR2<8>, basisFuncDiffss3dR2<8>, basisFuncDiffst3dR2<8>, basisFuncDifftr3dR2<8>, basisFuncDiffts3dR2<8>, basisFuncDifftt3dR2<8>,
4392 basisFuncDiffrr3dR2<9>, basisFuncDiffrs3dR2<9>, basisFuncDiffrt3dR2<9>, basisFuncDiffsr3dR2<9>, basisFuncDiffss3dR2<9>, basisFuncDiffst3dR2<9>, basisFuncDifftr3dR2<9>, basisFuncDiffts3dR2<9>, basisFuncDifftt3dR2<9>,
4393 basisFuncDiffrr3dR2<10>, basisFuncDiffrs3dR2<10>, basisFuncDiffrt3dR2<10>, basisFuncDiffsr3dR2<10>, basisFuncDiffss3dR2<10>, basisFuncDiffst3dR2<10>, basisFuncDifftr3dR2<10>, basisFuncDiffts3dR2<10>, basisFuncDifftt3dR2<10>,
4394 basisFuncDiffrr3dR2<11>, basisFuncDiffrs3dR2<11>, basisFuncDiffrt3dR2<11>, basisFuncDiffsr3dR2<11>, basisFuncDiffss3dR2<11>, basisFuncDiffst3dR2<11>, basisFuncDifftr3dR2<11>, basisFuncDiffts3dR2<11>, basisFuncDifftt3dR2<11>,
4395 basisFuncDiffrr3dR2<12>, basisFuncDiffrs3dR2<12>, basisFuncDiffrt3dR2<12>, basisFuncDiffsr3dR2<12>, basisFuncDiffss3dR2<12>, basisFuncDiffst3dR2<12>, basisFuncDifftr3dR2<12>, basisFuncDiffts3dR2<12>, basisFuncDifftt3dR2<12>,
4396 basisFuncDiffrr3dR2<13>, basisFuncDiffrs3dR2<13>, basisFuncDiffrt3dR2<13>, basisFuncDiffsr3dR2<13>, basisFuncDiffss3dR2<13>, basisFuncDiffst3dR2<13>, basisFuncDifftr3dR2<13>, basisFuncDiffts3dR2<13>, basisFuncDifftt3dR2<13>,
4397 basisFuncDiffrr3dR2<14>, basisFuncDiffrs3dR2<14>, basisFuncDiffrt3dR2<14>, basisFuncDiffsr3dR2<14>, basisFuncDiffss3dR2<14>, basisFuncDiffst3dR2<14>, basisFuncDifftr3dR2<14>, basisFuncDiffts3dR2<14>, basisFuncDifftt3dR2<14>
4398 };
4399
4400 const BasisFunction basisFunction3dR2("basisFunction3dR2",15,3,_Func3dR2,_FuncDiff3dR2,_FuncDiffHess3dR2);
4401
4402 /************************************************************************
4403 * basisFunction3dRT0Tetra (Raviart-Thomas lowest degree on a tetrahedron)
4404 *************************************************************************/
4405
4406 double basis1Func_RT0_x_3D_TETRA(const Point&);
4407 double basis1Func_RT0_y_3D_TETRA(const Point&);
4408 double basis1Func_RT0_z_3D_TETRA(const Point&);
4409 double basis1Func_RT0_x_3D_TETRA(const Point& pt) {
4410 return 2 * pt.x();
4411 }
4412 double basis1Func_RT0_y_3D_TETRA(const Point& pt) {
4413 return 2 * pt.y();
4414 }
4415 double basis1Func_RT0_z_3D_TETRA(const Point& pt) {
4416 return 2 * pt.z() - 2;
4417 }
4418
4419 double basis2Func_RT0_x_3D_TETRA(const Point&);
4420 double basis2Func_RT0_y_3D_TETRA(const Point&);
4421 double basis2Func_RT0_z_3D_TETRA(const Point&);
4422 double basis2Func_RT0_x_3D_TETRA(const Point& pt) {
4423 return 2 * pt.x();
4424 }
4425 double basis2Func_RT0_y_3D_TETRA(const Point& pt) {
4426 return 2 * pt.y() - 2;
4427 }
4428 double basis2Func_RT0_z_3D_TETRA(const Point& pt) {
4429 return 2 * pt.z();
4430 }
4431
4432 double basis3Func_RT0_x_3D_TETRA(const Point&);
4433 double basis3Func_RT0_y_3D_TETRA(const Point&);
4434 double basis3Func_RT0_z_3D_TETRA(const Point&);
4435 double basis3Func_RT0_x_3D_TETRA(const Point& pt) {
4436 return 2 * pt.x();
4437 }
4438 double basis3Func_RT0_y_3D_TETRA(const Point& pt) {
4439 return 2 * pt.y();
4440 }
4441 double basis3Func_RT0_z_3D_TETRA(const Point& pt) {
4442 return 2 * pt.z();
4443 }
4444
4445 double basis4Func_RT0_x_3D_TETRA(const Point&);
4446 double basis4Func_RT0_y_3D_TETRA(const Point&);
4447 double basis4Func_RT0_z_3D_TETRA(const Point&);
4448 double basis4Func_RT0_x_3D_TETRA(const Point& pt) {
4449 return 2 * pt.x() - 2;
4450 }
4451 double basis4Func_RT0_y_3D_TETRA(const Point& pt) {
4452 return 2 * pt.y();
4453 }
4454 double basis4Func_RT0_z_3D_TETRA(const Point& pt) {
4455 return 2 * pt.z();
4456 }
4457
4458 // first derivatives (the 3 basis functions have the same ones)
4459 double basis1FuncDiff_RT0_x_1_3D_TETRA(const Point&);
4460 double basis1FuncDiff_RT0_y_1_3D_TETRA(const Point&);
4461 double basis1FuncDiff_RT0_z_1_3D_TETRA(const Point&);
4462 double basis1FuncDiff_RT0_x_2_3D_TETRA(const Point&);
4463 double basis1FuncDiff_RT0_y_2_3D_TETRA(const Point&);
4464 double basis1FuncDiff_RT0_z_2_3D_TETRA(const Point&);
4465 double basis1FuncDiff_RT0_x_3_3D_TETRA(const Point&);
4466 double basis1FuncDiff_RT0_y_3_3D_TETRA(const Point&);
4467 double basis1FuncDiff_RT0_z_3_3D_TETRA(const Point&);
4468 double basis1FuncDiff_RT0_x_1_3D_TETRA(const Point& pt) {
4469 (void) pt;
4470 return 2;
4471 }
4472 double basis1FuncDiff_RT0_y_1_3D_TETRA(const Point& pt) {
4473 (void) pt;
4474 return 0.;
4475 }
4476 double basis1FuncDiff_RT0_z_1_3D_TETRA(const Point& pt) {
4477 (void) pt;
4478 return 0.;
4479 }
4480 double basis1FuncDiff_RT0_x_2_3D_TETRA(const Point& pt) {
4481 (void) pt;
4482 return 0;
4483 }
4484 double basis1FuncDiff_RT0_y_2_3D_TETRA(const Point& pt) {
4485 (void) pt;
4486 return 2.;
4487 }
4488 double basis1FuncDiff_RT0_z_2_3D_TETRA(const Point& pt) {
4489 (void) pt;
4490 return 0.;
4491 }
4492 double basis1FuncDiff_RT0_x_3_3D_TETRA(const Point& pt) {
4493 (void) pt;
4494 return 0;
4495 }
4496 double basis1FuncDiff_RT0_y_3_3D_TETRA(const Point& pt) {
4497 (void) pt;
4498 return 0.;
4499 }
4500 double basis1FuncDiff_RT0_z_3_3D_TETRA(const Point& pt) {
4501 (void) pt;
4502 return 2.;
4503 }
4504
4505
4506 static const FunctionXYZ _Func_RT0_3D_TETRA[] = {
4507 basis1Func_RT0_x_3D_TETRA,basis1Func_RT0_y_3D_TETRA,basis1Func_RT0_z_3D_TETRA,
4508 basis2Func_RT0_x_3D_TETRA,basis2Func_RT0_y_3D_TETRA,basis2Func_RT0_z_3D_TETRA,
4509 basis3Func_RT0_x_3D_TETRA,basis3Func_RT0_y_3D_TETRA,basis3Func_RT0_z_3D_TETRA,
4510 basis4Func_RT0_x_3D_TETRA,basis4Func_RT0_y_3D_TETRA,basis4Func_RT0_z_3D_TETRA
4511 };
4512
4513 static const FunctionXYZ _FuncDiff_RT0_3D_TETRA[] = {
4514 basis1FuncDiff_RT0_x_1_3D_TETRA,basis1FuncDiff_RT0_y_1_3D_TETRA,basis1FuncDiff_RT0_z_1_3D_TETRA,
4515 basis1FuncDiff_RT0_x_2_3D_TETRA,basis1FuncDiff_RT0_y_2_3D_TETRA,basis1FuncDiff_RT0_z_2_3D_TETRA,
4516 basis1FuncDiff_RT0_x_3_3D_TETRA,basis1FuncDiff_RT0_y_3_3D_TETRA,basis1FuncDiff_RT0_z_3_3D_TETRA,
4517
4518 basis1FuncDiff_RT0_x_1_3D_TETRA,basis1FuncDiff_RT0_y_1_3D_TETRA,basis1FuncDiff_RT0_z_1_3D_TETRA,
4519 basis1FuncDiff_RT0_x_2_3D_TETRA,basis1FuncDiff_RT0_y_2_3D_TETRA,basis1FuncDiff_RT0_z_2_3D_TETRA,
4520 basis1FuncDiff_RT0_x_3_3D_TETRA,basis1FuncDiff_RT0_y_3_3D_TETRA,basis1FuncDiff_RT0_z_3_3D_TETRA,
4521
4522 basis1FuncDiff_RT0_x_1_3D_TETRA,basis1FuncDiff_RT0_y_1_3D_TETRA,basis1FuncDiff_RT0_z_1_3D_TETRA,
4523 basis1FuncDiff_RT0_x_2_3D_TETRA,basis1FuncDiff_RT0_y_2_3D_TETRA,basis1FuncDiff_RT0_z_2_3D_TETRA,
4524 basis1FuncDiff_RT0_x_3_3D_TETRA,basis1FuncDiff_RT0_y_3_3D_TETRA,basis1FuncDiff_RT0_z_3_3D_TETRA,
4525
4526 basis1FuncDiff_RT0_x_1_3D_TETRA,basis1FuncDiff_RT0_y_1_3D_TETRA,basis1FuncDiff_RT0_z_1_3D_TETRA,
4527 basis1FuncDiff_RT0_x_2_3D_TETRA,basis1FuncDiff_RT0_y_2_3D_TETRA,basis1FuncDiff_RT0_z_2_3D_TETRA,
4528 basis1FuncDiff_RT0_x_3_3D_TETRA,basis1FuncDiff_RT0_y_3_3D_TETRA,basis1FuncDiff_RT0_z_3_3D_TETRA,
4529 };
4530
4531 // no second derivatives
4532
4533 const BasisFunction basisFunction3dRT0Tetra("basisFunction3dRT0Tetra",4,3,3,_Func_RT0_3D_TETRA,_FuncDiff_RT0_3D_TETRA,nullptr);
4534
4535
4536 /*========================================================================
4537 !
4538 ! REFERENCE SHAPES
4539 !
4540 =======================================================================*/
4541 const RefShape NULLSHAPE("NULLSHAPE",0,0,0,0,NullShape);
4542 const RefShape NODE("NODE",1,1,0,0,Node);
4543 const RefShape SEGMENT("SEGMENT",1,2,1,0,Segment);
4544 const RefShape TRIANGLE("TRIANGLE",2,3,3,1,Triangle);
4545 const RefShape QUADRILATERAL("QUADRILATERAL",2,4,4,1,Quadrilateral);
4546 const RefShape TETRAHEDRON("TETRAHEDRON",3,4,6,4,Tetrahedron);
4547 const RefShape HEXAHEDRON("HEXAHEDRON",3,8,12,6,Hexahedron);
4548 const RefShape PRISM("PRISM",3,6,9,5,Prism);
4549 const RefShape PYRAMID("PYRAMID",3,5,8,5,Pyramid);
4550
4551 /*========================================================================
4552 !
4553 ! QUADRATURE RULES
4554 !
4555 =======================================================================*/
4556 /************************************************************************
4557 * Quadrature Rules NULL
4558 ************************************************************************/
4559 //----------------------------------------------------------------------
4560
4561 const QuadratureRule quadratureRuleNULL( nullptr,
4562 "quadratureRuleNULL", NULLSHAPE, 0, -1 );
4563 const ListOfQuadratureRule listQuadratureRuleNULL("listQuadratureRuleNULL",0,&quadratureRuleNULL);
4564
4565
4566 /************************************************************************
4567 * Quadrature Rules on Node
4568 ************************************************************************/
4569 //----------------------------------------------------------------------
4570 static const QuadraturePoint pt_node[1] = {QuadraturePoint( 0., 0. )};
4571 const QuadratureRule quadratureRuleNode1( pt_node, "quadratureRuleNode", NODE, 1, 1 );
4572 const QuadratureRule quadratureRuleNode2( pt_node, "quadratureRuleNode", NODE, 1, 2 );
4573 const QuadratureRule quadratureRuleNode3( pt_node, "quadratureRuleNode", NODE, 1, 3 );
4574
4575 static const QuadratureRule quad_rule_on_node[3] = {quadratureRuleNode1,quadratureRuleNode2,quadratureRuleNode3};
4576
4577 const ListOfQuadratureRule listQuadratureRuleNode("listQuadratureRuleNode",3, quad_rule_on_node);
4578
4579 /************************************************************************
4580 * Quadrature Rules on segments
4581 ************************************************************************/
4582 //----------------------------------------------------------------------
4583
4584 static const QuadraturePoint pt_seg_1pt[ 1 ] = {QuadraturePoint( 0., 2. )};
4585 const QuadratureRule quadratureRuleSeg1pt( pt_seg_1pt,
4586 "quadratureRuleSeg1pt", SEGMENT, 1, 1 );
4587 //----------------------------------------------------------------------
4588 const double q2ptx1 = - std::sqrt( 1. / 3. ) , q2ptx2 = std::sqrt( 1. / 3. ) ;
4589 const double q2ptw1 = 1., q2ptw2 = 1.;
4590
4591 static const QuadraturePoint pt_seg_2pt[] = {QuadraturePoint( q2ptx1 , q2ptw1 ),QuadraturePoint( q2ptx2 , q2ptw2 )};
4592 const QuadratureRule quadratureRuleSeg2pt( pt_seg_2pt,
4593 "quadratureRuleSeg2pt", SEGMENT, 2, 3 );
4594 //----------------------------------------------------------------------
4595 const double q3ptx1 = - std::sqrt( 3. / 5. ) , q3ptx2 = 0. , q3ptx3 = std::sqrt( 3. / 5. );
4596 const double q3ptw1 = 10. / 18. , q3ptw2 = 16. / 18., q3ptw3 = 10. / 18.;
4597
4598 static const QuadraturePoint pt_seg_3pt[] =
4599 {QuadraturePoint( q3ptx1, q3ptw1 ),QuadraturePoint( q3ptx2, q3ptw2 ),QuadraturePoint( q3ptx3, q3ptw3 )};
4600
4601 const QuadratureRule quadratureRuleSeg3pt( pt_seg_3pt,
4602 "quadratureRuleSeg3pt", SEGMENT, 3, 5 );
4603 //----------------------------------------------------------------------
4604 // List of quadrature rules on segments
4605 //----------------------------------------------------------------------
4606 static const QuadratureRule quad_rule_on_segment[] = {quadratureRuleSeg1pt,quadratureRuleSeg2pt,quadratureRuleSeg3pt};
4607
4608 const ListOfQuadratureRule listQuadratureRuleSegment("listQuadratureRuleSegment",3,quad_rule_on_segment);
4609
4610 /************************************************************************
4611 * Quadrature Rules on triangles
4612 ************************************************************************/
4613 //----------------------------------------------------------------------
4614
4615 static const QuadraturePoint pt_tria_1pt[ 1 ] = {QuadraturePoint( 1. / 3., 1. / 3., 1. / 2. )};
4616 const QuadratureRule quadratureRuleTria1pt( pt_tria_1pt,
4617 "quadratureRuleTria1pt", TRIANGLE, 1, 1 );
4618 //----------------------------------------------------------------------
4619
4620 const double t3ptx1 = 0.5, t3ptx2 = 0., t3ptw = 1./6.;
4621 static const QuadraturePoint pt_tria_3pt[ 3 ] =
4622 {QuadraturePoint( t3ptx1, t3ptx2 , t3ptw ),QuadraturePoint( t3ptx2, t3ptx1, t3ptw ), QuadraturePoint( 0.5, 0.5, t3ptw )};
4623 const QuadratureRule quadratureRuleTria3pt( pt_tria_3pt,"quadratureRuleTria3pt", TRIANGLE, 3, 2 );
4624 //
4625 // WARNING: In what follows the degree of exactnes is increased by 1,
4626 // in order to complain with the rule which enforces differents
4627 // degree of exactness for two quadratures rules
4628 //----------------------------------------------------------------------
4629 //------------ quadrature points for MITC3 and MITC3+ D of Ex = 3 2 intead of 3
4630 // const double mitc3x1 = 1./6., mitc3x2 = 2./3. , mitc3w = 1./6;
4631 static const QuadraturePoint pt_mitc3[ 3 ] =
4632 {QuadraturePoint(1./6., 1./6., 1./6.), QuadraturePoint(2./3., 1./6., 1./6.), QuadraturePoint( 1./6., 2./3., 1./6.) };
4633 const QuadratureRule quadratureRuleMitc3( pt_mitc3,"quadratureRuleMitc3", TRIANGLE, 3, 3 ); //
4634
4635 //----------------------------------------------------------------------
4636 // 4 points Integration rule for triangle (Ref. e.g. Comincioli pag. 234) D of Ex = 3 intead of 4
4637 const double t4pt_xb1 = 3. / 5.,
4638 t4pt_xb2 = 1. / 5.,
4639 t4pt_w1 = 25. / 96.,
4640 t4pt_w2 = -9. / 32.,
4641 t4pt_a = 1. / 3.;
4642
4643 static const QuadraturePoint pt_tria_4pt[ 4 ] = {
4644 QuadraturePoint( t4pt_xb1, t4pt_xb2, t4pt_w1 ),QuadraturePoint( t4pt_xb2, t4pt_xb1, t4pt_w1 ),
4645 QuadraturePoint( t4pt_xb2, t4pt_xb2, t4pt_w1 ),QuadraturePoint( t4pt_a, t4pt_a, t4pt_w2 )
4646 };
4647
4648 const QuadratureRule quadratureRuleTria4pt( pt_tria_4pt,
4649 "quadratureRuleTria4pt", TRIANGLE, 4, 4 );
4650 //----------------------------------------------------------------------
4651 // 6 points Integration rule for triangle, D of Ex = 4 insted of 5
4652 // Ref: G.R. Cowper, Gaussian quadrature formulas for triangles,
4653 // Internat. J. Numer. Methods Engrg. 7 (1973), 405--408.
4654 const double t6pt_x1 = 0.091576213509770743;
4655 const double t6pt_x2 = 0.44594849091596488;
4656 const double t6pt_w1 = 0.054975871827660933;
4657 const double t6pt_w2 = 0.11169079483900573;
4658 static const QuadraturePoint pt_tria_6pt[ 6 ] = {
4659 QuadraturePoint( t6pt_x1, t6pt_x1, t6pt_w1 ),QuadraturePoint( t6pt_x1, 1-2*t6pt_x1, t6pt_w1 ),
4660 QuadraturePoint( 1-2*t6pt_x1, t6pt_x1, t6pt_w1 ),QuadraturePoint( t6pt_x2, t6pt_x2, t6pt_w2 ),
4661 QuadraturePoint( t6pt_x2, 1-2*t6pt_x2, t6pt_w2 ),QuadraturePoint( 1-2*t6pt_x2, t6pt_x2, t6pt_w2 )
4662 };
4663 const QuadratureRule quadratureRuleTria6pt( pt_tria_6pt,
4664 "quadratureRuleTria6pt",
4665 TRIANGLE, 6, 5 );
4666 //----------------------------------------------------------------------
4667 // 7 points Integration rule for triangle (Ref. Stroud) D of Ex = 6
4668 const double t7pt_x0 = 1. / 3.;
4669 const double t7pt_x1 = 0.10128650732345633;
4670 const double t7pt_x2 = 0.47014206410511508;
4671 const double t7pt_w0 = 0.1125;
4672 const double t7pt_w1 = 0.062969590272413576;
4673 const double t7pt_w2 = 0.066197076394253090;
4674
4675 static const QuadraturePoint pt_tria_7pt[ 7 ] = {
4676 QuadraturePoint( t7pt_x0, t7pt_x0, t7pt_w0 ),QuadraturePoint( t7pt_x1, t7pt_x1, t7pt_w1 ),
4677 QuadraturePoint( t7pt_x1, 1-2*t7pt_x1, t7pt_w1 ),QuadraturePoint( 1-2*t7pt_x1, t7pt_x1, t7pt_w1 ),
4678 QuadraturePoint( t7pt_x2, t7pt_x2, t7pt_w2 ),QuadraturePoint( t7pt_x2, 1-2*t7pt_x2, t7pt_w2 ),
4679 QuadraturePoint( 1-2*t7pt_x2, t7pt_x2, t7pt_w2 )
4680 };
4681 const QuadratureRule quadratureRuleTria7pt( pt_tria_7pt,
4682 "quadratureRuleTria7pt",
4683 TRIANGLE, 7, 6 );
4684 //----------------------------------------------------------------------
4685 // List of quadrature rules on triangles
4686 //----------------------------------------------------------------------
4687 static const QuadratureRule quad_rule_on_triangle[] = {
4688 quadratureRuleTria1pt,quadratureRuleTria3pt,quadratureRuleMitc3,quadratureRuleTria4pt,
4689 quadratureRuleTria6pt,quadratureRuleTria7pt
4690 };
4691
4692 const ListOfQuadratureRule listQuadratureRuleTriangle("listQuadratureRuleTriangle",6,quad_rule_on_triangle);
4693
4694 /************************************************************************
4695 * Quadrature Rules on quadrilaterals
4696 ************************************************************************/
4697 //----------------------------------------------------------------------
4698
4699 static const QuadraturePoint pt_quad_1pt[ 1 ] = {
4700 QuadraturePoint( 0., 0., 4. )
4701 };
4702 const QuadratureRule quadratureRuleQuad1pt( pt_quad_1pt,
4703 "quadratureRuleQuad1pt", QUADRILATERAL, 1, 1 );
4704 //----------------------------------------------------------------------
4705 // 4 points Integration rule for quadrangle (tensorization of 2 pts on segment)
4706 static const QuadraturePoint pt_quad_4pt[ 4 ] = {
4707 QuadraturePoint( q2ptx1, q2ptx1, q2ptw1 * q2ptw1 ),
4708 QuadraturePoint( q2ptx2, q2ptx1, q2ptw2 * q2ptw1 ),
4709 QuadraturePoint( q2ptx2, q2ptx2, q2ptw2 * q2ptw2 ),
4710 QuadraturePoint( q2ptx1, q2ptx2, q2ptw1 * q2ptw2 )
4711 };
4712 const QuadratureRule quadratureRuleQuad4pt( pt_quad_4pt,
4713 "quadratureRuleQuad4pt", QUADRILATERAL, 4, 3 );
4714 //----------------------------------------------------------------------
4715 // 9 points Integration rule for quadrangle (tensorization of 3 pts on segment)
4716 static const QuadraturePoint pt_quad_9pt[ 9 ] = {
4717 QuadraturePoint( q3ptx1, q3ptx1, q3ptw1 * q3ptw1 ),
4718 QuadraturePoint( q3ptx2, q3ptx1, q3ptw2 * q3ptw1 ),
4719 QuadraturePoint( q3ptx3, q3ptx1, q3ptw3 * q3ptw1 ),
4720 QuadraturePoint( q3ptx1, q3ptx2, q3ptw1 * q3ptw2 ),
4721 QuadraturePoint( q3ptx2, q3ptx2, q3ptw2 * q3ptw2 ),
4722 QuadraturePoint( q3ptx3, q3ptx2, q3ptw3 * q3ptw2 ),
4723 QuadraturePoint( q3ptx1, q3ptx3, q3ptw1 * q3ptw3 ),
4724 QuadraturePoint( q3ptx2, q3ptx3, q3ptw2 * q3ptw3 ),
4725 QuadraturePoint( q3ptx3, q3ptx3, q3ptw3 * q3ptw3 )
4726 };
4727
4728 const QuadratureRule quadratureRuleQuad9pt( pt_quad_9pt,
4729 "quadratureRuleQuad9pt", QUADRILATERAL, 9, 5 );
4730 //----------------------------------------------------------------------
4731 // List of quadrature rules on quadrilaterals
4732 //----------------------------------------------------------------------
4733 static const QuadratureRule quad_rule_on_quad[] =
4734 {quadratureRuleQuad1pt,quadratureRuleQuad4pt,quadratureRuleQuad9pt};
4735
4736 const ListOfQuadratureRule listQuadratureRuleQuadrilateral("listQuadratureRuleQuadrilateral",3,quad_rule_on_quad);
4737
4738
4739 /************************************************************************
4740 * Quadrature Rules on tetrahedra
4741 ************************************************************************/
4742 //----------------------------------------------------------------------
4743
4744 static const QuadraturePoint pt_tetra_1pt[ 1 ] = {
4745 QuadraturePoint( 1. / 4., 1. / 4., 1. / 4., 1. / 6. )
4746 };
4747 const QuadratureRule quadratureRuleTetra1pt( pt_tetra_1pt,
4748 "quadratureRuleTetra1pt", TETRAHEDRON, 1, 1 );
4749 //----------------------------------------------------------------------
4750 const double tet4ptx1 = ( 5. - std::sqrt( 5. ) ) / 20., tet4ptx2 = ( 5. + 3*std::sqrt( 5. ) ) / 20.;
4751
4752 static const QuadraturePoint pt_tetra_4pt[ 4 ] = {
4753 QuadraturePoint( tet4ptx1, tet4ptx1, tet4ptx1, 1. / 24. ),
4754 QuadraturePoint( tet4ptx1, tet4ptx1, tet4ptx2, 1. / 24. ),
4755 QuadraturePoint( tet4ptx1, tet4ptx2, tet4ptx1, 1. / 24. ),
4756 QuadraturePoint( tet4ptx2, tet4ptx1, tet4ptx1, 1. / 24. )
4757 };
4758 const QuadratureRule quadratureRuleTetra4pt( pt_tetra_4pt,
4759 "quadratureRuleTetra4pt", TETRAHEDRON, 4, 2 );
4760 //----------------------------------------------------------------------
4761 // 5 points Integration rule for tetraedra (Ref. e.g. Comincioli pag. 236)
4762 const double tet5ptx1 = 1. / 6. , tet5ptx2 = 1. / 2., tet5ptx3 = 1. / 4.;
4763
4764 static const QuadraturePoint pt_tetra_5pt[ 5 ] = {
4765 QuadraturePoint( tet5ptx1, tet5ptx1, tet5ptx1, 9. / 120. ),
4766 QuadraturePoint( tet5ptx1, tet5ptx1, tet5ptx2, 9. / 120. ),
4767 QuadraturePoint( tet5ptx1, tet5ptx2, tet5ptx1, 9. / 120. ),
4768 QuadraturePoint( tet5ptx2, tet5ptx1, tet5ptx1, 9. / 120. ),
4769 QuadraturePoint( tet5ptx3, tet5ptx3, tet5ptx3, -16. / 120. )
4770 };
4771
4772 const QuadratureRule quadratureRuleTetra5pt( pt_tetra_5pt,
4773 "quadratureRuleTetra5pt", TETRAHEDRON, 5, 3 );
4774 //
4775 //----------------------------------------------------------------------
4776 // 15 points integration rule for tetra.
4777 // D o E = 5 (Stroud, T3:5-1 pag. 315)
4778 // r
4779 const double r5 = 0.25;
4780 // s
4781 const double s5[ 4 ] = {
4782 0.09197107805272303, 0.3197936278296299
4783 };
4784 // (7 \mp \std::sqrt(15))/34
4785 // t
4786 const double t5[ 4 ] = {
4787 0.7240867658418310, 0.04061911651111023
4788 };
4789 // (13 \pm 3*std::sqrt(15))/34
4790 // u
4791 const double u5 = 0.05635083268962915; // (10-2*std::sqrt(15))/40
4792 // v
4793 const double v5 = 0.4436491673103708; // (10+2*std::sqrt(15))/40
4794 // A
4795 const double A5 = 0.01975308641975309; // 16/135*1/6
4796 // B
4797 const double B5[ 2 ] = {
4798 0.01198951396316977, 0.01151136787104540
4799 };
4800 // 1/6*(2665 \pm 14*std::sqrt(15))/37800
4801 // C
4802 const double C5 = 0.008818342151675485; // 20/378*1/6
4803 //
4804 static const QuadraturePoint pt_tetra_15pt[ 15 ] = {
4805 QuadraturePoint( r5, r5, r5, A5 ),
4806 QuadraturePoint( s5[ 0 ], s5[ 0 ], s5[ 0 ], B5[ 0 ] ),
4807 QuadraturePoint( t5[ 0 ], s5[ 0 ], s5[ 0 ], B5[ 0 ] ),
4808 QuadraturePoint( s5[ 0 ], t5[ 0 ], s5[ 0 ], B5[ 0 ] ),
4809 QuadraturePoint( s5[ 0 ], s5[ 0 ], t5[ 0 ], B5[ 0 ] ),
4810 QuadraturePoint( s5[ 1 ], s5[ 1 ], s5[ 1 ], B5[ 1 ] ),
4811 QuadraturePoint( t5[ 1 ], s5[ 1 ], s5[ 1 ], B5[ 1 ] ),
4812 QuadraturePoint( s5[ 1 ], t5[ 1 ], s5[ 1 ], B5[ 1 ] ),
4813 QuadraturePoint( s5[ 1 ], s5[ 1 ], t5[ 1 ], B5[ 1 ] ),
4814 QuadraturePoint( u5, u5, v5, C5 ),
4815 QuadraturePoint( u5, v5, u5, C5 ),
4816 QuadraturePoint( v5, u5, u5, C5 ),
4817 QuadraturePoint( v5, v5, u5, C5 ),
4818 QuadraturePoint( v5, u5, v5, C5 ),
4819 QuadraturePoint( u5, v5, v5, C5 )
4820 };
4821 //
4822 const QuadratureRule quadratureRuleTetra15pt( pt_tetra_15pt,
4823 "quadratureRuleTetra15pt",
4824 TETRAHEDRON, 15, 5 );
4825 //----------------------------------------------------------------------
4826 // 64 points integration rule for tetra.
4827 // D o E = 7 (Stroud, T3:7-1 pag. 315)
4828 //
4829 // t
4830 const double t[ 4 ] = {
4831 0.0485005494, 0.2386007376, 0.5170472951, 0.7958514179
4832 };
4833 // s
4834 const double s[ 4 ] = {
4835 0.0571041961, 0.2768430136, 0.5835904324, 0.8602401357
4836 };
4837 // r
4838 const double r[ 4 ] = {
4839 0.0694318422, 0.3300094782, 0.6699905218, 0.9305681558
4840 };
4841 // A
4842 const double A[ 4 ] = {
4843 0.1739274226, 0.3260725774, 0.3260725774, 0.1739274226
4844 };
4845 // B
4846 const double B[ 4 ] = {
4847 0.1355069134, 0.2034645680, 0.1298475476, 0.0311809709
4848 };
4849 // C
4850 const double C[ 4 ] = {
4851 0.1108884156, 0.1434587898, 0.0686338872, 0.0103522407
4852 };
4853
4854 static const QuadraturePoint pt_tetra_64pt[ 64 ] = {
4855 QuadraturePoint( t[ 0 ], s[ 0 ] * ( 1 - t[ 0 ] ), r[ 0 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 0 ] ), A[ 0 ] * B[ 0 ] * C[ 0 ] ),
4856 QuadraturePoint( t[ 1 ], s[ 0 ] * ( 1 - t[ 1 ] ), r[ 0 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 1 ] ), A[ 0 ] * B[ 0 ] * C[ 1 ] ),
4857 QuadraturePoint( t[ 2 ], s[ 0 ] * ( 1 - t[ 2 ] ), r[ 0 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 2 ] ), A[ 0 ] * B[ 0 ] * C[ 2 ] ),
4858 QuadraturePoint( t[ 3 ], s[ 0 ] * ( 1 - t[ 3 ] ), r[ 0 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 3 ] ), A[ 0 ] * B[ 0 ] * C[ 3 ] ),
4859 QuadraturePoint( t[ 0 ], s[ 1 ] * ( 1 - t[ 0 ] ), r[ 0 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 0 ] ), A[ 0 ] * B[ 1 ] * C[ 0 ] ),
4860 QuadraturePoint( t[ 1 ], s[ 1 ] * ( 1 - t[ 1 ] ), r[ 0 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 1 ] ), A[ 0 ] * B[ 1 ] * C[ 1 ] ),
4861 QuadraturePoint( t[ 2 ], s[ 1 ] * ( 1 - t[ 2 ] ), r[ 0 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 2 ] ), A[ 0 ] * B[ 1 ] * C[ 2 ] ),
4862 QuadraturePoint( t[ 3 ], s[ 1 ] * ( 1 - t[ 3 ] ), r[ 0 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 3 ] ), A[ 0 ] * B[ 1 ] * C[ 3 ] ),
4863 QuadraturePoint( t[ 0 ], s[ 2 ] * ( 1 - t[ 0 ] ), r[ 0 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 0 ] ), A[ 0 ] * B[ 2 ] * C[ 0 ] ),
4864 QuadraturePoint( t[ 1 ], s[ 2 ] * ( 1 - t[ 1 ] ), r[ 0 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 1 ] ), A[ 0 ] * B[ 2 ] * C[ 1 ] ),
4865 QuadraturePoint( t[ 2 ], s[ 2 ] * ( 1 - t[ 2 ] ), r[ 0 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 2 ] ), A[ 0 ] * B[ 2 ] * C[ 2 ] ),
4866 QuadraturePoint( t[ 3 ], s[ 2 ] * ( 1 - t[ 3 ] ), r[ 0 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 3 ] ), A[ 0 ] * B[ 2 ] * C[ 3 ] ),
4867 QuadraturePoint( t[ 0 ], s[ 3 ] * ( 1 - t[ 0 ] ), r[ 0 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 0 ] ), A[ 0 ] * B[ 3 ] * C[ 0 ] ),
4868 QuadraturePoint( t[ 1 ], s[ 3 ] * ( 1 - t[ 1 ] ), r[ 0 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 1 ] ), A[ 0 ] * B[ 3 ] * C[ 1 ] ),
4869 QuadraturePoint( t[ 2 ], s[ 3 ] * ( 1 - t[ 2 ] ), r[ 0 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 2 ] ), A[ 0 ] * B[ 3 ] * C[ 2 ] ),
4870 QuadraturePoint( t[ 3 ], s[ 3 ] * ( 1 - t[ 3 ] ), r[ 0 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 3 ] ), A[ 0 ] * B[ 3 ] * C[ 3 ] ),
4871 QuadraturePoint( t[ 0 ], s[ 0 ] * ( 1 - t[ 0 ] ), r[ 1 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 0 ] ), A[ 1 ] * B[ 0 ] * C[ 0 ] ),
4872 QuadraturePoint( t[ 1 ], s[ 0 ] * ( 1 - t[ 1 ] ), r[ 1 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 1 ] ), A[ 1 ] * B[ 0 ] * C[ 1 ] ),
4873 QuadraturePoint( t[ 2 ], s[ 0 ] * ( 1 - t[ 2 ] ), r[ 1 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 2 ] ), A[ 1 ] * B[ 0 ] * C[ 2 ] ),
4874 QuadraturePoint( t[ 3 ], s[ 0 ] * ( 1 - t[ 3 ] ), r[ 1 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 3 ] ), A[ 1 ] * B[ 0 ] * C[ 3 ] ),
4875 QuadraturePoint( t[ 0 ], s[ 1 ] * ( 1 - t[ 0 ] ), r[ 1 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 0 ] ), A[ 1 ] * B[ 1 ] * C[ 0 ] ),
4876 QuadraturePoint( t[ 1 ], s[ 1 ] * ( 1 - t[ 1 ] ), r[ 1 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 1 ] ), A[ 1 ] * B[ 1 ] * C[ 1 ] ),
4877 QuadraturePoint( t[ 2 ], s[ 1 ] * ( 1 - t[ 2 ] ), r[ 1 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 2 ] ), A[ 1 ] * B[ 1 ] * C[ 2 ] ),
4878 QuadraturePoint( t[ 3 ], s[ 1 ] * ( 1 - t[ 3 ] ), r[ 1 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 3 ] ), A[ 1 ] * B[ 1 ] * C[ 3 ] ),
4879 QuadraturePoint( t[ 0 ], s[ 2 ] * ( 1 - t[ 0 ] ), r[ 1 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 0 ] ), A[ 1 ] * B[ 2 ] * C[ 0 ] ),
4880 QuadraturePoint( t[ 1 ], s[ 2 ] * ( 1 - t[ 1 ] ), r[ 1 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 1 ] ), A[ 1 ] * B[ 2 ] * C[ 1 ] ),
4881 QuadraturePoint( t[ 2 ], s[ 2 ] * ( 1 - t[ 2 ] ), r[ 1 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 2 ] ), A[ 1 ] * B[ 2 ] * C[ 2 ] ),
4882 QuadraturePoint( t[ 3 ], s[ 2 ] * ( 1 - t[ 3 ] ), r[ 1 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 3 ] ), A[ 1 ] * B[ 2 ] * C[ 3 ] ),
4883 QuadraturePoint( t[ 0 ], s[ 3 ] * ( 1 - t[ 0 ] ), r[ 1 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 0 ] ), A[ 1 ] * B[ 3 ] * C[ 0 ] ),
4884 QuadraturePoint( t[ 1 ], s[ 3 ] * ( 1 - t[ 1 ] ), r[ 1 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 1 ] ), A[ 1 ] * B[ 3 ] * C[ 1 ] ),
4885 QuadraturePoint( t[ 2 ], s[ 3 ] * ( 1 - t[ 2 ] ), r[ 1 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 2 ] ), A[ 1 ] * B[ 3 ] * C[ 2 ] ),
4886 QuadraturePoint( t[ 3 ], s[ 3 ] * ( 1 - t[ 3 ] ), r[ 1 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 3 ] ), A[ 1 ] * B[ 3 ] * C[ 3 ] ),
4887 QuadraturePoint( t[ 0 ], s[ 0 ] * ( 1 - t[ 0 ] ), r[ 2 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 0 ] ), A[ 2 ] * B[ 0 ] * C[ 0 ] ),
4888 QuadraturePoint( t[ 1 ], s[ 0 ] * ( 1 - t[ 1 ] ), r[ 2 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 1 ] ), A[ 2 ] * B[ 0 ] * C[ 1 ] ),
4889 QuadraturePoint( t[ 2 ], s[ 0 ] * ( 1 - t[ 2 ] ), r[ 2 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 2 ] ), A[ 2 ] * B[ 0 ] * C[ 2 ] ),
4890 QuadraturePoint( t[ 3 ], s[ 0 ] * ( 1 - t[ 3 ] ), r[ 2 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 3 ] ), A[ 2 ] * B[ 0 ] * C[ 3 ] ),
4891 QuadraturePoint( t[ 0 ], s[ 1 ] * ( 1 - t[ 0 ] ), r[ 2 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 0 ] ), A[ 2 ] * B[ 1 ] * C[ 0 ] ),
4892 QuadraturePoint( t[ 1 ], s[ 1 ] * ( 1 - t[ 1 ] ), r[ 2 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 1 ] ), A[ 2 ] * B[ 1 ] * C[ 1 ] ),
4893 QuadraturePoint( t[ 2 ], s[ 1 ] * ( 1 - t[ 2 ] ), r[ 2 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 2 ] ), A[ 2 ] * B[ 1 ] * C[ 2 ] ),
4894 QuadraturePoint( t[ 3 ], s[ 1 ] * ( 1 - t[ 3 ] ), r[ 2 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 3 ] ), A[ 2 ] * B[ 1 ] * C[ 3 ] ),
4895 QuadraturePoint( t[ 0 ], s[ 2 ] * ( 1 - t[ 0 ] ), r[ 2 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 0 ] ), A[ 2 ] * B[ 2 ] * C[ 0 ] ),
4896 QuadraturePoint( t[ 1 ], s[ 2 ] * ( 1 - t[ 1 ] ), r[ 2 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 1 ] ), A[ 2 ] * B[ 2 ] * C[ 1 ] ),
4897 QuadraturePoint( t[ 2 ], s[ 2 ] * ( 1 - t[ 2 ] ), r[ 2 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 2 ] ), A[ 2 ] * B[ 2 ] * C[ 2 ] ),
4898 QuadraturePoint( t[ 3 ], s[ 2 ] * ( 1 - t[ 3 ] ), r[ 2 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 3 ] ), A[ 2 ] * B[ 2 ] * C[ 3 ] ),
4899 QuadraturePoint( t[ 0 ], s[ 3 ] * ( 1 - t[ 0 ] ), r[ 2 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 0 ] ), A[ 2 ] * B[ 3 ] * C[ 0 ] ),
4900 QuadraturePoint( t[ 1 ], s[ 3 ] * ( 1 - t[ 1 ] ), r[ 2 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 1 ] ), A[ 2 ] * B[ 3 ] * C[ 1 ] ),
4901 QuadraturePoint( t[ 2 ], s[ 3 ] * ( 1 - t[ 2 ] ), r[ 2 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 2 ] ), A[ 2 ] * B[ 3 ] * C[ 2 ] ),
4902 QuadraturePoint( t[ 3 ], s[ 3 ] * ( 1 - t[ 3 ] ), r[ 2 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 3 ] ), A[ 2 ] * B[ 3 ] * C[ 3 ] ),
4903 QuadraturePoint( t[ 0 ], s[ 0 ] * ( 1 - t[ 0 ] ), r[ 3 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 0 ] ), A[ 3 ] * B[ 0 ] * C[ 0 ] ),
4904 QuadraturePoint( t[ 1 ], s[ 0 ] * ( 1 - t[ 1 ] ), r[ 3 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 1 ] ), A[ 3 ] * B[ 0 ] * C[ 1 ] ),
4905 QuadraturePoint( t[ 2 ], s[ 0 ] * ( 1 - t[ 2 ] ), r[ 3 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 2 ] ), A[ 3 ] * B[ 0 ] * C[ 2 ] ),
4906 QuadraturePoint( t[ 3 ], s[ 0 ] * ( 1 - t[ 3 ] ), r[ 3 ] * ( 1 - s[ 0 ] ) * ( 1 - t[ 3 ] ), A[ 3 ] * B[ 0 ] * C[ 3 ] ),
4907 QuadraturePoint( t[ 0 ], s[ 1 ] * ( 1 - t[ 0 ] ), r[ 3 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 0 ] ), A[ 3 ] * B[ 1 ] * C[ 0 ] ),
4908 QuadraturePoint( t[ 1 ], s[ 1 ] * ( 1 - t[ 1 ] ), r[ 3 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 1 ] ), A[ 3 ] * B[ 1 ] * C[ 1 ] ),
4909 QuadraturePoint( t[ 2 ], s[ 1 ] * ( 1 - t[ 2 ] ), r[ 3 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 2 ] ), A[ 3 ] * B[ 1 ] * C[ 2 ] ),
4910 QuadraturePoint( t[ 3 ], s[ 1 ] * ( 1 - t[ 3 ] ), r[ 3 ] * ( 1 - s[ 1 ] ) * ( 1 - t[ 3 ] ), A[ 3 ] * B[ 1 ] * C[ 3 ] ),
4911 QuadraturePoint( t[ 0 ], s[ 2 ] * ( 1 - t[ 0 ] ), r[ 3 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 0 ] ), A[ 3 ] * B[ 2 ] * C[ 0 ] ),
4912 QuadraturePoint( t[ 1 ], s[ 2 ] * ( 1 - t[ 1 ] ), r[ 3 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 1 ] ), A[ 3 ] * B[ 2 ] * C[ 1 ] ),
4913 QuadraturePoint( t[ 2 ], s[ 2 ] * ( 1 - t[ 2 ] ), r[ 3 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 2 ] ), A[ 3 ] * B[ 2 ] * C[ 2 ] ),
4914 QuadraturePoint( t[ 3 ], s[ 2 ] * ( 1 - t[ 3 ] ), r[ 3 ] * ( 1 - s[ 2 ] ) * ( 1 - t[ 3 ] ), A[ 3 ] * B[ 2 ] * C[ 3 ] ),
4915 QuadraturePoint( t[ 0 ], s[ 3 ] * ( 1 - t[ 0 ] ), r[ 3 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 0 ] ), A[ 3 ] * B[ 3 ] * C[ 0 ] ),
4916 QuadraturePoint( t[ 1 ], s[ 3 ] * ( 1 - t[ 1 ] ), r[ 3 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 1 ] ), A[ 3 ] * B[ 3 ] * C[ 1 ] ),
4917 QuadraturePoint( t[ 2 ], s[ 3 ] * ( 1 - t[ 2 ] ), r[ 3 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 2 ] ), A[ 3 ] * B[ 3 ] * C[ 2 ] ),
4918 QuadraturePoint( t[ 3 ], s[ 3 ] * ( 1 - t[ 3 ] ), r[ 3 ] * ( 1 - s[ 3 ] ) * ( 1 - t[ 3 ] ), A[ 3 ] * B[ 3 ] * C[ 3 ] )
4919 };
4920 //
4921 const QuadratureRule quadratureRuleTetra64pt( pt_tetra_64pt,
4922 "quadratureRuleTetra64pt",
4923 TETRAHEDRON, 64, 7 );
4924
4925 //----------------------------------------------------------------------
4926 // List of quadrature rules on tetrahedra
4927 //----------------------------------------------------------------------
4928 static const QuadratureRule quad_rule_on_tetra[] =
4929 {quadratureRuleTetra1pt,quadratureRuleTetra4pt,quadratureRuleTetra5pt,quadratureRuleTetra15pt,quadratureRuleTetra64pt};
4930
4931 const ListOfQuadratureRule listQuadratureRuleTetrahedron("listQuadratureRuleTetrahedron",5,quad_rule_on_tetra);
4932
4933 /************************************************************************
4934 * Quadrature Rules on hexahedra
4935 ************************************************************************/
4936
4937 static const QuadraturePoint pt_hexa_1pt[ 1 ] = {
4938 QuadraturePoint( 0., 0., 0., 8. )
4939 };
4940 const QuadratureRule quadratureRuleHexa1pt( pt_hexa_1pt,
4941 "quadratureRuleHexa1pt", HEXAHEDRON, 1, 1 );
4942 //----------------------------------------------------------------------
4943 // 8 points Integration rule for hexahedron (tensorization of 2 pts on segment)
4944 static const QuadraturePoint pt_hexa_8pt[ 8 ] = {
4945 QuadraturePoint( q2ptx1, q2ptx1, q2ptx1, q2ptw1 * q2ptw1 * q2ptw1 ),
4946 QuadraturePoint( q2ptx2, q2ptx1, q2ptx1, q2ptw2 * q2ptw1 * q2ptw1 ),
4947 QuadraturePoint( q2ptx2, q2ptx2, q2ptx1, q2ptw2 * q2ptw2 * q2ptw1 ),
4948 QuadraturePoint( q2ptx1, q2ptx2, q2ptx1, q2ptw1 * q2ptw2 * q2ptw1 ),
4949 QuadraturePoint( q2ptx1, q2ptx1, q2ptx2, q2ptw1 * q2ptw1 * q2ptw2 ),
4950 QuadraturePoint( q2ptx2, q2ptx1, q2ptx2, q2ptw2 * q2ptw1 * q2ptw2 ),
4951 QuadraturePoint( q2ptx2, q2ptx2, q2ptx2, q2ptw2 * q2ptw2 * q2ptw2 ),
4952 QuadraturePoint( q2ptx1, q2ptx2, q2ptx2, q2ptw1 * q2ptw2 * q2ptw2 )
4953 };
4954 const QuadratureRule quadratureRuleHexa8pt( pt_hexa_8pt,
4955 "quadratureRuleHexa8pt", HEXAHEDRON, 8, 3 );
4956
4957 //----------------------------------------------------------------------
4958 // 27 points Integration rule for hexahedron (tensorization of 3 pts on segment)
4959 static const QuadraturePoint pt_hexa_27pt[ 27 ] = {
4960 QuadraturePoint( q3ptx1, q3ptx1, q3ptx1, q3ptw1 * q3ptw1 * q3ptw1),
4961 QuadraturePoint( q3ptx2, q3ptx1, q3ptx1, q3ptw2 * q3ptw1 * q3ptw1),
4962 QuadraturePoint( q3ptx3, q3ptx1, q3ptx1, q3ptw3 * q3ptw1 * q3ptw1),
4963 QuadraturePoint( q3ptx1, q3ptx2, q3ptx1, q3ptw1 * q3ptw2 * q3ptw1),
4964 QuadraturePoint( q3ptx2, q3ptx2, q3ptx1, q3ptw2 * q3ptw2 * q3ptw1),
4965 QuadraturePoint( q3ptx3, q3ptx2, q3ptx1, q3ptw3 * q3ptw2 * q3ptw1),
4966 QuadraturePoint( q3ptx1, q3ptx3, q3ptx1, q3ptw1 * q3ptw3 * q3ptw1),
4967 QuadraturePoint( q3ptx2, q3ptx3, q3ptx1, q3ptw2 * q3ptw3 * q3ptw1),
4968 QuadraturePoint( q3ptx3, q3ptx3, q3ptx1, q3ptw3 * q3ptw3 * q3ptw1),
4969
4970 QuadraturePoint( q3ptx1, q3ptx1, q3ptx2, q3ptw1 * q3ptw1 * q3ptw2),
4971 QuadraturePoint( q3ptx2, q3ptx1, q3ptx2, q3ptw2 * q3ptw1 * q3ptw2),
4972 QuadraturePoint( q3ptx3, q3ptx1, q3ptx2, q3ptw3 * q3ptw1 * q3ptw2),
4973 QuadraturePoint( q3ptx1, q3ptx2, q3ptx2, q3ptw1 * q3ptw2 * q3ptw2),
4974 QuadraturePoint( q3ptx2, q3ptx2, q3ptx2, q3ptw2 * q3ptw2 * q3ptw2),
4975 QuadraturePoint( q3ptx3, q3ptx2, q3ptx2, q3ptw3 * q3ptw2 * q3ptw2),
4976 QuadraturePoint( q3ptx1, q3ptx3, q3ptx2, q3ptw1 * q3ptw3 * q3ptw2),
4977 QuadraturePoint( q3ptx2, q3ptx3, q3ptx2, q3ptw2 * q3ptw3 * q3ptw2),
4978 QuadraturePoint( q3ptx3, q3ptx3, q3ptx2, q3ptw3 * q3ptw3 * q3ptw2),
4979
4980 QuadraturePoint( q3ptx1, q3ptx1, q3ptx3, q3ptw1 * q3ptw1 * q3ptw3),
4981 QuadraturePoint( q3ptx2, q3ptx1, q3ptx3, q3ptw2 * q3ptw1 * q3ptw3),
4982 QuadraturePoint( q3ptx3, q3ptx1, q3ptx3, q3ptw3 * q3ptw1 * q3ptw3),
4983 QuadraturePoint( q3ptx1, q3ptx2, q3ptx3, q3ptw1 * q3ptw2 * q3ptw3),
4984 QuadraturePoint( q3ptx2, q3ptx2, q3ptx3, q3ptw2 * q3ptw2 * q3ptw3),
4985 QuadraturePoint( q3ptx3, q3ptx2, q3ptx3, q3ptw3 * q3ptw2 * q3ptw3),
4986 QuadraturePoint( q3ptx1, q3ptx3, q3ptx3, q3ptw1 * q3ptw3 * q3ptw3),
4987 QuadraturePoint( q3ptx2, q3ptx3, q3ptx3, q3ptw2 * q3ptw3 * q3ptw3),
4988 QuadraturePoint( q3ptx3, q3ptx3, q3ptx3, q3ptw3 * q3ptw3 * q3ptw3),
4989
4990 };
4991 const QuadratureRule quadratureRuleHexa27pt( pt_hexa_27pt,
4992 "quadratureRuleHexa27pt", HEXAHEDRON, 27, 5 );
4993
4994 //----------------------------------------------------------------------
4995 // List of quadrature rules on hexahedra
4996 //----------------------------------------------------------------------
4997 static const QuadratureRule quad_rule_on_hexa[] =
4998 {quadratureRuleHexa1pt,quadratureRuleHexa8pt,quadratureRuleHexa27pt};
4999
5000 const ListOfQuadratureRule listQuadratureRuleHexahedron("listQuadratureRuleHexahedron",3,quad_rule_on_hexa);
5001 const ListOfQuadratureRule listQuadratureRuleHexahedronCombined("listQuadratureRuleHexahedronCombined",listQuadratureRuleQuadrilateral,listQuadratureRuleSegment);
5002
5003
5004 /************************************************************************
5005 * Quadrature Rules on Prisms
5006 ************************************************************************/
5007
5008 //----------------------------------------------------------------------
5009 // TODO: verify the deegre of exactness of all the prisms quadrature rules.
5010 // In the case of the composite rules it has been
5011 // arbitrarly std::set to a value so that they can be chosen.
5012 const double p3ptx1 = 1.0/6.0; const double p3ptx2 = 2.0/3.0;
5013 static const QuadraturePoint pt_prism_6pt[ 6 ] = {
5014 QuadraturePoint( p3ptx2, p3ptx1 , q2ptx1 , t3ptw * q2ptw1 ),
5015 QuadraturePoint( p3ptx1, p3ptx2 , q2ptx1 , t3ptw * q2ptw1 ),
5016 QuadraturePoint( p3ptx1, p3ptx1 , q2ptx1 , t3ptw * q2ptw1 ),
5017 QuadraturePoint( p3ptx2, p3ptx1 , q2ptx2 , t3ptw * q2ptw2 ),
5018 QuadraturePoint( p3ptx1, p3ptx2 , q2ptx2 , t3ptw * q2ptw2 ),
5019 QuadraturePoint( p3ptx1, p3ptx1 , q2ptx2 , t3ptw * q2ptw2 )
5020 };
5021 const QuadratureRule quadratureRulePrism6pt( pt_prism_6pt,
5022 "quadratureRulePrism6pt", PRISM, 6, 3 );
5023
5024 static const QuadraturePoint pt_prism_12pt_composite[ 12 ] = {
5025 QuadraturePoint( p3ptx2, p3ptx1, q2ptx1/2-0.5, t3ptw * q2ptw1/2 ),
5026 QuadraturePoint( p3ptx1, p3ptx2, q2ptx1/2-0.5, t3ptw * q2ptw1/2 ),
5027 QuadraturePoint( p3ptx2, p3ptx2, q2ptx1/2-0.5, t3ptw * q2ptw1/2 ),
5028 QuadraturePoint( p3ptx2, p3ptx1, q2ptx2/2-0.5, t3ptw * q2ptw2/2 ),
5029 QuadraturePoint( p3ptx1, p3ptx2, q2ptx2/2-0.5, t3ptw * q2ptw2/2 ),
5030 QuadraturePoint( p3ptx2, p3ptx2, q2ptx2/2-0.5, t3ptw * q2ptw2/2 ),
5031
5032 QuadraturePoint( p3ptx2, p3ptx1, q2ptx1/2+0.5, t3ptw * q2ptw1/2 ),
5033 QuadraturePoint( p3ptx1, p3ptx2, q2ptx1/2+0.5, t3ptw * q2ptw1/2 ),
5034 QuadraturePoint( p3ptx2, p3ptx2, q2ptx1/2+0.5, t3ptw * q2ptw1/2 ),
5035 QuadraturePoint( p3ptx2, p3ptx1, q2ptx2/2+0.5, t3ptw * q2ptw2/2 ),
5036 QuadraturePoint( p3ptx1, p3ptx2, q2ptx2/2+0.5, t3ptw * q2ptw2/2 ),
5037 QuadraturePoint( p3ptx2, p3ptx2, q2ptx2/2+0.5, t3ptw * q2ptw2/2 )
5038 };
5039 const QuadratureRule quadratureRulePrism12ptComposite( pt_prism_12pt_composite,
5040 "quadratureRulePrism12ptComposite", PRISM, 12, 4 ); // I do not know the real order of extactness.
5041
5042 static const QuadraturePoint pt_prism_21pt[ 21 ] = {
5043 QuadraturePoint( t7pt_x0, t7pt_x0,q3ptx1, t7pt_w0*q3ptw1 ),QuadraturePoint( t7pt_x1, t7pt_x1,q3ptx1, t7pt_w1*q3ptw1 ),
5044 QuadraturePoint( t7pt_x1, 1-2*t7pt_x1,q3ptx1, t7pt_w1*q3ptw1 ),QuadraturePoint( 1-2*t7pt_x1, t7pt_x1,q3ptx1, t7pt_w1*q3ptw1 ),
5045 QuadraturePoint( t7pt_x2, t7pt_x2,q3ptx1, t7pt_w2*q3ptw1 ),QuadraturePoint( t7pt_x2, 1-2*t7pt_x2,q3ptx1, t7pt_w2*q3ptw1 ),
5046 QuadraturePoint( 1-2*t7pt_x2, t7pt_x2,q3ptx1, t7pt_w2*q3ptw1 ),
5047
5048 QuadraturePoint( t7pt_x0, t7pt_x0,q3ptx2, t7pt_w0*q3ptw2 ),QuadraturePoint( t7pt_x1, t7pt_x1,q3ptx2, t7pt_w1*q3ptw2 ),
5049 QuadraturePoint( t7pt_x1, 1-2*t7pt_x1,q3ptx2, t7pt_w1*q3ptw2 ),QuadraturePoint( 1-2*t7pt_x1, t7pt_x1,q3ptx2, t7pt_w1*q3ptw2 ),
5050 QuadraturePoint( t7pt_x2, t7pt_x2,q3ptx2, t7pt_w2*q3ptw2 ),QuadraturePoint( t7pt_x2, 1-2*t7pt_x2,q3ptx2, t7pt_w2*q3ptw2 ),
5051 QuadraturePoint( 1-2*t7pt_x2, t7pt_x2,q3ptx2, t7pt_w2*q3ptw2 ),
5052
5053 QuadraturePoint( t7pt_x0, t7pt_x0,q3ptx3, t7pt_w0*q3ptw3 ),QuadraturePoint( t7pt_x1, t7pt_x1,q3ptx3, t7pt_w1*q3ptw3 ),
5054 QuadraturePoint( t7pt_x1, 1-2*t7pt_x1,q3ptx3, t7pt_w1*q3ptw3 ),QuadraturePoint( 1-2*t7pt_x1, t7pt_x1,q3ptx3, t7pt_w1*q3ptw3 ),
5055 QuadraturePoint( t7pt_x2, t7pt_x2,q3ptx3, t7pt_w2*q3ptw3 ),QuadraturePoint( t7pt_x2, 1-2*t7pt_x2,q3ptx3, t7pt_w2*q3ptw3 ),
5056 QuadraturePoint( 1-2*t7pt_x2, t7pt_x2,q3ptx3, t7pt_w2*q3ptw3 )
5057 };
5058 const QuadratureRule quadratureRulePrism21pt( pt_prism_21pt,
5059 "quadratureRulePrism21pt", PRISM, 21, 5 );
5060
5061 static const QuadraturePoint pt_prism_42ptComposite[ 42 ] = {
5062 QuadraturePoint( t7pt_x0, t7pt_x0,q3ptx1/2 - 0.5, t7pt_w0*q3ptw1/2 ),QuadraturePoint( t7pt_x1, t7pt_x1,q3ptx1/2-0.5, t7pt_w1*q3ptw1/2 ),
5063 QuadraturePoint( t7pt_x1, 1-2*t7pt_x1,q3ptx1/2-0.5, t7pt_w1*q3ptw1/2 ),QuadraturePoint( 1-2*t7pt_x1, t7pt_x1,q3ptx1/2-0.5, t7pt_w1*q3ptw1/2 ),
5064 QuadraturePoint( t7pt_x2, t7pt_x2,q3ptx1/2-0.5, t7pt_w2*q3ptw1/2 ),QuadraturePoint( t7pt_x2, 1-2*t7pt_x2,q3ptx1/2-0.5, t7pt_w2*q3ptw1/2 ),
5065 QuadraturePoint( 1-2*t7pt_x2, t7pt_x2,q3ptx1/2-0.5, t7pt_w2*q3ptw1/2 ),
5066
5067 QuadraturePoint( t7pt_x0, t7pt_x0,q3ptx2/2-0.5, t7pt_w0*q3ptw2/2 ),QuadraturePoint( t7pt_x1, t7pt_x1,q3ptx2/2-0.5, t7pt_w1*q3ptw2/2 ),
5068 QuadraturePoint( t7pt_x1, 1-2*t7pt_x1,q3ptx2/2-0.5, t7pt_w1*q3ptw2/2 ),QuadraturePoint( 1-2*t7pt_x1, t7pt_x1,q3ptx2/2-0.5, t7pt_w1*q3ptw2/2 ),
5069 QuadraturePoint( t7pt_x2, t7pt_x2,q3ptx2/2-0.5, t7pt_w2*q3ptw2/2 ),QuadraturePoint( t7pt_x2, 1-2*t7pt_x2,q3ptx2/2-0.5, t7pt_w2*q3ptw2/2 ),
5070 QuadraturePoint( 1-2*t7pt_x2, t7pt_x2,q3ptx2/2-0.5, t7pt_w2*q3ptw2/2 ),
5071
5072 QuadraturePoint( t7pt_x0, t7pt_x0,q3ptx3/2-0.5, t7pt_w0*q3ptw3/2 ),QuadraturePoint( t7pt_x1, t7pt_x1,q3ptx3/2-0.5, t7pt_w1*q3ptw3/2 ),
5073 QuadraturePoint( t7pt_x1, 1-2*t7pt_x1,q3ptx3/2-0.5, t7pt_w1*q3ptw3/2 ),QuadraturePoint( 1-2*t7pt_x1, t7pt_x1,q3ptx3/2-0.5, t7pt_w1*q3ptw3/2 ),
5074 QuadraturePoint( t7pt_x2, t7pt_x2,q3ptx3/2-0.5, t7pt_w2*q3ptw3/2 ),QuadraturePoint( t7pt_x2, 1-2*t7pt_x2,q3ptx3/2-0.5, t7pt_w2*q3ptw3/2 ),
5075 QuadraturePoint( 1-2*t7pt_x2, t7pt_x2,q3ptx3/2-0.5, t7pt_w2*q3ptw3/2 ),
5076
5077
5078 QuadraturePoint( t7pt_x0, t7pt_x0,q3ptx1/2+0.5, t7pt_w0*q3ptw1/2 ),QuadraturePoint( t7pt_x1, t7pt_x1,q3ptx1/2+0.5, t7pt_w1*q3ptw1/2 ),
5079 QuadraturePoint( t7pt_x1, 1-2*t7pt_x1,q3ptx1/2+0.5, t7pt_w1*q3ptw1/2 ),QuadraturePoint( 1-2*t7pt_x1, t7pt_x1,q3ptx1/2+0.5, t7pt_w1*q3ptw1/2 ),
5080 QuadraturePoint( t7pt_x2, t7pt_x2,q3ptx1/2+0.5, t7pt_w2*q3ptw1/2 ),QuadraturePoint( t7pt_x2, 1-2*t7pt_x2,q3ptx1/2+0.5, t7pt_w2*q3ptw1/2 ),
5081 QuadraturePoint( 1-2*t7pt_x2, t7pt_x2,q3ptx1/2+0.5, t7pt_w2*q3ptw1/2 ),
5082
5083 QuadraturePoint( t7pt_x0, t7pt_x0,q3ptx2/2+0.5, t7pt_w0*q3ptw2/2 ),QuadraturePoint( t7pt_x1, t7pt_x1,q3ptx2/2+0.5, t7pt_w1*q3ptw2/2 ),
5084 QuadraturePoint( t7pt_x1, 1-2*t7pt_x1,q3ptx2/2+0.5, t7pt_w1*q3ptw2/2 ),QuadraturePoint( 1-2*t7pt_x1, t7pt_x1,q3ptx2/2+0.5, t7pt_w1*q3ptw2/2 ),
5085 QuadraturePoint( t7pt_x2, t7pt_x2,q3ptx2/2+0.5, t7pt_w2*q3ptw2/2 ),QuadraturePoint( t7pt_x2, 1-2*t7pt_x2,q3ptx2/2+0.5, t7pt_w2*q3ptw2/2 ),
5086 QuadraturePoint( 1-2*t7pt_x2, t7pt_x2,q3ptx2/2+0.5, t7pt_w2*q3ptw2/2 ),
5087
5088 QuadraturePoint( t7pt_x0, t7pt_x0,q3ptx3/2+0.5, t7pt_w0*q3ptw3/2 ),QuadraturePoint( t7pt_x1, t7pt_x1,q3ptx3/2+0.5, t7pt_w1*q3ptw3/2 ),
5089 QuadraturePoint( t7pt_x1, 1-2*t7pt_x1,q3ptx3/2+0.5, t7pt_w1*q3ptw3/2 ),QuadraturePoint( 1-2*t7pt_x1, t7pt_x1,q3ptx3/2+0.5, t7pt_w1*q3ptw3/2 ),
5090 QuadraturePoint( t7pt_x2, t7pt_x2,q3ptx3/2+0.5, t7pt_w2*q3ptw3/2 ),QuadraturePoint( t7pt_x2, 1-2*t7pt_x2,q3ptx3/2+0.5, t7pt_w2*q3ptw3/2 ),
5091 QuadraturePoint( 1-2*t7pt_x2, t7pt_x2,q3ptx3/2+0.5, t7pt_w2*q3ptw3/2 )
5092 };
5093 const QuadratureRule quadratureRulePrism42ptComposite( pt_prism_42ptComposite,
5094 "quadratureRulePrism42ptComposite", PRISM, 42, 6 );
5095 /*
5096 static const QuadraturePoint pt_prism_15pt[ 15 ] =
5097 {
5098 QuadraturePoint( p3ptx2, p3ptx1, q2ptx1, t3ptw * q2ptw1 ),
5099 QuadraturePoint( p3ptx1, p3ptx2, q2ptx1, t3ptw * q2ptw1 ),
5100 QuadraturePoint( p3ptx2, p3ptx2, q2ptx1, t3ptw * q2ptw1 ),
5101 QuadraturePoint( p3ptx2, p3ptx1, q2ptx2, t3ptw * q2ptw2 ),
5102 QuadraturePoint( p3ptx1, p3ptx2, q2ptx2, t3ptw * q2ptw2 ),
5103 QuadraturePoint( p3ptx2, p3ptx2, q2ptx2, t3ptw * q2ptw2 )
5104 };
5105 const QuadratureRule quadratureRulePrism15pt( pt_prism_15pt,
5106 "quadratureRulePrism15pt", PRISM, 15, 3 );
5107 */
5108 //----------------------------------------------------------------------
5109 // List of quadrature rules on Prisms
5110 //----------------------------------------------------------------------
5111 static const QuadratureRule quad_rule_on_prism[] =
5112 {quadratureRulePrism6pt,
5113 quadratureRulePrism12ptComposite,
5114 quadratureRulePrism21pt,
5115 quadratureRulePrism42ptComposite
5116 };
5117
5118 const ListOfQuadratureRule listQuadratureRulePrism("listQuadratureRulePrism",4,quad_rule_on_prism);
5119 const ListOfQuadratureRule listQuadratureRulePrismCombined("listQuadratureRulePrismCombined",listQuadratureRuleTriangle,listQuadratureRuleSegment);
5120
5121 /*========================================================================
5122 !
5123 ! GEOMETRIC ELEMENT
5124 !
5125 =======================================================================*/
5126
5127
5128 /************************************************************************
5129 * GeoElementNULL
5130 *
5131 * VOID
5132 *
5133 *************************************************************************/
5134 const GeoElement geoElementNULL("geoElementNULL",NULLSHAPE,basisFunctionNULL,nullptr,0,0,
5135 nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,refElementSegmentP1/*refElementNULL*/);
5136
5137
5138 /************************************************************************
5139 * GeoElementNode
5140 *
5141 * 0d
5142 *
5143 *************************************************************************/
5144 static const double refcoorNode[] = {0.,0.,0.};
5145 const GeoElement geoElementNode("geoElementNode",NODE,basisFunction0d,refcoorNode,0,0,
5146 nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,refElementNode);
5147
5148
5149 /************************************************************************
5150 * GeoElementSegmentP1
5151 *
5152 * 0-----------1
5153 *
5154 *************************************************************************/
5155 static const int m_ptOfEdLinearSeg[] = {0,1};
5156 static const double refcoor_P1_1D[] = {-1.,0.,0., 1.,0.,0.};
5157
5158 static const Point m_pointSegmentP1[] = {
5159 Point(-1.,0.,0.),Point(1.,0.,0.)
5160 };
5161
5162 const GeoElement geoElementSegmentP1("geoElementSegmentP1",SEGMENT,basisFunction1dP1,refcoor_P1_1D,1,0,
5163 m_ptOfEdLinearSeg,nullptr,nullptr,nullptr,nullptr,nullptr,refElementSegmentP1);
5164
5165
5166 /************************************************************************
5167 * GeoElementSegmentP1b
5168 *
5169 * 0-----2-----1
5170 *
5171 *************************************************************************/
5172 static const int m_ptOfEdLinearSegP1b[] = {0,1,2};
5173 static const double refcoor_P1b_1D[] = {-1.,0.,0., 1.,0.,0., 0.,0.,0.};
5174
5175 static const Point m_pointSegmentP1b[] = {
5176 Point(-1.,0.,0.),Point(1.,0.,0.),Point(0.,0.,0.)
5177 };
5178
5179 const GeoElement geoElementSegmentP1b("geoElementSegmentP1b",SEGMENT,basisFunction1dP1b,refcoor_P1b_1D,1,0,
5180 m_ptOfEdLinearSegP1b,nullptr,nullptr,nullptr,nullptr,nullptr,refElementSegmentP1b);
5181
5182
5183 /************************************************************************
5184 * GeoElementSegmentP2
5185 *
5186 * 0-----2-----1
5187 *
5188 *************************************************************************/
5189 static const int m_ptOfEdLinearSegP2[] = {0,1,2};
5190 static const double refcoor_P2_1D[] = {-1.,0.,0., 1.,0.,0., 0.,0.,0.};
5191
5192 static const Point m_pointSegmentP2[] = {
5193 Point(-1.,0.,0.),Point(1.,0.,0.),Point(0.,0.,0.)
5194 };
5195
5196 const GeoElement geoElementSegmentP2("geoElementSegmentP2",SEGMENT,basisFunction1dP2,refcoor_P2_1D,1,0,
5197 m_ptOfEdLinearSegP2,nullptr,nullptr,nullptr,nullptr,nullptr,refElementSegmentP2);
5198
5199
5200 /************************************************************************
5201 * geoElementTriangleP0
5202 *
5203 * \
5204 * | \
5205 * | \
5206 * | \
5207 * | 0 \
5208 * | \
5209 * ------------
5210 *
5211 *************************************************************************/
5212
5213 /************************************************************************
5214 * geoElementTriangleP1
5215 *
5216 * 2
5217 * | \
5218 * | \
5219 * | \
5220 * | \
5221 * | \
5222 * 0-----------1
5223 *
5224 *************************************************************************/
5225 static const GeoElement* m_boundaryGeoTriangleP1[] = {&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1};
5226 static const int m_ptOfEdLinearTriangle[] = {0,1, 1,2, 2,0};
5227 static const int m_ptOfFaLinearTriangle[] = {0,1,2};
5228 static const int m_edOfFaLinearTriangle[] = {0,1,2};
5229 static const bool m_orientEdLinearTriangle[] = {false,false,false};
5230 static const double refcoor_P1_2D[] = {0.,0.,0., 1.,0.,0., 0.,1.,0.};
5231
5232
5233 const GeoElement geoElementTriangleP1("geoElementTriangleP1",TRIANGLE,basisFunction2dP1,refcoor_P1_2D,3,1,
5234 m_ptOfEdLinearTriangle,m_ptOfFaLinearTriangle,m_edOfFaLinearTriangle,m_orientEdLinearTriangle,
5235 m_boundaryGeoTriangleP1,nullptr,refElementTriangleP1);
5236
5237
5238 /************************************************************************
5239 * geoElementTriangleP1b
5240 *
5241 * 2
5242 * | \
5243 * | \
5244 * | \
5245 * | 3 \
5246 * | \
5247 * 0-----------1
5248 *
5249 *************************************************************************/
5250 static const int m_ptOfFaLinearTriangleP1b[] = {0,1,2,3};
5251 static const double refcoor_P1b_2D[] = {0.,0.,0., 1.,0.,0., 0.,1.,0., 1./3.,1./3.,0.};
5252
5253 const GeoElement geoElementTriangleP1b("geoElementTriangleP1b",TRIANGLE,basisFunction2dP1b,refcoor_P1b_2D,3,1,
5254 m_ptOfEdLinearTriangle,m_ptOfFaLinearTriangleP1b,m_edOfFaLinearTriangle,
5255 m_orientEdLinearTriangle,m_boundaryGeoTriangleP1,nullptr,
5256 refElementTriangleP1b);
5257
5258
5259 /************************************************************************
5260 * geoElementTriangleP2
5261 *
5262 * 2
5263 * | \
5264 * | \
5265 * 5 4
5266 * | \
5267 * | \
5268 * 0-----3----1
5269 *
5270 *************************************************************************/
5271 static const GeoElement* m_boundaryGeoTriangleP2[] = {&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2};
5272 static const int m_ptOfEdLinearTriangleP2[] = {0,1,3, 1,2,4, 2,0,5};
5273 static const int m_ptOfFaLinearTriangleP2[] = {0,1,2,3,4,5};
5274 static const int m_edOfFaLinearTriangleP2[] = {0,1,2};
5275 static const bool m_orientEdLinearTriangleP2[] = {false,false,false};
5276 static const double refcoor_P2_2D[] = {0.,0.,0., 1.,0.,0., 0.,1.,0., 0.5,0.,0., 0.5,0.5,0., 0.,0.5,0.};
5277
5278
5279 const GeoElement geoElementTriangleP2("geoElementTriangleP2",TRIANGLE,basisFunction2dP2,refcoor_P2_2D,3,1,
5280 m_ptOfEdLinearTriangleP2,m_ptOfFaLinearTriangleP2,m_edOfFaLinearTriangleP2,m_orientEdLinearTriangleP2,
5281 m_boundaryGeoTriangleP2,nullptr,refElementTriangleP2);
5282
5283
5284 /************************************************************************
5285 * geoElementQuadrangleQ0
5286 *
5287 * -------------
5288 * | |
5289 * | |
5290 * | 0 |
5291 * | |
5292 * | |
5293 * -------------
5294 *
5295 *************************************************************************/
5296
5297
5298
5299 /************************************************************************
5300 * geoElementQuadrangleQ1
5301 *
5302 * 3-----------2
5303 * | |
5304 * | |
5305 * | |
5306 * | |
5307 * | |
5308 * 0-----------1
5309 *
5310 *************************************************************************/
5311
5312 static const GeoElement* m_boundaryGeoQuadrangleQ1[] = {&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1};
5313 static const int m_ptOfEdLinearQuadrangle[] = {0,1, 1,2, 2,3, 3,0};
5314 static const int m_ptOfFaLinearQuadrangle[] = {0,1,2,3}; // numerotation of the points
5315 static const int m_edOfFaLinearQuadrangle[] = {0,1,2,3}; // numerotation of the edges
5316 static const bool m_orientEdLinearQuadrangle[] = {false,false,false,false};
5317 static const double refcoor_Q1_2D[] = {-1.,-1.,0., 1.,-1.,0., 1.,1.,0., -1.,1.,0};
5318
5319 const GeoElement geoElementQuadrangleQ1("geoElementQuadrangleQ1",QUADRILATERAL,basisFunction2dQ1,refcoor_Q1_2D,4,1,
5320 m_ptOfEdLinearQuadrangle,m_ptOfFaLinearQuadrangle,m_edOfFaLinearQuadrangle,m_orientEdLinearQuadrangle,
5321 m_boundaryGeoQuadrangleQ1,nullptr,refElementQuadrangleQ1);
5322
5323 /************************************************************************
5324 * geoElementQuadrangleP1xP2 (for the corresponding prism) //I thought it was important for the Prism P1xP2, but the geometric element will be R1
5325 *
5326 * 3-----------2
5327 * | |
5328 * | |
5329 * 4| |5
5330 * | |
5331 * | |
5332 * 0-----------1
5333 *
5334 *************************************************************************/
5335
5336 static const GeoElement* m_boundaryGeoQuadrangleP1xP2[] = {&geoElementSegmentP1,&geoElementSegmentP2,&geoElementSegmentP1,&geoElementSegmentP2};
5337 static const int m_ptOfEdQuadrangleP1xP2[] = {0,1, 1,2,5, 2,3, 3,0,4};
5338 static const int m_ptOfFaQuadrangleP1xP2[] = {0,1,2,3,4,5}; // numerotation of the points
5339 static const int m_edOfFaQuadrangleP1xP2[] = {0,1,2,3}; // numerotation of the edges
5340 static const bool m_orientEdQuadrangleP1xP2[] = {false,false,false,false};
5341 static const double refcoor_P1xP2_2D[] = {-1.,-1.,0., 1.,-1.,0., 1.,1.,0., -1.,1.,0, -1.,0.,0., 1.,0.,0.};
5342
5343 const GeoElement geoElementQuadrangleP1xP2("geoElementQuadrangleP1xP2",QUADRILATERAL,basisFunction2dP1xP2,refcoor_P1xP2_2D,4,1,
5344 m_ptOfEdQuadrangleP1xP2,m_ptOfFaQuadrangleP1xP2,m_edOfFaQuadrangleP1xP2,m_orientEdQuadrangleP1xP2,
5345 m_boundaryGeoQuadrangleP1xP2,nullptr,refElementQuadrangleP1xP2);
5346
5347
5348 /************************************************************************
5349 * geoElementQuadrangleQ1b
5350 *
5351 * 3-----------2
5352 * | |
5353 * | |
5354 * | 4 |
5355 * | |
5356 * | |
5357 * 0-----------1
5358 *
5359 *************************************************************************/
5360
5361 static const int m_ptOfFaLinearQuadrangleQ1b[] = {0,1,2,3,4}; // numerotation of the points
5362 static const double refcoor_Q1b_2D[] = {-1.,-1.,0., 1.,-1.,0., 1.,1.,0., -1.,1.,0, 0.,0.,0.};
5363
5364 const GeoElement geoElementQuadrangleQ1b("geoElementQuadrangleQ1b",QUADRILATERAL,basisFunction2dQ1b,refcoor_Q1b_2D,4,1, m_ptOfEdLinearQuadrangle,m_ptOfFaLinearQuadrangleQ1b,m_edOfFaLinearQuadrangle,m_orientEdLinearQuadrangle,m_boundaryGeoQuadrangleQ1,nullptr,refElementQuadrangleQ1b);
5365
5366
5367 /************************************************************************
5368 * geoElementQuadrangleQ2c
5369 *
5370 * 3-----6-----2
5371 * | |
5372 * | |
5373 * 7 8 5
5374 * | |
5375 * | |
5376 * 0-----4-----1
5377 *
5378 *************************************************************************/
5379 static const GeoElement* m_boundaryGeoQuadrangleQ2c[] = {&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2};
5380 static const int m_ptOfEdLinearQuadrangleQ2c[] = {0,1,4, 1,2,5, 2,3,6, 3,0,7};
5381 static const int m_ptOfFaLinearQuadrangleQ2c[] = {0,1,2,3,4,5,6,7,8}; // numerotation of the points
5382 static const int m_edOfFaLinearQuadrangleQ2c[] = {0,1,2,3}; // numerotation of the edges
5383 static const bool m_orientEdLinearQuadrangleQ2c[] = {false,false,false,false};
5384 static const double refcoor_Q2c_2D[] = {-1.,-1.,0., 1.,-1.,0., 1.,1.,0., -1.,1.,0, 0.,-1.,0., 1.,0.,0., 0.,1.,0., -1.,0.,0., 0.,0.,0.};
5385
5386 const GeoElement geoElementQuadrangleQ2c("geoElementQuadrangleQ2c",QUADRILATERAL,basisFunction2dQ2c,refcoor_Q2c_2D,4,1,
5387 m_ptOfEdLinearQuadrangleQ2c,m_ptOfFaLinearQuadrangleQ2c,m_edOfFaLinearQuadrangleQ2c,m_orientEdLinearQuadrangleQ2c,
5388 m_boundaryGeoQuadrangleQ2c,nullptr,refElementQuadrangleQ2c);
5389
5390
5391 /************************************************************************
5392 * geoElementQuadrangleQ2
5393 *
5394 * 3-----6-----2
5395 * | |
5396 * | |
5397 * 7 5
5398 * | |
5399 * | |
5400 * 0-----4-----1
5401 *
5402 *************************************************************************/
5403 static const GeoElement* m_boundaryGeoQuadrangleQ2[] = {&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2};
5404 static const int m_ptOfEdLinearQuadrangleQ2[] = {0,1,4, 1,2,5, 2,3,6, 3,0,7};
5405 static const int m_ptOfFaLinearQuadrangleQ2[] = {0,1,2,3,4,5,6,7}; // numerotation of the points
5406 static const int m_edOfFaLinearQuadrangleQ2[] = {0,1,2,3}; // numerotation of the edges
5407 static const bool m_orientEdLinearQuadrangleQ2[] = {false,false,false,false};
5408 static const double refcoor_Q2_2D[] = {-1.,-1.,0., 1.,-1.,0., 1.,1.,0., -1.,1.,0, 0.,-1.,0., 1.,0.,0., 0.,1.,0., -1.,0.,0.};
5409
5410 const GeoElement geoElementQuadrangleQ2("geoElementQuadrangleQ2",QUADRILATERAL,basisFunction2dQ2,refcoor_Q2_2D,4,1,
5411 m_ptOfEdLinearQuadrangleQ2,m_ptOfFaLinearQuadrangleQ2,m_edOfFaLinearQuadrangleQ2,m_orientEdLinearQuadrangleQ2,
5412 m_boundaryGeoQuadrangleQ2,nullptr,refElementQuadrangleQ2);
5413
5414
5415 /************************************************************************
5416 * geoElementTetrahedronP1
5417 *
5418 * 3
5419 * /.\
5420 * / . \
5421 * / 2 \
5422 * / . . \
5423 * /. . \
5424 * 0-----------1
5425 *
5426 *************************************************************************/
5427 static const GeoElement* m_boundaryGeoTetrahedronP1[4] = {
5428 &geoElementTriangleP1,&geoElementTriangleP1,&geoElementTriangleP1,&geoElementTriangleP1
5429 };
5430 static const GeoElement* m_boundaryBoundaryGeoTetrahedronP1[6] = {
5431 &geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1
5432 };
5433 static const int m_ptOfEdLinearTetra[] = {0,1, 1,2, 2,0, 0,3, 1,3, 2,3};
5434 static const int m_ptOfFaLinearTetra[] = {0,2,1, 0,1,3, 1,2,3, 0,3,2};
5435 static const int m_edOfFaLinearTetra[] = {2,1,0, 0,4,3, 1,5,4, 3,5,2};
5436 static const bool m_orientEdLinearTetra[] = {false,false,false, true,true,false, true,true,false, true,false,true};
5437 static const double refcoor_P1_3D[] = {0.,0.,0., 1.,0.,0., 0.,1.,0., 0.,0.,1.};
5438
5439 const GeoElement geoElementTetrahedronP1("geoElementTetrahedronP1",TETRAHEDRON,basisFunction3dP1,refcoor_P1_3D,6,4,
5440 m_ptOfEdLinearTetra,m_ptOfFaLinearTetra,m_edOfFaLinearTetra,m_orientEdLinearTetra,
5441 m_boundaryGeoTetrahedronP1,m_boundaryBoundaryGeoTetrahedronP1,refElementTetrahedronP1);
5442
5443
5444 /************************************************************************
5445 * geoElementTetrahedronP1b
5446 *
5447 * 3
5448 * /.\
5449 * / . \
5450 * / 2 \
5451 * / . 4. \
5452 * /. . \
5453 * 0-----------1
5454 *
5455 *************************************************************************/
5456 static const double refcoor_P1b_3D[] = {0.,0.,0., 1.,0.,0., 0.,1.,0., 0.,0.,1., 0.25,0.25,0.25};
5457
5458 const GeoElement geoElementTetrahedronP1b("geoElementTetrahedronP1b",TETRAHEDRON,basisFunction3dP1b,refcoor_P1b_3D,6,4,
5459 m_ptOfEdLinearTetra,m_ptOfFaLinearTetra,m_edOfFaLinearTetra,m_orientEdLinearTetra,
5460 m_boundaryGeoTetrahedronP1,m_boundaryBoundaryGeoTetrahedronP1,refElementTetrahedronP1b);
5461
5462
5463 /************************************************************************
5464 * geoElementTetrahedronP2
5465 *
5466 * 3
5467 * /.\
5468 * / 9 \
5469 * 7 . 8
5470 * / . 2 . \
5471 * / 6 5 \
5472 * 0-----4-----1
5473 *
5474 *
5475 *************************************************************************/
5476 static const GeoElement* m_boundaryGeoTetrahedronP2[4] = {
5477 &geoElementTriangleP2,&geoElementTriangleP2,&geoElementTriangleP2,&geoElementTriangleP2
5478 };
5479 static const GeoElement* m_boundaryBoundaryGeoTetrahedronP2[6] = {
5480 &geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2
5481 };
5482 static const int m_ptOfEdLinearTetraP2[] = {0,1,4, 1,2,5, 2,0,6, 0,3,7, 1,3,8, 2,3,9};
5483 static const int m_ptOfFaLinearTetraP2[] = {0,2,1,6,5,4, 0,1,3,4,7,8, 1,2,3,5,9,8, 0,3,2,7,9,6};
5484 static const int m_edOfFaLinearTetraP2[] = {2,1,0, 0,4,3, 1,5,4, 3,5,2};
5485 static const bool m_orientEdLinearTetraP2[] = {false,false,false, true,true,false, true,true,false, true,false,true};
5486 static const double refcoor_P2_3D[] = {0.,0.,0., 1.,0.,0., 0.,1.,0., 0.,0.,1., 0.5,0.,0., 0.5,0.5,0., 0.,0.5,0., 0.,0.,0.5, 0.5,0.,0.5, 0.,0.5,0.5};
5487
5488 const GeoElement geoElementTetrahedronP2("geoElementTetrahedronP2",TETRAHEDRON,basisFunction3dP2,refcoor_P2_3D,6,4,
5489 m_ptOfEdLinearTetraP2,m_ptOfFaLinearTetraP2,m_edOfFaLinearTetraP2,m_orientEdLinearTetraP2,
5490 m_boundaryGeoTetrahedronP2,m_boundaryBoundaryGeoTetrahedronP2,refElementTetrahedronP2);
5491
5492
5493 /************************************************************************
5494 * geoElementHexahedronQ1
5495 *
5496 * 7--------6
5497 * /. /|
5498 * / . / |
5499 * 4________5 |
5500 * | . | |
5501 * | 3.....|..2
5502 * | . | /
5503 * |. |/
5504 * 0________1
5505 *
5506 *
5507 *************************************************************************/
5508 static const GeoElement* m_boundaryGeoHexahedronQ1[6] = {
5509 &geoElementQuadrangleQ1,&geoElementQuadrangleQ1,&geoElementQuadrangleQ1,&geoElementQuadrangleQ1,&geoElementQuadrangleQ1,&geoElementQuadrangleQ1
5510 };
5511 static const GeoElement* m_boundaryBoundaryGeoHexahedronQ1[12] = {
5512 &geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,
5513 &geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1
5514 };
5515 static const int m_ptOfEdLinearHexa[] = {0,1, 1,2, 2,3, 3,0, 0,4, 1,5, 2,6, 3,7, 4,5, 5,6, 6,7, 7,4};
5516 static const int m_ptOfFaLinearHexa[] = {0,3,2,1, 0,4,7,3, 0,1,5,4, 4,5,6,7, 1,2,6,5, 2,3,7,6};
5517 static const int m_edOfFaLinearHexa[] = {3,2,1,0, 4,11,7,3, 0,5,8,4, 8,9,10,11, 1,6,9,5, 2,7,10,6};
5518 static const bool m_orientEdLinearHexa[] = {false,false,false,false, true,false,false,true, true,true,false,false, true,true,true,true, true,true,false,false, true,true,false,false};
5519 static const double refcoor_Q1_3D[] = {-1.,-1.,-1., 1.,-1.,-1., 1.,1.,-1., -1.,1.,-1., -1.,-1.,1., 1.,-1.,1., 1.,1.,1., -1.,1.,1.};
5520
5521
5522 const GeoElement geoElementHexahedronQ1("geoElementHexahedronQ1",HEXAHEDRON,basisFunction3dQ1,refcoor_Q1_3D,12,6,
5523 m_ptOfEdLinearHexa,m_ptOfFaLinearHexa,m_edOfFaLinearHexa,m_orientEdLinearHexa,
5524 m_boundaryGeoHexahedronQ1,m_boundaryBoundaryGeoHexahedronQ1,refElementHexahedronQ1);
5525
5526
5527 /************************************************************************
5528 * geoElementHexahedronQ1b
5529 *
5530 * 7--------6
5531 * /. /|
5532 * / . / |
5533 * 4________5 |
5534 * | . 8 | |
5535 * | 3.....|..2
5536 * | . | /
5537 * |. |/
5538 * 0________1
5539 *
5540 *
5541 *************************************************************************/
5542 static const double refcoor_Q1b_3D[] = {-1.,-1.,-1., 1.,-1.,-1., 1.,1.,-1., -1.,1.,-1., -1.,-1.,1., 1.,-1.,1., 1.,1.,1., -1.,1.,1., 0.,0.,0.};
5543
5544 const GeoElement geoElementHexahedronQ1b("geoElementHexahedronQ1b",HEXAHEDRON,basisFunction3dQ1b,refcoor_Q1b_3D,12,6,
5545 m_ptOfEdLinearHexa,m_ptOfFaLinearHexa,m_edOfFaLinearHexa,m_orientEdLinearHexa,
5546 m_boundaryGeoHexahedronQ1,m_boundaryBoundaryGeoHexahedronQ1,refElementHexahedronQ1b);
5547
5548
5549 /************************************************************************
5550 * geoElementHexahedronQ2
5551 *
5552 * 7---18---6
5553 * / . /|
5554 * 19 . 17 |
5555 * / 15 / 14
5556 * 4____16___5 |
5557 * | . | |
5558 * | 3..10|.. 2
5559 * 12 . 13 /
5560 * | 11 | 9
5561 * |. |/
5562 * 0____8____1
5563 *
5564 *
5565 *************************************************************************/
5566 static const GeoElement* m_boundaryGeoHexahedronQ2[6] = {
5567 &geoElementQuadrangleQ2,&geoElementQuadrangleQ2,&geoElementQuadrangleQ2,&geoElementQuadrangleQ2,&geoElementQuadrangleQ2,&geoElementQuadrangleQ2
5568 };
5569
5570 static const GeoElement* m_boundaryBoundaryGeoHexahedronQ2[12] = {
5571 &geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,
5572 &geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2
5573 };
5574
5575 static const int m_ptOfEdLinearHexaQ2[] = {0,1,8, 1,2,9, 2,3,10, 3,0,11, 0,4,12, 1,5,13, 2,6,14, 3,7,15, 4,5,16, 5,6,17, 6,7,18, 7,4,19};
5576 static const int m_ptOfFaLinearHexaQ2[] = {0,3,2,1,11,10,9,8, 0,4,7,3,12,19,15,11, 0,1,5,4,8,13,16,12, 4,5,6,7,16,17,18,19, 1,2,6,5,9,14,17,13, 2,3,7,6,10,15,18,14};
5577 static const int m_edOfFaLinearHexaQ2[] = {3,2,1,0, 4,11,7,3, 0,5,7,4, 8,9,10,11, 1,6,9,5, 2,7,10,6};
5578 static const bool m_orientEdLinearHexaQ2[] = {false,false,false,false, true,false,false,true, true,true,false,false, true,true,true,true, true,true,false,false, true,true,false,false};
5579
5580 const GeoElement geoElementHexahedronQ2("geoElementHexahedronQ2",HEXAHEDRON,basisFunction3dQ2,refcoor_Q2_3D,12,6,
5581 m_ptOfEdLinearHexaQ2,m_ptOfFaLinearHexaQ2,m_edOfFaLinearHexaQ2,m_orientEdLinearHexaQ2,
5582 m_boundaryGeoHexahedronQ2, m_boundaryBoundaryGeoHexahedronQ2,refElementHexahedronQ2);
5583
5584
5585 /************************************************************************
5586 * geoElementHexahedronQ2c
5587 *
5588 * 7---18---6
5589 * /. /|
5590 * 19 . 23 17 |
5591 * / 15 25 / 14
5592 * 4____16___5 |
5593 * |21 . | 24|
5594 * | 3..10.|.. 2
5595 * 12 . 22 13 /
5596 * | 11 20 | 9
5597 * |. |/
5598 * 0____8____1
5599 *
5600 * + 26 in the middle of the cube (not displayed)
5601 *************************************************************************/
5602 static const GeoElement* m_boundaryGeoHexahedronQ2c[6] = {
5603 &geoElementQuadrangleQ2c,&geoElementQuadrangleQ2c,&geoElementQuadrangleQ2c,&geoElementQuadrangleQ2c,&geoElementQuadrangleQ2c,&geoElementQuadrangleQ2c
5604 };
5605
5606 static const GeoElement* m_boundaryBoundaryGeoHexahedronQ2c[12] = {
5607 &geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,
5608 &geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2
5609 };
5610
5611 static const int m_ptOfEdLinearHexaQ2c[] = {0,1,8, 1,2,9, 2,3,10, 3,0,11, 0,4,12, 1,5,13, 2,6,14, 3,7,15, 4,5,16, 5,6,17, 6,7,18, 7,4,19};
5612 static const int m_ptOfFaLinearHexaQ2c[] = {0,3,2,1,11,10,9,8,20, 0,4,7,3,12,19,15,11,21, 0,1,5,4,8,13,16,12,22, 4,5,6,7,16,17,18,19,23, 1,2,6,5,9,14,17,13,24, 2,3,7,6,10,15,18,14,25};
5613 static const int m_edOfFaLinearHexaQ2c[] = {3,2,1,0, 4,11,7,3, 0,5,7,4, 8,9,10,11, 1,6,9,5, 2,7,10,6};
5614 static const bool m_orientEdLinearHexaQ2c[] = {false,false,false,false, true,false,false,true, true,true,false,false, true,true,true,true, true,true,false,false, true,true,false,false} ;
5615
5616 const GeoElement geoElementHexahedronQ2c("geoElementHexahedronQ2c",HEXAHEDRON,basisFunction3dQ2c,refcoor_Q2c_3D,12,6,
5617 m_ptOfEdLinearHexaQ2c,m_ptOfFaLinearHexaQ2c,m_edOfFaLinearHexaQ2c,m_orientEdLinearHexaQ2c,
5618 m_boundaryGeoHexahedronQ2c, m_boundaryBoundaryGeoHexahedronQ2c,refElementHexahedronQ2c);
5619
5620
5621 /************************************************************************
5622 * geoElementPrismR1
5623 *
5624 * 5
5625 * / . \
5626 * / . \
5627 * 3-------4
5628 * | . |
5629 * | . |
5630 * | .2. |
5631 * | . . |
5632 * |. .|
5633 * 0-------1
5634 *
5635 *************************************************************************/
5636 static const GeoElement* m_boundaryGeoPrismR1[5] = {
5637 &geoElementTriangleP1,&geoElementQuadrangleQ1,&geoElementQuadrangleQ1,&geoElementTriangleP1,&geoElementQuadrangleQ1
5638 };
5639 static const GeoElement* m_boundaryBoundaryGeoPrismR1[9] = {
5640 &geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,
5641 &geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1
5642 };
5643 static const int m_ptOfEdLinearPrism[] = {0,1, 1,2, 2,0, 0,3, 1,4, 2,5, 3,4, 4,5, 5,3};
5644 static const int m_ptOfFaLinearPrism[] = {0,2,1, 0,3,5,2, 0,1,4,3, 3,4,5, 1,2,5,4};
5645 static const int m_edOfFaLinearPrism[] = {2,1,0, 3,8,5,2, 0,4,6,3, 6,7,8, 1,5,7,4};
5646 static const bool m_orientEdLinearPrism[] = {false,false,false, true,false,false,true, true,true,false,false, true,true,true, true,true,false,false} ;
5647
5648
5649 const GeoElement geoElementPrismR1("geoElementPrismR1",PRISM,basisFunction3dR1,refcoor_R1_3D,9,5,
5650 m_ptOfEdLinearPrism,m_ptOfFaLinearPrism,m_edOfFaLinearPrism,m_orientEdLinearPrism,
5651 m_boundaryGeoPrismR1,m_boundaryBoundaryGeoPrismR1,refElementPrismR1);
5652
5653
5654 /************************************************************************
5655 * geoElementPrism (P1xP2) //we use, as geometric element, the R1
5656 *
5657 * 5
5658 * / . \
5659 * / . \
5660 * 3-------4
5661 * | .8 |
5662 * | . |
5663 * 6| .2. |7
5664 * | . . |
5665 * |. .|
5666 * 0-------1
5667 *
5668 *************************************************************************/
5669 static const GeoElement* m_boundaryGeoPrismP1xP2[5] = {
5670 &geoElementTriangleP1,&geoElementQuadrangleP1xP2,&geoElementQuadrangleP1xP2,&geoElementTriangleP1,&geoElementQuadrangleP1xP2
5671 };
5672 static const GeoElement* m_boundaryBoundaryGeoPrismP1xP2[9] = {
5673 &geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,
5674 &geoElementSegmentP1,&geoElementSegmentP1,&geoElementSegmentP1
5675 };
5676 static const int m_ptOfEdPrismP1xP2[] = {0,1, 1,2, 2,0, 0,3,6, 1,4,7, 2,5,8, 3,4, 4,5, 5,3};
5677 static const int m_ptOfFaPrismP1xP2[] = {0,2,1, 0,3,5,2,6,8, 0,1,4,3,6,7, 3,4,5, 1,2,5,4,7,8};
5678 static const int m_edOfFaPrismP1xP2[] = {2,1,0, 3,8,5,2, 0,4,6,3, 6,7,8, 1,5,7,4};
5679 static const bool m_orientEdPrismP1xP2[] = {false,false,false, true,false,false,true, true,true,false,false, true,true,true, true,true,false,false} ;
5680
5681
5682 const GeoElement geoElementPrismP1xP2("geoElementPrismP1xP2",PRISM,basisFunction3dP1xP2,refcoor_P1xP2_3D,9,5,
5683 m_ptOfEdPrismP1xP2,m_ptOfFaPrismP1xP2,m_edOfFaPrismP1xP2,m_orientEdPrismP1xP2,
5684 m_boundaryGeoPrismP1xP2,m_boundaryBoundaryGeoPrismP1xP2,refElementPrismP1xP2);
5685
5686
5687 /************************************************************************
5688 * geoElementPrismR2
5689 *
5690 * 5
5691 * 11/.\10
5692 * / . \
5693 * 3---9---4
5694 * | 14 |
5695 * 12 . 13
5696 * | .2. |
5697 * | 8 7 |
5698 * |. .|
5699 * 0---6---1
5700 *
5701 *
5702 *************************************************************************/
5703 static const GeoElement* m_boundaryGeoPrismR2[5] = {
5704 &geoElementTriangleP2,&geoElementQuadrangleQ2,&geoElementQuadrangleQ2,&geoElementTriangleP2,&geoElementQuadrangleQ2
5705 };
5706 static const GeoElement* m_boundaryBoundaryGeoPrismR2[9] = {
5707 &geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2,
5708 &geoElementSegmentP2,&geoElementSegmentP2,&geoElementSegmentP2
5709 };
5710
5711 // TODO: the middle points are NOT numbered as the edges!
5712 // reordering is imperative! VM+JF 07/2011
5713
5714 static const int m_ptOfEdLinearPrismR2[] = {0,1,6, 1,2,7, 2,0,8, 0,3,12, 1,4,13, 2,5,14, 3,4,9, 4,5,10, 5,3,11};
5715 static const int m_ptOfFaLinearPrismR2[] = {0,2,1,6,7,8, 0,3,5,2,12,11,14,8, 0,1,4,3,6,13,9,12, 3,4,5,9,10,11, 1,2,5,4,7,14,10,13};
5716 static const int m_edOfFaLinearPrismR2[] = {2,1,0, 3,8,5,2, 0,4,6,3, 6,7,8, 1,5,7,4};
5717 static const bool m_orientEdLinearPrismR2[] = {false,false,false, true,false,false,true, true,true,false,false, true,true,true, true,true,false,false} ;
5718
5719
5720 const GeoElement geoElementPrismR2("geoElementPrismR2",PRISM,basisFunction3dR2,refcoor_R2_3D,9,5,
5721 m_ptOfEdLinearPrismR2,m_ptOfFaLinearPrismR2,m_edOfFaLinearPrismR2,m_orientEdLinearPrismR2,
5722 m_boundaryGeoPrismR2,m_boundaryBoundaryGeoPrismR2,refElementPrismR2);
5723
5724 /*========================================================================
5725 !
5726 ! REFERENCE ELEMENT
5727 !
5728 =======================================================================*/
5729
5730 // Remarks: When specifying the dofSupportNode, the DOF_NODE_VERTEX should always be the first ones!
5731
5732
5733 /************************************************************************
5734 * RefElementNULL
5735 *
5736 * VOID
5737 *
5738 *************************************************************************/
5739
5740 //const RefElement refElementNULL("refElementNULL",NULLSHAPE,basisFunctionNULL,NULL,
5741 // NULL,NULL,NULL,NULL,m_nodeSegmentP1,0,0,0,0,NULL,NULL);
5742
5743
5744 /************************************************************************
5745 * RefElementNode
5746 *
5747 * 0d
5748 *
5749 *************************************************************************/
5750
5751 static const DegreeOfFreedomType m_dofTypeNode[1] = {
5752 DOF_VALUE
5753 };
5754
5755 static const DegreeOfFreedomSupport m_dofSupportNode[1] = {
5756 DOF_NODE_VERTEX
5757 };
5758
5759 static const int m_dofIdNode[1] = {
5760 0
5761 };
5762
5763 static const Point m_nodeNode[1] = {
5764 Point(0.,0.,0.)
5765 };
5766
5767 const RefElement refElementNode("refElementNode",NODE,basisFunction0d,listQuadratureRuleNode,
5768 m_dofTypeNode,m_dofSupportNode,m_dofIdNode,m_nodeNode,1,0,0,0,nullptr,nullptr);
5769
5770 /************************************************************************
5771 * RefElementSegmentP1
5772 *
5773 * 0-----------1
5774 *
5775 *************************************************************************/
5776
5777 static const DegreeOfFreedomType m_dofTypeSegmentP1[2] = {
5778 DOF_VALUE,DOF_VALUE
5779 };
5780
5781 static const DegreeOfFreedomSupport m_dofSupportSegmentP1[2] = {
5782 DOF_NODE_VERTEX,DOF_NODE_VERTEX
5783 };
5784
5785 static const int m_dofIdSegmentP1[3] = {
5786 0,1
5787 };
5788
5789 static const Point m_nodeSegmentP1[] = {
5790 Point(-1.,0.,0.),Point(1.,0.,0.)
5791 };
5792
5793 const RefElement refElementSegmentP1("refElementSegmentP1",SEGMENT,basisFunction1dP1,listQuadratureRuleSegment,
5794 m_dofTypeSegmentP1,m_dofSupportSegmentP1,m_dofIdSegmentP1,m_nodeSegmentP1,2,0,0,0,nullptr,nullptr);
5795
5796 /************************************************************************
5797 * RefElementSegmentP1b
5798 *
5799 * 0-----2-----1
5800 *
5801 *************************************************************************/
5802
5803 static const DegreeOfFreedomType m_dofTypeSegmentP1b[3] = {
5804 DOF_VALUE,DOF_VALUE,DOF_VALUE
5805 };
5806
5807 static const DegreeOfFreedomSupport m_dofSupportSegmentP1b[3] = {
5808 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_EDGE
5809 };
5810
5811 static const int m_dofIdSegmentP1b[3] = {
5812 0,1,
5813 0
5814 };
5815
5816 static const Point m_nodeSegmentP1b[] = {
5817 Point(-1.,0.,0.),Point(1.,0.,0.),Point(0.,0.,0.)
5818 };
5819
5820 const RefElement refElementSegmentP1b("refElementSegmentP1b",SEGMENT,basisFunction1dP1b,listQuadratureRuleSegment,
5821 m_dofTypeSegmentP1b,m_dofSupportSegmentP1b,m_dofIdSegmentP1b,m_nodeSegmentP1b,2,1,0,0,nullptr,nullptr);
5822
5823
5824 /************************************************************************
5825 * RefElementSegmentP2
5826 *
5827 * 0-----2-----1
5828 *
5829 *************************************************************************/
5830
5831 static const DegreeOfFreedomType m_dofTypeSegmentP2[3] = {
5832 DOF_VALUE,DOF_VALUE,DOF_VALUE
5833 };
5834
5835 static const DegreeOfFreedomSupport m_dofSupportSegmentP2[3] = {
5836 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_EDGE
5837 };
5838
5839 static const int m_dofIdSegmentP2[3] = {
5840 0,1,
5841 0
5842 };
5843
5844 static const Point m_nodeSegmentP2[] = {
5845 Point(-1.,0.,0.),Point(1.,0.,0.),Point(0.,0.,0.)
5846 };
5847
5848 const RefElement refElementSegmentP2("refElementSegmentP2",SEGMENT,basisFunction1dP2,listQuadratureRuleSegment,
5849 m_dofTypeSegmentP2,m_dofSupportSegmentP2,m_dofIdSegmentP2,m_nodeSegmentP2,2,1,0,0,
5850 nullptr,nullptr);
5851
5852 /************************************************************************
5853 * RefElementSegmentP3H
5854 *
5855 * 0-1 ---------- 2-3
5856 *
5857 *************************************************************************/
5858
5859 static const DegreeOfFreedomType m_dofTypeSegmentP3H[4] = {
5860 DOF_VALUE,DOF_X_DERIVATIVE,DOF_VALUE,DOF_X_DERIVATIVE
5861 };
5862
5863 static const DegreeOfFreedomSupport m_dofSupportSegmentP3H[4] = {
5864 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX
5865 };
5866
5867 static const int m_dofIdSegmentP3H[4] = {
5868 0,0,1,1
5869 };
5870
5871 static const Point m_nodeSegmentP3H[] = {
5872 Point(-1.,0.,0.),Point(-1.,0.,0.),Point(1.,0.,0.),Point(1.,0.,0.)
5873 };
5874
5875 const RefElement refElementSegmentP3H("refElementSegmentP3H",SEGMENT,basisFunction1dP3H,listQuadratureRuleSegment,
5876 m_dofTypeSegmentP3H,m_dofSupportSegmentP3H,m_dofIdSegmentP3H,m_nodeSegmentP3H,4,0,0,0,
5877 nullptr,nullptr);
5878
5879 /************************************************************************
5880 * RefElementTriangleP1
5881 *
5882 *
5883 * 2
5884 * | \
5885 * | \
5886 * | \
5887 * | \
5888 * | \
5889 * 0-----------1
5890 *
5891 *************************************************************************/
5892
5893 static const DegreeOfFreedomType m_dofTypeTriangleP1[3] = {
5894 DOF_VALUE,DOF_VALUE,DOF_VALUE
5895 };
5896
5897 static const DegreeOfFreedomSupport m_dofSupportTriangleP1[3] = {
5898 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX
5899 };
5900
5901 static const int m_dofIdTriangleP1[3] = {
5902 0,1,2
5903 };
5904
5905 static const Point m_nodeTriangleP1[3] = {
5906 Point(0.,0.,0.),Point(1.,0.,0.),Point(0.,1.,0.)
5907 };
5908
5909 static const RefElement* m_boundaryTriangleP1[3] = {
5910 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1
5911 };
5912
5913 const RefElement refElementTriangleP1("refElementTriangleP1",TRIANGLE,basisFunction2dP1,listQuadratureRuleTriangle,
5914 m_dofTypeTriangleP1,m_dofSupportTriangleP1,m_dofIdTriangleP1,m_nodeTriangleP1,3,0,0,0,
5915 m_boundaryTriangleP1,nullptr);
5916
5917 /************************************************************************
5918 * RefElementTriangleP1b
5919 *
5920 *
5921 * 2
5922 * | \
5923 * | \
5924 * | \
5925 * | 3 \
5926 * | \
5927 * 0-----------1
5928 *
5929 *************************************************************************/
5930
5931 static const DegreeOfFreedomType m_dofTypeTriangleP1b[4] = {
5932 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE
5933 };
5934
5935 static const DegreeOfFreedomSupport m_dofSupportTriangleP1b[4] = {
5936 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_FACE
5937 };
5938
5939 static const int m_dofIdTriangleP1b[4] = {
5940 0,1,2,
5941 0
5942 };
5943
5944 static const Point m_nodeTriangleP1b[4] = {
5945 Point(0.,0.,0.),Point(1.,0.,0.),Point(0.,1.,0.),Point(1./3.,1./3.,0.)
5946 };
5947
5948 static const RefElement* m_boundaryTriangleP1b[3] = {
5949 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1
5950 };
5951
5952 const RefElement refElementTriangleP1b("refElementTriangleP1b",TRIANGLE,basisFunction2dP1b,listQuadratureRuleTriangle,
5953 m_dofTypeTriangleP1b,m_dofSupportTriangleP1b,m_dofIdTriangleP1b,m_nodeTriangleP1b,3,1,0,0,
5954 m_boundaryTriangleP1b,nullptr);
5955
5956 /************************************************************************
5957 * RefElementTriangleP2
5958 *
5959 * 2
5960 * | \
5961 * | \
5962 * 5 4
5963 * | \
5964 * | \
5965 * 0-----3----1
5966 *
5967 *************************************************************************/
5968
5969 static const DegreeOfFreedomType m_dofTypeTriangleP2[] = {
5970 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE
5971 };
5972
5973 static const DegreeOfFreedomSupport m_dofSupportTriangleP2[] = {
5974 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE
5975 };
5976
5977 static const int m_dofIdTriangleP2[] = {
5978 0,1,2, // vertices
5979 0,1,2 // edges
5980 };
5981
5982 static const Point m_nodeTriangleP2[] = {
5983 Point(0.,0.,0.),Point(1.,0.,0.),Point(0.,1.,0.),Point(0.5,0.,0.),Point(0.5,0.5,0.),Point(0.,0.5,0.)
5984 };
5985
5986 static const RefElement* m_boundaryTriangleP2[] = {
5987 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2
5988 };
5989
5990 const RefElement refElementTriangleP2("refElementTriangleP2",TRIANGLE,basisFunction2dP2,listQuadratureRuleTriangle,
5991 m_dofTypeTriangleP2,m_dofSupportTriangleP2,m_dofIdTriangleP2,m_nodeTriangleP2,3,3,0,0,
5992 m_boundaryTriangleP2,nullptr);
5993
5994 /************************************************************************
5995 * RefElementQuadrangleQ1
5996 *
5997 * 3-----------2
5998 * | |
5999 * | |
6000 * | |
6001 * | |
6002 * | |
6003 * 0-----------1
6004 *
6005 *************************************************************************/
6006
6007 static const DegreeOfFreedomType m_dofTypeQuadrangleQ1[] = {
6008 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE
6009 };
6010
6011 static const DegreeOfFreedomSupport m_dofSupportQuadrangleQ1[] = {
6012 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX
6013 };
6014
6015 static const int m_dofIdQuadrangleQ1[] = {
6016 0,1,2,3
6017 };
6018
6019 static const Point m_nodeQuadrangleQ1[] = {
6020 Point(-1.,-1.,0.),Point(1.,-1.,0.),Point(1.,1.,0.),Point(-1.,1.,0.)
6021 };
6022
6023 static const RefElement* m_boundaryQuadrangleQ1[] = {
6024 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1
6025 };
6026
6027 const RefElement refElementQuadrangleQ1("refElementQuadrangleQ1",QUADRILATERAL,basisFunction2dQ1,listQuadratureRuleQuadrilateral,
6028 m_dofTypeQuadrangleQ1,m_dofSupportQuadrangleQ1,m_dofIdQuadrangleQ1,m_nodeQuadrangleQ1,4,0,0,0,
6029 m_boundaryQuadrangleQ1,nullptr);
6030
6031 /************************************************************************
6032 * RefElementQuadrangleP1xP2
6033 *
6034 * 3-----------2
6035 * | |
6036 * | |
6037 * 4| |5
6038 * | |
6039 * | |
6040 * 0-----------1
6041 *
6042 *************************************************************************/
6043
6044 static const DegreeOfFreedomType m_dofTypeQuadrangleP1xP2[] = {
6045 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE
6046 };
6047
6048 static const DegreeOfFreedomSupport m_dofSupportQuadrangleP1xP2[] = {
6049 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_EDGE,DOF_NODE_EDGE
6050 };
6051
6052 static const int m_dofIdQuadrangleP1xP2[] = {
6053 0,1,2,3, //id of the vertex
6054 1,3 //id of the edges
6055 };
6056
6057 static const Point m_nodeQuadrangleP1xP2[] = {
6058 Point(-1.,-1.,0.),Point(1.,-1.,0.),Point(1.,1.,0.),Point(-1.,1.,0.),Point(-1.,0.,0.),Point(1.,0.,0.)
6059 };
6060
6061 static const RefElement* m_boundaryQuadrangleP1xP2[] = {
6062 &refElementSegmentP1,&refElementSegmentP2,&refElementSegmentP1,&refElementSegmentP2
6063 };
6064
6065 const RefElement refElementQuadrangleP1xP2("refElementQuadrangleP1xP2",QUADRILATERAL,basisFunction2dP1xP2,listQuadratureRuleQuadrilateral,
6066 m_dofTypeQuadrangleP1xP2,m_dofSupportQuadrangleP1xP2,m_dofIdQuadrangleP1xP2,m_nodeQuadrangleP1xP2,4,2,0,0,
6067 m_boundaryQuadrangleP1xP2,nullptr,true);
6068
6069 /************************************************************************
6070 * RefElementQuadrangleQ1b
6071 *
6072 * 3-----------2
6073 * | |
6074 * | |
6075 * | 4 |
6076 * | |
6077 * | |
6078 * 0-----------1
6079 *
6080 *************************************************************************/
6081
6082 static const DegreeOfFreedomType m_dofTypeQuadrangleQ1b[] = {
6083 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE
6084 };
6085
6086 static const DegreeOfFreedomSupport m_dofSupportQuadrangleQ1b[] = {
6087 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_FACE
6088 };
6089
6090 static const int m_dofIdQuadrangleQ1b[] = {
6091 0,1,2,3,
6092 0
6093 };
6094
6095 static const Point m_nodeQuadrangleQ1b[] = {
6096 Point(-1.,-1.,0.),Point(1.,-1.,0.),Point(1.,1.,0.),Point(-1.,1.,0.),Point(0.,0.,0.)
6097 };
6098
6099 static const RefElement* m_boundaryQuadrangleQ1b[] = {
6100 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1
6101 };
6102
6103 const RefElement refElementQuadrangleQ1b("refElementQuadrangleQ1b",QUADRILATERAL,basisFunction2dQ1b,listQuadratureRuleQuadrilateral,
6104 m_dofTypeQuadrangleQ1b,m_dofSupportQuadrangleQ1b,m_dofIdQuadrangleQ1b,m_nodeQuadrangleQ1b,4,1,0,0,
6105 m_boundaryQuadrangleQ1b,nullptr);
6106
6107 /************************************************************************
6108 * RefElementQuadrangleQ2
6109 *
6110 * 3-----6-----2
6111 * | |
6112 * | |
6113 * 7 5
6114 * | |
6115 * | |
6116 * 0-----4-----1
6117 *
6118 *************************************************************************/
6119 static const DegreeOfFreedomType m_dofTypeQuadrangleQ2[] = {
6120 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE
6121 };
6122
6123 static const DegreeOfFreedomSupport m_dofSupportQuadrangleQ2[] = {
6124 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE
6125 };
6126
6127 static const int m_dofIdQuadrangleQ2[] = {
6128 0,1,2,3,
6129 0,1,2,3
6130 };
6131
6132 static const Point m_nodeQuadrangleQ2[] = {
6133 Point(-1.,-1.,0.),Point(1.,-1.,0.),Point(1.,1.,0.),Point(-1.,1.,0.),
6134 Point(0.,-1.,0.),Point(1.,0.,0.),Point(0.,1.,0.),Point(-1.,0.,0.)
6135 };
6136
6137 static const RefElement* m_boundaryQuadrangleQ2[] = {
6138 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2
6139 };
6140
6141 const RefElement refElementQuadrangleQ2("refElementQuadrangleQ2",QUADRILATERAL,basisFunction2dQ2,listQuadratureRuleQuadrilateral,
6142 m_dofTypeQuadrangleQ2,m_dofSupportQuadrangleQ2,m_dofIdQuadrangleQ2,
6143 m_nodeQuadrangleQ2,4,4,0,0,
6144 m_boundaryQuadrangleQ2,nullptr);
6145
6146 /************************************************************************
6147 * RefElementQuadrangleQ2c
6148 *
6149 * 3-----6-----2
6150 * | |
6151 * | |
6152 * 7 8 5
6153 * | |
6154 * | |
6155 * 0-----4-----1
6156 *
6157 *************************************************************************/
6158 static const DegreeOfFreedomType m_dofTypeQuadrangleQ2c[9] = {
6159 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE
6160 };
6161
6162 static const DegreeOfFreedomSupport m_dofSupportQuadrangleQ2c[9] = {
6163 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_FACE
6164 };
6165
6166 static const int m_dofIdQuadrangleQ2c[] = {
6167 0,1,2,3, // vertices
6168 0,1,2,3, // edges
6169 0 // face
6170 };
6171
6172 static const Point m_nodeQuadrangleQ2c[] = {
6173 Point(-1.,-1.,0.),Point(1.,-1.,0.),Point(1.,1.,0.),Point(-1.,1.,0.),
6174 Point(0.,-1.,0.),Point(1.,0.,0.),Point(0.,1.,0.),Point(-1.,0.,0.),
6175 Point(0.,0.,0.)
6176 };
6177
6178 static const RefElement* m_boundaryQuadrangleQ2c[4] = {
6179 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2
6180 };
6181
6182 const RefElement refElementQuadrangleQ2c("refElementQuadrangleQ2c",QUADRILATERAL,basisFunction2dQ2c,listQuadratureRuleQuadrilateral,
6183 m_dofTypeQuadrangleQ2c,m_dofSupportQuadrangleQ2c,m_dofIdQuadrangleQ2c,
6184 m_nodeQuadrangleQ2c,4,4,1,0,
6185 m_boundaryQuadrangleQ2c,nullptr);
6186
6187 /************************************************************************
6188 * RefElementTetrahedronP1
6189 *
6190 * 3
6191 * /.\
6192 * / . \
6193 * / 2 \
6194 * / . . \
6195 * /. . \
6196 * 0-----------1
6197 *
6198 *************************************************************************/
6199
6200 static const DegreeOfFreedomType m_dofTypeTetrahedronP1[] = {
6201 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE
6202 };
6203
6204 static const DegreeOfFreedomSupport m_dofSupportTetrahedronP1[] = {
6205 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX
6206 };
6207
6208 static const int m_dofIdTetrahedronP1[] = {
6209 0,1,2,3
6210 };
6211
6212 static const Point m_nodeTetrahedronP1[] = {
6213 Point(0.,0.,0.),Point(1.,0.,0.),Point(0.,1.,0.),Point(0.,0.,1.)
6214 };
6215
6216 static const RefElement* m_boundaryTetrahedronP1[] = {
6217 &refElementTriangleP1,&refElementTriangleP1,&refElementTriangleP1,&refElementTriangleP1
6218 };
6219
6220 static const RefElement* m_boundaryBoundaryTetrahedronP1[] = {
6221 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1,
6222 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1
6223 };
6224
6225 const RefElement refElementTetrahedronP1("refElementTetrahedronP1",TETRAHEDRON,basisFunction3dP1,listQuadratureRuleTetrahedron,
6226 m_dofTypeTetrahedronP1,m_dofSupportTetrahedronP1,m_dofIdTetrahedronP1,
6227 m_nodeTetrahedronP1,4,0,0,0,
6228 m_boundaryTetrahedronP1,m_boundaryBoundaryTetrahedronP1);
6229
6230 /************************************************************************
6231 * RefElementTetrahedronP1b
6232 *
6233 * 3
6234 * /.\
6235 * / . \
6236 * / 2 \
6237 * / . 4. \
6238 * /. . \
6239 * 0-----------1
6240 *
6241 *************************************************************************/
6242
6243 static const DegreeOfFreedomType m_dofTypeTetrahedronP1b[] = {
6244 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE
6245 };
6246
6247 static const DegreeOfFreedomSupport m_dofSupportTetrahedronP1b[] = {
6248 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VOLUME
6249 };
6250
6251 static const int m_dofIdTetrahedronP1b[] = {
6252 0,1,2,3,
6253 0
6254 };
6255
6256 static const Point m_nodeTetrahedronP1b[] = {
6257 Point(0.,0.,0.),Point(1.,0.,0.),Point(0.,1.,0.),Point(0.,0.,1.),Point(0.25,0.25,0.25)
6258 };
6259
6260 static const RefElement* m_boundaryTetrahedronP1b[] = {
6261 &refElementTriangleP1,&refElementTriangleP1,&refElementTriangleP1,&refElementTriangleP1
6262 };
6263
6264 static const RefElement* m_boundaryBoundaryTetrahedronP1b[] = {
6265 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1,
6266 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1
6267 };
6268
6269 const RefElement refElementTetrahedronP1b("refElementTetrahedronP1b",TETRAHEDRON,basisFunction3dP1b,listQuadratureRuleTetrahedron,
6270 m_dofTypeTetrahedronP1b,m_dofSupportTetrahedronP1b,m_dofIdTetrahedronP1b,
6271 m_nodeTetrahedronP1b,4,1,0,0,
6272 m_boundaryTetrahedronP1b,m_boundaryBoundaryTetrahedronP1b);
6273
6274 /************************************************************************
6275 * RefTetrahedronP2
6276 *
6277 * 3
6278 * /9\
6279 * / . \
6280 * 7 2 8
6281 * / . . \
6282 * / 6 5 \
6283 * 0-----4-----1
6284 *
6285 *
6286 *************************************************************************/
6287
6288 static const DegreeOfFreedomType m_dofTypeTetrahedronP2[] = {
6289 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE
6290 };
6291
6292 static const DegreeOfFreedomSupport m_dofSupportTetrahedronP2[] = {
6293 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,
6294 DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE
6295 };
6296
6297 static const int m_dofIdTetrahedronP2[] = {
6298 0,1,2,3,
6299 0,1,2,3,4,5
6300 };
6301
6302 static const Point m_nodeTetrahedronP2[] = {
6303 Point(0.,0.,0.),Point(1.,0.,0.),Point(0.,1.,0.),Point(0.,0.,1.),
6304 Point(0.5,0.,0.), Point(0.5,0.5,0.), Point(0.,0.5,0.), Point(0.,0.,0.5), Point(0.5,0.,0.5), Point(0.,0.5,0.5)
6305 };
6306
6307
6308 static const RefElement* m_boundaryTetrahedronP2[] = {
6309 &refElementTriangleP2,&refElementTriangleP2,&refElementTriangleP2,&refElementTriangleP2
6310 };
6311
6312 static const RefElement* m_boundaryBoundaryTetrahedronP2[6] = {
6313 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2,
6314 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2
6315 };
6316
6317 const RefElement refElementTetrahedronP2("refElementTetrahedronP2",TETRAHEDRON,basisFunction3dP2,listQuadratureRuleTetrahedron,
6318 m_dofTypeTetrahedronP2,m_dofSupportTetrahedronP2,m_dofIdTetrahedronP2,
6319 m_nodeTetrahedronP2,4,6,0,0,
6320 m_boundaryTetrahedronP2,m_boundaryBoundaryTetrahedronP2);
6321
6322 /************************************************************************
6323 * RefElementHexahedronQ1
6324 *
6325 * 7--------6
6326 * /. /|
6327 * / . / |
6328 * 4________5 |
6329 * | . | |
6330 * | 3.....|..2
6331 * | . | /
6332 * |. |/
6333 * 0________1
6334 *
6335 *
6336 *************************************************************************/
6337
6338 static const DegreeOfFreedomType m_dofTypeHexahedronQ1[] = {
6339 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE, DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE
6340 };
6341
6342 static const DegreeOfFreedomSupport m_dofSupportHexahedronQ1[] = {
6343 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX
6344 };
6345
6346 static const int m_dofIdHexahedronQ1[8] = {
6347 0,1,2,3,4,5,6,7
6348 };
6349
6350 static const Point m_nodeHexahedronQ1[8] = {
6351 Point(-1.,-1.,-1.), Point(1.,-1.,-1.), Point(1.,1.,-1.), Point(-1.,1.,-1.), Point(-1.,-1.,1.), Point(1.,-1.,1.), Point(1.,1.,1.), Point(-1.,1.,1.)
6352 };
6353
6354 static const RefElement* m_boundaryHexahedronQ1[6] = {
6355 &refElementQuadrangleQ1,&refElementQuadrangleQ1,&refElementQuadrangleQ1,&refElementQuadrangleQ1,&refElementQuadrangleQ1,&refElementQuadrangleQ1
6356 };
6357
6358 static const RefElement* m_boundaryBoundaryHexahedronQ1[12] = {
6359 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1,
6360 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1,
6361 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1,
6362 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1
6363 };
6364
6365 const RefElement refElementHexahedronQ1("refElementHexahedronQ1",HEXAHEDRON,basisFunction3dQ1,listQuadratureRuleHexahedron,
6366 m_dofTypeHexahedronQ1,m_dofSupportHexahedronQ1,m_dofIdHexahedronQ1,
6367 m_nodeHexahedronQ1,8,0,0,0,
6368 m_boundaryHexahedronQ1,m_boundaryBoundaryHexahedronQ1);
6369
6370 /************************************************************************
6371 * RefElementHexahedronQ1b
6372 *
6373 * 7--------6
6374 * /. /|
6375 * / . / |
6376 * 4________5 |
6377 * | . 8 | |
6378 * | 3.....|..2
6379 * | . | /
6380 * |. |/
6381 * 0________1
6382 *
6383 *
6384 *************************************************************************/
6385
6386 static const DegreeOfFreedomType m_dofTypeHexahedronQ1b[] = {
6387 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE, DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE
6388 };
6389
6390 static const DegreeOfFreedomSupport m_dofSupportHexahedronQ1b[] = {
6391 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VOLUME
6392 };
6393
6394 static const int m_dofIdHexahedronQ1b[9] = {
6395 0,1,2,3,4,5,6,7,
6396 0
6397 };
6398
6399 static const Point m_nodeHexahedronQ1b[9] = {
6400 Point(-1.,-1.,-1.), Point(1.,-1.,-1.), Point(1.,1.,-1.), Point(-1.,1.,-1.), Point(-1.,-1.,1.), Point(1.,-1.,1.), Point(1.,1.,1.), Point(-1.,1.,1.),Point(0.,0.,0.)
6401 };
6402
6403 static const RefElement* m_boundaryHexahedronQ1b[6] = {
6404 &refElementQuadrangleQ1,&refElementQuadrangleQ1,&refElementQuadrangleQ1,&refElementQuadrangleQ1,&refElementQuadrangleQ1,&refElementQuadrangleQ1
6405 };
6406
6407 static const RefElement* m_boundaryBoundaryHexahedronQ1b[12] = {
6408 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1,
6409 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1,
6410 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1,
6411 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1
6412 };
6413
6414 const RefElement refElementHexahedronQ1b("refElementHexahedronQ1b",HEXAHEDRON,basisFunction3dQ1b,listQuadratureRuleHexahedron,
6415 m_dofTypeHexahedronQ1b,m_dofSupportHexahedronQ1b,m_dofIdHexahedronQ1b,
6416 m_nodeHexahedronQ1b,8,1,0,0,
6417 m_boundaryHexahedronQ1b,m_boundaryBoundaryHexahedronQ1b);
6418
6419 /************************************************************************
6420 * RefElementHexahedronQ2
6421 *
6422 * 7---18---6
6423 * /. /|
6424 * 19 . 17 |
6425 * / 15 / 14
6426 * 4____16___5 |
6427 * | . | |
6428 * | 3..10.|.. 2
6429 * 12 . 13 /
6430 * | 11 | 9
6431 * |. |/
6432 * 0____8____1
6433 *
6434 *
6435 *************************************************************************/
6436
6437 static const DegreeOfFreedomType m_dofTypeHexahedronQ2[20] = {
6438 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE, DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,
6439 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE, DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,
6440 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE
6441 };
6442
6443 static const DegreeOfFreedomSupport m_dofSupportHexahedronQ2[20] = {
6444 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,
6445 DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,
6446 DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE
6447 };
6448
6449 static const int m_dofIdHexahedronQ2[20] = {
6450 0,1,2,3,4,5,6,7,
6451 0,1,2,3,4,5,6,7,8,9,10,11
6452 };
6453
6454 static const Point m_nodeHexahedronQ2[20] = {
6455 Point(-1.,-1.,-1.), Point(1.,-1.,-1.), Point(1.,1.,-1.), Point(-1.,1.,-1.), Point(-1.,-1.,1.), Point(1.,-1.,1.), Point(1.,1.,1.), Point(-1.,1.,1.),
6456 Point(0.,-1.,-1.), Point(1.,0.,-1.), Point(0.,1.,-1.), Point(-1.,0.,-1.), Point(-1.,-1.,0.), Point(1.,-1.,0.), Point(1.,1.,0.), Point(-1.,1.,0.),
6457 Point(0.,-1.,1.), Point(1.,0.,1.), Point(0.,1.,1.), Point(-1.,0.,1.)
6458 };
6459
6460 static const RefElement* m_boundaryHexahedronQ2[6] = {
6461 &refElementQuadrangleQ2,&refElementQuadrangleQ2,&refElementQuadrangleQ2,&refElementQuadrangleQ2,&refElementQuadrangleQ2,&refElementQuadrangleQ2
6462 };
6463
6464 static const RefElement* m_boundaryBoundaryHexahedronQ2[12] = {
6465 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2,
6466 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2,
6467 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2,
6468 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2
6469 };
6470
6471 const RefElement refElementHexahedronQ2("refElementHexahedronQ2",HEXAHEDRON,basisFunction3dQ2,listQuadratureRuleHexahedron,
6472 m_dofTypeHexahedronQ2,m_dofSupportHexahedronQ2,m_dofIdHexahedronQ2,
6473 m_nodeHexahedronQ2,8,12,0,0,m_boundaryHexahedronQ2, m_boundaryBoundaryHexahedronQ2);
6474
6475 /************************************************************************
6476 * geoElementHexahedronQ2c
6477 *
6478 * 7---18---6
6479 * /. /|
6480 * 19 . 24 17 |
6481 * / 15 26 / 14
6482 * 4____16___5 |
6483 * | 22 . | 25|
6484 * | 3..10.|.. 2
6485 * 12 . 23 13 /
6486 * | 11 21 | 9
6487 * |. |/
6488 * 0____8____1
6489 *
6490 *
6491 *************************************************************************/
6492
6493 static const DegreeOfFreedomType m_dofTypeHexahedronQ2c[27] = {
6494 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE, DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,
6495 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE, DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,
6496 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,
6497 DOF_VALUE,DOF_VALUE,DOF_VALUE
6498 };
6499
6500 static const DegreeOfFreedomSupport m_dofSupportHexahedronQ2c[27] = {
6501 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,
6502 DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,
6503 DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_FACE,DOF_NODE_FACE,DOF_NODE_FACE,DOF_NODE_FACE,DOF_NODE_FACE,DOF_NODE_FACE,
6504 DOF_NODE_VOLUME
6505 };
6506
6507 static const int m_dofIdHexahedronQ2c[27] = {
6508 0,1,2,3,4,5,6,7,
6509 0,1,2,3,4,5,6,7,8,9,10,11,
6510 0,1,2,3,4,5,
6511 0
6512 };
6513
6514 static const Point m_nodeHexahedronQ2c[27] = {
6515 Point(-1.,-1.,-1.), Point(1.,-1.,-1.), Point(1.,1.,-1.), Point(-1.,1.,-1.), Point(-1.,-1.,1.), Point(1.,-1.,1.), Point(1.,1.,1.), Point(-1.,1.,1.),
6516 Point(0.,-1.,-1.), Point(1.,0.,-1.), Point(0.,1.,-1.), Point(-1.,0.,-1.), Point(-1.,-1.,0.), Point(1.,-1.,0.), Point(1.,1.,0.), Point(-1.,1.,0.),
6517 Point(0.,-1.,1.), Point(1.,0.,1.), Point(0.,1.,1.), Point(-1.,0.,1.), Point(0.,0.,-1.), Point(-1.,0.,0.), Point(0.,-1.,0.), Point(0.,0.,1.),
6518 Point(1.,0.,0.), Point(0.,1.,0.), Point(0.,0.,0.)
6519 };
6520
6521 static const RefElement* m_boundaryHexahedronQ2c[6] = {
6522 &refElementQuadrangleQ2,&refElementQuadrangleQ2,&refElementQuadrangleQ2,&refElementQuadrangleQ2,&refElementQuadrangleQ2,&refElementQuadrangleQ2
6523 };
6524
6525 static const RefElement* m_boundaryBoundaryHexahedronQ2c[12] = {
6526 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2,
6527 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2,
6528 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2,
6529 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2
6530 };
6531
6532 const RefElement refElementHexahedronQ2c("refElementHexahedronQ2c",HEXAHEDRON,basisFunction3dQ2c,listQuadratureRuleHexahedron,
6533 m_dofTypeHexahedronQ2c,m_dofSupportHexahedronQ2c,m_dofIdHexahedronQ2c,
6534 m_nodeHexahedronQ2c,8,12,6,1,m_boundaryHexahedronQ2c, m_boundaryBoundaryHexahedronQ2c);
6535
6536 /************************************************************************
6537 * RefElementPrismR1
6538 *
6539 *
6540 *
6541 *
6542 *************************************************************************/
6543
6544 static const DegreeOfFreedomType m_dofTypePrismR1[6] = {
6545 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE, DOF_VALUE,DOF_VALUE
6546 };
6547
6548 static const DegreeOfFreedomSupport m_dofSupportPrismR1[] = {
6549 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX
6550 };
6551
6552 static const int m_dofIdPrismR1[6] = {
6553 0,1,2,3,4,5
6554 };
6555
6556 static const Point m_nodePrismR1[6] = {
6557 Point(0.,0.,-1.), Point(1.,0.,-1.), Point(0.,1.,-1.), Point(0.,0.,1.), Point(1.,0.,1.), Point(0.,1.,1.)
6558 };
6559
6560 static const RefElement* m_boundaryPrismR1[5] = {
6561 &refElementTriangleP1,&refElementQuadrangleQ1,&refElementQuadrangleQ1,&refElementTriangleP1,&refElementQuadrangleQ1
6562 };
6563
6564 static const RefElement* m_boundaryBoundaryPrismR1[9] = {
6565 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1,
6566 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1,
6567 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1
6568 };
6569
6570 const RefElement refElementPrismR1("refElementPrismR1",PRISM,basisFunction3dR1,listQuadratureRulePrism,
6571 m_dofTypePrismR1,m_dofSupportPrismR1,m_dofIdPrismR1,
6572 m_nodePrismR1,6,0,0,0,
6573 m_boundaryPrismR1,m_boundaryBoundaryPrismR1);
6574
6575 /************************************************************************
6576 * RefElementPrismP1xP2
6577 *
6578 *
6579 *
6580 *
6581 *************************************************************************/
6582
6583 static const DegreeOfFreedomType m_dofTypePrismP1xP2[] = {
6584 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE, DOF_VALUE,DOF_VALUE, DOF_VALUE, DOF_VALUE,DOF_VALUE
6585 };
6586
6587 static const DegreeOfFreedomSupport m_dofSupportPrismP1xP2[] = {
6588 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX, DOF_NODE_EDGE, DOF_NODE_EDGE, DOF_NODE_EDGE
6589 };
6590
6591 static const int m_dofIdPrismP1xP2[9] = {
6592 0,1,2,3,4,5, //vertex
6593 3,4,5//edges
6594 };
6595
6596 static const Point m_nodePrismP1xP2[9] = {
6597 Point(0.,0.,-1.), Point(1.,0.,-1.), Point(0.,1.,-1.), Point(0.,0.,1.), Point(1.,0.,1.), Point(0.,1.,1.), Point(0.,0.,0.), Point(1.,0.,0.), Point(0.,1.,0.)
6598 };
6599
6600 static const RefElement* m_boundaryPrismP1xP2[] = {
6601 &refElementTriangleP1,&refElementQuadrangleP1xP2,&refElementQuadrangleP1xP2,&refElementTriangleP1,&refElementQuadrangleP1xP2
6602 };
6603
6604 static const RefElement* m_boundaryBoundaryPrismP1xP2[] = {
6605 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1,
6606 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2,
6607 &refElementSegmentP1,&refElementSegmentP1,&refElementSegmentP1
6608 };
6609
6610 const RefElement refElementPrismP1xP2("refElementPrismP1xP2",PRISM,basisFunction3dP1xP2,listQuadratureRulePrism,
6611 m_dofTypePrismP1xP2,m_dofSupportPrismP1xP2,m_dofIdPrismP1xP2,
6612 m_nodePrismP1xP2,6,3,0,0,
6613 m_boundaryPrismP1xP2,m_boundaryBoundaryPrismP1xP2,true);
6614
6615 /************************************************************************
6616 * RefElementPrismR2
6617 *
6618 *
6619 *
6620 *
6621 *************************************************************************/
6622
6623 static const DegreeOfFreedomType m_dofTypePrismR2[15] = {
6624 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,
6625 DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,DOF_VALUE,
6626 DOF_VALUE,DOF_VALUE,DOF_VALUE
6627 };
6628
6629 static const DegreeOfFreedomSupport m_dofSupportPrismR2[15] = {
6630 DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,DOF_NODE_VERTEX,
6631 DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,DOF_NODE_EDGE,
6632 DOF_NODE_EDGE,DOF_NODE_EDGE
6633 };
6634
6635 static const int m_dofIdPrismR2[15] = {
6636 0,1,2,3,4,5,
6637 0,1,2,3,4,5,6,7,8
6638 };
6639
6640 static const Point m_nodePrismR2[15] = {
6641 Point(0.,0.,-1.), Point(1.,0.,-1.), Point(0.,1.,-1.), Point(0.,0.,1.), Point(1.,0.,1.), Point(0.,1.,1.),
6642 Point(0.5,0.,-1.), Point(0.5,0.5,-1.), Point(0.,0.5,-1.), Point(0.5,0.,1.), Point(0.5,0.5,1.), Point(0.,0.5,1.),
6643 Point(0.,0.,0.), Point(1.,0.,0.), Point(0.,1.,0.)
6644 };
6645
6646 static const RefElement* m_boundaryPrismR2[5] = {
6647 &refElementTriangleP2,&refElementQuadrangleQ2,&refElementQuadrangleQ2,&refElementTriangleP2,&refElementQuadrangleQ2
6648 };
6649
6650 static const RefElement* m_boundaryBoundaryPrismR2[9] = {
6651 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2,
6652 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2,
6653 &refElementSegmentP2,&refElementSegmentP2,&refElementSegmentP2
6654 };
6655
6656 const RefElement refElementPrismR2("refElementPrismR2",PRISM,basisFunction3dR2,listQuadratureRulePrism,
6657 m_dofTypePrismR2,m_dofSupportPrismR2,m_dofIdPrismR2,
6658 m_nodePrismR2,6,9,0,0,
6659 m_boundaryPrismR2,m_boundaryBoundaryPrismR2);
6660
6661 /************************************************************************
6662 * RefTetrahedronRT0
6663 *
6664 *
6665 * /.\
6666 * / . \
6667 * /2 1\
6668 * / . 3 . \
6669 * /. 0 .\
6670 * -----------
6671 *
6672 *************************************************************************/
6673
6674 static const DegreeOfFreedomType m_dofTypeTetrahedronRT0[] = {
6675 DOF_FLUX,DOF_FLUX,DOF_FLUX,DOF_FLUX
6676 };
6677
6678 static const DegreeOfFreedomSupport m_dofSupportTetrahedronRT0[] = {
6679 DOF_FACE,DOF_FACE,DOF_FACE,DOF_FACE
6680 };
6681
6682 static const int m_dofIdTetrahedronRT0[] = {
6683 0,1,2,3
6684 };
6685
6686 const RefElement refElementTetrahedronRT0("refElementTetrahedronRT0",TETRAHEDRON,basisFunction3dRT0Tetra,listQuadratureRuleTetrahedron,
6687 m_dofTypeTetrahedronRT0,m_dofSupportTetrahedronRT0,m_dofIdTetrahedronRT0,
6688 nullptr,0,0,0,0,
6689 nullptr,nullptr);
6690
6691 /*const RefElement listRefEle[2] = {
6692 RefElement(3,0,0,0,basisFunctionP1Tria,&refElementP1Seg),
6693 RefElement(4,0,0,0,basisFunction3dP1,&refElementP1Tria)
6694 };*/
6695 }
6696