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