3 #ifndef DUNE_POLYNOMIALBASIS_HH 4 #define DUNE_POLYNOMIALBASIS_HH 9 #include <dune/common/fmatrix.hh> 61 template<
class Eval,
class CM,
class D=
double,
class R=
double >
65 typedef Eval Evaluator;
72 static const unsigned int dimension = Evaluator::dimension;
73 static const unsigned int dimRange = Evaluator::dimRange*CoefficientMatrix::blockSize;
76 FieldMatrix<R,dimRange,dimension> >
Traits;
77 typedef typename Evaluator::Basis
Basis;
81 const CoefficientMatrix &coeffMatrix,
98 const CoefficientMatrix &
matrix ()
const 115 std::vector<typename Traits::RangeType>& out)
const 123 std::vector<typename Traits::JacobianType>& out)
const 132 std::vector<typename Traits::RangeType>& out)
const 134 auto totalOrder = std::accumulate(
order.begin(),
order.end(), 0);
135 if (totalOrder == 0) {
138 DUNE_THROW(NotImplemented,
"Desired derivative order is not implemented");
142 template<
unsigned int deriv,
class F >
143 void evaluate (
const DomainVector &x, F *values )
const 147 template<
unsigned int deriv,
class DVector,
class F >
148 void evaluate (
const DVector &x, F *values )
const 150 assert( DVector::dimension == dimension);
154 evaluate<deriv>( bx, values );
157 template <
bool dummy,
class DVector>
160 static DomainVector
apply(
const DVector &x )
162 assert( DVector::dimension == dimension);
164 for(
unsigned int d = 0; d <
dimension; ++d )
169 template <
bool dummy>
172 static const DomainVector &
apply(
const DomainVector &x )
177 template<
unsigned int deriv,
class DVector,
class RVector >
178 void evaluate (
const DVector &x, RVector &values )
const 180 assert(values.size()>=
size());
186 void evaluate (
const DomainVector &x, std::vector<FieldVector<Fy,dimRange> > &values )
const 188 evaluate<0>(x,values);
190 template<
class DVector,
class RVector >
191 void evaluate (
const DVector &x, RVector &values )
const 193 assert( DVector::dimension == dimension);
195 for(
unsigned int d = 0; d <
dimension; ++d )
197 evaluate<0>( bx, values );
200 template<
unsigned int deriv,
class Vector >
203 assert(values.size()>=
size());
204 coeffMatrix_->template mult<deriv>(
eval_.template evaluate<deriv>( x ), values );
206 template<
unsigned int deriv,
class Fy >
210 evaluateSingle<deriv>(x,
reinterpret_cast<std::vector< FieldVector<Fy,LFETensor<Fy,dimension,deriv>::size*dimRange
> >&>(values));
212 template<
unsigned int deriv,
class Fy >
216 evaluateSingle<deriv>(x,
reinterpret_cast<std::vector< FieldVector<Fy,LFETensor<Fy,dimension,deriv>::size*dimRange
> >&>(values));
220 void jacobian (
const DomainVector &x, std::vector<FieldMatrix<Fy,dimRange,dimension> > &values )
const 222 assert(values.size()>=
size());
223 evaluateSingle<1>(x,
reinterpret_cast<std::vector<FieldVector<Fy,dimRange*dimension>
>&>(values));
225 template<
class DVector,
class RVector >
226 void jacobian (
const DVector &x, RVector &values )
const 228 assert( DVector::dimension == dimension);
230 for(
unsigned int d = 0; d <
dimension; ++d )
238 assert(values.size()>=
size());
263 template<
class Eval,
class CM = SparseCoeffMatrix<
typename Eval::Field,Eval::dimRange>,
264 class D=
double,
class R=
double>
272 typedef Eval Evaluator;
284 template <
class Matrix>
290 template <
class Matrix>
304 #endif // DUNE_POLYNOMIALBASIS_HH Definition: polynomialbasis.hh:265
Definition: polynomialbasis.hh:62
void jacobian(const DomainVector &x, std::vector< FieldMatrix< Fy, dimRange, dimension > > &values) const
Definition: polynomialbasis.hh:220
static const unsigned int dimension
Definition: polynomialbasis.hh:72
void fill(const Matrix &matrix, int size)
Definition: polynomialbasis.hh:291
const CoefficientMatrix & matrix() const
Definition: polynomialbasis.hh:98
Evaluator::Basis Basis
Definition: polynomialbasis.hh:77
const CoefficientMatrix * coeffMatrix_
Definition: polynomialbasis.hh:252
Base::Basis Basis
Definition: polynomialbasis.hh:278
unsigned int order() const
Definition: polynomialbasis.hh:103
unsigned int size_
Definition: polynomialbasis.hh:254
void evaluateFunction(const typename Traits::DomainType &x, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition: polynomialbasis.hh:114
Evaluator eval_
Definition: polynomialbasis.hh:253
PolynomialBasis & operator=(const PolynomialBasis &)
PolynomialBasis(const PolynomialBasis &other)
Definition: polynomialbasis.hh:243
unsigned int size() const
Definition: polynomialbasis.hh:108
Definition: brezzidouglasmarini1cube2dlocalbasis.hh:15
const Basis & basis_
Definition: polynomialbasis.hh:251
void evaluate(const DomainVector &x, F *values) const
Definition: polynomialbasis.hh:143
void integrate(std::vector< Fy > &values) const
Definition: polynomialbasis.hh:236
static const unsigned int dimRange
Definition: polynomialbasis.hh:73
CoefficientMatrix::Field StorageField
Definition: polynomialbasis.hh:70
CM CoefficientMatrix
Definition: polynomialbasis.hh:269
void fill(const Matrix &matrix)
Definition: polynomialbasis.hh:285
D DomainType
domain type
Definition: localbasis.hh:49
void evaluate(const DVector &x, RVector &values) const
Definition: polynomialbasis.hh:191
void evaluate(const DomainVector &x, std::vector< FieldVector< Fy, dimRange > > &values) const
Definition: polynomialbasis.hh:186
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition: field.hh:157
unsigned int order_
Definition: polynomialbasis.hh:254
void partial(const std::array< unsigned int, dimension > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition: polynomialbasis.hh:130
const Basis & basis() const
Definition: polynomialbasis.hh:93
static DomainVector apply(const DVector &x)
Definition: polynomialbasis.hh:160
CM CoefficientMatrix
Definition: polynomialbasis.hh:68
void evaluateJacobian(const typename Traits::DomainType &x, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition: polynomialbasis.hh:122
Evaluator::DomainVector DomainVector
Definition: polynomialbasis.hh:78
void evaluateSingle(const DomainVector &x, std::vector< FieldVector< LFETensor< Fy, dimension, deriv >, dimRange > > &values) const
Definition: polynomialbasis.hh:213
void evaluate(const DVector &x, F *values) const
Definition: polynomialbasis.hh:148
PolynomialBasis(const Basis &basis, const CoefficientMatrix &coeffMatrix, unsigned int size)
Definition: polynomialbasis.hh:80
void evaluateSingle(const DomainVector &x, std::vector< FieldVector< FieldVector< Fy, LFETensor< Fy, dimension, deriv >::size >, dimRange > > &values) const
Definition: polynomialbasis.hh:207
static const DomainVector & apply(const DomainVector &x)
Definition: polynomialbasis.hh:172
void evaluateSingle(const DomainVector &x, Vector &values) const
Definition: polynomialbasis.hh:201
LocalBasisTraits< D, dimension, FieldVector< D, dimension >, R, dimRange, FieldVector< R, dimRange >, FieldMatrix< R, dimRange, dimension > > Traits
Definition: polynomialbasis.hh:76
PolynomialBasisWithMatrix(const Basis &basis)
Definition: polynomialbasis.hh:280
Type traits for LocalBasisVirtualInterface.
Definition: localbasis.hh:37
void jacobian(const DVector &x, RVector &values) const
Definition: polynomialbasis.hh:226
Definition: polynomialbasis.hh:158
void evaluate(const DVector &x, RVector &values) const
Definition: polynomialbasis.hh:178