12#include <dune/common/fvector.hh>
31 template <
class F,
int dimD,
unsigned int deriv>
41 typedef Dune::FieldVector<F,size>
Block;
46 block() = field_cast< F >( f );
93 template <
class F,
int dimD,
unsigned int deriv>
97 using real_type =
typename FieldTraits<field_type>::real_type;
101 template <
class F,
unsigned int deriv>
113 template <
class F,
int dimD>
121 typedef Dune::FieldVector<F,size>
Block;
126 block() = field_cast< F >( f );
175 namespace DerivativeLayoutNS {
178 template <
class F,
int dimD,
int dimR,
unsigned int deriv,
182 template <
class F,
int dimD,
int dimR,
unsigned int deriv,
187 using real_type =
typename FieldTraits<field_type>::real_type;
191 template <
class F,
int dimD,
int dimR,
unsigned int deriv>
193 :
public Derivatives<F,dimD,dimR,deriv-1,DerivativeLayoutNS::value>
203 static const unsigned int dimDomain = dimD;
204 static const unsigned int dimRange = dimR;
205 constexpr static int size = Base::size+ThisLFETensor::size*dimR;
206 typedef Dune::FieldVector<F,size>
Block;
218 template <
unsigned int dorder>
221 tensor<dorder>() = t;
238 block().axpy(a,y.
block());
252 for (
int rr=0; rr<dimR; ++rr)
253 tensor_[rr] = y[rr].
template tensor<deriv>()[0];
256 template <
class Fy,
int dimRy>
259 assign<Fy,dimRy>(y.block(),r);
275 return reinterpret_cast<Block&
>(*this);
279 return reinterpret_cast<const Block&
>(*this);
282 template <
unsigned int dorder>
283 const Dune::FieldVector<LFETensor<F,dimD,dorder>,dimR> &
tensor()
const
286 const std::integral_constant<int,dorder> a = {};
289 template <
unsigned int dorder>
290 Dune::FieldVector<LFETensor<F,dimD,dorder>,dimR> &
tensor()
293 return tensor(std::integral_constant<int,dorder>());
295 template <
unsigned int dorder>
296 const Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR> &
block()
const
299 const std::integral_constant<int,dorder> a = {};
300 return reinterpret_cast<const Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR
>&>(tensor(a));
302 template <
unsigned int dorder>
303 Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR> &
block()
306 const std::integral_constant<int,dorder> a = {};
307 return reinterpret_cast<Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR
>&>(tensor(a));
316 template <
class Fy,
int dimRy>
317 void assign(
const FieldVector<Fy,size*dimRy> &y,
unsigned int r)
319 Base::template assign<Fy,dimRy>(
reinterpret_cast<const FieldVector<Fy,Base::size*dimRy>&
>(y),r);
320 tensor_[0] =
reinterpret_cast<const FieldVector<Fy,ThisLFETensor::size>&
>(y[Base::size*dimRy+r*ThisLFETensor::size]);
323 void assign(
unsigned int r,
const FieldVector<Fy,size/dimR> &y)
325 Base::assign(r,
reinterpret_cast<const FieldVector<Fy,Base::size/dimR
>&>(y));
326 tensor_[r] =
reinterpret_cast<const FieldVector<Fy,ThisLFETensor::size>&
>(y[Base::size/dimR]);
329 template <
class Fy,
unsigned int dy>
333 for (
int rr=0; rr<dimR; ++rr)
334 tensor_[rr] = y[rr].
template tensor<deriv>()[0];
337 template <
int dorder>
338 const Dune::FieldVector<LFETensor<F,dimD,dorder>,dimR> &
339 tensor(
const std::integral_constant<int,dorder> &dorderVar)
const
341 return Base::tensor(dorderVar);
343 const Dune::FieldVector<LFETensor<F,dimD,deriv>,dimR> &
344 tensor(
const std::integral_constant<int,deriv> &dorderVar)
const
348 template <
int dorder>
349 Dune::FieldVector<LFETensor<F,dimD,dorder>,dimR> &
350 tensor(
const std::integral_constant<int,dorder> &dorderVar)
352 return Base::tensor(dorderVar);
354 Dune::FieldVector<LFETensor<F,dimD,deriv>,dimR> &
355 tensor(
const std::integral_constant<int,deriv> &dorderVar)
359 Dune::FieldVector<ThisLFETensor,dimR>
tensor_;
362 template <
class F,
int dimD,
int dimR>
372 static const unsigned int dimDomain = dimD;
373 static const unsigned int dimRange = dimR;
374 constexpr static int size = ThisLFETensor::size*dimR;
375 typedef Dune::FieldVector<F,size>
Block;
380 for (
int r=0; r<dimR; ++r)
381 tensor_[r] = field_cast<F>(f);
404 block().axpy(a,y.
block());
414 for (
int rr=0; rr<dimR; ++rr)
415 tensor_[rr] = y[rr].
template tensor<0>()[0];
417 template <
class Fy,
int dimRy>
420 assign<Fy,dimRy>(y.block(),r);
425 tensor_[r].assign(y[0]);
430 tensor_[r].assign(y[0][0]);
435 return reinterpret_cast<Block&
>(*this);
439 return reinterpret_cast<const Block&
>(*this);
448 template <
int dorder>
449 const Dune::FieldVector<LFETensor<F,dimD,0>,dimR> &
tensor()
const
453 Dune::FieldVector<LFETensor<F,dimD,0>,dimR> &
tensor()
457 template <
unsigned int dorder>
458 const Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR> &
block()
const
461 const std::integral_constant<int,dorder> a = {};
462 return reinterpret_cast<const Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR
>&>(tensor(a));
464 template <
unsigned int dorder>
465 Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR> &
block()
468 const std::integral_constant<int,dorder> a = {};
469 return reinterpret_cast<Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR
>&>(tensor(a));
473 const Dune::FieldVector<LFETensor<F,dimD,0>,dimR> &
474 tensor(
const std::integral_constant<int,0> &dorderVar)
const
478 Dune::FieldVector<LFETensor<F,dimD,0>,dimR> &
479 tensor(
const std::integral_constant<int,0> &dorderVar)
483 template <
class Fy,
unsigned int dy>
486 for (
int rr=0; rr<dimR; ++rr)
487 tensor_[rr] = y[rr].
template tensor<0>()[0];
489 template <
class Fy,
int dimRy>
490 void assign(
const FieldVector<Fy,size*dimRy> &y,
unsigned int r)
492 tensor_[0] =
reinterpret_cast<const FieldVector<Fy,ThisLFETensor::size>&
>(y[r*ThisLFETensor::size]);
495 void assign(
unsigned int r,
const FieldVector<Fy,size/dimR> &y)
499 Dune::FieldVector<ThisLFETensor,dimR>
tensor_;
503 template <
class F,
int dimD,
int dimR,
unsigned int deriv>
504 struct Derivatives<F,dimD,dimR,deriv,DerivativeLayoutNS::derivative>
513 static const unsigned int dimDomain = dimD;
514 static const unsigned int dimRange = dimR;
515 constexpr static int size = ScalarDeriv::size*dimR;
516 typedef Dune::FieldVector<F,size>
Block;
521 block() = field_cast<F>(f);
539 block().axpy(field_cast<F>(a),y.
block());
551 for (
unsigned int rr=0; rr<dimR; ++rr)
552 deriv_[rr].assign(y,rr);
555 template <
class Fy,DerivativeLayoutNS::DerivativeLayout layouty>
558 deriv_[r].assign(r,y);
563 return reinterpret_cast<Block&
>(*this);
567 return reinterpret_cast<const Block&
>(*this);
577 Dune::FieldVector<ScalarDeriv,dimR>
deriv_;
583 template <
class Vec1,
class Vec2,
unsigned int deriv>
586 template <
class Field>
587 static void apply(
unsigned int r,
const Field &a,
588 const Vec1 &x, Vec2 &y)
593 template <
class F1,
int dimD,
int dimR,
600 template <
class Field>
601 static void apply(
unsigned int r,
const Field &a,
602 const Vec1 &x, Vec2 &y)
604 const FieldVector<F1,Vec2::size> &xx = x.template block<deriv>();
605 for (
int i=0; i<y.size; ++i)
609 template <
class F1,
int dimD,
int dimR,
616 template <
class Field>
617 static void apply(
unsigned int r,
const Field &a,
618 const Vec1 &x, Vec2 &y)
620 for (
int rr=0; rr<dimR; ++rr)
622 Vec2,deriv>
::apply(rr,a,x[rr],y);
625 template <
class F1,
int dimD,
632 template <
class Field>
633 static void apply(
unsigned int r,
const Field &a,
634 const Vec1 &x, Vec2 &y)
637 Vec2,deriv>
::apply(r,a,x[0],y);
640 template <
class F1,
int dimD,
647 template <
class Field>
648 static void apply(
unsigned int r,
const Field &a,
649 const Vec1 &x, Vec2 &y)
652 const unsigned int rr = r*LFETensorType::size;
653 const FieldVector<F1,LFETensorType::size> &xx = x.template block<deriv>();
654 for (
int i=0; i<FieldVector<F1,LFETensorType::size>::dimension; ++i)
662 template <
class Vec1,
class Vec2>
665 static void apply(
unsigned int r,
const Vec1 &vec1,Vec2 &vec2)
682 template <
int dimD,
int dimR,
unsigned int deriv,
685 Derivatives<F2,dimD,dimR,deriv,DerivativeLayoutNS::derivative> >
694 template <
int dimD,
int dimR,
unsigned int deriv,
697 Derivatives<F2,dimD,dimR,deriv,DerivativeLayoutNS::value> >
709 Derivatives<F2,dimD,dimR,deriv,DerivativeLayoutNS::value> >
721 Derivatives<F2,dimD,dimR,deriv,DerivativeLayoutNS::derivative> >
730 template <
int dimD,
unsigned int deriv,
733 Derivatives<F2,dimD,1,deriv,DerivativeLayoutNS::value> >
742 template <
int dimD,
unsigned int deriv,
745 Derivatives<F2,dimD,1,deriv,DerivativeLayoutNS::derivative> >
754 template <
int dimD,
unsigned int deriv,
757 Derivatives<F2,dimD,1,deriv,DerivativeLayoutNS::value> >
766 template <
int dimD,
unsigned int deriv,
769 Derivatives<F2,dimD,1,deriv,DerivativeLayoutNS::derivative> >
790 template <
int dimD,
int dimR,
791 class F1,
unsigned int deriv,
796 typedef FieldVector<F2,dimR>
Vec2;
802 template <
int dimD,
int dimR,
803 class F1,
unsigned int deriv,
808 typedef FieldVector<F2,dimR>
Vec2;
811 for (
int rr=0; rr<dimR; ++rr)
812 field_cast(vec1[rr].
template tensor<0>()[0].block(),vec2[rr]);
816 class F1,
unsigned int deriv,
821 typedef FieldVector<F2,dimR>
Vec2;
824 field_cast(vec1.template tensor<0>()[0].block(),vec2[r]);
828 class F1,
unsigned int deriv,
833 typedef FieldVector<F2,dimR>
Vec2;
836 field_cast(vec1[0].
template tensor<0>()[0].block(),vec2[r]);
840 class F1,
unsigned int deriv,
845 typedef FieldVector<F2,1>
Vec2;
848 field_cast(vec1.template tensor<0>()[0].block(),vec2);
852 class F1,
unsigned int deriv,
857 typedef FieldVector<F2,1>
Vec2;
860 field_cast(vec1[0].
template tensor<0>()[0].block(),vec2);
867 template <
class F,
int dimD,
unsigned int deriv>
870 return out << tensor.
block();
873 template <
class F,
int dimD,
unsigned int deriv>
874 std::ostream &
operator<< ( std::ostream &out,
const ScalarDerivatives< F,dimD,deriv > &d )
876 out <<
static_cast<const ScalarDerivatives< F,dimD,deriv-1
> &>(d);
877 out <<
" , " << d.tensor() << std::endl;
880 template <
class F,
int dimD>
881 std::ostream &
operator<< ( std::ostream &out,
const ScalarDerivatives< F,dimD,0 > &d )
883 out << d.tensor() << std::endl;
887 template <
class F,
int dimD,
int dimR,
unsigned int deriv>
892 for (
int r=1; r<dimR; ++r)
894 out <<
" , " << d[r];
896 out <<
" ) " << std::endl;
899 template <
class F,
int dimD,
int dimR,
unsigned int deriv>
905 for (
int r=1; r<dimR; ++r)
907 out <<
" , " << d[r];
909 out <<
" ) " << std::endl;
912 template <
class F,
int dimD,
int dimR>
917 for (
int r=1; r<dimR; ++r)
919 out <<
" , " << d[r];
921 out <<
" ) " << std::endl;
924 template <
class F,
int dimD,
int dimR>
929 for (
int r=1; r<dimR; ++r)
931 out <<
" , " << d[r];
933 out <<
" ) " << std::endl;
936 template <
class F,
int dimD,
int dimR,
unsigned int deriv,DerivativeLayoutNS::DerivativeLayout layout>
939 out <<
"Number of basis functions: " << y.size() << std::endl;
940 for (
unsigned int i=0; i<y.size(); ++i)
942 out <<
"Base " << i <<
" : " << std::endl;
Definition bdfmcube.hh:18
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
std::ostream & operator<<(std::ostream &out, const LFEMatrix< Field > &mat)
Definition lfematrix.hh:151
DerivativeLayout
Definition tensor.hh:176
@ derivative
Definition tensor.hh:176
@ value
Definition tensor.hh:176
const Block & block() const
Definition tensor.hh:76
This & operator*=(const field_type &f)
Definition tensor.hh:56
Dune::FieldVector< F, size > Block
Definition tensor.hh:41
This & operator=(const FF &f)
Definition tensor.hh:44
Block block_
Definition tensor.hh:89
F field_type
Definition tensor.hh:39
void axpy(const F &a, const This &y)
Definition tensor.hh:80
Block & block()
Definition tensor.hh:72
void assign(const LFETensor< Fy, dimD, deriv > &y)
Definition tensor.hh:85
static const unsigned int size
Definition tensor.hh:40
const field_type & operator[](const unsigned int i) const
Definition tensor.hh:62
typename FieldTraits< field_type >::real_type real_type
Definition tensor.hh:97
F field_type
Definition tensor.hh:96
Block & block()
Definition tensor.hh:162
F field_type
Definition tensor.hh:119
Block block_
Definition tensor.hh:170
void assign(const LFETensor< Fy, dimD, 0 > &y)
Definition tensor.hh:157
const Block & block() const
Definition tensor.hh:166
void axpy(const F &a, const This &y)
Definition tensor.hh:152
Dune::FieldVector< F, size > Block
Definition tensor.hh:121
F field_type
Definition tensor.hh:186
typename FieldTraits< field_type >::real_type real_type
Definition tensor.hh:187
F Field
Definition tensor.hh:199
Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::value > This
Definition tensor.hh:195
This & operator=(const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > &t)
Definition tensor.hh:219
F field_type
Definition tensor.hh:200
Derivatives< F, dimD, dimR, deriv-1, DerivativeLayoutNS::value > Base
Definition tensor.hh:196
const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor(const std::integral_constant< int, dorder > &dorderVar) const
Definition tensor.hh:339
void assign(const FieldVector< Fy, size *dimRy > &y, unsigned int r)
Definition tensor.hh:317
void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::value > &y)
Definition tensor.hh:243
void assign(const Derivatives< Fy, dimD, dimR, dy, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:330
This & operator=(const F &f)
Definition tensor.hh:208
const ThisLFETensor & operator[](int r) const
Definition tensor.hh:312
Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block()
Definition tensor.hh:303
LFETensor< F, dimD, deriv > ThisLFETensor
Definition tensor.hh:197
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, DerivativeLayoutNS::value > &y)
Definition tensor.hh:263
const Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block() const
Definition tensor.hh:296
Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor(const std::integral_constant< int, dorder > &dorderVar)
Definition tensor.hh:350
const Block & block() const
Definition tensor.hh:277
void axpy(const F &a, const This &y)
Definition tensor.hh:236
void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:249
This & operator=(const Dune::FieldVector< ThisLFETensor, dimR > &t)
Definition tensor.hh:213
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:268
This & operator=(const Block &t)
Definition tensor.hh:224
Dune::FieldVector< F, size > Block
Definition tensor.hh:206
Dune::FieldVector< ThisLFETensor, dimR > tensor_
Definition tensor.hh:359
Dune::FieldVector< LFETensor< F, dimD, deriv >, dimR > & tensor(const std::integral_constant< int, deriv > &dorderVar)
Definition tensor.hh:355
Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor()
Definition tensor.hh:290
void assign(const Derivatives< Fy, dimD, dimRy, deriv, DerivativeLayoutNS::value > &y, unsigned int r)
Definition tensor.hh:257
const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor() const
Definition tensor.hh:283
const Dune::FieldVector< LFETensor< F, dimD, deriv >, dimR > & tensor(const std::integral_constant< int, deriv > &dorderVar) const
Definition tensor.hh:344
ThisLFETensor & operator[](int r)
Definition tensor.hh:309
Block & block()
Definition tensor.hh:273
void assign(unsigned int r, const FieldVector< Fy, size/dimR > &y)
Definition tensor.hh:323
ThisLFETensor & operator[](int r)
Definition tensor.hh:442
LFETensor< F, dimD, 0 > ThisLFETensor
Definition tensor.hh:366
Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block()
Definition tensor.hh:465
Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor(const std::integral_constant< int, 0 > &dorderVar)
Definition tensor.hh:479
void assign(const Derivatives< Fy, dimD, dimR, 0, DerivativeLayoutNS::value > &y)
Definition tensor.hh:407
F Field
Definition tensor.hh:368
Derivatives< F, dimD, dimR, 0, DerivativeLayoutNS::value > This
Definition tensor.hh:365
void assign(const Derivatives< Fy, dimD, dimR, dy, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:484
void assign(const Derivatives< Fy, dimD, dimRy, 0, DerivativeLayoutNS::value > &y, unsigned int r)
Definition tensor.hh:418
const Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor() const
Definition tensor.hh:449
Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor()
Definition tensor.hh:453
This & operator=(const Block &t)
Definition tensor.hh:390
F field_type
Definition tensor.hh:369
const ThisLFETensor & operator[](int r) const
Definition tensor.hh:445
const Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor(const std::integral_constant< int, 0 > &dorderVar) const
Definition tensor.hh:474
Dune::FieldVector< F, size > Block
Definition tensor.hh:375
const Block & block() const
Definition tensor.hh:437
const Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block() const
Definition tensor.hh:458
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, 0, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:428
void assign(const Derivatives< Fy, dimD, dimR, 0, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:412
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, 0, DerivativeLayoutNS::value > &y)
Definition tensor.hh:423
This & operator=(const Dune::FieldVector< ThisLFETensor, dimR > &t)
Definition tensor.hh:384
void assign(const FieldVector< Fy, size *dimRy > &y, unsigned int r)
Definition tensor.hh:490
Dune::FieldVector< ThisLFETensor, dimR > tensor_
Definition tensor.hh:499
void assign(unsigned int r, const FieldVector< Fy, size/dimR > &y)
Definition tensor.hh:495
This & operator=(const FF &f)
Definition tensor.hh:378
Block & block()
Definition tensor.hh:433
void axpy(const F &a, const This &y)
Definition tensor.hh:402
This & operator=(const FF &f)
Definition tensor.hh:519
Block & block()
Definition tensor.hh:561
F Field
Definition tensor.hh:509
const Block & block() const
Definition tensor.hh:565
F field_type
Definition tensor.hh:510
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, layouty > &y)
Definition tensor.hh:556
ScalarDeriv & operator[](int r)
Definition tensor.hh:570
void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::value > &y)
Definition tensor.hh:549
Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::derivative > This
Definition tensor.hh:506
Derivatives< F, dimD, 1, deriv, DerivativeLayoutNS::value > ScalarDeriv
Definition tensor.hh:507
const ScalarDeriv & operator[](int r) const
Definition tensor.hh:573
void axpy(const FF &a, const This &y)
Definition tensor.hh:537
This & operator=(const Block &t)
Definition tensor.hh:524
Dune::FieldVector< F, size > Block
Definition tensor.hh:516
Dune::FieldVector< ScalarDeriv, dimR > deriv_
Definition tensor.hh:577
void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:543
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:587
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:601
Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:599
Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:615
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:617
Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:631
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:633
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:648
Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:646
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:665
Derivatives< F1, dimD, dimR, deriv, layout > Vec1
Definition tensor.hh:675
Derivatives< F2, dimD, dimR, deriv, layout > Vec2
Definition tensor.hh:676
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:677
Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:687
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:689
Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec2
Definition tensor.hh:688
Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec2
Definition tensor.hh:700
Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:699
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:701
Derivatives< F1, dimD, 1, deriv, layout > Vec1
Definition tensor.hh:711
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:713
Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec2
Definition tensor.hh:712
Derivatives< F1, dimD, 1, deriv, layout > Vec1
Definition tensor.hh:723
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:725
Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec2
Definition tensor.hh:724
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:735
Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::value > Vec2
Definition tensor.hh:736
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:737
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:747
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:749
Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec2
Definition tensor.hh:748
Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::value > Vec2
Definition tensor.hh:760
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:761
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:759
Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec2
Definition tensor.hh:772
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:773
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:771
F2 Vec2
Definition tensor.hh:784
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:785
Derivatives< F1, dimD, 1, deriv, layout > Vec1
Definition tensor.hh:783
Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:795
FieldVector< F2, dimR > Vec2
Definition tensor.hh:796
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:797
Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:807
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:809
FieldVector< F2, dimR > Vec2
Definition tensor.hh:808
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:820
FieldVector< F2, dimR > Vec2
Definition tensor.hh:821
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:822
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:834
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:832
FieldVector< F2, dimR > Vec2
Definition tensor.hh:833
FieldVector< F2, 1 > Vec2
Definition tensor.hh:845
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:844
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:846
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:856
static void apply(unsigned int, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:858
FieldVector< F2, 1 > Vec2
Definition tensor.hh:857