BioCMAMC-ST
unit.hpp
1#ifndef __MC_UNIT_HPP__
2#define __MC_UNIT_HPP__
3
4#include <variant_model.hpp>
5#include <mc/domain.hpp>
6#include <mc/events.hpp>
7#include <mc/particles_container.hpp>
8#include <mc/prng/prng.hpp>
9#include <mc/traits.hpp>
10#include <models/two_meta.hpp>
11#include <variant>
12
14{
15 KOKKOS_FUNCTION void operator()(const Kokkos::TeamPolicy<ComputeSpace>::member_type& team_handle,
16 int& dead_count) const
17 {
18 (void)team_handle;
19 (void)dead_count;
20 }
21 TagDetector() = default;
22};
23
33namespace MC
34{
35
36 template <typename FunctorType>
37 Kokkos::TeamPolicy<ComputeSpace>
38 get_policy(FunctorType& f, std::size_t range, bool reduce = false)
39 {
40 (void)f;
41 (void)reduce;
42 Kokkos::TeamPolicy<ComputeSpace> _policy;
43 // int recommended_team_size = (reduce)
44 // ? _policy.team_size_recommended(f,
45 // Kokkos::ParallelReduceTag()) :
46 // _policy.team_size_recommended(f, Kokkos::ParallelForTag());
47
48 int recommended_team_size =
49 _policy.team_size_recommended(TagDetector(), Kokkos::ParallelReduceTag());
50 int league_size = (static_cast<int>(range) + recommended_team_size - 1) / recommended_team_size;
51
52 _policy = Kokkos::TeamPolicy<ComputeSpace>(league_size, recommended_team_size);
53
54 // std::cout << "Policy(" << league_size << "," << recommended_team_size << ")" << std::endl;
55 return _policy;
56 }
57
67 {
70
71 // AutoGenerated::ContainerVariant
72 // container; ///< Variant container holding various simulation entities
73
74 AutoGenerated::ContainerVariant container;
75
77 double init_weight{};
78
79 MonteCarloUnit(const MonteCarloUnit&) = delete;
81 operator=(const MonteCarloUnit&) = delete;
83 operator=(MonteCarloUnit&&) noexcept = default;
84 MonteCarloUnit(MonteCarloUnit&&) noexcept = default;
85
86 MonteCarloUnit() = default;
87 ~MonteCarloUnit() = default;
88
89 [[nodiscard]] uint64_t n_particle() const;
90
91 [[nodiscard]] std::vector<uint64_t> getRepartition() const;
92
93 template <class Archive> void serialize(Archive& ar)
94 {
96 std::visit([&ar](auto& container) { ar(container); }, container);
97 }
98 };
99
100} // namespace MC
101
102#endif //__MC_UNIT_HPP__
Utilities and wrap around kokkos random generator.
Definition prng.hpp:15
Represents the spatial domain where Monte Carlo particles can exist.
Definition domain.hpp:37
Namespace that contains classes and structures related to Monte Carlo (MC) simulations.
Definition alias.hpp:9
Kokkos::TeamPolicy< ComputeSpace > get_policy(FunctorType &f, std::size_t range, bool reduce=false)
Definition unit.hpp:38
Use to count events that occurs during Monte-Carlo processing cycles.
Definition events.hpp:43
General-purpose Monte Carlo unit to carry out simulations.
Definition unit.hpp:67
MonteCarloUnit(const MonteCarloUnit &)=delete
Prevent copying of the MonteCarloUnit.
std::vector< uint64_t > getRepartition() const
Definition unit.cpp:127
ReactorDomain domain
Represents the domain within which the simulation occurs.
Definition unit.hpp:69
KPRNG rng
Random number generator used for Monte Carlo methods.
Definition unit.hpp:76
double init_weight
Initial weight or factor used in the simulation.
Definition unit.hpp:77
void serialize(Archive &ar)
Definition unit.hpp:93
uint64_t n_particle() const
Definition unit.cpp:122
AutoGenerated::ContainerVariant container
Definition unit.hpp:74
MonteCarloUnit & operator=(const MonteCarloUnit &)=delete
Prevent copying of the MonteCarloUnit.
EventContainer events
Container to manage and store simulation events.
Definition unit.hpp:68
MonteCarloUnit & operator=(MonteCarloUnit &&) noexcept=default
Allow moving of the MonteCarloUn.
Definition unit.hpp:14
KOKKOS_FUNCTION void operator()(const Kokkos::TeamPolicy< ComputeSpace >::member_type &team_handle, int &dead_count) const
Definition unit.hpp:15
TagDetector()=default