8#ifndef OPENFPM_NUMERICS_SRC_OPERATORS_VECTOR_VECTOR_DIST_OPERATORS_APPLY_KERNEL_HPP_
9#define OPENFPM_NUMERICS_SRC_OPERATORS_VECTOR_VECTOR_DIST_OPERATORS_APPLY_KERNEL_HPP_
13#define DEFINE_INTERACTION_3D(name) struct name \
16 Point<3,double> value(const Point<3,double> & xp, const Point<3,double> xq)\
19#define END_INTERACTION }\
28template<
typename ObjType,
typename Sfinae =
void>
31template<
typename ObjType>
36template<typename exp, bool is_exp = is_expression<exp>::value>
40 typedef typename exp::return_type
rtype;
56template<
typename rtype>
60 __device__ __host__
static rtype
create()
67template<
unsigned int dim,
typename T>
80constexpr int NN_index_sort = 1;
81constexpr int NN_index_unsort = 0;
83template<
unsigned int impl>
86 template<
typename NN_type>
87 __device__ __host__
static auto get(NN_type & NN) ->
decltype(NN.get())
96 template<
typename NN_type>
97 __device__ __host__
static auto get(NN_type & NN) ->
decltype(NN.get_sort())
107template<unsigned int impl, typename T, typename vector, typename exp,typename NN_type, typename Kernel, typename rtype, bool is_exp=is_expression<T>::value>
121 inline __host__ __device__
static typename std::remove_reference<rtype>::type
apply(
const vector & vd, NN_type & cl,
const exp & v_exp,
const vect_dist_key_dx & key, Kernel & lker)
130 rtype prp_p = v_exp.
value(key);
133 auto NN = cl.template getNNIterator<NO_CHECK>(cl.getCell(p));
146 rtype prp_q = v_exp.value(nnp_k);
151 pse += lker.
value(p,q,prp_p,prp_q);
167template<
unsigned int impl,
typename vector,
typename exp,
typename NN_type,
typename Kernel,
typename rtype>
180 __device__ __host__
inline static typename std::remove_reference<rtype>::type
apply(
const vector & vd, NN_type & cl,
const vect_dist_key_dx & key, Kernel & lker)
189 auto NN = cl.template getNNIterator<NO_CHECK>(cl.getCell(p));
201 pse += lker.
value(p,q);
218template<unsigned int impl, typename T, typename vector, typename exp,typename NN_type, typename Kernel, typename rtype, bool is_exp=is_expression<T>::value>
232 __device__ __host__
inline static typename std::remove_reference<rtype>::type
apply(
const vector & vd, NN_type & cl,
const exp & v_exp,
const vect_dist_key_dx & key, Kernel & lker)
238 rtype prp_p = v_exp.value(key);
244 auto NN = cl.template getNNIterator<NO_CHECK>(cl.getCell(p));
257 rtype prp_q = v_exp.value(nnp_k);
259 pse += lker.value(key.
getKey(),nnp,prp_p,prp_q,vd);
270template<
typename T,
bool mm>
290template<typename T, bool is_reference = std::is_reference<T>::value>
293 typedef const T type;
299 typedef typename std::remove_reference<T>::type
const & type;
308template <
typename exp1,
typename vector_type>
312 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<0>>::type
NN;
314 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<1>>::type
Kernel;
316 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<2>>::type
vector_orig;
319 typedef typename std::remove_reference<NN>::type
NN_nr;
321 typedef typename std::remove_reference<Kernel>::type
Kernel_nr;
335 typename add_const_reference<vector_orig>::type
vd;
394 :o1(o1),cl(cl),ker(ker),vd(vd)
407 decltype(o1.value(key)),
412 rtype>::apply(vd,cl.obj,o1,key,ker.obj);
422template <
typename exp1,
typename vector_type>
426 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<0>>::type
NN;
428 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<1>>::type
Kernel;
430 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<2>>::type
vector_orig;
433 typedef typename std::remove_reference<NN>::type
NN_nr;
435 typedef typename std::remove_reference<Kernel>::type
Kernel_nr;
449 typename add_const_reference<vector_orig>::type
vd;
507 :o1(o1),cl(cl),ker(ker),vd(vd)
520 decltype(o1.value(key)),
525 rtype>::apply(vd,cl.obj,o1,key,ker.obj);
535template <
typename exp1,
typename vector_type>
539 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<0>>::type
NN;
541 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<1>>::type
Kernel;
543 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<2>>::type
vector_orig;
546 typedef typename std::remove_reference<NN>::type
NN_nr;
548 typedef typename std::remove_reference<Kernel>::type
Kernel_nr;
616 :cl(cl),ker(ker),vd(vd)
633 rtype>::apply(vd,cl.obj,key,ker.obj);
643template <
typename exp1,
typename vector_type>
647 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<0>>::type
NN;
649 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<1>>::type
Kernel;
651 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<2>>::type
vector_orig;
654 typedef typename std::remove_reference<NN>::type
NN_nr;
656 typedef typename std::remove_reference<Kernel>::type
Kernel_nr;
724 :cl(cl),ker(ker),vd(vd)
741 rtype>::apply(vd,cl.obj,key,ker.obj);
751template <
typename exp1,
typename vector_type>
755 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<0>>::type
NN;
757 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<1>>::type
Kernel;
760 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<2>>::type
vector_orig;
763 typedef typename std::remove_reference<NN>::type
NN_nr;
765 typedef typename std::remove_reference<Kernel>::type
Kernel_nr;
837 :o1(o1),cl(cl),ker(ker),vd(vd)
850 decltype(o1.value(key)),
855 rtype>::apply(vd,cl.obj,o1,key,ker.obj);
865template <
typename exp1,
typename vector_type>
869 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<0>>::type
NN;
871 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<1>>::type
Kernel;
874 typedef typename boost::mpl::at<vector_type,boost::mpl::int_<2>>::type
vector_orig;
877 typedef typename std::remove_reference<NN>::type
NN_nr;
879 typedef typename std::remove_reference<Kernel>::type
Kernel_nr;
951 :o1(o1),cl(cl),ker(ker),vd(vd)
964 decltype(o1.value(key)),
969 rtype>::apply(vd,cl.obj,o1,key,ker.obj);
976 typedef cl_type& ctype;
978 static ctype & get(cl_type & cl)
984template<
typename cl_type>
987 typedef decltype(std::declval<cl_type>().toKernel()) ctype;
989 static ctype get(cl_type & cl)
991 return cl.toKernel();
995template<
typename cl_type>
998 typedef cl_type ctype;
1000 static ctype & get(cl_type & cl)
1009 typedef kl_type& ktype;
1012template<
typename kl_type,
typename cl_type>
1015 typedef kl_type ktype;
1018template<
typename kl_type,
typename cl_type>
1021 typedef kl_type ktype;
1024template<
bool is_sorted,
bool uwk,
typename T>
1029 static T & get(T & v)
1038 typedef decltype(std::declval<T>().toKernel()) type;
1040 static type get(T & v)
1042 return v.toKernel();
1049 typedef decltype(std::declval<T>().toKernel_sorted()) type;
1051 static type get(T & v)
1053 return v.toKernel_sorted();
1060 typedef vl_type& vtype;
1062 static vtype & get(vl_type & v)
1068template<
typename vl_type,
typename cl_type>
1071 typedef decltype(std::declval<vl_type>().toKernel()) vtype;
1073 static vtype get(vl_type & v)
1075 return v.toKernel();
1079template<
typename vl_type,
typename cl_type>
1082 typedef decltype(std::declval<vl_type>().toKernel()) vtype;
1084 static vtype get(vl_type & v)
1086 return v.toKernel_sorted();
1090template<
bool is_sorted,
typename vl_type,
typename cl_type>
1095 static vtype get(vl_type & v)
1113template<
typename exp1,
typename exp2,
unsigned int op1,
typename NN,
typename Kernel,
typename vector_type>
1115 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1116 typename kl_selector_impl<Kernel,NN>::ktype,
1122 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1123 typename kl_selector_impl<Kernel,NN>::ktype,
1125 VECT_APPLYKER_IN> exp_sum(va,
1145template<
typename exp1,
typename exp2,
unsigned int op1,
typename NN,
typename Kernel,
typename vector_type>
1147 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1148 typename kl_selector_impl<Kernel,NN>::ktype,
1150 VECT_APPLYKER_IN_SORT>
1154 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1155 typename kl_selector_impl<Kernel,NN>::ktype,
1157 VECT_APPLYKER_IN_SORT> exp_sum(va,
1173template<
typename exp1,
typename exp2,
unsigned int op1,
typename NN,
typename Kernel,
typename vector_type>
1175 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1176 typename kl_selector_impl<Kernel,NN>::ktype,
1178 VECT_APPLYKER_IN_GEN>
1182 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1183 typename kl_selector_impl<Kernel,NN>::ktype,
1185 VECT_APPLYKER_IN_GEN> exp_sum(va,
1201template<
typename exp1,
typename exp2,
unsigned int op1,
typename NN,
typename Kernel,
typename vector_type>
1203 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1204 typename kl_selector_impl<Kernel,NN>::ktype,
1206 VECT_APPLYKER_IN_GEN_SORT>
1210 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1211 typename kl_selector_impl<Kernel,NN>::ktype,
1213 VECT_APPLYKER_IN_GEN_SORT> exp_sum(va,
1231template<
unsigned int prp,
typename NN,
typename Kernel,
typename vector_type,
typename vector_type_ker>
1233 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1234 typename kl_selector_impl<Kernel,NN>::ktype,
1240 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1241 typename kl_selector_impl<Kernel,NN>::ktype,
1243 VECT_APPLYKER_IN> exp_sum(va,
1259template<
unsigned int prp,
typename NN,
typename Kernel,
typename vector_type,
typename vector_type_ker>
1261 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1262 typename kl_selector_impl<Kernel,NN>::ktype,
1264 VECT_APPLYKER_IN_SORT>
1268 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1269 typename kl_selector_impl<Kernel,NN>::ktype,
1271 VECT_APPLYKER_IN_SORT> exp_sum(va,
1287template<
unsigned int prp,
typename NN,
typename Kernel,
typename vector_type,
typename vector_type_ker>
1289 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1290 typename kl_selector_impl<Kernel,NN>::ktype,
1292 VECT_APPLYKER_IN_GEN>
1296 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1297 typename kl_selector_impl<Kernel,NN>::ktype,
1299 VECT_APPLYKER_IN_GEN> exp_sum(va,
1315template<
unsigned int prp,
typename NN,
typename Kernel,
typename vector_type,
typename vector_type_ker>
1317 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1318 typename kl_selector_impl<Kernel,NN>::ktype,
1320 VECT_APPLYKER_IN_GEN_SORT>
1324 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1325 typename kl_selector_impl<Kernel,NN>::ktype,
1327 VECT_APPLYKER_IN_GEN_SORT> exp_sum(va,
1343template<
typename NN,
typename Kernel,
typename vector_type>
1345 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1346 typename kl_selector_impl<Kernel,NN>::ktype,
1348 VECT_APPLYKER_IN_SIM>
1349applyKernel_in_sim(
vector_type & vd, NN & cl, Kernel & ker)
1352 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1353 typename kl_selector_impl<Kernel,NN>::ktype,
1370template<
typename NN,
typename Kernel,
typename vector_type>
1372 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1373 typename kl_selector_impl<Kernel,NN>::ktype,
1375 VECT_APPLYKER_IN_SIM_SORT>
1376applyKernel_in_sim_sort(
vector_type & vd, NN & cl, Kernel & ker)
1379 boost::mpl::vector<typename cl_selector_impl<NN>::ctype,
1380 typename kl_selector_impl<Kernel,NN>::ktype,
This class implement the point shape in an N-dimensional space.
__device__ __host__ void zero()
Set to zero the point coordinate.
__device__ __host__ T & value(size_t i)
Return the reference to the value at coordinate i.
Grid key for a distributed grid.
__device__ __host__ size_t getKey() const
Get the key.
__device__ __host__ void setKey(size_t key)
set the key
std::remove_reference< vector_orig >::type vector_orig_nr
Return the vector containing the position of the particles.
has_vector_kernel< vector_orig_nr >::type is_ker
indicate if this expression operate on kernel expression
boost::mpl::at< vector_type, boost::mpl::int_< 1 > >::type Kernel
Get the type of the kernel.
vector_dist_expression_op(const exp1 &o1, const NN &cl, Kernel &ker, const vector_orig_nr &vd)
Constructor.
boost::mpl::at< vector_type, boost::mpl::int_< 0 > >::type NN
Get the type of the Cell-list.
add_const_reference< vector_orig >::type vd
The vector that contain the particles.
const vtype & getVector() const
get the vector
mutable_or_not< Kernel, is_gpu_celllist< NN >::type::value||is_gpu_ker_celllist< NN >::type::value > ker
kernel
apply_kernel_rtype< decltype(o1.value(vect_dist_key_dx()))>::rtype rtype
Get the return type of applying the kernel to a particle.
boost::mpl::at< vector_type, boost::mpl::int_< 2 > >::type vector_orig
Get the type that contain the particle positions.
boost::mpl::bool_< false > is_sort
indicate that is apply_kernel is not a sorted version
__device__ __host__ std::remove_reference< rtype >::type value(const vect_dist_key_dx &key) const
Evaluate the expression.
mutable_or_not< NN, is_gpu_celllist< NN >::type::value||is_gpu_ker_celllist< NN >::type::value > cl
Cell-list.
std::remove_reference< Kernel >::type Kernel_nr
Return the type of the kernel.
NN_nr NN_type
type of NN structure
vector_orig_nr vtype
vector type on which this expression work
void init() const
This function must be called before value.
std::remove_reference< NN >::type NN_nr
Return the type of the Cell-list.
NN_nr * getNN() const
get the NN object
vector_orig_nr vtype
vector type on which this expression work
boost::mpl::at< vector_type, boost::mpl::int_< 0 > >::type NN
Get the type of the Cell-list.
boost::mpl::at< vector_type, boost::mpl::int_< 2 > >::type vector_orig
Get the type of the vector containing the set of particles.
mutable_or_not< NN, is_gpu_celllist< NN >::type::value||is_gpu_ker_celllist< NN >::type::value > cl
Cell-list.
boost::mpl::bool_< false > is_sort
indicate that is apply_kernel is not a sorted version
const vtype & getVector() const
get the vector
std::remove_reference< vector_orig >::type vector_orig_nr
Return the vector containing the position of the particles.
NN_nr NN_type
type of NN structure
const vector_orig vd
Vector containing the particles.
boost::mpl::at< vector_type, boost::mpl::int_< 1 > >::type Kernel
Get the type of the kernel.
std::remove_reference< NN >::type NN_nr
Return the type of the Cell-list.
vector_dist_expression_op(const exp1 &o1, const NN &cl, Kernel &ker, const vector_orig &vd)
Constructor.
has_vector_kernel< vector_orig_nr >::type is_ker
indicate if this expression operate on kernel expression
__device__ __host__ std::remove_reference< rtype >::type value(const vect_dist_key_dx &key) const
Evaluate the expression.
std::remove_reference< Kernel >::type Kernel_nr
Return the type of the kernel.
NN_nr * getNN() const
get the NN object
apply_kernel_rtype< decltype(o1.value(vect_dist_key_dx()))>::rtype rtype
Return type of the expression.
void init() const
This function must be called before value.
mutable_or_not< Kernel, is_gpu_celllist< NN >::type::value||is_gpu_ker_celllist< NN >::type::value > ker
kernel
mutable_or_not< Kernel, is_gpu_celllist< NN >::type::value||is_gpu_ker_celllist< NN >::type::value > ker
kernel
void init() const
This function must be called before value.
__device__ __host__ std::remove_reference< rtype >::type value(const vect_dist_key_dx &key) const
Evaluate the expression.
boost::mpl::at< vector_type, boost::mpl::int_< 0 > >::type NN
Get the type of the Cell-list.
vector_orig_nr vtype
vector type on which this expression work
std::remove_reference< NN >::type NN_nr
Return the type of the Cell-list.
mutable_or_not< NN, is_gpu_celllist< NN >::type::value||is_gpu_ker_celllist< NN >::type::value > cl
Cell-list.
vector_dist_expression_op(const exp1 &o1, const NN &cl, Kernel &ker, const vector_orig &vd)
Constructor.
apply_kernel_rtype< decltype(o1.value(vect_dist_key_dx()))>::rtype rtype
Return type of the expression.
std::remove_reference< Kernel >::type Kernel_nr
Return the type of the kernel.
const vtype & getVector() const
get the vector
std::remove_reference< vector_orig >::type vector_orig_nr
Return the vector containing the position of the particles.
boost::mpl::at< vector_type, boost::mpl::int_< 1 > >::type Kernel
Get the type of the kernel.
const vector_orig vd
Vector containing the particles.
NN_nr NN_type
type of NN structure
boost::mpl::bool_< true > is_sort
indicate that is apply_kernel is not a sorted version
has_vector_kernel< vector_orig_nr >::type is_ker
indicate if this expression operate on kernel expression
boost::mpl::at< vector_type, boost::mpl::int_< 2 > >::type vector_orig
Get the type of the vector containing the set of particles.
NN_nr * getNN() const
get the NN object
vector_dist_expression_op(const NN &cl, Kernel &ker, const vector_orig &vd)
Constructor.
has_vector_kernel< vector_orig_nr >::type is_ker
indicate if this expression operate on kernel expression
void init() const
This function must be called before value.
apply_kernel_rtype< decltype(std::declval< Kernel_nr >().value(Point< vector_orig_nr::dims, typenamevector_orig_nr::stype >(0.0), Point< vector_orig_nr::dims, typenamevector_orig_nr::stype >(0.0)))>::rtype rtype
Get the return type of the expression.
boost::mpl::at< vector_type, boost::mpl::int_< 2 > >::type vector_orig
Return the vector containing the position of the particles.
vector_orig_nr vtype
vector type on which this expression work
const vector_orig vd
vector with the particle positions
__device__ __host__ std::remove_reference< rtype >::type value(const vect_dist_key_dx &key) const
Evaluate the expression.
std::remove_reference< Kernel >::type Kernel_nr
Return the type of the kernel.
const vtype & getVector() const
get the vector
boost::mpl::bool_< false > is_sort
indicate that is apply_kernel is not a sorted version
std::remove_reference< vector_orig >::type vector_orig_nr
Return the vector containing the position of the particles.
std::remove_reference< NN >::type NN_nr
Return the type of the Cell-list.
mutable_or_not< Kernel, is_gpu_celllist< NN >::type::value||is_gpu_ker_celllist< NN >::type::value > ker
kernel
mutable_or_not< NN, is_gpu_celllist< NN >::type::value||is_gpu_ker_celllist< NN >::type::value > cl
Cell-list.
boost::mpl::at< vector_type, boost::mpl::int_< 1 > >::type Kernel
Return the type of the kernel.
NN_nr * getNN() const
get the NN object
NN_nr NN_type
type of NN structure
boost::mpl::at< vector_type, boost::mpl::int_< 0 > >::type NN
Return the type of the Cell-list.
__device__ __host__ std::remove_reference< rtype >::type value(const vect_dist_key_dx &key) const
Evaluate the expression.
mutable_or_not< Kernel, is_gpu_celllist< NN >::type::value||is_gpu_ker_celllist< NN >::type::value > ker
kernel
vector_dist_expression_op(const NN &cl, Kernel &ker, const vector_orig &vd)
Constructor.
has_vector_kernel< vector_orig_nr >::type is_ker
indicate if this expression operate on kernel expression
apply_kernel_rtype< decltype(std::declval< Kernel_nr >().value(Point< vector_orig_nr::dims, typenamevector_orig_nr::stype >(0.0), Point< vector_orig_nr::dims, typenamevector_orig_nr::stype >(0.0)))>::rtype rtype
Get the return type of the expression.
mutable_or_not< NN, is_gpu_celllist< NN >::type::value||is_gpu_ker_celllist< NN >::type::value > cl
Cell-list.
std::remove_reference< vector_orig >::type vector_orig_nr
Return the vector containing the position of the particles.
void init() const
This function must be called before value.
vector_orig_nr vtype
vector type on which this expression work
std::remove_reference< Kernel >::type Kernel_nr
Return the type of the kernel.
NN_nr * getNN() const
get the NN object
NN_nr NN_type
type of NN structure
boost::mpl::bool_< true > is_sort
indicate that is apply_kernel is not a sorted version
boost::mpl::at< vector_type, boost::mpl::int_< 2 > >::type vector_orig
Return the vector containing the position of the particles.
const vector_orig vd
vector with the particle positions
boost::mpl::at< vector_type, boost::mpl::int_< 0 > >::type NN
Return the type of the Cell-list.
boost::mpl::at< vector_type, boost::mpl::int_< 1 > >::type Kernel
Return the type of the kernel.
std::remove_reference< NN >::type NN_nr
Return the type of the Cell-list.
const vtype & getVector() const
get the vector
std::remove_reference< Kernel >::type Kernel_nr
Return the type of the kernel.
apply_kernel_rtype< decltype(o1.value(vect_dist_key_dx()))>::rtype rtype
Get the return type of applying the kernel to a particle.
NN_nr NN_type
type of NN structure
std::remove_reference< NN >::type NN_nr
Return the type of the Cell-list.
__device__ __host__ std::remove_reference< rtype >::type value(const vect_dist_key_dx &key) const
Evaluate the expression.
boost::mpl::at< vector_type, boost::mpl::int_< 0 > >::type NN
Get the type of the Cell-list.
NN_nr * getNN() const
get the NN object
boost::mpl::at< vector_type, boost::mpl::int_< 1 > >::type Kernel
Get the type of the kernel.
vector_orig_nr vtype
vector type on which this expression work
add_const_reference< vector_orig >::type vd
The vector that contain the particles.
boost::mpl::at< vector_type, boost::mpl::int_< 2 > >::type vector_orig
Get the type that contain the particle positions.
boost::mpl::bool_< true > is_sort
indicate that is apply_kernel is not a sorted version
mutable_or_not< NN, is_gpu_celllist< NN >::type::value||is_gpu_ker_celllist< NN >::type::value > cl
Cell-list.
vector_dist_expression_op(const exp1 &o1, NN &cl, Kernel &ker, const vector_orig_nr &vd)
Constructor.
std::remove_reference< vector_orig >::type vector_orig_nr
Return the vector containing the position of the particles.
const vtype & getVector() const
get the vector
void init() const
This function must be called before value.
mutable_or_not< Kernel, is_gpu_celllist< NN >::type::value||is_gpu_ker_celllist< NN >::type::value > ker
kernel
has_vector_kernel< vector_orig_nr >::type is_ker
indicate if this expression operate on kernel expression
Unknown operation specialization.
Main class that encapsulate a vector properties operand to be used for expressions construction.
Apply the kernel to particle differently that is a number or is an expression.
__device__ static __host__ std::remove_reference< rtype >::type apply(const vector &vd, NN_type &cl, const exp &v_exp, const vect_dist_key_dx &key, Kernel &lker)
Apply the kernel expression to a particle.
Apply the kernel to particle differently that is a number or is an expression.
__device__ static __host__ std::remove_reference< rtype >::type apply(const vector &vd, NN_type &cl, const vect_dist_key_dx &key, Kernel &lker)
Apply the kernel expression to a particle.
Apply the kernel to particle differently that is a number or is an expression.
__host__ static __device__ std::remove_reference< rtype >::type apply(const vector &vd, NN_type &cl, const exp &v_exp, const vect_dist_key_dx &key, Kernel &lker)
Apply the kernel expression to a particle.
exp rtype
indicate the return type of the expression exp
It give the return type of the expression if applicable.
exp::return_type rtype
indicate the return type of the expression exp
is_expression check if a type is simple a type or is just an encapsulation of an expression
Check this is a gpu or cpu type cell-list.
__device__ static __host__ Point< dim, T > create()
return a point with all the coordinates set to zero
Meta-function to return a compatible zero-element.
__device__ static __host__ rtype create()
return 0