9#include <kernel/space/parametric_evaluator.hpp>
10#include <kernel/space/dof_mapping_common.hpp>
11#include <kernel/space/bernstein2/scalar_basis.hpp>
33 typename TrafoEvaluator_,
34 typename SpaceEvalTraits_,
35 typename Shape_ =
typename Space_::ShapeType>
45 typename TrafoEvaluator_,
46 typename SpaceEvalTraits_>
47 class Evaluator<Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Hypercube<1> > :
53 Shape::Hypercube<1> >,
75 typedef typename SpaceEvalTraits::DataType
DataType;
108 template<
typename EvalData_>
113 data.phi[0].ref_value = Intern::p0(point[0]);
114 data.phi[1].ref_value = Intern::p1(point[0]);
115 data.phi[2].ref_value = Intern::p2(point[0]);
127 template<
typename EvalData_>
132 data.phi[0].ref_grad[0] = Intern::d1p0(point[0]);
133 data.phi[1].ref_grad[0] = Intern::d1p1(point[0]);
134 data.phi[2].ref_grad[0] = Intern::d1p2(point[0]);
146 template<
typename EvalData_>
151 data.phi[0].ref_hess[0][0] = Intern::d2p0(point[0]);
152 data.phi[1].ref_hess[0][0] = Intern::d2p1(point[0]);
153 data.phi[2].ref_hess[0][0] = Intern::d2p2(point[0]);
164 typename TrafoEvaluator_,
165 typename SpaceEvalTraits_>
166 class Evaluator<Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Hypercube<2> > :
172 Shape::Hypercube<2> >,
194 typedef typename SpaceEvalTraits::DataType
DataType;
227 template<
typename EvalData_>
232 using namespace Bernstein2::Intern;
235 data.phi[0].ref_value = p0(point[0]) * p0(point[1]);
236 data.phi[1].ref_value = p1(point[0]) * p0(point[1]);
237 data.phi[2].ref_value = p0(point[0]) * p1(point[1]);
238 data.phi[3].ref_value = p1(point[0]) * p1(point[1]);
240 data.phi[4].ref_value = p2(point[0]) * p0(point[1]);
241 data.phi[5].ref_value = p2(point[0]) * p1(point[1]);
242 data.phi[6].ref_value = p0(point[0]) * p2(point[1]);
243 data.phi[7].ref_value = p1(point[0]) * p2(point[1]);
245 data.phi[8].ref_value = p2(point[0]) * p2(point[1]);
257 template<
typename EvalData_>
262 using namespace Bernstein2::Intern;
265 data.phi[0].ref_grad[0] = d1p0(point[0]) * p0(point[1]);
266 data.phi[0].ref_grad[1] = p0(point[0]) * d1p0(point[1]);
267 data.phi[1].ref_grad[0] = d1p1(point[0]) * p0(point[1]);
268 data.phi[1].ref_grad[1] = p1(point[0]) * d1p0(point[1]);
269 data.phi[2].ref_grad[0] = d1p0(point[0]) * p1(point[1]);
270 data.phi[2].ref_grad[1] = p0(point[0]) * d1p1(point[1]);
271 data.phi[3].ref_grad[0] = d1p1(point[0]) * p1(point[1]);
272 data.phi[3].ref_grad[1] = p1(point[0]) * d1p1(point[1]);
274 data.phi[4].ref_grad[0] = d1p2(point[0]) * p0(point[1]);
275 data.phi[4].ref_grad[1] = p2(point[0]) * d1p0(point[1]);
276 data.phi[5].ref_grad[0] = d1p2(point[0]) * p1(point[1]);
277 data.phi[5].ref_grad[1] = p2(point[0]) * d1p1(point[1]);
278 data.phi[6].ref_grad[0] = d1p0(point[0]) * p2(point[1]);
279 data.phi[6].ref_grad[1] = p0(point[0]) * d1p2(point[1]);
280 data.phi[7].ref_grad[0] = d1p1(point[0]) * p2(point[1]);
281 data.phi[7].ref_grad[1] = p1(point[0]) * d1p2(point[1]);
283 data.phi[8].ref_grad[0] = d1p2(point[0]) * p2(point[1]);
284 data.phi[8].ref_grad[1] = p2(point[0]) * d1p2(point[1]);
296 template<
typename EvalData_>
301 using namespace Bernstein2::Intern;
304 data.phi[0].ref_hess[0][0] = d2p0(point[0]) * p0(point[1]);
305 data.phi[0].ref_hess[1][1] = p0(point[0]) * d2p0(point[1]);
306 data.phi[0].ref_hess[1][0] =
307 data.phi[0].ref_hess[0][1] = d1p0(point[0]) * d1p0(point[1]);
308 data.phi[1].ref_hess[0][0] = d2p1(point[0]) * p0(point[1]);
309 data.phi[1].ref_hess[1][1] = p1(point[0]) * d2p0(point[1]);
310 data.phi[1].ref_hess[1][0] =
311 data.phi[1].ref_hess[0][1] = d1p1(point[0]) * d1p0(point[1]);
312 data.phi[2].ref_hess[0][0] = d2p0(point[0]) * p1(point[1]);
313 data.phi[2].ref_hess[1][1] = p0(point[0]) * d2p1(point[1]);
314 data.phi[2].ref_hess[1][0] =
315 data.phi[2].ref_hess[0][1] = d1p0(point[0]) * d1p1(point[1]);
316 data.phi[3].ref_hess[0][0] = d2p1(point[0]) * p1(point[1]);
317 data.phi[3].ref_hess[1][1] = p1(point[0]) * d2p1(point[1]);
318 data.phi[3].ref_hess[1][0] =
319 data.phi[3].ref_hess[0][1] = d1p1(point[0]) * d1p1(point[1]);
321 data.phi[4].ref_hess[0][0] = d2p2(point[0]) * p0(point[1]);
322 data.phi[4].ref_hess[1][1] = p2(point[0]) * d2p0(point[1]);
323 data.phi[4].ref_hess[1][0] =
324 data.phi[4].ref_hess[0][1] = d1p2(point[0]) * d1p0(point[1]);
325 data.phi[5].ref_hess[0][0] = d2p2(point[0]) * p1(point[1]);
326 data.phi[5].ref_hess[1][1] = p2(point[0]) * d2p1(point[1]);
327 data.phi[5].ref_hess[1][0] =
328 data.phi[5].ref_hess[0][1] = d1p2(point[0]) * d1p1(point[1]);
329 data.phi[6].ref_hess[0][0] = d2p0(point[0]) * p2(point[1]);
330 data.phi[6].ref_hess[1][1] = p0(point[0]) * d2p2(point[1]);
331 data.phi[6].ref_hess[1][0] =
332 data.phi[6].ref_hess[0][1] = d1p0(point[0]) * d1p2(point[1]);
333 data.phi[7].ref_hess[0][0] = d2p1(point[0]) * p2(point[1]);
334 data.phi[7].ref_hess[1][1] = p1(point[0]) * d2p2(point[1]);
335 data.phi[7].ref_hess[1][0] =
336 data.phi[7].ref_hess[0][1] = d1p1(point[0]) * d1p2(point[1]);
338 data.phi[8].ref_hess[0][0] = d2p2(point[0]) * p2(point[1]);
339 data.phi[8].ref_hess[1][1] = p2(point[0]) * d2p2(point[1]);
340 data.phi[8].ref_hess[1][0] =
341 data.phi[8].ref_hess[0][1] = d1p2(point[0]) * d1p2(point[1]);
352 typename TrafoEvaluator_,
353 typename SpaceEvalTraits_>
354 class Evaluator<Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Hypercube<3> > :
360 Shape::Hypercube<3> >,
382 typedef typename SpaceEvalTraits::DataType
DataType;
415 template<
typename EvalData_>
420 using namespace Bernstein2::Intern;
423 data.phi[0].ref_value = p0(point[0]) * p0(point[1]) * p0(point[2]);
424 data.phi[1].ref_value = p1(point[0]) * p0(point[1]) * p0(point[2]);
425 data.phi[2].ref_value = p0(point[0]) * p1(point[1]) * p0(point[2]);
426 data.phi[3].ref_value = p1(point[0]) * p1(point[1]) * p0(point[2]);
427 data.phi[4].ref_value = p0(point[0]) * p0(point[1]) * p1(point[2]);
428 data.phi[5].ref_value = p1(point[0]) * p0(point[1]) * p1(point[2]);
429 data.phi[6].ref_value = p0(point[0]) * p1(point[1]) * p1(point[2]);
430 data.phi[7].ref_value = p1(point[0]) * p1(point[1]) * p1(point[2]);
432 data.phi[ 8].ref_value = p2(point[0]) * p0(point[1]) * p0(point[2]);
433 data.phi[ 9].ref_value = p2(point[0]) * p1(point[1]) * p0(point[2]);
434 data.phi[10].ref_value = p2(point[0]) * p0(point[1]) * p1(point[2]);
435 data.phi[11].ref_value = p2(point[0]) * p1(point[1]) * p1(point[2]);
436 data.phi[12].ref_value = p0(point[0]) * p2(point[1]) * p0(point[2]);
437 data.phi[13].ref_value = p1(point[0]) * p2(point[1]) * p0(point[2]);
438 data.phi[14].ref_value = p0(point[0]) * p2(point[1]) * p1(point[2]);
439 data.phi[15].ref_value = p1(point[0]) * p2(point[1]) * p1(point[2]);
440 data.phi[16].ref_value = p0(point[0]) * p0(point[1]) * p2(point[2]);
441 data.phi[17].ref_value = p1(point[0]) * p0(point[1]) * p2(point[2]);
442 data.phi[18].ref_value = p0(point[0]) * p1(point[1]) * p2(point[2]);
443 data.phi[19].ref_value = p1(point[0]) * p1(point[1]) * p2(point[2]);
445 data.phi[20].ref_value = p2(point[0]) * p2(point[1]) * p0(point[2]);
446 data.phi[21].ref_value = p2(point[0]) * p2(point[1]) * p1(point[2]);
447 data.phi[22].ref_value = p2(point[0]) * p0(point[1]) * p2(point[2]);
448 data.phi[23].ref_value = p2(point[0]) * p1(point[1]) * p2(point[2]);
449 data.phi[24].ref_value = p0(point[0]) * p2(point[1]) * p2(point[2]);
450 data.phi[25].ref_value = p1(point[0]) * p2(point[1]) * p2(point[2]);
452 data.phi[26].ref_value = p2(point[0]) * p2(point[1]) * p2(point[2]);
464 template<
typename EvalData_>
469 using namespace Bernstein2::Intern;
471 data.phi[0].ref_grad[0] = d1p0(point[0]) * p0(point[1]) * p0(point[2]);
472 data.phi[0].ref_grad[1] = p0(point[0]) * d1p0(point[1]) * p0(point[2]);
473 data.phi[0].ref_grad[2] = p0(point[0]) * p0(point[1]) * d1p0(point[2]);
474 data.phi[1].ref_grad[0] = d1p1(point[0]) * p0(point[1]) * p0(point[2]);
475 data.phi[1].ref_grad[1] = p1(point[0]) * d1p0(point[1]) * p0(point[2]);
476 data.phi[1].ref_grad[2] = p1(point[0]) * p0(point[1]) * d1p0(point[2]);
477 data.phi[2].ref_grad[0] = d1p0(point[0]) * p1(point[1]) * p0(point[2]);
478 data.phi[2].ref_grad[1] = p0(point[0]) * d1p1(point[1]) * p0(point[2]);
479 data.phi[2].ref_grad[2] = p0(point[0]) * p1(point[1]) * d1p0(point[2]);
480 data.phi[3].ref_grad[0] = d1p1(point[0]) * p1(point[1]) * p0(point[2]);
481 data.phi[3].ref_grad[1] = p1(point[0]) * d1p1(point[1]) * p0(point[2]);
482 data.phi[3].ref_grad[2] = p1(point[0]) * p1(point[1]) * d1p0(point[2]);
483 data.phi[4].ref_grad[0] = d1p0(point[0]) * p0(point[1]) * p1(point[2]);
484 data.phi[4].ref_grad[1] = p0(point[0]) * d1p0(point[1]) * p1(point[2]);
485 data.phi[4].ref_grad[2] = p0(point[0]) * p0(point[1]) * d1p1(point[2]);
486 data.phi[5].ref_grad[0] = d1p1(point[0]) * p0(point[1]) * p1(point[2]);
487 data.phi[5].ref_grad[1] = p1(point[0]) * d1p0(point[1]) * p1(point[2]);
488 data.phi[5].ref_grad[2] = p1(point[0]) * p0(point[1]) * d1p1(point[2]);
489 data.phi[6].ref_grad[0] = d1p0(point[0]) * p1(point[1]) * p1(point[2]);
490 data.phi[6].ref_grad[1] = p0(point[0]) * d1p1(point[1]) * p1(point[2]);
491 data.phi[6].ref_grad[2] = p0(point[0]) * p1(point[1]) * d1p1(point[2]);
492 data.phi[7].ref_grad[0] = d1p1(point[0]) * p1(point[1]) * p1(point[2]);
493 data.phi[7].ref_grad[1] = p1(point[0]) * d1p1(point[1]) * p1(point[2]);
494 data.phi[7].ref_grad[2] = p1(point[0]) * p1(point[1]) * d1p1(point[2]);
496 data.phi[ 8].ref_grad[0] = d1p2(point[0]) * p0(point[1]) * p0(point[2]);
497 data.phi[ 8].ref_grad[1] = p2(point[0]) * d1p0(point[1]) * p0(point[2]);
498 data.phi[ 8].ref_grad[2] = p2(point[0]) * p0(point[1]) * d1p0(point[2]);
499 data.phi[ 9].ref_grad[0] = d1p2(point[0]) * p1(point[1]) * p0(point[2]);
500 data.phi[ 9].ref_grad[1] = p2(point[0]) * d1p1(point[1]) * p0(point[2]);
501 data.phi[ 9].ref_grad[2] = p2(point[0]) * p1(point[1]) * d1p0(point[2]);
502 data.phi[10].ref_grad[0] = d1p2(point[0]) * p0(point[1]) * p1(point[2]);
503 data.phi[10].ref_grad[1] = p2(point[0]) * d1p0(point[1]) * p1(point[2]);
504 data.phi[10].ref_grad[2] = p2(point[0]) * p0(point[1]) * d1p1(point[2]);
505 data.phi[11].ref_grad[0] = d1p2(point[0]) * p1(point[1]) * p1(point[2]);
506 data.phi[11].ref_grad[1] = p2(point[0]) * d1p1(point[1]) * p1(point[2]);
507 data.phi[11].ref_grad[2] = p2(point[0]) * p1(point[1]) * d1p1(point[2]);
508 data.phi[12].ref_grad[0] = d1p0(point[0]) * p2(point[1]) * p0(point[2]);
509 data.phi[12].ref_grad[1] = p0(point[0]) * d1p2(point[1]) * p0(point[2]);
510 data.phi[12].ref_grad[2] = p0(point[0]) * p2(point[1]) * d1p0(point[2]);
511 data.phi[13].ref_grad[0] = d1p1(point[0]) * p2(point[1]) * p0(point[2]);
512 data.phi[13].ref_grad[1] = p1(point[0]) * d1p2(point[1]) * p0(point[2]);
513 data.phi[13].ref_grad[2] = p1(point[0]) * p2(point[1]) * d1p0(point[2]);
514 data.phi[14].ref_grad[0] = d1p0(point[0]) * p2(point[1]) * p1(point[2]);
515 data.phi[14].ref_grad[1] = p0(point[0]) * d1p2(point[1]) * p1(point[2]);
516 data.phi[14].ref_grad[2] = p0(point[0]) * p2(point[1]) * d1p1(point[2]);
517 data.phi[15].ref_grad[0] = d1p1(point[0]) * p2(point[1]) * p1(point[2]);
518 data.phi[15].ref_grad[1] = p1(point[0]) * d1p2(point[1]) * p1(point[2]);
519 data.phi[15].ref_grad[2] = p1(point[0]) * p2(point[1]) * d1p1(point[2]);
520 data.phi[16].ref_grad[0] = d1p0(point[0]) * p0(point[1]) * p2(point[2]);
521 data.phi[16].ref_grad[1] = p0(point[0]) * d1p0(point[1]) * p2(point[2]);
522 data.phi[16].ref_grad[2] = p0(point[0]) * p0(point[1]) * d1p2(point[2]);
523 data.phi[17].ref_grad[0] = d1p1(point[0]) * p0(point[1]) * p2(point[2]);
524 data.phi[17].ref_grad[1] = p1(point[0]) * d1p0(point[1]) * p2(point[2]);
525 data.phi[17].ref_grad[2] = p1(point[0]) * p0(point[1]) * d1p2(point[2]);
526 data.phi[18].ref_grad[0] = d1p0(point[0]) * p1(point[1]) * p2(point[2]);
527 data.phi[18].ref_grad[1] = p0(point[0]) * d1p1(point[1]) * p2(point[2]);
528 data.phi[18].ref_grad[2] = p0(point[0]) * p1(point[1]) * d1p2(point[2]);
529 data.phi[19].ref_grad[0] = d1p1(point[0]) * p1(point[1]) * p2(point[2]);
530 data.phi[19].ref_grad[1] = p1(point[0]) * d1p1(point[1]) * p2(point[2]);
531 data.phi[19].ref_grad[2] = p1(point[0]) * p1(point[1]) * d1p2(point[2]);
533 data.phi[20].ref_grad[0] = d1p2(point[0]) * p2(point[1]) * p0(point[2]);
534 data.phi[20].ref_grad[1] = p2(point[0]) * d1p2(point[1]) * p0(point[2]);
535 data.phi[20].ref_grad[2] = p2(point[0]) * p2(point[1]) * d1p0(point[2]);
536 data.phi[21].ref_grad[0] = d1p2(point[0]) * p2(point[1]) * p1(point[2]);
537 data.phi[21].ref_grad[1] = p2(point[0]) * d1p2(point[1]) * p1(point[2]);
538 data.phi[21].ref_grad[2] = p2(point[0]) * p2(point[1]) * d1p1(point[2]);
539 data.phi[22].ref_grad[0] = d1p2(point[0]) * p0(point[1]) * p2(point[2]);
540 data.phi[22].ref_grad[1] = p2(point[0]) * d1p0(point[1]) * p2(point[2]);
541 data.phi[22].ref_grad[2] = p2(point[0]) * p0(point[1]) * d1p2(point[2]);
542 data.phi[23].ref_grad[0] = d1p2(point[0]) * p1(point[1]) * p2(point[2]);
543 data.phi[23].ref_grad[1] = p2(point[0]) * d1p1(point[1]) * p2(point[2]);
544 data.phi[23].ref_grad[2] = p2(point[0]) * p1(point[1]) * d1p2(point[2]);
545 data.phi[24].ref_grad[0] = d1p0(point[0]) * p2(point[1]) * p2(point[2]);
546 data.phi[24].ref_grad[1] = p0(point[0]) * d1p2(point[1]) * p2(point[2]);
547 data.phi[24].ref_grad[2] = p0(point[0]) * p2(point[1]) * d1p2(point[2]);
548 data.phi[25].ref_grad[0] = d1p1(point[0]) * p2(point[1]) * p2(point[2]);
549 data.phi[25].ref_grad[1] = p1(point[0]) * d1p2(point[1]) * p2(point[2]);
550 data.phi[25].ref_grad[2] = p1(point[0]) * p2(point[1]) * d1p2(point[2]);
552 data.phi[26].ref_grad[0] = d1p2(point[0]) * p2(point[1]) * p2(point[2]);
553 data.phi[26].ref_grad[1] = p2(point[0]) * d1p2(point[1]) * p2(point[2]);
554 data.phi[26].ref_grad[2] = p2(point[0]) * p2(point[1]) * d1p2(point[2]);
566 template<
typename EvalData_>
571 using namespace Bernstein2::Intern;
573 data.phi[ 0].ref_hess[0][0] = d2p0(point[0]) * p0(point[1]) * p0(point[2]);
574 data.phi[ 0].ref_hess[1][1] = p0(point[0]) * d2p0(point[1]) * p0(point[2]);
575 data.phi[ 0].ref_hess[2][2] = p0(point[0]) * p0(point[1]) * d2p0(point[2]);
576 data.phi[ 0].ref_hess[1][0] =
577 data.phi[ 0].ref_hess[0][1] = d1p0(point[0]) * d1p0(point[1]) * p0(point[2]);
578 data.phi[ 0].ref_hess[2][0] =
579 data.phi[ 0].ref_hess[0][2] = d1p0(point[0]) * p0(point[1]) * d1p0(point[2]);
580 data.phi[ 0].ref_hess[2][1] =
581 data.phi[ 0].ref_hess[1][2] = p0(point[0]) * d1p0(point[1]) * d1p0(point[2]);
582 data.phi[ 1].ref_hess[0][0] = d2p1(point[0]) * p0(point[1]) * p0(point[2]);
583 data.phi[ 1].ref_hess[1][1] = p1(point[0]) * d2p0(point[1]) * p0(point[2]);
584 data.phi[ 1].ref_hess[2][2] = p1(point[0]) * p0(point[1]) * d2p0(point[2]);
585 data.phi[ 1].ref_hess[1][0] =
586 data.phi[ 1].ref_hess[0][1] = d1p1(point[0]) * d1p0(point[1]) * p0(point[2]);
587 data.phi[ 1].ref_hess[2][0] =
588 data.phi[ 1].ref_hess[0][2] = d1p1(point[0]) * p0(point[1]) * d1p0(point[2]);
589 data.phi[ 1].ref_hess[2][1] =
590 data.phi[ 1].ref_hess[1][2] = p1(point[0]) * d1p0(point[1]) * d1p0(point[2]);
591 data.phi[ 2].ref_hess[0][0] = d2p0(point[0]) * p1(point[1]) * p0(point[2]);
592 data.phi[ 2].ref_hess[1][1] = p0(point[0]) * d2p1(point[1]) * p0(point[2]);
593 data.phi[ 2].ref_hess[2][2] = p0(point[0]) * p1(point[1]) * d2p0(point[2]);
594 data.phi[ 2].ref_hess[1][0] =
595 data.phi[ 2].ref_hess[0][1] = d1p0(point[0]) * d1p1(point[1]) * p0(point[2]);
596 data.phi[ 2].ref_hess[2][0] =
597 data.phi[ 2].ref_hess[0][2] = d1p0(point[0]) * p1(point[1]) * d1p0(point[2]);
598 data.phi[ 2].ref_hess[2][1] =
599 data.phi[ 2].ref_hess[1][2] = p0(point[0]) * d1p1(point[1]) * d1p0(point[2]);
600 data.phi[ 3].ref_hess[0][0] = d2p1(point[0]) * p1(point[1]) * p0(point[2]);
601 data.phi[ 3].ref_hess[1][1] = p1(point[0]) * d2p1(point[1]) * p0(point[2]);
602 data.phi[ 3].ref_hess[2][2] = p1(point[0]) * p1(point[1]) * d2p0(point[2]);
603 data.phi[ 3].ref_hess[1][0] =
604 data.phi[ 3].ref_hess[0][1] = d1p1(point[0]) * d1p1(point[1]) * p0(point[2]);
605 data.phi[ 3].ref_hess[2][0] =
606 data.phi[ 3].ref_hess[0][2] = d1p1(point[0]) * p1(point[1]) * d1p0(point[2]);
607 data.phi[ 3].ref_hess[2][1] =
608 data.phi[ 3].ref_hess[1][2] = p1(point[0]) * d1p1(point[1]) * d1p0(point[2]);
609 data.phi[ 4].ref_hess[0][0] = d2p0(point[0]) * p0(point[1]) * p1(point[2]);
610 data.phi[ 4].ref_hess[1][1] = p0(point[0]) * d2p0(point[1]) * p1(point[2]);
611 data.phi[ 4].ref_hess[2][2] = p0(point[0]) * p0(point[1]) * d2p1(point[2]);
612 data.phi[ 4].ref_hess[1][0] =
613 data.phi[ 4].ref_hess[0][1] = d1p0(point[0]) * d1p0(point[1]) * p1(point[2]);
614 data.phi[ 4].ref_hess[2][0] =
615 data.phi[ 4].ref_hess[0][2] = d1p0(point[0]) * p0(point[1]) * d1p1(point[2]);
616 data.phi[ 4].ref_hess[2][1] =
617 data.phi[ 4].ref_hess[1][2] = p0(point[0]) * d1p0(point[1]) * d1p1(point[2]);
618 data.phi[ 5].ref_hess[0][0] = d2p1(point[0]) * p0(point[1]) * p1(point[2]);
619 data.phi[ 5].ref_hess[1][1] = p1(point[0]) * d2p0(point[1]) * p1(point[2]);
620 data.phi[ 5].ref_hess[2][2] = p1(point[0]) * p0(point[1]) * d2p1(point[2]);
621 data.phi[ 5].ref_hess[1][0] =
622 data.phi[ 5].ref_hess[0][1] = d1p1(point[0]) * d1p0(point[1]) * p1(point[2]);
623 data.phi[ 5].ref_hess[2][0] =
624 data.phi[ 5].ref_hess[0][2] = d1p1(point[0]) * p0(point[1]) * d1p1(point[2]);
625 data.phi[ 5].ref_hess[2][1] =
626 data.phi[ 5].ref_hess[1][2] = p1(point[0]) * d1p0(point[1]) * d1p1(point[2]);
627 data.phi[ 6].ref_hess[0][0] = d2p0(point[0]) * p1(point[1]) * p1(point[2]);
628 data.phi[ 6].ref_hess[1][1] = p0(point[0]) * d2p1(point[1]) * p1(point[2]);
629 data.phi[ 6].ref_hess[2][2] = p0(point[0]) * p1(point[1]) * d2p1(point[2]);
630 data.phi[ 6].ref_hess[1][0] =
631 data.phi[ 6].ref_hess[0][1] = d1p0(point[0]) * d1p1(point[1]) * p1(point[2]);
632 data.phi[ 6].ref_hess[2][0] =
633 data.phi[ 6].ref_hess[0][2] = d1p0(point[0]) * p1(point[1]) * d1p1(point[2]);
634 data.phi[ 6].ref_hess[2][1] =
635 data.phi[ 6].ref_hess[1][2] = p0(point[0]) * d1p1(point[1]) * d1p1(point[2]);
636 data.phi[ 7].ref_hess[0][0] = d2p1(point[0]) * p1(point[1]) * p1(point[2]);
637 data.phi[ 7].ref_hess[1][1] = p1(point[0]) * d2p1(point[1]) * p1(point[2]);
638 data.phi[ 7].ref_hess[2][2] = p1(point[0]) * p1(point[1]) * d2p1(point[2]);
639 data.phi[ 7].ref_hess[1][0] =
640 data.phi[ 7].ref_hess[0][1] = d1p1(point[0]) * d1p1(point[1]) * p1(point[2]);
641 data.phi[ 7].ref_hess[2][0] =
642 data.phi[ 7].ref_hess[0][2] = d1p1(point[0]) * p1(point[1]) * d1p1(point[2]);
643 data.phi[ 7].ref_hess[2][1] =
644 data.phi[ 7].ref_hess[1][2] = p1(point[0]) * d1p1(point[1]) * d1p1(point[2]);
647 data.phi[ 8].ref_hess[0][0] = d2p2(point[0]) * p0(point[1]) * p0(point[2]);
648 data.phi[ 8].ref_hess[1][1] = p2(point[0]) * d2p0(point[1]) * p0(point[2]);
649 data.phi[ 8].ref_hess[2][2] = p2(point[0]) * p0(point[1]) * d2p0(point[2]);
650 data.phi[ 8].ref_hess[1][0] =
651 data.phi[ 8].ref_hess[0][1] = d1p2(point[0]) * d1p0(point[1]) * p0(point[2]);
652 data.phi[ 8].ref_hess[2][0] =
653 data.phi[ 8].ref_hess[0][2] = d1p2(point[0]) * p0(point[1]) * d1p0(point[2]);
654 data.phi[ 8].ref_hess[2][1] =
655 data.phi[ 8].ref_hess[1][2] = p2(point[0]) * d1p0(point[1]) * d1p0(point[2]);
656 data.phi[ 9].ref_hess[0][0] = d2p2(point[0]) * p1(point[1]) * p0(point[2]);
657 data.phi[ 9].ref_hess[1][1] = p2(point[0]) * d2p1(point[1]) * p0(point[2]);
658 data.phi[ 9].ref_hess[2][2] = p2(point[0]) * p1(point[1]) * d2p0(point[2]);
659 data.phi[ 9].ref_hess[1][0] =
660 data.phi[ 9].ref_hess[0][1] = d1p2(point[0]) * d1p1(point[1]) * p0(point[2]);
661 data.phi[ 9].ref_hess[2][0] =
662 data.phi[ 9].ref_hess[0][2] = d1p2(point[0]) * p1(point[1]) * d1p0(point[2]);
663 data.phi[ 9].ref_hess[2][1] =
664 data.phi[ 9].ref_hess[1][2] = p2(point[0]) * d1p1(point[1]) * d1p0(point[2]);
665 data.phi[10].ref_hess[0][0] = d2p2(point[0]) * p0(point[1]) * p1(point[2]);
666 data.phi[10].ref_hess[1][1] = p2(point[0]) * d2p0(point[1]) * p1(point[2]);
667 data.phi[10].ref_hess[2][2] = p2(point[0]) * p0(point[1]) * d2p1(point[2]);
668 data.phi[10].ref_hess[1][0] =
669 data.phi[10].ref_hess[0][1] = d1p2(point[0]) * d1p0(point[1]) * p1(point[2]);
670 data.phi[10].ref_hess[2][0] =
671 data.phi[10].ref_hess[0][2] = d1p2(point[0]) * p0(point[1]) * d1p1(point[2]);
672 data.phi[10].ref_hess[2][1] =
673 data.phi[10].ref_hess[1][2] = p2(point[0]) * d1p0(point[1]) * d1p1(point[2]);
674 data.phi[11].ref_hess[0][0] = d2p2(point[0]) * p1(point[1]) * p1(point[2]);
675 data.phi[11].ref_hess[1][1] = p2(point[0]) * d2p1(point[1]) * p1(point[2]);
676 data.phi[11].ref_hess[2][2] = p2(point[0]) * p1(point[1]) * d2p1(point[2]);
677 data.phi[11].ref_hess[1][0] =
678 data.phi[11].ref_hess[0][1] = d1p2(point[0]) * d1p1(point[1]) * p1(point[2]);
679 data.phi[11].ref_hess[2][0] =
680 data.phi[11].ref_hess[0][2] = d1p2(point[0]) * p1(point[1]) * d1p1(point[2]);
681 data.phi[11].ref_hess[2][1] =
682 data.phi[11].ref_hess[1][2] = p2(point[0]) * d1p1(point[1]) * d1p1(point[2]);
683 data.phi[12].ref_hess[0][0] = d2p0(point[0]) * p2(point[1]) * p0(point[2]);
684 data.phi[12].ref_hess[1][1] = p0(point[0]) * d2p2(point[1]) * p0(point[2]);
685 data.phi[12].ref_hess[2][2] = p0(point[0]) * p2(point[1]) * d2p0(point[2]);
686 data.phi[12].ref_hess[1][0] =
687 data.phi[12].ref_hess[0][1] = d1p0(point[0]) * d1p2(point[1]) * p0(point[2]);
688 data.phi[12].ref_hess[2][0] =
689 data.phi[12].ref_hess[0][2] = d1p0(point[0]) * p2(point[1]) * d1p0(point[2]);
690 data.phi[12].ref_hess[2][1] =
691 data.phi[12].ref_hess[1][2] = p0(point[0]) * d1p2(point[1]) * d1p0(point[2]);
692 data.phi[13].ref_hess[0][0] = d2p1(point[0]) * p2(point[1]) * p0(point[2]);
693 data.phi[13].ref_hess[1][1] = p1(point[0]) * d2p2(point[1]) * p0(point[2]);
694 data.phi[13].ref_hess[2][2] = p1(point[0]) * p2(point[1]) * d2p0(point[2]);
695 data.phi[13].ref_hess[1][0] =
696 data.phi[13].ref_hess[0][1] = d1p1(point[0]) * d1p2(point[1]) * p0(point[2]);
697 data.phi[13].ref_hess[2][0] =
698 data.phi[13].ref_hess[0][2] = d1p1(point[0]) * p2(point[1]) * d1p0(point[2]);
699 data.phi[13].ref_hess[2][1] =
700 data.phi[13].ref_hess[1][2] = p1(point[0]) * d1p2(point[1]) * d1p0(point[2]);
701 data.phi[14].ref_hess[0][0] = d2p0(point[0]) * p2(point[1]) * p1(point[2]);
702 data.phi[14].ref_hess[1][1] = p0(point[0]) * d2p2(point[1]) * p1(point[2]);
703 data.phi[14].ref_hess[2][2] = p0(point[0]) * p2(point[1]) * d2p1(point[2]);
704 data.phi[14].ref_hess[1][0] =
705 data.phi[14].ref_hess[0][1] = d1p0(point[0]) * d1p2(point[1]) * p1(point[2]);
706 data.phi[14].ref_hess[2][0] =
707 data.phi[14].ref_hess[0][2] = d1p0(point[0]) * p2(point[1]) * d1p1(point[2]);
708 data.phi[14].ref_hess[2][1] =
709 data.phi[14].ref_hess[1][2] = p0(point[0]) * d1p2(point[1]) * d1p1(point[2]);
710 data.phi[15].ref_hess[0][0] = d2p1(point[0]) * p2(point[1]) * p1(point[2]);
711 data.phi[15].ref_hess[1][1] = p1(point[0]) * d2p2(point[1]) * p1(point[2]);
712 data.phi[15].ref_hess[2][2] = p1(point[0]) * p2(point[1]) * d2p1(point[2]);
713 data.phi[15].ref_hess[1][0] =
714 data.phi[15].ref_hess[0][1] = d1p1(point[0]) * d1p2(point[1]) * p1(point[2]);
715 data.phi[15].ref_hess[2][0] =
716 data.phi[15].ref_hess[0][2] = d1p1(point[0]) * p2(point[1]) * d1p1(point[2]);
717 data.phi[15].ref_hess[2][1] =
718 data.phi[15].ref_hess[1][2] = p1(point[0]) * d1p2(point[1]) * d1p1(point[2]);
719 data.phi[16].ref_hess[0][0] = d2p0(point[0]) * p0(point[1]) * p2(point[2]);
720 data.phi[16].ref_hess[1][1] = p0(point[0]) * d2p0(point[1]) * p2(point[2]);
721 data.phi[16].ref_hess[2][2] = p0(point[0]) * p0(point[1]) * d2p2(point[2]);
722 data.phi[16].ref_hess[1][0] =
723 data.phi[16].ref_hess[0][1] = d1p0(point[0]) * d1p0(point[1]) * p2(point[2]);
724 data.phi[16].ref_hess[2][0] =
725 data.phi[16].ref_hess[0][2] = d1p0(point[0]) * p0(point[1]) * d1p2(point[2]);
726 data.phi[16].ref_hess[2][1] =
727 data.phi[16].ref_hess[1][2] = p0(point[0]) * d1p0(point[1]) * d1p2(point[2]);
728 data.phi[17].ref_hess[0][0] = d2p1(point[0]) * p0(point[1]) * p2(point[2]);
729 data.phi[17].ref_hess[1][1] = p1(point[0]) * d2p0(point[1]) * p2(point[2]);
730 data.phi[17].ref_hess[2][2] = p1(point[0]) * p0(point[1]) * d2p2(point[2]);
731 data.phi[17].ref_hess[1][0] =
732 data.phi[17].ref_hess[0][1] = d1p1(point[0]) * d1p0(point[1]) * p2(point[2]);
733 data.phi[17].ref_hess[2][0] =
734 data.phi[17].ref_hess[0][2] = d1p1(point[0]) * p0(point[1]) * d1p2(point[2]);
735 data.phi[17].ref_hess[2][1] =
736 data.phi[17].ref_hess[1][2] = p1(point[0]) * d1p0(point[1]) * d1p2(point[2]);
737 data.phi[18].ref_hess[0][0] = d2p0(point[0]) * p1(point[1]) * p2(point[2]);
738 data.phi[18].ref_hess[1][1] = p0(point[0]) * d2p1(point[1]) * p2(point[2]);
739 data.phi[18].ref_hess[2][2] = p0(point[0]) * p1(point[1]) * d2p2(point[2]);
740 data.phi[18].ref_hess[1][0] =
741 data.phi[18].ref_hess[0][1] = d1p0(point[0]) * d1p1(point[1]) * p2(point[2]);
742 data.phi[18].ref_hess[2][0] =
743 data.phi[18].ref_hess[0][2] = d1p0(point[0]) * p1(point[1]) * d1p2(point[2]);
744 data.phi[18].ref_hess[2][1] =
745 data.phi[18].ref_hess[1][2] = p0(point[0]) * d1p1(point[1]) * d1p2(point[2]);
746 data.phi[19].ref_hess[0][0] = d2p1(point[0]) * p1(point[1]) * p2(point[2]);
747 data.phi[19].ref_hess[1][1] = p1(point[0]) * d2p1(point[1]) * p2(point[2]);
748 data.phi[19].ref_hess[2][2] = p1(point[0]) * p1(point[1]) * d2p2(point[2]);
749 data.phi[19].ref_hess[1][0] =
750 data.phi[19].ref_hess[0][1] = d1p1(point[0]) * d1p1(point[1]) * p2(point[2]);
751 data.phi[19].ref_hess[2][0] =
752 data.phi[19].ref_hess[0][2] = d1p1(point[0]) * p1(point[1]) * d1p2(point[2]);
753 data.phi[19].ref_hess[2][1] =
754 data.phi[19].ref_hess[1][2] = p1(point[0]) * d1p1(point[1]) * d1p2(point[2]);
757 data.phi[20].ref_hess[0][0] = d2p2(point[0]) * p2(point[1]) * p0(point[2]);
758 data.phi[20].ref_hess[1][1] = p2(point[0]) * d2p2(point[1]) * p0(point[2]);
759 data.phi[20].ref_hess[2][2] = p2(point[0]) * p2(point[1]) * d2p0(point[2]);
760 data.phi[20].ref_hess[1][0] =
761 data.phi[20].ref_hess[0][1] = d1p2(point[0]) * d1p2(point[1]) * p0(point[2]);
762 data.phi[20].ref_hess[2][0] =
763 data.phi[20].ref_hess[0][2] = d1p2(point[0]) * p2(point[1]) * d1p0(point[2]);
764 data.phi[20].ref_hess[2][1] =
765 data.phi[20].ref_hess[1][2] = p2(point[0]) * d1p2(point[1]) * d1p0(point[2]);
766 data.phi[21].ref_hess[0][0] = d2p2(point[0]) * p2(point[1]) * p1(point[2]);
767 data.phi[21].ref_hess[1][1] = p2(point[0]) * d2p2(point[1]) * p1(point[2]);
768 data.phi[21].ref_hess[2][2] = p2(point[0]) * p2(point[1]) * d2p1(point[2]);
769 data.phi[21].ref_hess[1][0] =
770 data.phi[21].ref_hess[0][1] = d1p2(point[0]) * d1p2(point[1]) * p1(point[2]);
771 data.phi[21].ref_hess[2][0] =
772 data.phi[21].ref_hess[0][2] = d1p2(point[0]) * p2(point[1]) * d1p1(point[2]);
773 data.phi[21].ref_hess[2][1] =
774 data.phi[21].ref_hess[1][2] = p2(point[0]) * d1p2(point[1]) * d1p1(point[2]);
775 data.phi[22].ref_hess[0][0] = d2p2(point[0]) * p0(point[1]) * p2(point[2]);
776 data.phi[22].ref_hess[1][1] = p2(point[0]) * d2p0(point[1]) * p2(point[2]);
777 data.phi[22].ref_hess[2][2] = p2(point[0]) * p0(point[1]) * d2p2(point[2]);
778 data.phi[22].ref_hess[1][0] =
779 data.phi[22].ref_hess[0][1] = d1p2(point[0]) * d1p0(point[1]) * p2(point[2]);
780 data.phi[22].ref_hess[2][0] =
781 data.phi[22].ref_hess[0][2] = d1p2(point[0]) * p0(point[1]) * d1p2(point[2]);
782 data.phi[22].ref_hess[2][1] =
783 data.phi[22].ref_hess[1][2] = p2(point[0]) * d1p0(point[1]) * d1p2(point[2]);
784 data.phi[23].ref_hess[0][0] = d2p2(point[0]) * p1(point[1]) * p2(point[2]);
785 data.phi[23].ref_hess[1][1] = p2(point[0]) * d2p1(point[1]) * p2(point[2]);
786 data.phi[23].ref_hess[2][2] = p2(point[0]) * p1(point[1]) * d2p2(point[2]);
787 data.phi[23].ref_hess[1][0] =
788 data.phi[23].ref_hess[0][1] = d1p2(point[0]) * d1p1(point[1]) * p2(point[2]);
789 data.phi[23].ref_hess[2][0] =
790 data.phi[23].ref_hess[0][2] = d1p2(point[0]) * p1(point[1]) * d1p2(point[2]);
791 data.phi[23].ref_hess[2][1] =
792 data.phi[23].ref_hess[1][2] = p2(point[0]) * d1p1(point[1]) * d1p2(point[2]);
793 data.phi[24].ref_hess[0][0] = d2p0(point[0]) * p2(point[1]) * p2(point[2]);
794 data.phi[24].ref_hess[1][1] = p0(point[0]) * d2p2(point[1]) * p2(point[2]);
795 data.phi[24].ref_hess[2][2] = p0(point[0]) * p2(point[1]) * d2p2(point[2]);
796 data.phi[24].ref_hess[1][0] =
797 data.phi[24].ref_hess[0][1] = d1p0(point[0]) * d1p2(point[1]) * p2(point[2]);
798 data.phi[24].ref_hess[2][0] =
799 data.phi[24].ref_hess[0][2] = d1p0(point[0]) * p2(point[1]) * d1p2(point[2]);
800 data.phi[24].ref_hess[2][1] =
801 data.phi[24].ref_hess[1][2] = p0(point[0]) * d1p2(point[1]) * d1p2(point[2]);
802 data.phi[25].ref_hess[0][0] = d2p1(point[0]) * p2(point[1]) * p2(point[2]);
803 data.phi[25].ref_hess[1][1] = p1(point[0]) * d2p2(point[1]) * p2(point[2]);
804 data.phi[25].ref_hess[2][2] = p1(point[0]) * p2(point[1]) * d2p2(point[2]);
805 data.phi[25].ref_hess[1][0] =
806 data.phi[25].ref_hess[0][1] = d1p1(point[0]) * d1p2(point[1]) * p2(point[2]);
807 data.phi[25].ref_hess[2][0] =
808 data.phi[25].ref_hess[0][2] = d1p1(point[0]) * p2(point[1]) * d1p2(point[2]);
809 data.phi[25].ref_hess[2][1] =
810 data.phi[25].ref_hess[1][2] = p1(point[0]) * d1p2(point[1]) * d1p2(point[2]);
813 data.phi[26].ref_hess[0][0] = d2p2(point[0]) * p2(point[1]) * p2(point[2]);
814 data.phi[26].ref_hess[1][1] = p2(point[0]) * d2p2(point[1]) * p2(point[2]);
815 data.phi[26].ref_hess[2][2] = p2(point[0]) * p2(point[1]) * d2p2(point[2]);
816 data.phi[26].ref_hess[1][0] =
817 data.phi[26].ref_hess[0][1] = d1p2(point[0]) * d1p2(point[1]) * p2(point[2]);
818 data.phi[26].ref_hess[2][0] =
819 data.phi[26].ref_hess[0][2] = d1p2(point[0]) * p2(point[1]) * d1p2(point[2]);
820 data.phi[26].ref_hess[2][1] =
821 data.phi[26].ref_hess[1][2] = p2(point[0]) * d1p2(point[1]) * d1p2(point[2]);
void eval_ref_gradients(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function gradients on the reference cell.
void eval_ref_hessians(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function hessians on the reference cell.
void eval_ref_values(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function values on the reference cell.
SpaceEvalTraits::EvalPolicy EvalPolicy
evaluation policy
Space_ SpaceType
space type
SpaceEvalTraits_ SpaceEvalTraits
space evaluation traits
SpaceEvalTraits::DataType DataType
data type
EvalPolicy::DomainPointType DomainPointType
domain point type
Evaluator(const SpaceType &space)
Constructor.
int get_num_local_dofs() const
Returns the number of local DOFs.
ParametricEvaluator< Evaluator, TrafoEvaluator_, SpaceEvalTraits_, ref_caps > BaseClass
base-class typedef
void eval_ref_values(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function values on the reference cell.
int get_num_local_dofs() const
Returns the number of local DOFs.
void eval_ref_gradients(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function gradients on the reference cell.
SpaceEvalTraits::DataType DataType
data type
ParametricEvaluator< Evaluator, TrafoEvaluator_, SpaceEvalTraits_, ref_caps > BaseClass
base-class typedef
SpaceEvalTraits_ SpaceEvalTraits
space evaluation traits
Evaluator(const SpaceType &space)
Constructor.
EvalPolicy::DomainPointType DomainPointType
domain point type
Space_ SpaceType
space type
SpaceEvalTraits::EvalPolicy EvalPolicy
evaluation policy
void eval_ref_hessians(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function hessians on the reference cell.
EvalPolicy::DomainPointType DomainPointType
domain point type
ParametricEvaluator< Evaluator, TrafoEvaluator_, SpaceEvalTraits_, ref_caps > BaseClass
base-class typedef
void eval_ref_hessians(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function hessians on the reference cell.
void eval_ref_gradients(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function gradients on the reference cell.
SpaceEvalTraits::DataType DataType
data type
int get_num_local_dofs() const
Returns the number of local DOFs.
void eval_ref_values(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function values on the reference cell.
SpaceEvalTraits::EvalPolicy EvalPolicy
evaluation policy
SpaceEvalTraits_ SpaceEvalTraits
space evaluation traits
Space_ SpaceType
space type
Evaluator(const SpaceType &space)
Constructor.
Bernstein-2 Element Evaluator class template declaration.
Finite-Element Parametric Evaluator CRTP base-class template.
static constexpr SpaceTags ref_caps
Bernstein-2 Element Evaluator reference capabilities.
SpaceTags
Space configuration tags enum.
@ ref_value
specifies whether the space should supply reference basis function values
@ ref_hess
specifies whether the space should supply reference basis function hessians
@ ref_grad
specifies whether the space should supply reference basis function gradients