3 #ifndef DUNE_ALUGRIDOBJECTFACTORY_HH
4 #define DUNE_ALUGRIDOBJECTFACTORY_HH
8 #if defined USE_PTHREADS || defined _OPENMP
9 #define USE_SMP_PARALLEL
17 #include <dune/fem/misc/threads/threadmanager.hh>
22 template <
class InterfaceType>
25 template <
class Gr
idImp>
28 template <
class OF,
int codim>
29 class ALUGridEntityFactory;
36 template <
class Gr
idObjectFactory>
37 class ALUGridEntityFactory<GridObjectFactory,0>
45 inline static EntityObject *
46 getNewEntity (
const GridObjectFactory& factory,
int level)
48 return factory.entityProvider_.getEntityObject( factory, level, (EntityImp *) 0);
51 inline static void freeEntity(
const GridObjectFactory& factory, EntityObject * e )
53 factory.entityProvider_.freeObject( e );
57 template <
class Gr
idObjectFactory>
58 class ALUGridEntityFactory<GridObjectFactory,1>
66 inline static EntityObject *
67 getNewEntity (
const GridObjectFactory& factory,
int level)
69 return factory.faceProvider_.getEntityObject( factory, level, (EntityImp *) 0);
72 inline static void freeEntity(
const GridObjectFactory& factory, EntityObject * e )
74 factory.faceProvider_.freeObject( e );
78 template <
class Gr
idObjectFactory>
79 class ALUGridEntityFactory<GridObjectFactory,2>
87 inline static EntityObject *
88 getNewEntity (
const GridObjectFactory& factory,
int level)
90 return factory.edgeProvider_.getEntityObject( factory, level, (EntityImp *) 0);
93 inline static void freeEntity(
const GridObjectFactory& factory, EntityObject * e )
95 factory.edgeProvider_.freeObject( e );
99 template <
class Gr
idObjectFactory>
100 class ALUGridEntityFactory<GridObjectFactory,3>
108 inline static EntityObject *
109 getNewEntity (
const GridObjectFactory& factory,
int level)
111 return factory.vertexProvider_.getEntityObject( factory, level, (EntityImp *) 0);
114 inline static void freeEntity(
const GridObjectFactory& factory, EntityObject * e )
116 factory.vertexProvider_.freeObject( e );
120 enum { vxCodim = GridImp :: dimension };
134 friend class ALUGridEntityFactory<FactoryType,0>;
135 friend class ALUGridEntityFactory<FactoryType,1>;
136 friend class ALUGridEntityFactory<FactoryType,2>;
137 friend class ALUGridEntityFactory<FactoryType,3>;
158 #ifdef USE_SMP_PARALLEL
172 return ALUGridEntityFactory<FactoryType,codim>::getNewEntity( *
this, level);
178 ALUGridEntityFactory<FactoryType,codim>::freeEntity(*
this, en);
181 LeafIntersectionIteratorImp&
getIntersection(
const int wLevel,
const LeafIntersectionIteratorImp* )
const
183 return * (leafInterItProvider_.
getObject( *
this, wLevel ));
186 LevelIntersectionIteratorImp&
getIntersection(
const int wLevel,
const LevelIntersectionIteratorImp* )
const
188 return * (levelInterItProvider_.
getObject( *
this, wLevel ));
199 return omp_get_thread_num();
210 return omp_get_max_threads();
212 return Fem :: ThreadManager :: maxThreads() ;
ALUMemoryProvider< VertexObject > VertexProvider
Definition: objectfactory.hh:143
static int thread
Definition: partitiondisplay.cc:44
void freeIntersection(LevelIntersectionIteratorImp &it) const
Definition: objectfactory.hh:193
MakeableInterfaceObject< typename GridType::Traits::template Codim< vxCodim >::Entity > VertexObject
Definition: objectfactory.hh:128
EntityProvider entityProvider_
Definition: objectfactory.hh:145
LevelIntersectionIteratorProviderType levelInterItProvider_
Definition: objectfactory.hh:154
LeafIntersectionIteratorImp & getIntersection(const int wLevel, const LeafIntersectionIteratorImp *) const
Definition: objectfactory.hh:181
Wrapper class for entities.
Definition: common/entity.hh:61
GridImp GridType
Definition: objectfactory.hh:122
const GridType & grid_
Definition: objectfactory.hh:156
MakeableInterfaceObject< typename GridType::Traits::template Codim< codim >::Entity > * getNewEntity(int level=-1) const
Definition: objectfactory.hh:170
void freeObject(ObjectType *obj)
free, move element to stack, returns NULL
Definition: memory.hh:143
void freeEntity(MakeableInterfaceObject< typename GridType::Traits::template Codim< codim >::Entity > *en) const
Definition: objectfactory.hh:176
FaceProvider faceProvider_
Definition: objectfactory.hh:146
ALUGridObjectFactory FactoryType
Definition: objectfactory.hh:123
static int maxThreads()
Definition: objectfactory.hh:208
MakeableInterfaceObject< typename GridType::Traits::template Codim< 0 >::Entity > EntityObject
Definition: objectfactory.hh:125
ALUMemoryProvider< LeafIntersectionIteratorImp > LeafIntersectionIteratorProviderType
Definition: objectfactory.hh:150
ALUMemoryProvider< EdgeObject > EdgeProvider
Definition: objectfactory.hh:142
LeafIntersectionIteratorProviderType leafInterItProvider_
Definition: objectfactory.hh:153
const GridType & grid() const
Definition: objectfactory.hh:164
VertexProvider vertexProvider_
Definition: objectfactory.hh:148
ALUGridObjectFactory(const ALUGridObjectFactory &other)
Definition: objectfactory.hh:161
EdgeProvider edgeProvider_
Definition: objectfactory.hh:147
MakeableInterfaceObject< typename GridType::Traits::template Codim< 2 >::Entity > EdgeObject
Definition: objectfactory.hh:127
Definition: objectfactory.hh:23
void freeIntersection(LeafIntersectionIteratorImp &it) const
free intersection
Definition: objectfactory.hh:192
ALUMemoryProvider< FaceObject > FaceProvider
Definition: objectfactory.hh:141
LevelIntersectionIteratorImp & getIntersection(const int wLevel, const LevelIntersectionIteratorImp *) const
Definition: objectfactory.hh:186
GridType::LeafIntersectionIteratorImp LeafIntersectionIteratorImp
Definition: objectfactory.hh:130
Definition: objectfactory.hh:26
ALUMemoryProvider< LevelIntersectionIteratorImp > LevelIntersectionIteratorProviderType
Definition: objectfactory.hh:151
ALUGridObjectFactory(const GridType &grid)
Definition: objectfactory.hh:166
static int threadNumber()
Definition: objectfactory.hh:196
ObjectType * getObject(const FactoryType &factory, int level)
i.e. return pointer to Entity
Definition: memory.hh:90
InterfaceType::Implementation ImplementationType
Definition: common/grid.hh:1468
GridType::LevelIntersectionIteratorImp LevelIntersectionIteratorImp
Definition: objectfactory.hh:131
MakeableInterfaceObject< typename GridType::Traits::template Codim< 1 >::Entity > FaceObject
Definition: objectfactory.hh:126
Include standard header files.
Definition: agrid.hh:59
ALUMemoryProvider< EntityObject > EntityProvider
Definition: objectfactory.hh:140