3 #ifndef DUNE_PDELAB_GRIDFUNCTIONSPACE_GRIDFUNCTIONSPACE_HH 4 #define DUNE_PDELAB_GRIDFUNCTIONSPACE_GRIDFUNCTIONSPACE_HH 12 #include <dune/common/exceptions.hh> 13 #include <dune/common/shared_ptr.hh> 14 #include <dune/common/stdstreams.hh> 15 #include <dune/common/typetraits.hh> 17 #include <dune/geometry/referenceelements.hh> 18 #include <dune/geometry/type.hh> 20 #include <dune/localfunctions/common/interfaceswitch.hh> 21 #include <dune/localfunctions/common/localkey.hh> 23 #include <dune/typetree/typetree.hh> 30 #define _DUNE_PDELAB_SUPPRESS_ISTL_HH_WARNING 32 #undef _DUNE_PDELAB_SUPPRESS_ISTL_HH_WARNING 72 struct _lazy_extract_gridview
77 using type =
typename T::GridView;
82 template<
typename GV_or_ES>
83 using GridView =
typename std::conditional<
85 impl::_lazy_extract_gridview,
87 >::type::template evaluate<GV_or_ES>::type;
91 template<
typename GV_or_ES>
92 using EntitySet =
typename std::conditional<
93 isEntitySet<GV_or_ES>::value,
95 AllEntitySet<GV_or_ES>
110 template<
typename G,
typename L,
typename C,
typename B,
typename O>
114 static const bool isComposite =
false;
167 template<
typename GV,
typename FEM,
typename CE=
NoConstraints,
170 :
public TypeTree::LeafNode
172 GridFunctionSpace<GV,FEM,CE,B,P>,
173 GridFunctionSpaceTraits<GV,FEM,CE,B,P>
179 typedef TypeTree::TransformTree<GridFunctionSpace,gfs_to_ordering<GridFunctionSpace> > ordering_transformation;
181 template<
typename,
typename>
194 typedef typename GV::Traits::template Codim<0>::Entity
Element;
203 typedef typename ordering_transformation::Type
Ordering;
211 typedef typename std::conditional<
230 #if DUNE_PDELAB_WARN_ON_GRIDVIEW_BASED_GFS 231 DUNE_DEPRECATED_MSG(
"GridFunctionSpaces now internally use an EntitySet instead of a GridView, please replace the template parameter and the first constructor parameter by an EntitySet").
233 : BaseT(backend,ordering_tag)
235 , pfem(stackobject_to_shared_ptr(fem))
236 , _pce(stackobject_to_shared_ptr(ce))
241 GridFunctionSpace (
const typename Traits::GridView& gridview,
const std::shared_ptr<const FEM>& fem,
const std::shared_ptr<const CE>& ce,
const B& backend = B(),
const OrderingTag& ordering_tag = OrderingTag())
242 #if DUNE_PDELAB_WARN_ON_GRIDVIEW_BASED_GFS 243 DUNE_DEPRECATED_MSG(
"GridFunctionSpaces now internally use an EntitySet instead of a GridView, please replace the template parameter and the first constructor parameter by an EntitySet").
245 : BaseT(backend,ordering_tag)
253 #if DUNE_PDELAB_WARN_ON_GRIDVIEW_BASED_GFS 254 DUNE_DEPRECATED_MSG(
"GridFunctionSpaces now internally use an EntitySet instead of a GridView, please replace the template parameter and the first constructor parameter by an EntitySet").
256 : BaseT(backend,ordering_tag)
258 , pfem(stackobject_to_shared_ptr(fem))
259 , _pce(std::make_shared<CE>())
264 #if DUNE_PDELAB_WARN_ON_GRIDVIEW_BASED_GFS 265 DUNE_DEPRECATED_MSG(
"GridFunctionSpaces now internally use an EntitySet instead of a GridView, please replace the template parameter and the first constructor parameter by an EntitySet").
267 : BaseT(backend,ordering_tag)
270 , _pce(std::make_shared<CE>())
281 : BaseT(backend,ordering_tag)
283 , pfem(stackobject_to_shared_ptr(fem))
284 , _pce(stackobject_to_shared_ptr(ce))
289 GridFunctionSpace (
const typename Traits::EntitySet& entitySet,
const std::shared_ptr<const FEM>& fem,
const std::shared_ptr<const CE>& ce,
const B& backend = B(),
const OrderingTag& ordering_tag = OrderingTag())
290 : BaseT(backend,ordering_tag)
298 : BaseT(backend,ordering_tag)
300 , pfem(stackobject_to_shared_ptr(fem))
301 , _pce(
std::make_shared<CE>())
306 : BaseT(backend,ordering_tag)
309 , _pce(
std::make_shared<CE>())
316 return _es.gridView();
354 if (!this->isRootSpace())
357 "Ordering can only be obtained for root space in GridFunctionSpace tree.");
362 this->update(*_ordering);
370 if (!this->isRootSpace())
373 "Ordering can only be obtained for root space in GridFunctionSpace tree.");
378 this->update(*_ordering);
386 if (!this->isRootSpace())
389 "Ordering can only be obtained for root space in GridFunctionSpace tree.");
394 this->update(*_ordering);
402 if (!this->isRootSpace())
405 "Ordering can only be obtained for root space in GridFunctionSpace tree.");
410 this->update(*_ordering);
419 void create_ordering()
const 421 _ordering = std::make_shared<Ordering>(ordering_transformation::transform(*
this));
425 std::shared_ptr<FEM const> pfem;
426 std::shared_ptr<CE const> _pce;
428 mutable std::shared_ptr<Ordering> _ordering;
435 #endif // DUNE_PDELAB_GRIDFUNCTIONSPACE_GRIDFUNCTIONSPACE_HH B BackendType
vector backend
Definition: gridfunctionspace.hh:125
Definition: datahandleprovider.hh:187
L::Traits::FiniteElementType FiniteElement
Definition: gridfunctionspace.hh:141
O OrderingTag
tag describing the ordering.
Definition: gridfunctionspace.hh:151
Definition: istl/descriptors.hh:50
impl::GridView< G > GridView
the grid view where grid function is defined upon
Definition: gridfunctionspace.hh:117
std::shared_ptr< const Ordering > orderingStorage() const
Direct access to the storage of the DOF ordering.
Definition: gridfunctionspace.hh:384
GridFunctionSpace(const typename Traits::EntitySet &entitySet, const FEM &fem, const CE &ce, const B &backend=B(), const OrderingTag &ordering_tag=OrderingTag())
constructor
Definition: gridfunctionspace.hh:280
GV::Traits::template Codim< 0 >::Entity Element
Definition: gridfunctionspace.hh:194
L FiniteElementMap
finite element map
Definition: gridfunctionspace.hh:136
const Ordering & ordering() const
Direct access to the DOF ordering.
Definition: gridfunctionspace.hh:352
L FiniteElementMapType
finite element map
Definition: gridfunctionspace.hh:133
GV::Traits::template Codim< 0 >::Iterator ElementIterator
Definition: gridfunctionspace.hh:195
std::shared_ptr< Ordering > orderingStorage()
Direct access to the storage of the DOF ordering.
Definition: gridfunctionspace.hh:400
Ordering & ordering()
Direct access to the DOF ordering.
Definition: gridfunctionspace.hh:368
Definition: constraintstransformation.hh:111
For backward compatibility – Do not use this!
Definition: adaptivity.hh:27
B::size_type SizeType
short cut for size type exported by Backend
Definition: gridfunctionspace.hh:130
GridFunctionSpace(const typename Traits::GridView &gridview, const std::shared_ptr< const FEM > &fem, const std::shared_ptr< const CE > &ce, const B &backend=B(), const OrderingTag &ordering_tag=OrderingTag())
constructor
Definition: gridfunctionspace.hh:241
Definition: gridfunctionspacebase.hh:134
GridFunctionSpace(const typename Traits::GridView &gridview, const FEM &fem, const B &backend=B(), const OrderingTag &ordering_tag=OrderingTag())
constructor
Definition: gridfunctionspace.hh:252
const Traits::ConstraintsType & constraints() const
return constraints engine
Definition: gridfunctionspace.hh:338
L::Traits::FiniteElementType FiniteElementType
finite element
Definition: gridfunctionspace.hh:139
const FEM & finiteElementMap() const
get finite element map
Definition: gridfunctionspace.hh:326
std::shared_ptr< const FEM > finiteElementMapStorage() const
get finite element map
Definition: gridfunctionspace.hh:332
GridFunctionSpace(const typename Traits::GridView &gridview, const FEM &fem, const CE &ce, const B &backend=B(), const OrderingTag &ordering_tag=OrderingTag())
constructor
Definition: gridfunctionspace.hh:229
GridFunctionSpace(const typename Traits::GridView &gridview, const std::shared_ptr< const FEM > &fem, const B &backend=B(), const OrderingTag &ordering_tag=OrderingTag())
constructor
Definition: gridfunctionspace.hh:263
ordering_transformation::Type Ordering
Definition: gridfunctionspace.hh:203
collect types exported by a leaf grid function space
Definition: gridfunctionspace.hh:111
std::shared_ptr< const CE > constraintsStorage() const
return storage of constraints engine
Definition: gridfunctionspace.hh:344
B Backend
Definition: gridfunctionspace.hh:127
C ConstraintsType
type representing constraints
Definition: gridfunctionspace.hh:144
Tag indicating a standard ordering for a leaf GridfunctionSpace.
Definition: gridfunctionspace/tags.hh:183
P SizeTag
Definition: gridfunctionspace.hh:197
GridFunctionSpaceTraits< GV, FEM, CE, B, P > Traits
export Traits class
Definition: gridfunctionspace.hh:186
Definition: gridfunctionspace/tags.hh:32
const Traits::EntitySet & entitySet() const
get EntitySet
Definition: gridfunctionspace.hh:320
LeafGridFunctionSpaceTag ImplementationTag
Definition: gridfunctionspace.hh:201
extract type for storing constraints
Definition: gridfunctionspace.hh:207
a class holding transformation for constrained spaces
Definition: constraintstransformation.hh:18
std::conditional< std::is_same< CE, NoConstraints >::value, EmptyTransformation, ConstraintsTransformation< typename Ordering::Traits::DOFIndex, typename Ordering::Traits::ContainerIndex, E > >::type Type
define Type as the Type of a container of E's
Definition: gridfunctionspace.hh:218
Mixin base class for specifying output hints to I/O routines like VTK.
Definition: function.hh:124
GridFunctionSpace(const typename Traits::EntitySet &entitySet, const std::shared_ptr< const FEM > &fem, const std::shared_ptr< const CE > &ce, const B &backend=B(), const OrderingTag &ordering_tag=OrderingTag())
constructor
Definition: gridfunctionspace.hh:289
Definition: noconstraints.hh:16
const Traits::GridView & gridView() const
get grid view
Definition: gridfunctionspace.hh:314
static const unsigned int value
Definition: gridfunctionspace/tags.hh:139
GridView GridViewType
Definition: gridfunctionspace.hh:122
impl::EntitySet< G > EntitySet
the entity set of this function space.
Definition: gridfunctionspace.hh:120
GridFunctionSpace(const typename Traits::EntitySet &entitySet, const std::shared_ptr< const FEM > &fem, const B &backend=B(), const OrderingTag &ordering_tag=OrderingTag())
constructor
Definition: gridfunctionspace.hh:305
Definition: exceptions.hh:34
GridFunctionSpace(const typename Traits::EntitySet &entitySet, const FEM &fem, const B &backend=B(), const OrderingTag &ordering_tag=OrderingTag())
constructor
Definition: gridfunctionspace.hh:297
A grid function space.
Definition: gridfunctionspace.hh:169
P OrderingTag
Definition: gridfunctionspace.hh:199