From da9decdc5335ee5e8449162011dcd8b252ca722c Mon Sep 17 00:00:00 2001
From: Pietro Incardona <i-bird@private-incardon-3.mpi-cbg.de>
Date: Wed, 3 Aug 2016 16:26:56 +0200
Subject: [PATCH] Fixing for extprealloc

---
 install                    | 26 ++++++++++++++++++++++----
 src/Grid/grid_dist_id.hpp  | 11 +++++------
 src/Vector/vector_dist.hpp | 23 ++++-------------------
 3 files changed, 31 insertions(+), 29 deletions(-)

diff --git a/install b/install
index 501786ca5..780317adf 100755
--- a/install
+++ b/install
@@ -216,6 +216,9 @@ fi
 if [ -d "$i_dir/HDF5" ]; then
     configure_options=" $configure_options --with-hdf5=$i_dir/HDF5/bin/h5pcc "
 fi
+if [ -d "$i_dir/LIBHILBERT" ]; then
+    configure_options=" $configure_options --with-libhilbert=$i_dir/LIBHILBERT "
+fi
 
 ### MPI
 
@@ -250,6 +253,7 @@ EIGEN_installed=0
 EIGEN_System_prv=1
 HDF5_installed=0
 HDF5_System_prv=1
+LIBHILBERT_installed=0
 conf_err=1
 
 if [ $install_req -eq 0 ]; then
@@ -309,6 +313,15 @@ else
             ./script/install_HDF5.sh $i_dir $ncore
             configure_options=" $configure_options --with-hdf5=$i_dir/HDF5/bin/h5pcc "
             HDF5_installed=1
+        elif [ $conf_err -eq 210 ]; then
+            echo "LIBHILBERT not found try to install"
+            if [ $LIBHILBERT_installed -eq 1 ]; then
+                echo "Error the installation of LIBHILBERT failed"
+                exit 1
+            fi
+            ./script/install_LIBHILBERT.sh $i_dir $ncore
+            configure_options=" $configure_options --with-libhilbert=$i_dir/LIBHILBERT "
+            LIBHILBERT_installed=1
         elif [ $conf_err -ne 0 ]; then
             echo "I do not know how to recover from this error"
             exit 1
@@ -333,10 +346,10 @@ fi
 
 ### Create example.mk
 install_base=$(cat install_dir)
-echo "INCLUDE_PATH=-I. -I$install_base/openfpm_numerics/include -I$install_base/openfpm_pdata/include/config -I$install_base/openfpm_pdata/include -I$install_base/openfpm_data/include -I$install_base/openfpm_vcluster/include -I$install_base/openfpm_io/include -I$install_base/openfpm_devices/include -I$i_dir/METIS/include -I$i_dir/PARMETIS/include -I$i_dir/BOOST/include -I$i_dir/HDF5/include $lin_alg_inc" > example.mk
-echo "LIBS_PATH= -L$install_base/openfpm_devices/lib -L$install_base/openfpm_pdata/lib  -L$install_base/openfpm_vcluster/lib -L$i_dir/METIS/lib -L$i_dir/PARMETIS/lib  -L$i_dir/BOOST/lib -L$i_dir/HDF5/lib $lin_alg_dir" >> example.mk
-echo "LIBS=-lvcluster -lofpm_pdata -lofpmmemory -lparmetis -lmetis -lboost_iostreams -lhdf5 $lin_alg_lib" >> example.mk
-echo "LIBS_SE2=-lvcluster -lofpmmemory_se2 -lparmetis -lmetis -lboost_iostreams -lhdf5 $lin_alg_lib" >> example.mk
+echo "INCLUDE_PATH=-I. -I$install_base/openfpm_numerics/include -I$install_base/openfpm_pdata/include/config -I$install_base/openfpm_pdata/include -I$install_base/openfpm_data/include -I$install_base/openfpm_vcluster/include -I$install_base/openfpm_io/include -I$install_base/openfpm_devices/include -I$i_dir/METIS/include -I$i_dir/PARMETIS/include -I$i_dir/BOOST/include -I$i_dir/HDF5/include -I$i_dir/LIBHILBERT/include  $lin_alg_inc" > example.mk
+echo "LIBS_PATH= -L$install_base/openfpm_devices/lib -L$install_base/openfpm_pdata/lib  -L$install_base/openfpm_vcluster/lib -L$i_dir/METIS/lib -L$i_dir/PARMETIS/lib  -L$i_dir/BOOST/lib -L$i_dir/HDF5/lib -L$i_dir/LIBHILBERT/lib  $lin_alg_dir" >> example.mk
+echo "LIBS=-lvcluster -lofpm_pdata -lofpmmemory -lparmetis -lmetis -lboost_iostreams -lhdf5 -llibhilbert  $lin_alg_lib" >> example.mk
+echo "LIBS_SE2=-lvcluster -lofpmmemory_se2 -lparmetis -lmetis -lboost_iostreams -lhdf5 -llibhilbert $lin_alg_lib" >> example.mk
 cp example.mk src/example.mk
 cp example.mk example/example.mk
 
@@ -396,6 +409,11 @@ if [ -d "$i_dir/HDF5" ]; then
   bash_library="$bash_library:$i_dir/HDF5/lib"
 fi
 
+if [ -d "$i_dir/LIBHILBERT" ]; then
+  installation_report="$installation_report \033[92;1mLibHilbert\033[0m Installed: \033[1m $i_dir/LIBHILBERT \033[0m\n"
+  bash_library="$bash_library:$i_dir/LIBHILBERT/lib"
+fi
+
 echo -e "$installation_report"
 
 echo ""
