dune-localfunctions 3.0-git
defaultbasisfactory.hh
Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=4 sw=2 sts=2:
3#ifndef DUNE_DEFAULTBASISFACTORY_HH
4#define DUNE_DEFAULTBASISFACTORY_HH
5
6#include <fstream>
7#include <dune/common/exceptions.hh>
8#include <dune/geometry/topologyfactory.hh>
9
11
12namespace Dune
13{
14 struct Identity
15 {
16 template <class T>
17 static T apply( const T &t )
18 {
19 return t;
20 }
21 };
22 /************************************************
23 * Class for providing a factory for basis
24 * functions over the set of reference elements.
25 * Is based on the TopologyFactory but additionally
26 * provides rebindes of the field type.
27 * The user provides factories for the pre basis and the
28 * interpolations. The default construction process of
29 * the basis is performed in this class.
30 ************************************************/
31 template< class PreBFactory,
32 class InterpolFactory,
33 unsigned int dim, unsigned int dimR,
34 class SF, class CF,
35 class PreBasisKeyExtractor = Identity >
36 struct DefaultBasisFactory;
37
38 template< class PreBFactory,
39 class InterpolFactory,
40 unsigned int dim, unsigned int dimR,
41 class SF, class CF,
42 class PreBasisKeyExtractor >
44 {
45 static const unsigned int dimension = dim;
46 static const unsigned int dimRange = dimR;
47
48 typedef PreBFactory PreBasisFactory;
49 typedef typename PreBasisFactory::Object PreBasis;
50 typedef InterpolFactory InterpolationFactory;
51 typedef typename InterpolationFactory::Object Interpolation;
52
53 typedef typename PreBasisFactory::template EvaluationBasisFactory<dim,SF>::Type MonomialBasisFactory;
57
58 typedef const Basis Object;
59 typedef typename InterpolationFactory::Key Key;
61 };
62
63 template< class PreBFactory,
64 class InterpolFactory,
65 unsigned int dim, unsigned int dimR,
66 class SF, class CF,
67 class PreBasisKeyExtractor >
69 : public TopologyFactory<
70 DefaultBasisFactoryTraits< PreBFactory,InterpolFactory,dim,dimR,SF,CF,PreBasisKeyExtractor >
71 >
72 {
74 static const unsigned int dimension = Traits::dimension;
75 static const unsigned int dimRange = Traits::dimRange;
76 typedef SF StorageField;
77 typedef CF ComputeField;
78 typedef typename Traits::Basis Basis;
80
81 typedef typename Traits::Object Object;
82 typedef typename Traits::Key Key;
83 template <unsigned int dd, class FF>
85 {
86 typedef typename Traits::PreBasisFactory::template EvaluationBasisFactory<dd,FF>::Type
88 };
89
90 template< class Topology >
91 static Object *createObject ( const Key &key )
92 {
93 const typename PreBasisFactory::Key preBasisKey = PreBasisKeyExtractor::apply(key);
94 const typename Traits::PreBasis *preBasis = Traits::PreBasisFactory::template create<Topology>( preBasisKey );
95 const typename Traits::Interpolation *interpol = Traits::InterpolationFactory::template create<Topology>( key );
97 typename Traits::Interpolation,
98 ComputeField > matrix( *preBasis, *interpol );
99
100 const typename Traits::MonomialBasis *monomialBasis = Traits::MonomialBasisFactory::template create< Topology >( preBasis->order() );
101
102 Basis *basis = new Basis( *monomialBasis );
103
104 basis->fill( matrix );
105
106 Traits::InterpolationFactory::release(interpol);
107 Traits::PreBasisFactory::release(preBasis);
108
109 return basis;
110 }
112 static void release( Object *object)
113 {
114 const typename Traits::MonomialBasis *monomialBasis = &(object->basis());
115 delete object;
116 Traits::MonomialBasisFactory::release( monomialBasis );
117 }
118 };
119}
120
121#endif // #ifndef DUNE_DEFAULTBASISFACTORY_HH
Definition brezzidouglasmarini1cube2d.hh:14
Definition basisevaluator.hh:130
Definition basismatrix.hh:25
Definition defaultbasisfactory.hh:15
static T apply(const T &t)
Definition defaultbasisfactory.hh:17
Definition defaultbasisfactory.hh:72
static const unsigned int dimRange
Definition defaultbasisfactory.hh:75
static Object * createObject(const Key &key)
Definition defaultbasisfactory.hh:91
DefaultBasisFactoryTraits< PreBFactory, InterpolFactory, dim, dimR, SF, CF, PreBasisKeyExtractor > Traits
Definition defaultbasisfactory.hh:73
static void release(Object *object)
release the object returned by the create methods
Definition defaultbasisfactory.hh:112
Traits::PreBasisFactory PreBasisFactory
Definition defaultbasisfactory.hh:79
Traits::Object Object
Definition defaultbasisfactory.hh:81
CF ComputeField
Definition defaultbasisfactory.hh:77
static const unsigned int dimension
Definition defaultbasisfactory.hh:74
SF StorageField
Definition defaultbasisfactory.hh:76
Traits::Basis Basis
Definition defaultbasisfactory.hh:78
Traits::Key Key
Definition defaultbasisfactory.hh:82
Definition defaultbasisfactory.hh:44
InterpolFactory InterpolationFactory
Definition defaultbasisfactory.hh:50
InterpolationFactory::Object Interpolation
Definition defaultbasisfactory.hh:51
PreBFactory PreBasisFactory
Definition defaultbasisfactory.hh:48
PreBasisFactory::template EvaluationBasisFactory< dim, SF >::Type MonomialBasisFactory
Definition defaultbasisfactory.hh:53
DefaultBasisFactory< PreBFactory, InterpolFactory, dim, dimR, SF, CF, PreBasisKeyExtractor > Factory
Definition defaultbasisfactory.hh:60
MonomialBasisFactory::Object MonomialBasis
Definition defaultbasisfactory.hh:54
PolynomialBasisWithMatrix< Evaluator, SparseCoeffMatrix< SF, dimRange > > Basis
Definition defaultbasisfactory.hh:56
StandardEvaluator< MonomialBasis > Evaluator
Definition defaultbasisfactory.hh:55
PreBasisFactory::Object PreBasis
Definition defaultbasisfactory.hh:49
const Basis Object
Definition defaultbasisfactory.hh:58
static const unsigned int dimRange
Definition defaultbasisfactory.hh:46
static const unsigned int dimension
Definition defaultbasisfactory.hh:45
InterpolationFactory::Key Key
Definition defaultbasisfactory.hh:59
Definition defaultbasisfactory.hh:85
Traits::PreBasisFactory::template EvaluationBasisFactory< dd, FF >::Type Type
Definition defaultbasisfactory.hh:87
Definition monomialbasis.hh:809
Definition polynomialbasis.hh:267
void fill(const Matrix &matrix)
Definition polynomialbasis.hh:285