BioCMAMC-ST
udf_model.hpp
1// #ifdef DECLARE_EXPORT_UDF
2#ifndef __BIO_MODEL_USER_HPP__
3# define __BIO_MODEL_USER_HPP__
4# include <mc/traits.hpp>
5
6namespace Models
7{
8 struct UdfModel
9 {
10
11 static std::size_t n_var;
12 static constexpr std::string_view name = "udf_model";
13 using uniform_weight = std::true_type; // Using type alias
14 using Self = UdfModel;
15 using FloatType = float;
17 using Config = Kokkos::View<float**>;
18
19 KOKKOS_FUNCTION static void
20 init([[maybe_unused]] const MC::KPRNG::pool_type& random_pool,
21 [[maybe_unused]] std::size_t idx,
22 [[maybe_unused]] const SelfParticle& arr,
23 const Self::Config& config);
24
25 KOKKOS_FUNCTION static double
26 mass([[maybe_unused]] std::size_t idx,
27 [[maybe_unused]] const SelfParticle& arr);
28
30
31 static Self::Config get_config(std::size_t n);
32
33 KOKKOS_FUNCTION static MC::Status
34 update([[maybe_unused]] const MC::KPRNG::pool_type& random_pool,
35 [[maybe_unused]] FloatType d_t,
36 [[maybe_unused]] std::size_t idx,
37 [[maybe_unused]] const SelfParticle& arr,
38 [[maybe_unused]] const MC::LocalConcentration& c);
39
40 KOKKOS_FUNCTION static void
41 division([[maybe_unused]] const MC::KPRNG::pool_type& random_pool,
42 [[maybe_unused]] std::size_t idx,
43 [[maybe_unused]] std::size_t idx2,
44 [[maybe_unused]] const SelfParticle& arr,
45 [[maybe_unused]] const SelfParticle& buffer_arr);
46
47 KOKKOS_FUNCTION static void
48 contribution([[maybe_unused]] std::size_t idx,
49 [[maybe_unused]] std::size_t position,
50 [[maybe_unused]] double weight,
51 [[maybe_unused]] const SelfParticle& arr,
52 [[maybe_unused]] const MC::ContributionView& contributions);
53
54 static std::vector<std::string_view> names();
55
56 static std::vector<std::size_t> get_number();
57
58 static void set_nvar();
59 };
60 inline std::size_t UdfModel::n_var = 0; // Need to be overwritte
61 static_assert(ModelType<UdfModel>, "Check Pimpl");
62 static_assert(ConfigurableModel<UdfModel>, "Check Pimpl");
63 static_assert(HasExportProperties<UdfModel>, "Check Pimpl");
64} // namespace Models
65
66#endif
67// #endif
Kokkos::Random_XorShift1024_Pool< Kokkos::DefaultExecutionSpace > pool_type
Definition prng.hpp:33
Definition traits.hpp:154
Model that can export properties.
Definition traits.hpp:178
Model type.
Definition traits.hpp:148
Status
Definition alias.hpp:37
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 **, Kokkos::LayoutRight > DynParticlesModel
Definition traits.hpp:36
Models definition.
Definition config_loader.hpp:9
Definition alias.hpp:45
Definition udf_model.hpp:9
static MC::ContribIndexBounds get_bounds()
Definition udfmodel_user.cpp:56
Kokkos::View< float ** > Config
Definition udf_model.hpp:17
static KOKKOS_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 udfmodel_user.cpp:27
static std::vector< std::size_t > get_number()
Definition udfmodel_user.cpp:67
static void set_nvar()
Definition udfmodel_user.cpp:46
static constexpr std::string_view name
Definition udf_model.hpp:12
static KOKKOS_FUNCTION void init(const MC::KPRNG::pool_type &random_pool, std::size_t idx, const SelfParticle &arr, const Self::Config &config)
Definition udfmodel_user.cpp:12
MC::DynParticlesModel< FloatType > SelfParticle
Definition udf_model.hpp:16
static KOKKOS_FUNCTION void contribution(std::size_t idx, std::size_t position, double weight, const SelfParticle &arr, const MC::ContributionView &contributions)
float FloatType
Definition udf_model.hpp:15
UdfModel Self
Definition udf_model.hpp:14
static KOKKOS_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 udfmodel_user.cpp:37
std::true_type uniform_weight
Definition udf_model.hpp:13
static Self::Config get_config(std::size_t n)
Definition udfmodel_user.cpp:61
static KOKKOS_FUNCTION double mass(std::size_t idx, const SelfParticle &arr)
Definition udfmodel_user.cpp:20
static std::size_t n_var
Definition udf_model.hpp:11
static std::vector< std::string_view > names()
Definition udfmodel_user.cpp:51