1 #ifndef DUNE_POLYNOMIALBASIS_HH
2 #define DUNE_POLYNOMIALBASIS_HH
6 #include <dune/common/fmatrix.hh>
58 template<
class Eval,
class CM,
class D=
double,
class R=
double >
62 typedef Eval Evaluator;
69 static const unsigned int dimension = Evaluator::dimension;
70 static const unsigned int dimRange = Evaluator::dimRange*CoefficientMatrix::blockSize;
73 FieldMatrix<R,dimRange,dimension> >
Traits;
74 typedef typename Evaluator::Basis
Basis;
105 const unsigned int size ()
const
112 std::vector<typename Traits::RangeType>& out)
const
120 std::vector<typename Traits::JacobianType>& out)
const
126 template<
unsigned int deriv,
class F >
131 template<
unsigned int deriv,
class DVector,
class F >
132 void evaluate (
const DVector &x, F *values )
const
134 assert( DVector::dimension ==
dimension);
138 evaluate<deriv>( bx, values );
141 template <
bool dummy,
class DVector>
146 assert( DVector::dimension ==
dimension);
148 for(
unsigned int d = 0; d <
dimension; ++d )
153 template <
bool dummy>
161 template<
unsigned int deriv,
class DVector,
class RVector >
162 void evaluate (
const DVector &x, RVector &values )
const
164 assert(values.size()>=
size());
172 evaluate<0>(x,values);
174 template<
class DVector,
class RVector >
175 void evaluate (
const DVector &x, RVector &values )
const
177 assert( DVector::dimension ==
dimension);
179 for(
unsigned int d = 0; d <
dimension; ++d )
181 evaluate<0>( bx, values );
184 template<
unsigned int deriv,
class Vector >
187 assert(values.size()>=
size());
188 coeffMatrix_->template mult<deriv>(
eval_.template evaluate<deriv>( x ), values );
190 template<
unsigned int deriv,
class Fy >
194 evaluateSingle<deriv>(x,
reinterpret_cast<std::vector< FieldVector<Fy,LFETensor<Fy,dimension,deriv>::size*
dimRange> >&>(values));
196 template<
unsigned int deriv,
class Fy >
200 evaluateSingle<deriv>(x,
reinterpret_cast<std::vector< FieldVector<Fy,LFETensor<Fy,dimension,deriv>::size*
dimRange> >&>(values));
206 assert(values.size()>=
size());
207 evaluateSingle<1>(x,
reinterpret_cast<std::vector<FieldVector<Fy,dimRange*dimension>
>&>(values));
209 template<
class DVector,
class RVector >
210 void jacobian (
const DVector &x, RVector &values )
const
212 assert( DVector::dimension ==
dimension);
214 for(
unsigned int d = 0; d <
dimension; ++d )
222 assert(values.size()>=
size());
248 template<
class Eval,
class CM = SparseCoeffMatrix<
typename Eval::Field,Eval::dimRange>,
249 class D=
double,
class R=
double>
257 typedef Eval Evaluator;
266 :
Base(basis,coeffMatrix_,0)
269 template <
class Matrix>
272 coeffMatrix_.fill(matrix);
273 this->
size_ = coeffMatrix_.size();
275 template <
class Matrix>
278 coeffMatrix_.fill(matrix);
279 assert(size<=coeffMatrix_.size());
289 #endif // DUNE_POLYNOMIALBASIS_HH