1#ifndef __TwoMetaDiv_DIV_MODEL_HPP__
2#define __TwoMetaDiv_DIV_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>
31 static constexpr double Y_EG = 12.05;
32 static constexpr double Y_XG = 1.15;
33 static constexpr double m = 250;
34 static constexpr double Y_OG = 6.;
35 static constexpr double Yo_EG = 20.;
36 static constexpr double Yf_EG = 3.;
37 static constexpr double Y_AG = 1.5;
38 static constexpr double Y_EA = 12.05 / 3.;
39 static constexpr double Y_XA = 0.4;
40 static constexpr double Y_OA = 2.;
41 static constexpr double Yo_EA = 4.67;
65 static constexpr std::string_view
name =
"two_meta_div";
131 KOKKOS_INLINE_FUNCTION
static void contribution(std::size_t idx,
132 std::size_t position,
142 static std::vector<std::string_view>
names()
144 return {
"age",
"length",
"nu1",
"nu2",
"nu_eff_1",
"nu_eff_2",
"a_perm",
"a_pts"};
161 Kokkos::printf(
"Two Meta Divsion Pre init\r\n");
166 CHECK_MODEL(TwoMetaDiv)
168 KOKKOS_INLINE_FUNCTION
void
179 mu_nu_dist, mu_nu_dist / 7., 0.,
static_cast<double>(
nu_max_kg_s));
181 auto gen = random_pool.get_state();
185 random_pool.free_state(gen);
203 const auto o = Kokkos::max(
static_cast<float>(concentrations(1)), 0.F);
211 const float s_1_star = (1 /
y_sx_1 * nu_1_star);
213 const float phi_s_residual_1_star = Kokkos::max(phi_s - s_1_star, 0.F);
214 KOKKOS_ASSERT(phi_s_residual_1_star >= 0.F);
216 const float nu_2_star =
y_sx_2 * phi_s_residual_1_star;
222 const float phi_s_residual_1 = Kokkos::max(phi_s - s_1, 0.F);
228 const float s_overflow = phi_s - s_growth;
243 ((s_overflow > 0.) ?
y_sa * (s_overflow) : 0);
282 auto gen = random_pool.get_state();
296 random_pool.free_state(gen);
302 std::size_t position,
307 auto access = contributions.access();
Kokkos::Random_XorShift1024_Pool< Kokkos::DefaultExecutionSpace > pool_type
Definition prng.hpp:17
Model that can export properties.
Definition traits.hpp:159
Kokkos::Subview< KernelConcentrationType, int, decltype(Kokkos::ALL)> LocalConcentration
Definition alias.hpp:42
Kokkos::Experimental::ScatterView< double **, Kokkos::LayoutRight > ContributionView
Definition alias.hpp:31
Kokkos::View< F *[Nd]> ParticlesModel
Definition traits.hpp:34
Status
Definition alias.hpp:11
constexpr T acetate
Definition utils.hpp:23
constexpr T glucose
Definition utils.hpp:21
constexpr T dioxygen
Definition utils.hpp:22
constexpr double X
Definition utils.hpp:36
constexpr double glucose
Definition utils.hpp:29
Models definition.
Definition config_loader.hpp:8
@ a_permease
Definition uptake.hpp:15
@ a_pts
Definition uptake.hpp:14
@ COUNT
Definition uptake.hpp:17
KOKKOS_INLINE_FUNCTION consteval F c_linear_density(F rho, F d)
Definition utils.hpp:39
Represents a normal (Gaussian) probability distribution.
Definition prng_extension.hpp:184
Represents a TruncatedNormal (Gaussian) probability distribution.
Definition prng_extension.hpp:263
static KOKKOS_INLINE_FUNCTION F draw_from(Kokkos::Random_XorShift1024< DeviceType > &gen, F mu, F sigma, F lower, F upper)
Definition prng_extension.hpp:287
static KOKKOS_INLINE_FUNCTION void init(const MC::KPRNG::pool_type &random_pool, std::size_t idx, const SelfParticle &arr)
Definition uptake.hpp:68
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:105
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:174