diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000000000000000000000000000000000000..845eae4c6ae208384d911c88499fa82c92ac5921
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,51 @@
+#!groovy
+
+parallel (
+
+
+"nyu" : {node ('nyu')
+                  {
+                    deleteDir()
+                    checkout scm
+                    stage ('build_nyu')
+                    {
+                      sh "./build.sh $WORKSPACE $NODE_NAME"
+                    }
+
+                    stage ('run_nyu')
+                    {
+                      sh "cd openfpm_vcluster && ./run.sh $WORKSPACE $NODE_NAME 2"
+                      sh "cd openfpm_vcluster && ./run.sh $WORKSPACE $NODE_NAME 3"
+                      sh "cd openfpm_vcluster && ./run.sh $WORKSPACE $NODE_NAME 4"
+                      sh "cd openfpm_vcluster && ./run.sh $WORKSPACE $NODE_NAME 5"
+                    }
+                  }
+                 },
+
+
+
+
+"sb15" : {node ('sbalzarini-mac-15')
+                  {
+                    deleteDir()
+                    env.PATH = "/usr/local/bin:${env.PATH}"
+                    checkout scm
+                    stage ('build_sb15')
+                    {
+                      sh "./build.sh $WORKSPACE $NODE_NAME NO"
+                    }
+
+                    stage ('run_sb15')
+                    {
+                      sh "cd openfpm_vcluster && ./run.sh $WORKSPACE $NODE_NAME 2"
+                      sh "cd openfpm_vcluster && ./run.sh $WORKSPACE $NODE_NAME 3"
+                      sh "cd openfpm_vcluster && ./run.sh $WORKSPACE $NODE_NAME 4"
+                      sh "cd openfpm_vcluster && ./run.sh $WORKSPACE $NODE_NAME 5"
+                      sh "cd openfpm_vcluster && ./run.sh $WORKSPACE $NODE_NAME 6"
+                      sh "cd openfpm_vcluster && ./run.sh $WORKSPACE $NODE_NAME 7"
+                    }
+                  }
+                 }
+
+)
+
diff --git a/configure.ac b/configure.ac
index 552b31f3158221301e71bd4c772bc357fa688f8d..5fb4c03ae995bb84e8f17db3c1200a0dc35dc18d 100755
--- a/configure.ac
+++ b/configure.ac
@@ -159,6 +159,14 @@ AX_LIB_HILBERT([],[echo "Cannot detect libhilbert, use the --with-libhilbert opt
 
 INCLUDES_PATH+=" -I/usr/local/include -I. -I../../openfpm_devices/src -I../../openfpm_data/src -I../../openfpm_io/src -I../../openfpm_vcluster/src -I../../src"
 
+####### Detect OpenMP
+
+AX_OPENMP([CFLAGS="$OPENMP_CFLAGS"
+           LDFLAGS="$OPENMP_LDFLAGS"],[])
+
+AC_SUBST(OPENMP_CFLAGS)
+AC_SUBST(OPENMP_LDFLAGS)
+
 ###### Check for se-class1
 
 AC_MSG_CHECKING(whether to build with security enhancement class1)
diff --git a/run.sh b/run.sh
new file mode 100755
index 0000000000000000000000000000000000000000..00fd49ba09b02f9470f470d6caafe2d33353fac6
--- /dev/null
+++ b/run.sh
@@ -0,0 +1,14 @@
+#! /bin/bash
+
+echo "RUN numerics test"
+
+source $HOME/openfpm_vars
+
+mpirun -np $3 ./src/numerics
+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_numerics test \" }] }" https://hooks.slack.com/services/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
+   exit 1 ;
+fi
+
+curl -X POST --data "payload={\"icon_emoji\": \":jenkins:\", \"username\": \"jenkins\"  , \"attachments\":[{ \"title\":\"Info:\", \"color\": \"#00FF00\", \"text\":\"$2 completed succeffuly the openfpm_numerics test \" }] }" https://hooks.slack.com/services/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
+
diff --git a/src/FiniteDifference/Average.hpp b/src/FiniteDifference/Average.hpp
index 8e92b279e85a5f1071675bb1bae0e0f7da66667a..45867c6c7f0ea9ff238d9033c9d4af82eb747734 100644
--- a/src/FiniteDifference/Average.hpp
+++ b/src/FiniteDifference/Average.hpp
@@ -45,7 +45,7 @@ class Avg
 	 * In case of non staggered case this function just return a null grid_key, in case of staggered,
 	 *  it calculate how the operator shift the calculation in the cell
 	 *
-	 * \param position where we are calculating the derivative
+	 * \param pos position where we are calculating the derivative
 	 * \param gs Grid info
 	 * \param s_pos staggered position of the properties
 	 *
@@ -77,7 +77,7 @@ class Avg<d,arg,Sys_eqs,CENTRAL>
 	 * conditions it is a distributed map
 	 *
 	 * \param g_map It is the map explained in FDScheme
-	 * \param k_map position where the average is calculated
+	 * \param kmap position where the average is calculated
 	 * \param gs Grid info
 	 * \param cols non-zero colums calculated by the function
 	 * \param coeff coefficent (constant in front of the derivative)
@@ -113,7 +113,7 @@ class Avg<d,arg,Sys_eqs,CENTRAL>
 	 *
 	 * It follow the same concept of central derivative
 	 *
-	 * \param position where we are calculating the derivative
+	 * \param pos position where we are calculating the derivative
 	 * \param gs Grid info
 	 * \param s_pos staggered position of the properties
 	 *
@@ -160,7 +160,7 @@ class Avg<d,arg,Sys_eqs,FORWARD>
 	 * conditions it is a distributed map
 	 *
 	 * \param g_map It is the map explained in FDScheme
-	 * \param k_map position where the average is calculated
+	 * \param kmap position where the average is calculated
 	 * \param gs Grid info
 	 * \param cols non-zero colums calculated by the function
 	 * \param coeff coefficent (constant in front of the derivative)
@@ -188,7 +188,7 @@ class Avg<d,arg,Sys_eqs,FORWARD>
 	 * In case of non staggered case this function just return a null grid_key, in case of staggered,
 	 * the FORWARD scheme return the position of the staggered property
 	 *
-	 * \param position where we are calculating the derivative
+	 * \param pos position where we are calculating the derivative
 	 * \param gs Grid info
 	 * \param s_pos staggered position of the properties
 	 *
@@ -220,7 +220,7 @@ class Avg<d,arg,Sys_eqs,BACKWARD>
 	 * conditions it is a distributed map
 	 *
 	 * \param g_map It is the map explained in FDScheme
-	 * \param k_map position where the average is calculated
+	 * \param kmap position where the average is calculated
 	 * \param gs Grid info
 	 * \param cols non-zero colums calculated by the function
 	 * \param coeff coefficent (constant in front of the derivative)
@@ -247,7 +247,7 @@ class Avg<d,arg,Sys_eqs,BACKWARD>
 	 * In case of non staggered case this function just return a null grid_key, in case of staggered,
 	 * the BACKWARD scheme return the position of the staggered property
 	 *
-	 * \param position where we are calculating the derivative
+	 * \param pos position where we are calculating the derivative
 	 * \param gs Grid info
 	 * \param s_pos staggered position of the properties
 	 *
diff --git a/src/FiniteDifference/eq_unit_test_3d.hpp b/src/FiniteDifference/eq_unit_test_3d.hpp
index aa11f5bae64970078c59f87be26a5e16e02940c8..f8b4bc3d03e10b21498bb0d94f74846d85858a75 100644
--- a/src/FiniteDifference/eq_unit_test_3d.hpp
+++ b/src/FiniteDifference/eq_unit_test_3d.hpp
@@ -83,14 +83,13 @@ const bool lid_nn_3d_petsc::boundary[] = {NON_PERIODIC,NON_PERIODIC,NON_PERIODIC
 // Constant Field
 struct eta
 {
+	//! define that eta is a constant field
 	typedef void const_field;
 
+	//! therutn the value of the constant
 	static float val()	{return 1.0;}
 };
 
-//#define SYSEQ_TYPE lid_nn_3d_eigen;
-//#include "Equations/stoke_flow_eq_3d.hpp"
-
 template<typename solver_type,typename lid_nn_3d> void lid_driven_cavity_3d()
 {
 	#include "Equations/stoke_flow_eq_3d.hpp"
diff --git a/src/Makefile.am b/src/Makefile.am
index e4f8130d945fc8e82c5685c40525c9c0bd4f8069..90ad2275f837baa87bb1a10154bd9869d37c2a94 100755
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,9 +1,9 @@
 
-LINKLIBS = $(LIBHILBERT_LIB) $(PETSC_LIB) $(SUITESPARSE_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS)  $(METIS_LIB) $(PARMETIS_LIB) $(DEFAULT_LIB) $(PTHREAD_LIBS) $(OPT_LIBS) $(BOOST_LDFLAGS) $(BOOST_PROGRAM_OPTIONS_LIB) $(BOOST_IOSTREAMS_LIB) $(HDF5_LDFLAGS)  $(HDF5_LIBS) $(LIBQUADMATH)
+LINKLIBS = $(OPENMP_LDFLAGS) $(LIBHILBERT_LIB) $(PETSC_LIB) $(SUITESPARSE_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS)  $(METIS_LIB) $(PARMETIS_LIB) $(DEFAULT_LIB) $(PTHREAD_LIBS) $(OPT_LIBS) $(BOOST_LDFLAGS) $(BOOST_PROGRAM_OPTIONS_LIB) $(BOOST_IOSTREAMS_LIB) $(HDF5_LDFLAGS)  $(HDF5_LIBS) $(LIBQUADMATH) $(OPENMP_LDFLAGS)
 
 noinst_PROGRAMS = numerics
 numerics_SOURCES = main.cpp ../../openfpm_vcluster/src/VCluster.cpp ../../openfpm_devices/src/memory/HeapMemory.cpp ../../openfpm_devices/src/memory/PtrMemory.cpp ../../openfpm_devices/src/Memleak_check.cpp
-numerics_CXXFLAGS = $(LIBHILBERT_INCLUDE) $(AM_CXXFLAGS) $(HDF5_CPPFLAGS) $(INCLUDES_PATH) $(BOOST_CPPFLAGS) $(SUITESPARSE_INCLUDE) $(METIS_INCLUDE) $(PARMETIS_INCLUDE) $(EIGEN_INCLUDE) $(PETSC_INCLUDE) -Wno-deprecated-declarations -Wno-unused-local-typedefs
+numerics_CXXFLAGS = $(OPENMP_CFLAGS) $(LIBHILBERT_INCLUDE) $(AM_CXXFLAGS) $(HDF5_CPPFLAGS) $(INCLUDES_PATH) $(BOOST_CPPFLAGS) $(SUITESPARSE_INCLUDE) $(METIS_INCLUDE) $(PARMETIS_INCLUDE) $(EIGEN_INCLUDE) $(PETSC_INCLUDE) -Wno-deprecated-declarations -Wno-unused-local-typedefs
 numerics_CFLAGS = $(CUDA_CFLAGS)
 numerics_LDADD = $(LINKLIBS) -lparmetis -lmetis
 nobase_include_HEADERS = Matrix/SparseMatrix.hpp Matrix/SparseMatrix_Eigen.hpp Matrix/SparseMatrix_petsc.hpp \