1#ifndef __TWOMETA_MODEL_HPP__
2#define __TWOMETA_MODEL_HPP__
4#include "Kokkos_Printf.hpp"
5#include "common/traits.hpp"
6#include "mc/macros.hpp"
7#include "models/utils.hpp"
8#include <mc/prng/prng_extension.hpp>
9#include <mc/traits.hpp>
10#include <models/uptake.hpp>
48 static constexpr std::string_view
name =
"simple";
80 KOKKOS_INLINE_FUNCTION
static void
95 KOKKOS_INLINE_FUNCTION
static void contribution(std::size_t idx,
126 inline constexpr static std::vector<std::string_view>
names()
128 return {
"age",
"length",
"nu1",
"nu2",
"nu_eff_1",
"nu_eff_2"};
131 inline constexpr static std::vector<std::size_t>
get_number()
144 KOKKOS_INLINE_FUNCTION
void
150 constexpr auto length_dist =
156 mu_nu_dist, mu_nu_dist / 7., 0.,
static_cast<double>(
nu_max_kg_s));
158 auto gen = random_pool.get_state();
162 random_pool.free_state(gen);
177 const auto o = Kokkos::max(
static_cast<float>(concentrations(1)), 0.F);
185 const float s_1_star = (1 /
y_sx_1 * nu_1_star);
187 const float phi_s_residual_1_star = Kokkos::max(phi_s - s_1_star, 0.F);
188 KOKKOS_ASSERT(phi_s_residual_1_star >= 0.F);
190 const float nu_2_star =
y_sx_2 * phi_s_residual_1_star;
196 const float phi_s_residual_1 = Kokkos::max(phi_s - s_1, 0.F);
202 const float s_overflow = phi_s - s_growth;
216 (s_overflow > 0. ?
y_sa * (s_overflow) : 0);
254 auto gen = random_pool.get_state();
257 random_pool.free_state(gen);
263 std::size_t position,
268 auto access = contributions.access();
Kokkos::Random_XorShift1024_Pool< Kokkos::DefaultExecutionSpace > pool_type
Definition prng.hpp:17
Definition traits.hpp:101
Kokkos::Subview< KernelConcentrationType, int, decltype(Kokkos::ALL)> LocalConcentration
Definition alias.hpp:41
Kokkos::Experimental::ScatterView< double **, Kokkos::LayoutRight > ContributionView
Definition alias.hpp:30
Kokkos::View< F *[Nd]> ParticlesModel
Definition traits.hpp:33
Status
Definition alias.hpp:11
constexpr T glucose
Definition utils.hpp:21
constexpr T dioxygen
Definition utils.hpp:22
Models definition.
Definition simple_model.hpp:12
@ COUNT
Definition uptake.hpp:17
KOKKOS_INLINE_FUNCTION consteval F c_linear_density(F rho, F d)
Definition utils.hpp:39
Represents a TruncatedNormal (Gaussian) probability distribution.
Definition prng_extension.hpp:262
static KOKKOS_INLINE_FUNCTION void init(const MC::KPRNG::pool_type &random_pool, std::size_t idx, const SelfParticle &arr)
Definition uptake.hpp:67
static KOKKOS_INLINE_FUNCTION FloatType uptake_step(FloatType phi_pts_max, FloatType phi_permease_specific, FloatType d_t, std::size_t idx, const SelfParticle &arr, const MC::LocalConcentration &c)
Definition uptake.hpp:104
static KOKKOS_INLINE_FUNCTION void division(const MC::KPRNG::pool_type &random_pool, std::size_t idx, std::size_t idx2, const SelfParticle &arr, const SelfParticle &buffer_arr)
Definition uptake.hpp:173