BioCMAMC-ST
udf_includes.hpp
1#ifndef __BIO__EXT_MODULE_DEF__
2#define __BIO__EXT_MODULE_DEF__
3
4#include <utility>
5#ifdef DECLARE_EXPORT_UDF
6# include <dynlib/dyn_module.hpp>
7# include <dynlib/dynlib.hpp>
8# include <memory>
9#endif
10#include <Kokkos_Core.hpp>
11#include <mc/prng/prng.hpp>
12#include <mc/traits.hpp>
13#include <models/udf_model.hpp>
14
19namespace UnsafeUDF
20{
25 struct Loader
26 {
27 static std::size_t (*set_nvar_udf)();
28
29 static void (*init_udf)(
30 const MC::KPRNG::pool_type& random_pool,
31 std::size_t idx,
33 const Models::UdfModel::Config& config); //< init function ptr
34
36 const MC::KPRNG::pool_type& random_pool,
37 float d_t,
38 std::size_t idx,
40 const MC::LocalConcentration& c); //< update function ptr
41
43
44 static Models::UdfModel::Config (*get_config_udf)(std::size_t n);
45
46 static void (*division_udf)(const MC::KPRNG::pool_type& random_pool,
47 std::size_t idx,
48 std::size_t idx2,
51 buffer_arr); //< division function ptr
52
53 static double (*mass)(
54 std::size_t idx,
55 const MC::DynParticlesModel<float>& arr); //< mass function ptr
56
57 static std::vector<std::string_view> (*names)();
58
59 static std::vector<std::size_t> (*get_number)();
60
61 // static std::vector<std::string> (*names)(); //< names function ptr
62
63#ifdef DECLARE_EXPORT_UDF
67 [[nodiscard]] static std::shared_ptr<DynamicLibrary>
68 init_lib(std::string_view path);
69#endif
70 };
71
72} // namespace UnsafeUDF
73
74#ifdef DECLARE_EXPORT_UDF
75
76using init_udf_ptr =
77 decltype(UnsafeUDF::Loader::init_udf); //< init function ptr type
78using update_udf_ptr =
79 decltype(UnsafeUDF::Loader::update_udf); //< update function ptr type
80
81using get_bounds_udf_ptr = decltype(UnsafeUDF::Loader::get_bounds_udf);
82
83using get_config_udf_ptr = decltype(UnsafeUDF::Loader::get_config_udf);
84
85using division_udf_ptr =
86 decltype(UnsafeUDF::Loader::division_udf); //< division function ptr type
87using mass_udf_ptr = decltype(UnsafeUDF::Loader::mass);
88using set_nvar_udf_ptr =
89 decltype(UnsafeUDF::Loader::set_nvar_udf); //< division function ptr type
90
91using names_udf_ptr = decltype(UnsafeUDF::Loader::names);
92using get_number_udf_ptr =
93 decltype(UnsafeUDF::Loader::get_number); //< division function ptr type
94
95// clang-format off
99DEFINE_MODULE(
100 MODULE_ITEM(init_udf)
101 MODULE_ITEM(update_udf)
102 MODULE_ITEM(division_udf)
103 MODULE_ITEM(mass_udf)
104 MODULE_ITEM(names_udf)
105 MODULE_ITEM(get_number_udf)
106 MODULE_ITEM(set_nvar_udf)
107 MODULE_ITEM(get_bounds_udf)
108 MODULE_ITEM(get_config_udf)
109 )
110// clang-format on
111#endif
112
113#endif
Kokkos::Random_XorShift1024_Pool< Kokkos::DefaultExecutionSpace > pool_type
Definition prng.hpp:33
Status
Definition alias.hpp:37
Kokkos::Subview< KernelConcentrationType, int, decltype(Kokkos::ALL)> LocalConcentration
Definition alias.hpp:72
Kokkos::View< F **, Kokkos::LayoutRight > DynParticlesModel
Definition traits.hpp:36
Unsafe namespace to handle UDF (User-defined function) via dynamic library loading.
Definition udf_includes.hpp:20
Definition alias.hpp:45
Kokkos::View< float ** > Config
Definition udf_model.hpp:17
MC::DynParticlesModel< FloatType > SelfParticle
Definition udf_model.hpp:16
Static class to access to low-level configuration to load dynamic library.
Definition udf_includes.hpp:26
static std::vector< std::string_view >(* names)()
Definition udf_includes.hpp:57
static Models::UdfModel::Config(* get_config_udf)(std::size_t n)
Definition udf_includes.hpp:44
static MC::ContribIndexBounds(* get_bounds_udf)()
Definition udf_includes.hpp:42
static std::size_t(* set_nvar_udf)()
Definition udf_includes.hpp:27
static std::vector< std::size_t >(* get_number)()
Definition udf_includes.hpp:59
static double(* mass)(std::size_t idx, const MC::DynParticlesModel< float > &arr)
Definition udf_includes.hpp:53
static MC::Status(* update_udf)(const MC::KPRNG::pool_type &random_pool, float d_t, std::size_t idx, const Models::UdfModel::SelfParticle &arr, const MC::LocalConcentration &c)
Definition udf_includes.hpp:35
static void(* division_udf)(const MC::KPRNG::pool_type &random_pool, std::size_t idx, std::size_t idx2, const MC::DynParticlesModel< float > &arr, const MC::DynParticlesModel< float > &buffer_arr)
Definition udf_includes.hpp:46
static void(* init_udf)(const MC::KPRNG::pool_type &random_pool, std::size_t idx, const Models::UdfModel::SelfParticle &arr, const Models::UdfModel::Config &config)
Definition udf_includes.hpp:29