From a3f7f04463eb3091e6e23eef6cf9fbf2895c7fee Mon Sep 17 00:00:00 2001 From: Matthieu Schaller <matthieu.schaller@durham.ac.uk> Date: Sat, 1 Sep 2018 10:40:24 +0100 Subject: [PATCH] Avoid a copy of the potential structure when computing the symmetric tensors. --- src/multipole.h | 404 ++++++++++++++++++++++++------------------------ 1 file changed, 202 insertions(+), 202 deletions(-) diff --git a/src/multipole.h b/src/multipole.h index 681b9dfaed..bd00cd0840 100644 --- a/src/multipole.h +++ b/src/multipole.h @@ -1562,7 +1562,7 @@ INLINE static void gravity_M2M(struct multipole *m_a, */ INLINE static void gravity_M2L_apply(struct grav_tensor *l_b, const struct multipole *m_a, - struct potential_derivatives_M2L pot) { + const struct potential_derivatives_M2L *pot) { #ifdef SWIFT_DEBUG_CHECKS /* Count interactions */ @@ -1575,7 +1575,7 @@ INLINE static void gravity_M2L_apply(struct grav_tensor *l_b, const float M_000 = m_a->M_000; /* 0th order term */ - l_b->F_000 += M_000 * pot.D_000; + l_b->F_000 += M_000 * pot->D_000; #if SELF_GRAVITY_MULTIPOLE_ORDER > 0 @@ -1587,12 +1587,12 @@ INLINE static void gravity_M2L_apply(struct grav_tensor *l_b, const float M_001 = 0.f; /* 1st order multipole term (addition to rank 0)*/ - l_b->F_000 += M_100 * pot.D_100 + M_010 * pot.D_010 + M_001 * pot.D_001; + l_b->F_000 += M_100 * pot->D_100 + M_010 * pot->D_010 + M_001 * pot->D_001; /* 1st order multipole term (addition to rank 1)*/ - l_b->F_100 += M_000 * pot.D_100; - l_b->F_010 += M_000 * pot.D_010; - l_b->F_001 += M_000 * pot.D_001; + l_b->F_100 += M_000 * pot->D_100; + l_b->F_010 += M_000 * pot->D_010; + l_b->F_001 += M_000 * pot->D_001; #endif #if SELF_GRAVITY_MULTIPOLE_ORDER > 1 @@ -1604,21 +1604,21 @@ INLINE static void gravity_M2L_apply(struct grav_tensor *l_b, const float M_011 = m_a->M_011; /* 2nd order multipole term (addition to rank 0)*/ - l_b->F_000 += M_200 * pot.D_200 + M_020 * pot.D_020 + M_002 * pot.D_002; - l_b->F_000 += M_110 * pot.D_110 + M_101 * pot.D_101 + M_011 * pot.D_011; + l_b->F_000 += M_200 * pot->D_200 + M_020 * pot->D_020 + M_002 * pot->D_002; + l_b->F_000 += M_110 * pot->D_110 + M_101 * pot->D_101 + M_011 * pot->D_011; /* 2nd order multipole term (addition to rank 1)*/ - l_b->F_100 += M_100 * pot.D_200 + M_010 * pot.D_110 + M_001 * pot.D_101; - l_b->F_010 += M_100 * pot.D_110 + M_010 * pot.D_020 + M_001 * pot.D_011; - l_b->F_001 += M_100 * pot.D_101 + M_010 * pot.D_011 + M_001 * pot.D_002; + l_b->F_100 += M_100 * pot->D_200 + M_010 * pot->D_110 + M_001 * pot->D_101; + l_b->F_010 += M_100 * pot->D_110 + M_010 * pot->D_020 + M_001 * pot->D_011; + l_b->F_001 += M_100 * pot->D_101 + M_010 * pot->D_011 + M_001 * pot->D_002; /* 2nd order multipole term (addition to rank 2)*/ - l_b->F_200 += M_000 * pot.D_200; - l_b->F_020 += M_000 * pot.D_020; - l_b->F_002 += M_000 * pot.D_002; - l_b->F_110 += M_000 * pot.D_110; - l_b->F_101 += M_000 * pot.D_101; - l_b->F_011 += M_000 * pot.D_011; + l_b->F_200 += M_000 * pot->D_200; + l_b->F_020 += M_000 * pot->D_020; + l_b->F_002 += M_000 * pot->D_002; + l_b->F_110 += M_000 * pot->D_110; + l_b->F_101 += M_000 * pot->D_101; + l_b->F_011 += M_000 * pot->D_011; #endif #if SELF_GRAVITY_MULTIPOLE_ORDER > 2 @@ -1634,38 +1634,38 @@ INLINE static void gravity_M2L_apply(struct grav_tensor *l_b, const float M_111 = m_a->M_111; /* 3rd order multipole term (addition to rank 0)*/ - l_b->F_000 += M_300 * pot.D_300 + M_030 * pot.D_030 + M_003 * pot.D_003; - l_b->F_000 += M_210 * pot.D_210 + M_201 * pot.D_201 + M_120 * pot.D_120; - l_b->F_000 += M_021 * pot.D_021 + M_102 * pot.D_102 + M_012 * pot.D_012; - l_b->F_000 += M_111 * pot.D_111; + l_b->F_000 += M_300 * pot->D_300 + M_030 * pot->D_030 + M_003 * pot->D_003; + l_b->F_000 += M_210 * pot->D_210 + M_201 * pot->D_201 + M_120 * pot->D_120; + l_b->F_000 += M_021 * pot->D_021 + M_102 * pot->D_102 + M_012 * pot->D_012; + l_b->F_000 += M_111 * pot->D_111; /* 3rd order multipole term (addition to rank 1)*/ - l_b->F_100 += M_200 * pot.D_300 + M_020 * pot.D_120 + M_002 * pot.D_102; - l_b->F_100 += M_110 * pot.D_210 + M_101 * pot.D_201 + M_011 * pot.D_111; - l_b->F_010 += M_200 * pot.D_210 + M_020 * pot.D_030 + M_002 * pot.D_012; - l_b->F_010 += M_110 * pot.D_120 + M_101 * pot.D_111 + M_011 * pot.D_021; - l_b->F_001 += M_200 * pot.D_201 + M_020 * pot.D_021 + M_002 * pot.D_003; - l_b->F_001 += M_110 * pot.D_111 + M_101 * pot.D_102 + M_011 * pot.D_012; + l_b->F_100 += M_200 * pot->D_300 + M_020 * pot->D_120 + M_002 * pot->D_102; + l_b->F_100 += M_110 * pot->D_210 + M_101 * pot->D_201 + M_011 * pot->D_111; + l_b->F_010 += M_200 * pot->D_210 + M_020 * pot->D_030 + M_002 * pot->D_012; + l_b->F_010 += M_110 * pot->D_120 + M_101 * pot->D_111 + M_011 * pot->D_021; + l_b->F_001 += M_200 * pot->D_201 + M_020 * pot->D_021 + M_002 * pot->D_003; + l_b->F_001 += M_110 * pot->D_111 + M_101 * pot->D_102 + M_011 * pot->D_012; /* 3rd order multipole term (addition to rank 2)*/ - l_b->F_200 += M_100 * pot.D_300 + M_010 * pot.D_210 + M_001 * pot.D_201; - l_b->F_020 += M_100 * pot.D_120 + M_010 * pot.D_030 + M_001 * pot.D_021; - l_b->F_002 += M_100 * pot.D_102 + M_010 * pot.D_012 + M_001 * pot.D_003; - l_b->F_110 += M_100 * pot.D_210 + M_010 * pot.D_120 + M_001 * pot.D_111; - l_b->F_101 += M_100 * pot.D_201 + M_010 * pot.D_111 + M_001 * pot.D_102; - l_b->F_011 += M_100 * pot.D_111 + M_010 * pot.D_021 + M_001 * pot.D_012; + l_b->F_200 += M_100 * pot->D_300 + M_010 * pot->D_210 + M_001 * pot->D_201; + l_b->F_020 += M_100 * pot->D_120 + M_010 * pot->D_030 + M_001 * pot->D_021; + l_b->F_002 += M_100 * pot->D_102 + M_010 * pot->D_012 + M_001 * pot->D_003; + l_b->F_110 += M_100 * pot->D_210 + M_010 * pot->D_120 + M_001 * pot->D_111; + l_b->F_101 += M_100 * pot->D_201 + M_010 * pot->D_111 + M_001 * pot->D_102; + l_b->F_011 += M_100 * pot->D_111 + M_010 * pot->D_021 + M_001 * pot->D_012; /* 3rd order multipole term (addition to rank 3)*/ - l_b->F_300 += M_000 * pot.D_300; - l_b->F_030 += M_000 * pot.D_030; - l_b->F_003 += M_000 * pot.D_003; - l_b->F_210 += M_000 * pot.D_210; - l_b->F_201 += M_000 * pot.D_201; - l_b->F_120 += M_000 * pot.D_120; - l_b->F_021 += M_000 * pot.D_021; - l_b->F_102 += M_000 * pot.D_102; - l_b->F_012 += M_000 * pot.D_012; - l_b->F_111 += M_000 * pot.D_111; + l_b->F_300 += M_000 * pot->D_300; + l_b->F_030 += M_000 * pot->D_030; + l_b->F_003 += M_000 * pot->D_003; + l_b->F_210 += M_000 * pot->D_210; + l_b->F_201 += M_000 * pot->D_201; + l_b->F_120 += M_000 * pot->D_120; + l_b->F_021 += M_000 * pot->D_021; + l_b->F_102 += M_000 * pot->D_102; + l_b->F_012 += M_000 * pot->D_012; + l_b->F_111 += M_000 * pot->D_111; #endif #if SELF_GRAVITY_MULTIPOLE_ORDER > 3 @@ -1686,68 +1686,68 @@ INLINE static void gravity_M2L_apply(struct grav_tensor *l_b, const float M_112 = m_a->M_112; /* Compute 4th order field tensor terms (addition to rank 0) */ - l_b->F_000 += M_004 * pot.D_004 + M_013 * pot.D_013 + M_022 * pot.D_022 + - M_031 * pot.D_031 + M_040 * pot.D_040 + M_103 * pot.D_103 + - M_112 * pot.D_112 + M_121 * pot.D_121 + M_130 * pot.D_130 + - M_202 * pot.D_202 + M_211 * pot.D_211 + M_220 * pot.D_220 + - M_301 * pot.D_301 + M_310 * pot.D_310 + M_400 * pot.D_400; + l_b->F_000 += M_004 * pot->D_004 + M_013 * pot->D_013 + M_022 * pot->D_022 + + M_031 * pot->D_031 + M_040 * pot->D_040 + M_103 * pot->D_103 + + M_112 * pot->D_112 + M_121 * pot->D_121 + M_130 * pot->D_130 + + M_202 * pot->D_202 + M_211 * pot->D_211 + M_220 * pot->D_220 + + M_301 * pot->D_301 + M_310 * pot->D_310 + M_400 * pot->D_400; /* Compute 4th order field tensor terms (addition to rank 1) */ - l_b->F_001 += M_003 * pot.D_004 + M_012 * pot.D_013 + M_021 * pot.D_022 + - M_030 * pot.D_031 + M_102 * pot.D_103 + M_111 * pot.D_112 + - M_120 * pot.D_121 + M_201 * pot.D_202 + M_210 * pot.D_211 + - M_300 * pot.D_301; - l_b->F_010 += M_003 * pot.D_013 + M_012 * pot.D_022 + M_021 * pot.D_031 + - M_030 * pot.D_040 + M_102 * pot.D_112 + M_111 * pot.D_121 + - M_120 * pot.D_130 + M_201 * pot.D_211 + M_210 * pot.D_220 + - M_300 * pot.D_310; - l_b->F_100 += M_003 * pot.D_103 + M_012 * pot.D_112 + M_021 * pot.D_121 + - M_030 * pot.D_130 + M_102 * pot.D_202 + M_111 * pot.D_211 + - M_120 * pot.D_220 + M_201 * pot.D_301 + M_210 * pot.D_310 + - M_300 * pot.D_400; + l_b->F_001 += M_003 * pot->D_004 + M_012 * pot->D_013 + M_021 * pot->D_022 + + M_030 * pot->D_031 + M_102 * pot->D_103 + M_111 * pot->D_112 + + M_120 * pot->D_121 + M_201 * pot->D_202 + M_210 * pot->D_211 + + M_300 * pot->D_301; + l_b->F_010 += M_003 * pot->D_013 + M_012 * pot->D_022 + M_021 * pot->D_031 + + M_030 * pot->D_040 + M_102 * pot->D_112 + M_111 * pot->D_121 + + M_120 * pot->D_130 + M_201 * pot->D_211 + M_210 * pot->D_220 + + M_300 * pot->D_310; + l_b->F_100 += M_003 * pot->D_103 + M_012 * pot->D_112 + M_021 * pot->D_121 + + M_030 * pot->D_130 + M_102 * pot->D_202 + M_111 * pot->D_211 + + M_120 * pot->D_220 + M_201 * pot->D_301 + M_210 * pot->D_310 + + M_300 * pot->D_400; /* Compute 4th order field tensor terms (addition to rank 2) */ - l_b->F_002 += M_002 * pot.D_004 + M_011 * pot.D_013 + M_020 * pot.D_022 + - M_101 * pot.D_103 + M_110 * pot.D_112 + M_200 * pot.D_202; - l_b->F_011 += M_002 * pot.D_013 + M_011 * pot.D_022 + M_020 * pot.D_031 + - M_101 * pot.D_112 + M_110 * pot.D_121 + M_200 * pot.D_211; - l_b->F_020 += M_002 * pot.D_022 + M_011 * pot.D_031 + M_020 * pot.D_040 + - M_101 * pot.D_121 + M_110 * pot.D_130 + M_200 * pot.D_220; - l_b->F_101 += M_002 * pot.D_103 + M_011 * pot.D_112 + M_020 * pot.D_121 + - M_101 * pot.D_202 + M_110 * pot.D_211 + M_200 * pot.D_301; - l_b->F_110 += M_002 * pot.D_112 + M_011 * pot.D_121 + M_020 * pot.D_130 + - M_101 * pot.D_211 + M_110 * pot.D_220 + M_200 * pot.D_310; - l_b->F_200 += M_002 * pot.D_202 + M_011 * pot.D_211 + M_020 * pot.D_220 + - M_101 * pot.D_301 + M_110 * pot.D_310 + M_200 * pot.D_400; + l_b->F_002 += M_002 * pot->D_004 + M_011 * pot->D_013 + M_020 * pot->D_022 + + M_101 * pot->D_103 + M_110 * pot->D_112 + M_200 * pot->D_202; + l_b->F_011 += M_002 * pot->D_013 + M_011 * pot->D_022 + M_020 * pot->D_031 + + M_101 * pot->D_112 + M_110 * pot->D_121 + M_200 * pot->D_211; + l_b->F_020 += M_002 * pot->D_022 + M_011 * pot->D_031 + M_020 * pot->D_040 + + M_101 * pot->D_121 + M_110 * pot->D_130 + M_200 * pot->D_220; + l_b->F_101 += M_002 * pot->D_103 + M_011 * pot->D_112 + M_020 * pot->D_121 + + M_101 * pot->D_202 + M_110 * pot->D_211 + M_200 * pot->D_301; + l_b->F_110 += M_002 * pot->D_112 + M_011 * pot->D_121 + M_020 * pot->D_130 + + M_101 * pot->D_211 + M_110 * pot->D_220 + M_200 * pot->D_310; + l_b->F_200 += M_002 * pot->D_202 + M_011 * pot->D_211 + M_020 * pot->D_220 + + M_101 * pot->D_301 + M_110 * pot->D_310 + M_200 * pot->D_400; /* Compute 4th order field tensor terms (addition to rank 3) */ - l_b->F_003 += M_001 * pot.D_004 + M_010 * pot.D_013 + M_100 * pot.D_103; - l_b->F_012 += M_001 * pot.D_013 + M_010 * pot.D_022 + M_100 * pot.D_112; - l_b->F_021 += M_001 * pot.D_022 + M_010 * pot.D_031 + M_100 * pot.D_121; - l_b->F_030 += M_001 * pot.D_031 + M_010 * pot.D_040 + M_100 * pot.D_130; - l_b->F_102 += M_001 * pot.D_103 + M_010 * pot.D_112 + M_100 * pot.D_202; - l_b->F_111 += M_001 * pot.D_112 + M_010 * pot.D_121 + M_100 * pot.D_211; - l_b->F_120 += M_001 * pot.D_121 + M_010 * pot.D_130 + M_100 * pot.D_220; - l_b->F_201 += M_001 * pot.D_202 + M_010 * pot.D_211 + M_100 * pot.D_301; - l_b->F_210 += M_001 * pot.D_211 + M_010 * pot.D_220 + M_100 * pot.D_310; - l_b->F_300 += M_001 * pot.D_301 + M_010 * pot.D_310 + M_100 * pot.D_400; + l_b->F_003 += M_001 * pot->D_004 + M_010 * pot->D_013 + M_100 * pot->D_103; + l_b->F_012 += M_001 * pot->D_013 + M_010 * pot->D_022 + M_100 * pot->D_112; + l_b->F_021 += M_001 * pot->D_022 + M_010 * pot->D_031 + M_100 * pot->D_121; + l_b->F_030 += M_001 * pot->D_031 + M_010 * pot->D_040 + M_100 * pot->D_130; + l_b->F_102 += M_001 * pot->D_103 + M_010 * pot->D_112 + M_100 * pot->D_202; + l_b->F_111 += M_001 * pot->D_112 + M_010 * pot->D_121 + M_100 * pot->D_211; + l_b->F_120 += M_001 * pot->D_121 + M_010 * pot->D_130 + M_100 * pot->D_220; + l_b->F_201 += M_001 * pot->D_202 + M_010 * pot->D_211 + M_100 * pot->D_301; + l_b->F_210 += M_001 * pot->D_211 + M_010 * pot->D_220 + M_100 * pot->D_310; + l_b->F_300 += M_001 * pot->D_301 + M_010 * pot->D_310 + M_100 * pot->D_400; /* Compute 4th order field tensor terms (addition to rank 4) */ - l_b->F_004 += M_000 * pot.D_004; - l_b->F_013 += M_000 * pot.D_013; - l_b->F_022 += M_000 * pot.D_022; - l_b->F_031 += M_000 * pot.D_031; - l_b->F_040 += M_000 * pot.D_040; - l_b->F_103 += M_000 * pot.D_103; - l_b->F_112 += M_000 * pot.D_112; - l_b->F_121 += M_000 * pot.D_121; - l_b->F_130 += M_000 * pot.D_130; - l_b->F_202 += M_000 * pot.D_202; - l_b->F_211 += M_000 * pot.D_211; - l_b->F_220 += M_000 * pot.D_220; - l_b->F_301 += M_000 * pot.D_301; - l_b->F_310 += M_000 * pot.D_310; - l_b->F_400 += M_000 * pot.D_400; + l_b->F_004 += M_000 * pot->D_004; + l_b->F_013 += M_000 * pot->D_013; + l_b->F_022 += M_000 * pot->D_022; + l_b->F_031 += M_000 * pot->D_031; + l_b->F_040 += M_000 * pot->D_040; + l_b->F_103 += M_000 * pot->D_103; + l_b->F_112 += M_000 * pot->D_112; + l_b->F_121 += M_000 * pot->D_121; + l_b->F_130 += M_000 * pot->D_130; + l_b->F_202 += M_000 * pot->D_202; + l_b->F_211 += M_000 * pot->D_211; + l_b->F_220 += M_000 * pot->D_220; + l_b->F_301 += M_000 * pot->D_301; + l_b->F_310 += M_000 * pot->D_310; + l_b->F_400 += M_000 * pot->D_400; #endif #if SELF_GRAVITY_MULTIPOLE_ORDER > 4 @@ -1775,118 +1775,118 @@ INLINE static void gravity_M2L_apply(struct grav_tensor *l_b, const float M_113 = m_a->M_113; /* Compute 5th order field tensor terms (addition to rank 0) */ - l_b->F_000 += M_005 * pot.D_005 + M_014 * pot.D_014 + M_023 * pot.D_023 + - M_032 * pot.D_032 + M_041 * pot.D_041 + M_050 * pot.D_050 + - M_104 * pot.D_104 + M_113 * pot.D_113 + M_122 * pot.D_122 + - M_131 * pot.D_131 + M_140 * pot.D_140 + M_203 * pot.D_203 + - M_212 * pot.D_212 + M_221 * pot.D_221 + M_230 * pot.D_230 + - M_302 * pot.D_302 + M_311 * pot.D_311 + M_320 * pot.D_320 + - M_401 * pot.D_401 + M_410 * pot.D_410 + M_500 * pot.D_500; + l_b->F_000 += M_005 * pot->D_005 + M_014 * pot->D_014 + M_023 * pot->D_023 + + M_032 * pot->D_032 + M_041 * pot->D_041 + M_050 * pot->D_050 + + M_104 * pot->D_104 + M_113 * pot->D_113 + M_122 * pot->D_122 + + M_131 * pot->D_131 + M_140 * pot->D_140 + M_203 * pot->D_203 + + M_212 * pot->D_212 + M_221 * pot->D_221 + M_230 * pot->D_230 + + M_302 * pot->D_302 + M_311 * pot->D_311 + M_320 * pot->D_320 + + M_401 * pot->D_401 + M_410 * pot->D_410 + M_500 * pot->D_500; /* Compute 5th order field tensor terms (addition to rank 1) */ - l_b->F_001 += M_004 * pot.D_005 + M_013 * pot.D_014 + M_022 * pot.D_023 + - M_031 * pot.D_032 + M_040 * pot.D_041 + M_103 * pot.D_104 + - M_112 * pot.D_113 + M_121 * pot.D_122 + M_130 * pot.D_131 + - M_202 * pot.D_203 + M_211 * pot.D_212 + M_220 * pot.D_221 + - M_301 * pot.D_302 + M_310 * pot.D_311 + M_400 * pot.D_401; - l_b->F_010 += M_004 * pot.D_014 + M_013 * pot.D_023 + M_022 * pot.D_032 + - M_031 * pot.D_041 + M_040 * pot.D_050 + M_103 * pot.D_113 + - M_112 * pot.D_122 + M_121 * pot.D_131 + M_130 * pot.D_140 + - M_202 * pot.D_212 + M_211 * pot.D_221 + M_220 * pot.D_230 + - M_301 * pot.D_311 + M_310 * pot.D_320 + M_400 * pot.D_410; - l_b->F_100 += M_004 * pot.D_104 + M_013 * pot.D_113 + M_022 * pot.D_122 + - M_031 * pot.D_131 + M_040 * pot.D_140 + M_103 * pot.D_203 + - M_112 * pot.D_212 + M_121 * pot.D_221 + M_130 * pot.D_230 + - M_202 * pot.D_302 + M_211 * pot.D_311 + M_220 * pot.D_320 + - M_301 * pot.D_401 + M_310 * pot.D_410 + M_400 * pot.D_500; + l_b->F_001 += M_004 * pot->D_005 + M_013 * pot->D_014 + M_022 * pot->D_023 + + M_031 * pot->D_032 + M_040 * pot->D_041 + M_103 * pot->D_104 + + M_112 * pot->D_113 + M_121 * pot->D_122 + M_130 * pot->D_131 + + M_202 * pot->D_203 + M_211 * pot->D_212 + M_220 * pot->D_221 + + M_301 * pot->D_302 + M_310 * pot->D_311 + M_400 * pot->D_401; + l_b->F_010 += M_004 * pot->D_014 + M_013 * pot->D_023 + M_022 * pot->D_032 + + M_031 * pot->D_041 + M_040 * pot->D_050 + M_103 * pot->D_113 + + M_112 * pot->D_122 + M_121 * pot->D_131 + M_130 * pot->D_140 + + M_202 * pot->D_212 + M_211 * pot->D_221 + M_220 * pot->D_230 + + M_301 * pot->D_311 + M_310 * pot->D_320 + M_400 * pot->D_410; + l_b->F_100 += M_004 * pot->D_104 + M_013 * pot->D_113 + M_022 * pot->D_122 + + M_031 * pot->D_131 + M_040 * pot->D_140 + M_103 * pot->D_203 + + M_112 * pot->D_212 + M_121 * pot->D_221 + M_130 * pot->D_230 + + M_202 * pot->D_302 + M_211 * pot->D_311 + M_220 * pot->D_320 + + M_301 * pot->D_401 + M_310 * pot->D_410 + M_400 * pot->D_500; /* Compute 5th order field tensor terms (addition to rank 2) */ - l_b->F_002 += M_003 * pot.D_005 + M_012 * pot.D_014 + M_021 * pot.D_023 + - M_030 * pot.D_032 + M_102 * pot.D_104 + M_111 * pot.D_113 + - M_120 * pot.D_122 + M_201 * pot.D_203 + M_210 * pot.D_212 + - M_300 * pot.D_302; - l_b->F_011 += M_003 * pot.D_014 + M_012 * pot.D_023 + M_021 * pot.D_032 + - M_030 * pot.D_041 + M_102 * pot.D_113 + M_111 * pot.D_122 + - M_120 * pot.D_131 + M_201 * pot.D_212 + M_210 * pot.D_221 + - M_300 * pot.D_311; - l_b->F_020 += M_003 * pot.D_023 + M_012 * pot.D_032 + M_021 * pot.D_041 + - M_030 * pot.D_050 + M_102 * pot.D_122 + M_111 * pot.D_131 + - M_120 * pot.D_140 + M_201 * pot.D_221 + M_210 * pot.D_230 + - M_300 * pot.D_320; - l_b->F_101 += M_003 * pot.D_104 + M_012 * pot.D_113 + M_021 * pot.D_122 + - M_030 * pot.D_131 + M_102 * pot.D_203 + M_111 * pot.D_212 + - M_120 * pot.D_221 + M_201 * pot.D_302 + M_210 * pot.D_311 + - M_300 * pot.D_401; - l_b->F_110 += M_003 * pot.D_113 + M_012 * pot.D_122 + M_021 * pot.D_131 + - M_030 * pot.D_140 + M_102 * pot.D_212 + M_111 * pot.D_221 + - M_120 * pot.D_230 + M_201 * pot.D_311 + M_210 * pot.D_320 + - M_300 * pot.D_410; - l_b->F_200 += M_003 * pot.D_203 + M_012 * pot.D_212 + M_021 * pot.D_221 + - M_030 * pot.D_230 + M_102 * pot.D_302 + M_111 * pot.D_311 + - M_120 * pot.D_320 + M_201 * pot.D_401 + M_210 * pot.D_410 + - M_300 * pot.D_500; + l_b->F_002 += M_003 * pot->D_005 + M_012 * pot->D_014 + M_021 * pot->D_023 + + M_030 * pot->D_032 + M_102 * pot->D_104 + M_111 * pot->D_113 + + M_120 * pot->D_122 + M_201 * pot->D_203 + M_210 * pot->D_212 + + M_300 * pot->D_302; + l_b->F_011 += M_003 * pot->D_014 + M_012 * pot->D_023 + M_021 * pot->D_032 + + M_030 * pot->D_041 + M_102 * pot->D_113 + M_111 * pot->D_122 + + M_120 * pot->D_131 + M_201 * pot->D_212 + M_210 * pot->D_221 + + M_300 * pot->D_311; + l_b->F_020 += M_003 * pot->D_023 + M_012 * pot->D_032 + M_021 * pot->D_041 + + M_030 * pot->D_050 + M_102 * pot->D_122 + M_111 * pot->D_131 + + M_120 * pot->D_140 + M_201 * pot->D_221 + M_210 * pot->D_230 + + M_300 * pot->D_320; + l_b->F_101 += M_003 * pot->D_104 + M_012 * pot->D_113 + M_021 * pot->D_122 + + M_030 * pot->D_131 + M_102 * pot->D_203 + M_111 * pot->D_212 + + M_120 * pot->D_221 + M_201 * pot->D_302 + M_210 * pot->D_311 + + M_300 * pot->D_401; + l_b->F_110 += M_003 * pot->D_113 + M_012 * pot->D_122 + M_021 * pot->D_131 + + M_030 * pot->D_140 + M_102 * pot->D_212 + M_111 * pot->D_221 + + M_120 * pot->D_230 + M_201 * pot->D_311 + M_210 * pot->D_320 + + M_300 * pot->D_410; + l_b->F_200 += M_003 * pot->D_203 + M_012 * pot->D_212 + M_021 * pot->D_221 + + M_030 * pot->D_230 + M_102 * pot->D_302 + M_111 * pot->D_311 + + M_120 * pot->D_320 + M_201 * pot->D_401 + M_210 * pot->D_410 + + M_300 * pot->D_500; /* Compute 5th order field tensor terms (addition to rank 3) */ - l_b->F_003 += M_002 * pot.D_005 + M_011 * pot.D_014 + M_020 * pot.D_023 + - M_101 * pot.D_104 + M_110 * pot.D_113 + M_200 * pot.D_203; - l_b->F_012 += M_002 * pot.D_014 + M_011 * pot.D_023 + M_020 * pot.D_032 + - M_101 * pot.D_113 + M_110 * pot.D_122 + M_200 * pot.D_212; - l_b->F_021 += M_002 * pot.D_023 + M_011 * pot.D_032 + M_020 * pot.D_041 + - M_101 * pot.D_122 + M_110 * pot.D_131 + M_200 * pot.D_221; - l_b->F_030 += M_002 * pot.D_032 + M_011 * pot.D_041 + M_020 * pot.D_050 + - M_101 * pot.D_131 + M_110 * pot.D_140 + M_200 * pot.D_230; - l_b->F_102 += M_002 * pot.D_104 + M_011 * pot.D_113 + M_020 * pot.D_122 + - M_101 * pot.D_203 + M_110 * pot.D_212 + M_200 * pot.D_302; - l_b->F_111 += M_002 * pot.D_113 + M_011 * pot.D_122 + M_020 * pot.D_131 + - M_101 * pot.D_212 + M_110 * pot.D_221 + M_200 * pot.D_311; - l_b->F_120 += M_002 * pot.D_122 + M_011 * pot.D_131 + M_020 * pot.D_140 + - M_101 * pot.D_221 + M_110 * pot.D_230 + M_200 * pot.D_320; - l_b->F_201 += M_002 * pot.D_203 + M_011 * pot.D_212 + M_020 * pot.D_221 + - M_101 * pot.D_302 + M_110 * pot.D_311 + M_200 * pot.D_401; - l_b->F_210 += M_002 * pot.D_212 + M_011 * pot.D_221 + M_020 * pot.D_230 + - M_101 * pot.D_311 + M_110 * pot.D_320 + M_200 * pot.D_410; - l_b->F_300 += M_002 * pot.D_302 + M_011 * pot.D_311 + M_020 * pot.D_320 + - M_101 * pot.D_401 + M_110 * pot.D_410 + M_200 * pot.D_500; + l_b->F_003 += M_002 * pot->D_005 + M_011 * pot->D_014 + M_020 * pot->D_023 + + M_101 * pot->D_104 + M_110 * pot->D_113 + M_200 * pot->D_203; + l_b->F_012 += M_002 * pot->D_014 + M_011 * pot->D_023 + M_020 * pot->D_032 + + M_101 * pot->D_113 + M_110 * pot->D_122 + M_200 * pot->D_212; + l_b->F_021 += M_002 * pot->D_023 + M_011 * pot->D_032 + M_020 * pot->D_041 + + M_101 * pot->D_122 + M_110 * pot->D_131 + M_200 * pot->D_221; + l_b->F_030 += M_002 * pot->D_032 + M_011 * pot->D_041 + M_020 * pot->D_050 + + M_101 * pot->D_131 + M_110 * pot->D_140 + M_200 * pot->D_230; + l_b->F_102 += M_002 * pot->D_104 + M_011 * pot->D_113 + M_020 * pot->D_122 + + M_101 * pot->D_203 + M_110 * pot->D_212 + M_200 * pot->D_302; + l_b->F_111 += M_002 * pot->D_113 + M_011 * pot->D_122 + M_020 * pot->D_131 + + M_101 * pot->D_212 + M_110 * pot->D_221 + M_200 * pot->D_311; + l_b->F_120 += M_002 * pot->D_122 + M_011 * pot->D_131 + M_020 * pot->D_140 + + M_101 * pot->D_221 + M_110 * pot->D_230 + M_200 * pot->D_320; + l_b->F_201 += M_002 * pot->D_203 + M_011 * pot->D_212 + M_020 * pot->D_221 + + M_101 * pot->D_302 + M_110 * pot->D_311 + M_200 * pot->D_401; + l_b->F_210 += M_002 * pot->D_212 + M_011 * pot->D_221 + M_020 * pot->D_230 + + M_101 * pot->D_311 + M_110 * pot->D_320 + M_200 * pot->D_410; + l_b->F_300 += M_002 * pot->D_302 + M_011 * pot->D_311 + M_020 * pot->D_320 + + M_101 * pot->D_401 + M_110 * pot->D_410 + M_200 * pot->D_500; /* Compute 5th order field tensor terms (addition to rank 4) */ - l_b->F_004 += M_001 * pot.D_005 + M_010 * pot.D_014 + M_100 * pot.D_104; - l_b->F_013 += M_001 * pot.D_014 + M_010 * pot.D_023 + M_100 * pot.D_113; - l_b->F_022 += M_001 * pot.D_023 + M_010 * pot.D_032 + M_100 * pot.D_122; - l_b->F_031 += M_001 * pot.D_032 + M_010 * pot.D_041 + M_100 * pot.D_131; - l_b->F_040 += M_001 * pot.D_041 + M_010 * pot.D_050 + M_100 * pot.D_140; - l_b->F_103 += M_001 * pot.D_104 + M_010 * pot.D_113 + M_100 * pot.D_203; - l_b->F_112 += M_001 * pot.D_113 + M_010 * pot.D_122 + M_100 * pot.D_212; - l_b->F_121 += M_001 * pot.D_122 + M_010 * pot.D_131 + M_100 * pot.D_221; - l_b->F_130 += M_001 * pot.D_131 + M_010 * pot.D_140 + M_100 * pot.D_230; - l_b->F_202 += M_001 * pot.D_203 + M_010 * pot.D_212 + M_100 * pot.D_302; - l_b->F_211 += M_001 * pot.D_212 + M_010 * pot.D_221 + M_100 * pot.D_311; - l_b->F_220 += M_001 * pot.D_221 + M_010 * pot.D_230 + M_100 * pot.D_320; - l_b->F_301 += M_001 * pot.D_302 + M_010 * pot.D_311 + M_100 * pot.D_401; - l_b->F_310 += M_001 * pot.D_311 + M_010 * pot.D_320 + M_100 * pot.D_410; - l_b->F_400 += M_001 * pot.D_401 + M_010 * pot.D_410 + M_100 * pot.D_500; + l_b->F_004 += M_001 * pot->D_005 + M_010 * pot->D_014 + M_100 * pot->D_104; + l_b->F_013 += M_001 * pot->D_014 + M_010 * pot->D_023 + M_100 * pot->D_113; + l_b->F_022 += M_001 * pot->D_023 + M_010 * pot->D_032 + M_100 * pot->D_122; + l_b->F_031 += M_001 * pot->D_032 + M_010 * pot->D_041 + M_100 * pot->D_131; + l_b->F_040 += M_001 * pot->D_041 + M_010 * pot->D_050 + M_100 * pot->D_140; + l_b->F_103 += M_001 * pot->D_104 + M_010 * pot->D_113 + M_100 * pot->D_203; + l_b->F_112 += M_001 * pot->D_113 + M_010 * pot->D_122 + M_100 * pot->D_212; + l_b->F_121 += M_001 * pot->D_122 + M_010 * pot->D_131 + M_100 * pot->D_221; + l_b->F_130 += M_001 * pot->D_131 + M_010 * pot->D_140 + M_100 * pot->D_230; + l_b->F_202 += M_001 * pot->D_203 + M_010 * pot->D_212 + M_100 * pot->D_302; + l_b->F_211 += M_001 * pot->D_212 + M_010 * pot->D_221 + M_100 * pot->D_311; + l_b->F_220 += M_001 * pot->D_221 + M_010 * pot->D_230 + M_100 * pot->D_320; + l_b->F_301 += M_001 * pot->D_302 + M_010 * pot->D_311 + M_100 * pot->D_401; + l_b->F_310 += M_001 * pot->D_311 + M_010 * pot->D_320 + M_100 * pot->D_410; + l_b->F_400 += M_001 * pot->D_401 + M_010 * pot->D_410 + M_100 * pot->D_500; /* Compute 5th order field tensor terms (addition to rank 5) */ - l_b->F_005 += M_000 * pot.D_005; - l_b->F_014 += M_000 * pot.D_014; - l_b->F_023 += M_000 * pot.D_023; - l_b->F_032 += M_000 * pot.D_032; - l_b->F_041 += M_000 * pot.D_041; - l_b->F_050 += M_000 * pot.D_050; - l_b->F_104 += M_000 * pot.D_104; - l_b->F_113 += M_000 * pot.D_113; - l_b->F_122 += M_000 * pot.D_122; - l_b->F_131 += M_000 * pot.D_131; - l_b->F_140 += M_000 * pot.D_140; - l_b->F_203 += M_000 * pot.D_203; - l_b->F_212 += M_000 * pot.D_212; - l_b->F_221 += M_000 * pot.D_221; - l_b->F_230 += M_000 * pot.D_230; - l_b->F_302 += M_000 * pot.D_302; - l_b->F_311 += M_000 * pot.D_311; - l_b->F_320 += M_000 * pot.D_320; - l_b->F_401 += M_000 * pot.D_401; - l_b->F_410 += M_000 * pot.D_410; - l_b->F_500 += M_000 * pot.D_500; + l_b->F_005 += M_000 * pot->D_005; + l_b->F_014 += M_000 * pot->D_014; + l_b->F_023 += M_000 * pot->D_023; + l_b->F_032 += M_000 * pot->D_032; + l_b->F_041 += M_000 * pot->D_041; + l_b->F_050 += M_000 * pot->D_050; + l_b->F_104 += M_000 * pot->D_104; + l_b->F_113 += M_000 * pot->D_113; + l_b->F_122 += M_000 * pot->D_122; + l_b->F_131 += M_000 * pot->D_131; + l_b->F_140 += M_000 * pot->D_140; + l_b->F_203 += M_000 * pot->D_203; + l_b->F_212 += M_000 * pot->D_212; + l_b->F_221 += M_000 * pot->D_221; + l_b->F_230 += M_000 * pot->D_230; + l_b->F_302 += M_000 * pot->D_302; + l_b->F_311 += M_000 * pot->D_311; + l_b->F_320 += M_000 * pot->D_320; + l_b->F_401 += M_000 * pot->D_401; + l_b->F_410 += M_000 * pot->D_410; + l_b->F_500 += M_000 * pot->D_500; #endif #if SELF_GRAVITY_MULTIPOLE_ORDER > 5 @@ -1937,7 +1937,7 @@ INLINE static void gravity_M2L_nonsym( periodic, rs_inv, &pot); /* Do the M2L tensor multiplication */ - gravity_M2L_apply(l_b, m_a, pot); + gravity_M2L_apply(l_b, m_a, &pot); } /** @@ -1988,13 +1988,13 @@ INLINE static void gravity_M2L_symmetric( periodic, rs_inv, &pot); /* Do the first M2L tensor multiplication */ - gravity_M2L_apply(l_b, m_a, pot); + gravity_M2L_apply(l_b, m_a, &pot); /* Flip the signs of odd derivatives */ potential_derivatives_flip_signs(&pot); /* Do the second M2L tensor multiplication */ - gravity_M2L_apply(l_a, m_b, pot); + gravity_M2L_apply(l_a, m_b, &pot); } /** -- GitLab