36 static constexpr u32 num_component
37 = 1 + SymTensor3d_1<T>::compo_cnt + SymTensor3d_2<T>::compo_cnt
38 + SymTensor3d_3<T>::compo_cnt + SymTensor3d_4<T>::compo_cnt
39 + SymTensor3d_5<T>::compo_cnt;
41 static constexpr u32 offset_t0 = 0;
42 static constexpr u32 offset_t1 = 1;
43 static constexpr u32 offset_t2 = offset_t1 + SymTensor3d_1<T>::compo_cnt;
44 static constexpr u32 offset_t3 = offset_t2 + SymTensor3d_2<T>::compo_cnt;
45 static constexpr u32 offset_t4 = offset_t3 + SymTensor3d_3<T>::compo_cnt;
46 static constexpr u32 offset_t5 = offset_t4 + SymTensor3d_4<T>::compo_cnt;
89 auto A5 =
SymTensor3d_5<T>{A4.v_0000 * A1.v_0, A4.v_0001 * A1.v_0, A4.v_0002 * A1.v_0,
90 A4.v_0011 * A1.v_0, A4.v_0012 * A1.v_0, A4.v_0022 * A1.v_0,
91 A4.v_0111 * A1.v_0, A4.v_0112 * A1.v_0, A4.v_0122 * A1.v_0,
92 A4.v_0222 * A1.v_0, A4.v_1111 * A1.v_0, A4.v_1112 * A1.v_0,
93 A4.v_1122 * A1.v_0, A4.v_1222 * A1.v_0, A4.v_2222 * A1.v_0,
94 A4.v_1111 * A1.v_1, A4.v_1112 * A1.v_1, A4.v_1122 * A1.v_1,
95 A4.v_1222 * A1.v_1, A4.v_2222 * A1.v_1, A4.v_2222 * A1.v_2};
97 return {1, A1, A2, A3, A4, A5};
114 auto A4 =
SymTensor3d_4<T>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
117 =
SymTensor3d_5<T>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
119 return {0, A1, A2, A3, A4};
123 inline void store(Tacc &&acc,
u32 offset)
const {
124 acc[offset + offset_t0] = t0;
125 t1.store(acc, offset + offset_t1);
126 t2.store(acc, offset + offset_t2);
127 t3.store(acc, offset + offset_t3);
128 t4.store(acc, offset + offset_t4);
129 t5.store(acc, offset + offset_t5);
135 acc[offset + offset_t0],
136 SymTensor3d_1<T>::load(acc, offset + offset_t1),
137 SymTensor3d_2<T>::load(acc, offset + offset_t2),
138 SymTensor3d_3<T>::load(acc, offset + offset_t3),
139 SymTensor3d_4<T>::load(acc, offset + offset_t4),
140 SymTensor3d_5<T>::load(acc, offset + offset_t5)};
187 static constexpr u32 num_component
188 = 1 + SymTensor3d_1<T>::compo_cnt + SymTensor3d_2<T>::compo_cnt
189 + SymTensor3d_3<T>::compo_cnt + SymTensor3d_4<T>::compo_cnt;
191 static constexpr u32 offset_t0 = 0;
192 static constexpr u32 offset_t1 = 1;
193 static constexpr u32 offset_t2 = offset_t1 + SymTensor3d_1<T>::compo_cnt;
194 static constexpr u32 offset_t3 = offset_t2 + SymTensor3d_2<T>::compo_cnt;
195 static constexpr u32 offset_t4 = offset_t3 + SymTensor3d_3<T>::compo_cnt;
238 return {1, A1, A2, A3, A4};
255 auto A4 =
SymTensor3d_4<T>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
257 return {0, A1, A2, A3, A4};
261 inline void store(Tacc &&acc,
u32 offset)
const {
262 acc[offset + offset_t0] = t0;
263 t1.store(acc, offset + offset_t1);
264 t2.store(acc, offset + offset_t2);
265 t3.store(acc, offset + offset_t3);
266 t4.store(acc, offset + offset_t4);
272 acc[offset + offset_t0],
273 SymTensor3d_1<T>::load(acc, offset + offset_t1),
274 SymTensor3d_2<T>::load(acc, offset + offset_t2),
275 SymTensor3d_3<T>::load(acc, offset + offset_t3),
276 SymTensor3d_4<T>::load(acc, offset + offset_t4)};
303 return {t0 - other.t0, t1 - other.t1, t2 - other.t2, t3 - other.t3, t4 - other.t4};
314 static constexpr u32 num_component = 1 + SymTensor3d_1<T>::compo_cnt
315 + SymTensor3d_2<T>::compo_cnt
316 + SymTensor3d_3<T>::compo_cnt;
318 static constexpr u32 offset_t0 = 0;
319 static constexpr u32 offset_t1 = 1;
320 static constexpr u32 offset_t2 = offset_t1 + SymTensor3d_1<T>::compo_cnt;
321 static constexpr u32 offset_t3 = offset_t2 + SymTensor3d_2<T>::compo_cnt;
347 return {1, A1, A2, A3};
364 return {0, A1, A2, A3};
368 inline void store(Tacc &&acc,
u32 offset)
const {
369 acc[offset + offset_t0] = t0;
370 t1.store(acc, offset + offset_t1);
371 t2.store(acc, offset + offset_t2);
372 t3.store(acc, offset + offset_t3);
378 acc[offset + offset_t0],
379 SymTensor3d_1<T>::load(acc, offset + offset_t1),
380 SymTensor3d_2<T>::load(acc, offset + offset_t2),
381 SymTensor3d_3<T>::load(acc, offset + offset_t3)};
406 return {t0 - other.t0, t1 - other.t1, t2 - other.t2, t3 - other.t3};
416 static constexpr u32 num_component
417 = 1 + SymTensor3d_1<T>::compo_cnt + SymTensor3d_2<T>::compo_cnt;
419 static constexpr u32 offset_t0 = 0;
420 static constexpr u32 offset_t1 = 1;
421 static constexpr u32 offset_t2 = offset_t1 + SymTensor3d_1<T>::compo_cnt;
454 inline void store(Tacc &&acc,
u32 offset)
const {
455 acc[offset + offset_t0] = t0;
456 t1.store(acc, offset + offset_t1);
457 t2.store(acc, offset + offset_t2);
463 acc[offset + offset_t0],
464 SymTensor3d_1<T>::load(acc, offset + offset_t1),
465 SymTensor3d_2<T>::load(acc, offset + offset_t2)};
488 return {t0 - other.t0, t1 - other.t1, t2 - other.t2};
597 static constexpr u32 num_component
598 = SymTensor3d_1<T>::compo_cnt + SymTensor3d_2<T>::compo_cnt
599 + SymTensor3d_3<T>::compo_cnt + SymTensor3d_4<T>::compo_cnt
600 + SymTensor3d_5<T>::compo_cnt;
602 static constexpr u32 offset_t1 = 0;
603 static constexpr u32 offset_t2 = offset_t1 + SymTensor3d_1<T>::compo_cnt;
604 static constexpr u32 offset_t3 = offset_t2 + SymTensor3d_2<T>::compo_cnt;
605 static constexpr u32 offset_t4 = offset_t3 + SymTensor3d_3<T>::compo_cnt;
606 static constexpr u32 offset_t5 = offset_t4 + SymTensor3d_4<T>::compo_cnt;
649 auto A5 =
SymTensor3d_5<T>{A4.v_0000 * A1.v_0, A4.v_0001 * A1.v_0, A4.v_0002 * A1.v_0,
650 A4.v_0011 * A1.v_0, A4.v_0012 * A1.v_0, A4.v_0022 * A1.v_0,
651 A4.v_0111 * A1.v_0, A4.v_0112 * A1.v_0, A4.v_0122 * A1.v_0,
652 A4.v_0222 * A1.v_0, A4.v_1111 * A1.v_0, A4.v_1112 * A1.v_0,
653 A4.v_1122 * A1.v_0, A4.v_1222 * A1.v_0, A4.v_2222 * A1.v_0,
654 A4.v_1111 * A1.v_1, A4.v_1112 * A1.v_1, A4.v_1122 * A1.v_1,
655 A4.v_1222 * A1.v_1, A4.v_2222 * A1.v_1, A4.v_2222 * A1.v_2};
657 return {A1, A2, A3, A4, A5};
674 auto A4 =
SymTensor3d_4<T>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
677 =
SymTensor3d_5<T>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
679 return {A1, A2, A3, A4};
683 inline void store(Tacc &&acc,
u32 offset)
const {
685 t1.store(acc, offset + offset_t1);
686 t2.store(acc, offset + offset_t2);
687 t3.store(acc, offset + offset_t3);
688 t4.store(acc, offset + offset_t4);
689 t5.store(acc, offset + offset_t5);
695 SymTensor3d_1<T>::load(acc, offset + offset_t1),
696 SymTensor3d_2<T>::load(acc, offset + offset_t2),
697 SymTensor3d_3<T>::load(acc, offset + offset_t3),
698 SymTensor3d_4<T>::load(acc, offset + offset_t4),
699 SymTensor3d_5<T>::load(acc, offset + offset_t5)};
726 return {t1 - other.t1, t2 - other.t2, t3 - other.t3, t4 - other.t4, t5 - other.t5};
738 static constexpr u32 num_component
739 = SymTensor3d_1<T>::compo_cnt + SymTensor3d_2<T>::compo_cnt
740 + SymTensor3d_3<T>::compo_cnt + SymTensor3d_4<T>::compo_cnt;
742 static constexpr u32 offset_t1 = 0;
743 static constexpr u32 offset_t2 = offset_t1 + SymTensor3d_1<T>::compo_cnt;
744 static constexpr u32 offset_t3 = offset_t2 + SymTensor3d_2<T>::compo_cnt;
745 static constexpr u32 offset_t4 = offset_t3 + SymTensor3d_3<T>::compo_cnt;
788 return {A1, A2, A3, A4};
805 auto A4 =
SymTensor3d_4<T>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
807 return {A1, A2, A3, A4};
811 inline void store(Tacc &&acc,
u32 offset)
const {
813 t1.store(acc, offset + offset_t1);
814 t2.store(acc, offset + offset_t2);
815 t3.store(acc, offset + offset_t3);
816 t4.store(acc, offset + offset_t4);
822 SymTensor3d_1<T>::load(acc, offset + offset_t1),
823 SymTensor3d_2<T>::load(acc, offset + offset_t2),
824 SymTensor3d_3<T>::load(acc, offset + offset_t3),
825 SymTensor3d_4<T>::load(acc, offset + offset_t4)};
850 return {t1 - other.t1, t2 - other.t2, t3 - other.t3, t4 - other.t4};
861 static constexpr u32 num_component = SymTensor3d_1<T>::compo_cnt
862 + SymTensor3d_2<T>::compo_cnt
863 + SymTensor3d_3<T>::compo_cnt;
865 static constexpr u32 offset_t1 = 0;
866 static constexpr u32 offset_t2 = offset_t1 + SymTensor3d_1<T>::compo_cnt;
867 static constexpr u32 offset_t3 = offset_t2 + SymTensor3d_2<T>::compo_cnt;
914 inline void store(Tacc &&acc,
u32 offset)
const {
916 t1.store(acc, offset + offset_t1);
917 t2.store(acc, offset + offset_t2);
918 t3.store(acc, offset + offset_t3);
924 SymTensor3d_1<T>::load(acc, offset + offset_t1),
925 SymTensor3d_2<T>::load(acc, offset + offset_t2),
926 SymTensor3d_3<T>::load(acc, offset + offset_t3)};
949 return {t1 - other.t1, t2 - other.t2, t3 - other.t3};