v0.14.0
Loading...
Searching...
No Matches
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
7namespace 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)
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)
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)
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)
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}
static Number< 2 > N2
static Number< 1 > N1
constexpr double a
Dg_Expr< A, T, Dim01, Dim2, j, k, i > iterA
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)
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< Current_Dim1 > &) const
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< 1 > &) const
promote< T, U >::V eval(const int N1, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
promote< T, U >::V operator()(const int N1) const
Tensor2_symmetric_Expr< B, U, Dim01, j, k > iterB
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< Current_Dim1 > &) const
promote< T, U >::V operator()(const int N1) const
Tensor2_symmetric_Expr< B, U, Dim, j, k > iterB
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< 1 > &) const
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)
promote< T, U >::V eval(const int N1, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
Dg_Expr< A, T, Dim01, Dim2, i, j, k > iterA
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< 1 > &) const
Tensor2_symmetric_Expr< B, U, Dim2, k, l > iterB
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)
promote< T, U >::V operator()(const int N1, const int N2, const int N3) const
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< Current_Dim > &) const
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)
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< Current_Dim1 > &) const
promote< T, U >::V eval(const int N1, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< 1 > &) const
Tensor2_symmetric_Expr< B, U, Dim01, k, j > iterB
Dg_Expr< A, T, Dim01, Dim2, j, k, i > iterA
promote< T, U >::V operator()(const int N1) const
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< 1 > &) const
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)
promote< T, U >::V eval(const int N1, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< Current_Dim1 > &) const
Tensor2_symmetric_Expr< B, U, Dim, j, k > iterB
promote< T, U >::V operator()(const int N1) const
Tensor2_symmetric_Expr< B, U, Dim01, j, l > iterB
Dg_Expr< A, T, Dim01, Dim2, i, j, k > iterA
promote< T, U >::V operator()(const int N1, const int N2, const int N3) const
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)
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< Current_Dim > &) const
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< 1 > &) const
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< 1 > &) const
promote< T, U >::V operator()(const int N1, const int N2, const int N3) const
Dg_Expr< A, T, Dim01, Dim2, i, j, k > iterA
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< Current_Dim > &) const
Tensor2_symmetric_Expr< B, U, Dim01, l, j > iterB
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)
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< 1 > &) const
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)
promote< T, U >::V eval(const int N1, const int N2, const int N3, const Number< Current_Dim > &) const
Dg_Expr< A, T, Dim01, Dim2, i, j, k > iterA
promote< T, U >::V operator()(const int N1, const int N2, const int N3) const
Tensor2_symmetric_Expr< B, U, Dim2, l, k > iterB
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)
promote< T, U >::V eval(const int N1, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< Current_Dim1 > &) const
Tensor2_symmetric_Expr< B, U, Dim, j, k > iterB
promote< T, U >::V operator()(const int N1) const
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< 1 > &) const
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)
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< Current_Dim1 > &) const
promote< T, U >::V operator()(const int N1) const
promote< T, U >::V eval(const int N1, const Number< Current_Dim0 > &, const Number< Current_Dim1 > &) const
promote< T, U >::V eval(const int N1, const Number< 1 > &, const Number< 1 > &) const
Tensor2_symmetric_Expr< B, U, Dim, k, j > iterB
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
const double T
Tensors class implemented by Walter Landry.
Definition: FTensor.hpp:51
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)
constexpr AssemblyType A