FEAT 3
Finite Element Analysis Toolbox
Loading...
Searching...
No Matches
evaluator.hpp
1// FEAT3: Finite Element Analysis Toolbox, Version 3
2// Copyright (C) 2010 by Stefan Turek & the FEAT group
3// FEAT3 is released under the GNU General Public License version 3,
4// see the file 'copyright.txt' in the top level directory for details.
5
6#pragma once
7
8// includes, FEAT
9#include <kernel/space/parametric_evaluator.hpp>
10#include <kernel/space/dof_mapping_common.hpp>
11#include <kernel/space/bernstein2/scalar_basis.hpp>
12
13namespace FEAT
14{
15 namespace Space
16 {
17 namespace Bernstein2
18 {
25
31 template<
32 typename Space_,
33 typename TrafoEvaluator_,
34 typename SpaceEvalTraits_,
35 typename Shape_ = typename Space_::ShapeType>
36 class Evaluator DOXY({});
37
43 template<
44 typename Space_,
45 typename TrafoEvaluator_,
46 typename SpaceEvalTraits_>
47 class Evaluator<Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Hypercube<1> > :
49 Evaluator<
50 Space_,
51 TrafoEvaluator_,
52 SpaceEvalTraits_,
53 Shape::Hypercube<1> >,
54 TrafoEvaluator_,
55 SpaceEvalTraits_,
56 ref_caps>
57 {
58 public:
61
63 typedef Space_ SpaceType;
64
66 typedef SpaceEvalTraits_ SpaceEvalTraits;
67
69 typedef typename SpaceEvalTraits::EvalPolicy EvalPolicy;
70
72 typedef typename EvalPolicy::DomainPointType DomainPointType;
73
75 typedef typename SpaceEvalTraits::DataType DataType;
76
77 public:
84 explicit Evaluator(const SpaceType& DOXY(space))
85 {
86 }
87
95 {
96 return 3;
97 }
98
108 template<typename EvalData_>
110 EvalData_& data,
111 const DomainPointType& point) const
112 {
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]);
116 }
117
127 template<typename EvalData_>
129 EvalData_& data,
130 const DomainPointType& point) const
131 {
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]);
135 }
136
146 template<typename EvalData_>
148 EvalData_& data,
149 const DomainPointType& point) const
150 {
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]);
154 }
155 }; // class Evaluator<...,Hypercube<1>>
156
162 template<
163 typename Space_,
164 typename TrafoEvaluator_,
165 typename SpaceEvalTraits_>
166 class Evaluator<Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Hypercube<2> > :
167 public ParametricEvaluator<
168 Evaluator<
169 Space_,
170 TrafoEvaluator_,
171 SpaceEvalTraits_,
172 Shape::Hypercube<2> >,
173 TrafoEvaluator_,
174 SpaceEvalTraits_,
175 ref_caps>
176 {
177 public:
180
182 typedef Space_ SpaceType;
183
185 typedef SpaceEvalTraits_ SpaceEvalTraits;
186
188 typedef typename SpaceEvalTraits::EvalPolicy EvalPolicy;
189
191 typedef typename EvalPolicy::DomainPointType DomainPointType;
192
194 typedef typename SpaceEvalTraits::DataType DataType;
195
196 public:
203 explicit Evaluator(const SpaceType& DOXY(space))
204 {
205 }
206
214 {
215 return 9;
216 }
217
227 template<typename EvalData_>
229 EvalData_& data,
230 const DomainPointType& point) const
231 {
232 using namespace Bernstein2::Intern;
233
234 // vertex dofs
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]);
239 // edge dofs
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]);
244 // center dof
245 data.phi[8].ref_value = p2(point[0]) * p2(point[1]);
246 }
247
257 template<typename EvalData_>
259 EvalData_& data,
260 const DomainPointType& point) const
261 {
262 using namespace Bernstein2::Intern;
263
264 // vertex dofs
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]);
273 // edge dofs
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]);
282 // center dof
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]);
285 }
286
296 template<typename EvalData_>
298 EvalData_& data,
299 const DomainPointType& point) const
300 {
301 using namespace Bernstein2::Intern;
302
303 // vertex dofs
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]);
320 // edge dofs
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]);
337 // center dof
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]);
342 }
343 }; // class Evaluator<...,Hypercube<2>>
344
350 template<
351 typename Space_,
352 typename TrafoEvaluator_,
353 typename SpaceEvalTraits_>
354 class Evaluator<Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Hypercube<3> > :
355 public ParametricEvaluator<
356 Evaluator<
357 Space_,
358 TrafoEvaluator_,
359 SpaceEvalTraits_,
360 Shape::Hypercube<3> >,
361 TrafoEvaluator_,
362 SpaceEvalTraits_,
363 ref_caps>
364 {
365 public:
368
370 typedef Space_ SpaceType;
371
373 typedef SpaceEvalTraits_ SpaceEvalTraits;
374
376 typedef typename SpaceEvalTraits::EvalPolicy EvalPolicy;
377
379 typedef typename EvalPolicy::DomainPointType DomainPointType;
380
382 typedef typename SpaceEvalTraits::DataType DataType;
383
384 public:
391 explicit Evaluator(const SpaceType& DOXY(space))
392 {
393 }
394
402 {
403 return 27;
404 }
405
415 template<typename EvalData_>
417 EvalData_& data,
418 const DomainPointType& point) const
419 {
420 using namespace Bernstein2::Intern;
421
422 // vertex dofs
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]);
431 // edge dofs
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]);
444 // face dofs
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]);
451 // center dof
452 data.phi[26].ref_value = p2(point[0]) * p2(point[1]) * p2(point[2]);
453 }
454
464 template<typename EvalData_>
466 EvalData_& data,
467 const DomainPointType& point) const
468 {
469 using namespace Bernstein2::Intern;
470 // vertex dofs
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]);
495 // edge dofs
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]);
532 // face dofs
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]);
551 // center dof
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]);
555 }
556
566 template<typename EvalData_>
568 EvalData_& data,
569 const DomainPointType& point) const
570 {
571 using namespace Bernstein2::Intern;
572 // vertex dofs
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]);
645
646 // edge dofs
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]);
755
756 // face dofs
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]);
811
812 // center dof
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]);
822 }
823 }; // class Evaluator<...,Hypercube<3>>
824 } // namespace Bernstein2
825 } // namespace Space
826} // namespace FEAT
void eval_ref_gradients(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function gradients on the reference cell.
Definition: evaluator.hpp:128
void eval_ref_hessians(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function hessians on the reference cell.
Definition: evaluator.hpp:147
void eval_ref_values(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function values on the reference cell.
Definition: evaluator.hpp:109
ParametricEvaluator< Evaluator, TrafoEvaluator_, SpaceEvalTraits_, ref_caps > BaseClass
base-class typedef
Definition: evaluator.hpp:60
void eval_ref_values(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function values on the reference cell.
Definition: evaluator.hpp:228
void eval_ref_gradients(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function gradients on the reference cell.
Definition: evaluator.hpp:258
ParametricEvaluator< Evaluator, TrafoEvaluator_, SpaceEvalTraits_, ref_caps > BaseClass
base-class typedef
Definition: evaluator.hpp:179
void eval_ref_hessians(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function hessians on the reference cell.
Definition: evaluator.hpp:297
ParametricEvaluator< Evaluator, TrafoEvaluator_, SpaceEvalTraits_, ref_caps > BaseClass
base-class typedef
Definition: evaluator.hpp:367
void eval_ref_hessians(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function hessians on the reference cell.
Definition: evaluator.hpp:567
void eval_ref_gradients(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function gradients on the reference cell.
Definition: evaluator.hpp:465
void eval_ref_values(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function values on the reference cell.
Definition: evaluator.hpp:416
Bernstein-2 Element Evaluator class template declaration.
Definition: evaluator.hpp:36
Finite-Element Parametric Evaluator CRTP base-class template.
static constexpr SpaceTags ref_caps
Bernstein-2 Element Evaluator reference capabilities.
Definition: evaluator.hpp:24
FEAT namespace.
Definition: adjactor.hpp:12
SpaceTags
Space configuration tags enum.
Definition: eval_tags.hpp:97
@ 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