32 if constexpr (low_order == 0 && high_order == 5) {
48 auto M_0 = (TD0 * TQ0) + (TD1 * TQ1) + ((TD2 * TQ2)) * T(1 / 2.)
49 + ((TD3 * TQ3)) * T(1 / 6.) + ((TD4 * TQ4)) * T(1 / 24.)
50 + ((TD5 * TQ5)) * T(1 / 120.);
51 auto M_1 = T(-1.) * (TD1 * TQ0) - (TD2 * TQ1) - ((TD3 * TQ2)) * T(1 / 2.)
52 - ((TD4 * TQ3)) * T(1 / 6.) - ((TD5 * TQ4)) * T(1 / 24.);
54 = (TD2 * TQ0) + (TD3 * TQ1) + ((TD4 * TQ2)) * T(1 / 2.) + ((TD5 * TQ3)) * T(1 / 6.);
55 auto M_3 = T(-1.) * (TD3 * TQ0) - (TD4 * TQ1) - ((TD5 * TQ2)) * T(1 / 2.);
56 auto M_4 = (TD4 * TQ0) + (TD5 * TQ1);
57 auto M_5 = T(-1.) * (TD5 * TQ0);
60 }
else if constexpr (low_order == 0 && high_order == 4) {
74 auto M_0 = (TD0 * TQ0) + (TD1 * TQ1) + ((TD2 * TQ2)) * T(1 / 2.)
75 + ((TD3 * TQ3)) * T(1 / 6.) + ((TD4 * TQ4)) * T(1 / 24.);
76 auto M_1 = T(-1.) * (TD1 * TQ0) - (TD2 * TQ1) - ((TD3 * TQ2)) * T(1 / 2.)
77 - ((TD4 * TQ3)) * T(1 / 6.);
78 auto M_2 = (TD2 * TQ0) + (TD3 * TQ1) + ((TD4 * TQ2)) * T(1 / 2.);
79 auto M_3 = T(-1.) * (TD3 * TQ0) - (TD4 * TQ1);
80 auto M_4 = (TD4 * TQ0);
83 }
else if constexpr (low_order == 0 && high_order == 3) {
96 = (TD0 * TQ0) + (TD1 * TQ1) + ((TD2 * TQ2)) * T(1 / 2.) + ((TD3 * TQ3)) * T(1 / 6.);
97 auto M_1 = T(-1.) * (TD1 * TQ0) - (TD2 * TQ1) - ((TD3 * TQ2)) * T(1 / 2.);
98 auto M_2 = (TD2 * TQ0) + (TD3 * TQ1);
99 auto M_3 = T(-1.) * (TD3 * TQ0);
102 }
else if constexpr (low_order == 0 && high_order == 2) {
112 auto M_0 = (TD0 * TQ0) + (TD1 * TQ1) + ((TD2 * TQ2)) * T(1 / 2.);
113 auto M_1 = T(-1.) * (TD1 * TQ0) - (TD2 * TQ1);
114 auto M_2 = TD2 * TQ0;
117 }
else if constexpr (low_order == 0 && high_order == 1) {
125 auto M_0 = (TD0 * TQ0) + (TD1 * TQ1);
126 auto M_1 = T(-1.) * (TD1 * TQ0);
129 }
else if constexpr (low_order == 0 && high_order == 0) {
135 auto M_0 = TD0 * TQ0;
152 if constexpr (high_order == 4) {
167 constexpr T _1i2 = T(1. / 2.);
168 constexpr T _1i6 = T(1. / 6.);
169 constexpr T _1i24 = T(1. / 24.);
171 auto M_1 = TD1 * TQ0 + TD2 * TQ1 + (TD3 * TQ2) * _1i2 + (TD4 * TQ3) * _1i6
172 + (TD5 * TQ4) * _1i24;
173 auto M_2 = (T(-1.) * TD2 * TQ0) - TD3 * TQ1 - (TD4 * TQ2) * _1i2 - (TD5 * TQ3) * _1i6;
174 auto M_3 = TD3 * TQ0 + TD4 * TQ1 + (TD5 * TQ2) * _1i2;
175 auto M_4 = (T(-1.) * (TD4 * TQ0)) - TD5 * TQ1;
176 auto M_5 = TD5 * TQ0;
179 }
else if constexpr (high_order == 3) {
192 auto M_1 = TD1 * TQ0 + TD2 * TQ1 + (TD3 * TQ2) * T(1. / 2.) + (TD4 * TQ3) * T(1. / 6.);
193 auto M_2 = (T(-1.) * TD2 * TQ0) - TD3 * TQ1 - (TD4 * TQ2) * T(1. / 2.);
194 auto M_3 = TD3 * TQ0 + TD4 * TQ1;
195 auto M_4 = T(-1.) * (TD4 * TQ0);
198 }
else if constexpr (high_order == 2) {
209 auto M_1 = TD1 * TQ0 + TD2 * TQ1 + (TD3 * TQ2) * (1. / 2.);
210 auto M_2 = (T(-1.) * TD2 * TQ0) - TD3 * TQ1;
211 auto M_3 = TD3 * TQ0;
214 }
else if constexpr (high_order == 1) {
223 auto M_1 = TD1 * TQ0 + TD2 * TQ1;
224 auto M_2 = T(-1.) * TD2 * TQ0;
227 }
else if constexpr (high_order == 0) {
233 auto M_1 = TD1 * TQ0;
shammath::SymTensorCollection< T, 1, high_order+1 > get_dM_mat(const shammath::SymTensorCollection< T, 1, high_order+1 > &D, const shammath::SymTensorCollection< T, 0, high_order > &Q)
shammath::SymTensorCollection< T, low_order, high_order > get_M_mat(const shammath::SymTensorCollection< T, low_order, high_order > &D, const shammath::SymTensorCollection< T, low_order, high_order > &Q)
Contraction of the green function derivatives (D_n) and the multipole moments (Q_n)