v0.14.0
Tensor1_Expr_equals.hpp
Go to the documentation of this file.
1 /* Various assignment operators for generic Tensor1_Expr's as well as
2  specializations for Tensor2_number_rhs's. I have to explicitly
3  declare the second operator= because otherwise the compiler will
4  generate its own and not use the template code. */
5 
6 /* =T1_Expr */
7 
8 #pragma once
9 
10 namespace FTensor
11 {
12  template <class A, class B, class U, int Dim, char i, int Current_Dim>
13  void T1_equals_T1(A &iter, const Tensor1_Expr<B, U, Dim, i> result,
14  const Number<Current_Dim> &)
15  {
16  iter(Current_Dim - 1) = result(Current_Dim - 1);
17  T1_equals_T1(iter, result, Number<Current_Dim - 1>());
18  }
19 
20  template <class A, class B, class U, int Dim, char i>
21  void T1_equals_T1(A &iter, const Tensor1_Expr<B, U, Dim, i> result,
22  const Number<1> &)
23  {
24  iter(0) = result(0);
25  }
26 
27  template <class A, class T, int Tensor_Dim, int Dim, char i>
28  template <class B, class U>
29  const Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i> &
31  operator=(const Tensor1_Expr<B, U, Dim, i> &result)
32  {
33  T1_equals_T1(iter, result, Number<Dim>());
34  return *this;
35  }
36 
37  /* =T1_Expr(T1) */
38 
39  template <class A, class T, int Tensor_Dim, int Dim, char i>
40  const Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i> &
42  operator=(const Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i> &result)
43  {
44  return operator=<Tensor1<A, Tensor_Dim>, T>(result);
45  }
46 
47  /* <<=T1_Expr ADOL-C left */
48 
49  template <class A, class B, class U, int Dim, char i, int Current_Dim>
50  inline void
52  const Number<Current_Dim> &)
53  {
54  iter(Current_Dim - 1) <<= result(Current_Dim - 1);
56  }
57 
58  template <class A, class B, class U, int Dim, char i>
59  inline void
61  const Number<1> &)
62  {
63  iter(0) <<= result(0);
64  }
65 
66  template <class A, class T, int Tensor_Dim, int Dim, char i>
67  template <class B, class U>
68  inline const Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i> &
70  operator<<=(const Tensor1_Expr<B, U, Dim, i> &result)
71  {
72  T1_equals_addolc_left_T1(iter, result, Number<Dim>());
73  return *this;
74  }
75 
76  /* <<=T1_Expr ADOL-C right */
77 
78  template <class A, class B, class U, int Dim, char i, int Current_Dim>
79  inline void
81  const Number<Current_Dim> &)
82  {
83  iter(Current_Dim - 1) >>= result(Current_Dim - 1);
85  }
86 
87  template <class A, class B, class U, int Dim, char i>
88  inline void
90  const Number<1> &)
91  {
92  iter(0) >>= result(0);
93  }
94 
95  template <class A, class T, int Tensor_Dim, int Dim, char i>
96  template <class B, class U>
97  inline const Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i> &
99  operator>>=(const Tensor1_Expr<B, U, Dim, i> &result)
100  {
101  T1_equals_addolc_right_T1(iter, result, Number<Dim>());
102  return *this;
103  }
104 
105  /* +=T1 */
106 
107  template <class A, class B, class U, int Dim, char i, int Current_Dim>
109  const Number<Current_Dim> &)
110  {
111  iter(Current_Dim - 1) += result(Current_Dim - 1);
113  }
114 
115  template <class A, class B, class U, int Dim, char i>
117  const Number<1> &)
118  {
119  iter(0) += result(0);
120  }
121 
122  template <class A, class T, int Tensor_Dim, int Dim, char i>
123  template <class B, class U>
124  const Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i> &
126  operator+=(const Tensor1_Expr<B, U, Dim, i> &result)
127  {
128  T1_plus_equals_T1(iter, result, Number<Dim>());
129  return *this;
130  }
131 
132  /* -=T1 */
133 
134  template <class A, class B, class U, int Dim, char i, int Current_Dim>
136  const Number<Current_Dim> &)
137  {
138  iter(Current_Dim - 1) -= result(Current_Dim - 1);
140  }
141 
142  template <class A, class B, class U, int Dim, char i>
144  const Number<1> &)
145  {
146  iter(0) -= result(0);
147  }
148 
149  template <class A, class T, int Tensor_Dim, int Dim, char i>
150  template <class B, class U>
151  const Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i> &
153  operator-=(const Tensor1_Expr<B, U, Dim, i> &result)
154  {
155  T1_minus_equals_T1(iter, result, Number<Dim>());
156  return *this;
157  }
158 
159  /* General template assignment operators intended mostly for
160  doubles (type U), but could be applied to anything you want, like
161  complex, etc. All that is required is that T=U works (or T+=U,
162  etc.) */
163 
164  /* =U */
165 
166  template <class A, class U, int Current_Dim>
167  void T1_equals_generic(A &iter, const U &u, const Number<Current_Dim> &)
168  {
169  iter(Current_Dim - 1) = u;
171  }
172 
173  template <class A, class U>
174  void T1_equals_generic(A &iter, const U &u, const Number<1> &)
175  {
176  iter(0) = u;
177  }
178 
179  template <class A, class T, int Tensor_Dim, int Dim, char i>
180  template <class U>
181  const Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i> &
182  Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i>::operator=(const U &u)
183  {
184  T1_equals_generic(iter, u, Number<Dim>());
185  return *this;
186  }
187 
188  /* +=U */
189 
190  template <class A, class U, int Current_Dim>
191  void T1_plus_equals_generic(A &iter, const U &u, const Number<Current_Dim> &)
192  {
193  iter(Current_Dim - 1) += u;
195  }
196 
197  template <class A, class U>
198  void T1_plus_equals_generic(A &iter, const U &u, const Number<1> &)
199  {
200  iter(0) += u;
201  }
202 
203  template <class A, class T, int Tensor_Dim, int Dim, char i>
204  template <class U>
205  const Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i> &
206  Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i>::operator+=(const U &u)
207  {
209  return *this;
210  }
211 
212  /* -=U */
213 
214  template <class A, class U, int Current_Dim>
215  void
216  T1_minus_equals_generic(A &iter, const U &u, const Number<Current_Dim> &)
217  {
218  iter(Current_Dim - 1) -= u;
220  }
221 
222  template <class A, class U>
223  void T1_minus_equals_generic(A &iter, const U &u, const Number<1> &)
224  {
225  iter(0) -= u;
226  }
227 
228  template <class A, class T, int Tensor_Dim, int Dim, char i>
229  template <class U>
230  const Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i> &
231  Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i>::operator-=(const U &u)
232  {
234  return *this;
235  }
236 
237  /* *=U */
238 
239  template <class A, class U, int Current_Dim>
240  void
241  T1_times_equals_generic(A &iter, const U &u, const Number<Current_Dim> &)
242  {
243  iter(Current_Dim - 1) *= u;
245  }
246 
247  template <class A, class U>
248  void T1_times_equals_generic(A &iter, const U &u, const Number<1> &)
249  {
250  iter(0) *= u;
251  }
252 
253  template <class A, class T, int Tensor_Dim, int Dim, char i>
254  template <class U>
255  const Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i> &
256  Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i>::operator*=(const U &u)
257  {
259  return *this;
260  }
261 
262  /* /=U */
263 
264  template <class A, class U, int Current_Dim>
265  void
267  {
268  iter(Current_Dim - 1) /= u;
270  }
271 
272  template <class A, class U>
273  void T1_divide_equals_generic(A &iter, const U &u, const Number<1> &)
274  {
275  iter(0) /= u;
276  }
277 
278  template <class A, class T, int Tensor_Dim, int Dim, char i>
279  template <class U>
280  const Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i> &
281  Tensor1_Expr<Tensor1<A, Tensor_Dim>, T, Dim, i>::operator/=(const U &u)
282  {
284  return *this;
285  }
286 
287  /* Specializations for Tensor2_number_rhs_0's */
288 
289  /* =T1 */
290 
291  template <class A, class B, class U, int Dim1, char i, int N, int Current_Dim>
292  void T2rhs0_equals_T1(A &iter, const Tensor1_Expr<B, U, Dim1, i> &result,
293  const Number<N> &N1, const Number<Current_Dim> &)
294  {
295  iter(N, Current_Dim - 1) = result(Current_Dim - 1);
296  T2rhs0_equals_T1(iter, result, N1, Number<Current_Dim - 1>());
297  }
298 
299  template <class A, class B, class U, int Dim1, char i, int N>
300  void T2rhs0_equals_T1(A &iter, const Tensor1_Expr<B, U, Dim1, i> &result,
301  const Number<N> &, const Number<1> &)
302  {
303  iter(N, 0) = result(0);
304  }
305 
306  template <class A, class T, int Dim1, char i, int N>
307  template <class B, class U>
310  operator=(const Tensor1_Expr<B, U, Dim1, i> &result)
311  {
312  T2rhs0_equals_T1(iter, result, Number<N>(), Number<Dim1>());
313  return *this;
314  }
315 
316  template <class A, class T, int Dim1, char i, int N>
319  const Tensor1_Expr<Tensor2_number_rhs_0<A, T, N>, T, Dim1, i> &result)
320  {
321  return operator=<Tensor2_number_rhs_0<A, T, N>, T>(result);
322  }
323 
324  /* +=T1 */
325 
326  template <class A, class B, class U, int Dim1, char i, int N, int Current_Dim>
327  void
329  const Number<N> &N1, const Number<Current_Dim> &)
330  {
331  iter(N, Current_Dim - 1) += result(Current_Dim - 1);
332  T2rhs0_plus_equals_T1(iter, result, N1, Number<Current_Dim - 1>());
333  }
334 
335  template <class A, class B, class U, int Dim1, char i, int N>
336  void
338  const Number<N> &, const Number<1> &)
339  {
340  iter(N, 0) += result(0);
341  }
342 
343  template <class A, class T, int Dim1, char i, int N>
344  template <class B, class U>
347  operator+=(const Tensor1_Expr<B, U, Dim1, i> &result)
348  {
349  T2rhs0_plus_equals_T1(iter, result, Number<N>(), Number<Dim1>());
350  return *this;
351  }
352 
353  template <class A, class T, int Dim1, char i, int N>
356  const Tensor1_Expr<Tensor2_number_rhs_0<A, T, N>, T, Dim1, i> &result)
357  {
358  return operator+=<Tensor2_number_rhs_0<A, T, N>, T>(result);
359  }
360 
361  /* -=T1 */
362 
363  template <class A, class B, class U, int Dim1, char i, int N, int Current_Dim>
364  void
366  const Number<N> &N1, const Number<Current_Dim> &)
367  {
368  iter(N, Current_Dim - 1) -= result(Current_Dim - 1);
369  T2rhs0_minus_equals_T1(iter, result, N1, Number<Current_Dim - 1>());
370  }
371 
372  template <class A, class B, class U, int Dim1, char i, int N>
373  void
375  const Number<N> &, const Number<1> &)
376  {
377  iter(N, 0) -= result(0);
378  }
379 
380  template <class A, class T, int Dim1, char i, int N>
381  template <class B, class U>
384  operator-=(const Tensor1_Expr<B, U, Dim1, i> &result)
385  {
386  T2rhs0_minus_equals_T1(iter, result, Number<N>(), Number<Dim1>());
387  return *this;
388  }
389 
390  template <class A, class T, int Dim1, char i, int N>
393  const Tensor1_Expr<Tensor2_number_rhs_0<A, T, N>, T, Dim1, i> &result)
394  {
395  return operator-=<Tensor2_number_rhs_0<A, T, N>, T>(result);
396  }
397 
398  /* =U */
399 
400  template <class A, class U, int N, int Current_Dim>
401  void T2rhs0_equals_generic(A &iter, const U &u, const Number<N> &N1,
402  const Number<Current_Dim> &)
403  {
404  iter(N, Current_Dim - 1) = u;
406  }
407 
408  template <class A, class U, int N>
409  void T2rhs0_equals_generic(A &iter, const U &u, const Number<N> &,
410  const Number<1> &)
411  {
412  iter(N, 0) = u;
413  }
414 
415  template <class A, class T, int Dim1, char i, int N>
416  template <class U>
419  operator=(const U &u)
420  {
422  return *this;
423  }
424 
425  /* +=U */
426 
427  template <class A, class U, int N, int Current_Dim>
428  void T2rhs0_plus_equals_generic(A &iter, const U &u, const Number<N> &N1,
429  const Number<Current_Dim> &)
430  {
431  iter(N, Current_Dim - 1) += u;
433  }
434 
435  template <class A, class U, int N>
436  void T2rhs0_plus_equals_generic(A &iter, const U &u, const Number<N> &,
437  const Number<1> &)
438  {
439  iter(N, 0) += u;
440  }
441 
442  template <class A, class T, int Dim1, char i, int N>
443  template <class U>
446  operator+=(const U &u)
447  {
449  return *this;
450  }
451 
452  /* -=U */
453 
454  template <class A, class U, int N, int Current_Dim>
455  void T2rhs0_minus_equals_generic(A &iter, const U &u, const Number<N> &N1,
456  const Number<Current_Dim> &)
457  {
458  iter(N, Current_Dim - 1) -= u;
460  }
461 
462  template <class A, class U, int N>
463  void T2rhs0_minus_equals_generic(A &iter, const U &u, const Number<N> &,
464  const Number<1> &)
465  {
466  iter(N, 0) -= u;
467  }
468 
469  template <class A, class T, int Dim1, char i, int N>
470  template <class U>
473  operator-=(const U &u)
474  {
476  return *this;
477  }
478 
479  /* *=U */
480 
481  template <class A, class U, int N, int Current_Dim>
482  void T2rhs0_times_equals_generic(A &iter, const U &u, const Number<N> &N1,
483  const Number<Current_Dim> &)
484  {
485  iter(N, Current_Dim - 1) *= u;
487  }
488 
489  template <class A, class U, int N>
490  void T2rhs0_times_equals_generic(A &iter, const U &u, const Number<N> &,
491  const Number<1> &)
492  {
493  iter(N, 0) *= u;
494  }
495 
496  template <class A, class T, int Dim1, char i, int N>
497  template <class U>
500  operator*=(const U &u)
501  {
503  return *this;
504  }
505 
506  /* /=U */
507 
508  template <class A, class U, int N, int Current_Dim>
509  void T2rhs0_divide_equals_generic(A &iter, const U &u, const Number<N> &N1,
510  const Number<Current_Dim> &)
511  {
512  iter(N, Current_Dim - 1) /= u;
514  }
515 
516  template <class A, class U, int N>
517  void T2rhs0_divide_equals_generic(A &iter, const U &u, const Number<N> &,
518  const Number<1> &)
519  {
520  iter(N, 0) /= u;
521  }
522 
523  template <class A, class T, int Dim1, char i, int N>
524  template <class U>
527  operator/=(const U &u)
528  {
530  return *this;
531  }
532 
533  /* Specializations for Tensor2_number_rhs_1's */
534 
535  /* =T1 */
536 
537  template <class A, class B, class U, int Dim1, char i, int N, int Current_Dim>
538  void T2rhs1_equals_T1(A &iter, const Tensor1_Expr<B, U, Dim1, i> &result,
539  const Number<N> &N1, const Number<Current_Dim> &)
540  {
541  iter(Current_Dim - 1, N) = result(Current_Dim - 1);
542  T2rhs1_equals_T1(iter, result, N1, Number<Current_Dim - 1>());
543  }
544 
545  template <class A, class B, class U, int Dim1, char i, int N>
546  void T2rhs1_equals_T1(A &iter, const Tensor1_Expr<B, U, Dim1, i> &result,
547  const Number<N> &, const Number<1> &)
548  {
549  iter(0, N) = result(0);
550  }
551 
552  template <class A, class T, int Dim1, char i, int N>
553  template <class B, class U>
556  operator=(const Tensor1_Expr<B, U, Dim1, i> &result)
557  {
558  T2rhs1_equals_T1(iter, result, Number<N>(), Number<Dim1>());
559  return *this;
560  }
561 
562  template <class A, class T, int Dim1, char i, int N>
565  const Tensor1_Expr<Tensor2_number_rhs_1<A, T, N>, T, Dim1, i> &result)
566  {
567  return operator=<Tensor2_number_rhs_1<A, T, N>, T>(result);
568  }
569 
570  /* +=T1 */
571 
572  template <class A, class B, class U, int Dim1, char i, int N, int Current_Dim>
573  void
575  const Number<N> &N1, const Number<Current_Dim> &)
576  {
577  iter(Current_Dim - 1, N) += result(Current_Dim - 1);
578  T2rhs1_plus_equals_T1(iter, result, N1, Number<Current_Dim - 1>());
579  }
580 
581  template <class A, class B, class U, int Dim1, char i, int N>
582  void
584  const Number<N> &, const Number<1> &)
585  {
586  iter(0, N) += result(0);
587  }
588 
589  template <class A, class T, int Dim1, char i, int N>
590  template <class B, class U>
593  operator+=(const Tensor1_Expr<B, U, Dim1, i> &result)
594  {
595  T2rhs1_plus_equals_T1(iter, result, Number<N>(), Number<Dim1>());
596  return *this;
597  }
598 
599  template <class A, class T, int Dim1, char i, int N>
602  const Tensor1_Expr<Tensor2_number_rhs_1<A, T, N>, T, Dim1, i> &result)
603  {
604  return operator+=<Tensor2_number_rhs_1<A, T, N>, T>(result);
605  }
606 
607  /* -=T1 */
608 
609  template <class A, class B, class U, int Dim1, char i, int N, int Current_Dim>
610  void
612  const Number<N> &N1, const Number<Current_Dim> &)
613  {
614  iter(Current_Dim - 1, N) -= result(Current_Dim - 1);
615  T2rhs1_minus_equals_T1(iter, result, N1, Number<Current_Dim - 1>());
616  }
617 
618  template <class A, class B, class U, int Dim1, char i, int N>
619  void
621  const Number<N> &, const Number<1> &)
622  {
623  iter(0, N) -= result(0);
624  }
625 
626  template <class A, class T, int Dim1, char i, int N>
627  template <class B, class U>
630  operator-=(const Tensor1_Expr<B, U, Dim1, i> &result)
631  {
632  T2rhs1_minus_equals_T1(iter, result, Number<N>(), Number<Dim1>());
633  return *this;
634  }
635 
636  template <class A, class T, int Dim1, char i, int N>
639  const Tensor1_Expr<Tensor2_number_rhs_1<A, T, N>, T, Dim1, i> &result)
640  {
641  return operator-=<Tensor2_number_rhs_1<A, T, N>, T>(result);
642  }
643 
644  /* =U */
645 
646  template <class A, class U, int N, int Current_Dim>
647  void T2rhs1_equals_generic(A &iter, const U &u, const Number<N> &N1,
648  const Number<Current_Dim> &)
649  {
650  iter(Current_Dim - 1, N) = u;
652  }
653 
654  template <class A, class U, int N>
655  void T2rhs1_equals_generic(A &iter, const U &u, const Number<N> &,
656  const Number<1> &)
657  {
658  iter(0, N) = u;
659  }
660 
661  template <class A, class T, int Dim1, char i, int N>
662  template <class U>
665  operator=(const U &u)
666  {
668  return *this;
669  }
670 
671  /* +=U */
672 
673  template <class A, class U, int N, int Current_Dim>
674  void T2rhs1_plus_equals_generic(A &iter, const U &u, const Number<N> &N1,
675  const Number<Current_Dim> &)
676  {
677  iter(Current_Dim - 1, N) += u;
679  }
680 
681  template <class A, class U, int N>
682  void T2rhs1_plus_equals_generic(A &iter, const U &u, const Number<N> &,
683  const Number<1> &)
684  {
685  iter(0, N) += u;
686  }
687 
688  template <class A, class T, int Dim1, char i, int N>
689  template <class U>
692  operator+=(const U &u)
693  {
695  return *this;
696  }
697 
698  /* -=U */
699 
700  template <class A, class U, int N, int Current_Dim>
701  void T2rhs1_minus_equals_generic(A &iter, const U &u, const Number<N> &N1,
702  const Number<Current_Dim> &)
703  {
704  iter(Current_Dim - 1, N) -= u;
706  }
707 
708  template <class A, class U, int N>
709  void T2rhs1_minus_equals_generic(A &iter, const U &u, const Number<N> &,
710  const Number<1> &)
711  {
712  iter(0, N) -= u;
713  }
714 
715  template <class A, class T, int Dim1, char i, int N>
716  template <class U>
719  operator-=(const U &u)
720  {
722  return *this;
723  }
724 
725  /* *=U */
726 
727  template <class A, class U, int N, int Current_Dim>
728  void T2rhs1_times_equals_generic(A &iter, const U &u, const Number<N> &N1,
729  const Number<Current_Dim> &)
730  {
731  iter(Current_Dim - 1, N) *= u;
733  }
734 
735  template <class A, class U, int N>
736  void T2rhs1_times_equals_generic(A &iter, const U &u, const Number<N> &,
737  const Number<1> &)
738  {
739  iter(0, N) *= u;
740  }
741 
742  template <class A, class T, int Dim1, char i, int N>
743  template <class U>
746  operator*=(const U &u)
747  {
749  return *this;
750  }
751 
752  /* /=U */
753 
754  template <class A, class U, int N, int Current_Dim>
755  void T2rhs1_divide_equals_generic(A &iter, const U &u, const Number<N> &N1,
756  const Number<Current_Dim> &)
757  {
758  iter(Current_Dim - 1, N) /= u;
760  }
761 
762  template <class A, class U, int N>
763  void T2rhs1_divide_equals_generic(A &iter, const U &u, const Number<N> &,
764  const Number<1> &)
765  {
766  iter(0, N) /= u;
767  }
768 
769  template <class A, class T, int Dim1, char i, int N>
770  template <class U>
773  operator/=(const U &u)
774  {
776  return *this;
777  }
778 
779  /* Specializations for Dg_number_rhs_12's */
780 
781  template <class A, class B, class U, int Dim, char i, int N1, int N2,
782  int Current_Dim>
784  const Number<N1> &NN1, const Number<N2> &NN2,
785  const Number<Current_Dim> &)
786  {
787  iter(Current_Dim - 1, N1, N2) = result(Current_Dim - 1);
788  T3dgrhs12_equals_T1(iter, result, NN1, NN2, Number<Current_Dim - 1>());
789  }
790 
791  template <class A, class B, class U, int Dim, char i, int N1, int N2>
793  const Number<N1> &, const Number<N2> &,
794  const Number<1> &)
795  {
796  iter(0, N1, N2) = result(0);
797  }
798 
799  template <class A, class T, int Dim, char i, int N1, int N2>
800  template <class B, class U>
803  operator=(const Tensor1_Expr<B, U, Dim, i> &result)
804  {
805  T3dgrhs12_equals_T1(iter, result, Number<N1>(), Number<N2>(),
806  Number<Dim>());
807  return *this;
808  }
809 
810  template <class A, class T, int Dim, char i, int N1, int N2>
813  const Tensor1_Expr<Dg_number_rhs_12<A, T, N1, N2>, T, Dim, i> &result)
814  {
815  return operator=<Dg_number_rhs_12<A, T, N1, N2>, T>(result);
816  }
817 
818  /* Specializations for Dg_number_rhs_01's */
819 
820  template <class A, class B, class U, int Dim, char i, int N1, int N2,
821  int Current_Dim>
823  const Number<N1> &NN1, const Number<N2> &NN2,
824  const Number<Current_Dim> &)
825  {
826  iter(N1, N2, Current_Dim - 1) = result(Current_Dim - 1);
827  T3dgrhs01_equals_T1(iter, result, NN1, NN2, Number<Current_Dim - 1>());
828  }
829 
830  template <class A, class B, class U, int Dim, char i, int N1, int N2>
832  const Number<N1> &, const Number<N2> &,
833  const Number<1> &)
834  {
835  iter(N1, N2, 0) = result(0);
836  }
837 
838  template <class A, class T, int Dim, char i, int N1, int N2>
839  template <class B, class U>
842  operator=(const Tensor1_Expr<B, U, Dim, i> &result)
843  {
844  T3dgrhs01_equals_T1(iter, result, Number<N1>(), Number<N2>(),
845  Number<Dim>());
846  return *this;
847  }
848 
849  template <class A, class T, int Dim, char i, int N1, int N2>
852  const Tensor1_Expr<Dg_number_rhs_01<A, T, N1, N2>, T, Dim, i> &result)
853  {
854  return operator=<Dg_number_rhs_01<A, T, N1, N2>, T>(result);
855  }
856 }
FTensor
JSON compatible output.
Definition: Christof_constructor.hpp:6
FTensor::T2rhs1_times_equals_generic
void T2rhs1_times_equals_generic(A &iter, const U &u, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:728
FTensor::Tensor1< A, Tensor_Dim >
FTensor::T2rhs0_plus_equals_T1
void T2rhs0_plus_equals_T1(A &iter, const Tensor1_Expr< B, U, Dim1, i > &result, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:328
FTensor::T1_equals_generic
void T1_equals_generic(A &iter, const U &u, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:167
FTensor::T2rhs0_times_equals_generic
void T2rhs0_times_equals_generic(A &iter, const U &u, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:482
FTensor::Tensor2_number_rhs_1
Definition: Tensor2_number.hpp:29
A
constexpr AssemblyType A
Definition: operators_tests.cpp:30
FTensor::T1_equals_addolc_right_T1
void T1_equals_addolc_right_T1(A &iter, Tensor1_Expr< B, U, Dim, i > result, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:80
FTensor::T1_equals_T1
void T1_equals_T1(A &iter, const Tensor1_Expr< B, U, Dim, i > result, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:13
FTensor::Number
Definition: Number.hpp:11
FTensor::T1_minus_equals_T1
void T1_minus_equals_T1(A &iter, const Tensor1_Expr< B, U, Dim, i > result, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:135
FTensor::T2rhs0_minus_equals_T1
void T2rhs0_minus_equals_T1(A &iter, const Tensor1_Expr< B, U, Dim1, i > &result, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:365
FTensor::T1_minus_equals_generic
void T1_minus_equals_generic(A &iter, const U &u, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:216
FTensor::T1_plus_equals_T1
void T1_plus_equals_T1(A &iter, const Tensor1_Expr< B, U, Dim, i > result, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:108
FTensor::Tensor1_Expr< B, U, Dim, i >
FTensor::T3dgrhs12_equals_T1
void T3dgrhs12_equals_T1(A &iter, const Tensor1_Expr< B, U, Dim, i > &result, const Number< N1 > &NN1, const Number< N2 > &NN2, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:783
FTensor::T2rhs1_plus_equals_T1
void T2rhs1_plus_equals_T1(A &iter, const Tensor1_Expr< B, U, Dim1, i > &result, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:574
FTensor::T2rhs1_equals_generic
void T2rhs1_equals_generic(A &iter, const U &u, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:647
FTensor::T3dgrhs01_equals_T1
void T3dgrhs01_equals_T1(A &iter, const Tensor1_Expr< B, U, Dim, i > &result, const Number< N1 > &NN1, const Number< N2 > &NN2, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:822
FTensor::T1_times_equals_generic
void T1_times_equals_generic(A &iter, const U &u, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:241
FTensor::T2rhs1_equals_T1
void T2rhs1_equals_T1(A &iter, const Tensor1_Expr< B, U, Dim1, i > &result, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:538
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
FTensor::T1_plus_equals_generic
void T1_plus_equals_generic(A &iter, const U &u, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:191
N
const int N
Definition: speed_test.cpp:3
FTensor::T2rhs1_minus_equals_generic
void T2rhs1_minus_equals_generic(A &iter, const U &u, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:701
FTensor::T1_equals_addolc_left_T1
void T1_equals_addolc_left_T1(A &iter, const Tensor1_Expr< B, U, Dim, i > result, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:51
Tensor1_Expr
Definition: single.cpp:11
FTensor::T2rhs0_plus_equals_generic
void T2rhs0_plus_equals_generic(A &iter, const U &u, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:428
FTensor::T2rhs0_equals_T1
void T2rhs0_equals_T1(A &iter, const Tensor1_Expr< B, U, Dim1, i > &result, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:292
FTensor::T2rhs1_plus_equals_generic
void T2rhs1_plus_equals_generic(A &iter, const U &u, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:674
FTensor::T2rhs0_minus_equals_generic
void T2rhs0_minus_equals_generic(A &iter, const U &u, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:455
FTensor::Dg_number_rhs_01
Definition: Dg_number.hpp:62
FTensor::T2rhs0_divide_equals_generic
void T2rhs0_divide_equals_generic(A &iter, const U &u, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:509
FTensor::T2rhs1_divide_equals_generic
void T2rhs1_divide_equals_generic(A &iter, const U &u, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:755
FTensor::Tensor2_number_rhs_0
Definition: Tensor2_number.hpp:26
FTensor::T2rhs0_equals_generic
void T2rhs0_equals_generic(A &iter, const U &u, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:401
FTensor::Dg_number_rhs_12
Definition: Dg_number.hpp:48
FTensor::T1_divide_equals_generic
void T1_divide_equals_generic(A &iter, const U &u, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:266
FTensor::T2rhs1_minus_equals_T1
void T2rhs1_minus_equals_T1(A &iter, const Tensor1_Expr< B, U, Dim1, i > &result, const Number< N > &N1, const Number< Current_Dim > &)
Definition: Tensor1_Expr_equals.hpp:611
EshelbianPlasticity::U
@ U
Definition: EshelbianContact.cpp:193