BioCMAMC-ST
udf_includes.hpp
1#ifndef __BIO__EXT_MODULE_DEF__
2#define __BIO__EXT_MODULE_DEF__
3
4#include "Kokkos_Core_fwd.hpp"
5#include <string_view>
6#include <utility>
7#ifdef DECLARE_EXPORT_UDF
8# include <dynlib/dyn_module.hpp>
9# include <dynlib/dynlib.hpp>
10# include <memory>
11#endif
12#include <Kokkos_Core.hpp>
13#include <mc/prng/prng.hpp>
14#include <mc/traits.hpp>
15#include <models/udf_model.hpp>
16
21namespace UnsafeUDF
22{
27 struct Loader
28 {
29 static std::size_t (*set_nvar_udf)();
30 static std::size_t (*set_nc_udf)();
31
32 static void (*init_udf)(
33 const MC::pool_type& random_pool,
34 std::size_t idx,
36 const Models::UdfModel::Config& config); //< init function ptr
37
39 const MC::pool_type& random_pool,
40 float d_t,
41 std::size_t idx,
43 const Models::UdfModel::SelfContribs& arr_contribs,
44 const std::size_t position_index,
45 const MC::LocalConcentration& c); //< update function ptr
46
48 Kokkos::DefaultHostExecutionSpace& ep, std::size_t n);
49
50 static void (*division_udf)(const MC::pool_type& random_pool,
51 std::size_t idx,
52 std::size_t idx2,
55 buffer_arr); //< division function ptr
56
57 static double (*mass)(
58 std::size_t idx,
59 const MC::DynParticlesModel<float>& arr); //< mass function ptr
60
61 static std::vector<std::string_view> (*names)();
62
63 static std::vector<std::size_t> (*get_number)();
64
65 static std::vector<std::string_view> (*species)();
66
67 // static std::vector<std::string> (*names)(); //< names function ptr
68
69#ifdef DECLARE_EXPORT_UDF
73 [[nodiscard]] static std::shared_ptr<DynamicLibrary>
74 init_lib(std::string_view path);
75#endif
76 };
77
78} // namespace UnsafeUDF
79
80#ifdef DECLARE_EXPORT_UDF
81
82using init_udf_ptr
83 = decltype(UnsafeUDF::Loader::init_udf); //< init function ptr type
84using update_udf_ptr
85 = decltype(UnsafeUDF::Loader::update_udf); //< update function ptr type
86
87using get_config_udf_ptr = decltype(UnsafeUDF::Loader::get_config_udf);
88
89using division_udf_ptr
90 = decltype(UnsafeUDF::Loader::division_udf); //< division function ptr type
91using mass_udf_ptr
92 = decltype(UnsafeUDF::Loader::mass); //< mass function ptr type
93using set_nvar_udf_ptr
94 = decltype(UnsafeUDF::Loader::set_nvar_udf); //< nvar function ptr type
95
96using set_nc_udf_ptr
97 = decltype(UnsafeUDF::Loader::set_nc_udf); //< nc function ptr type
98
99using names_udf_ptr
100 = decltype(UnsafeUDF::Loader::names); //< names function ptr type
101using get_number_udf_ptr
102 = decltype(UnsafeUDF::Loader::get_number); //< division function ptr type
103
104using species_udf_ptr
105 = decltype(UnsafeUDF::Loader::species); //< division function ptr type
106
107// clang-format off
111DEFINE_MODULE(
112 MODULE_ITEM(init_udf)
113 MODULE_ITEM(update_udf)
114 MODULE_ITEM(division_udf)
115 MODULE_ITEM(mass_udf)
116 MODULE_ITEM(names_udf)
117 MODULE_ITEM(get_number_udf)
118 MODULE_ITEM(set_nvar_udf)
119 MODULE_ITEM(set_nc_udf)
120 MODULE_ITEM(get_config_udf)
121 MODULE_ITEM(species_udf)
122 )
123// clang-format on
124#endif
125
126#endif
Status
Definition alias.hpp:125
gen_pool_type< Kokkos::DefaultExecutionSpace > pool_type
Definition alias.hpp:100
KernelConcentrationType LocalConcentration
Definition alias.hpp:170
Kokkos::View< F **, ComputeSpace::array_layout, ComputeSpace, Kokkos::MemoryTraits< Kokkos::MemoryTraitsFlags::Restrict > > DynParticlesModel
Definition alias.hpp:72
Unsafe namespace to handle UDF (User-defined function) via dynamic library loading.
Definition udf_includes.hpp:22
Kokkos::View< float ** > Config
Definition udf_model.hpp:20
MC::DynParticlesModel< FloatType > SelfParticle
Definition udf_model.hpp:18
MC::DynParticlesContribs< FloatType > SelfContribs
Definition udf_model.hpp:19
Static class to access to low-level configuration to load dynamic library.
Definition udf_includes.hpp:28
static std::vector< std::string_view >(* species)()
Definition udf_includes.hpp:65
static std::vector< std::string_view >(* names)()
Definition udf_includes.hpp:61
static MC::Status(* update_udf)(const MC::pool_type &random_pool, float d_t, std::size_t idx, const Models::UdfModel::SelfParticle &arr, const Models::UdfModel::SelfContribs &arr_contribs, const std::size_t position_index, const MC::LocalConcentration &c)
Definition udf_includes.hpp:38
static Models::UdfModel::Config(* get_config_udf)(Kokkos::DefaultHostExecutionSpace &ep, std::size_t n)
Definition udf_includes.hpp:47
static void(* init_udf)(const MC::pool_type &random_pool, std::size_t idx, const Models::UdfModel::SelfParticle &arr, const Models::UdfModel::Config &config)
Definition udf_includes.hpp:32
static void(* division_udf)(const MC::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:50
static std::size_t(* set_nvar_udf)()
Definition udf_includes.hpp:29
static std::vector< std::size_t >(* get_number)()
Definition udf_includes.hpp:63
static double(* mass)(std::size_t idx, const MC::DynParticlesModel< float > &arr)
Definition udf_includes.hpp:57
static std::size_t(* set_nc_udf)()
Definition udf_includes.hpp:30