diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a70b45abe2f7bd9b20e4e347f42d811721b98c05
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,59 @@
+centos_build:
+  stage: build
+  tags:
+    - centos
+  artifacts:
+    paths:
+      - ./openfpm_io/build/src/io
+      - ./openfpm_io/test_data
+  script:
+    - ./build.sh $CI_PROJECT_DIR $CI_RUNNER_TAGS NO $CI_COMMIT_REF_NAME
+
+centos_run:
+  stage: test
+  tags:
+    - centos
+  dependencies:
+    - centos_build
+  script:
+    - ./run.sh $CI_PROJECT_DIR $CI_RUNNER_TAGS NO $CI_COMMIT_REF_NAME
+
+mac_build:
+  stage: build
+  tags:
+    - mac
+  artifacts:
+    paths:
+      - ./openfpm_io/build/src/io
+      - ./openfpm_io/test_data
+  script:
+    - ./build.sh $CI_PROJECT_DIR $CI_RUNNER_TAGS NO $CI_COMMIT_REF_NAME
+
+mac_run:
+  stage: test
+  tags:
+    - mac
+  dependencies:
+    - mac_build
+  script:
+    - ./run.sh $CI_PROJECT_DIR $CI_RUNNER_TAGS NO $CI_COMMIT_REF_NAME
+
+ubuntu_build:
+  stage: build
+  tags:
+    - ubuntu
+  artifacts:
+    paths:
+      - ./openfpm_io/build/src/io
+      - ./openfpm_io/test_data
+  script:
+    - ./build.sh $CI_PROJECT_DIR $CI_RUNNER_EXECUTABLE_TAGS NO $CI_COMMIT_REF_NAME
+
+ubuntu_run:
+  stage: test
+  tags:
+    - ubuntu
+  dependencies:
+    - ubuntu_build
+  script:
+    - ./run.sh $CI_PROJECT_DIR $CI_RUNNER_TAGS NO $CI_COMMIT_REF_NAME
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a1e70a435d5c07ced0da3fbaa704f56a6b110333..d2530cc7992bbdba69149f6d619e3fb5e80ed9b0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,9 @@
 cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
 project(openfpm_pdata LANGUAGES C CXX)
 
+if (POLICY CMP0074)
+        cmake_policy(SET CMP0074 OLD)
+endif ()
 
 list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake_modules/)
 
@@ -38,11 +41,10 @@ if(ENABLE_GPU)
                 set(WARNING_SUPPRESSION_AND_OPTION_NVCC  -Xcudafe "--display_error_number --diag_suppress=611 --diag_suppress=2885 --diag_suppress=2886  --diag_suppress=2887  --diag_suppress=2888 --diag_suppress=186 --diag_suppress=111 " --expt-extended-lambda)
         elseif ( CUDA_VERSION_MAJOR EQUAL 10 AND CUDA_VERSION_MINOR EQUAL 1 )
                 message("CUDA is compatible")
-                set(WARNING_SUPPRESSION_AND_OPTION_NVCC  -Xcudafe "--display_error_number --diag_suppress=2915 --diag_suppress=2912 --diag_suppress=2913 --diag_suppress=111 --diag_suppress=186 --diag_suppress=611 --diag_suppress=2928 --diag_suppress=2931 --diag_suppress=2929 --diag_suppress=2930" --expt-extended-lambda)
+                set(WARNING_SUPPRESSION_AND_OPTION_NVCC  -Xcudafe "--display_error_number --diag_suppress=2915 --diag_suppress=2912 --diag_suppress=2913 --diag_suppress=111 --diag_suppress=186 --diag_suppress=611 " --expt-extended-lambda)
         elseif ( CUDA_VERSION_MAJOR EQUAL 10 AND CUDA_VERSION_MINOR EQUAL 2 )
                 message("CUDA is compatible")
-                set(WARNING_SUPPRESSION_AND_OPTION_NVCC  -Xcudafe "--display_error_number --diag_suppress=2976 --diag_suppress=2977 --diag_suppress=2978 --diag_suppress=2979 --diag_suppress=1835 --diag_suppress=611 --diag_suppress=186 --diag_suppress=128" --expt-extended-lambda)
-                set(WARNING_SUPPRESSION_AND_OPTION_NVCC_TEXT  "-Xcudafe \"--display_error_number --diag_suppress=2976 --diag_suppress=2977 --diag_suppress=2978 --diag_suppress=2979 --diag_suppress=1835 --diag_suppress=611 --diag_suppress=186 --diag_suppress=128\" --expt-extended-lambda")
+                set(WARNING_SUPPRESSION_AND_OPTION_NVCC  -Xcudafe "--display_error_number --diag_suppress=2977 --diag_suppress=2976 --diag_suppress=2979 --diag_suppress=186" --expt-extended-lambda)
         else()
                 message(FATAL_ERROR "CUDA is incompatible, version 9.2 10.1 and 10.2 is only supported")
         endif()
diff --git a/build.sh b/build.sh
index cc7256a86c889ffe07a5fad66cef3cc8f9c262ca..42e29835ecb0efe97e7022d018adc6f0e0697b8e 100755
--- a/build.sh
+++ b/build.sh
@@ -19,13 +19,19 @@ mv /tmp/openfpm_io openfpm_io
 
 git clone git@git.mpi-cbg.de:openfpm/openfpm_devices.git openfpm_devices
 cd openfpm_devices
+git checkout sparse_cl
 cd ..
 git clone git@git.mpi-cbg.de:openfpm/openfpm_data.git openfpm_data
 cd openfpm_data
+git checkout sparse_cl_broken
 cd ..
 git clone git@git.mpi-cbg.de:openfpm/openfpm_pdata.git openfpm_pdata
+cd openfpm_pdata
+git checkout sparse_cl
+cd ..
 git clone git@git.mpi-cbg.de:openfpm/openfpm_vcluster.git openfpm_vcluster
 cd openfpm_vcluster
+git checkout sparse_cl
 cd ..
 
 cd "$1/openfpm_io"
diff --git a/run.sh b/run.sh
index c820dd3c9fcbdaa34d4fa0974fb6a0b2b422c71e..0af9464b804cbfcf3cc08226342d8b99a0b009cd 100755
--- a/run.sh
+++ b/run.sh
@@ -5,15 +5,11 @@ branch=$3
 
 # Make a directory in /tmp/openfpm_data
 
-cd "$1/openfpm_io"
-
-if [ "$2" == "gin" ]
-then
- module load gcc/4.9.2
- module load boost/1.54.0
-fi
+cd "openfpm_io"
 
+echo "CHECKING MACHINE"
 if [ x"$hostname" == x"cifarm-centos-node.mpi-cbg.de"  ]; then
+	echo "CENTOS"
         export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$HOME/openfpm_dependencies/openfpm_io/$branch/HDF5/lib"
 	export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$HOME/openfpm_dependencies/openfpm_io/$branch/BOOST/lib"
 fi
@@ -24,14 +20,13 @@ if [ x"$hostname" == x"cifarm-ubuntu-node"  ]; then
 fi
 
 if [ x"$hostname" == x"cifarm-mac-node.mpi-cbg.de"  ]; then
+	echo "MACOS X"
         export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$HOME/openfpm_dependencies/openfpm_io/$branch/HDF5/lib"
 	export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$HOME/openfpm_dependencies/openfpm_io/$branch/BOOST/lib"
 fi
 
