From dcd614822b1df4a996f12a8cea68f8302db195b2 Mon Sep 17 00:00:00 2001 From: Berenger Bramas <berenger.bramas@mpcdf.mpg.de> Date: Thu, 21 Sep 2017 17:34:08 +0200 Subject: [PATCH] Debug from updated tests (not included yet) --- bfps/cpp/particles/p2p_distr_mpi.hpp | 107 +++++++++++++++------------ 1 file changed, 59 insertions(+), 48 deletions(-) diff --git a/bfps/cpp/particles/p2p_distr_mpi.hpp b/bfps/cpp/particles/p2p_distr_mpi.hpp index aacd5a2f..c148e2d3 100644 --- a/bfps/cpp/particles/p2p_distr_mpi.hpp +++ b/bfps/cpp/particles/p2p_distr_mpi.hpp @@ -73,6 +73,7 @@ protected: std::array<real_number,3> spatial_box_offset; const real_number cutoff_radius_compute; + const int nb_cells_factor; const real_number cutoff_radius; std::array<long int,3> nb_cell_levels; @@ -104,12 +105,12 @@ protected: } } - static real_number getGridCutoff(const real_number in_cutoff_radius, const std::array<real_number,3>& in_spatial_box_width){ + static int foundGridFactor(const real_number in_cutoff_radius, const std::array<real_number,3>& in_spatial_box_width){ int idx_factor = 1; while(in_cutoff_radius <= in_spatial_box_width[IDX_Z]/real_number(idx_factor+1)){ idx_factor += 1; } - return in_spatial_box_width[IDX_Z]/real_number(idx_factor); + return idx_factor; } public: @@ -128,7 +129,8 @@ public: field_grid_dim(in_field_grid_dim), spatial_box_width(in_spatial_box_width), spatial_box_offset(in_spatial_box_offset), cutoff_radius_compute(in_cutoff_radius), - cutoff_radius(getGridCutoff(in_cutoff_radius, in_spatial_box_width)){ + nb_cells_factor(foundGridFactor(in_cutoff_radius, in_spatial_box_width)), + cutoff_radius(in_spatial_box_width[IDX_Z]/real_number(nb_cells_factor)){ AssertMpi(MPI_Comm_rank(current_com, &my_rank)); AssertMpi(MPI_Comm_size(current_com, &nb_processes)); @@ -158,21 +160,29 @@ public: assert(int(field_grid_dim[IDX_Z]) == partition_interval_offset_per_proc[nb_processes_involved]); - nb_cell_levels[IDX_X] = spatial_box_width[IDX_X]/cutoff_radius; - nb_cell_levels[IDX_Y] = spatial_box_width[IDX_Y]/cutoff_radius; - nb_cell_levels[IDX_Z] = spatial_box_width[IDX_Z]/cutoff_radius; + nb_cell_levels[IDX_X] = nb_cells_factor; + nb_cell_levels[IDX_Y] = nb_cells_factor; + nb_cell_levels[IDX_Z] = nb_cells_factor; } virtual ~p2p_distr_mpi(){} //////////////////////////////////////////////////////////////////////////// + int getGridFactor() const{ + return nb_cells_factor; + } + + real_number getGridCutoff() const{ + return cutoff_radius; + } + long int get_cell_coord_x_from_index(const long int index) const{ return index % nb_cell_levels[IDX_X]; } long int get_cell_coord_y_from_index(const long int index) const{ - return (index - get_cell_coord_z_from_index(index)*(nb_cell_levels[IDX_X]*nb_cell_levels[IDX_Y])) + return (index % (nb_cell_levels[IDX_X]*nb_cell_levels[IDX_Y])) / nb_cell_levels[IDX_X]; } @@ -259,17 +269,18 @@ public: particles_positions[(idxPart)*size_particle_positions + IDX_Y], particles_positions[(idxPart)*size_particle_positions + IDX_Z]); assert(my_down_z_cell_level <= get_cell_coord_z_from_index(particles_coord[idxPart])); + if(!(get_cell_coord_z_from_index(particles_coord[idxPart]) <= my_top_z_cell_level)){// TODO + printf("Coord index %ld - %ld (tree index %ld)\n", idxPart, inout_index_particles[idxPart],particles_coord[idxPart]); + printf(">> Box index %ld - %ld - %ld\n", get_cell_coord_x_from_index(particles_coord[idxPart]), + get_cell_coord_y_from_index(particles_coord[idxPart]), + get_cell_coord_z_from_index(particles_coord[idxPart])); + printf(">> idxPartition %d\n", idxPartition); + printf(">> my_top_z_cell_level %ld\n", my_top_z_cell_level); + printf(">> position %e %e %e\n", particles_positions[(idxPart)*size_particle_positions + IDX_X], + particles_positions[(idxPart)*size_particle_positions + IDX_Y], + particles_positions[(idxPart)*size_particle_positions + IDX_Z]); + } assert(get_cell_coord_z_from_index(particles_coord[idxPart]) <= my_top_z_cell_level); -// if(inout_index_particles[idxPart] == 547){// TODO -// printf("Coord index %ld - %ld (tree index %ld)\n", idxPart, inout_index_particles[idxPart],particles_coord[idxPart]); -// printf(">> Box index %ld - %ld - %ld\n", get_cell_coord_x_from_index(particles_coord[idxPart]), -// get_cell_coord_y_from_index(particles_coord[idxPart]), -// get_cell_coord_z_from_index(particles_coord[idxPart])); -// printf(">> idxPartition %d\n", idxPartition); -// printf(">> position %e %e %e\n", particles_positions[(idxPart)*size_particle_positions + IDX_X], -// particles_positions[(idxPart)*size_particle_positions + IDX_Y], -// particles_positions[(idxPart)*size_particle_positions + IDX_Z]); -// } } } @@ -396,9 +407,9 @@ public: // Find process with at least one neighbor { -// std::cout << my_rank << ">> my_top_z_cell_level " << my_top_z_cell_level << std::endl; -// std::cout << my_rank << ">> my_down_z_cell_level " << my_down_z_cell_level << std::endl; -// std::cout.flush();// TODO + std::cout << my_rank << ">> my_top_z_cell_level " << my_top_z_cell_level << std::endl; + std::cout << my_rank << ">> my_down_z_cell_level " << my_down_z_cell_level << std::endl; + std::cout.flush();// TODO int dest_proc = (my_rank+1)%nb_processes_involved; while(dest_proc != my_rank @@ -411,10 +422,10 @@ public: nb_levels_to_send += 1; } -// std::cout << my_rank << " dest_proc " << dest_proc << std::endl; -// std::cout << my_rank << ">> first_cell_level_proc(dest_proc) " << first_cell_level_proc(dest_proc) << std::endl; -// std::cout << my_rank << ">> last_cell_level_proc(dest_proc) " << last_cell_level_proc(dest_proc) << std::endl; -// std::cout.flush();// TODO + std::cout << my_rank << " dest_proc " << dest_proc << std::endl; + std::cout << my_rank << ">> first_cell_level_proc(dest_proc) " << first_cell_level_proc(dest_proc) << std::endl; + std::cout << my_rank << ">> last_cell_level_proc(dest_proc) " << last_cell_level_proc(dest_proc) << std::endl; + std::cout.flush();// TODO NeighborDescriptor descriptor; descriptor.destProc = dest_proc; @@ -422,21 +433,21 @@ public: descriptor.nbParticlesToExchange = particles_offset_layers[my_nb_cell_levels] - particles_offset_layers[my_nb_cell_levels-nb_levels_to_send]; descriptor.isRecv = false; -// std::cout << my_rank << " SEND" << std::endl; -// std::cout << ">> descriptor.destProc " << descriptor.destProc << std::endl; -// std::cout << ">> descriptor.nbLevelsToExchange " << descriptor.nbLevelsToExchange << std::endl; -// std::cout << ">> descriptor.nbParticlesToExchange " << descriptor.nbParticlesToExchange << std::endl; -// std::cout << ">> descriptor.isRecv " << descriptor.isRecv << std::endl; -// std::cout << ">> neigDescriptors.size() " << neigDescriptors.size() << std::endl; -// std::cout.flush();// TODO + std::cout << my_rank << " SEND" << std::endl; + std::cout << ">> descriptor.destProc " << descriptor.destProc << std::endl; + std::cout << ">> descriptor.nbLevelsToExchange " << descriptor.nbLevelsToExchange << std::endl; + std::cout << ">> descriptor.nbParticlesToExchange " << descriptor.nbParticlesToExchange << std::endl; + std::cout << ">> descriptor.isRecv " << descriptor.isRecv << std::endl; + std::cout << ">> neigDescriptors.size() " << neigDescriptors.size() << std::endl; + std::cout.flush();// TODO neigDescriptors.emplace_back(std::move(descriptor)); dest_proc = (dest_proc+1)%nb_processes_involved; } -// std::cout << my_rank << " NO dest_proc " << dest_proc << std::endl; -// std::cout << my_rank << " NO first_cell_level_proc(dest_proc) " << first_cell_level_proc(dest_proc) << std::endl; -// std::cout.flush();// TODO + std::cout << my_rank << " NO dest_proc " << dest_proc << std::endl; + std::cout << my_rank << " NO first_cell_level_proc(dest_proc) " << first_cell_level_proc(dest_proc) << std::endl; + std::cout.flush();// TODO int src_proc = (my_rank-1+nb_processes_involved)%nb_processes_involved; while(src_proc != my_rank @@ -449,9 +460,9 @@ public: nb_levels_to_recv += 1; } -// std::cout << my_rank << " src_proc " << src_proc << std::endl; -// std::cout << my_rank << " first_cell_level_proc(src_proc) " << first_cell_level_proc(src_proc) << std::endl; -// std::cout.flush();// TODO + std::cout << my_rank << " src_proc " << src_proc << std::endl; + std::cout << my_rank << " first_cell_level_proc(src_proc) " << first_cell_level_proc(src_proc) << std::endl; + std::cout.flush();// TODO NeighborDescriptor descriptor; descriptor.destProc = src_proc; @@ -461,20 +472,20 @@ public: neigDescriptors.emplace_back(std::move(descriptor)); -// std::cout << my_rank << "] RECV" << std::endl; -// std::cout << ">> descriptor.destProc " << descriptor.destProc << std::endl; -// std::cout << ">> descriptor.nbLevelsToExchange " << descriptor.nbLevelsToExchange << std::endl; -// std::cout << ">> descriptor.nbParticlesToExchange " << descriptor.nbParticlesToExchange << std::endl; -// std::cout << ">> descriptor.nbParticlesToExchange " << descriptor.nbParticlesToExchange << std::endl; -// std::cout << ">> descriptor.isRecv " << descriptor.isRecv << std::endl; -// std::cout << ">> neigDescriptors.size() " << neigDescriptors.size() << std::endl; -// std::cout.flush();// TODO + std::cout << my_rank << "] RECV" << std::endl; + std::cout << ">> descriptor.destProc " << descriptor.destProc << std::endl; + std::cout << ">> descriptor.nbLevelsToExchange " << descriptor.nbLevelsToExchange << std::endl; + std::cout << ">> descriptor.nbParticlesToExchange " << descriptor.nbParticlesToExchange << std::endl; + std::cout << ">> descriptor.nbParticlesToExchange " << descriptor.nbParticlesToExchange << std::endl; + std::cout << ">> descriptor.isRecv " << descriptor.isRecv << std::endl; + std::cout << ">> neigDescriptors.size() " << neigDescriptors.size() << std::endl; + std::cout.flush();// TODO src_proc = (src_proc-1+nb_processes_involved)%nb_processes_involved; } -// std::cout << my_rank << " NO src_proc " << src_proc << std::endl; -// std::cout << my_rank << " NO first_cell_level_proc(src_proc) " << first_cell_level_proc(src_proc) << std::endl; -// std::cout.flush();// TODO + std::cout << my_rank << " NO src_proc " << src_proc << std::endl; + std::cout << my_rank << " NO first_cell_level_proc(src_proc) " << first_cell_level_proc(src_proc) << std::endl; + std::cout.flush();// TODO } ////////////////////////////////////////////////////////////////////// -- GitLab