v0.14.0
Ddg_times_Tensor2.hpp
Go to the documentation of this file.
1 /* This file has all of the declarations for expressions like
2  Ddg*Tensor2 and Tensor2*Ddg, yielding a
3  Tensor2_symmetric. */
4 
5 #pragma once
6 
7 namespace FTensor
8 {
9  /* A(i,j,k,l)*B(k,l) */
10 
11  template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
12  char j, char k, char l>
14  {
17 
18  template <int Current_Dim0, int Current_Dim1>
19  typename promote<T, U>::V
20  eval(const int N1, const int N2, const Number<Current_Dim0> &,
21  const Number<Current_Dim1> &) const
22  {
23  return iterA(N1, N2, Current_Dim0 - 1, Current_Dim1 - 1)
24  * iterB(Current_Dim0 - 1, Current_Dim1 - 1)
25  + eval(N1, N2, Number<Current_Dim0 - 1>(),
27  }
28  template <int Current_Dim1>
29  typename promote<T, U>::V
30  eval(const int N1, const int N2, const Number<1> &,
31  const Number<Current_Dim1> &) const
32  {
33  return iterA(N1, N2, 0, Current_Dim1 - 1) * iterB(0, Current_Dim1 - 1)
35  }
36  typename promote<T, U>::V eval(const int N1, const int N2,
37  const Number<1> &, const Number<1> &) const
38  {
39  return iterA(N1, N2, 0, 0) * iterB(0, 0);
40  }
41 
42  public:
45  : iterA(a), iterB(b)
46  {}
47  typename promote<T, U>::V operator()(const int N1, const int N2) const
48  {
49  return eval(N1, N2, Number<Dim23>(), Number<Dim23>());
50  }
51  };
52 
53  template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
54  char j, char k, char l>
55  Tensor2_symmetric_Expr<
56  Ddg_times_Tensor2_23<A, B, T, U, Dim01, Dim23, i, j, k, l>,
57  typename promote<T, U>::V, Dim01, i, j>
60  {
61  using TensorExpr
64  i, j>(TensorExpr(a, b));
65  }
66 
67  /* B(k,l)*A(i,j,k,l) */
68 
69  template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
70  char j, char k, char l>
71  Tensor2_symmetric_Expr<
72  Ddg_times_Tensor2_23<A, B, T, U, Dim01, Dim23, i, j, k, l>,
73  typename promote<T, U>::V, Dim01, i, j>
76  {
77  using TensorExpr
80  i, j>(TensorExpr(a, b));
81  }
82 
83  /* A(i,j,k,l)*B(l,k) */
84 
85  template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
86  char j, char k, char l>
88  {
91 
92  template <int Current_Dim0, int Current_Dim1>
93  typename promote<T, U>::V
94  eval(const int N1, const int N2, const Number<Current_Dim0> &,
95  const Number<Current_Dim1> &) const
96  {
97  return iterA(N1, N2, Current_Dim0 - 1, Current_Dim1 - 1)
98  * iterB(Current_Dim0 - 1, Current_Dim1 - 1)
99  + eval(N1, N2, Number<Current_Dim0 - 1>(),
101  }
102  template <int Current_Dim1>
103  typename promote<T, U>::V
104  eval(const int N1, const int N2, const Number<1> &,
105  const Number<Current_Dim1> &) const
106  {
107  return iterA(N1, N2, 0, Current_Dim1 - 1) * iterB(0, Current_Dim1 - 1)
109  }
110  typename promote<T, U>::V eval(const int N1, const int N2,
111  const Number<1> &, const Number<1> &) const
112  {
113  return iterA(N1, N2, 0, 0) * iterB(0, 0);
114  }
115 
116  public:
119  : iterA(a), iterB(b)
120  {}
121  typename promote<T, U>::V operator()(const int N1, const int N2) const
122  {
123  return eval(N1, N2, Number<Dim23>(), Number<Dim23>());
124  }
125  };
126 
127  template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
128  char j, char k, char l>
129  Tensor2_symmetric_Expr<
130  Ddg_times_Tensor2_32<A, B, T, U, Dim01, Dim23, i, j, k, l>,
131  typename promote<T, U>::V, Dim01, i, j>
134  {
135  using TensorExpr
138  i, j>(TensorExpr(a, b));
139  }
140 
141  /* B(l,k)*A(i,j,k,l) */
142 
143  template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
144  char j, char k, char l>
145  Tensor2_symmetric_Expr<
146  Ddg_times_Tensor2_32<A, B, T, U, Dim01, Dim23, i, j, k, l>,
147  typename promote<T, U>::V, Dim01, i, j>
150  {
151  using TensorExpr
154  i, j>(TensorExpr(a, b));
155  }
156 
157  /* A(i,j,k,l)*B(i,j) */
158 
159  template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
160  char j, char k, char l>
164 
165  template <int Current_Dim0, int Current_Dim1>
166  typename promote<T, U>::V eval(const int N1, const int N2,
167  const Number<Current_Dim0> &,
168  const Number<Current_Dim1> &) const {
169  return iterA(Current_Dim0 - 1, Current_Dim1 - 1, N1, N2) *
170  iterB(Current_Dim0 - 1, Current_Dim1 - 1) +
172  }
173  template <int Current_Dim1>
174  typename promote<T, U>::V eval(const int N1, const int N2,
175  const Number<1> &,
176  const Number<Current_Dim1> &) const {
177  return iterA(0, Current_Dim1 - 1, N1, N2) * iterB(0, Current_Dim1 - 1) +
179  }
180  typename promote<T, U>::V eval(const int N1, const int N2,
181  const Number<1> &, const Number<1> &) const {
182  return iterA(0, 0, N1, N2) * iterB(0, 0);
183  }
184 
185  public:
188  : iterA(a), iterB(b) {}
189  typename promote<T, U>::V operator()(const int N1, const int N2) const {
190  return eval(N1, N2, Number<Dim01>(), Number<Dim01>());
191  }
192  };
193 
194  template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
195  char j, char k, char l>
196  Tensor2_symmetric_Expr<
197  Ddg_times_Tensor2_01<A, B, T, U, Dim01, Dim23, i, j, k, l>,
198  typename promote<T, U>::V, Dim23, k, l>
201  using TensorExpr =
204  k, l>(TensorExpr(a, b));
205  }
206 
207  /* B(i,j)*A(i,j,k,l) */
208 
209  template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
210  char j, char k, char l>
211  Tensor2_symmetric_Expr<
212  Ddg_times_Tensor2_01<A, B, T, U, Dim01, Dim23, i, j, k, l>,
213  typename promote<T, U>::V, Dim23, k, l>
216  using TensorExpr =
219  k, l>(TensorExpr(a, b));
220  }
221 
222  /* A(j,i,k,l)*B(i,j) */
223 
224  template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
225  char j, char k, char l>
226  Tensor2_symmetric_Expr<
227  Ddg_times_Tensor2_01<A, B, T, U, Dim01, Dim23, i, j, k, l>,
228  typename promote<T, U>::V, Dim23, k, l>
231  using TensorExpr =
234  k, l>(TensorExpr(a, b));
235  }
236 
237  /* B(i,j)*A(j,i,k,l) */
238 
239  template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
240  char j, char k, char l>
241  Tensor2_symmetric_Expr<
242  Ddg_times_Tensor2_01<A, B, T, U, Dim01, Dim23, i, j, k, l>,
243  typename promote<T, U>::V, Dim23, k, l>
246  using TensorExpr =
249  k, l>(TensorExpr(a, b));
250  }
251 
252  /* This operatores will yield tensor 2 */
253 
254  /* A(i,j,k,l)*B(j,l) */
255 
256  template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
257  char j, char k, char l>
259  {
262 
263  template <int Current_Dim0, int Current_Dim1>
264  typename promote<T, U>::V
265  eval(const int N1, const int N2, const Number<Current_Dim0> &,
266  const Number<Current_Dim1> &) const
267  {
268  return iterA(N1, Current_Dim0 - 1, N2, Current_Dim1 - 1) *
269  iterB(Current_Dim0 - 1, Current_Dim1 - 1) +
271  }
272  template <int Current_Dim1>
273  typename promote<T, U>::V
274  eval(const int N1, const int N2, const Number<1> &,
275  const Number<Current_Dim1> &) const
276  {
277  return iterA(N1, 0, N2, Current_Dim1 - 1) * iterB(0, Current_Dim1 - 1) +
279  }
280  typename promote<T, U>::V eval(const int N1, const int N2,
281  const Number<1> &, const Number<1> &) const
282  {
283  return iterA(N1, 0, N2, 0) * iterB(0, 0);
284  }
285 
286  public:
289  : iterA(a), iterB(b)
290  {}
291  typename promote<T, U>::V operator()(const int N1, const int N2) const
292  {
293  return eval(N1, N2, Number<Dim01>(), Number<Dim23>());
294  }
295  };
296 
297  template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
298  char j, char k, char l>
299  Tensor2_Expr<
300  Ddg_times_Tensor2_13<A, B, T, U, Dim01, Dim23, i, j, k, l>,
301  typename promote<T, U>::V, Dim01, Dim23, i, k>
304  {
305  using TensorExpr
308  k>(TensorExpr(a, b));
309  }
310 
311  /* B(j,l)*A(i,j,k,l) */
312 
313  template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
314  char j, char k, char l>
315  Tensor2_Expr<Ddg_times_Tensor2_13<A, B, T, U, Dim01, Dim23, i, j, k, l>,
316  typename promote<T, U>::V, Dim01, Dim23, i, k>
319  using TensorExpr
322  k>(TensorExpr(a, b));
323  }
324 
325  /* This file has all of the declarations for expressions like
326  Ddg*Tensor2 and Tensor2*Ddg, yielding a
327  Tensor4. */
328 
329  // FIXME: That should create T4 with first two indices symmetric two other
330  // not. At this point will not create ideal code.
331  // TODO: Not all possible permutations are included.
332  // TODO: Check dimensions could be errors
333 
334  /* A(i,j,k,l)*B(l,m) */
335 
336  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim4,
337  char i, char j, char k, char l, char m>
339  {
342 
343  template <int Current_Dim0>
344  typename promote<T, U>::V
345  eval(const int N1, const int N2, const int N3, const int N4,
346  const Number<Current_Dim0> &) const
347  {
348  return iterA(N1, N2, N3, Current_Dim0 - 1) * iterB(Current_Dim0 - 1, N4)
349  + eval(N1, N2, N3, N4, Number<Current_Dim0 - 1>());
350  }
351  typename promote<T, U>::V eval(const int N1, const int N2, const int N3,
352  const int N4, const Number<1> &) const
353  {
354  return iterA(N1, N2, N3, 0) * iterB(0, N4);
355  }
356 
357  public:
360  : iterA(a), iterB(b)
361  {}
362  typename promote<T, U>::V
363  operator()(const int N1, const int N2, const int N3, const int N4) const
364  {
365  return eval(N1, N2, N3, N4, Number<Dim23>());
366  }
367  };
368 
369  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim4,
370  char i, char j, char k, char l, char m>
371  inline const Tensor4_Expr<
372  const Ddg_times_Tensor2_3_1<A, B, T, U, Dim01, Dim23, Dim4, i, j, k, l, m>,
373  typename promote<T, U>::V, Dim01, Dim01, Dim23, Dim4, i, j, k, m>
376  {
377  typedef const Ddg_times_Tensor2_3_1<A, B, T, U, Dim01, Dim23, Dim4, i, j,
378  k, l, m>
379  TensorExpr;
381  Dim23, Dim4, i, j, k, m>(TensorExpr(a, b));
382  }
383 
384  /* B(l,m)*A(i,j,k,l) */
385 
386  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim4,
387  char i, char j, char k, char l, char m>
388  inline const Tensor4_Expr<
389  const Ddg_times_Tensor2_3_1<A, B, T, U, Dim01, Dim23, Dim4, i, j, k, l, m>,
390  typename promote<T, U>::V, Dim01, Dim01, Dim23, Dim4, i, j, k, m>
393  {
394  typedef const Ddg_times_Tensor2_3_1<A, B, T, U, Dim01, Dim23, Dim4, i, j,
395  k, l, m>
396  TensorExpr;
398  Dim23, Dim4, i, j, k, m>(TensorExpr(a, b));
399  }
400 
401  /* A(i,j,k,l)*B(m,l) */
402 
403  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim4,
404  char i, char j, char k, char l, char m>
406  {
409 
410  template <int Current_Dim0>
411  typename promote<T, U>::V
412  eval(const int N1, const int N2, const int N3, const int N4,
413  const Number<Current_Dim0> &) const
414  {
415  return iterA(N1, N2, N3, Current_Dim0 - 1) * iterB(N4, Current_Dim0 - 1)
416  + eval(N1, N2, N3, N4, Number<Current_Dim0 - 1>());
417  }
418  typename promote<T, U>::V eval(const int N1, const int N2, const int N3,
419  const int N4, const Number<1> &) const
420  {
421  return iterA(N1, N2, N3, 0) * iterB(N4, 0);
422  }
423 
424  public:
427  : iterA(a), iterB(b)
428  {}
429  typename promote<T, U>::V
430  operator()(const int N1, const int N2, const int N3, const int N4) const
431  {
432  return eval(N1, N2, N3, N4, Number<Dim23>());
433  }
434  };
435 
436  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim4,
437  char i, char j, char k, char l, char m>
438  inline const Tensor4_Expr<
439  const Ddg_times_Tensor2_3_0<A, B, T, U, Dim01, Dim23, Dim4, i, j, k, l, m>,
440  typename promote<T, U>::V, Dim01, Dim01, Dim23, Dim4, i, j, k, m>
443  {
444  typedef const Ddg_times_Tensor2_3_0<A, B, T, U, Dim01, Dim23, Dim4, i, j,
445  k, l, m>
446  TensorExpr;
448  Dim23, Dim4, i, j, k, m>(TensorExpr(a, b));
449  }
450 
451  /* B(m,l)*A(i,j,k,l) */
452 
453  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim4,
454  char i, char j, char k, char l, char m>
455  inline const Tensor4_Expr<
456  const Ddg_times_Tensor2_3_0<A, B, T, U, Dim01, Dim23, Dim4, i, j, k, l, m>,
457  typename promote<T, U>::V, Dim01, Dim01, Dim23, Dim4, i, j, k, m>
460  {
461  typedef const Ddg_times_Tensor2_3_0<A, B, T, U, Dim01, Dim23, Dim4, i, j,
462  k, l, m>
463  TensorExpr;
465  Dim23, Dim4, i, j, k, m>(TensorExpr(a, b));
466  }
467 
468  /* A(i,j,k,l)*B(m,k) */
469 
470  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim4,
471  char i, char j, char k, char l, char m>
473  {
476 
477  template <int Current_Dim0>
478  typename promote<T, U>::V
479  eval(const int N1, const int N2, const int N3, const int N4,
480  const Number<Current_Dim0> &) const
481  {
482  return iterA(N1, N2, Current_Dim0 - 1, N4) * iterB(N3, Current_Dim0 - 1)
483  + eval(N1, N2, N3, N4, Number<Current_Dim0 - 1>());
484  }
485  typename promote<T, U>::V eval(const int N1, const int N2, const int N3,
486  const int N4, const Number<1> &) const
487  {
488  return iterA(N1, N2, 0, N4) * iterB(N3, 0);
489  }
490 
491  public:
494  : iterA(a), iterB(b)
495  {}
496  typename promote<T, U>::V
497  operator()(const int N1, const int N2, const int N3, const int N4) const
498  {
499  return eval(N1, N2, N3, N4, Number<Dim23>());
500  }
501  };
502 
503  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim4,
504  char i, char j, char k, char l, char m>
505  inline const Tensor4_Expr<
506  const Ddg_times_Tensor2_2_0<A, B, T, U, Dim01, Dim23, Dim4, i, j, k, l, m>,
507  typename promote<T, U>::V, Dim01, Dim01, Dim23, Dim4, i, j, m, l>
510  {
511  typedef const Ddg_times_Tensor2_2_0<A, B, T, U, Dim01, Dim23, Dim4, i, j,
512  k, l, m>
513  TensorExpr;
515  Dim23, Dim4, i, j, m, l>(TensorExpr(a, b));
516  }
517 
518  /* B(m,k)*A(i,j,k,l) */
519 
520  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim4,
521  char i, char j, char k, char l, char m>
522  inline const Tensor4_Expr<
523  const Ddg_times_Tensor2_2_0<A, B, T, U, Dim01, Dim23, Dim4, i, j, k, l, m>,
524  typename promote<T, U>::V, Dim01, Dim01, Dim23, Dim4, i, j, m, l>
527  {
528  typedef const Ddg_times_Tensor2_2_0<A, B, T, U, Dim01, Dim23, Dim4, i, j,
529  k, l, m>
530  TensorExpr;
532  Dim23, Dim4, i, j, m, l>(TensorExpr(a, b));
533  }
534 
535  /* A(i,j,k,l)*B(k,m) */
536 
537  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim4,
538  char i, char j, char k, char l, char m>
540  {
543 
544  template <int Current_Dim0>
545  typename promote<T, U>::V
546  eval(const int N1, const int N2, const int N3, const int N4,
547  const Number<Current_Dim0> &) const
548  {
549  return iterA(N1, N2, Current_Dim0 - 1, N4) * iterB(Current_Dim0 - 1, N3)
550  + eval(N1, N2, N3, N4, Number<Current_Dim0 - 1>());
551  }
552  typename promote<T, U>::V eval(const int N1, const int N2, const int N3,
553  const int N4, const Number<1> &) const
554  {
555  return iterA(N1, N2, 0, N4) * iterB(0, N3);
556  }
557 
558  public:
561  : iterA(a), iterB(b)
562  {}
563  typename promote<T, U>::V
564  operator()(const int N1, const int N2, const int N3, const int N4) const
565  {
566  return eval(N1, N2, N3, N4, Number<Dim23>());
567  }
568  };
569 
570  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim4,
571  char i, char j, char k, char l, char m>
572  inline const Tensor4_Expr<
573  const Ddg_times_Tensor2_2_1<A, B, T, U, Dim01, Dim23, Dim4, i, j, k, l, m>,
574  typename promote<T, U>::V, Dim01, Dim01, Dim23, Dim4, i, j, m, l>
577  {
578  typedef const Ddg_times_Tensor2_2_1<A, B, T, U, Dim01, Dim23, Dim4, i, j,
579  k, l, m>
580  TensorExpr;
582  Dim23, Dim4, i, j, m, l>(TensorExpr(a, b));
583  }
584 
585  /* B(k,m)*A(i,j,k,l) */
586 
587  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim4,
588  char i, char j, char k, char l, char m>
589  inline const Tensor4_Expr<
590  const Ddg_times_Tensor2_2_1<A, B, T, U, Dim01, Dim23, Dim4, i, j, k, l, m>,
591  typename promote<T, U>::V, Dim01, Dim01, Dim23, Dim4, i, j, m, l>
594  {
595  typedef const Ddg_times_Tensor2_2_1<A, B, T, U, Dim01, Dim23, Dim4, i, j,
596  k, l, m>
597  TensorExpr;
599  Dim23, Dim4, i, j, m, l>(TensorExpr(a, b));
600  }
601 
602  /* A(i,j,k,l)*B(j,m) */
603 
604  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim2,
605  char i, char j, char k, char l, char m>
607  {
610 
611  template <int Current_Dim0>
612  typename promote<T, U>::V
613  eval(const int N1, const int N2, const int N3, const int N4,
614  const Number<Current_Dim0> &) const
615  {
616  return iterA(N1, Current_Dim0 - 1, N3, N4) * iterB(Current_Dim0 - 1, N2)
617  + eval(N1, N2, N3, N4, Number<Current_Dim0 - 1>());
618  }
619  typename promote<T, U>::V eval(const int N1, const int N2, const int N3,
620  const int N4, const Number<1> &) const
621  {
622  return iterA(N1, 0, N3, N4) * iterB(0, N2);
623  }
624 
625  public:
628  : iterA(a), iterB(b)
629  {}
630  typename promote<T, U>::V
631  operator()(const int N1, const int N2, const int N3, const int N4) const
632  {
633  return eval(N1, N2, N3, N4, Number<Dim01>());
634  }
635  };
636 
637  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim2,
638  char i, char j, char k, char l, char m>
639  inline const Tensor4_Expr<
640  const Ddg_times_Tensor2_1_0<A, B, T, U, Dim01, Dim23, Dim2, i, j, k, l, m>,
641  typename promote<T, U>::V, Dim01, Dim2, Dim23, Dim23, i, m, k, l>
644  {
645  typedef const Ddg_times_Tensor2_1_0<A, B, T, U, Dim01, Dim23, Dim2, i, j,
646  k, l, m>
647  TensorExpr;
649  Dim23, Dim2, i, m, k, l>(TensorExpr(a, b));
650  }
651 
652  /* B(j,m)*A(i,j,k,l) */
653 
654  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim2,
655  char i, char j, char k, char l, char m>
656  inline const Tensor4_Expr<
657  const Ddg_times_Tensor2_1_0<A, B, T, U, Dim01, Dim23, Dim2, i, j, k, l, m>,
658  typename promote<T, U>::V, Dim01, Dim2, Dim23, Dim23, i, m, k, l>
661  {
662  typedef const Ddg_times_Tensor2_1_0<A, B, T, U, Dim01, Dim23, Dim2, i, j,
663  k, l, m>
664  TensorExpr;
666  Dim23, Dim2, i, m, k, l>(TensorExpr(a, b));
667  }
668 
669  /* A(i,j,k,l)*B(m,j) */
670 
671  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim2,
672  char i, char j, char k, char l, char m>
674  {
677 
678  template <int Current_Dim0>
679  typename promote<T, U>::V
680  eval(const int N1, const int N2, const int N3, const int N4,
681  const Number<Current_Dim0> &) const
682  {
683  return iterA(N1, Current_Dim0 - 1, N3, N4) * iterB(N2, Current_Dim0 - 1)
684  + eval(N1, N2, N3, N4, Number<Current_Dim0 - 1>());
685  }
686  typename promote<T, U>::V eval(const int N1, const int N2, const int N3,
687  const int N4, const Number<1> &) const
688  {
689  return iterA(N1, 0, N3, N4) * iterB(N2, 0);
690  }
691 
692  public:
695  : iterA(a), iterB(b)
696  {}
697  typename promote<T, U>::V
698  operator()(const int N1, const int N2, const int N3, const int N4) const
699  {
700  return eval(N1, N2, N3, N4, Number<Dim01>());
701  }
702  };
703 
704  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim2,
705  char i, char j, char k, char l, char m>
706  inline const Tensor4_Expr<
707  const Ddg_times_Tensor2_1_1<A, B, T, U, Dim01, Dim23, Dim2, i, j, k, l, m>,
708  typename promote<T, U>::V, Dim01, Dim2, Dim23, Dim23, i, m, k, l>
711  {
712  typedef const Ddg_times_Tensor2_1_1<A, B, T, U, Dim01, Dim23, Dim2, i, j,
713  k, l, m>
714  TensorExpr;
716  Dim23, Dim23, i, m, k, l>(TensorExpr(a, b));
717  }
718 
719  /* B(m,j)*A(i,j,k,l) */
720 
721  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim2,
722  char i, char j, char k, char l, char m>
723  inline const Tensor4_Expr<
724  const Ddg_times_Tensor2_1_1<A, B, T, U, Dim01, Dim23, Dim2, i, j, k, l, m>,
725  typename promote<T, U>::V, Dim01, Dim2, Dim23, Dim23, i, m, k, l>
728  {
729  typedef const Ddg_times_Tensor2_1_1<A, B, T, U, Dim01, Dim23, Dim2, i, j,
730  k, l, m>
731  TensorExpr;
733  Dim23, Dim2, i, m, k, l>(TensorExpr(a, b));
734  }
735 
736  /* A(i,j,k,l)*B(i,m) */
737 
738  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim1,
739  char i, char j, char k, char l, char m>
741  {
744 
745  template <int Current_Dim0>
746  typename promote<T, U>::V
747  eval(const int N1, const int N2, const int N3, const int N4,
748  const Number<Current_Dim0> &) const
749  {
750  return iterA(Current_Dim0 - 1, N2, N3, N4) * iterB(Current_Dim0 - 1, N1)
751  + eval(N1, N2, N3, N4, Number<Current_Dim0 - 1>());
752  }
753  typename promote<T, U>::V eval(const int N1, const int N2, const int N3,
754  const int N4, const Number<1> &) const
755  {
756  return iterA(0, N2, N3, N4) * iterB(0, N1);
757  }
758 
759  public:
762  : iterA(a), iterB(b)
763  {}
764  typename promote<T, U>::V
765  operator()(const int N1, const int N2, const int N3, const int N4) const
766  {
767  return eval(N1, N2, N3, N4, Number<Dim01>());
768  }
769  };
770 
771  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim1,
772  char i, char j, char k, char l, char m>
773  inline const Tensor4_Expr<
774  const Ddg_times_Tensor2_0_0<A, B, T, U, Dim01, Dim23, Dim1, i, j, k, l, m>,
775  typename promote<T, U>::V, Dim1, Dim01, Dim23, Dim23, m, j, k, l>
778  {
779  typedef const Ddg_times_Tensor2_0_0<A, B, T, U, Dim01, Dim23, Dim1, i, j,
780  k, l, m>
781  TensorExpr;
783  Dim23, Dim23, m, j, k, l>(TensorExpr(a, b));
784  }
785 
786  /* B(i,m)*A(i,j,k,l) */
787 
788  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim1,
789  char i, char j, char k, char l, char m>
790  inline const Tensor4_Expr<
791  const Ddg_times_Tensor2_0_0<A, B, T, U, Dim01, Dim23, Dim1, i, j, k, l, m>,
792  typename promote<T, U>::V, Dim01, Dim01, Dim23, Dim1, m, j, k, l>
795  {
796  typedef const Ddg_times_Tensor2_0_0<A, B, T, U, Dim01, Dim23, Dim1, i, j,
797  k, l, m>
798  TensorExpr;
800  Dim23, Dim23, m, j, k, l>(TensorExpr(a, b));
801  }
802 
803  /* A(i,j,k,l)*B(m,i) */
804 
805  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim1,
806  char i, char j, char k, char l, char m>
808  {
811 
812  template <int Current_Dim0>
813  typename promote<T, U>::V
814  eval(const int N1, const int N2, const int N3, const int N4,
815  const Number<Current_Dim0> &) const
816  {
817  return iterA(Current_Dim0 - 1, N2, N3, N4) * iterB(N1, Current_Dim0 - 1)
818  + eval(N1, N2, N3, N4, Number<Current_Dim0 - 1>());
819  }
820  typename promote<T, U>::V eval(const int N1, const int N2, const int N3,
821  const int N4, const Number<1> &) const
822  {
823  return iterA(0, N2, N3, N4) * iterB(N1, 0);
824  }
825 
826  public:
829  : iterA(a), iterB(b)
830  {}
831  typename promote<T, U>::V
832  operator()(const int N1, const int N2, const int N3, const int N4) const
833  {
834  return eval(N1, N2, N3, N4, Number<Dim01>());
835  }
836  };
837 
838  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim1,
839  char i, char j, char k, char l, char m>
840  inline const Tensor4_Expr<
841  const Ddg_times_Tensor2_0_1<A, B, T, U, Dim01, Dim23, Dim1, i, j, k, l, m>,
842  typename promote<T, U>::V, Dim1, Dim01, Dim23, Dim23, m, j, k, l>
845  {
846  typedef const Ddg_times_Tensor2_0_1<A, B, T, U, Dim01, Dim23, Dim1, i, j,
847  k, l, m>
848  TensorExpr;
850  Dim23, Dim1, m, j, k, l>(TensorExpr(a, b));
851  }
852 
853  /* B(i,m)*A(i,j,k,l) */
854 
855  template <class A, class B, class T, class U, int Dim01, int Dim23, int Dim1,
856  char i, char j, char k, char l, char m>
857  inline const Tensor4_Expr<
858  const Ddg_times_Tensor2_0_1<A, B, T, U, Dim01, Dim23, Dim1, i, j, k, l, m>,
859  typename promote<T, U>::V, Dim1, Dim01, Dim23, Dim23, m, j, k, l>
862  {
863  typedef const Ddg_times_Tensor2_0_1<A, B, T, U, Dim01, Dim23, Dim1, i, j,
864  k, l, m>
865  TensorExpr;
867  Dim23, Dim23, m, j, k, l>(TensorExpr(a, b));
868  }
869 }
FTensor::Ddg_times_Tensor2_2_1::Ddg_times_Tensor2_2_1
Ddg_times_Tensor2_2_1(const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > &a, const Tensor2_Expr< B, U, Dim4, Dim23, k, m > &b)
Definition: Ddg_times_Tensor2.hpp:559
FTensor::Ddg_times_Tensor2_1_0::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< Current_Dim0 > &) const
Definition: Ddg_times_Tensor2.hpp:613
FTensor
JSON compatible output.
Definition: Christof_constructor.hpp:6
FTensor::Ddg_times_Tensor2_23::Ddg_times_Tensor2_23
Ddg_times_Tensor2_23(const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > &a, const Tensor2_Expr< B, U, Dim23, Dim23, k, l > &b)
Definition: Ddg_times_Tensor2.hpp:43
FTensor::Ddg_times_Tensor2_2_0::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< 1 > &) const
Definition: Ddg_times_Tensor2.hpp:485
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::Ddg_times_Tensor2_3_1
Definition: Ddg_times_Tensor2.hpp:338
FTensor::Ddg_times_Tensor2_2_0::Ddg_times_Tensor2_2_0
Ddg_times_Tensor2_2_0(const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > &a, const Tensor2_Expr< B, U, Dim4, Dim23, m, k > &b)
Definition: Ddg_times_Tensor2.hpp:492
FTensor::Ddg_times_Tensor2_32
Definition: Ddg_times_Tensor2.hpp:87
FTensor::Ddg_times_Tensor2_0_1::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< 1 > &) const
Definition: Ddg_times_Tensor2.hpp:820
FTensor::Ddg_times_Tensor2_32::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< 1 > &, const Number< 1 > &) const
Definition: Ddg_times_Tensor2.hpp:110
FTensor::Ddg_times_Tensor2_01::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
Definition: Ddg_times_Tensor2.hpp:166
FTensor::Tensor2_symmetric_Expr
Definition: Tensor2_symmetric_Expr.hpp:36
FTensor::Ddg_times_Tensor2_01::iterB
Tensor2_Expr< B, U, Dim01, Dim01, i, j > iterB
Definition: Ddg_times_Tensor2.hpp:163
FTensor::Ddg_times_Tensor2_0_0::iterA
const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > iterA
Definition: Ddg_times_Tensor2.hpp:742
FTensor::Ddg_times_Tensor2_2_1::operator()
promote< T, U >::V operator()(const int N1, const int N2, const int N3, const int N4) const
Definition: Ddg_times_Tensor2.hpp:564
FTensor::Ddg_times_Tensor2_2_0::iterB
const Tensor2_Expr< B, U, Dim4, Dim23, m, k > iterB
Definition: Ddg_times_Tensor2.hpp:475
FTensor::Ddg_times_Tensor2_13::iterA
Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > iterA
Definition: Ddg_times_Tensor2.hpp:260
FTensor::Ddg_times_Tensor2_13::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< 1 > &, const Number< 1 > &) const
Definition: Ddg_times_Tensor2.hpp:280
FTensor::Ddg_times_Tensor2_23::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
Definition: Ddg_times_Tensor2.hpp:20
FTensor::Ddg_times_Tensor2_32::iterA
Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > iterA
Definition: Ddg_times_Tensor2.hpp:89
FTensor::Tensor2_Expr< B, U, Dim23, Dim23, k, l >
A
constexpr AssemblyType A
Definition: operators_tests.cpp:30
FTensor::Ddg_times_Tensor2_3_1::iterA
const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > iterA
Definition: Ddg_times_Tensor2.hpp:340
FTensor::Ddg_times_Tensor2_13::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
Definition: Ddg_times_Tensor2.hpp:265
FTensor::Ddg_Expr
Definition: Ddg_Expr.hpp:28
FTensor::Ddg_times_Tensor2_13::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< 1 > &, const Number< Current_Dim1 > &) const
Definition: Ddg_times_Tensor2.hpp:274
FTensor::Ddg_times_Tensor2_0_1::Ddg_times_Tensor2_0_1
Ddg_times_Tensor2_0_1(const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > &a, const Tensor2_Expr< B, U, Dim01, Dim1, m, i > &b)
Definition: Ddg_times_Tensor2.hpp:827
FTensor::Ddg_times_Tensor2_3_0::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< 1 > &) const
Definition: Ddg_times_Tensor2.hpp:418
FTensor::Ddg_times_Tensor2_13::iterB
Tensor2_Expr< B, U, Dim01, Dim23, j, l > iterB
Definition: Ddg_times_Tensor2.hpp:261
FTensor::Ddg_times_Tensor2_1_1::iterA
const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > iterA
Definition: Ddg_times_Tensor2.hpp:675
FTensor::Ddg_times_Tensor2_0_0::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< Current_Dim0 > &) const
Definition: Ddg_times_Tensor2.hpp:747
FTensor::Ddg_times_Tensor2_1_1::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< Current_Dim0 > &) const
Definition: Ddg_times_Tensor2.hpp:680
FTensor::Ddg_times_Tensor2_2_0::iterA
const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > iterA
Definition: Ddg_times_Tensor2.hpp:474
FTensor::Ddg_times_Tensor2_0_0::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< 1 > &) const
Definition: Ddg_times_Tensor2.hpp:753
FTensor::Ddg_times_Tensor2_1_0::iterA
const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > iterA
Definition: Ddg_times_Tensor2.hpp:608
FTensor::Tensor4_Expr
Definition: Tensor4_Expr.hpp:25
FTensor::Number
Definition: Number.hpp:11
FTensor::Ddg_times_Tensor2_3_1::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< Current_Dim0 > &) const
Definition: Ddg_times_Tensor2.hpp:345
FTensor::Ddg_times_Tensor2_01::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< 1 > &, const Number< 1 > &) const
Definition: Ddg_times_Tensor2.hpp:180
FTensor::Ddg_times_Tensor2_3_1::Ddg_times_Tensor2_3_1
Ddg_times_Tensor2_3_1(const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > &a, const Tensor2_Expr< B, U, Dim23, Dim4, l, m > &b)
Definition: Ddg_times_Tensor2.hpp:358
a
constexpr double a
Definition: approx_sphere.cpp:30
FTensor::Ddg_times_Tensor2_13
Definition: Ddg_times_Tensor2.hpp:258
FTensor::Ddg_times_Tensor2_1_1::Ddg_times_Tensor2_1_1
Ddg_times_Tensor2_1_1(const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > &a, const Tensor2_Expr< B, U, Dim01, Dim2, m, j > &b)
Definition: Ddg_times_Tensor2.hpp:693
FTensor::Ddg_times_Tensor2_0_1::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< Current_Dim0 > &) const
Definition: Ddg_times_Tensor2.hpp:814
FTensor::Ddg_times_Tensor2_1_1::iterB
const Tensor2_Expr< B, U, Dim01, Dim2, m, j > iterB
Definition: Ddg_times_Tensor2.hpp:676
FTensor::Ddg_times_Tensor2_3_1::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< 1 > &) const
Definition: Ddg_times_Tensor2.hpp:351
FTensor::Ddg_times_Tensor2_01::iterA
Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > iterA
Definition: Ddg_times_Tensor2.hpp:162
FTensor::promote::V
T1 V
Definition: promote.hpp:17
FTensor::Ddg_times_Tensor2_2_1::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< 1 > &) const
Definition: Ddg_times_Tensor2.hpp:552
FTensor::Ddg_times_Tensor2_2_0::operator()
promote< T, U >::V operator()(const int N1, const int N2, const int N3, const int N4) const
Definition: Ddg_times_Tensor2.hpp:497
FTensor::Ddg_times_Tensor2_1_0::operator()
promote< T, U >::V operator()(const int N1, const int N2, const int N3, const int N4) const
Definition: Ddg_times_Tensor2.hpp:631
FTensor::Ddg_times_Tensor2_3_1::operator()
promote< T, U >::V operator()(const int N1, const int N2, const int N3, const int N4) const
Definition: Ddg_times_Tensor2.hpp:363
FTensor::Ddg_times_Tensor2_32::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
Definition: Ddg_times_Tensor2.hpp:94
FTensor::Ddg_times_Tensor2_32::Ddg_times_Tensor2_32
Ddg_times_Tensor2_32(const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > &a, const Tensor2_Expr< B, U, Dim23, Dim23, l, k > &b)
Definition: Ddg_times_Tensor2.hpp:117
FTensor::Ddg_times_Tensor2_1_0::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< 1 > &) const
Definition: Ddg_times_Tensor2.hpp:619
FTensor::Ddg_times_Tensor2_01
Definition: Ddg_times_Tensor2.hpp:161
FTensor::Ddg_times_Tensor2_32::operator()
promote< T, U >::V operator()(const int N1, const int N2) const
Definition: Ddg_times_Tensor2.hpp:121
FTensor::Ddg_times_Tensor2_3_0::iterA
const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > iterA
Definition: Ddg_times_Tensor2.hpp:407
FTensor::Ddg_times_Tensor2_1_0
Definition: Ddg_times_Tensor2.hpp:606
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
FTensor::Ddg_times_Tensor2_0_0
Definition: Ddg_times_Tensor2.hpp:740
FTensor::Ddg_times_Tensor2_2_1::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< Current_Dim0 > &) const
Definition: Ddg_times_Tensor2.hpp:546
FTensor::Ddg_times_Tensor2_1_0::Ddg_times_Tensor2_1_0
Ddg_times_Tensor2_1_0(const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > &a, const Tensor2_Expr< B, U, Dim01, Dim2, j, m > &b)
Definition: Ddg_times_Tensor2.hpp:626
FTensor::Ddg_times_Tensor2_13::Ddg_times_Tensor2_13
Ddg_times_Tensor2_13(const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > &a, const Tensor2_Expr< B, U, Dim01, Dim23, j, l > &b)
Definition: Ddg_times_Tensor2.hpp:287
FTensor::Ddg_times_Tensor2_0_1::iterB
const Tensor2_Expr< B, U, Dim01, Dim1, m, i > iterB
Definition: Ddg_times_Tensor2.hpp:810
FTensor::Ddg_times_Tensor2_2_0
Definition: Ddg_times_Tensor2.hpp:472
FTensor::Ddg_times_Tensor2_32::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< 1 > &, const Number< Current_Dim1 > &) const
Definition: Ddg_times_Tensor2.hpp:104
FTensor::Ddg_times_Tensor2_0_0::Ddg_times_Tensor2_0_0
Ddg_times_Tensor2_0_0(const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > &a, const Tensor2_Expr< B, U, Dim01, Dim1, i, m > &b)
Definition: Ddg_times_Tensor2.hpp:760
FTensor::Ddg_times_Tensor2_1_1::operator()
promote< T, U >::V operator()(const int N1, const int N2, const int N3, const int N4) const
Definition: Ddg_times_Tensor2.hpp:698
FTensor::Ddg_times_Tensor2_3_0::iterB
const Tensor2_Expr< B, U, Dim4, Dim23, m, l > iterB
Definition: Ddg_times_Tensor2.hpp:408
FTensor::Ddg_times_Tensor2_0_1::operator()
promote< T, U >::V operator()(const int N1, const int N2, const int N3, const int N4) const
Definition: Ddg_times_Tensor2.hpp:832
FTensor::Ddg_times_Tensor2_23::iterA
Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > iterA
Definition: Ddg_times_Tensor2.hpp:15
j
FTensor::Index< 'j', 3 > j
Definition: matrix_function.cpp:19
FTensor::Ddg_times_Tensor2_0_0::operator()
promote< T, U >::V operator()(const int N1, const int N2, const int N3, const int N4) const
Definition: Ddg_times_Tensor2.hpp:765
FTensor::Ddg_times_Tensor2_01::operator()
promote< T, U >::V operator()(const int N1, const int N2) const
Definition: Ddg_times_Tensor2.hpp:189
FTensor::Ddg_times_Tensor2_23::operator()
promote< T, U >::V operator()(const int N1, const int N2) const
Definition: Ddg_times_Tensor2.hpp:47
FTensor::Ddg_times_Tensor2_23::iterB
Tensor2_Expr< B, U, Dim23, Dim23, k, l > iterB
Definition: Ddg_times_Tensor2.hpp:16
FTensor::Ddg_times_Tensor2_2_1::iterA
const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > iterA
Definition: Ddg_times_Tensor2.hpp:541
FTensor::Ddg_times_Tensor2_23::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< 1 > &, const Number< Current_Dim1 > &) const
Definition: Ddg_times_Tensor2.hpp:30
FTensor::Ddg_times_Tensor2_2_0::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< Current_Dim0 > &) const
Definition: Ddg_times_Tensor2.hpp:479
FTensor::Ddg_times_Tensor2_1_1
Definition: Ddg_times_Tensor2.hpp:673
FTensor::Ddg_times_Tensor2_32::iterB
Tensor2_Expr< B, U, Dim23, Dim23, l, k > iterB
Definition: Ddg_times_Tensor2.hpp:90
FTensor::Ddg_times_Tensor2_0_1
Definition: Ddg_times_Tensor2.hpp:807
FTensor::Ddg_times_Tensor2_23::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< 1 > &, const Number< 1 > &) const
Definition: Ddg_times_Tensor2.hpp:36
m
FTensor::Index< 'm', 3 > m
Definition: shallow_wave.cpp:80
FTensor::Ddg_times_Tensor2_3_0
Definition: Ddg_times_Tensor2.hpp:405
FTensor::Ddg_times_Tensor2_0_1::iterA
const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > iterA
Definition: Ddg_times_Tensor2.hpp:809
FTensor::Ddg_times_Tensor2_1_1::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< 1 > &) const
Definition: Ddg_times_Tensor2.hpp:686
FTensor::Ddg_times_Tensor2_3_0::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4, const Number< Current_Dim0 > &) const
Definition: Ddg_times_Tensor2.hpp:412
FTensor::Ddg_times_Tensor2_23
Definition: Ddg_times_Tensor2.hpp:13
FTensor::Ddg_times_Tensor2_0_0::iterB
const Tensor2_Expr< B, U, Dim01, Dim1, i, m > iterB
Definition: Ddg_times_Tensor2.hpp:743
FTensor::Ddg_times_Tensor2_2_1
Definition: Ddg_times_Tensor2.hpp:539
FTensor::Ddg_times_Tensor2_1_0::iterB
const Tensor2_Expr< B, U, Dim01, Dim2, j, m > iterB
Definition: Ddg_times_Tensor2.hpp:609
FTensor::Ddg_times_Tensor2_01::eval
promote< T, U >::V eval(const int N1, const int N2, const Number< 1 > &, const Number< Current_Dim1 > &) const
Definition: Ddg_times_Tensor2.hpp:174
k
FTensor::Index< 'k', 3 > k
Definition: matrix_function.cpp:20
FTensor::Ddg_times_Tensor2_01::Ddg_times_Tensor2_01
Ddg_times_Tensor2_01(const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > &a, const Tensor2_Expr< B, U, Dim01, Dim01, i, j > &b)
Definition: Ddg_times_Tensor2.hpp:186
FTensor::Ddg_times_Tensor2_3_1::iterB
const Tensor2_Expr< B, U, Dim23, Dim4, l, m > iterB
Definition: Ddg_times_Tensor2.hpp:341
FTensor::Ddg_times_Tensor2_3_0::operator()
promote< T, U >::V operator()(const int N1, const int N2, const int N3, const int N4) const
Definition: Ddg_times_Tensor2.hpp:430
FTensor::Ddg_times_Tensor2_2_1::iterB
const Tensor2_Expr< B, U, Dim4, Dim23, k, m > iterB
Definition: Ddg_times_Tensor2.hpp:542
FTensor::Ddg_times_Tensor2_13::operator()
promote< T, U >::V operator()(const int N1, const int N2) const
Definition: Ddg_times_Tensor2.hpp:291
EshelbianPlasticity::U
@ U
Definition: EshelbianContact.cpp:197
l
FTensor::Index< 'l', 3 > l
Definition: matrix_function.cpp:21
FTensor::Ddg_times_Tensor2_3_0::Ddg_times_Tensor2_3_0
Ddg_times_Tensor2_3_0(const Ddg_Expr< A, T, Dim01, Dim23, i, j, k, l > &a, const Tensor2_Expr< B, U, Dim4, Dim23, m, l > &b)
Definition: Ddg_times_Tensor2.hpp:425