+pwd
+
 ./build/src/io
-if [ $? -ne 0 ]; then
-   curl -X POST --data "payload={\"icon_emoji\": \":jenkins:\", \"username\": \"jenkins\"  , \"attachments\":[{ \"title\":\"Error:\", \"color\": \"#FF0000\", \"text\":\"$2 failed to complete the openfpm_io test \" }] }" https://hooks.slack.com/services/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
-   exit 1 ; 
-fi
 
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index bc67057e72f0c06f6a37d183dfd6145e20b4b240..87dafed2448824d29b617e398601b3c855f883a6 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -24,6 +24,11 @@ endif()
 if (CUDA_FOUND)
 	target_compile_options(io PUBLIC $<$<COMPILE_LANGUAGE:CUDA>: ${WARNING_SUPPRESSION_AND_OPTION_NVCC} >)
 	target_include_directories (io PUBLIC ${MPI_C_INCLUDE_DIRS})
+
+   	if( CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0 )
+        	add_compile_options( "-fabi-version=6" )
+    	endif()
+
         if (TEST_COVERAGE)
                 target_compile_options(io PRIVATE $<$<COMPILE_LANGUAGE:CUDA>: -Xcompiler "-fprofile-arcs -ftest-coverage" >)
         endif()
diff --git a/src/CSVWriter/CSVWriter.hpp b/src/CSVWriter/CSVWriter.hpp
index c94fe63be918421bc34521e771d8286d57008dff..7d7617b22fffb320866943964f03f05650efe6f5 100644
--- a/src/CSVWriter/CSVWriter.hpp
+++ b/src/CSVWriter/CSVWriter.hpp
@@ -56,12 +56,12 @@ struct csv_prp
     template<typename T>
     void operator()(T& t)
     {
-		// This is the type of the csv column
-		typedef decltype(obj.template get<T::value>()) col_type;
+        // This is the type of the csv column
+        typedef typename boost::mpl::at<typename Tobj::type,T>::type col_type;
 
-		// Remove the reference from the column type
-		typedef typename boost::remove_reference<col_type>::type col_rtype;
-		typedef typename std::remove_all_extents<col_rtype>::type base_col_rtype;
+        // Remove the reference from the column type
+        typedef typename boost::remove_reference<col_type>::type col_rtype;
+        typedef typename std::remove_all_extents<col_rtype>::type base_col_rtype;
 
     	csv_value_str<col_rtype, is_csv_writable<base_col_rtype>::value >(obj.template get<T::value>(),str);
     }
diff --git a/src/GraphMLWriter/GraphMLWriter.hpp b/src/GraphMLWriter/GraphMLWriter.hpp
index b4f76c7737ee169c178d589f2f9f94ba321427ab..d34504e9220116119f086da98002418a606b61ed 100644
--- a/src/GraphMLWriter/GraphMLWriter.hpp
+++ b/src/GraphMLWriter/GraphMLWriter.hpp
@@ -125,17 +125,17 @@ struct vertex_prop
     		{cnt++; return ;}
 
     		// Create a property string based on the type of the property
-    		if (typeid(T) == typeid(float))
+    		if (std::is_same<T,float>::value)
     			v_prop += "<key id=\"vk" + std::to_string(cnt) + "\" for=\"node\" attr.name=\"" + attributes_names[cnt] + "\" attr.type=\"float\"/>\n";
-    		else if (typeid(T) == typeid(double))
+    		else if (std::is_same<T,double>::value)
     			v_prop += "<key id=\"vk" + std::to_string(cnt) + "\" for=\"node\" attr.name=\"" + attributes_names[cnt] + "\" attr.type=\"double\"/>\n";
-    		else if (typeid(T) == typeid(int))
+    		else if (std::is_same<T,int>::value)
     			v_prop += "<key id=\"vk" + std::to_string(cnt) + "\" for=\"node\" attr.name=\"" + attributes_names[cnt] + "\" attr.type=\"int\"/>\n";
-    		else if (typeid(T) == typeid(long int))
+    		else if (std::is_same<T,long int>::value)
     			v_prop += "<key id=\"vk" + std::to_string(cnt) + "\" for=\"node\" attr.name=\"" + attributes_names[cnt] + "\" attr.type=\"long\"/>\n";
-    		else if (typeid(T) == typeid(bool))
+    		else if (std::is_same<T,bool>::value)
     			v_prop += "<key id=\"vk" + std::to_string(cnt) + "\" for=\"node\" attr.name=\"" + attributes_names[cnt] + "\" attr.type=\"boolean\"/>\n";
-    		else if (typeid(T) == typeid(std::string))
+    		else if (std::is_same<T,std::string>::value)
     			v_prop += "<key id=\"vk" + std::to_string(cnt) + "\" for=\"node\" attr.name=\"" + attributes_names[cnt] + "\" attr.type=\"string\"/>\n";
     	}
 
@@ -278,18 +278,20 @@ struct vertex_node
     	//! Create an entry for the attribute
     	if (T::value < n_attr)
     	{
+    		typedef typename std::remove_reference<decltype(vo.template get<T::value>())>::type type_get;
+
     		// Create a property string based on the type of the property
-    		if (typeid(decltype(vo.template get<T::value>())) == typeid(float))
+    		if (std::is_same<type_get,float>::value)
     			v_node += "  <data key=\"vk" + std::to_string(cnt) + "\">" + std::to_string(vo.template get<T::value>()) + "</data>\n";
-    		else if (typeid(decltype(vo.template get<T::value>())) == typeid(double))
+    		else if (std::is_same<type_get,double>::value)
     			v_node += "  <data key=\"vk" + std::to_string(cnt) + "\">" + std::to_string(vo.template get<T::value>()) + "</data>\n";
-    		else if (typeid(decltype(vo.template get<T::value>())) == typeid(int))
+    		else if (std::is_same<type_get,int>::value )
     			v_node += "  <data key=\"vk" + std::to_string(cnt) + "\">" + std::to_string(vo.template get<T::value>()) + "</data>\n";
-    		else if (typeid(decltype(vo.template get<T::value>())) == typeid(long int))
+    		else if (std::is_same<type_get,long int>::value)
     			v_node += "  <data key=\"vk" + std::to_string(cnt) + "\">" + std::to_string(vo.template get<T::value>()) + "</data>\n";
-    		else if (typeid(decltype(vo.template get<T::value>())) == typeid(bool))
+    		else if (std::is_same<type_get,bool>::value)
     			v_node += "  <data key=\"vk" + std::to_string(cnt) + "\">" + std::to_string(vo.template get<T::value>()) + "</data>\n";
-    		else if (typeid(decltype(vo.template get<T::value>())) == typeid(std::string))
+    		else if (std::is_same<type_get,std::string>::value)
     			v_node += "  <data key=\"vk" + std::to_string(cnt) + "\">" + std::to_string(vo.template get<T::value>()) + "</data>\n";
     	}
 
