Cabana 0.8.0-dev
 
Loading...
Searching...
No Matches
Cabana_Fields.hpp
Go to the documentation of this file.
1/****************************************************************************
2 * Copyright (c) 2018-2023 by the Cabana authors *
3 * All rights reserved. *
4 * *
5 * This file is part of the Cabana library. Cabana is distributed under a *
6 * BSD 3-clause license. For the licensing terms see the LICENSE file in *
7 * the top-level directory. *
8 * *
9 * SPDX-License-Identifier: BSD-3-Clause *
10 ****************************************************************************/
11
16#ifndef CABANA_FIELDS_HPP
17#define CABANA_FIELDS_HPP
18
19namespace Cabana
20{
21namespace Field
22{
23//---------------------------------------------------------------------------//
24// General field types.
25//---------------------------------------------------------------------------//
26// Forward declarations.
28template <class T>
29struct Scalar;
30
31template <class T, int D>
32struct Vector;
33
34template <class T, int D0, int D1>
35struct Matrix;
37
39template <class T>
40struct Scalar
41{
43 using value_type = T;
45 static constexpr int rank = 0;
47 static constexpr int size = 1;
50};
51
53template <class T, int D>
54struct Vector
55{
57 using value_type = T;
59 static constexpr int rank = 1;
61 static constexpr int size = D;
63 static constexpr int dim0 = D;
66};
67
69template <class T, int D0, int D1>
70struct Matrix
71{
73 using value_type = T;
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;
83 using data_type = value_type[D0][D1];
84};
85
86//---------------------------------------------------------------------------//
87// Common field types.
88//---------------------------------------------------------------------------//
90template <std::size_t NumSpaceDim>
91struct Position : Vector<double, NumSpaceDim>
92{
94 static std::string label() { return "position"; }
95};
96
97} // namespace Field
98
99//---------------------------------------------------------------------------//
100// General type indexer.
101//---------------------------------------------------------------------------//
103template <class T, int Size, int N, class Type, class... Types>
104struct TypeIndexerImpl
105{
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 );
109};
110
111template <class T, int Size, class Type, class... Types>
112struct TypeIndexerImpl<T, Size, 0, Type, Types...>
113{
114 static constexpr std::size_t value =
115 std::is_same<T, Type>::value ? Size - 1 : 1;
116};
118
120template <class T, class... Types>
122{
124 static constexpr std::size_t index =
125 TypeIndexerImpl<T, sizeof...( Types ), sizeof...( Types ) - 1,
126 Types...>::value;
127};
128
129} // namespace Cabana
130#endif
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