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/uptake_dyn.hpp"
8#include "models/utils.hpp"
9#include <mc/prng/prng_extension.hpp>
10#include <mc/traits.hpp>
11#include <models/uptake.hpp>
36 age = INDEX_FROM_ENUM(Uptakeparticle_var::COUNT),
51 static constexpr std::string_view
name =
"simple";
99 KOKKOS_INLINE_FUNCTION
static void
111 KOKKOS_INLINE_FUNCTION
static void
118 KOKKOS_INLINE_FUNCTION
static void
120 std::size_t position,
125 KOKKOS_INLINE_FUNCTION
static double mass(std::size_t idx,
131 static std::vector<std::string_view>
names()
153 INDEX_FROM_ENUM(Uptakeparticle_var::ap_2),
154 INDEX_FROM_ENUM(Uptakeparticle_var::ap_1),
162 KOKKOS_INLINE_FUNCTION
void
173 constexpr auto nu_1_initial_dist =
175 mu_nu_dist, mu_nu_dist / 7., 0.,
static_cast<double>(
nu_max_kg_s));
177 auto gen = random_pool.get_state();
178 const auto l0 = length_dist.draw(gen);
179 const auto dl = local_adder.draw(gen);
183 random_pool.free_state(gen);
186 random_pool, idx, arr);
199 phi_s_max, d_t, idx, arr, concentrations);
201 const auto o = Kokkos::max(
static_cast<float>(concentrations(1)), 0.F);
205 const float nu_1_star =
210 const float s_1_star = (1 /
y_sx_1 * nu_1_star);
212 const float phi_s_residual_1_star = Kokkos::max(phi_s - s_1_star, 0.F);
213 KOKKOS_ASSERT(phi_s_residual_1_star >= 0.F);
215 const float nu_2_star =
y_sx_2 * phi_s_residual_1_star;
221 const float phi_s_residual_1 = Kokkos::max(phi_s - s_1, 0.F);
223 Kokkos::min(
y_sx_2 * phi_s_residual_1,
226 const float s_growth =
229 const float s_overflow = phi_s - s_growth;
243 (s_overflow > 0. ?
y_sa * (s_overflow) : 0);
247 static_cast<float>(d_t) *
251 static_cast<float>(d_t) *
268 KOKKOS_INLINE_FUNCTION
void
288 auto gen = random_pool.get_state();
290 new_current_length + local_adder.draw(gen);
308 new_current_length + local_adder.draw(gen);
309 random_pool.free_state(gen);
312 random_pool, idx, idx2, arr, child_buffer_arr);
315 KOKKOS_INLINE_FUNCTION
void
317 std::size_t position,
322 auto access = contributions.access();
323 access(0, position) +=
325 access(1, position) +=
327 access(2, position) +=
pool_type pool_type
Definition prng.hpp:21
Model that can export properties.
Definition traits.hpp:165
Status
Definition alias.hpp:49
@ Division
Definition alias.hpp:51
@ Idle
Definition alias.hpp:50
decltype(Kokkos::Experimental::create_scatter_view(kernelContribution())) ContributionView
Definition alias.hpp:76
Kokkos::Subview< KernelConcentrationType, int, decltype(Kokkos::ALL)> LocalConcentration
Definition alias.hpp:84
Kokkos::View< F *[Nd], Kokkos::LayoutRight > ParticlesModel
Definition alias.hpp:16
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:277
Definition uptake_dyn.hpp:64