1#ifndef __SIMULATION_KERNELS_HPP__
2#define __SIMULATION_KERNELS_HPP__
5#include <Kokkos_Core_fwd.hpp>
6#include <common/common.hpp>
7#include <common/kokkos_getpolicy.hpp>
8#include <impl/Kokkos_Profiling.hpp>
9#include <mc/domain.hpp>
11#include <simulation/kernels/contribution_kernel.hpp>
12#include <simulation/kernels/model_kernel.hpp>
13#include <simulation/kernels/move_kernel.hpp>
15#include <common/execinfo.hpp>
21 template <
typename Space>
24 template <
typename Space>
27 template <
typename Space, ModelType Model>
struct CycleFunctors
58 const bool enable_leave = new_move.leaving_flow.size() != 0;
90 = Kokkos::create_mirror_view_and_copy(HostSpace(),
cycle_reducer)();
93 = Kokkos::create_mirror_view_and_copy(HostSpace(),
move_reducer)();
95 if constexpr (AutoGenerated::FlagCompileTime::enable_event_counter)
101 return std::tuple(host_red, move_tally.dead);
121 options.m_p_p_team_leave,
147 std::size_t npt =
m_options.m_p_p_team_move;
148 if (n_particle <= npt)
155 auto policy = Kokkos::TeamPolicy<TagMove>(
move_space,
156 static_cast<int>(league_size),
167 std::size_t npt =
m_options.m_p_p_team_move;
168 if (n_particle <= npt)
176 = Kokkos::TeamPolicy<TagMoveLeave>(
move_space,
177 static_cast<int>(league_size),
181 Kokkos::parallel_reduce(
189 if (n_particle <= npt)
198 static_cast<int>(league_size),
202 Kokkos::parallel_reduce(
213 const bool is_multi_compartment =
move_kernel.do_move();
216 if (is_multi_compartment)
239 std::size_t npt =
m_options.m_p_p_team_model;
241 if (n_particle <= npt)
271 std::size_t npt =
m_options.m_p_p_team_contribs;
272 if (n_particle <= npt)
280 "ModelType:Constapply_weight()");
285 const auto policy_contribs
286 = Kokkos::TeamPolicy<typename ContributionFunctor<Model>::Tag3D>(
287 model_space, league_size, Kokkos::AUTO(), Kokkos::AUTO());
288 Kokkos::parallel_reduce(
"cycle_model_contribs",
296 = Kokkos::TeamPolicy<typename ContributionFunctor<Model>::Tag0D>(
297 model_space, league_size, Kokkos::AUTO(), Kokkos::AUTO());
298 policy_contribs.set_scratch_size(
299 0, Kokkos::PerTeam(
sizeof(
float) * Model::n_c));
300 Kokkos::parallel_reduce(
"cycle_model_contribs_0d",
Main owning object for Monte-Carlo particles.
Definition particles_container.hpp:59
KOKKOS_INLINE_FUNCTION std::size_t n_particles() const
Gets the number of particles in the container.
Definition particles_container.hpp:453
MC::ParticlePositions position
Definition particles_container.hpp:87
ParticleAges ages
Definition particles_container.hpp:90
MC::ParticleStatus status
Definition particles_container.hpp:88
Definition cycle_reducer.hpp:31
Kokkos::View< value_type, Space > result_view_type
Definition cycle_reducer.hpp:36
Concept to check if a model type has uniform_weight
Definition traits.hpp:203
std::size_t c_league_size(std::size_t n_tot, std::size_t n_per_team) noexcept
Definition common.cpp:23
@ Move
Move in domain.
Definition events.hpp:23
@ Exit
Remove particle from list due to move in domain.
Definition events.hpp:22
decltype(Kokkos::Experimental::create_scatter_view( kernelContribution())) ContributionView
Definition alias.hpp:162
gen_pool_type< Kokkos::DefaultExecutionSpace > pool_type
Definition alias.hpp:100
Kokkos::View< const double **, Kokkos::LayoutLeft, ComputeSpace, Kokkos::MemoryTraits< Kokkos::RandomAccess > > KernelConcentrationType
Definition alias.hpp:165
Definition cycle_reducer.hpp:13
constexpr bool enable_leave
Definition move_kernel.hpp:23
KernelInline::CycleReducer< Space >::result_view_type cycle_reducer_view_type
Definition kernels.hpp:22
constexpr bool enable_move
Definition move_kernel.hpp:26
Kokkos::View< MoveLeaveTally, Space > move_reducer_view_type
Definition kernels.hpp:24
Probes< AutoGenerated::probe_buffer_size > ProbeAutogeneratedBuffer
Definition probe.hpp:150
Definition contribution_kernel.hpp:12
Definition execinfo.hpp:13
Structure to store information about domain needed during MC cycle data is likely to change between e...
Definition domain.hpp:29
Use to count events that occurs during Monte-Carlo processing cycles.
Definition events.hpp:168
Definition model_kernel.hpp:42
void launch_leave_0d(const std::size_t n_particle)
Definition kernels.hpp:185
CycleFunctor< Model > cycle_kernel_type
Definition kernels.hpp:30
cycle_kernel_type cycle_kernel
Definition kernels.hpp:39
ComputeSpace model_space
Definition kernels.hpp:35
MoveFunctor move_kernel_type
Definition kernels.hpp:31
bool f_multi_compartment
Definition kernels.hpp:48
move_kernel_type move_kernel
Definition kernels.hpp:40
void launch_model(const std::size_t n_particle)
Definition kernels.hpp:235
void launch_move_3d(const std::size_t n_particle)
Move-only, multi-compartment domain.
Definition kernels.hpp:144
auto get_host_reduction()
Definition kernels.hpp:86
KernelDispatchOptions m_options
Definition kernels.hpp:46
ComputeSpace move_space
Definition kernels.hpp:33
cycle_reducer_view_type< Space > cycle_reducer
Definition kernels.hpp:37
move_reducer_view_type< Space > move_reducer
Definition kernels.hpp:38
void launch_move(const std::size_t n_particle)
Definition kernels.hpp:206
Model FModel
Definition kernels.hpp:28
ContributionFunctor< Model > contribution_kernel
Definition kernels.hpp:42
void launch_move_leave_3d(const std::size_t n_particle)
Definition kernels.hpp:164
void update(const double d_t, MC::ParticlesContainer< Model > container, MC::DomainState< ComputeSpace > &&new_move)
Definition kernels.hpp:51
Definition move_kernel.hpp:136
Definition move_kernel.hpp:51