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