DUNE-FEM (unstable)

quadprovider.hh
1 #ifndef DUNE_FEM_QUADPROVIDER_HH
2 #define DUNE_FEM_QUADPROVIDER_HH
3 
4 #include <iostream>
5 #include <memory>
6 #include <map>
7 #include <vector>
8 
10 #include <dune/fem/quadrature/quadratureimp.hh>
11 #include <dune/fem/quadrature/idprovider.hh>
12 #include <dune/fem/misc/mpimanager.hh>
13 
14 namespace Dune
15 {
16 
17  namespace Fem
18  {
19 
26  {
27  int id_;
28 
29  // something like maxOrder
30  static const int maxFirst = 25 ;
31  // something like different quadratures of the same order
32  static const int maxSecond = 10 ;
33  public:
35  FemQuadratureKey() : id_( -1 ) {}
36 
38  FemQuadratureKey( const FemQuadratureKey& key ) = default;
39 
40  // this may need to be adjusted in case more than 100 quadratures
41  // need to be stored
42  static const int highest_order = maxFirst * maxSecond ;
43 
45  FemQuadratureKey( const int first, const int second )
46  : id_( second * maxFirst + first )
47  {
48  assert( first < maxFirst );
49  assert( second < maxSecond );
50  }
51 
53  FemQuadratureKey( const int first )
54  : id_( first )
55  {
56  assert( first < maxFirst );
57  }
58 
60  operator int () const { return id_; }
61 
63  int first () const { return id_ % highest_order ; }
65  int second () const { return id_ / highest_order ; }
66  };
67 
68 
78  template< unsigned int dummy >
80  {
82  template< class QuadImp, class QuadratureKey, unsigned int >
83  class QuadratureStorage;
84  private:
86  template< class QuadImp, class QuadratureKey >
87  class QuadratureStorage< QuadImp, QuadratureKey, dummy >
88  {
89  public:
90  typedef QuadImp QuadType;
91 
92  protected:
93  struct Storage
94  {
95  typedef std :: map< QuadratureKey, std::unique_ptr< QuadType > > StorageType;
96  std::mutex mutex_;
97  StorageType storage_;
98 
99  static QuadImp* create( const GeometryType &geometry, const QuadratureKey& key )
100  {
101  return instance().createImpl( geometry, key );
102  }
103 
104  private:
105  static Storage& instance()
106  {
108  }
109 
110  QuadImp* createImpl( const GeometryType &geometry, const QuadratureKey& key )
111  {
112  std::lock_guard< std::mutex > guard( mutex_ );
113 
114  auto& quadPtr = storage_[ key ];
115  if( ! quadPtr )
116  {
117  quadPtr.reset( new QuadImp( geometry, key, IdProvider :: instance().newId() ) );
118  }
119 
120  assert( quadPtr );
121  return quadPtr.operator->();
122  }
123  };
124 
125  typedef std :: map< QuadratureKey, std::unique_ptr< QuadType, Dune::null_deleter<QuadType> > > PointerStorageType;
126  PointerStorageType quadPtrs_;
127 
128  public:
129  QuadratureStorage () {}
130 
131  QuadType &getQuadrature( const GeometryType &geometry, const QuadratureKey& key )
132  {
133  auto& quadPtr = quadPtrs_[ key ];
134  if( ! quadPtr )
135  {
136  // create is mutex protected
137  quadPtr.reset( Storage::create( geometry, key ) );
138  }
139 
140  assert( quadPtr );
141  return *quadPtr;
142  }
143  };
144 
146  template< class QuadImp>
147  class QuadratureStorage< QuadImp, int, dummy > // QuadratureKey == int
148  {
149  public:
150  typedef QuadImp QuadType;
151 
152  protected:
153  struct Storage
154  {
155  std::mutex mutex_;
156 
157  // vector storing the actual objects
158  std::vector< std::unique_ptr< QuadType > > storage_;
159  Storage() : storage_( QuadType :: maxOrder() + 1 )
160  {}
161 
162  static QuadType* create( const GeometryType &geometry, int order )
163  {
164  return instance().createImpl( geometry, order );
165  }
166 
167  private:
168  static Storage& instance()
169  {
171  }
172 
173  QuadType* createImpl( const GeometryType &geometry, int order )
174  {
175  std::lock_guard< std::mutex > guard( mutex_ );
176 
177  auto& quadPtr = storage_[ order ];
178  if( ! quadPtr )
179  {
180  quadPtr.reset( new QuadImp( geometry, order, IdProvider :: instance().newId() ) );
181  }
182  assert( quadPtr );
183  return quadPtr.operator ->();
184  }
185  };
186 
187  typedef std::vector< QuadType* > QuadPointerVecType;
188  // store all the pointers for all threads separately to avoid race conditions
189  QuadPointerVecType quadPtrs_;
190 
191  public:
192  QuadratureStorage ()
193  : quadPtrs_( QuadPointerVecType( QuadType :: maxOrder() + 1, nullptr ))
194  {
195  }
196 
197  public:
198  QuadImp &getQuadrature( const GeometryType &geometry, int order )
199  {
200  if(order >= int(quadPtrs_.size()) )
201  {
202 #ifndef NDEBUG
203  static thread_local bool showMessage = true ;
204  if( showMessage )
205  {
206  std::cerr << "WARNING: QuadratureStorage::getQuadrature: A quadrature of order " << order
207  << " is not implemented!" << std::endl
208  << "Choosing maximum order: " << quadPtrs_.size()-1 << std::endl << std::endl;
209  showMessage = false;
210  }
211 #endif
212  order = quadPtrs_.size() - 1;
213  }
214 
215  auto& quadPtr = quadPtrs_[ order ];
216  if( ! quadPtr )
217  {
218  // create is mutex protected
219  quadPtr = Storage::create( geometry, order );
220  }
221 
222  assert( quadPtr );
223  return *( quadPtr );
224  }
225  }; // end class QuadratureStorage
226 
228  template< class QuadImp >
229  class QuadratureStorage< QuadImp, FemQuadratureKey, dummy >
230  : public QuadratureStorage< QuadImp, int, dummy >
231  {
232  };
233 
234  public:
240  template< class QuadImp, class QuadratureKey >
241  static const QuadImp &provideQuad( const GeometryType& geometry,
242  const QuadratureKey& key )
243  {
244  // QuadratureStorage stores only pointers to the quadratures that are
245  // created and stored by a singleton storage
246  static thread_local QuadratureStorage< QuadImp, QuadratureKey, dummy > storage;
247  return storage.getQuadrature( geometry, key );
248  }
249 
256  template< class QuadImp, class QuadratureKey >
257  static const QuadImp &provideQuad( const GeometryType& geometry,
258  const QuadratureKey& key,
259  const int defaultOrder )
260  {
261  // this function should only be called for geometry types equal to none
262  assert( geometry.isNone() );
263  DUNE_THROW(NotImplemented,"provideQuad for polyhedral cells (defaultOrder = 0) not implemented for arbitrary QuadratureKey!");
264  QuadImp* ptr = nullptr;
265  return *ptr;
266  }
267 
274  template< class QuadImp >
275  static const QuadImp &provideQuad( const GeometryType& geometry,
276  const int ,
277  const int defaultOrder )
278  {
279  assert( geometry.isNone() );
280  // QuadratureStorage stores only pointers to the quadratures that are
281  // created and stored by a singleton storage
282  static thread_local QuadratureStorage< QuadImp, int, dummy > storage;
283  return storage.getQuadrature( geometry, defaultOrder );
284  }
285  };
286 
302  template< typename FieldImp, int dim, template< class, int > class QuadratureTraits >
304  {
305  public:
306  typedef FieldImp FieldType;
307 
308  enum { dimension = dim };
309 
310  private:
312 
313  typedef QuadratureTraits< FieldType, dimension > QuadratureTraitsType;
314 
315  public:
317  typedef typename QuadratureTraitsType :: CubeQuadratureType CubeQuadratureType;
318 
320  typedef typename QuadratureTraitsType :: IntegrationPointListType
322 
324  typedef typename QuadratureTraitsType :: QuadratureKeyType QuadratureKeyType;
325 
327  static const IntegrationPointListType &getQuadrature( const GeometryType &geometry,
328  const QuadratureKeyType& quadKey )
329  {
330  assert( geometry.isCube() );
331  return QuadCreator< 0 > :: template provideQuad< CubeQuadratureType > ( geometry, quadKey );
332  }
334  static const IntegrationPointListType &getQuadrature( const GeometryType &geometry,
335  const GeometryType &elementGeometry,
336  const QuadratureKeyType& quadKey )
337  {
338  return getQuadrature( geometry, quadKey );
339  }
340 
341  QuadratureProvider() = delete;
342  QuadratureProvider( const ThisType& ) = delete;
343  QuadratureProvider &operator=( const ThisType& ) = delete;
344  };
345 
346 
347 
349  template< typename FieldImp, template< class, int > class QuadratureTraits >
350  class QuadratureProvider< FieldImp, 0, QuadratureTraits >
351  {
352  public:
353  typedef FieldImp FieldType;
354 
355  enum { dimension = 0 };
356 
357  private:
359 
360  typedef QuadratureTraits< FieldType, dimension > QuadratureTraitsType;
361 
362  public:
364  typedef typename QuadratureTraitsType :: PointQuadratureType PointQuadratureType;
365 
367  typedef typename QuadratureTraitsType :: IntegrationPointListType IntegrationPointListType;
368 
370  typedef typename QuadratureTraitsType :: QuadratureKeyType QuadratureKeyType;
371 
372  class PointQuadratureStorage : public PointQuadratureType
373  {
374  public:
375  // only call IdProvider ::instance().newId() when object is created
376  PointQuadratureStorage( const GeometryType &geometry, const QuadratureKeyType& quadKey )
377  : PointQuadratureType( geometry, quadKey, IdProvider::instance().newId() )
378  {}
379  };
380 
382  static const IntegrationPointListType &getQuadrature( const GeometryType &geometry,
383  const QuadratureKeyType& quadKey )
384  {
385  assert( geometry.isCube() || geometry.isSimplex() );
386  return Singleton< PointQuadratureStorage > :: instance( geometry, quadKey );
387  }
388 
390  static const IntegrationPointListType &getQuadrature( const GeometryType &geometry,
391  const GeometryType &elementGeometry,
392  const QuadratureKeyType& quadKey )
393  {
394  return getQuadrature(geometry, quadKey);
395  }
396 
397  QuadratureProvider() = delete;
398  QuadratureProvider( const ThisType& ) = delete;
399  QuadratureProvider &operator=( const ThisType& ) = delete;
400  };
401 
402 
403 
405  template< class FieldImp, template< class, int > class QuadratureTraits >
406  class QuadratureProvider< FieldImp, 1, QuadratureTraits >
407  {
408  public:
409  typedef FieldImp FieldType;
410 
411  enum { dimension = 1 };
412 
413  private:
415 
416  typedef QuadratureTraits< FieldType, dimension > QuadratureTraitsType;
417 
418  public:
420  typedef typename QuadratureTraitsType :: LineQuadratureType LineQuadratureType;
421 
423  typedef typename QuadratureTraitsType :: IntegrationPointListType IntegrationPointListType;
424 
426  typedef typename QuadratureTraitsType :: QuadratureKeyType QuadratureKeyType;
427 
429  static const IntegrationPointListType &getQuadrature( const GeometryType &geometry,
430  const QuadratureKeyType& quadKey )
431  {
432  assert( geometry.isCube() || geometry.isSimplex() );
433  return QuadCreator< 0 > :: template provideQuad< LineQuadratureType > ( geometry, quadKey );
434  }
435 
437  static const IntegrationPointListType &getQuadrature( const GeometryType &geometry,
438  const GeometryType &elementGeometry,
439  const QuadratureKeyType& quadKey )
440  {
441  assert( geometry.isCube() || geometry.isSimplex() );
442  // we need here to distinguish between the basic types
443  // otherwise the this won't work for UGGrid
444  return ( elementGeometry.isSimplex() ) ?
445  QuadCreator< 0 > :: template provideQuad< LineQuadratureType > ( geometry, quadKey ) :
446  QuadCreator< 1 > :: template provideQuad< LineQuadratureType > ( geometry, quadKey ) ;
447  }
448 
449  QuadratureProvider() = delete;
450  QuadratureProvider( const ThisType& ) = delete;
451  QuadratureProvider &operator=( const ThisType& ) = delete;
452  };
453 
454 
455 
457  template< class FieldImp, template< class, int > class QuadratureTraits >
458  class QuadratureProvider< FieldImp, 2, QuadratureTraits >
459  {
460  public:
461  typedef FieldImp FieldType;
462 
463  enum { dimension = 2 };
464 
465  private:
467 
468  typedef QuadratureTraits< FieldType, dimension > QuadratureTraitsType;
469 
470  public:
472  typedef typename QuadratureTraitsType :: SimplexQuadratureType SimplexQuadratureType;
474  typedef typename QuadratureTraitsType :: CubeQuadratureType CubeQuadratureType;
475 
477  typedef typename QuadratureTraitsType :: IntegrationPointListType IntegrationPointListType;
478 
480  typedef typename QuadratureTraitsType :: QuadratureKeyType QuadratureKeyType;
481 
483  static const IntegrationPointListType &getQuadrature( const GeometryType &geometry,
484  const QuadratureKeyType& quadKey )
485  {
486  assert( geometry.isCube() || geometry.isSimplex() || geometry.isNone() );
487 
488  if( geometry.isSimplex() )
489  {
490  return QuadCreator< 0 > ::
491  template provideQuad< SimplexQuadratureType > ( geometry, quadKey );
492  }
493  else if( geometry.isCube() )
494  {
495  return QuadCreator< 1 > ::
496  template provideQuad< CubeQuadratureType > ( geometry, quadKey ) ;
497  }
498  else // type == None
499  {
500  // dummy return for polygonal grid cells, i.e. geometry type none
501  return QuadCreator< 1 > :: template provideQuad< CubeQuadratureType > ( geometry, 0 );
502  }
503  }
504 
506  static const IntegrationPointListType &getQuadrature( const GeometryType &geometry,
507  const GeometryType &elementGeometry,
508  const QuadratureKeyType& quadKey )
509  {
510  assert( geometry.isCube() || geometry.isSimplex() );
511 
512  // if geometry is simplex return simplex quadrature
513  if ( geometry.isSimplex() )
514  {
515  // check element geometry to provide quadratures with different ids
516  if( elementGeometry.isSimplex() )
517  return QuadCreator< 0 > :: template provideQuad< SimplexQuadratureType > ( geometry, quadKey ) ;
518  else if( elementGeometry.isCube() )
519  return QuadCreator< 1 > :: template provideQuad< SimplexQuadratureType > ( geometry, quadKey ) ;
520  else if( elementGeometry.isPrism() )
521  return QuadCreator< 2 > :: template provideQuad< SimplexQuadratureType > ( geometry, quadKey ) ;
522  else if( elementGeometry.isPyramid() )
523  return QuadCreator< 3 > :: template provideQuad< SimplexQuadratureType > ( geometry, quadKey ) ;
524  else
525  DUNE_THROW( RangeError, "Element type not available for dimension 3" );
526  }
527  else
528  {
529  // return cube quadrature
530  // check element geometry to provide quadratures with different ids
531  if( elementGeometry.isSimplex() )
532  return QuadCreator< 4 > :: template provideQuad< CubeQuadratureType > ( geometry, quadKey ) ;
533  else if( elementGeometry.isCube() )
534  return QuadCreator< 5 > :: template provideQuad< CubeQuadratureType > ( geometry, quadKey ) ;
535  else if( elementGeometry.isPrism() )
536  return QuadCreator< 6 > :: template provideQuad< CubeQuadratureType > ( geometry, quadKey ) ;
537  else if( elementGeometry.isPyramid() )
538  return QuadCreator< 7 > :: template provideQuad< CubeQuadratureType > ( geometry, quadKey ) ;
539  else
540  DUNE_THROW( RangeError, "Element type not available for dimension 3" );
541  }
542 
543  DUNE_THROW( RangeError, "Element type not available for dimension 2" );
544  // dummy return
545  return QuadCreator< 0 > ::
546  template provideQuad< SimplexQuadratureType >( geometry, quadKey, 0 );
547  }
548 
549  QuadratureProvider() = delete;
550  QuadratureProvider( const ThisType& ) = delete;
551  QuadratureProvider &operator=( const ThisType& ) = delete;
552  };
553 
554 
555 
557  template< class FieldImp, template< class, int > class QuadratureTraits >
558  class QuadratureProvider< FieldImp, 3, QuadratureTraits >
559  {
560  public:
561  typedef FieldImp FieldType;
562 
563  enum { dimension = 3 };
564 
565  private:
567 
568  typedef QuadratureTraits< FieldType, dimension > QuadratureTraitsType;
569 
570  public:
572  typedef typename QuadratureTraitsType :: SimplexQuadratureType SimplexQuadratureType;
574  typedef typename QuadratureTraitsType :: CubeQuadratureType CubeQuadratureType;
576  typedef typename QuadratureTraitsType :: PrismQuadratureType PrismQuadratureType;
578  typedef typename QuadratureTraitsType :: PyramidQuadratureType PyramidQuadratureType;
579 
581  typedef typename QuadratureTraitsType :: IntegrationPointListType IntegrationPointListType;
582 
584  typedef typename QuadratureTraitsType :: QuadratureKeyType QuadratureKeyType;
585 
587  static const IntegrationPointListType &getQuadrature( const GeometryType &geometry,
588  const QuadratureKeyType& quadKey )
589  {
590  assert( geometry.isCube() || geometry.isSimplex() || geometry.isNone()
591  || geometry.isPrism() || geometry.isPyramid() );
592 
593  if( geometry.isSimplex() )
594  return QuadCreator< 0 > :: template provideQuad< SimplexQuadratureType >
595  ( geometry, quadKey );
596  if( geometry.isCube() )
597  return QuadCreator< 1 > :: template provideQuad< CubeQuadratureType >
598  ( geometry, quadKey );
599 
600  if( geometry.isPrism() )
601  return QuadCreator< 2 > :: template provideQuad< PrismQuadratureType >
602  ( geometry, quadKey );
603  if( geometry.isPyramid() )
604  return QuadCreator< 3 > :: template provideQuad< PyramidQuadratureType >
605  ( geometry, quadKey );
606 
607  if( geometry.isNone() )
608  {
609  // dummy return for polyhedral grid cells
610  return QuadCreator< 1 > :: template provideQuad< CubeQuadratureType > ( geometry, quadKey, 0 );
611  }
612 
613  DUNE_THROW( RangeError, "Element type not available for dimension 3" );
614  // dummy return
615  return QuadCreator< 0 > :: template provideQuad< SimplexQuadratureType >
616  ( geometry, quadKey, 0 );
617  }
618 
619  static const IntegrationPointListType &getQuadrature( const GeometryType &geometry,
620  const GeometryType &elementGeometry,
621  const QuadratureKeyType& quadKey )
622  {
623  DUNE_THROW( RangeError, "QuadProvider::getQuadrature not implemented for 3d face quadratures!" );
624  // dummy return
625  return QuadCreator< 0 > :: template provideQuad< SimplexQuadratureType >
626  ( geometry, quadKey, 0 );
627  }
628 
629  QuadratureProvider() = delete;
630  QuadratureProvider( const ThisType& ) = delete;
631  QuadratureProvider &operator=( const ThisType& ) = delete;
632  };
633 
634  } // namespace Fem
635 
636 } // namespace Dune
637 
638 #endif // #ifndef DUNE_FEM_QUADPROVIDER_HH
A simple quadrature key class for use FemPy.
Definition: quadprovider.hh:26
FemQuadratureKey(const FemQuadratureKey &key)=default
copy constructor
int first() const
return first component
Definition: quadprovider.hh:63
int second() const
return second component
Definition: quadprovider.hh:65
FemQuadratureKey()
empty constructor
Definition: quadprovider.hh:35
FemQuadratureKey(const int first)
constructor taking only order (fallback for standard Fem quadratures)
Definition: quadprovider.hh:53
FemQuadratureKey(const int first, const int second)
constructor taking to ids, like std::pair
Definition: quadprovider.hh:45
static IdProvider & instance()
Access to the singleton object.
Definition: idprovider.hh:21
the actual quadrature storage
Definition: quadprovider.hh:80
static const QuadImp & provideQuad(const GeometryType &geometry, const QuadratureKey &key)
provide quadrature
Definition: quadprovider.hh:241
static const QuadImp & provideQuad(const GeometryType &geometry, const int, const int defaultOrder)
provide quadrature
Definition: quadprovider.hh:275
static const QuadImp & provideQuad(const GeometryType &geometry, const QuadratureKey &key, const int defaultOrder)
provide quadrature
Definition: quadprovider.hh:257
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, const QuadratureKeyType &quadKey)
Access to the quadrature implementations.
Definition: quadprovider.hh:382
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, const GeometryType &elementGeometry, const QuadratureKeyType &quadKey)
Access to the quadrature implementations.
Definition: quadprovider.hh:390
QuadratureTraitsType ::IntegrationPointListType IntegrationPointListType
type of integration point list implementation
Definition: quadprovider.hh:367
QuadratureTraitsType ::QuadratureKeyType QuadratureKeyType
key for access of quadratures in the storage
Definition: quadprovider.hh:370
QuadratureTraitsType ::PointQuadratureType PointQuadratureType
type of point quadrature
Definition: quadprovider.hh:364
QuadratureTraitsType ::IntegrationPointListType IntegrationPointListType
type of integration point list implementation
Definition: quadprovider.hh:423
QuadratureTraitsType ::QuadratureKeyType QuadratureKeyType
key for access of quadratures in the storage
Definition: quadprovider.hh:426
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, const GeometryType &elementGeometry, const QuadratureKeyType &quadKey)
Access to the quadrature implementations.
Definition: quadprovider.hh:437
QuadratureTraitsType ::LineQuadratureType LineQuadratureType
type of line quadrature
Definition: quadprovider.hh:420
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, const QuadratureKeyType &quadKey)
Access to the quadrature implementations.
Definition: quadprovider.hh:429
QuadratureTraitsType ::CubeQuadratureType CubeQuadratureType
type of cube quadrature
Definition: quadprovider.hh:474
QuadratureTraitsType ::IntegrationPointListType IntegrationPointListType
type of integration point list implementation
Definition: quadprovider.hh:477
QuadratureTraitsType ::QuadratureKeyType QuadratureKeyType
key for access of quadratures in the storage
Definition: quadprovider.hh:480
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, const QuadratureKeyType &quadKey)
Access to the quadrature implementations.
Definition: quadprovider.hh:483
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, const GeometryType &elementGeometry, const QuadratureKeyType &quadKey)
Access to the quadrature implementations.
Definition: quadprovider.hh:506
QuadratureTraitsType ::SimplexQuadratureType SimplexQuadratureType
type of simplex quadrature
Definition: quadprovider.hh:472
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, const QuadratureKeyType &quadKey)
Access to the quadrature implementations.
Definition: quadprovider.hh:587
QuadratureTraitsType ::CubeQuadratureType CubeQuadratureType
type of cube quadrature
Definition: quadprovider.hh:574
QuadratureTraitsType ::QuadratureKeyType QuadratureKeyType
key for access of quadratures in the storage
Definition: quadprovider.hh:584
QuadratureTraitsType ::IntegrationPointListType IntegrationPointListType
type of integration point list implementation
Definition: quadprovider.hh:581
QuadratureTraitsType ::PrismQuadratureType PrismQuadratureType
type of prims quadrature
Definition: quadprovider.hh:576
QuadratureTraitsType ::SimplexQuadratureType SimplexQuadratureType
type of simplex quadrature
Definition: quadprovider.hh:572
QuadratureTraitsType ::PyramidQuadratureType PyramidQuadratureType
type of pyramid quadrature
Definition: quadprovider.hh:578
provide a single instance pool of quadratures
Definition: quadprovider.hh:304
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, const GeometryType &elementGeometry, const QuadratureKeyType &quadKey)
Access to the quadrature implementations.
Definition: quadprovider.hh:334
static const IntegrationPointListType & getQuadrature(const GeometryType &geometry, const QuadratureKeyType &quadKey)
Access to the quadrature implementations.
Definition: quadprovider.hh:327
QuadratureTraitsType ::CubeQuadratureType CubeQuadratureType
type for cube quadrature
Definition: quadprovider.hh:317
QuadratureTraitsType ::QuadratureKeyType QuadratureKeyType
key for access of quadratures in the storage
Definition: quadprovider.hh:324
QuadratureTraitsType ::IntegrationPointListType IntegrationPointListType
type of integration point list implementation
Definition: quadprovider.hh:321
static DUNE_EXPORT Object & instance(Args &&... args)
return singleton instance of given Object type.
Definition: singleton.hh:123
Unique label for each type of entities that can occur in DUNE grids.
Definition: type.hh:114
constexpr bool isPyramid() const
Return true if entity is a pyramid.
Definition: type.hh:304
constexpr bool isPrism() const
Return true if entity is a prism.
Definition: type.hh:309
constexpr bool isCube() const
Return true if entity is a cube of any dimension.
Definition: type.hh:324
constexpr bool isNone() const
Return true if entity is a singular of any dimension.
Definition: type.hh:355
constexpr bool isSimplex() const
Return true if entity is a simplex of any dimension.
Definition: type.hh:319
Default exception for dummy implementations.
Definition: exceptions.hh:263
Default exception class for range errors.
Definition: exceptions.hh:254
#define DUNE_THROW(E, m)
Definition: exceptions.hh:218
Dune namespace.
Definition: alignedallocator.hh:13
This file implements several utilities related to std::shared_ptr.
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (May 16, 22:29, 2024)