From 17d3a468641f14fcac1d4d5d005b4b4c9a4bc752 Mon Sep 17 00:00:00 2001 From: Pietro Incardona <incardon@mpi-cbg.de> Date: Sun, 9 Aug 2015 20:12:32 +0200 Subject: [PATCH] Fixing rounding error for sub-domain calculation --- src/.deps/pdata-main.Po | 27 +++++++++++---------- src/Decomposition/CartDecomposition.hpp | 32 +++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/.deps/pdata-main.Po b/src/.deps/pdata-main.Po index 9e9db061..8e5c0d40 100644 --- a/src/.deps/pdata-main.Po +++ b/src/.deps/pdata-main.Po @@ -1309,6 +1309,11 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \ ../../OpenFPM_vcluster/src/MPI_wrapper/MPI_IallreduceW.hpp \ ../../OpenFPM_vcluster/src/MPI_wrapper/MPI_IrecvW.hpp \ ../../OpenFPM_vcluster/src/MPI_wrapper/MPI_IsendW.hpp \ + ../../OpenFPM_data/src/util/check_no_pointers.hpp \ + ../../OpenFPM_data/src/util/common.hpp \ + ../../OpenFPM_data/src/util/util_debug.hpp \ + /usr/include/c++/4.9.2/cxxabi.h \ + /usr/include/c++/4.9.2/x86_64-redhat-linux/bits/cxxabi_tweaks.h \ ../../OpenFPM_vcluster/src/util/Vcluster_log.hpp \ ../../OpenFPM_data/src/timer.hpp \ ../../OpenFPM_data/src/Space/SpaceBox.hpp \ @@ -1322,10 +1327,7 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \ ../../OpenFPM_data/src/util/object_util.hpp \ ../../OpenFPM_data/src/util/object_creator.hpp \ ../../OpenFPM_data/src/util/util_debug.hpp \ - /usr/include/c++/4.9.2/cxxabi.h \ - /usr/include/c++/4.9.2/x86_64-redhat-linux/bits/cxxabi_tweaks.h \ ../../OpenFPM_data/src/util/check_no_pointers.hpp \ - ../../OpenFPM_data/src/util/common.hpp \ ../../OpenFPM_data/src/util/object_s_di.hpp \ ../../OpenFPM_data/src/util/object_si_d.hpp \ ../../OpenFPM_devices/src/memory/ExtPreAlloc.hpp \ @@ -1400,7 +1402,6 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \ ../../OpenFPM_vcluster/src/Packer.hpp \ ../../OpenFPM_data/src/Grid/util.hpp \ ../../OpenFPM_data/src/Vector/util.hpp \ - ../../OpenFPM_data/src/util/util_debug.hpp \ ../../OpenFPM_vcluster/src/Pack_stat.hpp \ ../../OpenFPM_vcluster/src/Pack_selector.hpp \ ../../OpenFPM_vcluster/src/Unpacker.hpp \ @@ -4323,6 +4324,16 @@ Grid/grid_dist_id.hpp: ../../OpenFPM_vcluster/src/MPI_wrapper/MPI_IsendW.hpp: +../../OpenFPM_data/src/util/check_no_pointers.hpp: + +../../OpenFPM_data/src/util/common.hpp: + +../../OpenFPM_data/src/util/util_debug.hpp: + +/usr/include/c++/4.9.2/cxxabi.h: + +/usr/include/c++/4.9.2/x86_64-redhat-linux/bits/cxxabi_tweaks.h: + ../../OpenFPM_vcluster/src/util/Vcluster_log.hpp: ../../OpenFPM_data/src/timer.hpp: @@ -4351,14 +4362,8 @@ Grid/grid_dist_key.hpp: ../../OpenFPM_data/src/util/util_debug.hpp: -/usr/include/c++/4.9.2/cxxabi.h: - -/usr/include/c++/4.9.2/x86_64-redhat-linux/bits/cxxabi_tweaks.h: - ../../OpenFPM_data/src/util/check_no_pointers.hpp: -../../OpenFPM_data/src/util/common.hpp: - ../../OpenFPM_data/src/util/object_s_di.hpp: ../../OpenFPM_data/src/util/object_si_d.hpp: @@ -4507,8 +4512,6 @@ Grid/grid_dist_key.hpp: ../../OpenFPM_data/src/Vector/util.hpp: -../../OpenFPM_data/src/util/util_debug.hpp: - ../../OpenFPM_vcluster/src/Pack_stat.hpp: ../../OpenFPM_vcluster/src/Pack_selector.hpp: diff --git a/src/Decomposition/CartDecomposition.hpp b/src/Decomposition/CartDecomposition.hpp index e35d3f69..fba3abea 100644 --- a/src/Decomposition/CartDecomposition.hpp +++ b/src/Decomposition/CartDecomposition.hpp @@ -335,10 +335,24 @@ private: // Initialize ss_box and bbox if (loc_box.size() >= 0) { - SpaceBox<dim,T> sub_d(loc_box.get(0)); + SpaceBox<dim,size_t> sub_dc = loc_box.get(0); + SpaceBox<dim,T> sub_d(sub_dc); sub_d.mul(spacing); sub_d.expand(spacing); + // Fixing sub-domains to cover all the domain + + // Fixing sub_d + // if (loc_box) is a the boundary we have to ensure that the box span the full + // domain (avoiding rounding off error) + for (size_t i = 0 ; i < dim ; i++) + { + if (sub_dc.getHigh(i) == cd.getGrid().size(i) - 1) + { + sub_d.setHigh(i,domain.getHigh(i)); + } + } + // add the sub-domain sub_domains.add(sub_d); @@ -349,12 +363,26 @@ private: // convert into sub-domain for (size_t s = 1 ; s < loc_box.size() ; s++) { - SpaceBox<dim,T> sub_d(loc_box.get(s)); + SpaceBox<dim,size_t> sub_dc = loc_box.get(s); + SpaceBox<dim,T> sub_d(sub_dc); // re-scale and add spacing (the end is the starting point of the next domain + spacing) sub_d.mul(spacing); sub_d.expand(spacing); + // Fixing sub-domains to cover all the domain + + // Fixing sub_d + // if (loc_box) is a the boundary we have to ensure that the box span the full + // domain (avoiding rounding off error) + for (size_t i = 0 ; i < dim ; i++) + { + if (sub_dc.getHigh(i) == cd.getGrid().size(i) - 1) + { + sub_d.setHigh(i,domain.getHigh(i)); + } + } + // add the sub-domain sub_domains.add(sub_d); -- GitLab