v0.14.0
Dg_times_Tensor2_symmetric.hpp
Go to the documentation of this file.
1 /* This file has all of the declarations for expressions like
2  Dg*Tensor2_symmetric and Tensor2_symmetric*Dg,
3  yielding a Dg, Tensor3, or Tensor1. */
4 
5 #pragma once
6 
7 namespace FTensor
8 {
9  /* A(i,j,k)*B(k,l)->Dg */
10 
11  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
12  char j, char k, char l>
14  {
17 
18  template <int Current_Dim>
19  typename promote<T, U>::V eval(const int N1, const int N2, const int N3,
20  const Number<Current_Dim> &) const
21  {
22  return iterA(N1, N2, Current_Dim - 1) * iterB(Current_Dim - 1, N3)
23  + eval(N1, N2, N3, Number<Current_Dim - 1>());
24  }
25  typename promote<T, U>::V
26  eval(const int N1, const int N2, const int N3, const Number<1> &) const
27  {
28  return iterA(N1, N2, 0) * iterB(0, N3);
29  }
30 
31  public:
35  : iterA(a), iterB(b)
36  {}
37  typename promote<T, U>::V
38  operator()(const int N1, const int N2, const int N3) const
39  {
40  return eval(N1, N2, N3, Number<Dim2>());
41  }
42  };
43 
44  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
45  char j, char k, char l>
46  Dg_Expr<Dg_times_Tensor2_symmetric_0<A, B, T, U, Dim01, Dim2, i, j, k, l>,
47  typename promote<T, U>::V, Dim01, Dim2, i, j, l>
50  {
51  using TensorExpr
53  return Dg_Expr<TensorExpr, typename promote<T, U>::V, Dim01, Dim2, i, j, l>(
54  TensorExpr(a, b));
55  }
56 
57  /* B(k,l)*A(i,j,k)->Dg */
58 
59  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
60  char j, char k, char l>
61  Dg_Expr<Dg_times_Tensor2_symmetric_0<A, B, T, U, Dim01, Dim2, i, j, k, l>,
62  typename promote<T, U>::V, Dim01, Dim2, i, j, l>
65  {
66  using TensorExpr
68  return Dg_Expr<TensorExpr, typename promote<T, U>::V, Dim01, Dim2, i, j, l>(
69  TensorExpr(a, b));
70  }
71 
72  /* A(i,j,k)*B(l,k)->Dg */
73 
74  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
75  char j, char k, char l>
77  {
80 
81  template <int Current_Dim>
82  typename promote<T, U>::V eval(const int N1, const int N2, const int N3,
83  const Number<Current_Dim> &) const
84  {
85  return iterA(N1, N2, Current_Dim - 1) * iterB(N3, Current_Dim - 1)
86  + eval(N1, N2, N3, Number<Current_Dim - 1>());
87  }
88  typename promote<T, U>::V
89  eval(const int N1, const int N2, const int N3, const Number<1> &) const
90  {
91  return iterA(N1, N2, 0) * iterB(N3, 0);
92  }
93 
94  public:
98  : iterA(a), iterB(b)
99  {}
100  typename promote<T, U>::V
101  operator()(const int N1, const int N2, const int N3) const
102  {
103  return eval(N1, N2, N3, Number<Dim2>());
104  }
105  };
106 
107  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
108  char j, char k, char l>
109  Dg_Expr<Dg_times_Tensor2_symmetric_1<A, B, T, U, Dim01, Dim2, i, j, k, l>,
110  typename promote<T, U>::V, Dim01, Dim2, i, j, l>
113  {
114  using TensorExpr
116  return Dg_Expr<TensorExpr, typename promote<T, U>::V, Dim01, Dim2, i, j, l>(
117  TensorExpr(a, b));
118  }
119 
120  /* B(l,k)*A(i,j,k)->Dg */
121 
122  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
123  char j, char k, char l>
124  Dg_Expr<Dg_times_Tensor2_symmetric_1<A, B, T, U, Dim01, Dim2, i, j, k, l>,
125  typename promote<T, U>::V, Dim01, Dim2, i, j, l>
128  {
129  using TensorExpr
131  return Dg_Expr<TensorExpr, typename promote<T, U>::V, Dim01, Dim2, i, j, l>(
132  TensorExpr(a, b));
133  }
134 
135  /* A(i,j,k)*B(j,l)->Tensor3 */
136 
137  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
138  char j, char k, char l>
140  {
143 
144  template <int Current_Dim>
145  typename promote<T, U>::V eval(const int N1, const int N2, const int N3,
146  const Number<Current_Dim> &) const
147  {
148  return iterA(N1, Current_Dim - 1, N2) * iterB(Current_Dim - 1, N3)
149  + eval(N1, N2, N3, Number<Current_Dim - 1>());
150  }
151  typename promote<T, U>::V
152  eval(const int N1, const int N2, const int N3, const Number<1> &) const
153  {
154  return iterA(N1, 0, N2) * iterB(0, N3);
155  }
156 
157  public:
161  : iterA(a), iterB(b)
162  {}
163  typename promote<T, U>::V
164  operator()(const int N1, const int N2, const int N3) const
165  {
166  return eval(N1, N2, N3, Number<Dim01>());
167  }
168  };
169 
170  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
171  char j, char k, char l>
172  Tensor3_Expr<
173  Dg_times_Tensor2_symmetric_1_0<A, B, T, U, Dim01, Dim2, i, j, k, l>,
174  typename promote<T, U>::V, Dim01, Dim2, Dim01, i, k, l>
177  {
178  using TensorExpr
181  Dim01, i, k, l>(TensorExpr(a, b));
182  }
183 
184  /* B(j,l)*A(i,j,k)->Tensor3 */
185 
186  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
187  char j, char k, char l>
188  Tensor3_Expr<
189  Dg_times_Tensor2_symmetric_1_0<A, B, T, U, Dim01, Dim2, i, j, k, l>,
190  typename promote<T, U>::V, Dim01, Dim2, Dim01, i, k, l>
193  {
194  using TensorExpr
197  Dim01, i, k, l>(TensorExpr(a, b));
198  }
199 
200  /* A(i,j,k)*B(l,j)->Tensor3 */
201 
202  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
203  char j, char k, char l>
205  {
208 
209  template <int Current_Dim>
210  typename promote<T, U>::V eval(const int N1, const int N2, const int N3,
211  const Number<Current_Dim> &) const
212  {
213  return iterA(N1, Current_Dim - 1, N2) * iterB(N3, Current_Dim - 1)
214  + eval(N1, N2, N3, Number<Current_Dim - 1>());
215  }
216  typename promote<T, U>::V
217  eval(const int N1, const int N2, const int N3, const Number<1> &) const
218  {
219  return iterA(N1, 0, N2) * iterB(N3, 0);
220  }
221 
222  public:
226  : iterA(a), iterB(b)
227  {}
228  typename promote<T, U>::V
229  operator()(const int N1, const int N2, const int N3) const
230  {
231  return eval(N1, N2, N3, Number<Dim01>());
232  }
233  };
234 
235  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
236  char j, char k, char l>
237  Tensor3_Expr<
238  Dg_times_Tensor2_symmetric_1_1<A, B, T, U, Dim01, Dim2, i, j, k, l>,
239  typename promote<T, U>::V, Dim01, Dim2, Dim01, i, k, l>
242  {
243  using TensorExpr
246  Dim01, i, k, l>(TensorExpr(a, b));
247  }
248 
249  /* B(l,j)*A(i,j,k)->Tensor3 */
250 
251  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
252  char j, char k, char l>
253  Tensor3_Expr<
254  Dg_times_Tensor2_symmetric_1_1<A, B, T, U, Dim01, Dim2, i, j, k, l>,
255  typename promote<T, U>::V, Dim01, Dim2, Dim01, i, k, l>
258  {
259  using TensorExpr
262  Dim01, i, k, l>(TensorExpr(a, b));
263  }
264 
265  /* A(i,j,k)*B(j,k)->Tensor1 */
266 
267  template <class A, class B, class T, class U, int Dim, char i, char j, char k>
269  {
272 
273  template <int Current_Dim0, int Current_Dim1>
274  typename promote<T, U>::V eval(const int N1, const Number<Current_Dim0> &,
275  const Number<Current_Dim1> &) const
276  {
277  return iterA(N1, Current_Dim0 - 1, Current_Dim1 - 1)
278  * iterB(Current_Dim0 - 1, Current_Dim1 - 1)
280  }
281  template <int Current_Dim1>
282  typename promote<T, U>::V
283  eval(const int N1, const Number<1> &, const Number<Current_Dim1> &) const
284  {
285  return iterA(N1, 0, Current_Dim1 - 1) * iterB(0, Current_Dim1 - 1)
287  }
288  typename promote<T, U>::V
289  eval(const int N1, const Number<1> &, const Number<1> &) const
290  {
291  return iterA(N1, 0, 0) * iterB(0, 0);
292  }
293 
294  public:
298  : iterA(a), iterB(b)
299  {}
300  typename promote<T, U>::V operator()(const int N1) const
301  {
302  return eval(N1, Number<Dim>(), Number<Dim>());
303  }
304  };
305 
306  template <class A, class B, class T, class U, int Dim, char i, char j, char k>
308  typename promote<T, U>::V, Dim, i>
311  {
314  TensorExpr(a, b));
315  }
316 
317  /* B(j,k)*A(i,j,k)->Tensor1 */
318 
319  template <class A, class B, class T, class U, int Dim, char i, char j, char k>
321  typename promote<T, U>::V, Dim, i>
324  {
327  TensorExpr(a, b));
328  }
329 
330  /* A(i,j,k)*B(k,j)->Tensor1 */
331 
332  template <class A, class B, class T, class U, int Dim, char i, char j, char k>
334  {
337 
338  template <int Current_Dim0, int Current_Dim1>
339  typename promote<T, U>::V eval(const int N1, const Number<Current_Dim0> &,
340  const Number<Current_Dim1> &) const
341  {
342  return iterA(N1, Current_Dim0 - 1, Current_Dim1 - 1)
343  * iterB(Current_Dim1 - 1, Current_Dim0 - 1)
345  }
346  template <int Current_Dim1>
347  typename promote<T, U>::V
348  eval(const int N1, const Number<1> &, const Number<Current_Dim1> &) const
349  {
350  return iterA(N1, 0, Current_Dim1 - 1) * iterB(Current_Dim1 - 1, 0)
352  }
353  typename promote<T, U>::V
354  eval(const int N1, const Number<1> &, const Number<1> &) const
355  {
356  return iterA(N1, 0, 0) * iterB(0, 0);
357  }
358 
359  public:
363  : iterA(a), iterB(b)
364  {}
365  typename promote<T, U>::V operator()(const int N1) const
366  {
367  return eval(N1, Number<Dim>(), Number<Dim>());
368  }
369  };
370 
371  template <class A, class B, class T, class U, int Dim, char i, char j, char k>
373  typename promote<T, U>::V, Dim, i>
376  {
379  TensorExpr(a, b));
380  }
381 
382  /* B(k,j)*A(i,j,k)->Tensor1 */
383 
384  template <class A, class B, class T, class U, int Dim, char i, char j, char k>
386  typename promote<T, U>::V, Dim, i>
389  {
392  TensorExpr(a, b));
393  }
394 
395  /* A(j,i,k)*B(j,k)->Tensor1 */
396 
397  template <class A, class B, class T, class U, int Dim, char i, char j, char k>
399  {
402 
403  template <int Current_Dim0, int Current_Dim1>
404  typename promote<T, U>::V eval(const int N1, const Number<Current_Dim0> &,
405  const Number<Current_Dim1> &) const
406  {
407  return iterA(Current_Dim0 - 1, N1, Current_Dim1 - 1)
408  * iterB(Current_Dim0 - 1, Current_Dim1 - 1)
410  }
411  template <int Current_Dim1>
412  typename promote<T, U>::V
413  eval(const int N1, const Number<1> &, const Number<Current_Dim1> &) const
414  {
415  return iterA(0, N1, Current_Dim1 - 1) * iterB(0, Current_Dim1 - 1)
417  }
418  typename promote<T, U>::V
419  eval(const int N1, const Number<1> &, const Number<1> &) const
420  {
421  return iterA(0, N1, 0) * iterB(0, 0);
422  }
423 
424  public:
428  : iterA(a), iterB(b)
429  {}
430  typename promote<T, U>::V operator()(const int N1) const
431  {
432  return eval(N1, Number<Dim>(), Number<Dim>());
433  }
434  };
435 
436  template <class A, class B, class T, class U, int Dim, char i, char j, char k>
438  typename promote<T, U>::V, Dim, i>
441  {
444  TensorExpr(a, b));
445  }
446 
447  /* B(j,k)*A(j,i,k)->Tensor1 */
448 
449  template <class A, class B, class T, class U, int Dim, char i, char j, char k>
451  typename promote<T, U>::V, Dim, i>
454  {
457  TensorExpr(a, b));
458  }
459 
460  /* A(k,i,j)*B(j,k)->Tensor1 */
461 
462  template <class A, class B, class T, class U, int Dim, char i, char j, char k>
464  {
467 
468  template <int Current_Dim0, int Current_Dim1>
469  typename promote<T, U>::V eval(const int N1, const Number<Current_Dim0> &,
470  const Number<Current_Dim1> &) const
471  {
472  return iterA(Current_Dim0 - 1, N1, Current_Dim1 - 1)
473  * iterB(Current_Dim1 - 1, Current_Dim0 - 1)
475  }
476  template <int Current_Dim1>
477  typename promote<T, U>::V
478  eval(const int N1, const Number<1> &, const Number<Current_Dim1> &) const
479  {
480  return iterA(0, N1, Current_Dim1 - 1) * iterB(Current_Dim1 - 1, 0)
482  }
483  typename promote<T, U>::V
484  eval(const int N1, const Number<1> &, const Number<1> &) const
485  {
486  return iterA(0, N1, 0) * iterB(0, 0);
487  }
488 
489  public:
493  : iterA(a), iterB(b)
494  {}
495  typename promote<T, U>::V operator()(const int N1) const
496  {
497  return eval(N1, Number<Dim>(), Number<Dim>());
498  }
499  };
500 
501  template <class A, class B, class T, class U, int Dim, char i, char j, char k>
503  typename promote<T, U>::V, Dim, i>
506  {
509  TensorExpr(a, b));
510  }
511 
512  /* B(j,k)*A(k,i,j)->Tensor1 */
513 
514  template <class A, class B, class T, class U, int Dim, char i, char j, char k>
516  typename promote<T, U>::V, Dim, i>
519  {
522  TensorExpr(a, b));
523  }
524 
525  /* A(j,k,i)*B(j,k)->Tensor1 */
526 
527  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
528  char j, char k>
530  {
533 
534  template <int Current_Dim0, int Current_Dim1>
535  typename promote<T, U>::V eval(const int N1, const Number<Current_Dim0> &,
536  const Number<Current_Dim1> &) const
537  {
538  return iterA(Current_Dim0 - 1, Current_Dim1 - 1, N1)
539  * iterB(Current_Dim0 - 1, Current_Dim1 - 1)
541  }
542  template <int Current_Dim1>
543  typename promote<T, U>::V
544  eval(const int N1, const Number<1> &, const Number<Current_Dim1> &) const
545  {
546  return iterA(0, Current_Dim1 - 1, N1) * iterB(0, Current_Dim1 - 1)
548  }
549  typename promote<T, U>::V
550  eval(const int N1, const Number<1> &, const Number<1> &) const
551  {
552  return iterA(0, 0, N1) * iterB(0, 0);
553  }
554 
555  public:
559  : iterA(a), iterB(b)
560  {}
561  typename promote<T, U>::V operator()(const int N1) const
562  {
563  return eval(N1, Number<Dim01>(), Number<Dim01>());
564  }
565  };
566 
567  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
568  char j, char k>
570  typename promote<T, U>::V, Dim2, i>
573  {
574  using TensorExpr
577  TensorExpr(a, b));
578  }
579 
580  /* B(j,k)*A(j,k,i)->Tensor1 */
581 
582  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
583  char j, char k>
585  typename promote<T, U>::V, Dim2, i>
588  {
589  using TensorExpr
592  TensorExpr(a, b));
593  }
594 
595  /* A(j,k,i)*B(k,j)->Tensor1 */
596 
597  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
598  char j, char k>
600  {
603 
604  template <int Current_Dim0, int Current_Dim1>
605  typename promote<T, U>::V eval(const int N1, const Number<Current_Dim0> &,
606  const Number<Current_Dim1> &) const
607  {
608  return iterA(Current_Dim0 - 1, Current_Dim1 - 1, N1)
609  * iterB(Current_Dim1 - 1, Current_Dim0 - 1)
611  }
612  template <int Current_Dim1>
613  typename promote<T, U>::V
614  eval(const int N1, const Number<1> &, const Number<Current_Dim1> &) const
615  {
616  return iterA(0, Current_Dim1 - 1, N1) * iterB(Current_Dim1 - 1, 0)
618  }
619  typename promote<T, U>::V
620  eval(const int N1, const Number<1> &, const Number<1> &) const
621  {
622  return iterA(0, 0, N1) * iterB(0, 0);
623  }
624 
625  public:
629  : iterA(a), iterB(b)
630  {}
631  typename promote<T, U>::V operator()(const int N1) const
632  {
633  return eval(N1, Number<Dim01>(), Number<Dim01>());
634  }
635  };
636 
637  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
638  char j, char k>
640  typename promote<T, U>::V, Dim2, i>
643  {
644  using TensorExpr
647  TensorExpr(a, b));
648  }
649 
650  /* B(k,j)*A(j,k,i)->Tensor1 */
651 
652  template <class A, class B, class T, class U, int Dim01, int Dim2, char i,
653  char j, char k>
655  typename promote<T, U>::V, Dim2, i>
658  {
659  using TensorExpr
662  TensorExpr(a, b));
663  }
664 }
FTensor::Dg_times_Tensor2_symmetric_1
Definition: Dg_times_Tensor2_symmetric.hpp:76
FTensor::Dg_times_Tensor2_symmetric_10
Definition: Dg_times_Tensor2_symmetric.hpp:599
FTensor::Dg_times_Tensor2_symmetric_21::eval
promote< T, U >::V eval(const int N1, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:339
FTensor
JSON compatible output.
Definition: Christof_constructor.hpp:6
FTensor::Dg_times_Tensor2_symmetric_1::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< Current_Dim > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:82
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::Dg_times_Tensor2_symmetric_01::iterA
Dg_Expr< A, T, Dim01, Dim2, j, k, i > iterA
Definition: Dg_times_Tensor2_symmetric.hpp:531
FTensor::Dg_times_Tensor2_symmetric_20::operator()
promote< T, U >::V operator()(const int N1) const
Definition: Dg_times_Tensor2_symmetric.hpp:495
FTensor::Dg_times_Tensor2_symmetric_02
Definition: Dg_times_Tensor2_symmetric.hpp:398
FTensor::Dg_times_Tensor2_symmetric_12::Dg_times_Tensor2_symmetric_12
Dg_times_Tensor2_symmetric_12(const Dg_Expr< A, T, Dim, Dim, i, j, k > &a, const Tensor2_symmetric_Expr< B, U, Dim, j, k > &b)
Definition: Dg_times_Tensor2_symmetric.hpp:295
FTensor::Dg_times_Tensor2_symmetric_01::operator()
promote< T, U >::V operator()(const int N1) const
Definition: Dg_times_Tensor2_symmetric.hpp:561
FTensor::Dg_times_Tensor2_symmetric_1_0::iterB
Tensor2_symmetric_Expr< B, U, Dim01, j, l > iterB
Definition: Dg_times_Tensor2_symmetric.hpp:142
FTensor::Tensor2_symmetric_Expr< B, U, Dim2, k, l >
FTensor::Dg_times_Tensor2_symmetric_02::iterB
Tensor2_symmetric_Expr< B, U, Dim, j, k > iterB
Definition: Dg_times_Tensor2_symmetric.hpp:401
FTensor::Dg_times_Tensor2_symmetric_02::iterA
Dg_Expr< A, T, Dim, Dim, j, i, k > iterA
Definition: Dg_times_Tensor2_symmetric.hpp:400
FTensor::Dg_times_Tensor2_symmetric_1_1
Definition: Dg_times_Tensor2_symmetric.hpp:204
FTensor::Dg_times_Tensor2_symmetric_21::Dg_times_Tensor2_symmetric_21
Dg_times_Tensor2_symmetric_21(const Dg_Expr< A, T, Dim, Dim, i, j, k > &a, const Tensor2_symmetric_Expr< B, U, Dim, k, j > &b)
Definition: Dg_times_Tensor2_symmetric.hpp:360
FTensor::Dg_times_Tensor2_symmetric_21::operator()
promote< T, U >::V operator()(const int N1) const
Definition: Dg_times_Tensor2_symmetric.hpp:365
FTensor::Dg_times_Tensor2_symmetric_01::eval
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< Current_Dim1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:544
A
constexpr AssemblyType A
Definition: operators_tests.cpp:30
FTensor::Dg_times_Tensor2_symmetric_01::eval
promote< T, U >::V eval(const int N1, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:535
FTensor::Dg_times_Tensor2_symmetric_21::eval
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< 1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:354
FTensor::Dg_times_Tensor2_symmetric_1::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< 1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:89
FTensor::Dg_times_Tensor2_symmetric_1_0::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< 1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:152
FTensor::Dg_times_Tensor2_symmetric_20::iterA
Dg_Expr< A, T, Dim, Dim, k, i, j > iterA
Definition: Dg_times_Tensor2_symmetric.hpp:465
FTensor::Dg_times_Tensor2_symmetric_01::eval
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< 1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:550
FTensor::Dg_times_Tensor2_symmetric_20::Dg_times_Tensor2_symmetric_20
Dg_times_Tensor2_symmetric_20(const Dg_Expr< A, T, Dim, Dim, k, i, j > &a, const Tensor2_symmetric_Expr< B, U, Dim, j, k > &b)
Definition: Dg_times_Tensor2_symmetric.hpp:490
FTensor::Dg_times_Tensor2_symmetric_12::iterA
Dg_Expr< A, T, Dim, Dim, i, j, k > iterA
Definition: Dg_times_Tensor2_symmetric.hpp:270
FTensor::Dg_times_Tensor2_symmetric_01::Dg_times_Tensor2_symmetric_01
Dg_times_Tensor2_symmetric_01(const Dg_Expr< A, T, Dim01, Dim2, j, k, i > &a, const Tensor2_symmetric_Expr< B, U, Dim01, j, k > &b)
Definition: Dg_times_Tensor2_symmetric.hpp:556
FTensor::Dg_times_Tensor2_symmetric_1_1::operator()
promote< T, U >::V operator()(const int N1, const int N2, const int N3) const
Definition: Dg_times_Tensor2_symmetric.hpp:229
FTensor::Dg_times_Tensor2_symmetric_0
Definition: Dg_times_Tensor2_symmetric.hpp:13
FTensor::Number
Definition: Number.hpp:11
FTensor::Dg_times_Tensor2_symmetric_1_0::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< Current_Dim > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:145
FTensor::Dg_times_Tensor2_symmetric_12::operator()
promote< T, U >::V operator()(const int N1) const
Definition: Dg_times_Tensor2_symmetric.hpp:300
FTensor::Dg_times_Tensor2_symmetric_1_1::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< Current_Dim > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:210
FTensor::Dg_times_Tensor2_symmetric_10::operator()
promote< T, U >::V operator()(const int N1) const
Definition: Dg_times_Tensor2_symmetric.hpp:631
FTensor::Tensor1_Expr
Definition: Tensor1_Expr.hpp:27
FTensor::Dg_times_Tensor2_symmetric_20::iterB
Tensor2_symmetric_Expr< B, U, Dim, j, k > iterB
Definition: Dg_times_Tensor2_symmetric.hpp:466
a
constexpr double a
Definition: approx_sphere.cpp:30
FTensor::Dg_times_Tensor2_symmetric_02::Dg_times_Tensor2_symmetric_02
Dg_times_Tensor2_symmetric_02(const Dg_Expr< A, T, Dim, Dim, j, i, k > &a, const Tensor2_symmetric_Expr< B, U, Dim, j, k > &b)
Definition: Dg_times_Tensor2_symmetric.hpp:425
FTensor::Dg_times_Tensor2_symmetric_12
Definition: Dg_times_Tensor2_symmetric.hpp:268
FTensor::Dg_times_Tensor2_symmetric_1_1::iterA
Dg_Expr< A, T, Dim01, Dim2, i, j, k > iterA
Definition: Dg_times_Tensor2_symmetric.hpp:206
FTensor::promote::V
T1 V
Definition: promote.hpp:17
FTensor::Dg_times_Tensor2_symmetric_1::iterA
Dg_Expr< A, T, Dim01, Dim2, i, j, k > iterA
Definition: Dg_times_Tensor2_symmetric.hpp:78
FTensor::Dg_times_Tensor2_symmetric_21::iterB
Tensor2_symmetric_Expr< B, U, Dim, k, j > iterB
Definition: Dg_times_Tensor2_symmetric.hpp:336
FTensor::Dg_times_Tensor2_symmetric_1_0::Dg_times_Tensor2_symmetric_1_0
Dg_times_Tensor2_symmetric_1_0(const Dg_Expr< A, T, Dim01, Dim2, i, j, k > &a, const Tensor2_symmetric_Expr< B, U, Dim01, j, l > &b)
Definition: Dg_times_Tensor2_symmetric.hpp:158
FTensor::Dg_times_Tensor2_symmetric_12::iterB
Tensor2_symmetric_Expr< B, U, Dim, j, k > iterB
Definition: Dg_times_Tensor2_symmetric.hpp:271
FTensor::Dg_times_Tensor2_symmetric_0::iterB
Tensor2_symmetric_Expr< B, U, Dim2, k, l > iterB
Definition: Dg_times_Tensor2_symmetric.hpp:16
FTensor::Dg_times_Tensor2_symmetric_20
Definition: Dg_times_Tensor2_symmetric.hpp:463
FTensor::Dg_times_Tensor2_symmetric_10::iterB
Tensor2_symmetric_Expr< B, U, Dim01, k, j > iterB
Definition: Dg_times_Tensor2_symmetric.hpp:602
FTensor::Tensor3_Expr
Definition: Tensor3_Expr.hpp:24
FTensor::Dg_times_Tensor2_symmetric_10::iterA
Dg_Expr< A, T, Dim01, Dim2, j, k, i > iterA
Definition: Dg_times_Tensor2_symmetric.hpp:601
FTensor::Dg_times_Tensor2_symmetric_10::eval
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< Current_Dim1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:614
FTensor::Dg_times_Tensor2_symmetric_0::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< Current_Dim > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:19
FTensor::Dg_times_Tensor2_symmetric_20::eval
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< Current_Dim1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:478
FTensor::Dg_times_Tensor2_symmetric_12::eval
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< 1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:289
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
FTensor::Dg_times_Tensor2_symmetric_1::Dg_times_Tensor2_symmetric_1
Dg_times_Tensor2_symmetric_1(const Dg_Expr< A, T, Dim01, Dim2, i, j, k > &a, const Tensor2_symmetric_Expr< B, U, Dim2, l, k > &b)
Definition: Dg_times_Tensor2_symmetric.hpp:95
FTensor::Dg_times_Tensor2_symmetric_02::eval
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< 1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:419
FTensor::Dg_times_Tensor2_symmetric_0::Dg_times_Tensor2_symmetric_0
Dg_times_Tensor2_symmetric_0(const Dg_Expr< A, T, Dim01, Dim2, i, j, k > &a, const Tensor2_symmetric_Expr< B, U, Dim2, k, l > &b)
Definition: Dg_times_Tensor2_symmetric.hpp:32
FTensor::Dg_times_Tensor2_symmetric_1_1::iterB
Tensor2_symmetric_Expr< B, U, Dim01, l, j > iterB
Definition: Dg_times_Tensor2_symmetric.hpp:207
FTensor::Dg_times_Tensor2_symmetric_0::iterA
Dg_Expr< A, T, Dim01, Dim2, i, j, k > iterA
Definition: Dg_times_Tensor2_symmetric.hpp:15
FTensor::Dg_times_Tensor2_symmetric_10::eval
promote< T, U >::V eval(const int N1, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:605
FTensor::Dg_times_Tensor2_symmetric_0::operator()
promote< T, U >::V operator()(const int N1, const int N2, const int N3) const
Definition: Dg_times_Tensor2_symmetric.hpp:38
FTensor::Dg_times_Tensor2_symmetric_12::eval
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< Current_Dim1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:283
FTensor::Dg_times_Tensor2_symmetric_1_0::operator()
promote< T, U >::V operator()(const int N1, const int N2, const int N3) const
Definition: Dg_times_Tensor2_symmetric.hpp:164
FTensor::Dg_times_Tensor2_symmetric_1::operator()
promote< T, U >::V operator()(const int N1, const int N2, const int N3) const
Definition: Dg_times_Tensor2_symmetric.hpp:101
Tensor1_Expr
Definition: single.cpp:11
FTensor::Dg_times_Tensor2_symmetric_1::iterB
Tensor2_symmetric_Expr< B, U, Dim2, l, k > iterB
Definition: Dg_times_Tensor2_symmetric.hpp:79
FTensor::Dg_times_Tensor2_symmetric_0::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< 1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:26
FTensor::Dg_times_Tensor2_symmetric_21::eval
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< Current_Dim1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:348
FTensor::Dg_Expr
Definition: Dg_Expr.hpp:25
FTensor::Dg_times_Tensor2_symmetric_02::eval
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< Current_Dim1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:413
j
FTensor::Index< 'j', 3 > j
Definition: matrix_function.cpp:19
FTensor::Dg_times_Tensor2_symmetric_21
Definition: Dg_times_Tensor2_symmetric.hpp:333
FTensor::Dg_times_Tensor2_symmetric_1_1::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< 1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:217
FTensor::Dg_times_Tensor2_symmetric_1_0
Definition: Dg_times_Tensor2_symmetric.hpp:139
FTensor::Dg_times_Tensor2_symmetric_1_1::Dg_times_Tensor2_symmetric_1_1
Dg_times_Tensor2_symmetric_1_1(const Dg_Expr< A, T, Dim01, Dim2, i, j, k > &a, const Tensor2_symmetric_Expr< B, U, Dim01, l, j > &b)
Definition: Dg_times_Tensor2_symmetric.hpp:223
FTensor::Dg_times_Tensor2_symmetric_02::operator()
promote< T, U >::V operator()(const int N1) const
Definition: Dg_times_Tensor2_symmetric.hpp:430
FTensor::Dg_times_Tensor2_symmetric_10::eval
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< 1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:620
FTensor::Dg_times_Tensor2_symmetric_10::Dg_times_Tensor2_symmetric_10
Dg_times_Tensor2_symmetric_10(const Dg_Expr< A, T, Dim01, Dim2, j, k, i > &a, const Tensor2_symmetric_Expr< B, U, Dim01, k, j > &b)
Definition: Dg_times_Tensor2_symmetric.hpp:626
FTensor::Dg_times_Tensor2_symmetric_12::eval
promote< T, U >::V eval(const int N1, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:274
FTensor::Dg_times_Tensor2_symmetric_01
Definition: Dg_times_Tensor2_symmetric.hpp:529
FTensor::Dg_times_Tensor2_symmetric_20::eval
promote< T, U >::V eval(const int N1, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:469
FTensor::Dg_times_Tensor2_symmetric_01::iterB
Tensor2_symmetric_Expr< B, U, Dim01, j, k > iterB
Definition: Dg_times_Tensor2_symmetric.hpp:532
FTensor::Dg_times_Tensor2_symmetric_1_0::iterA
Dg_Expr< A, T, Dim01, Dim2, i, j, k > iterA
Definition: Dg_times_Tensor2_symmetric.hpp:141
FTensor::Dg_times_Tensor2_symmetric_20::eval
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< 1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:484
k
FTensor::Index< 'k', 3 > k
Definition: matrix_function.cpp:20
FTensor::Dg_times_Tensor2_symmetric_02::eval
promote< T, U >::V eval(const int N1, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
Definition: Dg_times_Tensor2_symmetric.hpp:404
EshelbianPlasticity::U
@ U
Definition: EshelbianContact.cpp:193
l
FTensor::Index< 'l', 3 > l
Definition: matrix_function.cpp:21
FTensor::Dg_times_Tensor2_symmetric_21::iterA
Dg_Expr< A, T, Dim, Dim, i, j, k > iterA
Definition: Dg_times_Tensor2_symmetric.hpp:335