2 #ifndef DUNE_REFINED_P1_LOCALBASIS_HH
3 #define DUNE_REFINED_P1_LOCALBASIS_HH
9 #include <dune/common/fmatrix.hh>
15 template<
class D,
class R,
int dim>
22 DUNE_THROW(Dune::NotImplemented,
"RefinedP1LocalBasis not implemented for dim > 3.");
49 template<
class D,
class R>
59 unsigned int size ()
const
66 std::vector<typename Traits::RangeType>& out)
const
72 this->getSubElement(in, subElement, local);
77 out[0] = 1 - local[0];
85 out[1] = 1 - local[0];
96 std::vector<typename Traits::JacobianType>& out)
const
102 this->getSubElement(in, subElement, local);
104 switch (subElement) {
126 unsigned int order ()
const
157 template<
class D,
class R>
167 unsigned int size ()
const
174 std::vector<typename Traits::RangeType>& out)
const
180 this->getSubElement(in, subElement, local);
182 switch (subElement) {
185 out[0] = 1 - local[0] - local[1];
196 out[1] = 1 - local[0] - local[1];
208 out[3] = 1 - local[0] - local[1];
218 out[4] = 1 - local[0] - local[1];
227 std::vector<typename Traits::JacobianType>& out)
const
233 this->getSubElement(in, subElement, local);
235 switch (subElement) {
238 out[0][0][0] = -2; out[0][0][1] = -2;
239 out[1][0][0] = 2; out[1][0][1] = 0;
240 out[2][0][0] = 0; out[2][0][1] = 0;
241 out[3][0][0] = 0; out[3][0][1] = 2;
242 out[4][0][0] = 0; out[4][0][1] = 0;
243 out[5][0][0] = 0; out[5][0][1] = 0;
248 out[0][0][0] = 0; out[0][0][1] = 0;
249 out[1][0][0] = -2; out[1][0][1] = -2;
250 out[2][0][0] = 2; out[2][0][1] = 0;
251 out[3][0][0] = 0; out[3][0][1] = 0;
252 out[4][0][0] = 0; out[4][0][1] = 2;
253 out[5][0][0] = 0; out[5][0][1] = 0;
258 out[0][0][0] = 0; out[0][0][1] = 0;
259 out[1][0][0] = 0; out[1][0][1] = 0;
260 out[2][0][0] = 0; out[2][0][1] = 0;
261 out[3][0][0] = -2; out[3][0][1] = -2;
262 out[4][0][0] = 2; out[4][0][1] = 0;
263 out[5][0][0] = 0; out[5][0][1] = 2;
267 out[0][0][0] = 0; out[0][0][1] = 0;
268 out[1][0][0] = 0; out[1][0][1] = -2;
269 out[2][0][0] = 0; out[2][0][1] = 0;
270 out[3][0][0] = -2; out[3][0][1] = 0;
271 out[4][0][0] = 2; out[4][0][1] = 2;
272 out[5][0][0] = 0; out[5][0][1] = 0;
280 unsigned int order ()
const
315 template<
class D,
class R>
325 unsigned int size ()
const
332 std::vector<typename Traits::RangeType>& out)
const
338 this->getSubElement(in, subElement, local);
340 switch (subElement) {
343 out[0] = 1 - local[0] - local[1] - local[2];
358 out[1] = 1 - local[0] - local[1] -local[2];
374 out[3] = 1 - local[0] - local[1] -local[2];
391 out[6] = 1 - local[0] - local[1] -local[2];
400 out[1] = 1 - local[0] - local[1] -local[2];
417 out[4] = 1 - local[0] - local[1] -local[2];
430 out[3] = 1 - local[0] - local[1] -local[2];
444 out[3] = 1 - local[0] - local[1] -local[2];
459 std::vector<typename Traits::JacobianType>& out)
const
465 this->getSubElement(in, subElement, local);
467 switch (subElement) {
470 out[0][0][0] = -2; out[0][0][1] = -2; out[0][0][2] = -2;
471 out[1][0][0] = 2; out[1][0][1] = 0; out[1][0][2] = 0;
472 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
473 out[3][0][0] = 0; out[3][0][1] = 2; out[3][0][2] = 0;
474 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
475 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
476 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 2;
477 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 0;
478 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
479 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
484 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
485 out[1][0][0] = -2; out[1][0][1] = -2; out[1][0][2] = -2;
486 out[2][0][0] = 2; out[2][0][1] = 0; out[2][0][2] = 0;
487 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0;
488 out[4][0][0] = 0; out[4][0][1] = 2; out[4][0][2] = 0;
489 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
490 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
491 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 2;
492 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
493 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
498 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
499 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
500 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
501 out[3][0][0] = -2; out[3][0][1] = -2; out[3][0][2] = -2;
502 out[4][0][0] = 2; out[4][0][1] = 0; out[4][0][2] = 0;
503 out[5][0][0] = 0; out[5][0][1] = 2; out[5][0][2] = 0;
504 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
505 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 0;
506 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 2;
507 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
512 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
513 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
514 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
515 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0;
516 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
517 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
518 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = -2;
519 out[7][0][0] = 2; out[7][0][1] = 0; out[7][0][2] = 0;
520 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 0;
521 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 2;
526 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
527 out[1][0][0] = 0; out[1][0][1] = -2; out[1][0][2] = -2;
528 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
529 out[3][0][0] = 0; out[3][0][1] = 2; out[3][0][2] = 0;
530 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
531 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
532 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = 0;
533 out[7][0][0] = 2; out[7][0][1] = 2; out[7][0][2] = 2;
534 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
535 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
540 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
541 out[1][0][0] = 0; out[1][0][1] = -2; out[1][0][2] = -2;
542 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
543 out[3][0][0] = -2; out[3][0][1] = 0; out[3][0][2] = 0;
544 out[4][0][0] = 2; out[4][0][1] = 2; out[4][0][2] = 0;
545 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
546 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
547 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 2;
548 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
549 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
554 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
555 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
556 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
557 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = -2;
558 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
559 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
560 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = 0;
561 out[7][0][0] = 2; out[7][0][1] = 0; out[7][0][2] = 0;
562 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 2;
563 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
568 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
569 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
570 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
571 out[3][0][0] = -2; out[3][0][1] = -2; out[3][0][2] = -2;
572 out[4][0][0] = 2; out[4][0][1] = 2; out[4][0][2] = 0;
573 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
574 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
575 out[7][0][0] = 0; out[7][0][1] = -2; out[7][0][2] = 0;
576 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 2;
577 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
586 unsigned int order ()
const