BioCMAMC-ST
m_default.hpp
1#ifndef __DEFAULT_MODEL_IMPLEMENTATION_HPP__
2#define __DEFAULT_MODEL_IMPLEMENTATION_HPP__
3
4#include <mc/alias.hpp>
5#include <mc/traits.hpp>
6#include <optional>
7
8/***
9DEFAULT MODEL IMPLEMENTATION
10***/
11
13{
14 enum class particle_var : int
15 {
16 a = 0,
17 };
18 static constexpr std::size_t n_var = 1;
19 static constexpr std::size_t n_c = 1;
20 static constexpr std::string_view name = "default_dynamic";
21 using uniform_weight = std::true_type; // Using type alias
23 using FloatType = float;
26 using Config = std::nullopt_t;
27 static constexpr bool uniform_weigth = false;
28
29 KOKKOS_INLINE_FUNCTION static void
30 init([[maybe_unused]] const MC::pool_type& random_pool,
31 [[maybe_unused]] std::size_t idx,
32 [[maybe_unused]] const SelfParticle& arr)
33 {
34 }
35
36 KOKKOS_INLINE_FUNCTION static double
37 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::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 SelfContribs& contribs_arr,
49 [[maybe_unused]] const std::size_t position_index,
50 [[maybe_unused]] const MC::LocalConcentration& c)
51 {
52
53 return MC::Status::Idle;
54 }
55
56 KOKKOS_INLINE_FUNCTION static void
57 division([[maybe_unused]] const MC::pool_type& random_pool,
58 [[maybe_unused]] std::size_t idx,
59 [[maybe_unused]] std::size_t idx2,
60 [[maybe_unused]] const SelfParticle& arr,
61 [[maybe_unused]] const SelfParticle& buffer_arr)
62 {
63 }
64
66 {
67 return { 0, 0 };
68 }
69};
70
71CHECK_MODEL(DefaultModel)
72
73/*
74 Dynamic Model (with size not known at compile time)
75*/
76
78{
79 enum class particle_var : int
80 {
81 a = 0,
82 };
83
84 static constexpr std::size_t n_var = 1;
85 static constexpr std::size_t n_c = 2;
86 static constexpr std::string_view name = "default_dynamic";
87 using uniform_weight = std::true_type; // Using type alias
89 using FloatType = float;
92 using Config = float;
93 static constexpr bool uniform_weigth = false;
94
95 static Config
96 get_config(const std::size_t size)
97 {
98 (void)size;
99 return 1.;
100 };
101
102 KOKKOS_INLINE_FUNCTION static void
103 init([[maybe_unused]] const MC::pool_type& random_pool,
104 [[maybe_unused]] std::size_t idx,
105 [[maybe_unused]] const SelfParticle& arr,
106 [[maybe_unused]] const Config& config)
107 {
108 }
109
110 KOKKOS_INLINE_FUNCTION static double
111 mass([[maybe_unused]] std::size_t idx,
112 [[maybe_unused]] const SelfParticle& arr)
113 {
114 return 1.;
115 }
116
117 KOKKOS_INLINE_FUNCTION static MC::Status
118 update([[maybe_unused]] const MC::pool_type& random_pool,
119 [[maybe_unused]] FloatType d_t,
120 [[maybe_unused]] std::size_t idx,
121 [[maybe_unused]] const SelfParticle& arr,
122 [[maybe_unused]] const SelfContribs& contribs_arr,
123 [[maybe_unused]] const std::size_t position_index,
124 [[maybe_unused]] const MC::LocalConcentration& c)
125 {
126
127 return MC::Status::Idle;
128 }
129
131 {
132 return { 0, 0 };
133 }
134
135 KOKKOS_INLINE_FUNCTION static void
136 division([[maybe_unused]] const MC::pool_type& random_pool,
137 [[maybe_unused]] std::size_t idx,
138 [[maybe_unused]] std::size_t idx2,
139 [[maybe_unused]] const SelfParticle& arr,
140 [[maybe_unused]] const SelfParticle& buffer_arr)
141 {
142 }
143};
144
145CHECK_MODEL(DynamicDefaultModel)
146
147#endif
Kokkos::View< F **, ComputeSpace::array_layout, ComputeSpace, Kokkos::MemoryTraits< Kokkos::MemoryTraitsFlags::Restrict > > DynParticlesContribs
Definition alias.hpp:78
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 *[Nd], ComputeSpace::array_layout, ComputeSpace, Kokkos::MemoryTraits< Kokkos::MemoryTraitsFlags::Restrict > > ParticlesModel
Definition alias.hpp:52
Kokkos::View< F **, ComputeSpace::array_layout, ComputeSpace, Kokkos::MemoryTraits< Kokkos::MemoryTraitsFlags::Restrict > > DynParticlesModel
Definition alias.hpp:72
Definition m_default.hpp:13
static constexpr std::size_t n_c
Definition m_default.hpp:19
float FloatType
Definition m_default.hpp:23
static MC::ContribIndexBounds get_bounds()
Definition m_default.hpp:65
DefaultModel Self
Definition m_default.hpp:22
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 &contribs_arr, const std::size_t position_index, const MC::LocalConcentration &c)
Definition m_default.hpp:44
static KOKKOS_INLINE_FUNCTION void init(const MC::pool_type &random_pool, std::size_t idx, const SelfParticle &arr)
Definition m_default.hpp:30
static KOKKOS_INLINE_FUNCTION double mass(std::size_t idx, const SelfParticle &arr)
Definition m_default.hpp:37
static constexpr std::size_t n_var
Definition m_default.hpp:18
std::true_type uniform_weight
Definition m_default.hpp:21
static constexpr bool uniform_weigth
Definition m_default.hpp:27
MC::ParticlesModel< Self::n_var, Self::FloatType > SelfParticle
Definition m_default.hpp:24
particle_var
Definition m_default.hpp:15
@ a
Definition m_default.hpp:16
static constexpr std::string_view name
Definition m_default.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 m_default.hpp:57
std::nullopt_t Config
Definition m_default.hpp:26
MC::ParticlesModel< Self::n_c, Self::FloatType > SelfContribs
Definition m_default.hpp:25
Definition m_default.hpp:78
static constexpr bool uniform_weigth
Definition m_default.hpp:93
MC::DynParticlesContribs< FloatType > SelfContribs
Definition m_default.hpp:91
static constexpr std::string_view name
Definition m_default.hpp:86
static Config get_config(const std::size_t size)
Definition m_default.hpp:96
static constexpr std::size_t n_c
Definition m_default.hpp:85
static constexpr std::size_t n_var
Definition m_default.hpp:84
DynamicDefaultModel Self
Definition m_default.hpp:88
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 &contribs_arr, const std::size_t position_index, const MC::LocalConcentration &c)
Definition m_default.hpp:118
static MC::ContribIndexBounds get_bounds()
Definition m_default.hpp:130
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 m_default.hpp:136
static KOKKOS_INLINE_FUNCTION double mass(std::size_t idx, const SelfParticle &arr)
Definition m_default.hpp:111
float FloatType
Definition m_default.hpp:89
particle_var
Definition m_default.hpp:80
@ a
Definition m_default.hpp:81
static KOKKOS_INLINE_FUNCTION void init(const MC::pool_type &random_pool, std::size_t idx, const SelfParticle &arr, const Config &config)
Definition m_default.hpp:103
MC::DynParticlesModel< FloatType > SelfParticle
Definition m_default.hpp:90
std::true_type uniform_weight
Definition m_default.hpp:87
float Config
Definition m_default.hpp:92
Definition alias.hpp:133