3#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH
4#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH
13#include <dune/geometry/referenceelements.hh>
15#include <dune/localfunctions/common/localbasis.hh>
16#include <dune/localfunctions/common/localfiniteelementtraits.hh>
17#include <dune/localfunctions/common/localinterpolation.hh>
18#include <dune/localfunctions/common/localkey.hh>
20namespace Dune {
namespace Impl
31 template<
class D,
class R,
unsigned int k>
32 class LagrangePrismLocalBasis
34 static constexpr std::size_t dim = 3;
36 using Traits = LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,FieldMatrix<R,1,dim> >;
40 static constexpr unsigned int size ()
47 std::vector<typename Traits::RangeType>& out)
const
60 out[0] = (1.0-in[0]-in[1])*(1.0-in[2]);
61 out[1] = in[0]*(1-in[2]);
62 out[2] = in[1]*(1-in[2]);
63 out[3] = in[2]*(1.0-in[0]-in[1]);
72 FieldVector<R,k+1> segmentShapeFunction;
73 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]);
74 segmentShapeFunction[1] = in[2] * (4 - 4*in[2]);
75 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]);
77 FieldVector<R, 6> triangleShapeFunction;
78 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]);
79 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]);
80 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]);
81 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]);
82 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]);
83 triangleShapeFunction[5] = 4*in[0]*in[1];
86 out[0] = triangleShapeFunction[0] * segmentShapeFunction[0];
87 out[1] = triangleShapeFunction[1] * segmentShapeFunction[0];
88 out[2] = triangleShapeFunction[2] * segmentShapeFunction[0];
91 out[3] = triangleShapeFunction[0] * segmentShapeFunction[2];
92 out[4] = triangleShapeFunction[1] * segmentShapeFunction[2];
93 out[5] = triangleShapeFunction[2] * segmentShapeFunction[2];
96 out[6] = triangleShapeFunction[0] * segmentShapeFunction[1];
97 out[7] = triangleShapeFunction[1] * segmentShapeFunction[1];
98 out[8] = triangleShapeFunction[2] * segmentShapeFunction[1];
101 out[9] = triangleShapeFunction[3] * segmentShapeFunction[0];
102 out[10] = triangleShapeFunction[4] * segmentShapeFunction[0];
103 out[11] = triangleShapeFunction[5] * segmentShapeFunction[0];
106 out[12] = triangleShapeFunction[3] * segmentShapeFunction[2];
107 out[13] = triangleShapeFunction[4] * segmentShapeFunction[2];
108 out[14] = triangleShapeFunction[5] * segmentShapeFunction[2];
111 out[15] = triangleShapeFunction[3] * segmentShapeFunction[1];
112 out[16] = triangleShapeFunction[4] * segmentShapeFunction[1];
113 out[17] = triangleShapeFunction[5] * segmentShapeFunction[1];
118 DUNE_THROW(NotImplemented,
"LagrangePrismLocalBasis::evaluateFunction for order " << k);
127 std::vector<typename Traits::JacobianType>& out)
const
134 std::fill(out[0][0].begin(), out[0][0].end(), 0);
140 out[0][0] = {in[2]-1, in[2]-1, in[0]+in[1]-1};
141 out[1][0] = {1-in[2], 0, -in[0]};
142 out[2][0] = { 0, 1-in[2], -in[1]};
143 out[3][0] = { -in[2], -in[2], 1-in[0]-in[1]};
144 out[4][0] = { in[2], 0, in[0]};
145 out[5][0] = { 0, in[2], in[1]};
153 FieldVector<R, 6> triangleShapeFunction;
154 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]);
155 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]);
156 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]);
157 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]);
158 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]);
159 triangleShapeFunction[5] = 4*in[0]*in[1];
161 std::array<std::array<R,2>,6> triangleShapeFunctionDer;
162 triangleShapeFunctionDer[0] = {-3 + 4*(in[0] + in[1]), -3 + 4*(in[0] + in[1])};
163 triangleShapeFunctionDer[1] = { -1 + 4*in[0], 0};
164 triangleShapeFunctionDer[2] = { 0, -1 + 4*in[1]};
165 triangleShapeFunctionDer[3] = { 4 - 8*in[0] - 4*in[1], -4*in[0]};
166 triangleShapeFunctionDer[4] = { -4*in[1], 4 - 4*in[0] - 8*in[1]};
167 triangleShapeFunctionDer[5] = { 4*in[1], 4*in[0]};
170 FieldVector<R,k+1> segmentShapeFunction;
171 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]);
172 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]);
173 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]);
175 FieldVector<R,k+1> segmentShapeFunctionDer;
176 segmentShapeFunctionDer[0] = -3 + 4*in[2];
177 segmentShapeFunctionDer[1] = 4 - 8*in[2];
178 segmentShapeFunctionDer[2] = -1 + 4*in[2];
181 out[0][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[0];
182 out[0][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[0];
183 out[0][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[0];
185 out[1][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[0];
186 out[1][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[0];
187 out[1][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[0];
189 out[2][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[0];
190 out[2][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[0];
191 out[2][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[0];
194 out[3][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[2];
195 out[3][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[2];
196 out[3][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[2];
198 out[4][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[2];
199 out[4][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[2];
200 out[4][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[2];
202 out[5][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[2];
203 out[5][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[2];
204 out[5][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[2];
207 out[6][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[1];
208 out[6][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[1];
209 out[6][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[1];
211 out[7][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[1];
212 out[7][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[1];
213 out[7][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[1];
215 out[8][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[1];
216 out[8][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[1];
217 out[8][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[1];
220 out[9][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[0];
221 out[9][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[0];
222 out[9][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[0];
224 out[10][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[0];
225 out[10][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[0];
226 out[10][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[0];
228 out[11][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[0];
229 out[11][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[0];
230 out[11][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[0];
233 out[12][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[2];
234 out[12][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[2];
235 out[12][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[2];
237 out[13][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[2];
238 out[13][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[2];
239 out[13][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[2];
241 out[14][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[2];
242 out[14][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[2];
243 out[14][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[2];
246 out[15][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[1];
247 out[15][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[1];
248 out[15][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[1];
250 out[16][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[1];
251 out[16][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[1];
252 out[16][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[1];
254 out[17][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[1];
255 out[17][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[1];
256 out[17][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[1];
261 DUNE_THROW(NotImplemented,
"LagrangePrismLocalBasis::evaluateJacobian for order " << k);
270 void partial(
const std::array<unsigned int,dim>& order,
272 std::vector<typename Traits::RangeType>& out)
const
280 evaluateFunction(in, out);
296 auto direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
316 out[0] = in[0]+in[1]-1;
319 out[3] = 1-in[0]-in[1];
324 DUNE_THROW(RangeError,
"Component out of range.");
326 }
else if (totalOrder == 2) {
328 if (order[0] == 1 && order[2] == 1) {
335 }
else if (order[1] == 1 && order[2] == 1) {
343 for (std::size_t i = 0; i < size(); ++i)
348 std::fill(out.begin(), out.end(), 0.0);
359 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
364 FieldVector<R,6> triangleShapeFunctionDerX;
365 triangleShapeFunctionDerX[0] = -3 + 4*(in[0] + in[1]);
366 triangleShapeFunctionDerX[1] = -1 + 4* in[0];
367 triangleShapeFunctionDerX[2] = 0;
368 triangleShapeFunctionDerX[3] = 4 - 8* in[0] - 4*in[1];
369 triangleShapeFunctionDerX[4] = -4*in[1];
370 triangleShapeFunctionDerX[5] = 4*in[1];
372 FieldVector<R,k+1> segmentShapeFunction;
373 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]);
374 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]);
375 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]);
377 out[0] = triangleShapeFunctionDerX[0] * segmentShapeFunction[0];
378 out[1] = triangleShapeFunctionDerX[1] * segmentShapeFunction[0];
379 out[2] = triangleShapeFunctionDerX[2] * segmentShapeFunction[0];
380 out[3] = triangleShapeFunctionDerX[0] * segmentShapeFunction[2];
381 out[4] = triangleShapeFunctionDerX[1] * segmentShapeFunction[2];
382 out[5] = triangleShapeFunctionDerX[2] * segmentShapeFunction[2];
383 out[6] = triangleShapeFunctionDerX[0] * segmentShapeFunction[1];
384 out[7] = triangleShapeFunctionDerX[1] * segmentShapeFunction[1];
385 out[8] = triangleShapeFunctionDerX[2] * segmentShapeFunction[1];
386 out[9] = triangleShapeFunctionDerX[3] * segmentShapeFunction[0];
387 out[10] = triangleShapeFunctionDerX[4] * segmentShapeFunction[0];
388 out[11] = triangleShapeFunctionDerX[5] * segmentShapeFunction[0];
389 out[12] = triangleShapeFunctionDerX[3] * segmentShapeFunction[2];
390 out[13] = triangleShapeFunctionDerX[4] * segmentShapeFunction[2];
391 out[14] = triangleShapeFunctionDerX[5] * segmentShapeFunction[2];
392 out[15] = triangleShapeFunctionDerX[3] * segmentShapeFunction[1];
393 out[16] = triangleShapeFunctionDerX[4] * segmentShapeFunction[1];
394 out[17] = triangleShapeFunctionDerX[5] * segmentShapeFunction[1];
399 FieldVector<R,6> triangleShapeFunctionDerY;
400 triangleShapeFunctionDerY[0] = -3 + 4*(in[0] + in[1]);
401 triangleShapeFunctionDerY[1] = 0;
402 triangleShapeFunctionDerY[2] = -1 + 4* in[1];
403 triangleShapeFunctionDerY[3] = -4* in[0];
404 triangleShapeFunctionDerY[4] = 4 - 4* in[0] - 8*in[1];
405 triangleShapeFunctionDerY[5] = 4* in[0];
407 FieldVector<R,k+1> segmentShapeFunction;
408 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]);
409 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]);
410 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]);
412 out[0] = triangleShapeFunctionDerY[0] * segmentShapeFunction[0];
413 out[1] = triangleShapeFunctionDerY[1] * segmentShapeFunction[0];
414 out[2] = triangleShapeFunctionDerY[2] * segmentShapeFunction[0];
415 out[3] = triangleShapeFunctionDerY[0] * segmentShapeFunction[2];
416 out[4] = triangleShapeFunctionDerY[1] * segmentShapeFunction[2];
417 out[5] = triangleShapeFunctionDerY[2] * segmentShapeFunction[2];
418 out[6] = triangleShapeFunctionDerY[0] * segmentShapeFunction[1];
419 out[7] = triangleShapeFunctionDerY[1] * segmentShapeFunction[1];
420 out[8] = triangleShapeFunctionDerY[2] * segmentShapeFunction[1];
421 out[9] = triangleShapeFunctionDerY[3] * segmentShapeFunction[0];
422 out[10] = triangleShapeFunctionDerY[4] * segmentShapeFunction[0];
423 out[11] = triangleShapeFunctionDerY[5] * segmentShapeFunction[0];
424 out[12] = triangleShapeFunctionDerY[3] * segmentShapeFunction[2];
425 out[13] = triangleShapeFunctionDerY[4] * segmentShapeFunction[2];
426 out[14] = triangleShapeFunctionDerY[5] * segmentShapeFunction[2];
427 out[15] = triangleShapeFunctionDerY[3] * segmentShapeFunction[1];
428 out[16] = triangleShapeFunctionDerY[4] * segmentShapeFunction[1];
429 out[17] = triangleShapeFunctionDerY[5] * segmentShapeFunction[1];
434 FieldVector<R, 6> triangleShapeFunction;
435 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]);
436 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]);
437 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]);
438 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]);
439 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]);
440 triangleShapeFunction[5] = 4*in[0]*in[1];
442 FieldVector<R,k+1> segmentShapeFunctionDer;
443 segmentShapeFunctionDer[0] = -3 + 4*in[2];
444 segmentShapeFunctionDer[1] = 4 - 8*in[2];
445 segmentShapeFunctionDer[2] = -1 + 4*in[2];
447 out[0] = triangleShapeFunction[0] * segmentShapeFunctionDer[0];
448 out[1] = triangleShapeFunction[1] * segmentShapeFunctionDer[0];
449 out[2] = triangleShapeFunction[2] * segmentShapeFunctionDer[0];
450 out[3] = triangleShapeFunction[0] * segmentShapeFunctionDer[2];
451 out[4] = triangleShapeFunction[1] * segmentShapeFunctionDer[2];
452 out[5] = triangleShapeFunction[2] * segmentShapeFunctionDer[2];
453 out[6] = triangleShapeFunction[0] * segmentShapeFunctionDer[1];
454 out[7] = triangleShapeFunction[1] * segmentShapeFunctionDer[1];
455 out[8] = triangleShapeFunction[2] * segmentShapeFunctionDer[1];
456 out[9] = triangleShapeFunction[3] * segmentShapeFunctionDer[0];
457 out[10] = triangleShapeFunction[4] * segmentShapeFunctionDer[0];
458 out[11] = triangleShapeFunction[5] * segmentShapeFunctionDer[0];
459 out[12] = triangleShapeFunction[3] * segmentShapeFunctionDer[2];
460 out[13] = triangleShapeFunction[4] * segmentShapeFunctionDer[2];
461 out[14] = triangleShapeFunction[5] * segmentShapeFunctionDer[2];
462 out[15] = triangleShapeFunction[3] * segmentShapeFunctionDer[1];
463 out[16] = triangleShapeFunction[4] * segmentShapeFunctionDer[1];
464 out[17] = triangleShapeFunction[5] * segmentShapeFunctionDer[1];
468 DUNE_THROW(RangeError,
"Component out of range.");
471 DUNE_THROW(NotImplemented,
"Desired derivative order is not implemented");
477 DUNE_THROW(NotImplemented,
"LagrangePrismLocalBasis::partial not implemented for order " << k);
481 static constexpr unsigned int order ()
491 template<
unsigned int k>
492 class LagrangePrismLocalCoefficients
496 LagrangePrismLocalCoefficients ()
501 localKeys_[0] = LocalKey(0,0,0);
507 for (std::size_t i=0; i<size(); i++)
508 localKeys_[i] = LocalKey(i,3,0);
515 localKeys_[0] = LocalKey(0,3,0);
516 localKeys_[1] = LocalKey(1,3,0);
517 localKeys_[2] = LocalKey(2,3,0);
518 localKeys_[3] = LocalKey(3,3,0);
519 localKeys_[4] = LocalKey(4,3,0);
520 localKeys_[5] = LocalKey(5,3,0);
523 localKeys_[6] = LocalKey(0,2,0);
524 localKeys_[7] = LocalKey(1,2,0);
525 localKeys_[8] = LocalKey(2,2,0);
526 localKeys_[9] = LocalKey(3,2,0);
527 localKeys_[10] = LocalKey(4,2,0);
528 localKeys_[11] = LocalKey(5,2,0);
529 localKeys_[12] = LocalKey(6,2,0);
530 localKeys_[13] = LocalKey(7,2,0);
531 localKeys_[14] = LocalKey(8,2,0);
534 localKeys_[15] = LocalKey(0,1,0);
535 localKeys_[16] = LocalKey(1,1,0);
536 localKeys_[17] = LocalKey(2,1,0);
542 DUNE_THROW(NotImplemented,
"LagrangePrismLocalCoefficients not implemented for order " << k);
547 static constexpr std::size_t size ()
553 const LocalKey& localKey (std::size_t i)
const
555 return localKeys_[i];
559 std::vector<LocalKey> localKeys_;
566 template<
class LocalBasis>
567 class LagrangePrismLocalInterpolation
578 template<
typename F,
typename C>
579 void interpolate (
const F& ff, std::vector<C>& out)
const
581 constexpr auto dim = LocalBasis::Traits::dimDomain;
582 constexpr auto k = LocalBasis::order();
583 using D =
typename LocalBasis::Traits::DomainType;
584 using DF =
typename LocalBasis::Traits::DomainFieldType;
586 auto&& f = Impl::makeFunctionWithCallOperator<D>(ff);
588 out.resize(LocalBasis::size());
601 for (
unsigned int i=0; i<LocalBasis::size(); i++)
611 out[0] = f( D( {0.0, 0.0, 0.0} ) );
612 out[1] = f( D( {1.0, 0.0, 0.0} ) );
613 out[2] = f( D( {0.0, 1.0, 0.0} ) );
614 out[3] = f( D( {0.0, 0.0, 1.0} ) );
615 out[4] = f( D( {1.0, 0.0, 1.0} ) );
616 out[5] = f( D( {0.0, 1.0, 1.0} ) );
617 out[6] = f( D( {0.0, 0.0, 0.5} ) );
618 out[7] = f( D( {1.0, 0.0, 0.5} ) );
619 out[8] = f( D( {0.0, 1.0, 0.5} ) );
620 out[9] = f( D( {0.5, 0.0, 0.0} ) );
621 out[10] = f( D( {0.0, 0.5, 0.0} ) );
622 out[11] = f( D( {0.5, 0.5, 0.0} ) );
623 out[12] = f( D( {0.5, 0.0, 1.0} ) );
624 out[13] = f( D( {0.0, 0.5, 1.0} ) );
625 out[14] = f( D( {0.5, 0.5, 1.0} ) );
626 out[15] = f( D( {0.5, 0.0, 0.5} ) );
627 out[16] = f( D( {0.0, 0.5, 0.5} ) );
628 out[17] = f( D( {0.5, 0.5, 0.5} ) );
633 DUNE_THROW(NotImplemented,
"LagrangePrismLocalInterpolation not implemented for order " << k);
648 template<
class D,
class R,
int k>
655 Impl::LagrangePrismLocalCoefficients<k>,
656 Impl::LagrangePrismLocalInterpolation<Impl::LagrangePrismLocalBasis<D,R,k> > >;
676 return coefficients_;
683 return interpolation_;
687 static constexpr std::size_t
size ()
700 Impl::LagrangePrismLocalBasis<D,R,k> basis_;
701 Impl::LagrangePrismLocalCoefficients<k> coefficients_;
702 Impl::LagrangePrismLocalInterpolation<Impl::LagrangePrismLocalBasis<D,R,k> > interpolation_;
Unique label for each type of entities that can occur in DUNE grids.
Definition: type.hh:123
Lagrange finite element for 3d prisms with arbitrary compile-time polynomial order.
Definition: lagrangeprism.hh:650
static constexpr std::size_t size()
The number of shape functions.
Definition: lagrangeprism.hh:687
const Traits::LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition: lagrangeprism.hh:681
static constexpr GeometryType type()
The reference element that the local finite element is defined on.
Definition: lagrangeprism.hh:694
const Traits::LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition: lagrangeprism.hh:674
LagrangePrismLocalFiniteElement()
Default constructor.
Definition: lagrangeprism.hh:663
const Traits::LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition: lagrangeprism.hh:667
Implements a matrix constructed from a given type representing a field and compile-time given number ...
Implements a vector constructed from a given type representing a field and a compile-time given size.
#define DUNE_THROW(E, m)
Definition: exceptions.hh:216
constexpr GeometryType prism
GeometryType representing a 3D prism.
Definition: type.hh:540
constexpr GeometryType vertex
GeometryType representing a vertex.
Definition: type.hh:504
constexpr T accumulate(Range &&range, T value, F &&f)
Accumulate values.
Definition: hybridutilities.hh:289
Some useful basic math stuff.
Dune namespace.
Definition: alignedallocator.hh:11
static constexpr T binomial(const T &n, const T &k) noexcept
calculate the binomial coefficient n over k as a constexpr
Definition: math.hh:128
static const ReferenceElement & general(const GeometryType &type)
get general reference elements
Definition: referenceelements.hh:196
D DomainType
domain type
Definition: localbasis.hh:43
traits helper struct
Definition: localfiniteelementtraits.hh:11
LB LocalBasisType
Definition: localfiniteelementtraits.hh:14
LC LocalCoefficientsType
Definition: localfiniteelementtraits.hh:18
LI LocalInterpolationType
Definition: localfiniteelementtraits.hh:22