@@ -379,17 +381,17 @@ struct edge_prop
     	if (cnt < n_attr)
     	{
     		// Create a property string based on the type of the property
-    		if (typeid(T) == typeid(float))
+    		if (std::is_same<T,float>::value)
     			e_prop += "<key id=\"ek" + std::to_string(cnt) + "\" for=\"edge\" attr.name=\"" + attributes_names[cnt] + "\" attr.type=\"float\"/>\n";
-    		else if (typeid(T) == typeid(double))
+    		else if (std::is_same<T,double>::value)
     			e_prop += "<key id=\"ek" + std::to_string(cnt) + "\" for=\"edge\" attr.name=\"" + attributes_names[cnt] + "\" attr.type=\"double\"/>\n";
-    		else if (typeid(T) == typeid(int))
+    		else if (std::is_same<T,int>::value)
     			e_prop += "<key id=\"ek" + std::to_string(cnt) + "\" for=\"edge\" attr.name=\"" + attributes_names[cnt] + "\" attr.type=\"int\"/>\n";
-    		else if (typeid(T) == typeid(long int))
+    		else if (std::is_same<T,long int>::value)
     			e_prop += "<key id=\"ek" + std::to_string(cnt) + "\" for=\"edge\" attr.name=\"" + attributes_names[cnt] + "\" attr.type=\"long\"/>\n";
-    		else if (typeid(T) == typeid(bool))
+    		else if (std::is_same<T,bool>::value)
     			e_prop += "<key id=\"ek" + std::to_string(cnt) + "\" for=\"edge\" attr.name=\"" + attributes_names[cnt] + "\" attr.type=\"boolean\"/>\n";
-    		else if (typeid(T) == typeid(std::string))
+    		else if (std::is_same<T,std::string>::value)
     			e_prop += "<key id=\"ek" + std::to_string(cnt) + "\" for=\"edge\" attr.name=\"" + attributes_names[cnt] + "\" attr.type=\"string\"/>\n";
     	}
 
@@ -510,18 +512,20 @@ struct edge_node
     	//! Create an entry for the attribute
     	if (T::value < n_attr)
     	{
+    		typedef typename std::remove_reference<decltype(vo.template get<T::value>())>::type type_get;
+
     		// Create a property string based on the type of the property
-    		if (typeid(decltype(vo.template get<T::value>())) == typeid(float))
+    		if (std::is_same<type_get,float>::value)
     			e_node += "  <data key=\"ek" + std::to_string(cnt) + "\">" + std::to_string(vo.template get<T::value>()) + "</data>\n";
-    		else if (typeid(decltype(vo.template get<T::value>())) == typeid(double))
+    		else if (std::is_same<type_get,double>::value)
     			e_node += "  <data key=\"ek" + std::to_string(cnt) + "\">" + std::to_string(vo.template get<T::value>()) + "</data>\n";
-    		else if (typeid(decltype(vo.template get<T::value>())) == typeid(int))
+    		else if (std::is_same<type_get,int>::value)
     			e_node += "  <data key=\"ek" + std::to_string(cnt) + "\">" + std::to_string(vo.template get<T::value>()) + "</data>\n";
-    		else if (typeid(decltype(vo.template get<T::value>())) == typeid(long int))
+    		else if (std::is_same<type_get,long int>::value)
     			e_node += "  <data key=\"ek" + std::to_string(cnt) + "\">" + std::to_string(vo.template get<T::value>()) + "</data>\n";
-    		else if (typeid(decltype(vo.template get<T::value>())) == typeid(bool))
+    		else if (std::is_same<type_get,bool>::value)
     			e_node += "  <data key=\"ek" + std::to_string(cnt) + "\">" + std::to_string(vo.template get<T::value>()) + "</data>\n";
-    		else if (typeid(decltype(vo.template get<T::value>())) == typeid(std::string))
+    		else if (std::is_same<type_get,std::string>::value)
     			e_node += "  <data key=\"ek" + std::to_string(cnt) + "\">" + std::to_string(vo.template get<T::value>()) + "</data>\n";
     	}
 
diff --git a/src/HDF5_wr/HDF5_writer.hpp b/src/HDF5_wr/HDF5_writer.hpp
index 95b686cf9a4867d49d3110dddfef79ba492670c1..d0c2b673ddaf6efaddc1efe063f9bebe92f3fefc 100644
--- a/src/HDF5_wr/HDF5_writer.hpp
+++ b/src/HDF5_wr/HDF5_writer.hpp
@@ -10,7 +10,7 @@
 
 
 #include "VCluster/VCluster.hpp"
-#include <hdf5.h>
+#include "hdf5.h"
 
 template <unsigned int type>
 class HDF5_writer
diff --git a/src/Plot/GoogleChart.hpp b/src/Plot/GoogleChart.hpp
index 136e7b228c4ae2c7d9412616079a209d346f2353..b35bab5476911010cf5eb4a9e712899df3d5e639 100644
--- a/src/Plot/GoogleChart.hpp
+++ b/src/Plot/GoogleChart.hpp
@@ -10,6 +10,7 @@
 
 #include <fstream>
 #include "Vector/map_vector.hpp"
+#include <cmath>
 
 #define GGRAPH_COLUMS 1
 #define GGRAPH_POINTS 2
@@ -153,6 +154,33 @@ const std::string saving_javascript = "function save(i)\n\
 										var e = document.getElementById('chart_')\n\
 										e.getElementsByTagName('svg')[0].parentNode.innerHTML";
 
