dune-localfunctions  2.3.1
monom.hh
Go to the documentation of this file.
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_MONOMLOCALFINITEELEMENT_HH
5 #define DUNE_MONOMLOCALFINITEELEMENT_HH
6 
7 #include <cassert>
8 #include <cstddef>
9 #include <cstdlib>
10 #include <vector>
11 
12 #include <dune/common/shared_ptr.hh>
13 #include <dune/common/static_assert.hh>
14 
15 #include <dune/geometry/type.hh>
16 
19 #include "monom/monomlocalbasis.hh"
22 
23 namespace Dune
24 {
25 
37  template<class D, class R, int d, int p, int diffOrder = p>
39  {
40  enum { static_size = MonomImp::Size<d,p>::val };
41 
42  public:
49  > Traits;
50 
52  MonomLocalFiniteElement (const GeometryType &gt_)
53  : basis(), interpolation(gt_, basis), gt(gt_)
54  {}
55 
58  const typename Traits::LocalBasisType& localBasis () const
59  {
60  return basis;
61  }
62 
66  {
67  return coefficients;
68  }
69 
73  {
74  return interpolation;
75  }
76 
79  GeometryType type () const
80  {
81  return gt;
82  }
83 
84  private:
88  GeometryType gt;
89  };
90 
92 
104  template<class Geometry, class RF, std::size_t p>
106  typedef typename Geometry::ctype DF;
107  static const std::size_t dim = Geometry::mydimension;
108 
110 
111  std::vector<shared_ptr<const LocalFE> > localFEs;
112 
113  void init(const GeometryType &gt) {
114  std::size_t index = gt.id() >> 1;
115  if(localFEs.size() <= index)
116  localFEs.resize(index+1);
117  localFEs[index].reset(new LocalFE(gt));
118  }
119 
120  public:
123 
125 
129  template<class ForwardIterator>
130  MonomFiniteElementFactory(const ForwardIterator &begin,
131  const ForwardIterator &end)
132  {
133  for(ForwardIterator it = begin; it != end; ++it)
134  init(*it);
135  }
136 
138 
141  MonomFiniteElementFactory(const GeometryType &gt)
142  { init(gt); }
143 
145 
149  dune_static_assert(dim <= 3, "MonomFiniteElementFactory knows the "
150  "available geometry types only up to dimension 3");
151 
152  GeometryType gt;
153  switch(dim) {
154  case 0 :
155  gt.makeVertex(); init(gt);
156  break;
157  case 1 :
158  gt.makeLine(); init(gt);
159  break;
160  case 2 :
161  gt.makeTriangle(); init(gt);
162  gt.makeQuadrilateral(); init(gt);
163  break;
164  case 3 :
165  gt.makeTetrahedron(); init(gt);
166  gt.makePyramid(); init(gt);
167  gt.makePrism(); init(gt);
168  gt.makeHexahedron(); init(gt);
169  break;
170  default :
171  // this should never happen -- it should be caught by the static
172  // assert above.
173  std::abort();
174  };
175  }
176 
178 
188  const FiniteElement make(const Geometry& geometry) {
189  std::size_t index = geometry.type().id() >> 1;
190  assert(localFEs.size() > index && localFEs[index]);
191  return FiniteElement(*localFEs[index], geometry);
192  }
193  };
194 }
195 
196 #endif // DUNE_MONOMLOCALFINITEELEMENT_HH
GeometryType type() const
Definition: monom.hh:79
traits helper struct
Definition: localfiniteelementtraits.hh:10
Factory for global-valued MonomFiniteElement objects.
Definition: monom.hh:105
ImplementationDefined FiniteElement
Type of the finite element.
Definition: interface.hh:115
const Traits::LocalCoefficientsType & localCoefficients() const
Definition: monom.hh:65
MonomFiniteElementFactory(const GeometryType &gt)
construct a MonomFiniteElementFactory from a single GeometryType
Definition: monom.hh:141
GeometryType type() const
Definition: localtoglobaladaptors.hh:230
const FiniteElement make(const Geometry &geometry)
construct a global-valued MonomFiniteElement
Definition: monom.hh:188
Constant shape function.
Definition: monomlocalbasis.hh:230
Definition: monomlocalbasis.hh:19
Definition: monomlocalinterpolation.hh:18
ScalarLocalToGlobalFiniteElementAdaptor< LocalFE, Geometry > FiniteElement
Definition: monom.hh:122
LI LocalInterpolationType
Definition: localfiniteelementtraits.hh:22
LC LocalCoefficientsType
Definition: localfiniteelementtraits.hh:18
MonomFiniteElementFactory()
construct a MonomFiniteElementFactory for all applicable GeometryType's
Definition: monom.hh:148
LB LocalBasisType
Definition: localfiniteelementtraits.hh:14
const Traits::LocalBasisType & localBasis() const
Definition: monom.hh:58
Monom basis for discontinuous Galerkin.
Definition: monom.hh:38
MonomLocalFiniteElement(const GeometryType &gt_)
Construct a MonomLocalFiniteElement.
Definition: monom.hh:52
MonomFiniteElementFactory(const ForwardIterator &begin, const ForwardIterator &end)
construct a MonomFiniteElementFactory from a list of GeometryType's
Definition: monom.hh:130
Convert a simple scalar local finite element into a global finite element.
Definition: localtoglobaladaptors.hh:188
LocalFiniteElementTraits< MonomLocalBasis< D, R, d, p, diffOrder >, MonomLocalCoefficients< static_size >, MonomLocalInterpolation< MonomLocalBasis< D, R, d, p, diffOrder >, static_size > > Traits
Definition: monom.hh:49
const Traits::LocalInterpolationType & localInterpolation() const
Definition: monom.hh:72
Layout map for Monom elements.
Definition: monomlocalcoefficients.hh:22