dune-fem 2.8.0
Loading...
Searching...
No Matches
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
15namespace 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
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
193
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
235
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 {
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 >
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
bool operator==(const DiscreteFunctionInterface< ImplX > &x, const DiscreteFunctionInterface< ImplY > &y)
Definition: common/discretefunction.hh:1053
bool operator!=(const DiscreteFunctionInterface< ImplX > &x, const DiscreteFunctionInterface< ImplY > &y)
Definition: common/discretefunction.hh:1059
STL namespace.
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
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
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
FieldVector< K, dimR > VectorialType
Definition: shapefunctionset/vectorial.hh:31
static ComponentType end()
Definition: shapefunctionset/vectorial.hh:40
static size_type index(const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:50
static K & access(VectorialType &x, const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:48
static K & access(ScalarType &x)
Definition: shapefunctionset/vectorial.hh:45
static const K & access(const ScalarType &x)
Definition: shapefunctionset/vectorial.hh:44
FieldTraits< VectorialType >::field_type field_type
Definition: shapefunctionset/vectorial.hh:59
static const K & access(const ScalarType &x)
Definition: shapefunctionset/vectorial.hh:70
ExplicitFieldVector< K, dimR > VectorialType
Definition: shapefunctionset/vectorial.hh:57
static K & access(VectorialType &x, const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:74
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 VectorialType &x, const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:73
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 VectorialType zeroVectorial()
Definition: shapefunctionset/vectorial.hh:68
static K & access(ScalarType &x)
Definition: shapefunctionset/vectorial.hh:71
static size_type index(const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:102
static ComponentType end()
Definition: shapefunctionset/vectorial.hh:92
VectorialType::size_type size_type
Definition: shapefunctionset/vectorial.hh:87
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 FieldVector< K, dimD > & access(ScalarType &x)
Definition: shapefunctionset/vectorial.hh:97
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
static FieldVector< K, dimD > & access(VectorialType &x, const ComponentType &i)
Definition: shapefunctionset/vectorial.hh:100
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
const ComponentType & component() const
Definition: shapefunctionset/vectorial.hh:148
BasicMakeVectorialExpression(const ComponentType &component, const ScalarType &scalar)
Definition: shapefunctionset/vectorial.hh:124
Traits::VectorialType VectorialType
Definition: shapefunctionset/vectorial.hh:118
Traits::ComponentType ComponentType
Definition: shapefunctionset/vectorial.hh:121
ScalarType scalar_
Definition: shapefunctionset/vectorial.hh:155
ScalarType & scalar()
Definition: shapefunctionset/vectorial.hh:151
const ThisType & operator/=(const field_type &s)
Definition: shapefunctionset/vectorial.hh:142
Traits::size_type size_type
Definition: shapefunctionset/vectorial.hh:122
const ThisType & operator*=(const field_type &s)
Definition: shapefunctionset/vectorial.hh:136
ComponentType component_
Definition: shapefunctionset/vectorial.hh:154
Traits::ScalarType ScalarType
Definition: shapefunctionset/vectorial.hh:117
Traits::field_type field_type
Definition: shapefunctionset/vectorial.hh:120
const ScalarType & scalar() const
Definition: shapefunctionset/vectorial.hh:150
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
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
const ScalarShapeFunctionSetType & scalarShapeFunctionSet() const
Definition: shapefunctionset/vectorial.hh:482
ToNewRange< ScalarFunctionSpaceType, RangeVector >::Type FunctionSpaceType
Definition: shapefunctionset/vectorial.hh:467
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
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