5#ifndef DUNE_DEFAULTBASISFACTORY_HH
6#define DUNE_DEFAULTBASISFACTORY_HH
11#include <dune/localfunctions/utility/basismatrix.hh>
18 static T apply(
const T &t )
32 template<
class PreBFactory,
33 class InterpolFactory,
34 unsigned int dim,
unsigned int dimR,
37 class PreBasisKeyExtractor = Identity >
38 struct DefaultBasisFactory
40 static const unsigned int dimension = dim;
41 static const unsigned int dimRange = dimR;
44 typedef SF StorageField;
45 typedef CF ComputeField;
46 typedef PreBFactory PreBasisFactory;
47 typedef typename PreBasisFactory::Object PreBasis;
48 typedef InterpolFactory InterpolationFactory;
49 typedef typename InterpolationFactory::Object Interpolation;
50 typedef typename PreBasisFactory::template EvaluationBasisFactory<dim,SF>::Type MonomialBasisFactory;
51 typedef typename MonomialBasisFactory::Object MonomialBasis;
52 typedef StandardEvaluator< MonomialBasis > Evaluator;
53 typedef PolynomialBasisWithMatrix< Evaluator, SparseCoeffMatrix< SF, dimRange >, D, R > Basis;
55 typedef const Basis Object;
56 typedef typename InterpolationFactory::Key Key;
57 template <
unsigned int dd,
class FF>
58 struct EvaluationBasisFactory
60 typedef typename PreBasisFactory::template EvaluationBasisFactory<dd,FF>::Type
64 template< GeometryType::Id geometryId >
65 static Object *create (
const Key &key )
67 const typename PreBasisFactory::Key preBasisKey = PreBasisKeyExtractor::apply(key);
68 const PreBasis *preBasis = PreBasisFactory::template create<geometryId>( preBasisKey );
69 const Interpolation *interpol = InterpolationFactory::template create<geometryId>( key );
70 BasisMatrix< PreBasis, Interpolation, ComputeField > matrix( *preBasis, *interpol );
72 const MonomialBasis *monomialBasis = MonomialBasisFactory::template create< geometryId >( preBasis->order() );
74 Basis *basis =
new Basis( *monomialBasis );
76 basis->fill( matrix );
78 InterpolationFactory::release(interpol);
79 PreBasisFactory::release(preBasis);
84 static void release( Object *
object)
86 const MonomialBasis *monomialBasis = &(
object->basis());
88 MonomialBasisFactory::release( monomialBasis );
A few common exception classes.
Dune namespace.
Definition: alignedallocator.hh:13