dune-pdelab  2.5-dev
dunefunctionsgridfunctionspace.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 #ifndef DUNE_PDELAB_GRIDFUNCTIONSPACE_DUNEFUNCTIONSGRIDFUNCTIONSPACE_HH
4 #define DUNE_PDELAB_GRIDFUNCTIONSPACE_DUNEFUNCTIONSGRIDFUNCTIONSPACE_HH
5 
6 #include <cstddef>
7 #include <map>
8 #include <ostream>
9 #include <set>
10 #include <vector>
11 
12 #include <dune/common/exceptions.hh>
13 #include <dune/common/typetraits.hh>
14 
18 
20 
21 namespace Dune {
22  namespace PDELab {
23 
27 
28  namespace Experimental {
29 
36  template<typename DFBasis, typename V, typename CE>
38  : public TypeTree::LeafNode
40  // , public DataHandleProvider<DuneFunctionsGridFunctionSpace<DFBasis,CE,B,P> >
41  {
42  using GV = typename DFBasis::GridView;
43 
44  template<typename,typename>
45  friend class GridFunctionSpaceBase;
46 
47  public:
49 
50  struct Traits {
51 
52  using GridView = Dune::PDELab::impl::GridView<typename DFBasis::GridView>;
53  using EntitySet = Dune::PDELab::impl::EntitySet<typename DFBasis::GridView>;
54 
55  using size_type = std::size_t;
57  using ConstraintsType = CE;
58 
59  using Basis = DFBasis;
60 
62 
63  struct FEM
64  {
65  struct Traits
66  {
67  using FiniteElement = typename DFBasis::LocalView::Tree::FiniteElement;
69  };
70  };
71 
74 
75  };
76 
77  using Basis = DFBasis;
78 
79  struct Ordering {
80 
81  struct Traits {
82 
83  using DOFIndex = typename DFBasis::MultiIndex;
85  using size_type = std::size_t;
87 
88  };
89 
90  using DOFIndex = typename DFBasis::MultiIndex;
92  using size_type = std::size_t;
93 
96 
98  : _gfs(gfs)
99  {}
100 
101  size_type size() const
102  {
103  return _gfs.basis().size();
104  }
105 
107  {
108  return size() / V::block_type::dimension;
109  }
110 
112  {
113  return _gfs.basis().maxLocalSize();
114  }
115 
117  {
118  return di;
119  }
120 
121  void mapIndex(const DOFIndex& di, ContainerIndex& ci) const
122  {
123  ci = di;
124  }
125 
126  void update()
127  {}
128 
129  private:
130 
131  const GridFunctionSpace& _gfs;
132 
133  };
134 
135 
137  template<typename E>
139  {
140 
142  using Type = std::conditional_t<
143  std::is_same<
144  CE,
146  >::value,
149  >;
150 
151  private:
153  };
154 
155  // ****************************************************************************************************
156  // Construct from a dune-functions basis
157  // ****************************************************************************************************
158 
160  GridFunctionSpace (std::shared_ptr<DFBasis> df_basis, std::shared_ptr<CE> ce)
161  : _es(df_basis->gridView(), Traits::EntitySet::allCodims())
162  , _df_basis(std::move(df_basis))
163  , _pce(std::move(ce))
164  , _ordering(*this)
165  {}
166 
167  GridFunctionSpace (std::shared_ptr<DFBasis> df_basis)
168  : _es(df_basis->gridView(), Traits::EntitySet::allCodims())
169  , _df_basis(std::move(df_basis))
170  , _pce(std::make_shared<CE>())
171  , _ordering(*this)
172  {}
173 
175  const typename Traits::GridView& gridView () const
176  {
177  return _es.gridView();
178  }
179 
181  const typename Traits::EntitySet& entitySet () const
182  {
183  return _es;
184  }
185 
187  const typename Traits::ConstraintsType& constraints () const
188  {
189  return *_pce;
190  }
191 
193  std::shared_ptr<const CE> constraintsStorage () const
194  {
195  return _pce;
196  }
197 
199  const Ordering& ordering() const
200  {
201  return _ordering;
202  }
203 
204  typename Traits::SizeType size() const
205  {
206  return _ordering.size();
207  }
208 
209  typename Traits::SizeType blockCount() const
210  {
211  return _ordering.blockCount();
212  }
213 
214  typename Traits::SizeType globalSize() const
215  {
216  return _ordering.size();
217  }
218 
219  typename Traits::SizeType maxLocalSize () const
220  {
221  return _ordering.maxLocalSize();
222  }
223 
224  const std::string& name() const
225  {
226  return _name;
227  }
228 
229  void name(const std::string& name)
230  {
231  _name = name;
232  }
233 
234  bool isRootSpace() const
235  {
236  return true;
237  }
238 
239  const Basis& basis() const
240  {
241  return *_df_basis;
242  }
243 
244  private:
245 
246  typename Traits::EntitySet _es;
247  std::shared_ptr<DFBasis> _df_basis;
248  std::shared_ptr<CE const> _pce;
249  Ordering _ordering;
250  std::string _name;
251  };
252 
253  } // namespace Experimental
254  } // namespace PDELab
255 } // namespace Dune
256 
257 #endif // DUNE_PDELAB_GRIDFUNCTIONSPACE_DUNEFUNCTIONSGRIDFUNCTIONSPACE_HH
Definition: dunefunctionsgridfunctionspace.hh:81
Definition: dunefunctionsgridfunctionspace.hh:63
Traits::SizeType blockCount() const
Definition: dunefunctionsgridfunctionspace.hh:209
const Traits::EntitySet & entitySet() const
get EntitySet
Definition: dunefunctionsgridfunctionspace.hh:181
Traits::SizeType maxLocalSize() const
Definition: dunefunctionsgridfunctionspace.hh:219
Definition: dunefunctionsgridfunctionspace.hh:79
FiniteElement FiniteElementType
Definition: dunefunctionsgridfunctionspace.hh:68
std::shared_ptr< const CE > constraintsStorage() const
return storage of constraints engine
Definition: dunefunctionsgridfunctionspace.hh:193
const Traits::GridView & gridView() const
get grid view
Definition: dunefunctionsgridfunctionspace.hh:175
ContainerIndex mapIndex(const DOFIndex &di) const
Definition: dunefunctionsgridfunctionspace.hh:116
typename DFBasis::MultiIndex DOFIndex
Definition: dunefunctionsgridfunctionspace.hh:83
typename DFBasis::LocalView::Tree::FiniteElement FiniteElement
Definition: dunefunctionsgridfunctionspace.hh:67
extract type for storing constraints
Definition: dunefunctionsgridfunctionspace.hh:138
Traits::SizeType size() const
Definition: dunefunctionsgridfunctionspace.hh:204
const Basis & basis() const
Definition: dunefunctionsgridfunctionspace.hh:239
std::conditional_t< std::is_same< CE, NoConstraints >::value, EmptyTransformation, ConstraintsTransformation< typename Ordering::Traits::DOFIndex, typename Ordering::Traits::ContainerIndex, E > > Type
define Type as the Type of a container of E&#39;s
Definition: dunefunctionsgridfunctionspace.hh:149
size_type SizeType
Definition: dunefunctionsgridfunctionspace.hh:56
size_type size() const
Definition: dunefunctionsgridfunctionspace.hh:101
std::size_t size_type
Definition: dunefunctionsgridfunctionspace.hh:55
void update()
Definition: dunefunctionsgridfunctionspace.hh:126
Dune::PDELab::impl::EntitySet< typename DFBasis::GridView > EntitySet
Definition: dunefunctionsgridfunctionspace.hh:53
size_type maxLocalSize() const
Definition: dunefunctionsgridfunctionspace.hh:111
DOFIndex ContainerIndex
Definition: dunefunctionsgridfunctionspace.hh:84
Definition: constraintstransformation.hh:111
void mapIndex(const DOFIndex &di, ContainerIndex &ci) const
Definition: dunefunctionsgridfunctionspace.hh:121
For backward compatibility – Do not use this!
Definition: adaptivity.hh:27
Dune::PDELab::impl::GridView< typename DFBasis::GridView > GridView
Definition: dunefunctionsgridfunctionspace.hh:52
std::size_t size_type
Definition: dunefunctionsgridfunctionspace.hh:85
typename DFBasis::MultiIndex DOFIndex
Definition: dunefunctionsgridfunctionspace.hh:90
DFBasis Basis
Definition: dunefunctionsgridfunctionspace.hh:59
Definition: gridfunctionspacebase.hh:134
Ordering(const GridFunctionSpace &gfs)
Definition: dunefunctionsgridfunctionspace.hh:97
size_type SizeType
Definition: dunefunctionsgridfunctionspace.hh:86
DFBasis Basis
Definition: dunefunctionsgridfunctionspace.hh:77
DOFIndex ContainerIndex
Definition: dunefunctionsgridfunctionspace.hh:91
export Traits class
Definition: dunefunctionsgridfunctionspace.hh:50
size_type blockCount() const
Definition: dunefunctionsgridfunctionspace.hh:106
Definition: dunefunctions.hh:13
STL namespace.
GridFunctionSpace(std::shared_ptr< DFBasis > df_basis, std::shared_ptr< CE > ce)
constructor
Definition: dunefunctionsgridfunctionspace.hh:160
CE ConstraintsType
Definition: dunefunctionsgridfunctionspace.hh:57
Definition: gridfunctionspace/tags.hh:220
Definition: gridfunctionspace/tags.hh:208
bool isRootSpace() const
Definition: dunefunctionsgridfunctionspace.hh:234
const std::string & name() const
Definition: dunefunctionsgridfunctionspace.hh:224
void name(const std::string &name)
Definition: dunefunctionsgridfunctionspace.hh:229
GridFunctionSpace(std::shared_ptr< DFBasis > df_basis)
Definition: dunefunctionsgridfunctionspace.hh:167
a class holding transformation for constrained spaces
Definition: constraintstransformation.hh:18
std::size_t size_type
Definition: dunefunctionsgridfunctionspace.hh:92
Traits::SizeType globalSize() const
Definition: dunefunctionsgridfunctionspace.hh:214
Mixin base class for specifying output hints to I/O routines like VTK.
Definition: function.hh:124
Definition: noconstraints.hh:16
Definition: dunefunctionsgridfunctionspace.hh:65
const Ordering & ordering() const
Direct access to the DOF ordering.
Definition: dunefunctionsgridfunctionspace.hh:199
A pdelab grid function space implemented by a dune-functions function space basis.
Definition: dunefunctionsgridfunctionspace.hh:37
static const unsigned int value
Definition: gridfunctionspace/tags.hh:139
const Traits::ConstraintsType & constraints() const
return constraints engine
Definition: dunefunctionsgridfunctionspace.hh:187