From 83b29794a29261bb5779a263aa81c66240f4e7df Mon Sep 17 00:00:00 2001
From: Pietro Incardona <incardon@mpi-cbg.de>
Date: Tue, 14 Jan 2020 16:25:22 +0100
Subject: [PATCH] MultiLevel branch

---
 src/Amr/grid_dist_amr.hpp                | 15 +++++++++
 src/Amr/tests/amr_base_gpu_unit_tests.cu | 39 ++++++++++++++++++++++++
 src/Grid/grid_dist_id.hpp                | 16 ++++++++++
 3 files changed, 70 insertions(+)

diff --git a/src/Amr/grid_dist_amr.hpp b/src/Amr/grid_dist_amr.hpp
index 56803c19b..8fc1f5363 100644
--- a/src/Amr/grid_dist_amr.hpp
+++ b/src/Amr/grid_dist_amr.hpp
@@ -718,6 +718,21 @@ public:
 		return gd_array.get(lvl).remove(v1);
 	}
 
+	/*! \brief construct level connections for padding particles
+	 *
+	 *
+	 *
+	 *
+	 */
+	void construct_level_connections()
+	{
+		for (int lvl = 0 ; lvl < gd_array.size() ; lvl++)
+		{
+			gd_array.get(lvl).construct_link(gd_array.get(lvl-1),gd_array.get(lvl+1));
+		}
+	}
+
+
 	//////////////////////////////////////
 
 	/*! \brief It synchronize the ghost parts
diff --git a/src/Amr/tests/amr_base_gpu_unit_tests.cu b/src/Amr/tests/amr_base_gpu_unit_tests.cu
index 267d9b182..81cac5687 100644
--- a/src/Amr/tests/amr_base_gpu_unit_tests.cu
+++ b/src/Amr/tests/amr_base_gpu_unit_tests.cu
@@ -191,4 +191,43 @@ BOOST_AUTO_TEST_CASE( grid_dist_id_amr_gpu )
 	BOOST_REQUIRE_EQUAL(count_c,correct_result_cell);*/
 }
 
+
+BOOST_AUTO_TEST_CASE( grid_dist_id_amr_gpu_link_test )
+{
+	auto & v_cl = create_vcluster();
+
+	// Domain
+	Box<2,float> domain({0.0,0.0},{1.0,1.0});
+
+	Ghost<2,long int> g(1);
+	sgrid_dist_amr_gpu<2,float,aggregate<float>> amr_g(domain,g);
+
+	size_t g_sz[2] = {17,17};
+
+	size_t n_lvl = 2;
+
+	amr_g.initLevels(n_lvl,g_sz);
+
+//	auto it = amr_g.getGridIteratorGPU(i);
+//	it.setGPUInsertBuffer(4);
+
+	/////////////////////////////////////////////////////////////
+
+	auto & lvl_zero = amr_g.getDistGrid(0).get_loc_grid(0);
+	auto & lvl_one = amr_g.getDistGrid(1).get_loc_grid(0);
+
+	grid_key_dx<2> k({8,8});
+	grid_key_dx<2> k2({16,16});
+
+	lvl_zero.insertFlush<0>(k) = 1.0;
+	lvl_one.insertFlush<0>(k2) = 5.0;
+
+	lvl_one.template hostToDevice<0>();
+	lvl_one.tagBoundaries(v_cl.getmgpuContext());
+
+	/////////////////////////////////////////////////////////////
+
+
+}
+
 BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/Grid/grid_dist_id.hpp b/src/Grid/grid_dist_id.hpp
index e3dcad616..a93bff527 100644
--- a/src/Grid/grid_dist_id.hpp
+++ b/src/Grid/grid_dist_id.hpp
@@ -80,6 +80,8 @@ template<unsigned int dim,
 		 typename device_grid=grid_cpu<dim,T> >
 class grid_dist_id : public grid_dist_id_comm<dim,St,T,Decomposition,Memory,device_grid>
 {
+	typedef grid_dist_id<dim,St,T,Decomposition,Memory,device_grid> self;
+
 	//! Domain
 	Box<dim,St> domain;
 
@@ -2587,6 +2589,20 @@ public:
 		{loc_grid.get(i).clear();}
 	}
 
+	/*! \brief construct link between levels
+	 *
+	 * \praram grid_up grid level up
+	 * \param grid_dw grid level down
+	 *
+	 */
+	void construct_link(self & grid_up, self & grid_dw)
+	{
+		for (int i = 0 ; i < loc_grid.size() ; i++)
+		{
+			loc_grid.get(i).construct_link(grid_up.get(i).grid_dw.get(i));
+		}
+	}
+
 	/*! \brief It move all the grid parts that do not belong to the local processor to the respective processor
 	 *
 	 */
-- 
GitLab