From b2aa10f71bc8acf92f127fde92adeb613578eb79 Mon Sep 17 00:00:00 2001
From: Incardona Pietro <incardon@mpi-cbg.de>
Date: Mon, 19 Jul 2021 14:22:11 +0200
Subject: [PATCH] Fixing SparseGrid with vector

---
 openfpm_data                         |  2 +-
 src/Amr/grid_dist_amr.hpp            | 12 ++++++------
 src/Amr/grid_dist_amr_unit_tests.cpp | 12 ++++++++++--
 3 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/openfpm_data b/openfpm_data
index d78de3919..fff636ed0 160000
--- a/openfpm_data
+++ b/openfpm_data
@@ -1 +1 @@
-Subproject commit d78de3919144686d1e88a2c46a88ad3fa2a79043
+Subproject commit fff636ed0b30106e0084608c9e7aa6034a2d63c1
diff --git a/src/Amr/grid_dist_amr.hpp b/src/Amr/grid_dist_amr.hpp
index 7c171bdc4..8fd296450 100644
--- a/src/Amr/grid_dist_amr.hpp
+++ b/src/Amr/grid_dist_amr.hpp
@@ -574,7 +574,7 @@ public:
 	 * \return the selected element
 	 *
 	 */
-	template <unsigned int p>inline auto get(const grid_dist_amr_key<dim> & v1) const -> typename std::add_lvalue_reference<decltype(gd_array.get(v1.getLvl()).template get<p>(v1.getKey()))>::type
+	template <unsigned int p>inline auto get(const grid_dist_amr_key<dim> & v1) const -> decltype(gd_array.get(v1.getLvl()).template get<p>(v1.getKey()))
 	{
 #ifdef SE_CLASS2
 		check_valid(this,8);
@@ -590,7 +590,7 @@ public:
 	 * \return the selected element
 	 *
 	 */
-	template <unsigned int p>inline auto get(const grid_dist_amr_key<dim> & v1) -> typename std::add_lvalue_reference<decltype(gd_array.get(v1.getLvl()).template get<p>(v1.getKey()))>::type
+	template <unsigned int p>inline auto get(const grid_dist_amr_key<dim> & v1) -> decltype(gd_array.get(v1.getLvl()).template get<p>(v1.getKey()))
 	{
 #ifdef SE_CLASS2
 		check_valid(this,8);
@@ -607,7 +607,7 @@ public:
 	 * \return the selected element
 	 *
 	 */
-	template <unsigned int p>inline auto get(size_t lvl, const grid_dist_key_dx<dim> & v1) const -> typename std::add_lvalue_reference<decltype(gd_array.get(lvl).template get<p>(v1))>::type
+	template <unsigned int p>inline auto get(size_t lvl, const grid_dist_key_dx<dim> & v1) const -> decltype(gd_array.get(lvl).template get<p>(v1))
 	{
 #ifdef SE_CLASS2
 		check_valid(this,8);
@@ -623,7 +623,7 @@ public:
 	 * \return the selected element
 	 *
 	 */
-	template <unsigned int p>inline auto get(size_t lvl, const grid_dist_key_dx<dim> & v1) -> typename std::add_lvalue_reference<decltype(gd_array.get(lvl).template get<p>(v1))>::type
+	template <unsigned int p>inline auto get(size_t lvl, const grid_dist_key_dx<dim> & v1) -> decltype(gd_array.get(lvl).template get<p>(v1))
 	{
 #ifdef SE_CLASS2
 		check_valid(this,8);
@@ -644,7 +644,7 @@ public:
 	 */
 	template <unsigned int p>
 	inline auto insert(const grid_dist_amr_key<dim> & v1)
-	-> typename std::add_lvalue_reference<decltype(gd_array.get(v1.getLvl()).template insert<p>(v1.getKey()))>::type
+	-> decltype(gd_array.get(v1.getLvl()).template insert<p>(v1.getKey()))
 	{
 #ifdef SE_CLASS2
 		check_valid(this,8);
@@ -663,7 +663,7 @@ public:
 	 *
 	 */
 	template <unsigned int p>inline auto insert(size_t lvl, const grid_dist_key_dx<dim> & v1)
-	-> typename std::add_lvalue_reference<decltype(gd_array.get(lvl).template insert<p>(v1))>::type
+	-> decltype(gd_array.get(lvl).template insert<p>(v1))
 	{
 #ifdef SE_CLASS2
 		check_valid(this,8);
diff --git a/src/Amr/grid_dist_amr_unit_tests.cpp b/src/Amr/grid_dist_amr_unit_tests.cpp
index 96e07f01d..69b36180b 100644
--- a/src/Amr/grid_dist_amr_unit_tests.cpp
+++ b/src/Amr/grid_dist_amr_unit_tests.cpp
@@ -56,6 +56,14 @@ void Test3D_amr_create_levels(grid_amr & amr_g, Box<3,float> & domain, size_t co
 
 			amr_g.template insert<0>(akey) = 3.0;
 
+			amr_g.template insert<1>(akey)[0] = 3.0;
+			amr_g.template insert<1>(akey)[1] = 3.0;
+			amr_g.template insert<1>(akey)[2] = 3.0;
+
+			amr_g.template insert<2>(akey)[0] = 3;
+			amr_g.template insert<2>(akey)[1] = 3;
+			amr_g.template insert<2>(akey)[2] = 3;
+
 			count++;
 
 			++it;
@@ -831,11 +839,11 @@ BOOST_AUTO_TEST_CASE( grid_dist_amr_test )
 	k = std::pow(k, 1/3.);
 
 	Ghost<3,long int> g(0);
-	grid_dist_amr<3,float,aggregate<float>> amr_g(domain3,g);
+	grid_dist_amr<3,float,aggregate<float,float[3],int[3]>> amr_g(domain3,g);
 
 	Test3D_amr_create_levels(amr_g,domain3,k,4);
 
-	sgrid_dist_amr<3,float,aggregate<float>> amr_g2(domain3,g);
+	sgrid_dist_amr<3,float,aggregate<float,float[3],int[3]>> amr_g2(domain3,g);
 
 	Test3D_amr_create_levels(amr_g2,domain3,k,4);
 }
-- 
GitLab