From 6794c24bc6fe9c474496f9b5908b97a823214ded Mon Sep 17 00:00:00 2001 From: Pietro Incardona <incardon@mpi-cbg.de> Date: Tue, 13 Dec 2016 18:30:20 +0100 Subject: [PATCH] Fixing change name in VCluster --- src/Makefile.am | 2 +- src/Matrix/SparseMatrix_Eigen.hpp | 2 +- .../vector_dist_operators_apply_kernel.hpp | 51 +++++++++++++++++++ .../vector_dist_operators_functions.hpp | 17 ++++++- .../vector_dist_operators_unit_tests.hpp | 13 +++++ src/unit_test_init_cleanup.hpp | 2 +- 6 files changed, 82 insertions(+), 5 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 7aa6946c..d631e1b8 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,7 +2,7 @@ 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) $(LIBIFCORE) 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_SOURCES = main.cpp ../../openfpm_vcluster/src/VCluster/VCluster.cpp ../../openfpm_devices/src/memory/HeapMemory.cpp ../../openfpm_devices/src/memory/PtrMemory.cpp ../../openfpm_devices/src/Memleak_check.cpp 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 diff --git a/src/Matrix/SparseMatrix_Eigen.hpp b/src/Matrix/SparseMatrix_Eigen.hpp index 9a5fc42a..ce655797 100644 --- a/src/Matrix/SparseMatrix_Eigen.hpp +++ b/src/Matrix/SparseMatrix_Eigen.hpp @@ -10,7 +10,7 @@ #include "Vector/map_vector.hpp" #include <boost/mpl/int.hpp> -#include "VCluster.hpp" +#include "VCluster/VCluster.hpp" #define EIGEN_TRIPLET 1 diff --git a/src/Operators/Vector/vector_dist_operators_apply_kernel.hpp b/src/Operators/Vector/vector_dist_operators_apply_kernel.hpp index 59bbc478..f80da3ac 100644 --- a/src/Operators/Vector/vector_dist_operators_apply_kernel.hpp +++ b/src/Operators/Vector/vector_dist_operators_apply_kernel.hpp @@ -199,15 +199,27 @@ struct apply_kernel_is_number_or_expression_gen template <typename exp1,typename vector_type> class vector_dist_expression_op<exp1,vector_type,VECT_APPLYKER_IN> { + //! Type of neighborhood typedef typename boost::mpl::at<vector_type,boost::mpl::int_<0>>::type NN; + //! Type of kernel typedef typename boost::mpl::at<vector_type,boost::mpl::int_<1>>::type Kernel; + + // Type of the vector containing the particles typedef typename boost::mpl::at<vector_type,boost::mpl::int_<2>>::type vector_orig; + //! expression const exp1 o1; + + //! neighborhood list NN & cl; + + //! kernel Kernel & ker; + + //! Vector of particles const vector_orig & vd; + //! Return type of the expression typedef typename apply_kernel_rtype<decltype(o1.value(vect_dist_key_dx(0)))>::rtype rtype; public: @@ -246,14 +258,25 @@ public: template <typename exp1,typename vector_type> class vector_dist_expression_op<exp1,vector_type,VECT_APPLYKER_IN_SIM> { + //! Type of neighborhood list typedef typename boost::mpl::at<vector_type,boost::mpl::int_<0>>::type NN; + + //! Type of the kernel typedef typename boost::mpl::at<vector_type,boost::mpl::int_<1>>::type Kernel; + + //! Type that store the particles typedef typename boost::mpl::at<vector_type,boost::mpl::int_<2>>::type vector_orig; + //! Neighborhood list NN & cl; + + //! kernel Kernel & ker; + + //! vector of particles const vector_orig & vd; + //! return type of the expression typedef typename apply_kernel_rtype<decltype(std::declval<Kernel>().value(Point<vector_orig::dims,typename vector_orig::stype>(0.0), Point<vector_orig::dims,typename vector_orig::stype>(0.0) ) )>::rtype rtype; @@ -268,6 +291,13 @@ public: { } + /*! \brief Constructor + * + * \param cl neighborhood-list + * \param ker kernel to apply + * \param vd particle set to which apply the kernel + * + */ vector_dist_expression_op(NN & cl, Kernel & ker, const vector_orig & vd) :cl(cl),ker(ker),vd(vd) {} @@ -293,15 +323,28 @@ public: template <typename exp1,typename vector_type> class vector_dist_expression_op<exp1,vector_type,VECT_APPLYKER_IN_GEN> { + //! Type of nearest neighborhood typedef typename boost::mpl::at<vector_type,boost::mpl::int_<0>>::type NN; + + //! Type of kernel typedef typename boost::mpl::at<vector_type,boost::mpl::int_<1>>::type Kernel; + + //! Type of vector typedef typename boost::mpl::at<vector_type,boost::mpl::int_<2>>::type vector_orig; + //! expression 1 const exp1 o1; + + //! nearest neighborhood NN & cl; + + //! kernel Kernel & ker; + + //! Vector containing the particles const vector_orig & vd; + //! Return type of the kernel typedef typename apply_kernel_rtype<decltype(o1.value(vect_dist_key_dx(0)))>::rtype rtype; public: @@ -316,6 +359,14 @@ public: o1.init(); } + /*! \brief Constructor from expression + * + * \param o1 first expression + * \param NN neighborhood + * \param kernel + * \param vd vector with particles + * + */ vector_dist_expression_op(const exp1 & o1, NN & cl, Kernel & ker, const vector_orig & vd) :o1(o1),cl(cl),ker(ker),vd(vd) {} diff --git a/src/Operators/Vector/vector_dist_operators_functions.hpp b/src/Operators/Vector/vector_dist_operators_functions.hpp index ff7308e1..53d28f9c 100644 --- a/src/Operators/Vector/vector_dist_operators_functions.hpp +++ b/src/Operators/Vector/vector_dist_operators_functions.hpp @@ -208,24 +208,34 @@ CREATE_VDIST_ARG2_FUNC(pmul,pmul,VECT_PMUL) ////////// Special function reduce ///////////////////////// +/*! \brief expression that encapsulate a vector reduction expression + * + * \tparam exp1 expression 1 + * \tparam vector_type type of vector on which the expression is acting + * + */ template <typename exp1, typename vector_type> class vector_dist_expression_op<exp1,vector_type,VECT_SUM_REDUCE> { + //! expression 1 const exp1 o1; + //! return type comming from the expression typedef typename apply_kernel_rtype<decltype(o1.value(vect_dist_key_dx(0)))>::rtype rtype; - // calculated value + //! r_type without reference mutable typename std::remove_reference<rtype>::type val; const vector_type & vd; public: + //! constructor from an epxression exp1 and a vector vd vector_dist_expression_op(const exp1 & o1, const vector_type & vd) :o1(o1), vd(vd) {} + //! initialize the expression inline void init() const { o1.init(); @@ -244,19 +254,21 @@ public: } } + //! Get the value of the expression inline typename std::remove_reference<rtype>::type get() { init(); return value(vect_dist_key_dx(0)); } + //! Get the value of the expression template<typename r_type= typename std::remove_reference<rtype>::type > inline r_type value(const vect_dist_key_dx & key) const { return val; } }; - +//! Reduce function (it generate an expression) template<typename exp1, typename exp2_, unsigned int op1, typename vector_type> inline vector_dist_expression_op<vector_dist_expression_op<exp1,exp2_,op1>,vector_type,VECT_SUM_REDUCE> rsum(const vector_dist_expression_op<exp1,exp2_,op1> & va, const vector_type & vd) @@ -266,6 +278,7 @@ rsum(const vector_dist_expression_op<exp1,exp2_,op1> & va, const vector_type & v return exp_sum; } +//! Reduce function (It generate an expression) template<unsigned int prp1, typename v1, typename vector_type> inline vector_dist_expression_op<vector_dist_expression<prp1,v1>,vector_type,VECT_SUM_REDUCE> rsum(const vector_dist_expression<prp1,v1> & va, const vector_type & vd) diff --git a/src/Operators/Vector/vector_dist_operators_unit_tests.hpp b/src/Operators/Vector/vector_dist_operators_unit_tests.hpp index 372bde70..7ec35c5d 100644 --- a/src/Operators/Vector/vector_dist_operators_unit_tests.hpp +++ b/src/Operators/Vector/vector_dist_operators_unit_tests.hpp @@ -652,12 +652,16 @@ typedef vector_dist<3,float,aggregate<float,float,float,VectorS<3,float>,VectorS //! Exponential kernel struct exp_kernel { + //! variance of the exponential kernel float var; + //! Exponential kernel giving variance exp_kernel(float var) :var(var) {} + //! Calculate the value of the exponential kernel given two points p and q + // pA is the property on p pB is the property on B inline float value(const Point<3,float> & p, const Point<3,float> & q,float pA,float pB) { float dist = norm(p-q); @@ -665,6 +669,8 @@ struct exp_kernel return (pA + pB) * exp(dist * dist / var); } + //! Calculate the value of the exponential kernel given two points p and q + // pA is the value of the property on pA and pB is the value of the property on pB inline Point<3,float> value(const Point<3,float> & p, const Point<3,float> & q,const Point<3,float> & pA, const Point<3,float> & pB) { float dist = norm(p-q); @@ -672,6 +678,9 @@ struct exp_kernel return (pA + pB) * exp(dist * dist / var); } + //! Calculate the value of the exponential kernel given two points p and q + // pA is the value of the property on pA and pB is the value of the property on pB + // vd1 is the set of particles inline float value(size_t p, size_t q, float pA, float pB, const vector_type & vd1) { Point<3,float> pp = vd1.getPos(p); @@ -682,6 +691,9 @@ struct exp_kernel return (pA + pB) * exp(dist * dist / var); } + //! Calculate the value of the exponential kernel given two points p and q + // pA is the value of the property on pA and pB is the value of the property on pB + // vd1 is the set of particles inline Point<3,float> value(size_t p, size_t q, const Point<3,float> & pA, const Point<3,float> & pB , const vector_type & vd1) { Point<3,float> pp = vd1.getPos(p); @@ -692,6 +704,7 @@ struct exp_kernel return (pA + pB) * exp(dist * dist / var); } + //! Calculate the value of the exponential kernel given two points p and q inline Point<2,float> value(const Point<3,float> & p, const Point<3,float> & q) { float dist = norm(p-q); diff --git a/src/unit_test_init_cleanup.hpp b/src/unit_test_init_cleanup.hpp index 51288040..7cf89f01 100644 --- a/src/unit_test_init_cleanup.hpp +++ b/src/unit_test_init_cleanup.hpp @@ -8,7 +8,7 @@ #ifndef UNIT_TEST_INIT_CLEANUP_HPP_ #define UNIT_TEST_INIT_CLEANUP_HPP_ -#include "VCluster.hpp" +#include "VCluster/VCluster.hpp" struct ut_start { ut_start() { -- GitLab