dune-localfunctions  2.7.0
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 
10 
11 namespace Dune
12 {
13  struct Identity
14  {
15  template <class T>
16  static T apply( const T &t )
17  {
18  return t;
19  }
20  };
21  /************************************************
22  * Class for providing a factory for basis
23  * functions over the set of reference elements.
24  * Is based on the TopologyFactory but additionally
25  * provides rebindes of the field type.
26  * The user provides factories for the pre basis and the
27  * interpolations. The default construction process of
28  * the basis is performed in this class.
29  ************************************************/
30  template< class PreBFactory,
31  class InterpolFactory,
32  unsigned int dim, unsigned int dimR,
33  class SF, class CF,
34  class PreBasisKeyExtractor = Identity >
36  {
37  static const unsigned int dimension = dim;
38  static const unsigned int dimRange = dimR;
39  typedef SF StorageField;
40  typedef CF ComputeField;
41  typedef PreBFactory PreBasisFactory;
42  typedef typename PreBasisFactory::Object PreBasis;
43  typedef InterpolFactory InterpolationFactory;
44  typedef typename InterpolationFactory::Object Interpolation;
45  typedef typename PreBasisFactory::template EvaluationBasisFactory<dim,SF>::Type MonomialBasisFactory;
49 
50  typedef const Basis Object;
51  typedef typename InterpolationFactory::Key Key;
52  template <unsigned int dd, class FF>
53  struct EvaluationBasisFactory
54  {
55  typedef typename PreBasisFactory::template EvaluationBasisFactory<dd,FF>::Type
57  };
58 
59  template< class Topology >
60  static Object *create ( const Key &key )
61  {
62  const typename PreBasisFactory::Key preBasisKey = PreBasisKeyExtractor::apply(key);
63  const PreBasis *preBasis = PreBasisFactory::template create<Topology>( preBasisKey );
64  const Interpolation *interpol = InterpolationFactory::template create<Topology>( key );
65  BasisMatrix< PreBasis, Interpolation, ComputeField > matrix( *preBasis, *interpol );
66 
67  const MonomialBasis *monomialBasis = MonomialBasisFactory::template create< Topology >( preBasis->order() );
68 
69  Basis *basis = new Basis( *monomialBasis );
70 
71  basis->fill( matrix );
72 
73  InterpolationFactory::release(interpol);
74  PreBasisFactory::release(preBasis);
75 
76  return basis;
77  }
79  static void release( Object *object)
80  {
81  const MonomialBasis *monomialBasis = &(object->basis());
82  delete object;
83  MonomialBasisFactory::release( monomialBasis );
84  }
85  };
86 }
87 
88 #endif // #ifndef DUNE_DEFAULTBASISFACTORY_HH
Dune::DefaultBasisFactory::Key
InterpolationFactory::Key Key
Definition: defaultbasisfactory.hh:59
Dune::PolynomialBasisWithMatrix::fill
void fill(const Matrix &matrix)
Definition: polynomialbasis.hh:353
Dune::DefaultBasisFactory::create
static Object * create(const Key &key)
Definition: defaultbasisfactory.hh:68
Dune::DefaultBasisFactory::PreBasisFactory
PreBFactory PreBasisFactory
Definition: defaultbasisfactory.hh:49
Dune::DefaultBasisFactory::MonomialBasis
MonomialBasisFactory::Object MonomialBasis
Definition: defaultbasisfactory.hh:54
Dune
Definition: bdfmcube.hh:15
Dune::Identity::apply
static T apply(const T &t)
Definition: defaultbasisfactory.hh:16
Dune::DefaultBasisFactory::EvaluationBasisFactory::Type
PreBasisFactory::template EvaluationBasisFactory< dd, FF >::Type Type
Definition: defaultbasisfactory.hh:64
Dune::MonomialBasisFactory::Object
const typedef VirtualMonomialBasis< dimension, F > Object
Definition: monomialbasis.hh:821
Dune::DefaultBasisFactory::Evaluator
StandardEvaluator< MonomialBasis > Evaluator
Definition: defaultbasisfactory.hh:55
Dune::DefaultBasisFactory::Basis
PolynomialBasisWithMatrix< Evaluator, SparseCoeffMatrix< SF, dimRange > > Basis
Definition: defaultbasisfactory.hh:56
Dune::StandardEvaluator
Definition: basisevaluator.hh:127
Dune::DefaultBasisFactory::StorageField
SF StorageField
Definition: defaultbasisfactory.hh:47
basismatrix.hh
Dune::DefaultBasisFactory::Object
const typedef Basis Object
Definition: defaultbasisfactory.hh:58
Dune::BasisMatrix
Definition: basismatrix.hh:25
Dune::DefaultBasisFactory::Interpolation
InterpolationFactory::Object Interpolation
Definition: defaultbasisfactory.hh:52
Dune::DefaultBasisFactory::PreBasis
PreBasisFactory::Object PreBasis
Definition: defaultbasisfactory.hh:50
Dune::Identity
Definition: defaultbasisfactory.hh:13
Dune::DefaultBasisFactory::ComputeField
CF ComputeField
Definition: defaultbasisfactory.hh:48
Dune::MonomialBasis
Definition: monomialbasis.hh:73
Dune::DefaultBasisFactory::release
static void release(Object *object)
release the object returned by the create methods
Definition: defaultbasisfactory.hh:87
Dune::DefaultBasisFactory::dimRange
static const unsigned int dimRange
Definition: defaultbasisfactory.hh:46
Dune::DefaultBasisFactory::InterpolationFactory
InterpolFactory InterpolationFactory
Definition: defaultbasisfactory.hh:51
Dune::DefaultBasisFactory::dimension
static const unsigned int dimension
Definition: defaultbasisfactory.hh:45
Dune::LagrangeInterpolationFactory::Key
LagrangePointSetFactory::Key Key
Definition: lagrange/interpolation.hh:103
Dune::MonomialBasisFactory::release
static void release(Object *object)
Definition: monomialbasis.hh:834
Dune::DefaultBasisFactory::MonomialBasisFactory
PreBasisFactory::template EvaluationBasisFactory< dim, SF >::Type MonomialBasisFactory
Definition: defaultbasisfactory.hh:53
Dune::DefaultBasisFactory
Definition: defaultbasisfactory.hh:35
Dune::PolynomialBasisWithMatrix
Definition: polynomialbasis.hh:333