dune-fem  2.8-git
shapefunctionset/vectorial.hh
Go to the documentation of this file.
1 #ifndef DUNE_FEM_SHAPEFUNCTIONSET_VECTORIAL_HH
2 #define DUNE_FEM_SHAPEFUNCTIONSET_VECTORIAL_HH
3 
4 // C++ includes
5 #include <algorithm>
6 #include <cstddef>
7 
8 // dune-fem includes
13 
14 
15 namespace Dune
16 {
17 
18  namespace Fem
19  {
20 
21  // MakeVectorialTraits
22  // -------------------
23 
24  template< class Scalar, class Vectorial >
26 
27  template< class K, int dimR >
28  struct MakeVectorialTraits< FieldVector< K, 1 >, FieldVector< K, dimR > >
29  {
30  typedef FieldVector< K, 1 > ScalarType;
31  typedef FieldVector< K, dimR > VectorialType;
32 
33  typedef typename FieldTraits< VectorialType >::field_type field_type;
34  typedef typename VectorialType::size_type ComponentType;
35  typedef typename VectorialType::size_type size_type;
36 
37  static const size_type factor = dimR;
38 
39  static ComponentType begin () { return ComponentType( 0 ); }
40  static ComponentType end () { return ComponentType( factor ); }
41 
42  static VectorialType zeroVectorial () { return VectorialType( K( field_type( 0 ) ) ); }
43 
44  static const K &access ( const ScalarType &x ) { return x[ 0 ]; }
45  static K &access ( ScalarType &x ) { return x[ 0 ]; }
46 
47  static const K &access ( const VectorialType &x, const ComponentType &i ) { return x[ i ]; }
48  static K &access ( VectorialType &x, const ComponentType &i ) { return x[ i ]; }
49 
50  static size_type index ( const ComponentType &i ) { return i; }
51  };
52 
53  template< class K, int dimR >
55  {
56  typedef FieldVector< K, 1 > ScalarType;
58 
59  typedef typename FieldTraits< VectorialType >::field_type field_type;
60  typedef typename VectorialType::size_type ComponentType;
61  typedef typename VectorialType::size_type size_type;
62 
63  static const size_type factor = dimR;
64 
65  static ComponentType begin () { return ComponentType( 0 ); }
66  static ComponentType end () { return ComponentType( factor ); }
67 
68  static VectorialType zeroVectorial () { return VectorialType( K( field_type( 0 ) ) ); }
69 
70  static const K &access ( const ScalarType &x ) { return x[ 0 ]; }
71  static K &access ( ScalarType &x ) { return x[ 0 ]; }
72 
73  static const K &access ( const VectorialType &x, const ComponentType &i ) { return x[ i ]; }
74  static K &access ( VectorialType &x, const ComponentType &i ) { return x[ i ]; }
75 
76  static size_type index ( const ComponentType &i ) { return i; }
77  };
78 
79  template< class K, int dimR, int dimD >
80  struct MakeVectorialTraits< FieldMatrix< K, 1, dimD >, FieldMatrix< K, dimR, dimD > >
81  {
82  typedef FieldMatrix< K, 1, dimD > ScalarType;
83  typedef FieldMatrix< K, dimR, dimD > VectorialType;
84 
85  typedef typename FieldTraits< VectorialType >::field_type field_type;
86  typedef typename VectorialType::size_type ComponentType;
87  typedef typename VectorialType::size_type size_type;
88 
89  static const size_type factor = dimR;
90 
91  static ComponentType begin () { return ComponentType( 0 ); }
92  static ComponentType end () { return ComponentType( factor ); }
93 
94  static VectorialType zeroVectorial () { return VectorialType( K( field_type( 0 ) ) ); }
95 
96  static const FieldVector< K, dimD > &access ( const ScalarType &x ) { return x[ 0 ]; }
97  static FieldVector< K, dimD > &access ( ScalarType &x ) { return x[ 0 ]; }
98 
99  static const FieldVector< K, dimD > &access ( const VectorialType &x, const ComponentType &i ) { return x[ i ]; }
100  static FieldVector< K, dimD > &access ( VectorialType &x, const ComponentType &i ) { return x[ i ]; }
101 
102  static size_type index ( const ComponentType &i ) { return i; }
103  };
104 
105 
106  // MakeVectorialExpression
107  // -----------------------
108 
109  template< class Scalar, class Vectorial >
111  {
113 
115 
116  public:
117  typedef typename Traits::ScalarType ScalarType;
118  typedef typename Traits::VectorialType VectorialType;
119 
120  typedef typename Traits::field_type field_type;
121  typedef typename Traits::ComponentType ComponentType;
122  typedef typename Traits::size_type size_type;
123 
125  : component_( component ),
126  scalar_( scalar )
127  {}
128 
129  operator VectorialType () const
130  {
131  VectorialType vectorial = Traits::zeroVectorial();
132  Traits::access( vectorial, component() ) = Traits::access( scalar() );
133  return vectorial;
134  }
135 
136  const ThisType &operator*= ( const field_type &s )
137  {
138  scalar() *= s;
139  return *this;
140  }
141 
142  const ThisType &operator/= ( const field_type &s )
143  {
144  scalar() /= s;
145  return *this;
146  }
147 
148  const ComponentType &component () const { return component_; }
149 
150  const ScalarType &scalar () const { return scalar_; }
151  ScalarType &scalar () { return scalar_; }
152 
153  protected:
156  };
157 
158 
159 
160  // MakeVectorialExpression
161  // -----------------------
162 
163  template< class Scalar, class Vectorial >
165  : public BasicMakeVectorialExpression< Scalar, Vectorial >
166  {
169 
170  public:
173 
176  {}
177  };
178 
179  template< class K, int dimR >
180  class MakeVectorialExpression< FieldVector< K, 1 >, FieldVector< K, dimR > >
181  : public BasicMakeVectorialExpression< FieldVector< K, 1 >, FieldVector< K, dimR > >
182  {
183  typedef MakeVectorialExpression< FieldVector< K, 1 >, FieldVector< K, dimR > > ThisType;
184  typedef BasicMakeVectorialExpression< FieldVector< K, 1 >, FieldVector< K, dimR > > BaseType;
185 
186  public:
189 
192  typedef typename BaseType::size_type size_type;
193 
194  using BaseType::component;
195  using BaseType::scalar;
196 
199  {}
200 
201  field_type operator* ( const ThisType &other ) const
202  {
203  return (component() == other.component() ? scalar() * other.scalar() : field_type( 0 ));
204  }
205 
206  field_type operator* ( const VectorialType &other ) const
207  {
208  return (scalar()[ 0 ] * other[ component() ]);
209  }
210 
211  field_type one_norm () const { return scalar().one_norm(); }
212  field_type two_norm () const { return scalar().two_norm(); }
213  field_type two_norm2 () const { return scalar().two_norm2(); }
214  field_type infinity_norm () const { return scalar().infinity_norm(); }
215 
216  size_type size () const { return dimR; }
217 
218  friend field_type operator* ( const VectorialType &a, ThisType &b ) { return b*a; }
219  };
220 
221  template< class K, int dimR, int dimD >
222  class MakeVectorialExpression< FieldMatrix< K, 1, dimD >, FieldMatrix< K, dimR, dimD > >
223  : public BasicMakeVectorialExpression< FieldMatrix< K, 1, dimD >, FieldMatrix< K, dimR, dimD > >
224  {
225  typedef MakeVectorialExpression< FieldMatrix< K, 1, dimD >, FieldMatrix< K, dimR, dimD > > ThisType;
226  typedef BasicMakeVectorialExpression< FieldMatrix< K, 1, dimD >, FieldMatrix< K, dimR, dimD > > BaseType;
227 
228  public:
231 
234  typedef typename BaseType::size_type size_type;
235 
236  using BaseType::component;
237  using BaseType::scalar;
238 
241  {}
242 
243  template< class X, class Y >
244  void mv ( const X &x, Y &y ) const
245  {
246  for( size_type i = 0; i < rows(); ++i )
247  y[ i ] = field_type( 0 );
248  for( size_type j= 0; j < cols(); ++j )
249  y[ component() ] += scalar()[ component() ][ j ] * x[ j ];
250  }
251 
252  template< class X, class Y >
253  void mtv ( const X &x, Y &y ) const
254  {
255  for( size_type i = 0; i < rows(); ++i )
256  y[ i ] = scalar()[ i ][ component() ] * x[ component() ];
257  }
258 
259  template< class X, class Y >
260  void umv ( const X &x, Y &y ) const
261  {
262  for( size_type j= 0; j < cols(); ++j )
263  y[ component() ] += scalar()[ component() ][ j ] * x[ j ];
264  }
265 
266  template< class X, class Y >
267  void umtv ( const X &x, Y &y ) const
268  {
269  for( size_type i = 0; i < rows(); ++i )
270  y[ i ] += scalar()[ i ][ component() ] * x[ component() ];
271  }
272 
273  template< class X, class Y >
274  void mmv ( const X &x, Y &y ) const
275  {
276  for( size_type j= 0; j < cols(); ++j )
277  y[ component() ] -= scalar()[ component() ][ j ] * x[ j ];
278  }
279 
280  template< class X, class Y >
281  void mmtv ( const X &x, Y &y ) const
282  {
283  for( size_type i = 0; i < rows(); ++i )
284  y[ i ] -= scalar()[ i ][ component() ] * x[ component() ];
285  }
286 
287  field_type frobenius_norm () const { return scalar().frobenius_norm(); }
288  field_type frobenius_norm2 () const { return scalar().frobenius_norm2(); }
289  field_type infinity_norm () const { return scalar().infinity_norm(); }
290 
291  field_type determinant () const { return (dimR == 1 ? scalar().determinant() : field_type( 0 )); }
292 
293  size_type N () const { return rows(); }
294  size_type M () const { return cols(); }
295 
296  size_type rows () const { return dimR; }
297  size_type cols () const { return scalar().cols(); }
298  };
299 
300 
301 
302  // Auxilliary Functions for MakeVectorialExpression
303  // ------------------------------------------------
304 
305  template< class Scalar, class Vectorial >
306  inline bool
309  {
310  return ((a.component() == b.component()) && (a.scalar() == b.scalar()));
311  }
312 
313  template< class Scalar, class Vectorial >
314  inline bool
317  {
318  return ((a.component() != b.component()) || (a.scalar() != b.scalar()));
319  }
320 
321  template< class Scalar, class Vectorial >
322  inline bool
323  operator== ( const Vectorial &a,
325  {
326  return (a == static_cast< Vectorial >( b ));
327  }
328 
329  template< class Scalar, class Vectorial >
330  inline bool
331  operator!= ( const Vectorial &a,
333  {
334  return (a != static_cast< Vectorial >( b ));
335  }
336 
337  template< class Scalar, class Vectorial >
338  inline bool
340  const Vectorial &b )
341  {
342  return (static_cast< Vectorial >( a ) == b);
343  }
344 
345  template< class Scalar, class Vectorial >
346  inline bool
348  const Vectorial &b )
349  {
350  return (static_cast< Vectorial >( a ) != b);
351  }
352 
353  template< class Scalar, class Vectorial >
354  inline void
358  {
360  axpy( a, Traits::access( x.scalar() ), Traits::access( y, x.component() ) );
361  }
362 
363  template< class GeometryJacobianInverseTransposed, class K, int ROWS >
364  void jacobianTransformation ( const GeometryJacobianInverseTransposed &gjit,
365  const MakeVectorialExpression< FieldMatrix< K, 1, GeometryJacobianInverseTransposed::cols >, FieldMatrix< K, ROWS, GeometryJacobianInverseTransposed::cols > > &a,
366  FieldMatrix< K, ROWS, GeometryJacobianInverseTransposed::rows > &b )
367  {
368  typedef MakeVectorialTraits< FieldMatrix< K, 1, GeometryJacobianInverseTransposed::cols >, FieldMatrix< K, ROWS, GeometryJacobianInverseTransposed::cols > > Traits;
369  typedef MakeVectorialTraits< FieldMatrix< K, 1, GeometryJacobianInverseTransposed::rows >, FieldMatrix< K, ROWS, GeometryJacobianInverseTransposed::rows > > RgTraits;
370  b = RgTraits::zeroVectorial();
371  gjit.mv( Traits::access( a.scalar() ), b[ a.component() ] );
372  }
373 
374  template< class GeometryJacobianInverseTransposed, class K, int SIZE >
375  void hessianTransformation ( const GeometryJacobianInverseTransposed &gjit,
376  const MakeVectorialExpression< ExplicitFieldVector< FieldMatrix< K, GeometryJacobianInverseTransposed::cols, GeometryJacobianInverseTransposed::cols >, 1 >, ExplicitFieldVector< FieldMatrix< K, GeometryJacobianInverseTransposed::cols, GeometryJacobianInverseTransposed::cols >, SIZE > > &a,
377  ExplicitFieldVector< FieldMatrix< K, GeometryJacobianInverseTransposed::rows, GeometryJacobianInverseTransposed::rows >, SIZE > &b )
378  {
379  const int dimLocal = GeometryJacobianInverseTransposed::cols;
380  const int dimGlobal = GeometryJacobianInverseTransposed::rows;
381  typedef MakeVectorialTraits< FieldVector< FieldMatrix< K, dimLocal, dimLocal >, 1 >, FieldVector< FieldMatrix< K, dimLocal, dimLocal >, SIZE > > Traits;
382  typedef MakeVectorialTraits< FieldVector< FieldMatrix< K, dimGlobal, dimGlobal >, 1 >, FieldVector< FieldMatrix< K, dimGlobal, dimGlobal >, SIZE > > RgTraits;
383 
384  b = RgTraits::zeroVectorial();
385 
386  // c = J^{-T} a_r^T
387  FieldMatrix< K, dimLocal, dimGlobal > c;
388  for( int i = 0; i < dimLocal; ++i )
389  gjit.mv( Traits::access( a.scalar() )[ i ], c[ i ] );
390 
391  // b_r = J^{-T} c
392  for( int i = 0; i < dimGlobal; ++i )
393  {
395  FieldMatrixColumn< FieldMatrix< K, dimGlobal, dimGlobal > > bi( RgTraits::access( b, a.component() ), i );
396  gjit.umv( ci, bi );
397  }
398 
399  }
400 
401  template< class Scalar, class Vectorial >
402  inline typename MakeVectorialTraits< Scalar, Vectorial >::field_type
404  const Vectorial &b )
405  {
406  return scalarProduct( a.scalar()[ 0 ], b[ a.component() ] );
407  }
408 
409  template< class Scalar, class Vectorial >
410  inline typename MakeVectorialTraits< Scalar, Vectorial >::field_type
411  scalarProduct ( const Vectorial &a,
413  {
414  return scalarProduct( a[ b.component() ], b.scalar()[ 0 ] );
415  }
416 
417  template< class Scalar, class Vectorial >
418  inline typename MakeVectorialTraits< Scalar, Vectorial >::field_type
421  {
422  typedef typename MakeVectorialTraits< Scalar, Vectorial >::field_type field_type;
423  return (a.component() == b.component() ? scalarProduct( a.scalar(), b.scalar() ) : field_type( 0 ));
424  }
425 
426 
427 
428  // ToNewRange
429  // ----------
430 
431  template< class ScalarFunctionSpace, class RangeVector >
432  struct ToNewRange;
433 
434  template< class DomainField, class RangeField, int dimD, int dimR >
435  struct ToNewRange< FunctionSpace< DomainField, RangeField, dimD, 1 >, FieldVector< RangeField, dimR > >
436  {
438  };
439 
440 
441 
442  // VectorialShapeFunctionSet
443  // -------------------------
444 
445  template< class ScalarShapeFunctionSet, class RangeVector >
447  {
449 
450  public:
451  typedef ScalarShapeFunctionSet ScalarShapeFunctionSetType;
452 
453  // if ScalarShapeFunctionSetType has a member variable codegenShapeFunctionSet then this is forwarded here
454  // otherwise this value defaults to false
455  static constexpr bool codegenShapeFunctionSet = detail::IsCodegenShapeFunctionSet< ScalarShapeFunctionSetType >::value;
456  static const int pointSetId = detail::SelectPointSetId< ScalarShapeFunctionSetType >::value;
457 
458  protected:
459  typedef typename ScalarShapeFunctionSetType::FunctionSpaceType ScalarFunctionSpaceType;
460 
462 
463  template< class Functor, class Vectorial >
464  struct VectorialFunctor;
465 
466  public:
468 
469  typedef typename FunctionSpaceType::RangeType RangeType;
470  typedef typename FunctionSpaceType::JacobianRangeType JacobianRangeType;
471  typedef typename FunctionSpaceType::HessianRangeType HessianRangeType;
472 
473  template< class ... Args >
474  VectorialShapeFunctionSet ( Args&& ... args )
475  : scalarShapeFunctionSet_( std::forward< Args > ( args ) ... )
476  {}
477 
480  {}
481 
483 
484  int order () const { return scalarShapeFunctionSet().order(); }
485 
486  // Shape Function Set Interface Methods
487  std::size_t size () const { return dimRangeFactor * scalarShapeFunctionSet().size(); }
488 
489  template< class Point, class Functor >
490  void evaluateEach ( const Point &x, Functor functor ) const;
491 
492  template< class Point, class Functor >
493  void jacobianEach ( const Point &x, Functor functor ) const;
494 
495  template< class Point, class Functor >
496  void hessianEach ( const Point &x, Functor functor ) const;
497 
498  protected:
499  ScalarShapeFunctionSet scalarShapeFunctionSet_;
500  };
501 
502 
503 
504  // VectorialShapeFunctionSet::VectorialFunctor
505  // -------------------------------------------
506 
507  template< class ScalarShapeFunctionSet, class RangeVector >
508  template< class Functor, class Vectorial >
509  struct VectorialShapeFunctionSet< ScalarShapeFunctionSet, RangeVector >::VectorialFunctor
510  {
511  explicit VectorialFunctor ( const Functor &functor )
512  : functor_( functor )
513  {}
514 
515  template< class Scalar >
516  void operator() ( const std::size_t i, const Scalar &value )
517  {
520  const typename Traits::ComponentType end = Traits::end();
521  for( typename Traits::ComponentType k = Traits::begin(); k != end; ++k )
522  functor_( i*Traits::factor + Traits::index( k ), Expression( k, value ) );
523  }
524 
525  private:
526  Functor functor_;
527  };
528 
529 
530 
531  // Implementation of VectorialShapeFunctionSet
532  // -------------------------------------------
533 
534  template< class ScalarShapeFunctionSet, class RangeVector >
535  template< class Point, class Functor >
537  ::evaluateEach ( const Point &x, Functor functor ) const
538  {
539  typedef typename FunctionSpaceType::RangeType VectorialType;
540  scalarShapeFunctionSet().evaluateEach( x, VectorialFunctor< Functor, VectorialType >( functor ) );
541  }
542 
543 
544  template< class ScalarShapeFunctionSet, class RangeVector >
545  template< class Point, class Functor >
547  ::jacobianEach ( const Point &x, Functor functor ) const
548  {
549  typedef typename FunctionSpaceType::JacobianRangeType VectorialType;
550  scalarShapeFunctionSet().jacobianEach( x, VectorialFunctor< Functor, VectorialType >( functor ) );
551  }
552 
553 
554  template< class ScalarShapeFunctionSet, class RangeVector >
555  template< class Point, class Functor >
557  ::hessianEach ( const Point &x, Functor functor ) const
558  {
559  typedef typename FunctionSpaceType::HessianRangeType VectorialType;
560  scalarShapeFunctionSet().hessianEach( x, VectorialFunctor< Functor, VectorialType >( functor ) );
561  }
562 
563  } // namespace Fem
564 
565 } // namespace Dune
566 
567 #endif // #ifndef DUNE_FEM_SHAPEFUNCTIONSET_VECTORIAL_HH
Definition: bindguard.hh:11
void jacobianTransformation(const GeometryJacobianInverseTransposed &gjit, const FieldMatrix< K, ROWS, GeometryJacobianInverseTransposed::cols > &a, FieldMatrix< K, ROWS, GeometryJacobianInverseTransposed::rows > &b)
Definition: transformation.hh:21
Double operator*(const Double &a, const Double &b)
Definition: double.hh:506
double scalarProduct(const double &a, const double &b)
Definition: space/basisfunctionset/functor.hh:65
bool operator==(const Double &a, const Double &b)
Definition: double.hh:600
bool operator!=(const Double &a, const Double &b)
Definition: double.hh:640
void axpy(const T &a, const T &x, T &y)
Definition: space/basisfunctionset/functor.hh:38
void hessianTransformation(const GeometryJacobianInverseTransposed &gjit, const ExplicitFieldVector< FieldMatrix< K, GeometryJacobianInverseTransposed::cols, GeometryJacobianInverseTransposed::cols >, SIZE > &a, ExplicitFieldVector< FieldMatrix< K, GeometryJacobianInverseTransposed::rows, GeometryJacobianInverseTransposed::rows >, SIZE > &b)
Definition: transformation.hh:60
Definition: explicitfieldvector.hh:75
Definition: fmatrixcol.hh:16
A vector valued function space.
Definition: functionspace.hh:60
Definition: shapefunctionset/vectorial.hh:25
static ComponentType begin()
Definition: shapefunctionset/vectorial.hh:39
static const K & access(const VectorialType &x, const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:47
VectorialType::size_type ComponentType
Definition: shapefunctionset/vectorial.hh:34
static K & access(ScalarType &x)
Definition: shapefunctionset/vectorial.hh:45
FieldTraits< VectorialType >::field_type field_type
Definition: shapefunctionset/vectorial.hh:33
static VectorialType zeroVectorial()
Definition: shapefunctionset/vectorial.hh:42
FieldVector< K, 1 > ScalarType
Definition: shapefunctionset/vectorial.hh:30
VectorialType::size_type size_type
Definition: shapefunctionset/vectorial.hh:35
static K & access(VectorialType &x, const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:48
FieldVector< K, dimR > VectorialType
Definition: shapefunctionset/vectorial.hh:31
static const K & access(const ScalarType &x)
Definition: shapefunctionset/vectorial.hh:44
static ComponentType end()
Definition: shapefunctionset/vectorial.hh:40
static size_type index(const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:50
FieldTraits< VectorialType >::field_type field_type
Definition: shapefunctionset/vectorial.hh:59
ExplicitFieldVector< K, dimR > VectorialType
Definition: shapefunctionset/vectorial.hh:57
FieldVector< K, 1 > ScalarType
Definition: shapefunctionset/vectorial.hh:56
VectorialType::size_type ComponentType
Definition: shapefunctionset/vectorial.hh:60
static ComponentType begin()
Definition: shapefunctionset/vectorial.hh:65
static const K & access(const ScalarType &x)
Definition: shapefunctionset/vectorial.hh:70
static K & access(ScalarType &x)
Definition: shapefunctionset/vectorial.hh:71
VectorialType::size_type size_type
Definition: shapefunctionset/vectorial.hh:61
static ComponentType end()
Definition: shapefunctionset/vectorial.hh:66
static size_type index(const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:76
static K & access(VectorialType &x, const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:74
static VectorialType zeroVectorial()
Definition: shapefunctionset/vectorial.hh:68
static const K & access(const VectorialType &x, const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:73
static size_type index(const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:102
static ComponentType end()
Definition: shapefunctionset/vectorial.hh:92
static FieldVector< K, dimD > & access(ScalarType &x)
Definition: shapefunctionset/vectorial.hh:97
VectorialType::size_type size_type
Definition: shapefunctionset/vectorial.hh:87
static FieldVector< K, dimD > & access(VectorialType &x, const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:100
static ComponentType begin()
Definition: shapefunctionset/vectorial.hh:91
static const FieldVector< K, dimD > & access(const VectorialType &x, const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:99
FieldMatrix< K, dimR, dimD > VectorialType
Definition: shapefunctionset/vectorial.hh:83
FieldTraits< VectorialType >::field_type field_type
Definition: shapefunctionset/vectorial.hh:85
static const FieldVector< K, dimD > & access(const ScalarType &x)
Definition: shapefunctionset/vectorial.hh:96
static VectorialType zeroVectorial()
Definition: shapefunctionset/vectorial.hh:94
FieldMatrix< K, 1, dimD > ScalarType
Definition: shapefunctionset/vectorial.hh:82
VectorialType::size_type ComponentType
Definition: shapefunctionset/vectorial.hh:86
Definition: shapefunctionset/vectorial.hh:111
BasicMakeVectorialExpression(const ComponentType &component, const ScalarType &scalar)
Definition: shapefunctionset/vectorial.hh:124
ScalarType & scalar()
Definition: shapefunctionset/vectorial.hh:151
Traits::VectorialType VectorialType
Definition: shapefunctionset/vectorial.hh:118
Traits::ComponentType ComponentType
Definition: shapefunctionset/vectorial.hh:121
const ThisType & operator/=(const field_type &s)
Definition: shapefunctionset/vectorial.hh:142
ScalarType scalar_
Definition: shapefunctionset/vectorial.hh:155
const ComponentType & component() const
Definition: shapefunctionset/vectorial.hh:148
Traits::size_type size_type
Definition: shapefunctionset/vectorial.hh:122
ComponentType component_
Definition: shapefunctionset/vectorial.hh:154
Traits::ScalarType ScalarType
Definition: shapefunctionset/vectorial.hh:117
const ThisType & operator*=(const field_type &s)
Definition: shapefunctionset/vectorial.hh:136
const ScalarType & scalar() const
Definition: shapefunctionset/vectorial.hh:150
Traits::field_type field_type
Definition: shapefunctionset/vectorial.hh:120
Definition: shapefunctionset/vectorial.hh:166
MakeVectorialExpression(const ComponentType &component, const ScalarType &scalar)
Definition: shapefunctionset/vectorial.hh:174
BaseType::ComponentType ComponentType
Definition: shapefunctionset/vectorial.hh:171
BaseType::ScalarType ScalarType
Definition: shapefunctionset/vectorial.hh:172
field_type two_norm2() const
Definition: shapefunctionset/vectorial.hh:213
BaseType::size_type size_type
Definition: shapefunctionset/vectorial.hh:192
field_type one_norm() const
Definition: shapefunctionset/vectorial.hh:211
BaseType::field_type field_type
Definition: shapefunctionset/vectorial.hh:190
size_type size() const
Definition: shapefunctionset/vectorial.hh:216
BaseType::ComponentType ComponentType
Definition: shapefunctionset/vectorial.hh:191
field_type two_norm() const
Definition: shapefunctionset/vectorial.hh:212
BaseType::VectorialType VectorialType
Definition: shapefunctionset/vectorial.hh:188
field_type infinity_norm() const
Definition: shapefunctionset/vectorial.hh:214
BaseType::ScalarType ScalarType
Definition: shapefunctionset/vectorial.hh:187
MakeVectorialExpression(const ComponentType &component, const ScalarType &scalar)
Definition: shapefunctionset/vectorial.hh:197
field_type frobenius_norm() const
Definition: shapefunctionset/vectorial.hh:287
BaseType::field_type field_type
Definition: shapefunctionset/vectorial.hh:232
void mtv(const X &x, Y &y) const
Definition: shapefunctionset/vectorial.hh:253
field_type infinity_norm() const
Definition: shapefunctionset/vectorial.hh:289
size_type cols() const
Definition: shapefunctionset/vectorial.hh:297
size_type N() const
Definition: shapefunctionset/vectorial.hh:293
BaseType::size_type size_type
Definition: shapefunctionset/vectorial.hh:234
void mmv(const X &x, Y &y) const
Definition: shapefunctionset/vectorial.hh:274
BaseType::VectorialType VectorialType
Definition: shapefunctionset/vectorial.hh:230
field_type frobenius_norm2() const
Definition: shapefunctionset/vectorial.hh:288
void umv(const X &x, Y &y) const
Definition: shapefunctionset/vectorial.hh:260
BaseType::ScalarType ScalarType
Definition: shapefunctionset/vectorial.hh:229
size_type M() const
Definition: shapefunctionset/vectorial.hh:294
BaseType::ComponentType ComponentType
Definition: shapefunctionset/vectorial.hh:233
field_type determinant() const
Definition: shapefunctionset/vectorial.hh:291
void mmtv(const X &x, Y &y) const
Definition: shapefunctionset/vectorial.hh:281
MakeVectorialExpression(const ComponentType &component, const ScalarType &scalar)
Definition: shapefunctionset/vectorial.hh:239
void mv(const X &x, Y &y) const
Definition: shapefunctionset/vectorial.hh:244
void umtv(const X &x, Y &y) const
Definition: shapefunctionset/vectorial.hh:267
size_type rows() const
Definition: shapefunctionset/vectorial.hh:296
Definition: shapefunctionset/vectorial.hh:432
FunctionSpace< DomainField, RangeField, dimD, dimR > Type
Definition: shapefunctionset/vectorial.hh:437
Definition: shapefunctionset/vectorial.hh:447
void hessianEach(const Point &x, Functor functor) const
Definition: shapefunctionset/vectorial.hh:557
const ScalarShapeFunctionSetType & scalarShapeFunctionSet() const
Definition: shapefunctionset/vectorial.hh:482
ScalarShapeFunctionSet ScalarShapeFunctionSetType
Definition: shapefunctionset/vectorial.hh:451
void evaluateEach(const Point &x, Functor functor) const
Definition: shapefunctionset/vectorial.hh:537
std::size_t size() const
Definition: shapefunctionset/vectorial.hh:487
static constexpr bool codegenShapeFunctionSet
Definition: shapefunctionset/vectorial.hh:455
static const int pointSetId
Definition: shapefunctionset/vectorial.hh:456
void jacobianEach(const Point &x, Functor functor) const
Definition: shapefunctionset/vectorial.hh:547
int order() const
Definition: shapefunctionset/vectorial.hh:484
static const std::size_t dimRangeFactor
Definition: shapefunctionset/vectorial.hh:461
ScalarShapeFunctionSetType::FunctionSpaceType ScalarFunctionSpaceType
Definition: shapefunctionset/vectorial.hh:459
ToNewRange< ScalarFunctionSpaceType, RangeVector >::Type FunctionSpaceType
Definition: shapefunctionset/vectorial.hh:464
ScalarShapeFunctionSet scalarShapeFunctionSet_
Definition: shapefunctionset/vectorial.hh:499
VectorialShapeFunctionSet(const ScalarShapeFunctionSetType &scalarShapeFunctionSet)
Definition: shapefunctionset/vectorial.hh:478
FunctionSpaceType::JacobianRangeType JacobianRangeType
Definition: shapefunctionset/vectorial.hh:470
FunctionSpaceType::RangeType RangeType
Definition: shapefunctionset/vectorial.hh:469
FunctionSpaceType::HessianRangeType HessianRangeType
Definition: shapefunctionset/vectorial.hh:471
VectorialShapeFunctionSet(Args &&... args)
Definition: shapefunctionset/vectorial.hh:474
Definition: shapefunctionset/vectorial.hh:510
VectorialFunctor(const Functor &functor)
Definition: shapefunctionset/vectorial.hh:511