BioCMAMC-ST
serdes_class.hpp
1#ifndef __UTILS_SERDES_HPP__
2#define __UTILS_SERDES_HPP__
3
4#include <cassert>
5#include <mc/traits.hpp>
6#include <optional>
7
8// NOLINTBEGIN
10{
11 using uniform_weight = std::true_type; // Using type alias
13 using FloatType = float;
14 using Config = std::nullopt_t;
15
16 enum class particle_var : int
17 {
18 a = 0,
19 b,
20 c,
21 COUNT
22 };
23
24 static constexpr std::size_t n_var = INDEX_FROM_ENUM(particle_var::COUNT);
25 static constexpr std::string_view name = "simple";
27
28 MODEL_CONSTANT FloatType a_i = 5e-6; // m
29
30 KOKKOS_INLINE_FUNCTION static void init([[maybe_unused]] const MC::KPRNG::pool_type& random_pool,
31 std::size_t idx,
32 const SelfParticle& arr)
33 {
34 GET_PROPERTY(SerdeModel::particle_var::a) = a_i;
35 }
36
37 KOKKOS_INLINE_FUNCTION static double mass([[maybe_unused]] std::size_t idx,
38 [[maybe_unused]] const SelfParticle& arr)
39 {
40 return 1.;
41 }
42
43 KOKKOS_INLINE_FUNCTION static MC::Status
44 update([[maybe_unused]] const MC::KPRNG::pool_type& random_pool,
45 [[maybe_unused]] FloatType d_t,
46 [[maybe_unused]] std::size_t idx,
47 [[maybe_unused]] const SelfParticle& arr,
48 [[maybe_unused]] const MC::LocalConcentration& c)
49 {
50
51 return MC::Status::Idle;
52 }
53
54 KOKKOS_INLINE_FUNCTION static void
55 division([[maybe_unused]] const MC::KPRNG::pool_type& random_pool,
56 [[maybe_unused]] std::size_t idx,
57 [[maybe_unused]] std::size_t idx2,
58 [[maybe_unused]] const SelfParticle& arr,
59 [[maybe_unused]] const SelfParticle& buffer_arr)
60 {
61 }
62
63 KOKKOS_INLINE_FUNCTION static void
64 contribution([[maybe_unused]] std::size_t idx,
65 [[maybe_unused]] std::size_t position,
66 [[maybe_unused]] double weight,
67 [[maybe_unused]] const SelfParticle& arr,
68 [[maybe_unused]] const MC::ContributionView& contributions)
69 {
70 }
71};
72static_assert(ModelType<SerdeModel>, "Check non serde model");
73
74
75
76#endif
Kokkos::Random_XorShift1024_Pool< Kokkos::DefaultExecutionSpace > pool_type
Definition prng.hpp:17
Model type.
Definition traits.hpp:130
Kokkos::Subview< KernelConcentrationType, int, decltype(Kokkos::ALL)> LocalConcentration
Definition alias.hpp:42
Kokkos::Experimental::ScatterView< double **, Kokkos::LayoutRight > ContributionView
Definition alias.hpp:31
Kokkos::View< F *[Nd]> ParticlesModel
Definition traits.hpp:34
Status
Definition alias.hpp:11
Definition serdes_class.hpp:10
static constexpr std::string_view name
Definition serdes_class.hpp:25
static constexpr std::size_t n_var
Definition serdes_class.hpp:24
static KOKKOS_INLINE_FUNCTION void init(const MC::KPRNG::pool_type &random_pool, std::size_t idx, const SelfParticle &arr)
Definition serdes_class.hpp:30
particle_var
Definition serdes_class.hpp:17
static KOKKOS_INLINE_FUNCTION MC::Status update(const MC::KPRNG::pool_type &random_pool, FloatType d_t, std::size_t idx, const SelfParticle &arr, const MC::LocalConcentration &c)
Definition serdes_class.hpp:44
std::nullopt_t Config
Definition serdes_class.hpp:14
static KOKKOS_INLINE_FUNCTION void division(const MC::KPRNG::pool_type &random_pool, std::size_t idx, std::size_t idx2, const SelfParticle &arr, const SelfParticle &buffer_arr)
Definition serdes_class.hpp:55
float FloatType
Definition serdes_class.hpp:13
static KOKKOS_INLINE_FUNCTION void contribution(std::size_t idx, std::size_t position, double weight, const SelfParticle &arr, const MC::ContributionView &contributions)
Definition serdes_class.hpp:64
MC::ParticlesModel< Self::n_var, Self::FloatType > SelfParticle
Definition serdes_class.hpp:26
std::true_type uniform_weight
Definition serdes_class.hpp:11
static KOKKOS_INLINE_FUNCTION double mass(std::size_t idx, const SelfParticle &arr)
Definition serdes_class.hpp:37
MODEL_CONSTANT FloatType a_i
Definition serdes_class.hpp:28