v0.14.0
Tensor3_times_Tensor3.hpp
Go to the documentation of this file.
1 /* Fully contracts a Tensor3 with a Tensor3, yielding a typename
2  promote<T,U>::V. */
3 
4 #pragma once
5 
6 namespace FTensor
7 {
8  /* A(i,j,k)*B(i,j,k) */
9 
10  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
11  char i, char j, char k, int Current_Dim0, int Current_Dim1,
12  int Current_Dim2>
13  typename promote<T, U>::V
17  const Number<Current_Dim2> &)
18  {
19  return a(Current_Dim0 - 1, Current_Dim1 - 1, Current_Dim2 - 1)
20  * b(Current_Dim0 - 1, Current_Dim1 - 1, Current_Dim2 - 1)
24  }
25 
26  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
27  char i, char j, char k, int Current_Dim0, int Current_Dim2>
28  typename promote<T, U>::V
31  const Number<Current_Dim0> &, const Number<1> &,
32  const Number<Current_Dim2> &)
33  {
34  return a(Current_Dim0 - 1, 0, Current_Dim2 - 1)
35  * b(Current_Dim0 - 1, 0, Current_Dim2 - 1)
38  }
39 
40  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
41  char i, char j, char k, int Current_Dim0>
42  typename promote<T, U>::V
45  const Number<Current_Dim0> &, const Number<1> &,
46  const Number<1> &)
47  {
48  return a(Current_Dim0 - 1, 0, 0) * b(Current_Dim0 - 1, 0, 0)
50  Number<Dim2>());
51  }
52 
53  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
54  char i, char j, char k>
55  typename promote<T, U>::V
58  const Number<1> &, const Number<1> &, const Number<1> &)
59  {
60  return a(0, 0, 0) * b(0, 0, 0);
61  }
62 
63  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
64  char i, char j, char k>
65  typename promote<T, U>::V
68  {
70  Number<Dim2>());
71  }
72 
73  /* A(i,j,k)*B(k,i,j) */
74 
75  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
76  char i, char j, char k, int Current_Dim0, int Current_Dim1,
77  int Current_Dim2>
78  typename promote<T, U>::V
82  const Number<Current_Dim2> &)
83  {
84  return a(Current_Dim0 - 1, Current_Dim1 - 1, Current_Dim2 - 1)
85  * b(Current_Dim2 - 1, Current_Dim0 - 1, Current_Dim1 - 1)
89  }
90 
91  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
92  char i, char j, char k, int Current_Dim0, int Current_Dim2>
93  typename promote<T, U>::V
96  const Number<Current_Dim0> &, const Number<1> &,
97  const Number<Current_Dim2> &)
98  {
99  return a(Current_Dim0 - 1, 0, Current_Dim2 - 1)
100  * b(Current_Dim2 - 1, Current_Dim0 - 1, 0)
103  }
104 
105  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
106  char i, char j, char k, int Current_Dim0>
107  typename promote<T, U>::V
110  const Number<Current_Dim0> &, const Number<1> &,
111  const Number<1> &)
112  {
113  return a(Current_Dim0 - 1, 0, 0) * b(0, Current_Dim0 - 1, 0)
115  Number<Dim2>());
116  }
117 
118  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
119  char i, char j, char k>
120  typename promote<T, U>::V
123  const Number<1> &, const Number<1> &, const Number<1> &)
124  {
125  return a(0, 0, 0) * b(0, 0, 0);
126  }
127 
128  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
129  char i, char j, char k>
130  typename promote<T, U>::V
133  {
134  return T3_times_T3_201(a, b, Number<Dim0>(), Number<Dim1>(),
135  Number<Dim2>());
136  }
137 
138  /* A(i,j,k)*B(j,k,i) */
139 
140  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
141  char i, char j, char k, int Current_Dim0, int Current_Dim1,
142  int Current_Dim2>
143  typename promote<T, U>::V
147  const Number<Current_Dim2> &)
148  {
149  return a(Current_Dim0 - 1, Current_Dim1 - 1, Current_Dim2 - 1)
150  * b(Current_Dim1 - 1, Current_Dim2 - 1, Current_Dim0 - 1)
154  }
155 
156  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
157  char i, char j, char k, int Current_Dim0, int Current_Dim2>
158  typename promote<T, U>::V
161  const Number<Current_Dim0> &, const Number<1> &,
162  const Number<Current_Dim2> &)
163  {
164  return a(Current_Dim0 - 1, 0, Current_Dim2 - 1)
165  * b(0, Current_Dim2 - 1, Current_Dim0 - 1)
168  }
169 
170  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
171  char i, char j, char k, int Current_Dim0>
172  typename promote<T, U>::V
175  const Number<Current_Dim0> &, const Number<1> &,
176  const Number<1> &)
177  {
178  return a(Current_Dim0 - 1, 0, 0) * b(0, 0, Current_Dim0 - 1)
180  Number<Dim2>());
181  }
182 
183  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
184  char i, char j, char k>
185  typename promote<T, U>::V
188  const Number<1> &, const Number<1> &, const Number<1> &)
189  {
190  return a(0, 0, 0) * b(0, 0, 0);
191  }
192 
193  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
194  char i, char j, char k>
195  typename promote<T, U>::V
198  {
199  return T3_times_T3_120(a, b, Number<Dim0>(), Number<Dim1>(),
200  Number<Dim2>());
201  }
202 
203  /* A(i,j,k)*B(j,i,k) */
204 
205  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
206  char i, char j, char k, int Current_Dim0, int Current_Dim1,
207  int Current_Dim2>
208  typename promote<T, U>::V
212  const Number<Current_Dim2> &)
213  {
214  return a(Current_Dim0 - 1, Current_Dim1 - 1, Current_Dim2 - 1)
215  * b(Current_Dim1 - 1, Current_Dim0 - 1, Current_Dim2 - 1)
219  }
220 
221  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
222  char i, char j, char k, int Current_Dim0, int Current_Dim2>
223  typename promote<T, U>::V
226  const Number<Current_Dim0> &, const Number<1> &,
227  const Number<Current_Dim2> &)
228  {
229  return a(Current_Dim0 - 1, 0, Current_Dim2 - 1)
230  * b(0, Current_Dim0 - 1, Current_Dim2 - 1)
233  }
234 
235  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
236  char i, char j, char k, int Current_Dim0>
237  typename promote<T, U>::V
240  const Number<Current_Dim0> &, const Number<1> &,
241  const Number<1> &)
242  {
243  return a(Current_Dim0 - 1, 0, 0) * b(0, Current_Dim0 - 1, 0)
245  Number<Dim2>());
246  }
247 
248  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
249  char i, char j, char k>
250  typename promote<T, U>::V
253  const Number<1> &, const Number<1> &, const Number<1> &)
254  {
255  return a(0, 0, 0) * b(0, 0, 0);
256  }
257 
258  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
259  char i, char j, char k>
260  typename promote<T, U>::V
263  {
264  return T3_times_T3_102(a, b, Number<Dim0>(), Number<Dim1>(),
265  Number<Dim2>());
266  }
267 
268  /* A(i,j,k)*B(k,j,i) */
269 
270  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
271  char i, char j, char k, int Current_Dim0, int Current_Dim1,
272  int Current_Dim2>
273  typename promote<T, U>::V
277  const Number<Current_Dim2> &)
278  {
279  return a(Current_Dim0 - 1, Current_Dim1 - 1, Current_Dim2 - 1)
280  * b(Current_Dim2 - 1, Current_Dim1 - 1, Current_Dim0 - 1)
284  }
285 
286  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
287  char i, char j, char k, int Current_Dim0, int Current_Dim2>
288  typename promote<T, U>::V
291  const Number<Current_Dim0> &, const Number<1> &,
292  const Number<Current_Dim2> &)
293  {
294  return a(Current_Dim0 - 1, 0, Current_Dim2 - 1)
295  * b(Current_Dim2 - 1, 0, Current_Dim0 - 1)
298  }
299 
300  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
301  char i, char j, char k, int Current_Dim0>
302  typename promote<T, U>::V
305  const Number<Current_Dim0> &, const Number<1> &,
306  const Number<1> &)
307  {
308  return a(Current_Dim0 - 1, 0, 0) * b(0, 0, Current_Dim0 - 1)
310  Number<Dim2>());
311  }
312 
313  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
314  char i, char j, char k>
315  typename promote<T, U>::V
318  const Number<1> &, const Number<1> &, const Number<1> &)
319  {
320  return a(0, 0, 0) * b(0, 0, 0);
321  }
322 
323  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
324  char i, char j, char k>
325  typename promote<T, U>::V
328  {
329  return T3_times_T3_210(a, b, Number<Dim0>(), Number<Dim1>(),
330  Number<Dim2>());
331  }
332 
333  /* A(i,j,k)*B(i,k,j) */
334 
335  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
336  char i, char j, char k, int Current_Dim0, int Current_Dim1,
337  int Current_Dim2>
338  typename promote<T, U>::V
342  const Number<Current_Dim2> &)
343  {
344  return a(Current_Dim0 - 1, Current_Dim1 - 1, Current_Dim2 - 1)
345  * b(Current_Dim0 - 1, Current_Dim2 - 1, Current_Dim1 - 1)
349  }
350 
351  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
352  char i, char j, char k, int Current_Dim0, int Current_Dim2>
353  typename promote<T, U>::V
356  const Number<Current_Dim0> &, const Number<1> &,
357  const Number<Current_Dim2> &)
358  {
359  return a(Current_Dim0 - 1, 0, Current_Dim2 - 1)
360  * b(Current_Dim0 - 1, Current_Dim2 - 1, 0)
363  }
364 
365  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
366  char i, char j, char k, int Current_Dim0>
367  typename promote<T, U>::V
370  const Number<Current_Dim0> &, const Number<1> &,
371  const Number<1> &)
372  {
373  return a(Current_Dim0 - 1, 0, 0) * b(Current_Dim0 - 1, 0, 0)
375  Number<Dim2>());
376  }
377 
378  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
379  char i, char j, char k>
380  typename promote<T, U>::V
383  const Number<1> &, const Number<1> &, const Number<1> &)
384  {
385  return a(0, 0, 0) * b(0, 0, 0);
386  }
387 
388  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim2,
389  char i, char j, char k>
390  typename promote<T, U>::V
393  {
394  return T3_times_T3_021(a, b, Number<Dim0>(), Number<Dim1>(),
395  Number<Dim2>());
396  }
397 
398  /* A(i,j,k)*B(j,i,l) -> Tensor2 */
399 
400  template <class A, class B, class T, class U, int Dim04, int Dim13, int Dim2,
401  int Dim5, char i, char j, char k, char l>
403  {
406 
407  template <int CurrentDim0, int CurrentDim1>
408  typename promote<T, U>::V eval(const int N1, const int N2,
409  const Number<CurrentDim0> &,
410  const Number<CurrentDim1> &) const {
411  return iterA(CurrentDim0 - 1, CurrentDim1 - 1, N1) *
412  iterB(CurrentDim1 - 1, CurrentDim0 - 1, N2) +
414  }
415  template <int CurrentDim0>
416  typename promote<T, U>::V eval(const int N1, const int N2,
417  const Number<CurrentDim0> &,
418  const Number<1> &) const {
419  return iterA(CurrentDim0 - 1, 0, N1) * iterB(0, CurrentDim0 - 1, N2) +
421  }
422  typename promote<T, U>::V eval(const int N1, const int N2,
423  const Number<1> &, const Number<1> &) const {
424  return iterA(0, 0, N1) * iterB(0, 0, N2);
425  }
426 
427  public:
431  : iterA(a), iterB(b)
432  {}
433  typename promote<T, U>::V operator()(const int &N1, const int &N2) const
434  {
435  return eval(N1, N2, Number<Dim04>(), Number<Dim13>());
436  }
437  };
438 
439  template <class A, class B, class T, class U, int Dim04, int Dim13, int Dim2,
440  int Dim5, char i, char j, char k, char l>
441  Tensor2_Expr<Tensor3_times_Tensor3_12_21<A, B, T, U, Dim04, Dim13, Dim2, Dim5,
442  i, j, k, l>,
443  typename promote<T, U>::V, Dim2, Dim5, k, l>
446  using TensorExpr = Tensor3_times_Tensor3_12_21<A, B, T, U, Dim04, Dim13,
447  Dim2, Dim5, i, j, k, l>;
449  l>(TensorExpr(a, b));
450  };
451 
452  /* A(j,l,k)*B(i,k,l) -> Tensor2 */
453 
454  template <class A, class B, class T, class U, int Dim15, int Dim24, int Dim0,
455  int Dim3, char i, char j, char k, char l>
459 
460  template <int CurrentDim0, int CurrentDim1>
461  typename promote<T, U>::V eval(const int N1, const int N2,
462  const Number<CurrentDim0> &,
463  const Number<CurrentDim1> &) const {
464  return iterA(N1, CurrentDim0 - 1, CurrentDim1 - 1) *
465  iterB(N2, CurrentDim1 - 1, CurrentDim0 - 1) +
467  }
468  template <int CurrentDim0>
469  typename promote<T, U>::V eval(const int N1, const int N2,
470  const Number<CurrentDim0> &,
471  const Number<1> &) const {
472  return iterA(N1, CurrentDim0 - 1, 0) * iterB(N2, 0, CurrentDim0 - 1) +
474  }
475  typename promote<T, U>::V eval(const int N1, const int N2,
476  const Number<1> &, const Number<1> &) const {
477  return iterA(N1, 0, 0) * iterB(N2, 0, 0);
478  }
479 
480  public:
484  : iterA(a), iterB(b)
485  {}
486  typename promote<T, U>::V operator()(const int &N1, const int &N2) const
487  {
488  return eval(N1, N2, Number<Dim15>(), Number<Dim24>());
489  }
490  };
491 
492  template <class A, class B, class T, class U, int Dim15, int Dim24, int Dim0,
493  int Dim3, char i, char j, char k, char l>
494  Tensor2_Expr<Tensor3_times_Tensor3_23_32<A, B, T, U, Dim15, Dim24, Dim0, Dim3,
495  i, j, k, l>,
496  typename promote<T, U>::V, Dim0, Dim3, i, j>
499  using TensorExpr = Tensor3_times_Tensor3_23_32<A, B, T, U, Dim15, Dim24,
500  Dim0, Dim3, i, j, k, l>;
502  j>(TensorExpr(a, b));
503  };
504 
505  /* A(l,i,j)*B(k,i,j) -> Tensor2 */
506 
507  template <class A, class B, class T, class U, int Dim14, int Dim25, int Dim0,
508  int Dim3, char i, char j, char k, char l>
512 
513  template <int CurrentDim0, int CurrentDim1>
514  typename promote<T, U>::V eval(const int N1, const int N2,
515  const Number<CurrentDim0> &,
516  const Number<CurrentDim1> &) const {
517  return iterA(N1, CurrentDim0 - 1, CurrentDim1 - 1) *
518  iterB(N2, CurrentDim0 - 1, CurrentDim1 - 1) +
520  }
521  template <int CurrentDim0>
522  typename promote<T, U>::V eval(const int N1, const int N2,
523  const Number<CurrentDim0> &,
524  const Number<1> &) const {
525  return iterA(N1, CurrentDim0 - 1, 0) * iterB(N2, CurrentDim0 - 1, 0) +
527  }
528  typename promote<T, U>::V eval(const int N1, const int N2,
529  const Number<1> &, const Number<1> &) const {
530  return iterA(N1, 0, 0) * iterB(N2, 0, 0);
531  }
532 
533  public:
537  : iterA(a), iterB(b)
538  {}
539  typename promote<T, U>::V operator()(const int &N1, const int &N2) const
540  {
541  return eval(N1, N2, Number<Dim14>(), Number<Dim25>());
542  }
543  };
544 
545  template <class A, class B, class T, class U, int Dim14, int Dim25, int Dim0,
546  int Dim3, char i, char j, char k, char l>
547  Tensor2_Expr<Tensor3_times_Tensor3_23_23<A, B, T, U, Dim14, Dim25, Dim0, Dim3,
548  i, j, k, l>,
549  typename promote<T, U>::V, Dim0, Dim3, k, l>
552  using TensorExpr = Tensor3_times_Tensor3_23_23<A, B, T, U, Dim14, Dim25,
553  Dim0, Dim3, i, j, k, l>;
555  l>(TensorExpr(a, b));
556  };
557 
558  /* A(i,j,k)*B(i,j,l) -> Tensor2 */
559 
560  template <class A, class B, class T, class U, int Dim03, int Dim14, int Dim2,
561  int Dim5, char i, char j, char k, char l>
565 
566  template <int CurrentDim0, int CurrentDim1>
567  typename promote<T, U>::V eval(const int N1, const int N2,
568  const Number<CurrentDim0> &,
569  const Number<CurrentDim1> &) const {
570  return iterA(CurrentDim0 - 1, CurrentDim1 - 1, N1) *
571  iterB(CurrentDim0 - 1, CurrentDim1 - 1, N2) +
573  }
574  template <int CurrentDim0>
575  typename promote<T, U>::V eval(const int N1, const int N2,
576  const Number<CurrentDim0> &,
577  const Number<1> &) const {
578  return iterA(CurrentDim0 - 1, 0, N1) * iterB(CurrentDim0 - 1, 0, N2) +
580  }
581  typename promote<T, U>::V eval(const int N1, const int N2,
582  const Number<1> &, const Number<1> &) const {
583  return iterA(0, 0, N1) * iterB(0, 0, N2);
584  }
585 
586  public:
590  : iterA(a), iterB(b)
591  {}
592  typename promote<T, U>::V operator()(const int &N1, const int &N2) const
593  {
594  return eval(N1, N2, Number<Dim03>(), Number<Dim14>());
595  }
596  };
597 
598  template <class A, class B, class T, class U, int Dim03, int Dim14, int Dim2,
599  int Dim5, char i, char j, char k, char l>
600  Tensor2_Expr<Tensor3_times_Tensor3_12_12<A, B, T, U, Dim03, Dim14, Dim2, Dim5,
601  i, j, k, l>,
602  typename promote<T, U>::V, Dim2, Dim5, k, l>
605  using TensorExpr = Tensor3_times_Tensor3_12_12<A, B, T, U, Dim03, Dim14,
606  Dim2, Dim5, i, j, k, l>;
608  l>(TensorExpr(a, b));
609  };
610 
611  /* A(i,j,k)*B(k,l,m) -> Tensor4 */
612 
613  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim23,
614  int Dim4, int Dim5, char i, char j, char k, char l, char m>
616  {
619 
620  template <int CurrentDim>
621  typename promote<T, U>::V
622  eval(const int N1, const int N2, const int N3, const int N4,
623  const Number<CurrentDim> &) const
624  {
625  return iterA(N1, N2, CurrentDim - 1) * iterB(CurrentDim - 1, N3, N4)
626  + eval(N1, N2, N3, N4, Number<CurrentDim - 1>());
627  }
628  typename promote<T, U>::V eval(const int N1, const int N2, const int N3,
629  const int N4, const Number<1> &) const
630  {
631  return iterA(N1, N2, 0) * iterB(0, N3, N4);
632  }
633 
634  public:
638  : iterA(a), iterB(b)
639  {}
640  typename promote<T, U>::V operator()(const int &N1, const int &N2,
641  const int &N3, const int &N4) const
642  {
643  return eval(N1, N2, N3, N4, Number<Dim23>());
644  }
645  };
646 
647  template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim23,
648  int Dim4, int Dim5, char i, char j, char k, char l, char m>
649  Tensor4_Expr<Tensor3_times_Tensor3_21<A, B, T, U, Dim0, Dim1, Dim23, Dim4,
650  Dim5, i, j, k, l, m>,
651  typename promote<T, U>::V, Dim0, Dim1, Dim4, Dim5, i, j, l, m>
654  {
655  using TensorExpr = Tensor3_times_Tensor3_21<A, B, T, U, Dim0, Dim1, Dim23,
656  Dim4, Dim5, i, j, k, l, m>;
658  Dim4, Dim5, i, j, l, m>(TensorExpr(a, b));
659  };
660 }
FTensor::Tensor3_times_Tensor3_12_21::iterA
Tensor3_Expr< A, T, Dim04, Dim13, Dim2, i, j, k > iterA
Definition: Tensor3_times_Tensor3.hpp:404
FTensor
JSON compatible output.
Definition: Christof_constructor.hpp:6
FTensor::Tensor3_times_Tensor3_12_21
Definition: Tensor3_times_Tensor3.hpp:402
FTensor::T3_times_T3_120
promote< T, U >::V T3_times_T3_120(const Tensor3_Expr< A, T, Dim0, Dim1, Dim2, i, j, k > &a, const Tensor3_Expr< B, U, Dim1, Dim2, Dim0, j, k, i > &b, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &, const Number< Current_Dim2 > &)
Definition: Tensor3_times_Tensor3.hpp:144
FTensor::operator*
promote< T, U >::V operator*(const Ddg_Expr< A, T, Dim, Dim, i, j, k, l > &a, const Ddg_Expr< B, U, Dim, Dim, i, k, j, l > &b)
Definition: Ddg_times_Ddg.hpp:79
FTensor::Tensor3_times_Tensor3_12_12::operator()
promote< T, U >::V operator()(const int &N1, const int &N2) const
Definition: Tensor3_times_Tensor3.hpp:592
FTensor::Tensor3_times_Tensor3_23_32::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< CurrentDim0 > &, const Number< CurrentDim1 > &) const
Definition: Tensor3_times_Tensor3.hpp:461
FTensor::Tensor3_times_Tensor3_12_21::Tensor3_times_Tensor3_12_21
Tensor3_times_Tensor3_12_21(const Tensor3_Expr< A, T, Dim04, Dim13, Dim2, i, j, k > &a, const Tensor3_Expr< B, U, Dim13, Dim04, Dim5, j, i, l > &b)
Definition: Tensor3_times_Tensor3.hpp:428
FTensor::Tensor3_times_Tensor3_12_12::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< CurrentDim0 > &, const Number< CurrentDim1 > &) const
Definition: Tensor3_times_Tensor3.hpp:567
FTensor::Tensor2_Expr
Definition: Tensor2_Expr.hpp:26
FTensor::Tensor3_times_Tensor3_21::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< CurrentDim > &) const
Definition: Tensor3_times_Tensor3.hpp:622
FTensor::Tensor3_times_Tensor3_23_32
Definition: Tensor3_times_Tensor3.hpp:456
A
constexpr AssemblyType A
Definition: operators_tests.cpp:30
FTensor::Tensor3_times_Tensor3_23_32::iterA
Tensor3_Expr< A, T, Dim0, Dim15, Dim24, i, k, l > iterA
Definition: Tensor3_times_Tensor3.hpp:457
FTensor::Tensor3_times_Tensor3_12_21::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< CurrentDim0 > &, const Number< 1 > &) const
Definition: Tensor3_times_Tensor3.hpp:416
FTensor::Tensor3_times_Tensor3_23_32::operator()
promote< T, U >::V operator()(const int &N1, const int &N2) const
Definition: Tensor3_times_Tensor3.hpp:486
FTensor::Tensor3_times_Tensor3_12_12
Definition: Tensor3_times_Tensor3.hpp:562
FTensor::Tensor3_times_Tensor3_23_32::Tensor3_times_Tensor3_23_32
Tensor3_times_Tensor3_23_32(const Tensor3_Expr< A, T, Dim0, Dim15, Dim24, i, k, l > &a, const Tensor3_Expr< B, U, Dim3, Dim24, Dim15, j, l, k > &b)
Definition: Tensor3_times_Tensor3.hpp:481
FTensor::Tensor3_times_Tensor3_23_32::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< 1 > &, const Number< 1 > &) const
Definition: Tensor3_times_Tensor3.hpp:475
FTensor::Tensor3_times_Tensor3_23_32::iterB
Tensor3_Expr< B, U, Dim3, Dim24, Dim15, j, l, k > iterB
Definition: Tensor3_times_Tensor3.hpp:458
FTensor::Tensor3_times_Tensor3_23_23::Tensor3_times_Tensor3_23_23
Tensor3_times_Tensor3_23_23(const Tensor3_Expr< A, T, Dim0, Dim14, Dim25, k, i, j > &a, const Tensor3_Expr< B, U, Dim3, Dim14, Dim25, l, i, j > &b)
Definition: Tensor3_times_Tensor3.hpp:534
FTensor::T3_times_T3_102
promote< T, U >::V T3_times_T3_102(const Tensor3_Expr< A, T, Dim0, Dim1, Dim2, i, j, k > &a, const Tensor3_Expr< B, U, Dim1, Dim0, Dim2, j, i, k > &b, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &, const Number< Current_Dim2 > &)
Definition: Tensor3_times_Tensor3.hpp:209
FTensor::T3_times_T3_201
promote< T, U >::V T3_times_T3_201(const Tensor3_Expr< A, T, Dim0, Dim1, Dim2, i, j, k > &a, const Tensor3_Expr< B, U, Dim2, Dim0, Dim1, k, i, j > &b, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &, const Number< Current_Dim2 > &)
Definition: Tensor3_times_Tensor3.hpp:79
FTensor::Tensor4_Expr
Definition: Tensor4_Expr.hpp:25
FTensor::Tensor3_times_Tensor3_12_12::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< 1 > &, const Number< 1 > &) const
Definition: Tensor3_times_Tensor3.hpp:581
FTensor::Number
Definition: Number.hpp:11
FTensor::Tensor3_times_Tensor3_21::iterA
Tensor3_Expr< A, T, Dim0, Dim1, Dim23, i, j, k > iterA
Definition: Tensor3_times_Tensor3.hpp:617
a
constexpr double a
Definition: approx_sphere.cpp:30
FTensor::Tensor3_times_Tensor3_12_21::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< 1 > &, const Number< 1 > &) const
Definition: Tensor3_times_Tensor3.hpp:422
FTensor::Tensor3_times_Tensor3_12_12::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< CurrentDim0 > &, const Number< 1 > &) const
Definition: Tensor3_times_Tensor3.hpp:575
FTensor::Tensor3_times_Tensor3_23_23::operator()
promote< T, U >::V operator()(const int &N1, const int &N2) const
Definition: Tensor3_times_Tensor3.hpp:539
FTensor::Tensor3_times_Tensor3_23_23::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< CurrentDim0 > &, const Number< CurrentDim1 > &) const
Definition: Tensor3_times_Tensor3.hpp:514
FTensor::T3_times_T3_012
promote< T, U >::V T3_times_T3_012(const Tensor3_Expr< A, T, Dim0, Dim1, Dim2, i, j, k > &a, const Tensor3_Expr< B, U, Dim0, Dim1, Dim2, i, j, k > &b, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &, const Number< Current_Dim2 > &)
Definition: Tensor3_times_Tensor3.hpp:14
FTensor::promote::V
T1 V
Definition: promote.hpp:17
FTensor::Tensor3_times_Tensor3_21::operator()
promote< T, U >::V operator()(const int &N1, const int &N2, const int &N3, const int &N4) const
Definition: Tensor3_times_Tensor3.hpp:640
FTensor::Tensor3_Expr
Definition: Tensor3_Expr.hpp:24
FTensor::Tensor3_times_Tensor3_23_32::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< CurrentDim0 > &, const Number< 1 > &) const
Definition: Tensor3_times_Tensor3.hpp:469
FTensor::Tensor3_times_Tensor3_12_21::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< CurrentDim0 > &, const Number< CurrentDim1 > &) const
Definition: Tensor3_times_Tensor3.hpp:408
FTensor::Tensor3_times_Tensor3_12_21::operator()
promote< T, U >::V operator()(const int &N1, const int &N2) const
Definition: Tensor3_times_Tensor3.hpp:433
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
FTensor::Tensor3_times_Tensor3_23_23::iterA
Tensor3_Expr< A, T, Dim0, Dim14, Dim25, k, i, j > iterA
Definition: Tensor3_times_Tensor3.hpp:510
FTensor::Tensor3_times_Tensor3_21::Tensor3_times_Tensor3_21
Tensor3_times_Tensor3_21(const Tensor3_Expr< A, T, Dim0, Dim1, Dim23, i, j, k > &a, const Tensor3_Expr< B, U, Dim23, Dim4, Dim5, k, l, m > &b)
Definition: Tensor3_times_Tensor3.hpp:635
FTensor::Tensor3_times_Tensor3_12_12::iterB
Tensor3_Expr< B, U, Dim03, Dim14, Dim5, i, j, l > iterB
Definition: Tensor3_times_Tensor3.hpp:564
FTensor::Tensor3_times_Tensor3_23_23::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< CurrentDim0 > &, const Number< 1 > &) const
Definition: Tensor3_times_Tensor3.hpp:522
j
FTensor::Index< 'j', 3 > j
Definition: matrix_function.cpp:19
FTensor::T3_times_T3_210
promote< T, U >::V T3_times_T3_210(const Tensor3_Expr< A, T, Dim0, Dim1, Dim2, i, j, k > &a, const Tensor3_Expr< B, U, Dim2, Dim1, Dim0, k, j, i > &b, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &, const Number< Current_Dim2 > &)
Definition: Tensor3_times_Tensor3.hpp:274
FTensor::Tensor3_times_Tensor3_12_12::iterA
Tensor3_Expr< A, T, Dim03, Dim14, Dim2, i, j, k > iterA
Definition: Tensor3_times_Tensor3.hpp:563
FTensor::Tensor3_times_Tensor3_23_23
Definition: Tensor3_times_Tensor3.hpp:509
FTensor::T3_times_T3_021
promote< T, U >::V T3_times_T3_021(const Tensor3_Expr< A, T, Dim0, Dim1, Dim2, i, j, k > &a, const Tensor3_Expr< B, U, Dim0, Dim2, Dim1, i, k, j > &b, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &, const Number< Current_Dim2 > &)
Definition: Tensor3_times_Tensor3.hpp:339
FTensor::Tensor3_times_Tensor3_23_23::iterB
Tensor3_Expr< B, U, Dim3, Dim14, Dim25, l, i, j > iterB
Definition: Tensor3_times_Tensor3.hpp:511
FTensor::Tensor3_times_Tensor3_23_23::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< 1 > &, const Number< 1 > &) const
Definition: Tensor3_times_Tensor3.hpp:528
m
FTensor::Index< 'm', 3 > m
Definition: shallow_wave.cpp:80
FTensor::Tensor3_times_Tensor3_12_12::Tensor3_times_Tensor3_12_12
Tensor3_times_Tensor3_12_12(const Tensor3_Expr< A, T, Dim03, Dim14, Dim2, i, j, k > &a, const Tensor3_Expr< B, U, Dim03, Dim14, Dim5, i, j, l > &b)
Definition: Tensor3_times_Tensor3.hpp:587
FTensor::Tensor3_times_Tensor3_21
Definition: Tensor3_times_Tensor3.hpp:615
k
FTensor::Index< 'k', 3 > k
Definition: matrix_function.cpp:20
FTensor::Tensor3_times_Tensor3_21::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< 1 > &) const
Definition: Tensor3_times_Tensor3.hpp:628
FTensor::Tensor3_times_Tensor3_21::iterB
Tensor3_Expr< B, U, Dim23, Dim4, Dim5, k, l, m > iterB
Definition: Tensor3_times_Tensor3.hpp:618
FTensor::Tensor3_times_Tensor3_12_21::iterB
Tensor3_Expr< B, U, Dim13, Dim04, Dim5, j, i, l > iterB
Definition: Tensor3_times_Tensor3.hpp:405
EshelbianPlasticity::U
@ U
Definition: EshelbianContact.cpp:197
l
FTensor::Index< 'l', 3 > l
Definition: matrix_function.cpp:21