dune-fem  2.8-git
basisfunctionset/vectorial.hh
Go to the documentation of this file.
1 #ifndef DUNE_FEM_BASISFUNCTIONSET_VECTORIAL_HH
2 #define DUNE_FEM_BASISFUNCTIONSET_VECTORIAL_HH
3 
4 #include <cstddef>
5 #include <utility>
6 #include <vector>
7 
8 #include <dune/geometry/referenceelements.hh>
9 #include <dune/geometry/type.hh>
10 
13 
14 namespace Dune
15 {
16 
17  namespace Fem
18  {
19 
20  // DofAlignment
21  // ------------
22 
32  template< class Implementation >
34  {
35  public:
37  typedef std::size_t GlobalDofType;
41  typedef std::pair< int, std::size_t > LocalDofType;
42 
43  protected:
44  DofAlignment () = default;
45 
46  public:
56  {
57  return impl().globalDof( localDof );
58  }
59 
69  {
70  return impl().localDof( globalDof );
71  }
72 
73  protected:
74  const Implementation &impl () const
75  {
76  return static_cast< const Implementation & >( *this );
77  }
78  };
79 
80 
81 
82  // HorizontalDofAlignment
83  // ----------------------
84 
93  template< class ScalarBasisFunctionSet, class Range >
95  : public DofAlignment< HorizontalDofAlignment< ScalarBasisFunctionSet, Range > >
96  {
99 
100  public:
103 
105 
106  explicit HorizontalDofAlignment ( const ScalarBasisFunctionSet &scalarBasisFunctionSet )
107  : scalarSize_( scalarBasisFunctionSet.size() )
108  {}
109 
112  {
113  return GlobalDofType( localDof.first*scalarSize_ + localDof.second );
114  }
115 
118  {
119  return LocalDofType( globalDof / scalarSize_, globalDof % scalarSize_ );
120  }
121 
122  private:
123  std::size_t scalarSize_;
124  };
125 
126 
127 
128  // VerticalDofAlignment
129  // --------------------
130 
138  template< class ScalarBasisFunctionSet, class Range >
140  : public DofAlignment< VerticalDofAlignment< ScalarBasisFunctionSet, Range > >
141  {
144 
145  static const int dimRange = Range::dimension;
146 
147  public:
150 
151  VerticalDofAlignment () = default;
152 
153  explicit VerticalDofAlignment ( const ScalarBasisFunctionSet & ) {}
154 
157  {
158  return GlobalDofType( localDof.first + localDof.second*dimRange );
159  }
160 
163  {
164  return LocalDofType( globalDof % dimRange, globalDof / dimRange );
165  }
166  };
167 
168 
169 
170  // SubDofVector
171  // ------------
172 
178  template< class DofVector, class DofAlignment >
180 
181  // note: DofVector can be also const DofVector
182  template< class DofVector, class ScalarBasisFunctionSet, class Range >
183  class SubDofVector< DofVector, HorizontalDofAlignment< ScalarBasisFunctionSet, Range > >
184  {
186 
187  typedef typename Range::value_type RangeFieldType;
188 
190  typedef typename DofAlignmentType::LocalDofType LocalDofType;
191 
192  // extract correct RangeFieldType for const or non-const version
193  typedef typename std::conditional<
194  std::is_const< DofVector > :: value,
195  const RangeFieldType,
196  RangeFieldType > :: type DofType;
197 
198  public:
199  typedef RangeFieldType value_type;
200 
201  SubDofVector( DofVector &dofs, int coordinate, const DofAlignmentType &dofAlignment )
202  : dofs_( &(dofs[ dofAlignment.globalDof( LocalDofType( coordinate, 0 ) ) ] ) )
203  {}
204 
205  DofType &operator[] ( std::size_t i )
206  {
207  return dofs_[ i ];
208  }
209 
210  // const RFT& leads to problem with returning reference to temporary
211  // with dofs_ = PetscDF::LocalFunction::DofVector
212  RangeFieldType operator[] ( std::size_t i ) const
213  {
214  return dofs_[ i ];
215  }
216 
217  private:
218  DofType *dofs_;
219  };
220 
221  // note: DofVector can be also const DofVector
222  template< class DofVector, class ScalarBasisFunctionSet, class Range >
223  class SubDofVector< DofVector, VerticalDofAlignment< ScalarBasisFunctionSet, Range > >
224  {
226 
227  typedef typename Range::value_type RangeFieldType;
228 
230  typedef typename DofAlignmentType::LocalDofType LocalDofType;
231 
232  // extract correct RangeFieldType for const or non-const version
233  typedef typename std::conditional<
234  std::is_const< DofVector > :: value,
235  const RangeFieldType,
236  RangeFieldType > :: type DofType;
237 
238  public:
239  typedef RangeFieldType value_type;
240 
241  SubDofVector( DofVector &dofs, int coordinate, const DofAlignmentType &dofAlignment )
242  : dofs_( dofs ),
243  coordinate_( coordinate ),
244  dofAlignment_( dofAlignment )
245  {}
246 
247  DofType &operator[] ( std::size_t i )
248  {
249  return dofs_[ dofAlignment_.globalDof( LocalDofType( coordinate_, i ) ) ];
250  }
251 
252  // const RFT& leads to problem with returning reference to temporary
253  // with dofs_ = PetscDF::LocalFunction::DofVector
254  RangeFieldType operator[] ( std::size_t i ) const
255  {
256  return dofs_[ dofAlignment_.globalDof( LocalDofType( coordinate_, i ) ) ];
257  }
258 
259  private:
260  DofVector &dofs_;
261  int coordinate_;
262  DofAlignmentType dofAlignment_;
263  };
264 
265 
266 
267  // VectorialBasisFunctionSet
268  // -------------------------
269 
277  template< class ScalarBasisFunctionSet, class Range, template< class, class > class DofAlignment = VerticalDofAlignment >
279  {
281 
282  public:
283  typedef ScalarBasisFunctionSet ScalarBasisFunctionSetType;
284 
285  typedef typename ScalarBasisFunctionSetType::EntityType EntityType;
286  typedef typename ScalarBasisFunctionSetType::ReferenceElementType ReferenceElementType;
287 
288  private:
289  typedef typename ScalarBasisFunctionSetType::FunctionSpaceType ScalarFunctionSpaceType;
290  static const int dimRange = Range::dimension;
291 
292  public:
294 
295  typedef typename FunctionSpaceType::DomainType DomainType;
296  typedef typename FunctionSpaceType::RangeType RangeType;
297  typedef typename FunctionSpaceType::JacobianRangeType JacobianRangeType;
298  typedef typename FunctionSpaceType::HessianRangeType HessianRangeType;
299 
301 
304 
305  typedef typename FunctionSpaceType::DomainFieldType DomainFieldType;
306  typedef typename FunctionSpaceType::RangeFieldType RangeFieldType;
307 
308  private:
309  struct EvaluateAll;
310  struct JacobianAll;
311  struct HessianAll;
312 
313  public:
315 
317  : scalarBasisFunctionSet_( scalarBasisFunctionSet ),
318  dofAlignment_( scalarBasisFunctionSet_ )
319  {}
320 
321  int order () const { return scalarBasisFunctionSet().order(); }
322 
323  std::size_t size () const { return dimRange*scalarBasisFunctionSet().size(); }
324 
325  const ReferenceElementType &referenceElement () const { return scalarBasisFunctionSet().referenceElement(); }
326 
327  template< class Point, class DofVector >
328  void axpy ( const Point &x, const RangeType &valueFactor, DofVector &dofs ) const
329  {
330  axpy< EvaluateAll >( x, valueFactor, dofs );
331  }
332 
333  template< class Point, class DofVector >
334  void axpy ( const Point &x, const JacobianRangeType &jacobianFactor, DofVector &dofs ) const
335  {
336  axpy< JacobianAll >( x, jacobianFactor, dofs );
337  }
338 
339  template< class Point, class DofVector >
340  void axpy ( const Point &x, const HessianRangeType &hessianFactor, DofVector &dofs ) const
341  {
342  axpyH( x, hessianFactor, dofs );
343  }
344 
345  template< class Point, class DofVector >
346  void axpy ( const Point &x, const RangeType &valueFactor, const JacobianRangeType &jacobianFactor,
347  DofVector &dofs ) const
348  {
349  axpy( x, valueFactor, dofs );
350  axpy( x, jacobianFactor, dofs );
351  }
352 
353  template< class Quadrature, class Vector, class DofVector >
354  void axpy ( const Quadrature &quad, const Vector &values, DofVector & dofs ) const
355  {
356  const unsigned int nop = quad.nop();
357  for( unsigned int qp = 0; qp < nop ; ++qp )
358  axpy( quad[ qp ], values[ qp ], dofs );
359  }
360 
361  template< class Quadrature, class VectorA, class VectorB, class DofVector >
362  void axpy ( const Quadrature &quad, const VectorA &valuesA, const VectorB &valuesB, DofVector & dofs ) const
363  {
364  const unsigned int nop = quad.nop();
365  for( unsigned int qp = 0; qp < nop ; ++qp )
366  {
367  axpy( quad[ qp ], valuesA[ qp ], dofs );
368  axpy( quad[ qp ], valuesB[ qp ], dofs );
369  }
370  }
371 
372  template< class Point, class DofVector >
373  void evaluateAll ( const Point &x, const DofVector &dofs, RangeType &value ) const
374  {
375  evaluateAll< EvaluateAll >( x, dofs, value );
376  }
377 
378  template< class Point, class RangeArray >
379  void evaluateAll ( const Point &x, RangeArray &values ) const
380  {
381  evaluateAll< EvaluateAll >( x, values );
382  }
383 
384  template< class Quadrature, class DofVector, class RangeArray >
385  void evaluateAll ( const Quadrature &quad, const DofVector &dofs, RangeArray &ranges ) const
386  {
387  const unsigned int nop = quad.nop();
388  for( unsigned int qp = 0; qp < nop ; ++qp )
389  evaluateAll( quad[ qp ], dofs, ranges[ qp ] );
390  }
391 
392  template< class Point, class DofVector >
393  void jacobianAll ( const Point &x, const DofVector &dofs, JacobianRangeType &jacobian ) const
394  {
395  evaluateAll< JacobianAll >( x, dofs, jacobian );
396  }
397 
398  template< class Point, class JacobianRangeArray >
399  void jacobianAll ( const Point &x, JacobianRangeArray &jacobians ) const
400  {
401  evaluateAll< JacobianAll >( x, jacobians );
402  }
403 
404  template< class Quadrature, class DofVector, class JacobianArray >
405  void jacobianAll ( const Quadrature &quad, const DofVector &dofs, JacobianArray &jacobians ) const
406  {
407  const unsigned int nop = quad.nop();
408  for( unsigned int qp = 0; qp < nop ; ++qp )
409  jacobianAll( quad[ qp ], dofs, jacobians[ qp ] );
410  }
411 
412  template< class Point, class DofVector >
413  void hessianAll ( const Point &x, const DofVector &dofs, HessianRangeType &hessian ) const
414  {
415  evaluateAll< HessianAll >( x, dofs, hessian );
416  }
417 
418  template< class Point, class HessianRangeArray >
419  void hessianAll ( const Point &x, HessianRangeArray &hessians ) const
420  {
421  evaluateAll< HessianAll >( x, hessians );
422  }
423 
424  template< class Quadrature, class DofVector, class HessianArray >
425  void hessianAll ( const Quadrature &quad, const DofVector &dofs, HessianArray &hessians ) const
426  {
427  const unsigned int nop = quad.nop();
428  for( unsigned int qp = 0; qp < nop ; ++qp )
429  hessianAll( quad[ qp ], dofs, hessians[ qp ] );
430  }
431 
432  const EntityType &entity () const { return scalarBasisFunctionSet().entity(); }
433  bool valid () const { return scalarBasisFunctionSet().valid(); }
434 
435  DofAlignmentType dofAlignment () const { return dofAlignment_ ; }
436 
438  {
439  return scalarBasisFunctionSet_;
440  }
441 
442  private:
443  template< class Evaluate, class Point, class DofVector >
444  void axpy ( const Point &x, const typename Evaluate::Vector &factor, DofVector &dofs ) const
445  {
446  const std::size_t size = scalarBasisFunctionSet().size();
447  std::vector< typename Evaluate::Scalar > scalars( size );
448  Evaluate::apply( scalarBasisFunctionSet(), x, scalars );
449 
450  for( int r = 0; r < dimRange; ++r )
451  {
452  for( std::size_t i = 0; i < size; ++i )
453  {
454  const GlobalDofType globalDof = dofAlignment_.globalDof( LocalDofType( r, i ) );
455  dofs[ globalDof ] += factor[ r ] * scalars[ i ][ 0 ];
456  }
457  }
458  }
459  template< class Point, class DofVector >
460  void axpyH ( const Point &x, const HessianRangeType &factor, DofVector &dofs ) const
461  {
462  const std::size_t size = scalarBasisFunctionSet().size();
463  std::vector< typename HessianAll::Scalar > scalars( size );
464  HessianAll::apply( scalarBasisFunctionSet(), x, scalars );
465 
466  const int xSize = DomainType::dimension;
467  for( int r = 0; r < dimRange; ++r )
468  {
469  for( std::size_t i = 0; i < size; ++i )
470  {
471  const GlobalDofType globalDof = dofAlignment_.globalDof( LocalDofType( r, i ) );
472  for ( int j = 0; j < xSize; ++j )
473  dofs[ globalDof ] += factor[ r ][ j ] * scalars[ i ][ 0 ][ j ];
474  }
475  }
476  }
477 
478  template< class Evaluate, class Point, class DofVector >
479  void evaluateAll ( const Point &x, const DofVector &dofs, typename Evaluate::Vector &vector ) const
480  {
481  typename Evaluate::Scalar scalar;
482  for( int r = 0; r < dimRange; ++r )
483  {
484  SubDofVector< const DofVector, DofAlignmentType > subDofs( dofs, r, dofAlignment_ );
485  Evaluate::apply( scalarBasisFunctionSet(), x, subDofs, scalar );
486  vector[ r ] = scalar[ 0 ];
487  }
488  }
489 
490  template< class Evaluate, class Point, class VectorArray >
491  void evaluateAll ( const Point &x, VectorArray &vectorials ) const
492  {
493  const std::size_t size = scalarBasisFunctionSet().size();
494  std::vector< typename Evaluate::Scalar > scalars( size );
495  Evaluate::apply( scalarBasisFunctionSet(), x, scalars );
496 
497  typedef typename Evaluate::Vector Vector;
498 
499  for( int r = 0; r < dimRange; ++r )
500  {
501  for( std::size_t i = 0; i < size; ++i )
502  {
503  const GlobalDofType globalDof = dofAlignment_.globalDof( LocalDofType( r, i ) );
504  Vector &vector = vectorials[ globalDof ];
505  vector = Vector( typename Vector::value_type( 0 ) );
506  vector[ r ] = scalars[ i ][ 0 ];
507  }
508  }
509  }
510 
511  ScalarBasisFunctionSetType scalarBasisFunctionSet_;
512  DofAlignmentType dofAlignment_;
513  };
514 
515 
516 
517  // VectorialBasisFunctionSet< ScalarBasisFunctionSet, Range >::EvaluateAll
518  // -----------------------------------------------------------------------
519 
520  template< class ScalarBasisFunctionSet, class Range, template< class, class > class DofAlignment >
521  struct VectorialBasisFunctionSet< ScalarBasisFunctionSet, Range, DofAlignment >::EvaluateAll
522  {
523  typedef typename ScalarFunctionSpaceType::RangeType Scalar;
524  typedef RangeType Vector;
525 
526  template< class Point, class SubDofVector >
528  const Point &x, const SubDofVector &dofs, Scalar &scalar )
529  {
530  scalarBasisFunctionSet.evaluateAll( x, dofs, scalar );
531  }
532 
533  template< class Point, class ScalarArray >
535  const Point &x, ScalarArray &scalars )
536  {
537  scalarBasisFunctionSet.evaluateAll( x, scalars );
538  }
539  };
540 
541 
542 
543  // VectorialBasisFunctionSet< ScalarBasisFunctionSet, Range >::JacobianAll
544  // -----------------------------------------------------------------------
545 
546  template< class ScalarBasisFunctionSet, class Range, template< class, class > class DofAlignment >
547  struct VectorialBasisFunctionSet< ScalarBasisFunctionSet, Range, DofAlignment >::JacobianAll
548  {
549  typedef typename ScalarFunctionSpaceType::JacobianRangeType Scalar;
551 
552  template< class Point, class SubDofVector >
554  const Point &x, const SubDofVector &dofs, Scalar &scalar )
555  {
556  scalarBasisFunctionSet.jacobianAll( x, dofs, scalar );
557  }
558 
559  template< class Point, class ScalarArray >
561  const Point &x, ScalarArray &scalars )
562  {
563  scalarBasisFunctionSet.jacobianAll( x, scalars );
564  }
565  };
566 
567 
568 
569  // VectorialBasisFunctionSet< ScalarBasisFunctionSet, Range >::HessianAll
570  // ----------------------------------------------------------------------
571 
572  template< class ScalarBasisFunctionSet, class Range, template< class, class > class DofAlignment >
573  struct VectorialBasisFunctionSet< ScalarBasisFunctionSet, Range, DofAlignment >::HessianAll
574  {
575  typedef typename ScalarFunctionSpaceType::HessianRangeType Scalar;
577 
578  template< class Point, class SubDofVector >
580  const Point &x, const SubDofVector &dofs, Scalar &scalar )
581  {
582  scalarBasisFunctionSet.hessianAll( x, dofs, scalar );
583  }
584 
585  template< class Point, class ScalarArray >
587  const Point &x, ScalarArray &scalars )
588  {
589  scalarBasisFunctionSet.hessianAll( x, scalars );
590  }
591  };
592 
593  } // namespace Fem
594 
595 } // namespace Dune
596 
597 #endif // #ifndef DUNE_FEM_BASISFUNCTIONSET_VECTORIAL_HH
Definition: bindguard.hh:11
static const Point & coordinate(const Point &x)
Definition: coordinate.hh:14
IteratorRange< typename DF::DofIteratorType > dofs(DF &df)
Iterates over all DOFs.
Definition: rangegenerators.hh:76
int nop() const
obtain the number of integration points
Definition: quadrature.hh:295
actual interface class for quadratures
Definition: quadrature.hh:405
Interface documentation for Dof alignment classes used in VectorialBasisFunctionSet.
Definition: basisfunctionset/vectorial.hh:34
std::size_t GlobalDofType
global Dof type
Definition: basisfunctionset/vectorial.hh:37
LocalDofType localDof(const GlobalDofType &globalDof) const
map global to local Dof
Definition: basisfunctionset/vectorial.hh:68
std::pair< int, std::size_t > LocalDofType
local Dof type consists of coordinate number and Dof number in scalar basis function set
Definition: basisfunctionset/vectorial.hh:41
GlobalDofType globalDof(const LocalDofType &localDof) const
map local to global Dof
Definition: basisfunctionset/vectorial.hh:55
const Implementation & impl() const
Definition: basisfunctionset/vectorial.hh:74
Implementation of DofAlignment.
Definition: basisfunctionset/vectorial.hh:96
GlobalDofType globalDof(const LocalDofType &localDof) const
map local to global Dof
Definition: basisfunctionset/vectorial.hh:111
LocalDofType localDof(const GlobalDofType &globalDof) const
map global to local Dof
Definition: basisfunctionset/vectorial.hh:117
BaseType::LocalDofType LocalDofType
Definition: basisfunctionset/vectorial.hh:102
BaseType::GlobalDofType GlobalDofType
Definition: basisfunctionset/vectorial.hh:101
HorizontalDofAlignment(const ScalarBasisFunctionSet &scalarBasisFunctionSet)
Definition: basisfunctionset/vectorial.hh:106
Implementation of DofAlignment.
Definition: basisfunctionset/vectorial.hh:141
BaseType::LocalDofType LocalDofType
Definition: basisfunctionset/vectorial.hh:149
BaseType::GlobalDofType GlobalDofType
Definition: basisfunctionset/vectorial.hh:148
VerticalDofAlignment(const ScalarBasisFunctionSet &)
Definition: basisfunctionset/vectorial.hh:153
LocalDofType localDof(const GlobalDofType &globalDof) const
map global to local Dof
Definition: basisfunctionset/vectorial.hh:162
GlobalDofType globalDof(const LocalDofType &localDof) const
map local to global Dof
Definition: basisfunctionset/vectorial.hh:156
Extract Sub dof vector for single coordinate.
Definition: basisfunctionset/vectorial.hh:179
SubDofVector(DofVector &dofs, int coordinate, const DofAlignmentType &dofAlignment)
Definition: basisfunctionset/vectorial.hh:201
RangeFieldType value_type
Definition: basisfunctionset/vectorial.hh:199
SubDofVector(DofVector &dofs, int coordinate, const DofAlignmentType &dofAlignment)
Definition: basisfunctionset/vectorial.hh:241
RangeFieldType value_type
Definition: basisfunctionset/vectorial.hh:239
Builds a vectorial basis function set from given scalar basis function set.
Definition: basisfunctionset/vectorial.hh:279
ScalarBasisFunctionSetType::ReferenceElementType ReferenceElementType
Definition: basisfunctionset/vectorial.hh:286
FunctionSpaceType::JacobianRangeType JacobianRangeType
Definition: basisfunctionset/vectorial.hh:297
FunctionSpaceType::RangeType RangeType
Definition: basisfunctionset/vectorial.hh:296
ScalarBasisFunctionSet ScalarBasisFunctionSetType
Definition: basisfunctionset/vectorial.hh:283
DofAlignment< ScalarBasisFunctionSet, Range > DofAlignmentType
Definition: basisfunctionset/vectorial.hh:300
void axpy(const Quadrature &quad, const VectorA &valuesA, const VectorB &valuesB, DofVector &dofs) const
Definition: basisfunctionset/vectorial.hh:362
void axpy(const Point &x, const RangeType &valueFactor, const JacobianRangeType &jacobianFactor, DofVector &dofs) const
Definition: basisfunctionset/vectorial.hh:346
void jacobianAll(const Point &x, const DofVector &dofs, JacobianRangeType &jacobian) const
Definition: basisfunctionset/vectorial.hh:393
const ScalarBasisFunctionSetType & scalarBasisFunctionSet() const
Definition: basisfunctionset/vectorial.hh:437
void jacobianAll(const Point &x, JacobianRangeArray &jacobians) const
Definition: basisfunctionset/vectorial.hh:399
DofAlignmentType dofAlignment() const
Definition: basisfunctionset/vectorial.hh:435
void jacobianAll(const Quadrature &quad, const DofVector &dofs, JacobianArray &jacobians) const
Definition: basisfunctionset/vectorial.hh:405
void hessianAll(const Point &x, HessianRangeArray &hessians) const
Definition: basisfunctionset/vectorial.hh:419
void evaluateAll(const Quadrature &quad, const DofVector &dofs, RangeArray &ranges) const
Definition: basisfunctionset/vectorial.hh:385
void evaluateAll(const Point &x, const DofVector &dofs, RangeType &value) const
Definition: basisfunctionset/vectorial.hh:373
void axpy(const Quadrature &quad, const Vector &values, DofVector &dofs) const
Definition: basisfunctionset/vectorial.hh:354
void axpy(const Point &x, const RangeType &valueFactor, DofVector &dofs) const
Definition: basisfunctionset/vectorial.hh:328
VectorialBasisFunctionSet(const ScalarBasisFunctionSetType &scalarBasisFunctionSet)
Definition: basisfunctionset/vectorial.hh:316
DofAlignmentType::GlobalDofType GlobalDofType
Definition: basisfunctionset/vectorial.hh:302
DofAlignmentType::LocalDofType LocalDofType
Definition: basisfunctionset/vectorial.hh:303
FunctionSpaceType::HessianRangeType HessianRangeType
Definition: basisfunctionset/vectorial.hh:298
void hessianAll(const Quadrature &quad, const DofVector &dofs, HessianArray &hessians) const
Definition: basisfunctionset/vectorial.hh:425
void hessianAll(const Point &x, const DofVector &dofs, HessianRangeType &hessian) const
Definition: basisfunctionset/vectorial.hh:413
std::size_t size() const
Definition: basisfunctionset/vectorial.hh:323
ToNewDimRangeFunctionSpace< ScalarFunctionSpaceType, dimRange >::Type FunctionSpaceType
Definition: basisfunctionset/vectorial.hh:293
void axpy(const Point &x, const JacobianRangeType &jacobianFactor, DofVector &dofs) const
Definition: basisfunctionset/vectorial.hh:334
VectorialBasisFunctionSet()
Definition: basisfunctionset/vectorial.hh:314
void evaluateAll(const Point &x, RangeArray &values) const
Definition: basisfunctionset/vectorial.hh:379
FunctionSpaceType::RangeFieldType RangeFieldType
Definition: basisfunctionset/vectorial.hh:306
const EntityType & entity() const
Definition: basisfunctionset/vectorial.hh:432
void axpy(const Point &x, const HessianRangeType &hessianFactor, DofVector &dofs) const
Definition: basisfunctionset/vectorial.hh:340
FunctionSpaceType::DomainType DomainType
Definition: basisfunctionset/vectorial.hh:295
ScalarBasisFunctionSetType::EntityType EntityType
Definition: basisfunctionset/vectorial.hh:285
int order() const
Definition: basisfunctionset/vectorial.hh:321
FunctionSpaceType::DomainFieldType DomainFieldType
Definition: basisfunctionset/vectorial.hh:305
const ReferenceElementType & referenceElement() const
Definition: basisfunctionset/vectorial.hh:325
bool valid() const
Definition: basisfunctionset/vectorial.hh:433
Definition: basisfunctionset/vectorial.hh:522
ScalarFunctionSpaceType::RangeType Scalar
Definition: basisfunctionset/vectorial.hh:523
static void apply(const ScalarBasisFunctionSetType &scalarBasisFunctionSet, const Point &x, const SubDofVector &dofs, Scalar &scalar)
Definition: basisfunctionset/vectorial.hh:527
static void apply(const ScalarBasisFunctionSetType &scalarBasisFunctionSet, const Point &x, ScalarArray &scalars)
Definition: basisfunctionset/vectorial.hh:534
RangeType Vector
Definition: basisfunctionset/vectorial.hh:524
Definition: basisfunctionset/vectorial.hh:548
JacobianRangeType Vector
Definition: basisfunctionset/vectorial.hh:550
ScalarFunctionSpaceType::JacobianRangeType Scalar
Definition: basisfunctionset/vectorial.hh:549
static void apply(const ScalarBasisFunctionSetType &scalarBasisFunctionSet, const Point &x, const SubDofVector &dofs, Scalar &scalar)
Definition: basisfunctionset/vectorial.hh:553
static void apply(const ScalarBasisFunctionSetType &scalarBasisFunctionSet, const Point &x, ScalarArray &scalars)
Definition: basisfunctionset/vectorial.hh:560
Definition: basisfunctionset/vectorial.hh:574
static void apply(const ScalarBasisFunctionSetType &scalarBasisFunctionSet, const Point &x, const SubDofVector &dofs, Scalar &scalar)
Definition: basisfunctionset/vectorial.hh:579
static void apply(const ScalarBasisFunctionSetType &scalarBasisFunctionSet, const Point &x, ScalarArray &scalars)
Definition: basisfunctionset/vectorial.hh:586
ScalarFunctionSpaceType::HessianRangeType Scalar
Definition: basisfunctionset/vectorial.hh:575
HessianRangeType Vector
Definition: basisfunctionset/vectorial.hh:576
convert functions space to space with new dim range
Definition: functionspace.hh:250