1#ifndef DUNE_FEM_DYNAMICNONBLOCKMAPPER_HH
2#define DUNE_FEM_DYNAMICNONBLOCKMAPPER_HH
20 template<
class BlockMapper >
21 class DynamicNonBlockMapper;
24 namespace __DynamicNonBlockMapper
30 template<
class BlockMapper >
37 typedef typename BlockMapper::SizeType
SizeType;
49 typedef Base< T > BaseType;
51 template<
class,
template<
class >
class >
55 typedef typename BaseType::Traits
Traits;
64 template<
class Functor >
67 explicit BlockFunctor (
int blockSize, Functor functor )
68 : blockSize_(
blockSize ), functor_( functor )
71 template<
class GlobalKey >
72 void operator() (
int localBlock,
const GlobalKey globalKey )
74 int localDof = blockSize_*localBlock;
75 SizeType globalDof = blockSize_*globalKey;
76 const int localEnd = localDof + blockSize_;
77 while( localDof != localEnd )
78 functor_( localDof++, globalDof++ );
93 bool contains (
const int codim )
const {
return blockMapper_.contains( codim ); }
95 bool fixedDataSize (
int codim )
const {
return blockMapper_.fixedDataSize( codim ); }
97 template<
class Functor >
100 blockMapper_.mapEach( element, BlockFunctor< Functor >(
blockSize(), f ) );
103 void map (
const ElementType &element, std::vector< GlobalKeyType > &indices )
const
105 indices.resize(
numDofs( element ) );
106 mapEach( element, [ &indices ] (
int local,
GlobalKeyType global ) { indices[ local ] = global; } );
112 blockMapper_.onSubEntity( element, i, c, indices );
117 indices[ i*
blockSize() + j ] = indices[ i ];
121 template<
class Entity,
class Functor >
124 blockMapper_.mapEachEntityDof( entity, BlockFunctor< Functor >(
blockSize(), f ) );
127 template<
class Entity >
128 void mapEntityDofs (
const Entity &entity, std::vector< GlobalKeyType > &indices )
const
138 template<
class Entity >
145 DUNE_THROW( NotImplemented,
"Method numBlocks() called on non-adaptive block mapper" );
150 DUNE_THROW( NotImplemented,
"Method numberOfHoles() called on non-adaptive block mapper" );
155 DUNE_THROW( NotImplemented,
"Method oldIndex() called on non-adaptive block mapper" );
160 DUNE_THROW( NotImplemented,
"Method newIndex() called on non-adaptive block mapper" );
165 DUNE_THROW( NotImplemented,
"Method oldOffSet() called on non-adaptive block mapper" );
170 DUNE_THROW( NotImplemented,
"Method offSet() called on non-adaptive block mapper" );
187 :
public DofMapper< T, Dune::Fem::AdaptiveDofMapper >
219 const int blockHole = hole /
blockSize();
226 const int blockHole = hole /
blockSize();
239 template< class BlockMapper, bool adaptive = Capabilities::isAdaptiveDofMapper< BlockMapper >::v >
256 template<
class BlockMapper >
258 :
public __DynamicNonBlockMapper::template Implementation< BlockMapper >::Type
260 typedef typename __DynamicNonBlockMapper::template Implementation< BlockMapper >::Type BaseType;
264 : BaseType( blockMapper, blockSize )
273 template<
class BlockMapper >
282 :
BaseType( blockMapper.blockMapper(), blockMapper.blockSize() * blockSize )
291 template<
class BlockMapper,
int innerBlockSize >
300 :
BaseType( blockMapper.blockMapper(), innerBlockSize * blockSize )
309 template<
class BlockMapper,
int outerBlockSize >
318 :
BaseType( blockMapper.blockMapper(), outerBlockSize * blockMapper.blockSize() )
327 namespace Capabilities
329 template<
class BlockMapper >
335 template<
class BlockMapper >
Definition: bindguard.hh:11
specialize with true if index set implements the interface for consecutive index sets
Definition: common/indexset.hh:42
static const bool v
Definition: common/indexset.hh:49
Definition: space/mapper/capabilities.hh:22
static const bool v
Definition: space/mapper/capabilities.hh:23
Interface for calculating the size of a function space for a grid on a specified level....
Definition: mapper/dofmapper.hh:43
Extended interface for adaptive DoF mappers.
Definition: mapper/dofmapper.hh:219
Definition: dynamicnonblockmapper.hh:259
DynamicNonBlockMapper(BlockMapper &blockMapper, int blockSize)
Definition: dynamicnonblockmapper.hh:263
Definition: dynamicnonblockmapper.hh:32
DynamicNonBlockMapper< BlockMapper > DofMapperType
Definition: dynamicnonblockmapper.hh:33
BlockMapper::GlobalKeyType GlobalKeyType
Definition: dynamicnonblockmapper.hh:38
BlockMapper::ElementType ElementType
Definition: dynamicnonblockmapper.hh:36
BlockMapper BlockMapperType
Definition: dynamicnonblockmapper.hh:35
BlockMapper::SizeType SizeType
Definition: dynamicnonblockmapper.hh:37
Definition: dynamicnonblockmapper.hh:48
void onSubEntity(const ElementType &element, int i, int c, std::vector< bool > &indices) const
Definition: dynamicnonblockmapper.hh:109
int maxNumDofs() const
Definition: dynamicnonblockmapper.hh:134
Traits::ElementType ElementType
Definition: dynamicnonblockmapper.hh:59
int blockSize() const
Definition: dynamicnonblockmapper.hh:174
GlobalKeyType newIndex(int hole, int) const
Definition: dynamicnonblockmapper.hh:158
SizeType numBlocks() const
Definition: dynamicnonblockmapper.hh:143
void mapEach(const ElementType &element, Functor f) const
Definition: dynamicnonblockmapper.hh:98
Traits::GlobalKeyType GlobalKeyType
Definition: dynamicnonblockmapper.hh:61
Traits::SizeType SizeType
Definition: dynamicnonblockmapper.hh:60
void mapEntityDofs(const Entity &entity, std::vector< GlobalKeyType > &indices) const
Definition: dynamicnonblockmapper.hh:128
SizeType oldOffSet(int) const
Definition: dynamicnonblockmapper.hh:163
SizeType numDofs(const ElementType &element) const
Definition: dynamicnonblockmapper.hh:136
Traits::BlockMapperType BlockMapperType
Definition: dynamicnonblockmapper.hh:57
void mapEachEntityDof(const Entity &entity, Functor f) const
Definition: dynamicnonblockmapper.hh:122
SizeType numEntityDofs(const Entity &entity) const
Definition: dynamicnonblockmapper.hh:139
void map(const ElementType &element, std::vector< GlobalKeyType > &indices) const
Definition: dynamicnonblockmapper.hh:103
GlobalKeyType oldIndex(int hole, int) const
Definition: dynamicnonblockmapper.hh:153
bool contains(const int codim) const
Definition: dynamicnonblockmapper.hh:93
DofMapper(BlockMapperType &blockMapper, int blockSize)
Definition: dynamicnonblockmapper.hh:87
SizeType size() const
Definition: dynamicnonblockmapper.hh:91
static constexpr bool consecutive() noexcept
Definition: dynamicnonblockmapper.hh:141
SizeType offSet(int) const
Definition: dynamicnonblockmapper.hh:168
bool fixedDataSize(int codim) const
Definition: dynamicnonblockmapper.hh:95
const BlockMapperType & blockMapper() const
Definition: dynamicnonblockmapper.hh:173
BaseType::Traits Traits
Definition: dynamicnonblockmapper.hh:55
SizeType numberOfHoles(int) const
Definition: dynamicnonblockmapper.hh:148
Definition: dynamicnonblockmapper.hh:188
Traits::ElementType ElementType
Definition: dynamicnonblockmapper.hh:202
AdaptiveDofMapper(BlockMapperType &blockMapper, int blockSize)
Definition: dynamicnonblockmapper.hh:206
GlobalKeyType oldIndex(int hole, int block) const
Definition: dynamicnonblockmapper.hh:216
SizeType numberOfHoles(int block) const
Definition: dynamicnonblockmapper.hh:214
bool consecutive() const
Definition: dynamicnonblockmapper.hh:210
SizeType oldOffSet(const int block) const
Definition: dynamicnonblockmapper.hh:230
Traits::GlobalKeyType GlobalKeyType
Definition: dynamicnonblockmapper.hh:204
SizeType offSet(const int block) const
Definition: dynamicnonblockmapper.hh:232
SizeType numBlocks() const
Definition: dynamicnonblockmapper.hh:212
Traits::SizeType SizeType
Definition: dynamicnonblockmapper.hh:203
GlobalKeyType newIndex(int hole, int block) const
Definition: dynamicnonblockmapper.hh:223
Traits::BlockMapperType BlockMapperType
Definition: dynamicnonblockmapper.hh:197
BaseType::Traits Traits
Definition: dynamicnonblockmapper.hh:195
Definition: dynamicnonblockmapper.hh:241
std::conditional< adaptive, AdaptiveDofMapper< Traits >, DofMapper< Traits > >::type Type
Definition: dynamicnonblockmapper.hh:245
Definition: dynamicnonblockmapper.hh:276
DynamicNonBlockMapper(const DynamicNonBlockMapper< BlockMapper > &blockMapper, int blockSize)
Definition: dynamicnonblockmapper.hh:281
Definition: dynamicnonblockmapper.hh:294
DynamicNonBlockMapper(const NonBlockMapper< BlockMapper, innerBlockSize > &blockMapper, int blockSize)
Definition: dynamicnonblockmapper.hh:299
Definition: dynamicnonblockmapper.hh:312
NonBlockMapper(const DynamicNonBlockMapper< BlockMapper > &blockMapper)
Definition: dynamicnonblockmapper.hh:317
Definition: nonblockmapper.hh:263