3 #ifndef DUNE_REFINED_P1_LOCALBASIS_HH
4 #define DUNE_REFINED_P1_LOCALBASIS_HH
10 #include <dune/common/fmatrix.hh>
16 template<
class D,
class R,
int dim>
23 DUNE_THROW(Dune::NotImplemented,
"RefinedP1LocalBasis not implemented for dim > 3.");
50 template<
class D,
class R>
60 unsigned int size ()
const
67 std::vector<typename Traits::RangeType>& out)
const
73 this->getSubElement(in, subElement, local);
78 out[0] = 1 - local[0];
86 out[1] = 1 - local[0];
97 std::vector<typename Traits::JacobianType>& out)
const
103 this->getSubElement(in, subElement, local);
105 switch (subElement) {
127 unsigned int order ()
const
158 template<
class D,
class R>
168 unsigned int size ()
const
175 std::vector<typename Traits::RangeType>& out)
const
181 this->getSubElement(in, subElement, local);
183 switch (subElement) {
186 out[0] = 1 - local[0] - local[1];
197 out[1] = 1 - local[0] - local[1];
209 out[3] = 1 - local[0] - local[1];
219 out[4] = 1 - local[0] - local[1];
228 std::vector<typename Traits::JacobianType>& out)
const
234 this->getSubElement(in, subElement, local);
236 switch (subElement) {
239 out[0][0][0] = -2; out[0][0][1] = -2;
240 out[1][0][0] = 2; out[1][0][1] = 0;
241 out[2][0][0] = 0; out[2][0][1] = 0;
242 out[3][0][0] = 0; out[3][0][1] = 2;
243 out[4][0][0] = 0; out[4][0][1] = 0;
244 out[5][0][0] = 0; out[5][0][1] = 0;
249 out[0][0][0] = 0; out[0][0][1] = 0;
250 out[1][0][0] = -2; out[1][0][1] = -2;
251 out[2][0][0] = 2; out[2][0][1] = 0;
252 out[3][0][0] = 0; out[3][0][1] = 0;
253 out[4][0][0] = 0; out[4][0][1] = 2;
254 out[5][0][0] = 0; out[5][0][1] = 0;
259 out[0][0][0] = 0; out[0][0][1] = 0;
260 out[1][0][0] = 0; out[1][0][1] = 0;
261 out[2][0][0] = 0; out[2][0][1] = 0;
262 out[3][0][0] = -2; out[3][0][1] = -2;
263 out[4][0][0] = 2; out[4][0][1] = 0;
264 out[5][0][0] = 0; out[5][0][1] = 2;
268 out[0][0][0] = 0; out[0][0][1] = 0;
269 out[1][0][0] = 0; out[1][0][1] = -2;
270 out[2][0][0] = 0; out[2][0][1] = 0;
271 out[3][0][0] = -2; out[3][0][1] = 0;
272 out[4][0][0] = 2; out[4][0][1] = 2;
273 out[5][0][0] = 0; out[5][0][1] = 0;
281 unsigned int order ()
const
316 template<
class D,
class R>
326 unsigned int size ()
const
333 std::vector<typename Traits::RangeType>& out)
const
339 this->getSubElement(in, subElement, local);
341 switch (subElement) {
344 out[0] = 1 - local[0] - local[1] - local[2];
359 out[1] = 1 - local[0] - local[1] -local[2];
375 out[3] = 1 - local[0] - local[1] -local[2];
392 out[6] = 1 - local[0] - local[1] -local[2];
401 out[1] = 1 - local[0] - local[1] -local[2];
418 out[4] = 1 - local[0] - local[1] -local[2];
431 out[3] = 1 - local[0] - local[1] -local[2];
445 out[3] = 1 - local[0] - local[1] -local[2];
460 std::vector<typename Traits::JacobianType>& out)
const
466 this->getSubElement(in, subElement, local);
468 switch (subElement) {
471 out[0][0][0] = -2; out[0][0][1] = -2; out[0][0][2] = -2;
472 out[1][0][0] = 2; out[1][0][1] = 0; out[1][0][2] = 0;
473 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
474 out[3][0][0] = 0; out[3][0][1] = 2; out[3][0][2] = 0;
475 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
476 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
477 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 2;
478 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 0;
479 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
480 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
485 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
486 out[1][0][0] = -2; out[1][0][1] = -2; out[1][0][2] = -2;
487 out[2][0][0] = 2; out[2][0][1] = 0; out[2][0][2] = 0;
488 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0;
489 out[4][0][0] = 0; out[4][0][1] = 2; out[4][0][2] = 0;
490 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
491 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
492 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 2;
493 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
494 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
499 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
500 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
501 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
502 out[3][0][0] = -2; out[3][0][1] = -2; out[3][0][2] = -2;
503 out[4][0][0] = 2; out[4][0][1] = 0; out[4][0][2] = 0;
504 out[5][0][0] = 0; out[5][0][1] = 2; out[5][0][2] = 0;
505 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
506 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 0;
507 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 2;
508 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
513 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
514 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
515 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
516 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0;
517 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
518 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
519 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = -2;
520 out[7][0][0] = 2; out[7][0][1] = 0; out[7][0][2] = 0;
521 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 0;
522 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 2;
527 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
528 out[1][0][0] = 0; out[1][0][1] = -2; out[1][0][2] = -2;
529 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
530 out[3][0][0] = 0; out[3][0][1] = 2; out[3][0][2] = 0;
531 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
532 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
533 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = 0;
534 out[7][0][0] = 2; out[7][0][1] = 2; out[7][0][2] = 2;
535 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
536 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
541 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
542 out[1][0][0] = 0; out[1][0][1] = -2; out[1][0][2] = -2;
543 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
544 out[3][0][0] = -2; out[3][0][1] = 0; out[3][0][2] = 0;
545 out[4][0][0] = 2; out[4][0][1] = 2; out[4][0][2] = 0;
546 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
547 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
548 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 2;
549 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
550 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
555 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
556 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
557 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
558 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = -2;
559 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
560 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
561 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = 0;
562 out[7][0][0] = 2; out[7][0][1] = 0; out[7][0][2] = 0;
563 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 2;
564 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
569 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
570 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
571 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
572 out[3][0][0] = -2; out[3][0][1] = -2; out[3][0][2] = -2;
573 out[4][0][0] = 2; out[4][0][1] = 2; out[4][0][2] = 0;
574 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
575 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
576 out[7][0][0] = 0; out[7][0][1] = -2; out[7][0][2] = 0;
577 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 2;
578 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
587 unsigned int order ()
const