dune-grid  2.3.1
vertexorderfactory.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_GRID_UTILITY_VERTEXORDERFACTORY_HH
5 #define DUNE_GRID_UTILITY_VERTEXORDERFACTORY_HH
6 
7 #include <algorithm>
8 #include <cstddef>
9 #include <functional>
10 #include <vector>
11 
12 #include <dune/geometry/referenceelements.hh>
13 #include <dune/geometry/generalvertexorder.hh>
14 
15 namespace Dune {
16 
18 
29  template<class IdSet, class Index = std::size_t>
31  const IdSet& idset;
32 
33  public:
35  template<std::size_t dim>
36  struct VertexOrder {
38  typedef GeneralVertexOrder<dim, Index> type;
39  };
40 
42 
51  VertexOrderByIdFactory(const IdSet &idset_) : idset(idset_) { }
52 
54 
60  template<typename Element>
61  typename VertexOrder<Element::mydimension>::type
62  make(const Element &e) const {
63  typedef ReferenceElements<
64  typename Element::ctype,
65  Element::mydimension
66  > RefElems;
67  std::size_t size =
68  RefElems::general(e.type()).size(Element::mydimension);
69 
70  std::vector<typename IdSet::IdType> ids(size);
71  for(std::size_t i = 0; i < size; ++i)
72  ids[i] = idset.subId(e, i, Element::mydimension);
73  return GeneralVertexOrder<Element::mydimension, Index>
74  (e.type(), ids.begin(), ids.end());
75  }
76  };
77 
78 } // namespace Dune
79 
80 #endif // DUNE_GRID_UTILITY_VERTEXORDERFACTORY_HH
VertexOrder< Element::mydimension >::type make(const Element &e) const
construct a vertex ordering object
Definition: vertexorderfactory.hh:62
IdType subId(const typename remove_const< GridImp >::type::Traits::template Codim< 0 >::Entity &e, int i, unsigned int codim) const
Get id of subentity i of co-dimension codim of a co-dimension 0 entity.
Definition: indexidset.hh:430
Factory for GeneralVertexOrder objects using an IdSet.
Definition: vertexorderfactory.hh:30
VertexOrderByIdFactory(const IdSet &idset_)
construct a factory object
Definition: vertexorderfactory.hh:51
type of vertex order object may depend on the dimension of the element
Definition: vertexorderfactory.hh:36
ALBERTA EL Element
Definition: misc.hh:61
Id Set Interface.
Definition: common/grid.hh:360
GeneralVertexOrder< dim, Index > type
type of vertex order object
Definition: vertexorderfactory.hh:38