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::KPRNG::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::KPRNG::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::KPRNG::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 get_config(const std::size_t size)
98 {
99 (void)size;
100 return 1.;
101 };
102
103 KOKKOS_INLINE_FUNCTION static void
104 init([[maybe_unused]] const MC::KPRNG::pool_type& random_pool,
105 [[maybe_unused]] std::size_t idx,
106 [[maybe_unused]] const SelfParticle& arr,
107 [[maybe_unused]] const Config& config)
108 {
109 }
110
111 KOKKOS_INLINE_FUNCTION static double
112 mass([[maybe_unused]] std::size_t idx,
113 [[maybe_unused]] const SelfParticle& arr)
114 {
115 return 1.;
116 }
117
118 KOKKOS_INLINE_FUNCTION static MC::Status
119 update([[maybe_unused]] const MC::KPRNG::pool_type& random_pool,
120 [[maybe_unused]] FloatType d_t,
121 [[maybe_unused]] std::size_t idx,
122 [[maybe_unused]] const SelfParticle& arr,
123 [[maybe_unused]] const MC::LocalConcentration& c)
124 {
125
126 return MC::Status::Idle;
127 }
128
130 {
131 return {0, 0};
132 }
133
134 KOKKOS_INLINE_FUNCTION static void
135 division([[maybe_unused]] const MC::KPRNG::pool_type& random_pool,
136 [[maybe_unused]] std::size_t idx,
137 [[maybe_unused]] std::size_t idx2,
138 [[maybe_unused]] const SelfParticle& arr,
139 [[maybe_unused]] const SelfParticle& buffer_arr)
140 {
141 }
142
143 KOKKOS_INLINE_FUNCTION static void
144 contribution([[maybe_unused]] std::size_t idx,
145 [[maybe_unused]] std::size_t position,
146 [[maybe_unused]] double weight,
147 [[maybe_unused]] const SelfParticle& arr,
148 [[maybe_unused]] const MC::ContributionView& contributions)
149 {
150 }
151};
152
153CHECK_MODEL(DynamicDefaultModel)
154
155#endif
Kokkos::Random_XorShift1024_Pool< Kokkos::DefaultExecutionSpace > pool_type
Definition prng.hpp:33
Status
Definition alias.hpp:37
@ Idle
Definition alias.hpp:38
decltype(Kokkos::Experimental::create_scatter_view(kernelContribution())) ContributionView
Definition alias.hpp:64
Kokkos::Subview< KernelConcentrationType, int, decltype(Kokkos::ALL)> LocalConcentration
Definition alias.hpp:72
Kokkos::View< F *[Nd], Kokkos::LayoutRight > ParticlesModel
Definition traits.hpp:34
Kokkos::View< F **, Kokkos::LayoutRight > DynParticlesModel
Definition traits.hpp:36
Definition m_default.hpp:13
static KOKKOS_INLINE_FUNCTION void init(const MC::KPRNG::pool_type &random_pool, std::size_t idx, const SelfParticle &arr)
Definition m_default.hpp:28
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 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 m_default.hpp:42
static MC::ContribIndexBounds get_bounds()
Definition m_default.hpp:69
DefaultModel Self
Definition m_default.hpp:21
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
std::nullopt_t Config
Definition m_default.hpp:24
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 m_default.hpp:53
Definition m_default.hpp:82
static constexpr bool uniform_weigth
Definition m_default.hpp:95
static KOKKOS_INLINE_FUNCTION void init(const MC::KPRNG::pool_type &random_pool, std::size_t idx, const SelfParticle &arr, const Config &config)
Definition m_default.hpp:104
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:144
static Config get_config(const std::size_t size)
Definition m_default.hpp:97
static constexpr std::size_t n_var
Definition m_default.hpp:88
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 m_default.hpp:135
DynamicDefaultModel Self
Definition m_default.hpp:91
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 m_default.hpp:119
static MC::ContribIndexBounds get_bounds()
Definition m_default.hpp:129
static KOKKOS_INLINE_FUNCTION double mass(std::size_t idx, const SelfParticle &arr)
Definition m_default.hpp:112
float FloatType
Definition m_default.hpp:92
particle_var
Definition m_default.hpp:84
@ a
Definition m_default.hpp:85
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:45