1 #ifndef DUNE_FEM_QUADPROVIDER_HH 2 #define DUNE_FEM_QUADPROVIDER_HH 24 template<
unsigned int dummy >
29 template<
class QuadImp >
30 class QuadratureStorage
33 typedef QuadImp QuadType;
35 typedef QuadType *QuadPtr;
42 inline QuadratureStorage ()
43 : storage_( QuadType :: maxOrder() + 1, (QuadPtr)0 )
47 inline ~QuadratureStorage ()
49 for(
unsigned int i = 0; i < storage_.
size(); ++i )
53 inline QuadImp &getQuadrature(
const GeometryType &geometry,
56 assert( order < storage_.
size() );
58 QuadPtr& quadPtr = storage_[ order ];
65 assert( quadPtr != 0 );
76 template<
class QuadImp >
77 static const QuadImp &
provideQuad(
const GeometryType &geometry,
80 static QuadratureStorage< QuadImp > storage;
81 return storage.getQuadrature( geometry, order );
102 template<
typename FieldImp,
int dim,
template<
class,
int >
class QuadratureTraits >
108 enum { dimension = dim };
113 typedef QuadratureTraits< FieldType, dimension > QuadratureTraitsType;
120 typedef typename QuadratureTraitsType :: IntegrationPointListType
127 assert( geometry.isCube() );
128 return QuadCreator< 0 > :: template provideQuad< CubeQuadratureType > ( geometry, order );
132 const GeometryType &elementGeometry,
135 return getQuadrature( geometry, order );
152 template<
typename FieldImp,
template<
class,
int >
class QuadratureTraits >
158 enum { dimension = 0 };
163 typedef QuadratureTraits< FieldType, dimension > QuadratureTraitsType;
174 static const IntegrationPointListType &
getQuadrature(
const GeometryType &geometry,
177 assert( geometry.isCube() || geometry.isSimplex() );
178 assert( order >= 0 );
180 static PointQuadratureType quad( geometry,
187 static const IntegrationPointListType &
getQuadrature(
const GeometryType &geometry,
188 const GeometryType &elementGeometry,
191 return getQuadrature(geometry, order);
208 template<
class FieldImp,
template<
class,
int >
class QuadratureTraits >
214 enum { dimension = 1 };
219 typedef QuadratureTraits< FieldType, dimension > QuadratureTraitsType;
230 static const IntegrationPointListType &
getQuadrature(
const GeometryType &geometry,
233 assert( geometry.isCube() || geometry.isSimplex() );
234 assert( order >= 0 );
235 return QuadCreator< 0 > :: template provideQuad< LineQuadratureType > ( geometry, order );
239 static const IntegrationPointListType &
getQuadrature(
const GeometryType &geometry,
240 const GeometryType &elementGeometry,
243 assert( geometry.isCube() || geometry.isSimplex() );
244 assert( order >= 0 );
247 return ( elementGeometry.isSimplex() ) ?
249 QuadCreator< 1 > :: template provideQuad< LineQuadratureType > ( geometry, order ) ;
266 template<
class FieldImp,
template<
class,
int >
class QuadratureTraits >
272 enum { dimension = 2 };
277 typedef QuadratureTraits< FieldType, dimension > QuadratureTraitsType;
290 static const IntegrationPointListType &
getQuadrature(
const GeometryType &geometry,
293 assert( geometry.isCube() || geometry.isSimplex() );
294 assert( order >= 0 );
296 if( geometry.isSimplex() )
299 template provideQuad< SimplexQuadratureType > ( geometry, order );
304 template provideQuad< CubeQuadratureType > ( geometry, order ) ;
309 static const IntegrationPointListType &
getQuadrature(
const GeometryType &geometry,
310 const GeometryType &elementGeometry,
313 assert( geometry.isCube() || geometry.isSimplex() );
314 assert( order >= 0 );
317 if ( geometry.isSimplex() )
320 if( elementGeometry.isSimplex() )
322 else if( elementGeometry.isCube() )
324 else if( elementGeometry.isPrism() )
326 else if( elementGeometry.isPyramid() )
329 DUNE_THROW( RangeError,
"Element type not available for dimension 3" );
335 if( elementGeometry.isSimplex() )
337 else if( elementGeometry.isCube() )
339 else if( elementGeometry.isPrism() )
341 else if( elementGeometry.isPyramid() )
344 DUNE_THROW( RangeError,
"Element type not available for dimension 3" );
347 DUNE_THROW( RangeError,
"Element type not available for dimension 2" );
350 template provideQuad< SimplexQuadratureType >( geometry, 0 );
367 template<
class FieldImp,
template<
class,
int >
class QuadratureTraits >
373 enum { dimension = 3 };
378 typedef QuadratureTraits< FieldType, dimension > QuadratureTraitsType;
395 static const IntegrationPointListType &
getQuadrature(
const GeometryType &geometry,
398 assert( geometry.isCube() || geometry.isSimplex()
399 || geometry.isPrism() || geometry.isPyramid() );
400 assert( order >= 0 );
402 if( geometry.isSimplex() )
405 if( geometry.isCube() )
409 if( geometry.isPrism() )
412 if( geometry.isPyramid() )
416 DUNE_THROW( RangeError,
"Element type not available for dimension 3" );
422 static const IntegrationPointListType &
getQuadrature(
const GeometryType &geometry,
423 const GeometryType &elementGeometry,
426 DUNE_THROW( RangeError,
"QuadProvider::getQuadrature not implemented for 3d face quadratures!" );
446 #endif // #ifndef DUNE_FEM_QUADPROVIDER_HH static IdProvider & instance()
Access to the singleton object.
Definition: idprovider.hh:17
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, int order)
Access to the quadrature implementations.
Definition: quadprovider.hh:395
unsigned int size() const
Definition: array.hh:617
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, int order)
Access to the quadrature implementations.
Definition: quadprovider.hh:230
QuadratureTraitsType::IntegrationPointListType IntegrationPointListType
type of integration point list implementation
Definition: quadprovider.hh:226
FieldImp FieldType
Definition: quadprovider.hh:371
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, const GeometryType &elementGeometry, int order)
Access to the quadrature implementations.
Definition: quadprovider.hh:131
QuadratureTraitsType::PyramidQuadratureType PyramidQuadratureType
type of pyramid quadrature
Definition: quadprovider.hh:388
QuadratureTraitsType::SimplexQuadratureType SimplexQuadratureType
type of simplex quadrature
Definition: quadprovider.hh:281
QuadratureTraitsType::LineQuadratureType LineQuadratureType
type of line quadrature
Definition: quadprovider.hh:223
QuadratureTraitsType::PointQuadratureType PointQuadratureType
type of point quadrature
Definition: quadprovider.hh:167
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, int order)
Access to the quadrature implementations.
Definition: quadprovider.hh:290
QuadratureTraitsType::CubeQuadratureType CubeQuadratureType
type of cube quadrature
Definition: quadprovider.hh:283
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, const GeometryType &elementGeometry, int order)
Access to the quadrature implementations.
Definition: quadprovider.hh:239
FieldImp FieldType
Definition: quadprovider.hh:270
QuadratureTraitsType::CubeQuadratureType CubeQuadratureType
type of cube quadrature
Definition: quadprovider.hh:384
QuadratureTraitsType::IntegrationPointListType IntegrationPointListType
type of integration point list implementation
Definition: quadprovider.hh:391
QuadratureTraitsType::IntegrationPointListType IntegrationPointListType
type of integration point list implementation
Definition: quadprovider.hh:121
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, int order)
Access to the quadrature implementations.
Definition: quadprovider.hh:124
QuadratureTraitsType::IntegrationPointListType IntegrationPointListType
type of integration point list implementation
Definition: quadprovider.hh:170
Definition: coordinate.hh:4
QuadratureTraitsType::SimplexQuadratureType SimplexQuadratureType
type of simplex quadrature
Definition: quadprovider.hh:382
the actual quadrature storage
Definition: quadprovider.hh:25
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, const GeometryType &elementGeometry, int order)
Access to the quadrature implementations.
Definition: quadprovider.hh:309
FieldImp FieldType
Definition: quadprovider.hh:212
QuadratureTraitsType::PrismQuadratureType PrismQuadratureType
type of prims quadrature
Definition: quadprovider.hh:386
QuadratureTraitsType::IntegrationPointListType IntegrationPointListType
type of integration point list implementation
Definition: quadprovider.hh:286
static const QuadImp & provideQuad(const GeometryType &geometry, unsigned int order)
provide quadrature
Definition: quadprovider.hh:77
FieldImp FieldType
Definition: quadprovider.hh:156
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, const GeometryType &elementGeometry, int order)
Definition: quadprovider.hh:422
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, const GeometryType &elementGeometry, int order)
Access to the quadrature implementations.
Definition: quadprovider.hh:187
provide a single instance pool of quadratures
Definition: quadprovider.hh:103
FieldImp FieldType
Definition: quadprovider.hh:106
static bool singleThreadMode()
returns true if program is operating on one thread currently
Definition: threadmanager.hh:217
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, int order)
Access to the quadrature implementations.
Definition: quadprovider.hh:174
QuadratureTraitsType::CubeQuadratureType CubeQuadratureType
type for cube quadrature
Definition: quadprovider.hh:117