MRMD 0.4.0
Multi Resolution Molecular Dynamics
Loading...
Searching...
No Matches
datatypes.hpp
Go to the documentation of this file.
1// Copyright 2024 Sebastian Eibl
2// Copyright 2026 Julian Friedrich Hille
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// https://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16#pragma once
17
18#include <Cabana_LinkedCellList.hpp>
19#include <Cabana_VerletList.hpp>
20#include <Kokkos_Array.hpp>
21#include <Kokkos_Core.hpp>
22#include <Kokkos_ScatterView.hpp>
23#include <cstdint>
24
25#include "cmake.hpp"
26
27namespace mrmd
28{
29// convenience casting functions for unsigned ints
30template <typename T>
31KOKKOS_INLINE_FUNCTION constexpr unsigned int uint_c(const T& val)
32{
33 return static_cast<unsigned int>(val);
34}
35
36template <typename T>
37KOKKOS_INLINE_FUNCTION constexpr uint8_t uint8_c(const T& val)
38{
39 return static_cast<uint8_t>(val);
40}
41
42template <typename T>
43KOKKOS_INLINE_FUNCTION constexpr uint16_t uint16_c(const T& val)
44{
45 return static_cast<uint16_t>(val);
46}
47
48template <typename T>
49KOKKOS_INLINE_FUNCTION constexpr uint32_t uint32_c(const T& val)
50{
51 return static_cast<uint32_t>(val);
52}
53
54template <typename T>
55KOKKOS_INLINE_FUNCTION constexpr uint64_t uint64_c(const T& val)
56{
57 return static_cast<uint64_t>(val);
58}
59
60// convenience casting functions for signed ints
61template <typename T>
62KOKKOS_INLINE_FUNCTION constexpr int int_c(const T& val)
63{
64 return static_cast<int>(val);
65}
66
67template <typename T>
68KOKKOS_INLINE_FUNCTION constexpr int8_t int8_c(const T& val)
69{
70 return static_cast<int8_t>(val);
71}
72
73template <typename T>
74KOKKOS_INLINE_FUNCTION constexpr int16_t int16_c(const T& val)
75{
76 return static_cast<int16_t>(val);
77}
78
79template <typename T>
80KOKKOS_INLINE_FUNCTION constexpr int32_t int32_c(const T& val)
81{
82 return static_cast<int32_t>(val);
83}
84
85template <typename T>
86KOKKOS_INLINE_FUNCTION constexpr int64_t int64_c(const T& val)
87{
88 return static_cast<int64_t>(val);
89}
90
91using idx_t = int64_t;
92template <typename T>
93KOKKOS_INLINE_FUNCTION constexpr idx_t idx_c(const T& val)
94{
95 return static_cast<idx_t>(val);
96}
97
98// convenience casting functions for floating point
99using real_t = double;
100using Point3D = Kokkos::Array<real_t, 3>;
101using Vector3D = Kokkos::Array<real_t, 3>;
102
103KOKKOS_INLINE_FUNCTION constexpr real_t operator""_r(const long double val)
104{
105 return static_cast<real_t>(val);
106}
107
108KOKKOS_INLINE_FUNCTION constexpr real_t operator""_r(const unsigned long long val)
109{
110 return static_cast<real_t>(val);
111}
112
113template <typename T>
114KOKKOS_INLINE_FUNCTION constexpr real_t real_c(T t)
115{
116 return static_cast<real_t>(t);
117}
118
119template <typename T>
120KOKKOS_INLINE_FUNCTION constexpr double double_c(const T& val)
121{
122 return static_cast<double>(val);
123}
124
125template <typename T>
126KOKKOS_INLINE_FUNCTION constexpr float float_c(const T& val)
127{
128 return static_cast<float>(val);
129}
130
131template <typename FLOAT>
132KOKKOS_INLINE_FUNCTION bool isFloatEqual(
133 const FLOAT& lhs,
134 const FLOAT& rhs,
135 const FLOAT& epsilon = std::numeric_limits<FLOAT>::epsilon())
136{
137 return std::abs(lhs - rhs) < epsilon;
138}
139
140enum class AXIS : idx_t
141{
142 X = 0,
143 Y = 1,
144 Z = 2
145};
146// same as C++23 std::to_underlying but with __host__ __device__ annotations
147template <class Enum>
148KOKKOS_INLINE_FUNCTION constexpr std::underlying_type_t<Enum> to_underlying(Enum e) noexcept
149{
150 return static_cast<std::underlying_type_t<Enum>>(e);
151}
152
153using IndexView = Kokkos::View<idx_t*>;
154using IntView = Kokkos::View<idx_t*>;
155using IntScatterView = Kokkos::Experimental::ScatterView<idx_t*>;
156using PairView = Kokkos::View<idx_t* [2]>;
157using SingleView = Kokkos::View<real_t>;
158using SingleScatterView = Kokkos::Experimental::ScatterView<real_t>;
159using ScalarView = Kokkos::View<real_t*>;
160using ScalarScatterView = Kokkos::Experimental::ScatterView<real_t*>;
161using MultiView = Kokkos::View<real_t**>;
162using MultiScatterView = Kokkos::Experimental::ScatterView<real_t**>;
163using VectorView = Kokkos::View<real_t* [3]>;
164using VectorScatterView = Kokkos::Experimental::ScatterView<real_t* [3]>;
165
166#ifdef MRMD_USE_SHARED_SPACE
167static_assert(Kokkos::has_shared_space,
168 "MRMD_USE_SHARED_SPACE is defined but Kokkos does not have a shared space");
169using HostType = Kokkos::Device<Kokkos::DefaultHostExecutionSpace, Kokkos::SharedSpace>;
170
171using DeviceType = Kokkos::Device<Kokkos::DefaultExecutionSpace, Kokkos::SharedSpace>;
172#else
173using HostType = Kokkos::Device<Kokkos::DefaultHostExecutionSpace,
174 Kokkos::DefaultHostExecutionSpace::memory_space>;
175
177 Kokkos::Device<Kokkos::DefaultExecutionSpace, Kokkos::DefaultExecutionSpace::memory_space>;
178#endif
179using LinkedCellList = Cabana::LinkedCellList<typename DeviceType::memory_space>;
180using VerletList [[deprecated]] = Cabana::VerletList<Kokkos::DefaultExecutionSpace::memory_space,
181 Cabana::HalfNeighborTag,
182 Cabana::VerletLayout2D,
183 Cabana::TeamOpTag>;
184using HalfVerletList = Cabana::VerletList<Kokkos::DefaultExecutionSpace::memory_space,
185 Cabana::HalfNeighborTag,
186 Cabana::VerletLayout2D,
187 Cabana::TeamOpTag>;
188using FullVerletList = Cabana::VerletList<Kokkos::DefaultExecutionSpace::memory_space,
189 Cabana::FullNeighborTag,
190 Cabana::VerletLayout2D,
191 Cabana::TeamOpTag>;
192using NeighborList [[deprecated]] = Cabana::NeighborList<HalfVerletList>;
193using HalfNeighborList = Cabana::NeighborList<HalfVerletList>;
194using FullNeighborList = Cabana::NeighborList<FullVerletList>;
195
200template <typename F>
201concept OneCoordinatePredicate = std::predicate<F,
202 const real_t // coordinate value
203 >;
204
209template <typename F>
210concept OnePositionPredicate = std::predicate<F,
211 const real_t, // pos x
212 const real_t, // pos y
213 const real_t // pos z
214 >;
215
220template <typename F>
221concept TwoPositionsPredicate = std::predicate<F,
222 const real_t, // pos 1 x
223 const real_t, // pos 1 y
224 const real_t, // pos 1 z
225 const real_t, // pos 2 x
226 const real_t, // pos 2 y
227 const real_t // pos 2 z
228 >;
229
230} // namespace mrmd
Concept for predicates that take one coordinate as input, e.g.
Definition datatypes.hpp:201
Concept for predicates that take one position as input, e.g.
Definition datatypes.hpp:210
Concept for predicates that take two positions as input, e.g.
Definition datatypes.hpp:221
Definition BerendsenBarostat.cpp:18
KOKKOS_INLINE_FUNCTION constexpr uint8_t uint8_c(const T &val)
Definition datatypes.hpp:37
Kokkos::View< idx_t * > IntView
Definition datatypes.hpp:154
Kokkos::View< real_t * > ScalarView
Definition datatypes.hpp:159
KOKKOS_INLINE_FUNCTION constexpr unsigned int uint_c(const T &val)
Definition datatypes.hpp:31
Cabana::NeighborList< FullVerletList > FullNeighborList
Definition datatypes.hpp:194
Kokkos::Array< real_t, 3 > Point3D
Definition datatypes.hpp:100
Kokkos::Experimental::ScatterView< idx_t * > IntScatterView
Definition datatypes.hpp:155
Kokkos::Experimental::ScatterView< real_t > SingleScatterView
Definition datatypes.hpp:158
KOKKOS_INLINE_FUNCTION constexpr double double_c(const T &val)
Definition datatypes.hpp:120
Kokkos::Device< Kokkos::DefaultHostExecutionSpace, Kokkos::DefaultHostExecutionSpace::memory_space > HostType
Definition datatypes.hpp:174
KOKKOS_INLINE_FUNCTION constexpr uint32_t uint32_c(const T &val)
Definition datatypes.hpp:49
Cabana::NeighborList< HalfVerletList > NeighborList
Definition datatypes.hpp:192
Cabana::VerletList< Kokkos::DefaultExecutionSpace::memory_space, Cabana::FullNeighborTag, Cabana::VerletLayout2D, Cabana::TeamOpTag > FullVerletList
Definition datatypes.hpp:191
KOKKOS_INLINE_FUNCTION constexpr idx_t idx_c(const T &val)
Definition datatypes.hpp:93
Kokkos::View< real_t ** > MultiView
Definition datatypes.hpp:161
Kokkos::View< real_t > SingleView
Definition datatypes.hpp:157
KOKKOS_INLINE_FUNCTION constexpr int32_t int32_c(const T &val)
Definition datatypes.hpp:80
Kokkos::View< real_t *[3]> VectorView
Definition datatypes.hpp:163
KOKKOS_INLINE_FUNCTION constexpr int16_t int16_c(const T &val)
Definition datatypes.hpp:74
Cabana::VerletList< Kokkos::DefaultExecutionSpace::memory_space, Cabana::HalfNeighborTag, Cabana::VerletLayout2D, Cabana::TeamOpTag > HalfVerletList
Definition datatypes.hpp:187
KOKKOS_INLINE_FUNCTION constexpr uint16_t uint16_c(const T &val)
Definition datatypes.hpp:43
AXIS
Definition datatypes.hpp:141
@ X
index of the x coordinate in vector views
@ Z
index of the z coordinate in vector views
@ Y
index of the y coordinate in vector views
Kokkos::View< idx_t *[2]> PairView
Definition datatypes.hpp:156
KOKKOS_INLINE_FUNCTION constexpr float float_c(const T &val)
Definition datatypes.hpp:126
KOKKOS_INLINE_FUNCTION constexpr int64_t int64_c(const T &val)
Definition datatypes.hpp:86
Kokkos::Experimental::ScatterView< real_t *[3]> VectorScatterView
Definition datatypes.hpp:164
KOKKOS_INLINE_FUNCTION constexpr uint64_t uint64_c(const T &val)
Definition datatypes.hpp:55
Cabana::LinkedCellList< typename DeviceType::memory_space > LinkedCellList
Definition datatypes.hpp:179
int64_t idx_t
Definition datatypes.hpp:91
Cabana::VerletList< Kokkos::DefaultExecutionSpace::memory_space, Cabana::HalfNeighborTag, Cabana::VerletLayout2D, Cabana::TeamOpTag > VerletList
Definition datatypes.hpp:183
Kokkos::Device< Kokkos::DefaultExecutionSpace, Kokkos::DefaultExecutionSpace::memory_space > DeviceType
Definition datatypes.hpp:177
Kokkos::View< idx_t * > IndexView
Definition datatypes.hpp:153
KOKKOS_INLINE_FUNCTION constexpr int8_t int8_c(const T &val)
Definition datatypes.hpp:68
Kokkos::Experimental::ScatterView< real_t * > ScalarScatterView
Definition datatypes.hpp:160
double real_t
Definition datatypes.hpp:99
KOKKOS_INLINE_FUNCTION constexpr std::underlying_type_t< Enum > to_underlying(Enum e) noexcept
Definition datatypes.hpp:148
Kokkos::Experimental::ScatterView< real_t ** > MultiScatterView
Definition datatypes.hpp:162
KOKKOS_INLINE_FUNCTION constexpr int int_c(const T &val)
Definition datatypes.hpp:62
KOKKOS_INLINE_FUNCTION bool isFloatEqual(const FLOAT &lhs, const FLOAT &rhs, const FLOAT &epsilon=std::numeric_limits< FLOAT >::epsilon())
Definition datatypes.hpp:132
KOKKOS_INLINE_FUNCTION constexpr real_t real_c(T t)
Definition datatypes.hpp:114
Cabana::NeighborList< HalfVerletList > HalfNeighborList
Definition datatypes.hpp:193
Kokkos::Array< real_t, 3 > Vector3D
Definition datatypes.hpp:101