+template<typename T>
+struct check_nan
+{
+	static bool check(const T & n)
+	{
+		return false;
+	}
+};
+
+template<>
+struct check_nan<float>
+{
+	static bool check(const float & n)
+	{
+		return std::isnan(n);
+	}
+};
+
+template<>
+struct check_nan<double>
+{
+	static bool check(const double & n)
+	{
+		return std::isnan(n);
+	}
+};
+
 /////////////////////////////////////////////////////////////////////
 
 /*! \brief Small class to produce graph with Google chart in HTML
@@ -186,12 +214,213 @@ const std::string saving_javascript = "function save(i)\n\
  */
 class GoogleChart
 {
+	template<typename arg_0, typename ... args>
+	struct get_value_type
+	{
+		typedef typename arg_0::value_type type;
+	};
+
 	//! set of graphs
 	openfpm::vector<GGraph> set_of_graphs;
 
 	//! set inject HTML;
 	openfpm::vector<std::string> injectHTML;
 
+	//! Data has holes
+	bool holes = false;
+
+	/*! \brief Recursively sort variadic template of vectors
+	 *
+	 * \param x vector with x
+	 * \param y vector with y
+	 * \param xy all the other vectors
+	 *
+	 */
+	template<typename X, typename ... Xs>
+	void recursive_sort(X & x,X & y,Xs& ... xy)
+	{
+		struct srt_xy
+		{
+			typename X::value_type x;
+			unsigned int id;
+
+			bool operator<(const srt_xy & tmp) const
+			{
+				return x < tmp.x;
+			}
+		};
+
+		openfpm::vector<srt_xy> reord;
+		X y_tmp;
+
+		reord.resize(x.size());
+		y_tmp.resize(x.size());
+
+		for (size_t i = 0 ; i < x.size() ; i++)
+		{
+			reord.get(i).x = x.get(i);
+			reord.get(i).id = i;
+		}
+
+		reord.sort();
+
+		// reorder x and y
+
+		for (size_t i = 0 ; i < x.size() ; i++)
+		{
+			x.get(i) = reord.get(i).x;
+			y_tmp.get(i) = y.get(reord.get(i).id);
+		}
+
+		y_tmp.swap(y);
+
+		// sort x
+
+		recursive_sort(xy ...);
+	}
+
+	//! terminator for recursive sort
+	void recursive_sort()
+	{}
+
+	/*! \brief Recursively sort variadic template of vectors
+	 *
+	 * \param counters indexes
+	 * \param x vector with x
+	 * \param y vector with y
+	 * \param xy all the other vectors
+	 *
+	 */
+	template<typename X, typename ... Xs>
+	bool isNext(size_t * counters,X & x,X & y,Xs& ... xy)
+	{
+		if (counters[0] < x.size())
+		{
+			return true;
+		}
+		return isNext(&counters[1],xy ...);
+	}
+
+	/*! \brief Recursively sort variadic template of vectors
+	 *
+	 * \param counters indexes
+	 *
+	 */
+	bool isNext(size_t * counters)
+	{
+		return false;
+	}
+
+
+	/*! \brief Recursively sort variadic template of vectors
+	 *
+	 * \param counters indexes
+	 * \param x vector with x
+	 * \param y vector with y
+	 * \param xy all the other vectors
+	 *
+	 */
+	template<typename T, typename X, typename ... Xs>
+	T get_low(size_t * counters,X & x,X & y,Xs& ... xy)
+	{
+		if (sizeof...(Xs) != 0)
+		{
+			T low1;
+			if (counters[0] >= x.size())
+			{low1 = std::numeric_limits<typename X::value_type>::infinity();}
+			else
+			{low1 = x.get(counters[0]);}
+
+			T low2 = get_low<T>(&counters[1],xy ...);
+			return (low1 < low2)?low1:low2;
+		}
+
+		if (counters[0] >= x.size())
+		{return std::numeric_limits<typename X::value_type>::infinity();}
+		return x.get(counters[0]);
+	}
+
+	/*! \brief Recursively sort variadic template of vectors
+	 *
+	 * \param counters indexes
+	 *
+	 */
+	template<typename T>
+	T get_low(size_t * counters)
+	{
+		return 0.0;
+	}
+
+	/*! \brief Recursively sort variadic template of vectors
+	 *
+	 * \param x vector with x
+	 * \param y vector with y
+	 * \param xy all the other vectors
+	 *
+	 */
+	template<typename X, typename ... Xs>
+	void get_point(typename X::value_type low,
+			   typename X::value_type * point,
+			   size_t * counters,
+			   X & x,
+			   X & y,
+			   Xs& ... xy)
+	{
+		if (low == x.get(counters[0]))
+		{
+			point[0] = y.get(counters[0]);
+			counters[0]++;
+		}
+		else
+		{
+			point[0] = std::numeric_limits<typename X::value_type>::quiet_NaN();
+		}
+
+		get_point(low,&point[1],&counters[1],xy...);
+	}
+
+	/*! \brief Recursively sort variadic template of vectors
+	 *
+	 * \param x vector with x
+	 * \param y vector with y
+	 * \param xy all the other vectors
+	 *
+	 */
+	template<typename T>
+	void get_point(T low,
+			   T * point,
+			   size_t * counters)
+	{
+		return;
+	}
+
+	/*! \brief Recursively sort variadic template of vectors
+	 *
+	 * \param x vector with x
+	 * \param y vector with y
+	 * \param xy all the other vectors
+	 *
+	 */
+	template<typename ... Xs>
+	bool get_v(typename get_value_type<Xs...>::type & x,
+			   typename get_value_type<Xs...>::type * point,
+			   size_t * counters,
+			   Xs& ... xy)
+	{
+		// if exist the next element
+		if (isNext(counters,xy...) == false)
+		{return false;}
+
+		// get lowest x
+		typename get_value_type<Xs...>::type low = get_low<typename get_value_type<Xs...>::type>(counters,xy...);
+
+		x = low;
+
+		get_point(low,point,counters,xy...);
+
+		return true;
+	}
+
 	/*! \brief Given X and Y vector return the string representing the data section of the Google Chart
 	 *
 	 * \tparam X type for the X coordinates
@@ -215,7 +444,7 @@ class GoogleChart
 		// we require that the number of x elements are the same as y elements
 
 		if (x.size() != y.size())
-			std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " vector x and the vector y must have the same number of elements " << x.size() << "!=" << y.size() << "\n";
+		{std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " vector x and the vector y must have the same number of elements " << x.size() << "!=" << y.size() << "\n";}
 
 		// Google chart visualization
         data << "var data" << i << " = new google.visualization.DataTable();\n";
@@ -250,7 +479,17 @@ class GoogleChart
         				data << "["  << x.get(i);
         		}
         		else
-        			data << "," << y.get(i).get(j-1);
+        		{
+        			if (check_nan<typename Y::value_type>::check(y.get(i).get(j-1)) == false)
+        			{
+        				data << "," << y.get(i).get(j-1);
+        			}
+        			else
+        			{
+        				holes = true;
+        				data << "," << "null";
+        			}
+        		}
         	}
         	data << "],\n";
         }
@@ -351,6 +590,8 @@ class GoogleChart
 		of << "var options";
 		of << i;
 		of << "= {\n";
+		if (holes == true)
+		{of << "interpolateNulls : true,\n";}
 		of << opt;
 		of << "};\n";
 	}
@@ -513,16 +754,69 @@ public:
 		set_of_graphs.last().opt = opt;
 	}
 
+
 	/*! \brief Add lines graph
 	 *
-	 * \param y A vector of vectors of values. each vector is a graph of points
+	 * \param xy list of vectors like openfpm::vector<float> or openfpm::vector<double>. Suppose you have a dataset of points x1,y1
+	 *           and a dataset x2,y2 and you want to display all these points in one graph. Than you call this function with
+	 *           AddLines(x1,y1,x2,y2,opt)
 	 *
-	 * \param x Give a name or number to each x value, so can be a string or a number
+	 * \param opt Graph options
+	 *
+	 */
+	template<typename ... X> void AddLines(const openfpm::vector<std::string> & yn,
+										   const GCoptions & opt,
+										   X ... xy)
+	{
+		// first we sort the vectors
+		recursive_sort(xy ... );
+
+		size_t counters[sizeof...(X)];
+		memset(&counters,0,sizeof(counters));
+
+		typename get_value_type<X...>::type point[sizeof...(X)];
+		typename get_value_type<X...>::type xe;
+
+		openfpm::vector<typename get_value_type<X...>::type> x;
+
+		openfpm::vector<openfpm::vector<typename get_value_type<X...>::type>> y;
+
+
+		while (get_v(xe,point,counters,xy...))
+		{
+			y.add();
+			x.add(xe);
+
+			for (size_t i = 0 ; i < sizeof...(X)/2 ; i++)
+			{
+				y.last().add(point[i]);
+			}
+		}
+
+		AddLinesGraph(x,y,yn,opt);
+	}
+
+	/*! \brief Add lines graph
+	 *
+	 * If the x vector contain 0.0,0.1,0.2,0.3,0.4 and you want to draw two lines you specifying two y values for each of the x points
+	 * you create an openfpm::vector<openfpm::vector<float>> y such that
+	 *
+	 *  \verbatim
+                               ------  j  -------        |
+	   y.get(i).get(j) = 3.2   3.4    5.4    1.3    2.3  i
+	                     1.4   5.3    3.2    2.1    1.1  |
+
+	   \endverbatim
+	 *
+	 * \param y A vector of vectors of values. each vector contain the graph points, compared to AddLinesGraph the points are stored
+	 *
+	 *
+	 * \param x axis values
 	 *
 	 * \param opt Graph options
 	 *
 	 */
-	template<typename X, typename Y> void AddLines(openfpm::vector<X> & x, openfpm::vector<Y> & y , const GCoptions & opt)
+	template<typename X, typename Y> void AddLinesGraphT(openfpm::vector<X> & x, openfpm::vector<Y> & y , const GCoptions & opt)
 	{
 		openfpm::vector<std::string> yn;
 
@@ -568,6 +862,18 @@ public:
 
 	/*! \brief Add a simple lines graph
 	 *
+	 * If the x vector contain 0.0,0.1,0.2,0.3,0.4 and you want to draw two lines you specifying two y values for each of the x points
+	 * you create an openfpm::vector<openfpm::vector<float>> y such that
+	 *
+	 *  \verbatim
+                         --  j  --
+	   y.get(i).get(j) = 3.2   3.4
+	                     1.4   5.3 |
+	                     5.4   3.2 i
+	                     1.3   2.2 |
+                         2.3   1.1
+	   \endverbatim
+	 *
 	 * \param y A vector of vectors of values. The size of y indicate how many x values
 	 *          we have, while the internal vector can store multiple value of the same point,
 	 *          for example error bar
diff --git a/src/Plot/Plot_unit_tests.hpp b/src/Plot/Plot_unit_tests.hpp
index ddb4350e5dce1fdc39abf6a7ba198951906b1a2a..37a742f4dfde5ab96a73c051099fa06b3d06283e 100644
--- a/src/Plot/Plot_unit_tests.hpp
+++ b/src/Plot/Plot_unit_tests.hpp
@@ -124,7 +124,7 @@ BOOST_AUTO_TEST_CASE( google_chart )
 
 	//! [Producing an Histogram graph]
 
-	bool test = compare("gc_out.html","gc_out_test.html");
+	bool test = compare("gc_out.html","test_data/gc_out_test.html");
 	BOOST_REQUIRE_EQUAL(true,test);
 }
 
@@ -173,7 +173,7 @@ BOOST_AUTO_TEST_CASE( google_chart2 )
 	cg.AddHistGraph(x,y,yn,options);
 	cg.write("gc_out2.html");
 
-	bool test = compare("gc_out2.html","gc_out2_test.html");
+	bool test = compare("gc_out2.html","test_data/gc_out2_test.html");
 	BOOST_REQUIRE_EQUAL(true,test);
 }
 
@@ -221,7 +221,7 @@ BOOST_AUTO_TEST_CASE( google_chart3 )
 	cg.AddHistGraph(x,y,yn,options);
 	cg.write("gc_out3.html");
 
-	bool test = compare("gc_out3.html","gc_out3_test.html");
+	bool test = compare("gc_out3.html","test_data/gc_out3_test.html");
 	BOOST_REQUIRE_EQUAL(true,test);
 }
 
@@ -262,7 +262,7 @@ BOOST_AUTO_TEST_CASE( google_chart4 )
 	cg.AddHistGraph(x,y,yn);
 	cg.write("gc_out4.html");
 
-	bool test = compare("gc_out4.html","gc_out4_test.html");
+	bool test = compare("gc_out4.html","test_data/gc_out4_test.html");
 	BOOST_REQUIRE_EQUAL(true,test);
 }
 
@@ -295,7 +295,7 @@ BOOST_AUTO_TEST_CASE( google_chart5 )
 	cg.AddHistGraph(x,y);
 	cg.write("gc_out5.html");
 
-	bool test = compare("gc_out5.html","gc_out5_test.html");
+	bool test = compare("gc_out5.html","test_data/gc_out5_test.html");
 	BOOST_REQUIRE_EQUAL(true,test);
 }
 
@@ -320,7 +320,7 @@ BOOST_AUTO_TEST_CASE( google_chart6 )
 	cg.AddHistGraph(y);
 	cg.write("gc_out6.html");
 
-	bool test = compare("gc_out6.html","gc_out6_test.html");
+	bool test = compare("gc_out6.html","test_data/gc_out6_test.html");
 	BOOST_REQUIRE_EQUAL(true,test);
 }
 
@@ -383,7 +383,127 @@ BOOST_AUTO_TEST_CASE( google_chart_with_inject_HTML )
 
 	//! [Producing a set of histograms graphs]
 
-	bool test = compare("gc_out7.html","gc_out7_test.html");
+	bool test = compare("gc_out7.html","test_data/gc_out7_test.html");
+	BOOST_REQUIRE_EQUAL(true,test);
+}
+
+BOOST_AUTO_TEST_CASE( google_chart_number )
+{
+	Vcluster<> & v_cl = create_vcluster();
+
+	if (v_cl.getProcessUnitID() != 0)
+		return;
+
+	//! [Producing a set of histograms graphs]
+
+	openfpm::vector<float> x;
+	openfpm::vector<openfpm::vector<size_t>> y;
+	openfpm::vector<std::string> yn;
+
+	x.add(0.1);
+	x.add(0.2);
+	x.add(0.3);
+	x.add(0.4);
+	x.add(0.5);
+	x.add(0.6);
+
+	// Each colum can have multiple data set (in this case 4 dataset)
+	// Each dataset can have a name
+	yn.add("dataset1");
+	yn.add("dataset2");
+	yn.add("dataset3");
+	yn.add("dataset4");
+
+	// Each colums can have multiple data-set
+	y.add({2,3,5,6});
+	y.add({5,6,1,6});
+	y.add({2,1,6,9});
+	y.add({1,6,3,2});
+	y.add({3,3,0,6});
+	y.add({2,1,4,6});
+
+	// Google charts options
+	GCoptions options;
+
+	options.title = std::string("Example");
+	options.yAxis = std::string("Y Axis");
+	options.xAxis = std::string("X Axis");
+	options.stype = std::string("line");
+
+	GoogleChart cg;
+	//
+	cg.AddLinesGraph(x,y,yn,options);
+	cg.write("gc_num_plot.html");
+
+	//! [Producing a set of histograms graphs]
+
+	bool test = compare("gc_num_plot.html","test_data/gc_num_plot_test.html");
+	BOOST_REQUIRE_EQUAL(true,test);
+}
+
+BOOST_AUTO_TEST_CASE( google_chart_number_lines_different_x )
+{
+	Vcluster<> & v_cl = create_vcluster();
+
+	if (v_cl.getProcessUnitID() != 0)
+		return;
+
+	//! [Producing a set of histograms graphs]
+
+	openfpm::vector<float> x1;
+	openfpm::vector<float> y1;
+	openfpm::vector<float> x2;
+	openfpm::vector<float> y2;
+	openfpm::vector<float> x3;
+	openfpm::vector<float> y3;
+	openfpm::vector<std::string> yn;
+
+	x1.add(0.1); y1.add(4.5);
+	x1.add(0.2); y1.add(3.0);
+	x1.add(0.3); y1.add(5.5);
+	x1.add(0.4); y1.add(3.3);
+	x1.add(0.5); y1.add(1.0);
+	x1.add(0.6); y1.add(7.0);
+
+	x2.add(0.15); y2.add(1.5);
+	x2.add(0.2); y2.add(4.5);
+	x2.add(0.35); y2.add(2.5);
+	x2.add(0.45); y2.add(6.5);
+
+	x3.add(0.1); y3.add(3.5);
+	x3.add(0.2); y3.add(6.5);
+	x3.add(0.63); y3.add(1.5);
+	x3.add(0.37); y3.add(1.5);
+	x3.add(0.7); y3.add(3.5);
+	x3.add(0.82); y3.add(2.5);
+	x3.add(0.4); y3.add(2.5);
+	x3.add(1.0); y3.add(1.5);
+	x3.add(0.5); y3.add(7.5);
+	x3.add(0.91); y3.add(5.5);
+
+	// Each colum can have multiple data set (in this case 4 dataset)
+	// Each dataset can have a name
+	yn.add("dataset1");
+	yn.add("dataset2");
+	yn.add("dataset3");
+
+
+	// Google charts options
+	GCoptions options;
+
+	options.title = std::string("Example");
+	options.yAxis = std::string("Y Axis");
+	options.xAxis = std::string("X Axis");
+	options.stype = std::string("line");
+
+	GoogleChart cg;
+
+	cg.AddLines(yn,options,x1,y1,x2,y2,x3,y3);
+	cg.write("gc_num_ydif_plot.html");
+
+	//! [Producing a set of histograms graphs]
+
+	bool test = compare("gc_num_ydif_plot.html","test_data/gc_num_ydif_plot_test.html");
 	BOOST_REQUIRE_EQUAL(true,test);
 }
 
@@ -450,7 +570,7 @@ BOOST_AUTO_TEST_CASE( google_chart_linear_plot )
 
 	//! [Producing lines graph with style]
 
-	bool test = compare("gc_plot_out.html","gc_plot_out_test.html");
+	bool test = compare("gc_plot_out.html","test_data/gc_plot_out_test.html");
 	BOOST_REQUIRE_EQUAL(true,test);
 }
 
@@ -499,7 +619,7 @@ BOOST_AUTO_TEST_CASE( google_chart_linear_plot2 )
 
 	//! [Producing lines]
 
-	bool test = compare("gc_plot2_out.html","gc_plot2_out_test.html");
+	bool test = compare("gc_plot2_out.html","test_data/gc_plot2_out_test.html");
 	BOOST_REQUIRE_EQUAL(true,test);
 }
 
diff --git a/src/VTKWriter/VTKWriter.hpp b/src/VTKWriter/VTKWriter.hpp
index d8fa3e328e45c5aa2358c101ed563d00d20ec8dc..16f5a1c9daa2c38aa6aaae6bb42cc4e11c39585e 100644
--- a/src/VTKWriter/VTKWriter.hpp
+++ b/src/VTKWriter/VTKWriter.hpp
@@ -24,27 +24,27 @@
 template <typename T> std::string getType()
 {
 	// Create a property string based on the type of the property
-	if (typeid(T) == typeid(float))
+	if (std::is_same<T,float>::value)
 		return "float";
-	else if (typeid(T) == typeid(double))
+	else if (std::is_same<T,double>::value)
 		return "double";
-	else if (typeid(T) == typeid(char))
+	else if (std::is_same<T,char>::value)
 		return "char";
-	else if (typeid(T) == typeid(unsigned char))
+	else if (std::is_same<T,unsigned char>::value)
 		return "unsigned_char";
-	else if (typeid(T) == typeid(short))
+	else if (std::is_same<T,short>::value)
 		return "short";
-	else if (typeid(T) == typeid(unsigned short))
+	else if (std::is_same<T,unsigned short>::value)
 		return "unsigned_short";
-	else if (typeid(T) == typeid(int))
+	else if (std::is_same<T,int>::value)
 		return "int";
-	else if (typeid(T) == typeid(unsigned int))
+	else if (std::is_same<T,unsigned int>::value)
 		return "unsigned_int";
-	else if (typeid(T) == typeid(long int))
+	else if (std::is_same<T,long int>::value)
 		return "int";
-	else if (typeid(T) == typeid(unsigned long int))
+	else if (std::is_same<T,unsigned long int>::value )
 		return "unsigned_int";
-	else if (typeid(T) == typeid(bool))
+	else if (std::is_same<T,bool>::value )
 		return "bit";
 
 	return "";
@@ -103,6 +103,7 @@ enum file_type
 #define VTK_WRITER 0x10000
 #define FORMAT_ASCII 0x0
 #define FORMAT_BINARY 0x10000000
+#define PRINT_GHOST 1
 
 template <typename Object, unsigned int imp>
 class VTKWriter
@@ -121,7 +122,6 @@ class VTKWriter
 #include "VTKWriter_dist_graph.hpp"
 #endif
 
-
 #include "VTKWriter_point_set.hpp"
 
 #endif /* VTKWRITER_HPP_ */
diff --git a/src/VTKWriter/VTKWriter_graph.hpp b/src/VTKWriter/VTKWriter_graph.hpp
index 18d4667808aea9f99c298d72dcadecb16bc78728..bb5be70cdf655d27b9a5913904e43f5ba80589fb 100644
--- a/src/VTKWriter/VTKWriter_graph.hpp
+++ b/src/VTKWriter/VTKWriter_graph.hpp
@@ -65,14 +65,13 @@ struct vtk_vertex_node_array_scalar_selector<true>
 	static inline void move(typename G::V_container &vo, s_type (&x)[3], bool &z_set)
 	{
 		if (G::V_type::attributes::name[T::value] != "x")
-			return;
+		{return;}
 
 		if (std::extent<ele_v>::value == 3)
-			z_set = true;
+		{z_set = true;}
 
 		for (size_t i = 0; i < std::extent<ele_v>::value; i++)
-			x[i] = convert<typename boost::remove_reference<decltype(vo.template get<T::value>()[i])>::type>::template to<s_type>(vo.template get<T::value>()[i]);
-
+		{x[i] = convert<typename boost::remove_reference<decltype(vo.template get<T::value>()[i])>::type>::template to<s_type>(vo.template get<T::value>()[i]);}
 	}
 };
 
diff --git a/src/VTKWriter/VTKWriter_grids.hpp b/src/VTKWriter/VTKWriter_grids.hpp
index 46059296bd512cab4ce3d72bd4458ae231b583dc..21c1848560b07903c3af325c309b9747ab3683bd 100644
--- a/src/VTKWriter/VTKWriter_grids.hpp
+++ b/src/VTKWriter/VTKWriter_grids.hpp
@@ -117,10 +117,36 @@ struct prop_out_g
 			// if there is the next element
 			while (it.isNext())
 			{
-				if (vg.get(k).dom.isInside(it.get().toPoint()) == true)
-					v_out += "1.0\n";
+				if (ft == file_type::ASCII)
+				{
+					if (vg.get(k).dom.isInside(it.get().toPoint()) == true)
+					{
+						float flag = 1.0;
+						flag += vg.get(k).g.getFlag(it.get()) * 2;
+						v_out += std::to_string(flag) + "\n";
+					}
+					else
+					{
+						float flag = 0.0;
+						flag += vg.get(k).g.getFlag(it.get()) * 2;
+						v_out += std::to_string(flag) + "\n";
+					}
+				}
 				else
-					v_out += "0.0\n";
+				{
+					if (vg.get(k).dom.isInside(it.get().toPoint()) == true)
+					{
+						float flag = 1.0;
+						flag = swap_endian_lt(flag);
+						v_out.append((const char *)&flag,sizeof(flag));
+					}
+					else
+					{
+						float flag = 0.0;
+						flag = swap_endian_lt(flag);
+						v_out.append((const char *)&flag,sizeof(flag));
+					}
+				}
 
 				// increment the iterator and counter
 				++it;
@@ -142,8 +168,8 @@ template <typename pair>
 class VTKWriter<pair,VECTOR_GRIDS>
 {
 	//! Vector of grids
-	openfpm::vector< ele_g<typename pair::first,typename pair::second> > vg;
 
+	openfpm::vector< ele_g<typename pair::first,typename pair::second> > vg;
 	/*! \brief Get the total number of points
 	 *
 	 * \return the total number
@@ -380,9 +406,9 @@ public:
 		prop_out_g< ele_g<typename pair::first,typename pair::second>, typename pair::second > pp(point_data, vg, prop_names, ft);
 
 		if (prp == -1)
-			boost::mpl::for_each< boost::mpl::range_c<int,0, pair::first::value_type::max_prop> >(pp);
+		{boost::mpl::for_each< boost::mpl::range_c<int,0, pair::first::value_type::max_prop> >(pp);}
 		else
-			boost::mpl::for_each< boost::mpl::range_c<int,prp, prp> >(pp);
+		{boost::mpl::for_each< boost::mpl::range_c<int,prp, prp> >(pp);}
 
 		// Add the last property
 		pp.lastProp();
diff --git a/src/VTKWriter/VTKWriter_grids_st.hpp b/src/VTKWriter/VTKWriter_grids_st.hpp
index 43b4167318ba3bdad75185e2a1523fb08706919f..b6b523a83e1f843f00aca92d44c541237e75f25d 100644
--- a/src/VTKWriter/VTKWriter_grids_st.hpp
+++ b/src/VTKWriter/VTKWriter_grids_st.hpp
@@ -371,7 +371,9 @@ class VTKWriter<pair,VECTOR_ST_GRIDS>
 		// if the type is not supported return
 		if (type.size() == 0)
 		{
+#ifndef DISABLE_ALL_RTTI
 			std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " the type " << demangle(typeid(ctype).name()) << " is not supported by vtk\n";
+#endif
 			return "";
 		}
 
diff --git a/src/VTKWriter/VTKWriter_grids_util.hpp b/src/VTKWriter/VTKWriter_grids_util.hpp
index 8adc6e2e7d4a7a2e76e90c69a44eb0d1f146ec59..2e05b26defb337db772b3d97514ec0dfd5abe41d 100644
--- a/src/VTKWriter/VTKWriter_grids_util.hpp
+++ b/src/VTKWriter/VTKWriter_grids_util.hpp
@@ -89,7 +89,9 @@ template<unsigned int i, typename ele_g, bool has_attributes> std::string get_po
 			// if the type is not supported skip-it
 			if (type.size() == 0)
 			{
+#ifndef DISABLE_ALL_RTTI
 				std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " the type " << demangle(typeid(ctype).name()) << " is not supported by vtk\n";
+#endif
 				return "";
 			}
 
@@ -200,17 +202,17 @@ public:
 	 */
 	template<typename vector, typename iterator, typename I> static void write(std::string & v_out, vector & vg, size_t k, iterator & it, file_type ft)
 	{
-		typedef decltype(vg.get(k).g.get_o(it.get()).template get<I::value>()) ctype_;
-		typedef typename std::remove_reference<ctype_>::type ctype;
+		typedef decltype(vg.get(k).g.template get<I::value>(it.get())) ctype_;
+		typedef typename std::remove_const<typename std::remove_reference<ctype_>::type>::type ctype;
 
 		if (ft == file_type::ASCII)
 		{
 			// Print the property
-			v_out += std::to_string(vg.get(k).g.get_o(it.get()).template get<I::value>()) + "\n";
+			v_out += std::to_string(vg.get(k).g.template get<I::value>(it.get())) + "\n";
 		}
 		else
 		{
-			typename is_vtk_writable<ctype>::base tmp = vg.get(k).g.get_o(it.get()).template get<I::value>();
+			typename is_vtk_writable<ctype>::base tmp = vg.get(k).g.template get<I::value>(it.get());
 			tmp = swap_endian_lt(tmp);
 			v_out.append((const char *)&tmp,sizeof(tmp));
 		}
@@ -309,10 +311,10 @@ struct meta_prop<I, ele_g,St,T[N1],is_writable>
 					{
 						// Print the properties
 						for (size_t i1 = 0 ; i1 < N1 ; i1++)
-						{v_out += std::to_string(vg.get(k).g.get_o(it.get()).template get<I::value>()[i1]) + " ";}
+						{v_out += std::to_string(vg.get(k).g.template get<I::value>(it.get())[i1]) + " ";}
 
 						if (N1 == 2)
-						{v_out += "0.0";}
+						{v_out += std::to_string((decltype(vg.get(k).g.template get<I::value>(it.get())[0])) 0);}
 
 						v_out += "\n";
 					}
@@ -323,7 +325,7 @@ struct meta_prop<I, ele_g,St,T[N1],is_writable>
 						// Print the properties
 						for (size_t i1 = 0 ; i1 < N1 ; i1++)
 						{
-							tmp = vg.get(k).g.get_o(it.get()).template get<I::value>()[i1];
+							tmp = vg.get(k).g.template get<I::value>(it.get())[i1];
 							tmp = swap_endian_lt(tmp);
 							v_out.append((const char *)&tmp,sizeof(T));
 						}
@@ -388,11 +390,11 @@ struct meta_prop<I, ele_g,St, T[N1][N2],is_writable>
 							if (ft == file_type::ASCII)
 							{
 								// Print the property
-								v_out += std::to_string(vg.get(k).g.get_o(it.get()).template get<I::value>()[i1][i2]) + "\n";
+								v_out += std::to_string(vg.get(k).g.template get<I::value>(it.get())[i1][i2]) + "\n";
 							}
 							else
 							{
-								tmp = vg.get(k).g.get_o(it.get()).template get<I::value>()[i1][i2];
+								tmp = vg.get(k).g.template get<I::value>(it.get())[i1][i2];
 								tmp = swap_endian_lt(tmp);
 								v_out.append((const char *)&tmp,sizeof(tmp));
 							}
diff --git a/src/util/GBoxes.hpp b/src/util/GBoxes.hpp
index 4f4304c454bb18d2c9c06a960b2c1ee5e66cbc42..8ece35653eded808bbf8aa4911b8f0bb30fafc85 100644
--- a/src/util/GBoxes.hpp
+++ b/src/util/GBoxes.hpp
@@ -45,6 +45,10 @@ struct GBoxes
 	//! origin of GDbox in global grid coordinates
 	Point<dim,long int> origin;
 
+	//! In case the grid is not defined everywhere but is defined by a set of boxes
+	//! indicate from which box it come from
+	size_t k;
+
 	/*! \brief Indicate that this structure has no pointers inside
 	 *
 	 * \return true
diff --git a/test_data/gc_num_plot_test.html b/test_data/gc_num_plot_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..455f7c46e1ee67ad0c4a5a38faad543bd4917c38
--- /dev/null
+++ b/test_data/gc_num_plot_test.html
@@ -0,0 +1,50 @@
+<html>
+  <head>
+    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
+	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
+    <script type="text/javascript">
+      google.charts.load('current', {'packages':['corechart']});
+      google.charts.setOnLoadCallback(drawVisualization);
+
+function exportToSVG(i)
+{
+var e = document.getElementById('chart_div'+i);
+var svg = e.getElementsByTagName('svg')[0].parentNode.innerHTML;
+var pos = svg.lastIndexOf("</svg>");
+pos += 6;
+svg = svg.substring(0,4)  + " xmlns='http://www.w3.org/2000/svg' xmlns:xlink= 'http://www.w3.org/1999/xlink' " + svg.substring(4,pos);
+svgData = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg);
+$(this).attr({'href': svgData,'target': '_blank'});
+}
+
+      function drawVisualization() {
+var data0 = new google.visualization.DataTable();
+data0.addColumn('number','X Axis');
+data0.addColumn('number','dataset1');
+data0.addColumn('number','dataset2');
+data0.addColumn('number','dataset3');
+data0.addColumn('number','dataset4');
+data0.addRows([
+[0.1,2,3,5,6],
+[0.2,5,6,1,6],
+[0.3,2,1,6,9],
+[0.4,1,6,3,2],
+[0.5,3,3,0,6],
+[0.6,2,1,4,6],
+]);
+var options0= {
+title : 'Example',
+vAxis: {title: 'Y Axis'},
+hAxis: {title: 'X Axis'},
+curveType: 'function',
+lineWidth: 4,
+intervals: { 'style':'area' }};
+$("#export_svg0").on("click", function (event) {exportToSVG.apply(this,[0]);});
+var chart = new google.visualization.ComboChart(document.getElementById('chart_div0'));
+chart.draw(data0, options0);
+}</script>
+</head>
+<body>
+<a href="#" download="graph1.svg" id="export_svg0"><button>Export data into svg</button></a><div id="chart_div0" style="width: 900px; height: 500px;"></div>
+</body>
+</html>
diff --git a/test_data/gc_num_ydif_plot_test.html b/test_data/gc_num_ydif_plot_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..0a54032227398f1544586ea733e28cf5c22cd276
--- /dev/null
+++ b/test_data/gc_num_ydif_plot_test.html
@@ -0,0 +1,59 @@
+<html>
+  <head>
+    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
+	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
+    <script type="text/javascript">
+      google.charts.load('current', {'packages':['corechart']});
+      google.charts.setOnLoadCallback(drawVisualization);
+
+function exportToSVG(i)
+{
+var e = document.getElementById('chart_div'+i);
+var svg = e.getElementsByTagName('svg')[0].parentNode.innerHTML;
+var pos = svg.lastIndexOf("</svg>");
+pos += 6;
+svg = svg.substring(0,4)  + " xmlns='http://www.w3.org/2000/svg' xmlns:xlink= 'http://www.w3.org/1999/xlink' " + svg.substring(4,pos);
+svgData = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg);
+$(this).attr({'href': svgData,'target': '_blank'});
+}
+
+      function drawVisualization() {
+var data0 = new google.visualization.DataTable();
+data0.addColumn('number','X Axis');
+data0.addColumn('number','dataset1');
+data0.addColumn('number','dataset2');
+data0.addColumn('number','dataset3');
+data0.addRows([
+[0.1,4.5,null,3.5],
+[0.15,null,1.5,null],
+[0.2,3,4.5,6.5],
+[0.3,5.5,null,null],
+[0.35,null,2.5,null],
+[0.37,null,null,1.5],
+[0.4,3.3,null,2.5],
+[0.45,null,6.5,null],
+[0.5,1,null,7.5],
+[0.6,7,null,null],
+[0.63,null,null,1.5],
+[0.7,null,null,3.5],
+[0.82,null,null,2.5],
+[0.91,null,null,5.5],
+[1,null,null,1.5],
+]);
+var options0= {
+interpolateNulls : true,
+title : 'Example',
+vAxis: {title: 'Y Axis'},
+hAxis: {title: 'X Axis'},
+curveType: 'function',
+lineWidth: 4,
+intervals: { 'style':'area' }};
+$("#export_svg0").on("click", function (event) {exportToSVG.apply(this,[0]);});
+var chart = new google.visualization.ComboChart(document.getElementById('chart_div0'));
+chart.draw(data0, options0);
+}</script>
+</head>
+<body>
+<a href="#" download="graph1.svg" id="export_svg0"><button>Export data into svg</button></a><div id="chart_div0" style="width: 900px; height: 500px;"></div>
+</body>
+</html>
diff --git a/gc_out2_test.html b/test_data/gc_out2_test.html
similarity index 100%
rename from gc_out2_test.html
rename to test_data/gc_out2_test.html
diff --git a/gc_out3_test.html b/test_data/gc_out3_test.html
similarity index 100%
rename from gc_out3_test.html
rename to test_data/gc_out3_test.html
diff --git a/gc_out4_test.html b/test_data/gc_out4_test.html
similarity index 100%
rename from gc_out4_test.html
rename to test_data/gc_out4_test.html
diff --git a/gc_out5_test.html b/test_data/gc_out5_test.html
similarity index 100%
rename from gc_out5_test.html
rename to test_data/gc_out5_test.html
diff --git a/gc_out6_test.html b/test_data/gc_out6_test.html
similarity index 100%
rename from gc_out6_test.html
rename to test_data/gc_out6_test.html
diff --git a/gc_out7_test.html b/test_data/gc_out7_test.html
similarity index 100%
rename from gc_out7_test.html
rename to test_data/gc_out7_test.html
diff --git a/gc_out_test.html b/test_data/gc_out_test.html
similarity index 100%
rename from gc_out_test.html
rename to test_data/gc_out_test.html
diff --git a/gc_plot2_out_test.html b/test_data/gc_plot2_out_test.html
similarity index 100%
rename from gc_plot2_out_test.html
rename to test_data/gc_plot2_out_test.html
diff --git a/gc_plot_out_test.html b/test_data/gc_plot_out_test.html
similarity index 100%
rename from gc_plot_out_test.html
rename to test_data/gc_plot_out_test.html
diff --git a/test_data/vtk_grids_prp_test.vtk b/test_data/vtk_grids_prp_test.vtk
index 600c2207429792f3c196a4c075e1c42e79dde1ee..f861b08723489bcc41f4c16cc5b792344b364fa9 100644
--- a/test_data/vtk_grids_prp_test.vtk
+++ b/test_data/vtk_grids_prp_test.vtk
@@ -6159,1027 +6159,1027 @@ LOOKUP_TABLE default
 1.000000
 SCALARS domain float
 LOOKUP_TABLE default
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
diff --git a/test_data/vtk_grids_test.vtk b/test_data/vtk_grids_test.vtk
index 5e292278af14dc4d2f5993d5492aa0e25e427016..bfb0de82b7e03a0f4f14026be4327f5d77beffc3 100644
--- a/test_data/vtk_grids_test.vtk
+++ b/test_data/vtk_grids_test.vtk
@@ -16418,1027 +16418,1027 @@ LOOKUP_TABLE default
 255.000000
 SCALARS domain float
 LOOKUP_TABLE default
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
diff --git a/test_data/vtk_grids_test_1d.vtk b/test_data/vtk_grids_test_1d.vtk
index 67aae8b5ba98195378710e35d6619f0847694e7f..76e6973b75c2f3fb6620405e1d1bf3997369840c 100644
--- a/test_data/vtk_grids_test_1d.vtk
+++ b/test_data/vtk_grids_test_1d.vtk
@@ -1058,67 +1058,67 @@ LOOKUP_TABLE default
 15.000000
 SCALARS domain float
 LOOKUP_TABLE default
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
-0.0
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000
+0.000000