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