1#ifndef __TWOMETA_MODEL_NB_HPP__
2#define __TWOMETA_MODEL_NB_HPP__
4#include <common/traits.hpp>
5#include <mc/macros.hpp>
6#include <mc/prng/prng_extension.hpp>
7#include <mc/traits.hpp>
8#include <models/uptake_dyn.hpp>
9#include <models/utils.hpp>
24 age = INDEX_FROM_ENUM(Uptakeparticle_var::COUNT),
40 static constexpr std::string_view
name =
"two_mode_nb";
98 KOKKOS_INLINE_FUNCTION
static double mass(std::size_t idx,
104 static std::vector<std::string_view>
names()
128 INDEX_FROM_ENUM(Uptakeparticle_var::ap_1),
129 INDEX_FROM_ENUM(Uptakeparticle_var::ap_2),
130 INDEX_FROM_ENUM(Uptakeparticle_var::ap_3),
138 Kokkos::printf(
"[Model]: PRENINIT:BEGIN\r\n");
154 KOKKOS_INLINE_FUNCTION
static void
161 KOKKOS_INLINE_FUNCTION
static void
163 std::size_t position,
171 KOKKOS_INLINE_FUNCTION
void
184 constexpr auto nu_1_initial_dist =
186 mu_nu_dist, mu_nu_dist / 7., 0.,
static_cast<double>(
nu_max_kg_s));
188 auto gen = random_pool.get_state();
189 auto l = length_dist.draw(gen);
194 random_pool.free_state(gen);
215 const auto o = Kokkos::max(
static_cast<FloatType>(concentrations(1)), 0.F);
219 const auto nu_1_star =
224 const auto s_1_star = (1.F /
y_sx_1 * nu_1_star);
226 const auto phi_s_residual_1_star = Kokkos::max(phi_s - s_1_star, 0.F);
227 KOKKOS_ASSERT(phi_s_residual_1_star >= 0.F);
229 const auto nu_2_star =
y_sx_2 * phi_s_residual_1_star;
236 nu_eff_1 = Kokkos::min(nu_1_star, nu_1);
239 const auto phi_s_residual_1 = Kokkos::max(phi_s - s_1, 0.F);
248 const auto s_overflow = phi_s - s_growth;
264 nu_1 += d_t * ((nu_1_star - nu_1) /
tau_1);
266 nu_2 += d_t * ((nu_2_star - nu_2) /
tau_2);
278 KOKKOS_INLINE_FUNCTION
void
303 auto gen = random_pool.get_state();
306 new_current_length + local_ac.draw(gen);
312 gen, nu_1_o, nu_1_o * half, 0.F, 1.F);
319 gen, nu_2_o, nu_2_o * half, 0.F, 1.F);
323 new_current_length + local_ac.draw(gen);
324 random_pool.free_state(gen);
334 return {.begin = begin, .end = end};
Model that can export properties.
Definition traits.hpp:165
Status
Definition alias.hpp:57
@ Division
Definition alias.hpp:59
@ Idle
Definition alias.hpp:58
gen_pool_type< Kokkos::DefaultExecutionSpace > pool_type
Definition alias.hpp:38
decltype(Kokkos::Experimental::create_scatter_view(kernelContribution())) ContributionView
Definition alias.hpp:87
Kokkos::Subview< KernelConcentrationType, int, decltype(Kokkos::ALL)> LocalConcentration
Definition alias.hpp:95
Kokkos::View< F *[Nd], Kokkos::LayoutRight > ParticlesModel
Definition alias.hpp:18
constexpr T glucose
Definition utils.hpp:28
constexpr T dioxygen
Definition utils.hpp:29
Models definition.
Definition config_loader.hpp:9
KOKKOS_INLINE_FUNCTION consteval F c_linear_density(F rho, F d)
Definition utils.hpp:47
Represents a TruncatedNormal (Gaussian) probability distribution.
Definition prng_extension.hpp:338
static KOKKOS_INLINE_FUNCTION F draw_from(Kokkos::Random_XorShift1024< DeviceType > &gen, F mu, F sigma, F lower, F upper)
Definition prng_extension.hpp:364
static KOKKOS_INLINE_FUNCTION void init(const MC::pool_type &random_pool, std::size_t idx, const SelfParticle &arr)
Definition uptake_dyn.hpp:105
static KOKKOS_INLINE_FUNCTION FloatType uptake_step(FloatType phi_max, FloatType d_t, std::size_t idx, const SelfParticle &arr, const MC::LocalConcentration &c, FloatType *r_phi_pts=nullptr, FloatType *r_phi_perm=nullptr)
Definition uptake_dyn.hpp:171
static KOKKOS_INLINE_FUNCTION void division(const MC::pool_type &random_pool, std::size_t idx, std::size_t idx2, const SelfParticle &arr, const SelfParticle &buffer_arr)
Definition uptake_dyn.hpp:219