1 #ifndef DUNE_ALUGRIDOBJECTFACTORY_HH
2 #define DUNE_ALUGRIDOBJECTFACTORY_HH
6 #if defined USE_PTHREADS || defined _OPENMP
7 #define USE_SMP_PARALLEL
15 #include <dune/fem/misc/threadmanager.hh>
20 template <
class InterfaceType>
23 template <
class Gr
idImp>
26 template <
class OF,
int codim>
27 class ALUGridEntityFactory;
34 template <
class Gr
idObjectFactory>
35 class ALUGridEntityFactory<GridObjectFactory,0>
44 getNewEntity (
const GridObjectFactory& factory,
int level)
46 return factory.entityProvider_.getEntityObject( factory, level, (EntityImp *) 0);
51 factory.entityProvider_.freeObject( e );
55 template <
class Gr
idObjectFactory>
56 class ALUGridEntityFactory<GridObjectFactory,1>
65 getNewEntity (
const GridObjectFactory& factory,
int level)
67 return factory.faceProvider_.getEntityObject( factory, level, (EntityImp *) 0);
72 factory.faceProvider_.freeObject( e );
76 template <
class Gr
idObjectFactory>
77 class ALUGridEntityFactory<GridObjectFactory,2>
86 getNewEntity (
const GridObjectFactory& factory,
int level)
88 return factory.edgeProvider_.getEntityObject( factory, level, (EntityImp *) 0);
93 factory.edgeProvider_.freeObject( e );
97 template <
class Gr
idObjectFactory>
98 class ALUGridEntityFactory<GridObjectFactory,3>
107 getNewEntity (
const GridObjectFactory& factory,
int level)
109 return factory.vertexProvider_.getEntityObject( factory, level, (EntityImp *) 0);
114 factory.vertexProvider_.freeObject( e );
118 enum { vxCodim = GridImp :: dimension };
156 #ifdef USE_SMP_PARALLEL
170 return ALUGridEntityFactory<FactoryType,codim>::getNewEntity( *
this, level);
176 ALUGridEntityFactory<FactoryType,codim>::freeEntity(*
this, en);
197 return omp_get_thread_num();
208 return omp_get_max_threads();
210 return Fem :: ThreadManager :: maxThreads() ;