dune-fem 2.8-git
registry.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_QUADRATURE_CACHING_REGISTRY_HH
2#define DUNE_FEM_QUADRATURE_CACHING_REGISTRY_HH
3
4// system includes
5#include <cstddef>
6#include <algorithm>
7#include <list>
8
9// dune-geometry includes
10#include <dune/geometry/type.hh>
11
12// dune-fem includes
15
16namespace Dune
17{
18
19 namespace Fem
20 {
21
22 // QuadratureStorageRegistry
23 // -------------------------
24
26 {
28
29 public:
31 {
32 virtual ~StorageInterface () {}
33 virtual void cacheQuadrature ( std::size_t id, std::size_t codim, std::size_t quadSize ) = 0;
34 virtual GeometryType type () const = 0;
35 };
36
37 // private:
38 typedef std::list< StorageInterface * > StorageListType;
39
41 {
42 std::size_t id;
43 std::size_t codim;
44 std::size_t size;
45 GeometryType type;
46 };
47
48 typedef std::list< QuadratureInfo > QuadratureInfoListType;
49
51 {
53 }
54
56 {
58 }
59
60 public:
62 static void initialize ()
63 {
66 }
67
68 static void registerStorage ( StorageInterface &storage )
69 {
71 storageList().push_back( &storage );
72
73 const GeometryType type = storage.type();
74 for( QuadratureInfoListType::iterator it = quadratureInfoList().begin(); it != quadratureInfoList().end(); ++it )
75 {
76 // only cache shape functions for quadratures with same geometry type
77 if( type == it->type )
78 storage.cacheQuadrature( it->id, it->codim, it->size );
79 }
80 }
81
82 static void unregisterStorage ( StorageInterface &storage )
83 {
85 const StorageListType::iterator pos
86 = std::find( storageList().begin(), storageList().end(), &storage );
87 if( pos != storageList().end() )
88 storageList().erase( pos );
89 }
90
91 template< class Quadrature >
92 static void registerQuadrature ( const Quadrature &quadrature )
93 {
94 registerQuadrature( quadrature, quadrature.geometryType(), Quadrature::codimension );
95 }
96
97 template< class Quadrature >
98 static void registerQuadrature ( const Quadrature &quadrature,
99 const GeometryType &type, std::size_t codim )
100 {
102 QuadratureInfo quadInfo = { quadrature.id(), codim, std::size_t( quadrature.nop() ), type };
103 quadratureInfoList().push_back( quadInfo );
104
105 for( typename StorageListType::iterator it = storageList().begin(); it != storageList().end(); ++it )
106 {
107 // only cache shape functions for quadratures with same geometry type
108 if( (*it)->type() == type )
109 (*it)->cacheQuadrature( quadInfo.id, quadInfo.codim, quadInfo.size );
110 }
111 }
112 };
113
114 } // namespace Fem
115
116} // namespace Dune
117
118#endif // #ifndef DUNE_FEM_QUADRATURE_CACHING_REGISTRY_HH
Definition: bindguard.hh:11
static bool singleThreadMode()
returns true if program is operating on one thread currently
Definition: threadmanager.hh:74
Definition: registry.hh:26
static StorageListType & storageList()
Definition: registry.hh:50
static void initialize()
initialize static variables
Definition: registry.hh:62
static void unregisterStorage(StorageInterface &storage)
Definition: registry.hh:82
std::list< QuadratureInfo > QuadratureInfoListType
Definition: registry.hh:48
static void registerQuadrature(const Quadrature &quadrature, const GeometryType &type, std::size_t codim)
Definition: registry.hh:98
static void registerStorage(StorageInterface &storage)
Definition: registry.hh:68
static void registerQuadrature(const Quadrature &quadrature)
Definition: registry.hh:92
std::list< StorageInterface * > StorageListType
Definition: registry.hh:38
static QuadratureInfoListType & quadratureInfoList()
Definition: registry.hh:55
virtual ~StorageInterface()
Definition: registry.hh:32
virtual void cacheQuadrature(std::size_t id, std::size_t codim, std::size_t quadSize)=0
std::size_t codim
Definition: registry.hh:43
GeometryType type
Definition: registry.hh:45
std::size_t id
Definition: registry.hh:42
std::size_t size
Definition: registry.hh:44
int nop() const
obtain the number of integration points
Definition: quadrature.hh:295
GeometryType geometryType() const
obtain GeometryType for this integration point list
Definition: quadrature.hh:362
size_t id() const
obtain the identifier of the integration point list
Definition: quadrature.hh:327
actual interface class for quadratures
Definition: quadrature.hh:405
@ codimension
Definition: quadrature.hh:435
static Object & instance(Args &&... args)
return singleton instance of given Object type.
Definition: singleton.hh:101