1#ifndef __SIMULATIONS_UNIT_HPP__
2#define __SIMULATIONS_UNIT_HPP__
4#include "mixture/species_descriptor.hpp"
5#include <Kokkos_Core.hpp>
6#include <Kokkos_ScatterView.hpp>
7#include <biocma_cst_config.hpp>
9#include <cma_utils/alias.hpp>
10#include <common/common.hpp>
11#include <common/logger.hpp>
13#include <mc/domain.hpp>
14#include <mc/events.hpp>
15#include <mc/prng/prng.hpp>
19#include <simulation/descriptors/dimensions.hpp>
20#include <simulation/feed_descriptor.hpp>
21#include <simulation/kernels/kernels.hpp>
22#include <simulation/mass_transfer.hpp>
23#include <simulation/probe.hpp>
24#include <simulation/scalar_initializer.hpp>
25#include <simulation/simulation_exception.hpp>
26#include <simulation/simulation_getter.hpp>
27#include <simulation/simulation_times.hpp>
29static constexpr size_t trigger_const_particle_number = 1e6;
33 class PreCalculatedHydroState;
56 std::unique_ptr<MC::MonteCarloUnit>&& _unit,
58 std::optional<Feed::SimulationFeed> _feed,
59 std::shared_ptr<Mixture::SpecieTable>
table,
60 std::optional<MassTransfer::Type::MtrTypeVariant>&& mt_model_variant,
75 void setLogger(std::shared_ptr<IO::Logger>);
82 void cycleProcess(auto& container,
double d_t, auto& _functors);
85 void update_feed(
double d_t,
bool update_scalar = true) noexcept;
87 double advance(
double d_t) noexcept;
91 std::span<const std::
size_t> neighors_flat,
92 std::span<const
double> proba_flat,
93 std::span<const
double> out_flows) const;
98 [[deprecated]]
void reset();
100 template <typename Space,
ModelType Model>
113 std::shared_ptr<Mixture::SpecieTable>
m_table;
118 void setGasFlow(CmaUtils::PreCalculatedHydroState* _flows_g);
151 template <ModelType Model>
153 auto& cycle_functors);
155 template <ModelType Model>
161 template <ModelType Model>
165 auto& cycle_functors)
167 PROFILE_SECTION(
"Simulation::pre_cycle")
169 cycle_functors.update(
170 d_t, container, this->
mc_unit->domain.get_const_inner());
173 template <
typename Space, ModelType Model>
186 mc_unit->domain.get_const_inner(),
187 probes[ProbeType ::LeavingTime],
188 probes[ProbeType ::DivisionTime]);
194 auto& cycle_functors)
196 PROFILE_SECTION(
"cycleProcess")
198 typename std::remove_reference<
decltype(container)>::type::UsedModel;
199 const size_t n_particle = container.n_particles();
205 pre_cycle(container, d_t, cycle_functors);
210 cycle_functors.launch_model(n_particle);
213 if (cycle_functors.move_kernel.need_launch())
215 cycle_functors.launch_move(n_particle);
221 template <ModelType Model>
224 auto& cycle_functors)
226 PROFILE_SECTION(
"Simulation::post_cycle")
229 const auto [host_red, host_out_counter]
230 = cycle_functors.get_host_reduction();
236 if (host_red.waiting_allocation_particle != 0)
240 logger->alert(
"Simulation",
241 "Overflow of particle not implemented yet (ignore "
242 "_waiting_allocation_particle)");
Main owning object for Monte-Carlo particles.
Definition particles_container.hpp:57
void update_and_remove_inactive(std::size_t out, std::size_t dead)
Update the number of non-idle particle and remove if total number exceeds threshold May call : remove...
Definition particles_container.hpp:540
void merge_buffer()
Insert particle buffer into the main container.
Definition particles_container.hpp:576
Definition feed_descriptor.hpp:123
Definition mass_transfer.hpp:60
Definition scalar_simulation.hpp:29
void ode_step(double d_t) const
Definition simulation.model.cpp:132
Getter accesor
Definition simulation.hpp:48
SimulatimeTimes m_times
Definition simulation.hpp:134
SimulationUnit & operator=(const SimulationUnit &rhs)=delete
bool f_reaction
Definition simulation.hpp:132
void updateMCHydro(std::span< const double > newliquid_volume, std::span< const std::size_t > neighors_flat, std::span< const double > proba_flat, std::span< const double > out_flows) const
Definition simulation.cpp:120
void updateScalarHydro(const CmaUtils::IterationStatePtrType &newstate)
Definition simulation.cpp:131
void post_init_concentration(ScalarInitializer &&scalar_init)
Definition simulation.cpp:164
void setLogger(std::shared_ptr< IO::Logger >)
Definition simulation.getset.cpp:175
MC::KernelConcentrationType getkernel_concentration() const
Definition simulation.getset.cpp:198
bool const_number_simulation
Definition simulation.hpp:130
std::shared_ptr< Mixture::SpecieTable > m_table
Definition simulation.hpp:113
void post_init_compartments()
MapProbes probes
Definition simulation.hpp:124
Getter getter() const noexcept
Definition simulation.getset.cpp:169
void cycleProcess(auto &container, double d_t, auto &_functors)
Definition simulation.hpp:192
Dimensions dims
Definition simulation.hpp:125
void updateHydro(const CmaUtils::IterationStatePtrType &newstate)
Definition simulation.cpp:104
void setLiquidFlow(CmaUtils::PreCalculatedHydroState *_flows_l)
double advance(double d_t) noexcept
Definition simulation.model.cpp:125
Simulation::Feed::SimulationFeed m_feed
Definition simulation.hpp:128
std::unique_ptr< MC::MonteCarloUnit > mc_unit
Definition simulation.hpp:111
void setGasFlow(CmaUtils::PreCalculatedHydroState *_flows_g)
void setProbes(ProbeType type, ProbeAutogeneratedBuffer &&_probes)
Definition simulation.getset.cpp:192
void overwriteStartTime(double _start_time) noexcept
Definition simulation.getset.cpp:204
KernelInline::CycleFunctors< Space, Model > init_functors(MC::ParticlesContainer< Model > container, KernelDispatchOptions options)
Definition simulation.hpp:175
SimulationUnit(const SimulationUnit &other)=delete
std::shared_ptr< ScalarSimulation > gas_scalar
Definition simulation.hpp:145
void setMtrModel(MassTransfer::Type::MtrTypeVariant &&variant)
Definition simulation.getset.cpp:181
void post_cycle(MC::ParticlesContainer< Model > &container, auto &cycle_functors)
Definition simulation.hpp:223
void reset()
Definition simulation.cpp:95
SimulationUnit & operator=(SimulationUnit &&rhs)=delete
bool is_two_phase_flow
Definition simulation.hpp:131
void update_feed(double d_t, bool update_scalar=true) noexcept
Definition simulation.model.cpp:73
std::shared_ptr< ScalarSimulation > liquid_scalar
Definition simulation.hpp:144
friend class Getter
Definition simulation.hpp:51
SimulationUnit(std::unique_ptr< MC::MonteCarloUnit > &&_unit, ScalarInitializer &&scalar_init, std::optional< Feed::SimulationFeed > _feed, std::shared_ptr< Mixture::SpecieTable > table, std::optional< MassTransfer::Type::MtrTypeVariant > &&mt_model_variant, Sparam params)
Definition simulation.cpp:47
MassTransfer::MassTransferModel m_mt_model
Definition simulation.hpp:147
bool checkScalar() const
Definition simulation.model.cpp:21
void pre_cycle(MC::ParticlesContainer< Model > &container, double d_t, auto &functors)
Definition simulation.hpp:163
void scatter_contribute()
Definition simulation.cpp:153
std::shared_ptr< IO::Logger > logger
Definition simulation.hpp:149
void clearContribution() const noexcept
Definition simulation.model.cpp:43
auto table()
Definition simulation.hpp:105
MC::kernelContribution get_kernel_contribution() const
Definition simulation.getset.cpp:210
MC::ContributionView contribs_scatter
Definition simulation.hpp:123
Model type.
Definition traits.hpp:155
Definition host_specific.hpp:17
::rust::Box<::IterationStateWrapper > IterationStatePtrType
Opaque type for iteration state.
Definition alias.hpp:20
Namespace that contains classes and structures related to Monte Carlo (MC) simulations.
Definition alias.hpp:16
decltype(Kokkos::Experimental::create_scatter_view( kernelContribution())) ContributionView
Definition alias.hpp:162
Kokkos::View< float **, Kokkos::LayoutLeft, MC::ComputeSpace, kernelMT > kernelContribution
Definition alias.hpp:160
Kokkos::View< const double **, Kokkos::LayoutLeft, ComputeSpace, Kokkos::MemoryTraits< Kokkos::RandomAccess > > KernelConcentrationType
Definition alias.hpp:165
Definition kernels.hpp:19
std::variant< FlowmapTurbulence, FixedKla, FlowmapKla, Auto > MtrTypeVariant
Definition mass_transfer.hpp:44
Namespace that contains classes and structures related to simulation handling.
Definition host_specific.hpp:12
ProbeType
Definition probe.hpp:15
Probes< AutoGenerated::probe_buffer_size > ProbeAutogeneratedBuffer
Definition probe.hpp:150
std::unordered_map< ProbeType, ProbeAutogeneratedBuffer > MapProbes
Definition probe.hpp:152
Definition execinfo.hpp:12
Definition dimensions.hpp:9
Definition kernels.hpp:27
Definition scalar_initializer.hpp:29
Definition simulation_times.hpp:7
Definition simulation_getter.hpp:19