1#ifndef __SIMULATION_KERNELS_HPP__
2#define __SIMULATION_KERNELS_HPP__
4#include <Kokkos_Core_fwd.hpp>
5#include <common/common.hpp>
6#include <common/kokkos_getpolicy.hpp>
8#include <simulation/kernels/model_kernel.hpp>
9#include <simulation/kernels/move_kernel.hpp>
13 template <
typename Space>
16 template <
typename Space>
19 template <
typename Space, ModelType Model>
struct CycleFunctors
42 const bool enable_move = new_move.liquid_volume.size() > 1;
43 const bool enable_leave = new_move.leaving_flow.size() != 0;
74 = Kokkos::create_mirror_view_and_copy(HostSpace(),
cycle_reducer)();
76 const auto host_out_counter
77 = Kokkos::create_mirror_view_and_copy(HostSpace(),
move_reducer)();
79 return std::tuple(host_red, host_out_counter);
93 std::move(_concentrations),
120 const auto _policy_move = Kokkos::RangePolicy<KernelInline::TagMove>(
123 Kokkos ::parallel_for(
"cycle_move", _policy_move,
move_kernel);
135 const auto _policy_leave = Kokkos::RangePolicy<KernelInline::TagLeave>(
138 Kokkos ::parallel_reduce(
147 auto _policy = Kokkos::RangePolicy<TagCycle>(
model_space, 0, n_particle);
148 Kokkos::parallel_reduce(
155 constexpr int PARTICLES_PER_TEAM = 256;
156 int league_size = Kokkos::ceil(n_particle / PARTICLES_PER_TEAM);
158 auto _policy2 = Kokkos::TeamPolicy<TagContribution>(
159 model_space, league_size, Kokkos::AUTO(), Kokkos::AUTO());
160 Kokkos::parallel_for(
"cycle_model2", _policy2,
cycle_kernel);
Main owning object for Monte-Carlo particles.
Definition particles_container.hpp:56
KOKKOS_INLINE_FUNCTION std::size_t n_particles() const
Gets the number of particles in the container.
Definition particles_container.hpp:445
ParticleSamples random
Definition particles_container.hpp:87
void change_nsample(std::size_t new_n_sample)
Definition particles_container.hpp:540
MC::ParticlePositions position
Definition particles_container.hpp:83
ParticleAges ages
Definition particles_container.hpp:86
MC::ParticleStatus status
Definition particles_container.hpp:84
Definition model_kernel.hpp:43
Kokkos::View< value_type, Space > result_view_type
Definition model_kernel.hpp:48
decltype(Kokkos::Experimental::create_scatter_view( kernelContribution())) ContributionView
Definition alias.hpp:88
gen_pool_type< Kokkos::DefaultExecutionSpace > pool_type
Definition alias.hpp:39
Kokkos::View< const double **, Kokkos::LayoutLeft, ComputeSpace, Kokkos::MemoryTraits< Kokkos::RandomAccess > > KernelConcentrationType
Definition alias.hpp:91
Definition kernels.hpp:12
constexpr bool enable_leave
Definition move_kernel.hpp:25
KernelInline::CycleReducer< Space >::result_view_type cycle_reducer_view_type
Definition kernels.hpp:14
constexpr bool enable_move
Definition move_kernel.hpp:28
Kokkos::View< std::size_t, Space > move_reducer_view_type
Definition kernels.hpp:16
Probes< AutoGenerated::probe_buffer_size > ProbeAutogeneratedBuffer
Definition probe.hpp:55
Structure to store information about domain needed during MC cycle data is likely to change between e...
Definition domain.hpp:27
Use to count events that occurs during Monte-Carlo processing cycles.
Definition events.hpp:45
Definition model_kernel.hpp:112
CycleFunctor< Model > cycle_kernel_type
Definition kernels.hpp:22
cycle_kernel_type cycle_kernel
Definition kernels.hpp:31
ComputeSpace model_space
Definition kernels.hpp:27
MoveFunctor move_kernel_type
Definition kernels.hpp:23
move_kernel_type move_kernel
Definition kernels.hpp:32
auto get_host_reduction()
Definition kernels.hpp:70
void launch_move(const std::size_t n_particle) const
Definition kernels.hpp:108
ComputeSpace move_space
Definition kernels.hpp:25
cycle_reducer_view_type< Space > cycle_reducer
Definition kernels.hpp:29
move_reducer_view_type< Space > move_reducer
Definition kernels.hpp:30
void launch_model(const std::size_t n_particle) const
Definition kernels.hpp:143
Model FModel
Definition kernels.hpp:20
void update(const double d_t, MC::ParticlesContainer< Model > container, MC::DomainState< ComputeSpace > &&new_move)
Definition kernels.hpp:37
Definition move_kernel.hpp:134