3 #ifndef DUNE_POLYNOMIALBASIS_HH
4 #define DUNE_POLYNOMIALBASIS_HH
8 #include <dune/common/fmatrix.hh>
60 template<
class Eval,
class CM,
class D=
double,
class R=
double >
64 typedef Eval Evaluator;
71 static const unsigned int dimension = Evaluator::dimension;
72 static const unsigned int dimRange = Evaluator::dimRange*CoefficientMatrix::blockSize;
75 FieldMatrix<R,dimRange,dimension> >
Traits;
76 typedef typename Evaluator::Basis
Basis;
80 const CoefficientMatrix &coeffMatrix,
97 const CoefficientMatrix &
matrix ()
const
107 const unsigned int size ()
const
114 std::vector<typename Traits::RangeType>& out)
const
122 std::vector<typename Traits::JacobianType>& out)
const
128 template<
unsigned int deriv,
class F >
129 void evaluate (
const DomainVector &x, F *values )
const
133 template<
unsigned int deriv,
class DVector,
class F >
134 void evaluate (
const DVector &x, F *values )
const
136 assert( DVector::dimension == dimension);
140 evaluate<deriv>( bx, values );
143 template <
bool dummy,
class DVector>
146 static DomainVector
apply(
const DVector &x )
148 assert( DVector::dimension == dimension);
150 for(
unsigned int d = 0; d <
dimension; ++d )
155 template <
bool dummy>
158 static const DomainVector &
apply(
const DomainVector &x )
163 template<
unsigned int deriv,
class DVector,
class RVector >
164 void evaluate (
const DVector &x, RVector &values )
const
166 assert(values.size()>=
size());
172 void evaluate (
const DomainVector &x, std::vector<FieldVector<Fy,dimRange> > &values )
const
174 evaluate<0>(x,values);
176 template<
class DVector,
class RVector >
177 void evaluate (
const DVector &x, RVector &values )
const
179 assert( DVector::dimension == dimension);
181 for(
unsigned int d = 0; d <
dimension; ++d )
183 evaluate<0>( bx, values );
186 template<
unsigned int deriv,
class Vector >
189 assert(values.size()>=
size());
190 coeffMatrix_->template mult<deriv>(
eval_.template evaluate<deriv>( x ), values );
192 template<
unsigned int deriv,
class Fy >
196 evaluateSingle<deriv>(x,
reinterpret_cast<std::vector< FieldVector<Fy,LFETensor<Fy,dimension,deriv>::size*dimRange
> >&>(values));
198 template<
unsigned int deriv,
class Fy >
202 evaluateSingle<deriv>(x,
reinterpret_cast<std::vector< FieldVector<Fy,LFETensor<Fy,dimension,deriv>::size*dimRange
> >&>(values));
206 void jacobian (
const DomainVector &x, std::vector<FieldMatrix<Fy,dimRange,dimension> > &values )
const
208 assert(values.size()>=
size());
209 evaluateSingle<1>(x,
reinterpret_cast<std::vector<FieldVector<Fy,dimRange*dimension>
>&>(values));
211 template<
class DVector,
class RVector >
212 void jacobian (
const DVector &x, RVector &values )
const
214 assert( DVector::dimension == dimension);
216 for(
unsigned int d = 0; d <
dimension; ++d )
224 assert(values.size()>=
size());
249 template<
class Eval,
class CM = SparseCoeffMatrix<
typename Eval::Field,Eval::dimRange>,
250 class D=
double,
class R=
double>
258 typedef Eval Evaluator;
267 : Base(basis,coeffMatrix_,0)
270 template <
class Matrix>
273 coeffMatrix_.fill(matrix);
274 this->
size_ = coeffMatrix_.size();
276 template <
class Matrix>
279 coeffMatrix_.fill(matrix);
280 assert(size<=coeffMatrix_.size());
287 CoefficientMatrix coeffMatrix_;
290 #endif // DUNE_POLYNOMIALBASIS_HH
void fill(const Matrix &matrix)
Definition: polynomialbasis.hh:271
CM CoefficientMatrix
Definition: polynomialbasis.hh:255
Evaluator::DomainVector DomainVector
Definition: polynomialbasis.hh:77
const unsigned int size() const
Definition: polynomialbasis.hh:107
unsigned int order_
Definition: polynomialbasis.hh:240
CM CoefficientMatrix
Definition: polynomialbasis.hh:67
Evaluator::Basis Basis
Definition: polynomialbasis.hh:76
PolynomialBasis & operator=(const PolynomialBasis &)
const Basis & basis_
Definition: polynomialbasis.hh:237
void evaluate(const DomainVector &x, std::vector< FieldVector< Fy, dimRange > > &values) const
Definition: polynomialbasis.hh:172
void evaluateJacobian(const typename Traits::DomainType &x, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition: polynomialbasis.hh:121
void evaluateFunction(const typename Traits::DomainType &x, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition: polynomialbasis.hh:113
const unsigned int order() const
Definition: polynomialbasis.hh:102
const CoefficientMatrix & matrix() const
Definition: polynomialbasis.hh:97
PolynomialBasis(const PolynomialBasis &other)
Definition: polynomialbasis.hh:229
const CoefficientMatrix * coeffMatrix_
Definition: polynomialbasis.hh:238
static const unsigned int dimension
Definition: polynomialbasis.hh:71
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition: field.hh:157
LocalBasisTraits< D, dimension, FieldVector< D, dimension >, R, dimRange, FieldVector< R, dimRange >, FieldMatrix< R, dimRange, dimension > > Traits
Definition: polynomialbasis.hh:75
PolynomialBasis(const Basis &basis, const CoefficientMatrix &coeffMatrix, unsigned int size)
Definition: polynomialbasis.hh:79
const Basis & basis() const
Definition: polynomialbasis.hh:92
static const DomainVector & apply(const DomainVector &x)
Definition: polynomialbasis.hh:158
void evaluate(const DomainVector &x, F *values) const
Definition: polynomialbasis.hh:129
void evaluate(const DVector &x, F *values) const
Definition: polynomialbasis.hh:134
Definition: polynomialbasis.hh:144
void jacobian(const DomainVector &x, std::vector< FieldMatrix< Fy, dimRange, dimension > > &values) const
Definition: polynomialbasis.hh:206
Definition: polynomialbasis.hh:251
Type traits for LocalBasisVirtualInterface.
Definition: localbasis.hh:37
Base::Basis Basis
Definition: polynomialbasis.hh:264
void evaluate(const DVector &x, RVector &values) const
Definition: polynomialbasis.hh:164
Definition: brezzidouglasmarini1cube2dlocalbasis.hh:14
void fill(const Matrix &matrix, int size)
Definition: polynomialbasis.hh:277
Evaluator eval_
Definition: polynomialbasis.hh:239
CoefficientMatrix::Field StorageField
Definition: polynomialbasis.hh:69
void evaluateSingle(const DomainVector &x, std::vector< FieldVector< FieldVector< Fy, LFETensor< Fy, dimension, deriv >::size >, dimRange > > &values) const
Definition: polynomialbasis.hh:193
void evaluate(const DVector &x, RVector &values) const
Definition: polynomialbasis.hh:177
Definition: polynomialbasis.hh:61
D DomainType
domain type
Definition: localbasis.hh:49
unsigned int size_
Definition: polynomialbasis.hh:240
void jacobian(const DVector &x, RVector &values) const
Definition: polynomialbasis.hh:212
void integrate(std::vector< Fy > &values) const
Definition: polynomialbasis.hh:222
void evaluateSingle(const DomainVector &x, std::vector< FieldVector< LFETensor< Fy, dimension, deriv >, dimRange > > &values) const
Definition: polynomialbasis.hh:199
PolynomialBasisWithMatrix(const Basis &basis)
Definition: polynomialbasis.hh:266
static const unsigned int dimRange
Definition: polynomialbasis.hh:72
void evaluateSingle(const DomainVector &x, Vector &values) const
Definition: polynomialbasis.hh:187
static DomainVector apply(const DVector &x)
Definition: polynomialbasis.hh:146