dune-composites (2.5.1)

serendipityfem.hh
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=4 sw=2 sts=2:
3
4#ifndef DUNE_PDELAB_FINITEELEMENTMAP_SERENDIPITYFEM_HH
5#define DUNE_PDELAB_FINITEELEMENTMAP_SERENDIPITYFEM_HH
6
7#include <cstddef>
8
9#include "serendipity.hh"
10#include <dune/pdelab/finiteelementmap/finiteelementmap.hh>
11
12namespace Dune {
13 namespace PDELab {
14
17 template<typename GV, typename D, typename R, std::size_t k>
19 : public SimpleLocalFiniteElementMap< Dune::SerendipityLocalFiniteElement<D,R,GV::dimension,k> >
20 {
21
22 public:
23
25 {}
26
27 bool fixedSize() const
28 {
29 return true;
30 }
31
32 bool hasDOFs(int codim) const
33 {
34 switch(k)
35 {
36 case 1:
37 return codim == GV::dimension; //only nodal degrees of freedom
38 case 2:
39 if (GV::dimension != 2 && GV::dimension != 3){
40 DUNE_THROW(NotImplemented,"SerendipityLocalFiniteElementMap with k = 2 is only implemented for d = 2,3");
41 }
42 else{
43 if(codim == GV::dimension || codim == (GV::dimension-1)){ //nodes and edges
44 return true;
45 }
46 return false;
47 }
48
49 default:
50 DUNE_THROW(NotImplemented,"SerendipityLocalFiniteElementMap is only implemented for k <= 2");
51 }
52 }
53
54 std::size_t size(GeometryType gt) const
55 {
56 switch (k)
57 {
58 case 1:
59 return gt.isVertex() ? 1 : 0;
60 case 2:
61 {
62 if (GV::dimension != 2 && GV::dimension != 3)
63 DUNE_THROW(NotImplemented,"SerendipityLocalFiniteElementMap with k = 2 is only implemented for d = 2,3");
64 // Q2 simply attaches a single DOF to each node and edge
65 return (gt.isVertex() || gt.isLine() ) ? 1 : 0;
66 }
67 default:
68 DUNE_THROW(NotImplemented,"SerendipityLocalFiniteElementMap is only implemented for k <= 2");
69 }
70 }
71
72 std::size_t maxLocalSize() const
73 {
74 const auto d = GV::dimension;
75 if(d == 1){
76 return k+1;
77 }
78 if(d == 2){
79 return 2*(k+1)+2*(k-1);
80 }
81 if(d == 3){
82 return 4*(k+1)+8*(k-1);
83 }
84 }
85
86 };
87
88 }
89}
90
91#endif // DUNE_PDELAB_FINITEELEMENTMAP_SERENDIPITYFEM_HH
Definition: serendipityfem.hh:20
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Sep 3, 22:42, 2025)