From 4d0a953bcef2dfee397879d50328c58c5badf903 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Wed, 26 Apr 2023 17:07:42 +0200 Subject: [PATCH 1/3] core: Fix -Warray-bounds --- src/core/electrostatics/p3m.cpp | 19 ++++++++------- src/core/magnetostatics/dp3m.cpp | 14 +++++------ src/core/p3m/interpolation.hpp | 10 ++++---- .../include/utils/integral_parameter.hpp | 24 +++++++++---------- src/utils/tests/integral_parameter_test.cpp | 24 ++++++++++--------- 5 files changed, 46 insertions(+), 45 deletions(-) diff --git a/src/core/electrostatics/p3m.cpp b/src/core/electrostatics/p3m.cpp index df878133a18..12ddf2c1298 100644 --- a/src/core/electrostatics/p3m.cpp +++ b/src/core/electrostatics/p3m.cpp @@ -285,7 +285,7 @@ CoulombP3M::CoulombP3M(P3MParameters &¶meters, double prefactor, } namespace { -template struct AssignCharge { +template struct AssignCharge { void operator()(p3m_data_struct &p3m, double q, Utils::Vector3d const &real_pos, p3m_interpolation_cache &inter_weights) { @@ -325,22 +325,23 @@ void CoulombP3M::charge_assign(ParticleRange const &particles) { for (int i = 0; i < p3m.local_mesh.size; i++) p3m.rs_mesh[i] = 0.0; - Utils::integral_parameter(p3m.params.cao, p3m, particles); + Utils::integral_parameter(p3m.params.cao, p3m, + particles); } void CoulombP3M::assign_charge(double q, Utils::Vector3d const &real_pos, p3m_interpolation_cache &inter_weights) { - Utils::integral_parameter(p3m.params.cao, p3m, q, - real_pos, inter_weights); + Utils::integral_parameter(p3m.params.cao, p3m, q, + real_pos, inter_weights); } void CoulombP3M::assign_charge(double q, Utils::Vector3d const &real_pos) { - Utils::integral_parameter(p3m.params.cao, p3m, q, - real_pos); + Utils::integral_parameter(p3m.params.cao, p3m, q, + real_pos); } namespace { -template struct AssignForces { +template struct AssignForces { void operator()(p3m_data_struct &p3m, double force_prefac, ParticleRange const &particles) const { using Utils::make_const_span; @@ -507,8 +508,8 @@ double CoulombP3M::long_range_kernel(bool force_flag, bool energy_flag, p3m.local_mesh.dim); auto const force_prefac = prefactor / volume; - Utils::integral_parameter(p3m.params.cao, p3m, - force_prefac, particles); + Utils::integral_parameter(p3m.params.cao, p3m, + force_prefac, particles); // add dipole forces if (p3m.params.epsilon != P3M_EPSILON_METALLIC) { diff --git a/src/core/magnetostatics/dp3m.cpp b/src/core/magnetostatics/dp3m.cpp index d36460a1544..a9b5ddab005 100644 --- a/src/core/magnetostatics/dp3m.cpp +++ b/src/core/magnetostatics/dp3m.cpp @@ -164,7 +164,7 @@ DipolarP3M::DipolarP3M(P3MParameters &¶meters, double prefactor, } namespace { -template struct AssignDipole { +template struct AssignDipole { void operator()(dp3m_data_struct &dp3m, Utils::Vector3d const &real_pos, Utils::Vector3d const &dip) const { auto const weights = p3m_calculate_interpolation_weights( @@ -191,14 +191,14 @@ void DipolarP3M::dipole_assign(ParticleRange const &particles) { for (auto const &p : particles) { if (p.dipm() != 0.) { - Utils::integral_parameter(dp3m.params.cao, dp3m, - p.pos(), p.calc_dip()); + Utils::integral_parameter(dp3m.params.cao, dp3m, + p.pos(), p.calc_dip()); } } } namespace { -template struct AssignTorques { +template struct AssignTorques { void operator()(dp3m_data_struct const &dp3m, double prefac, int d_rs, ParticleRange const &particles) const { @@ -222,7 +222,7 @@ template struct AssignTorques { } }; -template struct AssignForces { +template struct AssignForces { void operator()(dp3m_data_struct const &dp3m, double prefac, int d_rs, ParticleRange const &particles) const { @@ -397,7 +397,7 @@ double DipolarP3M::kernel(bool force_flag, bool energy_flag, dp3m.sm.spread_grid(dp3m.rs_mesh.data(), comm_cart, dp3m.local_mesh.dim); /* Assign force component from mesh to particle */ - Utils::integral_parameter( + Utils::integral_parameter( dp3m.params.cao, dp3m, dipole_prefac * two_pi_L_i, d_rs, particles); } @@ -484,7 +484,7 @@ double DipolarP3M::kernel(bool force_flag, bool energy_flag, dp3m.sm.spread_grid(Utils::make_span(meshes), comm_cart, dp3m.local_mesh.dim); /* Assign force component from mesh to particle */ - Utils::integral_parameter( + Utils::integral_parameter( dp3m.params.cao, dp3m, dipole_prefac * Utils::sqr(two_pi_L_i), d_rs, particles); } diff --git a/src/core/p3m/interpolation.hpp b/src/core/p3m/interpolation.hpp index a25b0d8f66b..05736489381 100644 --- a/src/core/p3m/interpolation.hpp +++ b/src/core/p3m/interpolation.hpp @@ -53,7 +53,7 @@ template struct InterpolationWeights { * type InterpolationWeights. */ class p3m_interpolation_cache { - std::size_t m_cao = 0; + int m_cao = 0; /** Charge fractions for mesh assignment. */ std::vector ca_frac; /** index of first mesh point for charge assignment. */ @@ -109,10 +109,10 @@ class p3m_interpolation_cache { InterpolationWeights ret; ret.ind = ca_fmp[i]; - auto const offset = ca_frac.data() + 3 * i * m_cao; - boost::copy(make_const_span(offset + 0 * m_cao, m_cao), ret.w_x.begin()); - boost::copy(make_const_span(offset + 1 * m_cao, m_cao), ret.w_y.begin()); - boost::copy(make_const_span(offset + 2 * m_cao, m_cao), ret.w_z.begin()); + auto const offset = ca_frac.data() + 3 * i * cao; + boost::copy(make_const_span(offset + 0 * cao, cao), ret.w_x.begin()); + boost::copy(make_const_span(offset + 1 * cao, cao), ret.w_y.begin()); + boost::copy(make_const_span(offset + 2 * cao, cao), ret.w_z.begin()); return ret; } diff --git a/src/utils/include/utils/integral_parameter.hpp b/src/utils/include/utils/integral_parameter.hpp index 3467526f7b2..9bb5b405bb6 100644 --- a/src/utils/include/utils/integral_parameter.hpp +++ b/src/utils/include/utils/integral_parameter.hpp @@ -27,22 +27,20 @@ namespace Utils { namespace detail { -template