1#ifndef __SIMULATIONS_UNIT_HPP__
2#define __SIMULATIONS_UNIT_HPP__
4#include "mc/domain.hpp"
5#include <Kokkos_Core.hpp>
6#include <Kokkos_ScatterView.hpp>
7#include <biocma_cst_config.hpp>
9#include <cma_utils/iteration_state.hpp>
10#include <common/common.hpp>
14#include <mc/events.hpp>
15#include <mc/prng/prng.hpp>
19#include <simulation/alias.hpp>
20#include <simulation/feed_descriptor.hpp>
21#include <simulation/mass_transfer.hpp>
22#include <simulation/move_kernel.hpp>
23#include <simulation/probe.hpp>
24#include <simulation/scalar_initializer.hpp>
25#include <simulation/simulation_kernel.hpp>
27static constexpr size_t trigger_const_particle_number = 1e6;
28#define KERNEL_MOVE_ARGS_LIST \
29 d_t, container.position, container.status, n_particle, move_info, local_rng.random_pool, events
31#define LAUNCH_KERNEL_MOVE(b_move, b_leave) \
32 Kokkos::parallel_reduce( \
35 Simulation::KernelInline::MoveFunctor<b_move, b_leave>(KERNEL_MOVE_ARGS_LIST), \
40 class PreCalculatedHydroState;
56 template <
class Archive>
void serialize(Archive& archive)
62 class ScalarSimulation;
69 std::optional<Feed::SimulationFeed> _feed = std::nullopt);
78 std::unique_ptr<MC::MonteCarloUnit>
mc_unit;
80 [[nodiscard]] Kokkos::View<
const double**,
83 Kokkos::MemoryTraits<Kokkos::RandomAccess>>
85 [[nodiscard]] std::span<double>
getCliqData()
const;
86 [[nodiscard]] std::optional<std::span<const double>>
getCgasData()
const;
87 [[nodiscard]] std::optional<std::span<const double>>
getMTRData()
const;
99 void step(
double d_t) const;
101 void reduceContribs(std::span<const
double> data,
size_t n_rank) const;
103 [[deprecated("perf:not useful")]]
void
108 void update_feed(
double t,
double d_t,
bool update_scalar = true) noexcept;
112 [[nodiscard]] std::
size_t counter() const;
179 PROFILE_SECTION(
"cycleProcess")
180 using CurrentModel =
typename std::remove_reference<
decltype(container)>::type::UsedModel;
181 const size_t n_particle = container.n_particles();
194 std::size_t out_total = 0;
195 std::size_t dead_total = 0;
196 std::size_t _waiting_allocation_particle = 0;
206 switch (
static_cast<int>(enable_leave) * 2 +
static_cast<int>(enable_move))
222 Kokkos::fence(
"fence_mc_cycle_process_move");
223 Kokkos::parallel_reduce(
"cycle_model",
_policy, f, _waiting_allocation_particle, dead_total);
224 Kokkos::fence(
"fence_mc_cycle_process_model");
228 Kokkos::Experimental::contribute(contribs, contribs_scatter);
230 static constexpr uint64_t minimum_dead_particle_removal = 100;
231 const auto threshold =
232 std::max(minimum_dead_particle_removal,
233 static_cast<uint64_t
>(
static_cast<double>(n_particle) *
234 AutoGenerated::dead_particle_ratio_threshold));
242 container.merge_buffer();
244 if (_waiting_allocation_particle != 0)
246 std::cout <<
"TODO: Overflow not implemented" << std::endl;
Definition mass_transfer.hpp:47
Definition simulation.hpp:65
ProbeAutogeneratedBuffer & get_probes()
Definition simulation.hpp:167
const Simulation::Feed::SimulationFeed & get_feed() const
Definition simulation.cpp:288
MassTransfer::MassTransferModel mt_model
Definition simulation.hpp:163
double & get_start_time_mut()
Definition simulation.cpp:279
SimulationUnit & operator=(const SimulationUnit &rhs)=delete
void clear_mc()
Definition simulation.cpp:129
Simulation::Feed::SimulationFeed feed
Definition simulation.hpp:142
double starting_time
Definition simulation.hpp:147
std::span< const double > getContributionData() const
Definition simulation.model.cpp:15
SimulationUnit(std::unique_ptr< MC::MonteCarloUnit > &&_unit, const ScalarInitializer &scalar_init, std::optional< Feed::SimulationFeed > _feed=std::nullopt)
Definition simulation.cpp:30
std::span< double > getCliqData() const
Definition simulation.model.cpp:25
std::span< double > getContributionData_mut()
Definition simulation.model.cpp:20
bool const_number_simulation
Definition simulation.hpp:145
void post_init_concentration_file(const ScalarInitializer &scalar_init)
Definition simulation.cpp:102
void post_init_compartments()
Definition simulation.cpp:220
void reduceContribs_per_rank(std::span< const double > data) const
Definition simulation.model.cpp:50
void setLiquidFlow(CmaUtils::PreCalculatedHydroState *_flows_l)
const CmaUtils::IterationState & get_state() const
Definition simulation.hpp:172
KernelInline::MoveInfo< ComputeSpace > move_info
Definition simulation.hpp:164
std::unique_ptr< MC::MonteCarloUnit > mc_unit
Definition simulation.hpp:78
void setGasFlow(CmaUtils::PreCalculatedHydroState *_flows_g)
void reduceContribs(std::span< const double > data, size_t n_rank) const
Definition simulation.model.cpp:57
void update_feed(double t, double d_t, bool update_scalar=true) noexcept
Definition simulation.model.cpp:80
Dimensions getDimensions() const noexcept
Definition simulation.model.cpp:39
DiagonalView< ComputeSpace > get_kernel_diagonal() const
Definition simulation.cpp:239
bool two_phase_flow() const
Definition simulation.cpp:151
SimulationUnit(const SimulationUnit &other)=delete
std::shared_ptr< ScalarSimulation > gas_scalar
Definition simulation.hpp:162
std::optional< std::span< const double > > getMTRData() const
Definition simulation.model.cpp:44
double & get_end_time_mut()
Definition simulation.cpp:283
double end_time
Definition simulation.hpp:148
kernelContribution get_kernel_contribution() const
Definition simulation.cpp:255
void reset()
Definition simulation.cpp:134
SimulationUnit(SimulationUnit &&other) noexcept
SimulationUnit & operator=(SimulationUnit &&rhs)=delete
CmaUtils::IterationState state
Definition simulation.hpp:144
void cycleProcess(auto &&container, double d_t)
Definition simulation.hpp:177
std::size_t internal_counter_dead
Definition simulation.hpp:140
void set_probes(ProbeAutogeneratedBuffer &&_probes)
Definition simulation.cpp:146
const bool is_two_phase_flow
Definition simulation.hpp:146
std::size_t counter() const
Definition simulation.cpp:141
std::optional< std::span< const double > > getCgasData() const
Definition simulation.model.cpp:30
void set_kernel_contribs_to_host()
Definition simulation.cpp:260
CumulativeProbabilityView< ComputeSpace > get_kernel_cumulative_proba() const
Definition simulation.cpp:245
std::shared_ptr< ScalarSimulation > liquid_scalar
Definition simulation.hpp:161
void post_init_concentration_functor(const ScalarInitializer &scalar_init)
Definition simulation.cpp:156
Kokkos::TeamPolicy< ComputeSpace > _policy
Definition simulation.hpp:135
void post_init_concentration(const ScalarInitializer &scalar_init)
Definition simulation.cpp:184
void update(CmaUtils::IterationState &&new_state)
Definition simulation.cpp:67
ProbeAutogeneratedBuffer probes
Definition simulation.hpp:141
void setVolumes() const
Definition simulation.cpp:75
void clearContribution() const noexcept
Definition simulation.model.cpp:68
Kokkos::View< const double **, Kokkos::LayoutLeft, ComputeSpace, Kokkos::MemoryTraits< Kokkos::RandomAccess > > getkernel_concentration() const
Definition simulation.cpp:269
void step(double d_t) const
Definition simulation.model.cpp:144
bool set_policy
Definition simulation.hpp:136
Namespace to handle algorithms and structures related to reading compartment mesh.
Definition host_specific.hpp:17
Kokkos::Experimental::ScatterView< double **, Kokkos::LayoutRight > ContributionView
Definition alias.hpp:30
Kokkos::TeamPolicy< ComputeSpace > get_policy(FunctorType &f, std::size_t range, bool reduce=false)
Definition unit.hpp:38
constexpr bool enable_leave
Definition move_kernel.hpp:20
constexpr bool enable_move
Definition move_kernel.hpp:23
constexpr bool disable_leave
Definition move_kernel.hpp:21
constexpr bool disable_move
Definition move_kernel.hpp:22
Namespace that contains classes and structures related to simulation handling.
Definition host_specific.hpp:12
Kokkos:: View< double *, Kokkos::LayoutLeft, ExecSpace, Kokkos::MemoryTraits< Kokkos::RandomAccess > > DiagonalView
Definition alias.hpp:14
Kokkos:: View< const double **, Kokkos::LayoutRight, Space, Kokkos::MemoryTraits< Kokkos::RandomAccess > > CumulativeProbabilityView
Definition alias.hpp:20
Structure to store information about the reactor state during simulation.
Definition iteration_state.hpp:21
Definition simulation.hpp:52
std::size_t n_species
Definition simulation.hpp:53
std::size_t n_compartment
Definition simulation.hpp:54
void serialize(Archive &archive)
Definition simulation.hpp:56
Definition simulation_kernel.hpp:23
Definition move_kernel.hpp:26
DiagonalView< ExecSpace > diag_transition
Definition move_kernel.hpp:28
LeavingFlowType leaving_flow
Definition move_kernel.hpp:30
CumulativeProbabilityView< ExecSpace > cumulative_probability
Definition move_kernel.hpp:29
ConstNeighborsView< ExecSpace > neighbors
Definition move_kernel.hpp:27
Kokkos::View< double *, ExecSpace > liquid_volume
Definition move_kernel.hpp:32
Definition scalar_initializer.hpp:30