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::string_view name = "default_dynamic";
20 using uniform_weight = std::true_type; // Using type alias
22 using FloatType = float;
24 using Config = std::nullopt_t;
25 static constexpr bool uniform_weigth = false;
26
27 KOKKOS_INLINE_FUNCTION static void
28 init([[maybe_unused]] const MC::pool_type& random_pool,
29 [[maybe_unused]] std::size_t idx,
30 [[maybe_unused]] const SelfParticle& arr)
31 {
32 }
33
34 KOKKOS_INLINE_FUNCTION static double
35 mass([[maybe_unused]] std::size_t idx,
36 [[maybe_unused]] const SelfParticle& arr)
37 {
38 return 1.;
39 }
40
41 KOKKOS_INLINE_FUNCTION static MC::Status
42 update([[maybe_unused]] const MC::pool_type& random_pool,
43 [[maybe_unused]] FloatType d_t,
44 [[maybe_unused]] std::size_t idx,
45 [[maybe_unused]] const SelfParticle& arr,
46 [[maybe_unused]] const MC::LocalConcentration& c)
47 {
48
49 return MC::Status::Idle;
50 }
51
52 KOKKOS_INLINE_FUNCTION static void
53 division([[maybe_unused]] const MC::pool_type& random_pool,
54 [[maybe_unused]] std::size_t idx,
55 [[maybe_unused]] std::size_t idx2,
56 [[maybe_unused]] const SelfParticle& arr,
57 [[maybe_unused]] const SelfParticle& buffer_arr)
58 {
59 }
60
61 KOKKOS_INLINE_FUNCTION static void
62 contribution([[maybe_unused]] std::size_t idx,
63 [[maybe_unused]] std::size_t position,
64 [[maybe_unused]] double weight,
65 [[maybe_unused]] const SelfParticle& arr,
66 [[maybe_unused]] const MC::ContributionView& contributions)
67 {
68 }
70 {
71 return { 0, 0 };
72 }
73};
74
75CHECK_MODEL(DefaultModel)
76
77/*
78 Dynamic Model (with size not known at compile time)
79*/
80
82{
83 enum class particle_var : int
84 {
85 a = 0,
86 };
87
88 static constexpr std::size_t n_var = 1;
89 static constexpr std::string_view name = "default_dynamic";
90 using uniform_weight = std::true_type; // Using type alias
92 using FloatType = float;
94 using Config = float;
95 static constexpr bool uniform_weigth = false;
96
97 static Config
98 get_config(const std::size_t size)
99 {
100 (void)size;
101 return 1.;
102 };
103
104 KOKKOS_INLINE_FUNCTION static void
105 init([[maybe_unused]] const MC::pool_type& random_pool,
106 [[maybe_unused]] std::size_t idx,
107 [[maybe_unused]] const SelfParticle& arr,
108 [[maybe_unused]] const Config& config)
109 {
110 }
111
112 KOKKOS_INLINE_FUNCTION static double
113 mass([[maybe_unused]] std::size_t idx,
114 [[maybe_unused]] const SelfParticle& arr)
115 {
116 return 1.;
117 }
118
119 KOKKOS_INLINE_FUNCTION static MC::Status
120 update([[maybe_unused]] const MC::pool_type& random_pool,
121 [[maybe_unused]] FloatType d_t,
122 [[maybe_unused]] std::size_t idx,
123 [[maybe_unused]] const SelfParticle& arr,
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 KOKKOS_INLINE_FUNCTION static void
145 contribution([[maybe_unused]] std::size_t idx,
146 [[maybe_unused]] std::size_t position,
147 [[maybe_unused]] double weight,
148 [[maybe_unused]] const SelfParticle& arr,
149 [[maybe_unused]] const MC::ContributionView& contributions)
150 {
151 }
152};
153
154CHECK_MODEL(DynamicDefaultModel)
155
156#endif
Kokkos::Subview< KernelConcentrationType, int, decltype(Kokkos::ALL)> LocalConcentration
Definition alias.hpp:95
decltype(Kokkos::Experimental::create_scatter_view( kernelContribution())) ContributionView
Definition alias.hpp:88
Status
Definition alias.hpp:58
@ Idle
Definition alias.hpp:59
gen_pool_type< Kokkos::DefaultExecutionSpace > pool_type
Definition alias.hpp:39
Kokkos::View< F *[Nd], Kokkos::LayoutRight > ParticlesModel
Definition alias.hpp:19
Kokkos::View< F **, Kokkos::LayoutRight > DynParticlesModel
Definition alias.hpp:21
Definition m_default.hpp:13
float FloatType
Definition m_default.hpp:22
static KOKKOS_INLINE_FUNCTION void contribution(std::size_t idx, std::size_t position, double weight, const SelfParticle &arr, const MC::ContributionView &contributions)
Definition m_default.hpp:62
static MC::ContribIndexBounds get_bounds()
Definition m_default.hpp:69
DefaultModel Self
Definition m_default.hpp:21
static KOKKOS_INLINE_FUNCTION void init(const MC::pool_type &random_pool, std::size_t idx, const SelfParticle &arr)
Definition m_default.hpp:28
static KOKKOS_INLINE_FUNCTION double mass(std::size_t idx, const SelfParticle &arr)
Definition m_default.hpp:35
static constexpr std::size_t n_var
Definition m_default.hpp:18
std::true_type uniform_weight
Definition m_default.hpp:20
static constexpr bool uniform_weigth
Definition m_default.hpp:25
MC::ParticlesModel< Self::n_var, Self::FloatType > SelfParticle
Definition m_default.hpp:23
particle_var
Definition m_default.hpp:15
@ a
Definition m_default.hpp:16
static constexpr std::string_view name
Definition m_default.hpp:19
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:53
std::nullopt_t Config
Definition m_default.hpp:24
static KOKKOS_INLINE_FUNCTION MC::Status update(const MC::pool_type &random_pool, FloatType d_t, std::size_t idx, const SelfParticle &arr, const MC::LocalConcentration &c)
Definition m_default.hpp:42
Definition m_default.hpp:82
static constexpr bool uniform_weigth
Definition m_default.hpp:95
static KOKKOS_INLINE_FUNCTION MC::Status update(const MC::pool_type &random_pool, FloatType d_t, std::size_t idx, const SelfParticle &arr, const MC::LocalConcentration &c)
Definition m_default.hpp:120
static constexpr std::string_view name
Definition m_default.hpp:89
static KOKKOS_INLINE_FUNCTION void contribution(std::size_t idx, std::size_t position, double weight, const SelfParticle &arr, const MC::ContributionView &contributions)
Definition m_default.hpp:145
static Config get_config(const std::size_t size)
Definition m_default.hpp:98
static constexpr std::size_t n_var
Definition m_default.hpp:88
DynamicDefaultModel Self
Definition m_default.hpp:91
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:113
float FloatType
Definition m_default.hpp:92
particle_var
Definition m_default.hpp:84
@ a
Definition m_default.hpp:85
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:105
MC::DynParticlesModel< FloatType > SelfParticle
Definition m_default.hpp:93
std::true_type uniform_weight
Definition m_default.hpp:90
float Config
Definition m_default.hpp:94
Definition alias.hpp:66