1#ifndef DUNE_FEM_SPACE_LOCALFINITEELEMENT_SPACE_HH
2#define DUNE_FEM_SPACE_LOCALFINITEELEMENT_SPACE_HH
10#include <dune/geometry/type.hh>
41 template<
class LFEMap,
class FunctionSpace,
class Storage >
54 static constexpr bool isScalar = LocalFiniteElementType::Traits::LocalBasisType::Traits::dimRange==1;
62 typedef typename GridPartType::template Codim< codimension >::EntityType EntityType;
65 static const int pointSetId = detail::SelectPointSetId< LFEMap >::value;
82 template<
class LFEM >
90 template<
class DiscreteFunction,
class Operation = DFCommunicationOperation::Add >
112 template<
class LFEMap,
class FunctionSpace,
class Storage >
138 typedef typename LocalFiniteElementType::Traits::LocalBasisType LocalBasisType;
139 typedef typename LocalFiniteElementType::Traits::LocalInterpolationType LocalInterpolationType;
140 typedef typename LocalFiniteElementType::Traits::LocalCoefficientsType LocalCoefficientsType;
142 typedef typename LFEMapType::KeyType KeyType;
148 static LFEMapType *createObject ( std::pair< GridPartType *, KeyType > key ) {
return new LFEMapType( *key.first, key.second ); }
149 static void deleteObject (
LFEMapType *
object ) {
delete object; }
155 typedef std::vector< std::unique_ptr< StoredShapeFunctionSetType > > StoredShapeFunctionSetVectorType;
157 struct StoredShapeFunctionSetVectorFactory
159 static StoredShapeFunctionSetVectorType *createObject (
LFEMapType *lfeMap ) {
return new StoredShapeFunctionSetVectorType( lfeMap->size() ); }
160 static void deleteObject ( StoredShapeFunctionSetVectorType *
object ) {
delete object; }
163 typedef SingletonList< LFEMapType *, StoredShapeFunctionSetVectorType, StoredShapeFunctionSetVectorFactory > StoredShapeFunctionSetVectorProviderType;
165 struct BlockMapperSingletonFactory
169 return new BlockMapperType( lfeMap->gridPart(), [ lfeMap ] (
const auto &refElement ) {
170 if( lfeMap->hasCoefficients( refElement.type() ) )
171 return Dune::Fem::compile( refElement, lfeMap->localCoefficients( refElement.type() ) );
173 return Dune::Fem::DofMapperCode();
177 static void deleteObject (
BlockMapperType *
object ) {
delete object; }
180 typedef SingletonList< LFEMapType *, BlockMapperType, BlockMapperSingletonFactory > BlockMapperProviderType;
191 template< class GridPart, std::enable_if_t< std::is_same< GridPart, GridPartType >::value &&std::is_same< KeyType, std::tuple<> >::value,
int > = 0 >
193 const InterfaceType commInterface = InteriorBorder_All_Interface,
194 const CommunicationDirection commDirection = ForwardCommunication )
201 template< class GridPart, std::enable_if_t< std::is_same< GridPart, GridPartType >::value && !std::is_same< KeyType, std::tuple<> >::value,
int > = 0 >
203 const InterfaceType commInterface = InteriorBorder_All_Interface,
204 const CommunicationDirection commDirection = ForwardCommunication )
211 template< class GridPart, std::enable_if_t< std::is_same< GridPart, GridPartType >::value && !std::is_same< KeyType, std::tuple<> >::value,
int > = 0 >
213 const InterfaceType commInterface = InteriorBorder_All_Interface,
214 const CommunicationDirection commDirection = ForwardCommunication )
244 return getShapeFunctionSet( (*lfeMap_)( entity ), entity.type() );
254 int order ()
const {
return lfeMap_->order(); }
276 [[deprecated(
"Use LocalInterpolation( space ) instead!")]]
289 auto lfe = (*lfeMap_)( entity );
296 return (*lfeMap_).localCoefficients(
type);
300 ShapeFunctionSetType getShapeFunctionSet ( std::tuple< std::size_t, const LocalBasisType &, const LocalInterpolationType & > lfe,
const GeometryType &
type )
const
302 auto &storedShapeFunctionSet = (*storedShapeFunctionSetVector_)[ std::get< 0 > ( lfe ) ];
303 if( !storedShapeFunctionSet )
304 storedShapeFunctionSet.reset(
new StoredShapeFunctionSetType(
type, LocalFunctionsShapeFunctionSetType( std::get< 1 >( lfe ) ) ) );
308 std::unique_ptr< LFEMapType, typename LFEMapProviderType::Deleter > lfeMap_;
309 std::unique_ptr< StoredShapeFunctionSetVectorType, typename StoredShapeFunctionSetVectorProviderType::Deleter > storedShapeFunctionSetVector_;
310 std::unique_ptr< BlockMapperType, typename BlockMapperProviderType::Deleter > blockMapper_;
313 template<
class LFEMap,
class FunctionSpace,
class Storage,
int newRange >
319 template <
class LFEMap,
class FunctionSpace,
class Storage,
class NewFunctionSpace>
Provides a proxy class for pointers to a shape function set.
DFSpaceIdentifier
enumerator for identification of spaces
Definition: discretefunctionspace.hh:94
@ LocalFiniteElementSpace_id
id for local finite element space
Definition: discretefunctionspace.hh:106
Definition: bindguard.hh:11
std::tuple_element< i, Tuple >::type & get(Dune::TypeIndexedTuple< Tuple, Types > &tuple)
Definition: typeindexedtuple.hh:122
typename Impl::GridFunctionSpace< GridPart, T >::Type GridFunctionSpace
Definition: functionspace.hh:317
Definition: space/basisfunctionset/default.hh:52
implementation of a basis function set for given entity
Definition: transformed.hh:44
Default communication handler for discrete functions.
Definition: defaultcommhandler.hh:29
Definition: discretefunctionspace.hh:133
Traits::FunctionSpaceType FunctionSpaceType
type of function space
Definition: discretefunctionspace.hh:193
Traits::BasisFunctionSetType BasisFunctionSetType
type of basis function set of this space
Definition: discretefunctionspace.hh:200
GridPartType::IntersectionType IntersectionType
type of the intersections
Definition: discretefunctionspace.hh:225
int order() const
get global order of space
Definition: discretefunctionspace.hh:345
This is the class with default implementations for discrete function. The methods not marked with hav...
Definition: discretefunctionspace.hh:628
BaseType::EntityType EntityType
Definition: discretefunctionspace.hh:644
BaseType::BlockMapperType BlockMapperType
Definition: discretefunctionspace.hh:660
BaseType::GridPartType GridPartType
Definition: discretefunctionspace.hh:640
GridPartType & gridPart() const
Definition: discretefunctionspace.hh:745
A vector valued function space.
Definition: functionspace.hh:60
convert functions space to space with new dim range
Definition: functionspace.hh:250
Rannacher-Turek Space.
Definition: localfiniteelement/space.hh:115
BaseType::GridPartType GridPartType
Definition: localfiniteelement/space.hh:124
InterpolationImplType localInterpolation(const EntityType &entity) const
return local interpolation
Definition: localfiniteelement/space.hh:287
BasisFunctionSetType basisFunctionSet(const EntityType &entity) const
get basis function set for given entity
Definition: localfiniteelement/space.hh:230
LocalFiniteElementSpace(const ThisType &)=delete
BaseType::IntersectionType IntersectionType
Definition: localfiniteelement/space.hh:126
Traits::LFEMapType LFEMapType
Definition: localfiniteelement/space.hh:135
LocalFiniteElementInterpolation< ThisType, LocalInterpolationType, Traits::isScalar > InterpolationImplType
Definition: localfiniteelement/space.hh:184
BaseType::FunctionSpaceType FunctionSpaceType
Definition: localfiniteelement/space.hh:122
int order() const
get global order of space
Definition: localfiniteelement/space.hh:254
LocalFiniteElementSpace(ThisType &&)=delete
bool multipleGeometryTypes() const
returns true if the grid has more than one geometry type
Definition: localfiniteelement/space.hh:257
ThisType & operator=(const ThisType &)=delete
LocalFiniteElementSpace(GridPart &gridPart, const InterfaceType commInterface=InteriorBorder_All_Interface, const CommunicationDirection commDirection=ForwardCommunication)
Definition: localfiniteelement/space.hh:192
BlockMapperType & blockMapper() const
get a reference to the block mapper
Definition: localfiniteelement/space.hh:260
InterpolationType interpolation() const
return local interpolation object (uninitialized)
Definition: localfiniteelement/space.hh:266
BaseType::BasisFunctionSetType BasisFunctionSetType
Definition: localfiniteelement/space.hh:129
BaseType::BlockMapperType BlockMapperType
Definition: localfiniteelement/space.hh:131
bool continuous() const
returns true if the space contains only globally continuous functions
Definition: localfiniteelement/space.hh:248
bool continuous(const IntersectionType &intersection) const
returns true if the space contains only globally continuous functions
Definition: localfiniteelement/space.hh:251
ShapeFunctionSetType shapeFunctionSet(const EntityType &entity) const
return shape function set for given entity
Definition: localfiniteelement/space.hh:242
BaseType::Traits::ShapeFunctionSetType ShapeFunctionSetType
Definition: localfiniteelement/space.hh:128
DFSpaceIdentifier type() const
return type identifier of discrete function space
Definition: localfiniteelement/space.hh:227
LocalFEInterpolationWrapper< ThisType > InterpolationType
Interpolation object.
Definition: localfiniteelement/space.hh:187
LFEMapType::LocalCoefficientsType QuadratureType
Definition: localfiniteelement/space.hh:293
InterpolationImplType interpolation(const EntityType &entity) const
return local interpolation
Definition: localfiniteelement/space.hh:277
BaseType::EntityType EntityType
Definition: localfiniteelement/space.hh:125
Traits::LocalFiniteElementType LocalFiniteElementType
Definition: localfiniteelement/space.hh:133
LocalFiniteElementSpace(GridPart &gridPart, const KeyType &key, const InterfaceType commInterface=InteriorBorder_All_Interface, const CommunicationDirection commDirection=ForwardCommunication)
Definition: localfiniteelement/space.hh:202
const QuadratureType & quadrature(const GeometryType &type) const
Definition: localfiniteelement/space.hh:294
BaseType::Traits Traits
Definition: localfiniteelement/space.hh:121
Definition: localfiniteelement/interpolation.hh:105
Definition: localfiniteelement/interpolation.hh:346
Definition: localfiniteelement/shapefunctionset.hh:49
Definition: localfiniteelement/space.hh:43
SelectCachingShapeFunctionSet< LocalFunctionsShapeFunctionSetType, Storage > StoredShapeFunctionSetType
Definition: localfiniteelement/space.hh:72
LFEMap LFEMapType
Definition: localfiniteelement/space.hh:46
LocalFiniteElementSpace< LFEMap, FunctionSpace, Storage > DiscreteFunctionSpaceType
Definition: localfiniteelement/space.hh:44
static constexpr bool isScalar
Definition: localfiniteelement/space.hh:54
GridFunctionSpace< GridPartType, FunctionSpace > FunctionSpaceType
Definition: localfiniteelement/space.hh:51
decltype(basisFunctionSet(std::declval< const LFEMapType & >())) BasisFunctionSetType
Definition: localfiniteelement/space.hh:88
LFEMapType::GridPartType GridPartType
Definition: localfiniteelement/space.hh:48
Dune::Fem::IndexSetDofMapper< GridPartType > BlockMapperType
Definition: localfiniteelement/space.hh:69
std::conditional_t< isScalar, VectorialShapeFunctionSet< ShapeFunctionSetProxyType, typename FunctionSpaceType::RangeType >, ShapeFunctionSetProxyType > ShapeFunctionSetType
Definition: localfiniteelement/space.hh:79
LocalFunctionsShapeFunctionSet< typename LocalFiniteElementType::Traits::LocalBasisType, pointSetId > LocalFunctionsShapeFunctionSetType
Definition: localfiniteelement/space.hh:71
static constexpr int codimension
Definition: localfiniteelement/space.hh:53
ShapeFunctionSetProxy< StoredShapeFunctionSetType > ShapeFunctionSetProxyType
Definition: localfiniteelement/space.hh:74
LFEMapType::LocalFiniteElementType LocalFiniteElementType
Definition: localfiniteelement/space.hh:49
std::conditional_t< isScalar, Hybrid::IndexRange< int, FunctionSpace::dimRange >, Hybrid::IndexRange< int, 1 > > LocalBlockIndices
Definition: localfiniteelement/space.hh:59
Definition: localfiniteelement/space.hh:92
DefaultCommunicationHandler< DiscreteFunction, Operation > Type
Definition: localfiniteelement/space.hh:93
Operation OperationType
Definition: localfiniteelement/space.hh:94
LocalFiniteElementSpace< LFEMap, typename ToNewDimRangeFunctionSpace< FunctionSpace, newRange >::Type, Storage > Type
Definition: localfiniteelement/space.hh:317
LocalFiniteElementSpace< LFEMap, NewFunctionSpace, Storage > Type
Definition: localfiniteelement/space.hh:323
Definition: indexsetdofmapper.hh:719
Definition: selectcaching.hh:26
Definition: shapefunctionset/vectorial.hh:447
Singleton list for key/object pairs.
Definition: singletonlist.hh:53