diff --git a/src/Grid/grid_dist_id.hpp b/src/Grid/grid_dist_id.hpp
index 54d187aae..b9d3df791 100644
--- a/src/Grid/grid_dist_id.hpp
+++ b/src/Grid/grid_dist_id.hpp
@@ -1270,9 +1270,7 @@ public:
 
 			void * pointer2 = prAlloc_prp.getPointerEnd();
 
-			v_cl.send(ig_box.get(i).prc,0,pointer/*sts.getMarkPointer(prAlloc_prp)*/,(char *)pointer2 - (char *)pointer /*sts.getMarkSize(prAlloc_prp)*/);
-
-//			pointer = prAlloc_prp.getPointerEnd();
+			v_cl.send(ig_box.get(i).prc,0,pointer,(char *)pointer2 - (char *)pointer);
 		}
 
 		// Calculate the total information to receive from each processors
@@ -1292,12 +1290,13 @@ public:
 			}
 		}
 
+		size_t tot_recv = ExtPreAlloc<Memory>::calculateMem(prp_recv);
+
 		//! Resize the receiving buffer
-		g_recv_prp_mem.resize(ExtPreAlloc<Memory>::calculateMem(prp_recv));
+		g_recv_prp_mem.resize(tot_recv);
 
 		// Create an object of preallocated memory for properties
-		ExtPreAlloc<Memory> & prRecv_prp = *(new ExtPreAlloc<Memory>(req,g_recv_prp_mem));
-
+		ExtPreAlloc<Memory> & prRecv_prp = *(new ExtPreAlloc<Memory>(tot_recv,g_recv_prp_mem));
 		prRecv_prp.incRef();
 
 		// queue the receives
diff --git a/src/Vector/vector_dist.hpp b/src/Vector/vector_dist.hpp
index 14e767238..eeb642f1e 100644
--- a/src/Vector/vector_dist.hpp
+++ b/src/Vector/vector_dist.hpp
@@ -756,21 +756,17 @@ private:
 	 *
 	 * \param size_byte_prp total size for the property buffer
 	 * \param size_byte_pos total size for the position buffer
-	 * \param pap_prp allocation sequence for the property buffer
-	 * \param pap_pos allocation sequence for the position buffer
 	 *
 	 */
-	template<typename prp_object> void calc_send_ghost_buf(size_t & size_byte_prp, size_t & size_byte_pos, std::vector<size_t> & pap_prp, std::vector<size_t> & pap_pos)
+	template<typename prp_object> void calc_send_ghost_buf(size_t & size_byte_prp, size_t & size_byte_pos)
 	{
 		// Calculate the total size required for the sending buffer
 		for (size_t i = 0; i < ghost_prc_sz.size(); i++)
 		{
 			size_t alloc_ele = openfpm::vector<prp_object, HeapMemory, typename memory_traits_lin<prp_object>::type, memory_traits_lin , openfpm::grow_policy_identity>::calculateMem(ghost_prc_sz.get(i), 0);
-			pap_prp.push_back(alloc_ele);
 			size_byte_prp += alloc_ele;
 
 			alloc_ele = openfpm::vector<Point<dim, St>, HeapMemory, typename memory_traits_lin<Point<dim, St>>::type, memory_traits_lin, openfpm::grow_policy_identity>::calculateMem(ghost_prc_sz.get(i), 0);
-			pap_pos.push_back(alloc_ele);
 			size_byte_pos += alloc_ele;
 		}
 	}
@@ -1137,11 +1133,7 @@ public:
 		size_t size_byte_prp = 0;
 		size_t size_byte_pos = 0;
 
-		// allocation patterns for property and position send buffer
-		std::vector<size_t> pap_prp;
-		std::vector<size_t> pap_pos;
-
-		calc_send_ghost_buf<prp_object>(size_byte_prp, size_byte_pos, pap_prp, pap_pos);
+		calc_send_ghost_buf<prp_object>(size_byte_prp, size_byte_pos);
 
 		// Create memory for the send buffer
 
@@ -1151,11 +1143,8 @@ public:
 
 		// Create and fill send buffer for particle properties
 
-////////////////////////////////////////////////
-		size_t req = ExtPreAlloc<Memory>::calculateMem(pap_prp);
+		ExtPreAlloc<Memory> * prAlloc_prp = new ExtPreAlloc<Memory>(size_byte_prp, g_prp_mem);
 
-		ExtPreAlloc<Memory> * prAlloc_prp = new ExtPreAlloc<Memory>(req, g_prp_mem);
-/////////////////////////////////////////////////
 		openfpm::vector<send_vector> g_send_prp;
 		fill_send_ghost_prp_buf<send_vector, prp_object, prp...>(g_send_prp, prAlloc_prp);
 
@@ -1165,11 +1154,7 @@ public:
 		openfpm::vector<send_pos_vector> g_pos_send;
 		if (opt != NO_POSITION)
 		{
-////////////////////////////////////////////////
-			size_t req1 = ExtPreAlloc<Memory>::calculateMem(pap_pos);
-
-			prAlloc_pos = new ExtPreAlloc<Memory>(req1, g_pos_mem);
-////////////////////////////////////////////////////////
+			prAlloc_pos = new ExtPreAlloc<Memory>(size_byte_pos, g_pos_mem);
 			fill_send_ghost_pos_buf(g_pos_send, prAlloc_pos);
 		}
 
-- 
GitLab