16#ifndef CABANA_FIELDS_HPP
17#define CABANA_FIELDS_HPP
31template <
class T,
int D>
34template <
class T,
int D0,
int D1>
45 static constexpr int rank = 0;
47 static constexpr int size = 1;
53template <
class T,
int D>
59 static constexpr int rank = 1;
61 static constexpr int size = D;
63 static constexpr int dim0 = D;
69template <
class T,
int D0,
int D1>
75 static constexpr int rank = 2;
77 static constexpr int size = D0 * D1;
79 static constexpr int dim0 = D0;
81 static constexpr int dim1 = D1;
90template <std::
size_t NumSpaceDim>
94 static std::string
label() {
return "position"; }
103template <
class T,
int Size,
int N,
class Type,
class... Types>
104struct TypeIndexerImpl
106 static constexpr std::size_t value =
107 TypeIndexerImpl<T, Size, N - 1, Types...>::value *
108 ( std::is_same<T, Type>::value ? Size - 1 - N : 1 );
111template <
class T,
int Size,
class Type,
class... Types>
112struct TypeIndexerImpl<T, Size, 0, Type, Types...>
114 static constexpr std::size_t
value =
115 std::is_same<T, Type>::value ? Size - 1 : 1;
120template <
class T,
class... Types>
124 static constexpr std::size_t
index =
125 TypeIndexerImpl<T,
sizeof...( Types ),
sizeof...( Types ) - 1,
KOKKOS_INLINE_FUNCTION std::enable_if_t< 3==SplineDataType::num_space_dim, void > value(const ViewType &view, const SplineDataType &sd, PointDataType &result, typename std::enable_if<(std::rank< PointDataType >::value==0), void * >::type=0)
Interpolate a scalar value to a point. 3D specialization.
Definition Cabana_Grid_Interpolation.hpp:56
Core: particle data structures and algorithms.
Definition Cabana_AoSoA.hpp:36
Matrix (2D) particle field type.
Definition Cabana_Fields.hpp:71
static constexpr int dim1
Field second dimension size.
Definition Cabana_Fields.hpp:81
value_type[D0][D1] data_type
Scalar type.
Definition Cabana_Fields.hpp:83
static constexpr int rank
Field rank.
Definition Cabana_Fields.hpp:75
static constexpr int dim0
Field first dimension size.
Definition Cabana_Fields.hpp:79
T value_type
Field type.
Definition Cabana_Fields.hpp:73
static constexpr int size
Field total size.
Definition Cabana_Fields.hpp:77
Particle position field type.
Definition Cabana_Fields.hpp:92
static std::string label()
Field label.
Definition Cabana_Fields.hpp:94
Scalar particle field type.
Definition Cabana_Fields.hpp:41
T value_type
Field type.
Definition Cabana_Fields.hpp:43
value_type data_type
Scalar type.
Definition Cabana_Fields.hpp:49
static constexpr int rank
Field rank.
Definition Cabana_Fields.hpp:45
static constexpr int size
Field total size.
Definition Cabana_Fields.hpp:47
Vector (1D) particle field type.
Definition Cabana_Fields.hpp:55
static constexpr int size
Field total size.
Definition Cabana_Fields.hpp:61
value_type[D] data_type
Scalar type.
Definition Cabana_Fields.hpp:65
static constexpr int dim0
Field first dimension size.
Definition Cabana_Fields.hpp:63
T value_type
Field type.
Definition Cabana_Fields.hpp:57
static constexpr int rank
Field rank.
Definition Cabana_Fields.hpp:59
Get the index of a field type within a particle type list.
Definition Cabana_Fields.hpp:122
static constexpr std::size_t index
Field index.
Definition Cabana_Fields.hpp:124