From c24397af592eecc8f2efaf7fda972f96adbf13d5 Mon Sep 17 00:00:00 2001
From: Berenger Bramas <bbramas@mpcdf.mpg.de>
Date: Thu, 13 Apr 2017 13:57:36 +0200
Subject: [PATCH] Debug computation indexes -- size of mpi message for
 rhs/position

---
 bfps/cpp/particles/abstract_particles_distr.hpp | 6 +++---
 bfps/cpp/particles/particles_field_computer.hpp | 9 +++++----
 bfps/cpp/particles/particles_system.hpp         | 2 +-
 3 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/bfps/cpp/particles/abstract_particles_distr.hpp b/bfps/cpp/particles/abstract_particles_distr.hpp
index 9cd206ff..7fe0cea3 100644
--- a/bfps/cpp/particles/abstract_particles_distr.hpp
+++ b/bfps/cpp/particles/abstract_particles_distr.hpp
@@ -262,7 +262,7 @@ public:
                 if(descriptor.nbParticlesToSend){
                     whatNext.emplace_back(std::pair<Action,int>{NOTHING_TODO, -1});
                     mpiRequests.emplace_back();
-                    AssertMpi(MPI_Isend(const_cast<real_number*>(&particles_positions[current_offset_particles_for_partition[current_partition_size-descriptor.nbPartitionsToSend]]), descriptor.nbParticlesToSend*size_particle_positions, particles_utils::GetMpiType(real_number()), descriptor.destProc, TAG_UP_LOW_PARTICLES,
+                    AssertMpi(MPI_Isend(const_cast<real_number*>(&particles_positions[(current_offset_particles_for_partition[current_partition_size-descriptor.nbPartitionsToSend])*size_particle_positions]), descriptor.nbParticlesToSend*size_particle_positions, particles_utils::GetMpiType(real_number()), descriptor.destProc, TAG_UP_LOW_PARTICLES,
                               current_com, &mpiRequests.back()));
 
                     assert(descriptor.toRecvAndMerge == nullptr);
@@ -385,8 +385,8 @@ public:
                     DEBUG_MSG("[%d] up buffer received\n", my_rank);
                     TIMEZONE("reduce");
                     assert(descriptor.toRecvAndMerge != nullptr);
-                    reduce_particles(&particles_positions[current_offset_particles_for_partition[current_partition_size]-descriptor.nbParticlesToSend],
-                                     &particles_current_rhs[current_offset_particles_for_partition[current_partition_size]-descriptor.nbParticlesToSend],
+                    reduce_particles(&particles_positions[(current_offset_particles_for_partition[current_partition_size]-descriptor.nbParticlesToSend)*size_particle_positions],
+                                     &particles_current_rhs[(current_offset_particles_for_partition[current_partition_size]-descriptor.nbParticlesToSend)*size_particle_rhs],
                                      descriptor.toRecvAndMerge.get(), descriptor.nbParticlesToSend);
                     descriptor.toRecvAndMerge.release();
                 }
diff --git a/bfps/cpp/particles/particles_field_computer.hpp b/bfps/cpp/particles/particles_field_computer.hpp
index ed254b9e..e912f99f 100644
--- a/bfps/cpp/particles/particles_field_computer.hpp
+++ b/bfps/cpp/particles/particles_field_computer.hpp
@@ -70,6 +70,7 @@ class particles_field_computer : public abstract_particles_distr<real_number, 3,
             const int interp_limit_x = partGridIdx_x+interp_neighbours+1;
             const int interp_limit_my = partGridIdx_y-interp_neighbours;
             const int interp_limit_y = partGridIdx_y+interp_neighbours+1;
+            const int interp_limit_mz_bz = partGridIdx_z-interp_neighbours;
 
             int interp_limit_mz[2];
             int interp_limit_z[2];
@@ -104,7 +105,7 @@ class particles_field_computer : public abstract_particles_distr<real_number, 3,
                 for(int idx_z = interp_limit_mz[idx_inter] ; idx_z <= interp_limit_z[idx_inter] ; ++idx_z ){
                     const int idx_z_pbc = (idx_z + field_grid_dim[IDX_Z])%field_grid_dim[IDX_Z];
                     assert(current_partition_interval.first <= idx_z_pbc && idx_z_pbc < current_partition_interval.second);
-                    assert(idx_z-interp_limit_mz[idx_inter] < interp_neighbours*2+2);
+                    assert(((idx_z+field_grid_dim[IDX_Z]-interp_limit_mz_bz)%field_grid_dim[IDX_Z]) < interp_neighbours*2+2);
 
                     for(int idx_x = interp_limit_mx ; idx_x <= interp_limit_x ; ++idx_x ){
                         const int idx_x_pbc = (idx_x + field_grid_dim[IDX_X])%field_grid_dim[IDX_X];
@@ -114,9 +115,9 @@ class particles_field_computer : public abstract_particles_distr<real_number, 3,
                             const int idx_y_pbc = (idx_y + field_grid_dim[IDX_Y])%field_grid_dim[IDX_Y];
                             assert(idx_y-interp_limit_my < interp_neighbours*2+2);
 
-                            const real_number coef = (bz[idx_z-interp_limit_mz[idx_inter]]
-                                    * by[idx_y-interp_limit_my]
-                                    * bx[idx_x-interp_limit_mx]);
+                            const real_number coef = (bz[((idx_z+field_grid_dim[IDX_Z]-interp_limit_mz_bz)%field_grid_dim[IDX_Z])]
+                                                    * by[idx_y-interp_limit_my]
+                                                    * bx[idx_x-interp_limit_mx]);
 
                             const ptrdiff_t tindex = field.getIndexFromGlobalPosition(idx_x_pbc, idx_y_pbc, idx_z_pbc);
 
diff --git a/bfps/cpp/particles/particles_system.hpp b/bfps/cpp/particles/particles_system.hpp
index 459e7a79..472ca95d 100644
--- a/bfps/cpp/particles/particles_system.hpp
+++ b/bfps/cpp/particles/particles_system.hpp
@@ -123,7 +123,7 @@ public:
     void move(const real_number dt) final {
         TIMEZONE("particles_system::move");
         computer.move_particles(my_particles_positions.get(), my_nb_particles,
-                                my_particles_rhs.data(), std::min(step_idx,int(my_particles_rhs.size())),
+                                my_particles_rhs.data(), std::min(step_idx+1,int(my_particles_rhs.size())),
                                 dt);
     }
 
-- 
GitLab