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";
110 KOKKOS_INLINE_FUNCTION
static void
117 KOKKOS_INLINE_FUNCTION
static void
119 std::size_t position,
124 KOKKOS_INLINE_FUNCTION
static double
130 static std::vector<std::string_view>
133 return {
"age",
"length",
"nu1",
"nu2",
"nu_eff_1",
134 "nu_eff_2",
"a_perm",
"a_pts",
"phi_o2",
"phi_g" };
137 static std::vector<std::size_t>
146 INDEX_FROM_ENUM(Uptakeparticle_var::ap_2),
147 INDEX_FROM_ENUM(Uptakeparticle_var::ap_1),
155 KOKKOS_INLINE_FUNCTION
void
166 constexpr auto nu_1_initial_dist
168 mu_nu_dist, mu_nu_dist / 7., 0.,
static_cast<double>(
nu_max_kg_s));
170 auto gen = random_pool.get_state();
171 const auto l0 = length_dist.draw(gen);
172 const auto dl = local_adder.draw(gen);
176 random_pool.free_state(gen);
179 random_pool, idx, arr);
192 phi_s_max, d_t, idx, arr, concentrations);
194 const auto o = Kokkos::max(
static_cast<float>(concentrations(1)), 0.F);
198 const float nu_1_star
203 const float s_1_star = (1 /
y_sx_1 * nu_1_star);
205 const float phi_s_residual_1_star = Kokkos::max(phi_s - s_1_star, 0.F);
206 KOKKOS_ASSERT(phi_s_residual_1_star >= 0.F);
208 const float nu_2_star =
y_sx_2 * phi_s_residual_1_star;
214 const float phi_s_residual_1 = Kokkos::max(phi_s - s_1, 0.F);
216 = Kokkos::min(
y_sx_2 * phi_s_residual_1,
222 const float s_overflow = phi_s - s_growth;
237 + (s_overflow > 0. ?
y_sa * (s_overflow) : 0);
241 +=
static_cast<float>(d_t)
245 +=
static_cast<float>(d_t)
252 +=
static_cast<float>(d_t) * (sum_nu /
lin_density);
262 KOKKOS_INLINE_FUNCTION
void
277 = new_current_length;
282 auto gen = random_pool.get_state();
284 = new_current_length + local_adder.draw(gen);
302 = new_current_length + local_adder.draw(gen);
303 random_pool.free_state(gen);
306 random_pool, idx, idx2, arr, child_buffer_arr);
309 KOKKOS_INLINE_FUNCTION
void
311 std::size_t position,
316 auto access = contributions.access();
Model that can export properties.
Definition traits.hpp:187
Kokkos::Subview< KernelConcentrationType, int, decltype(Kokkos::ALL)> LocalConcentration
Definition alias.hpp:105
Status
Definition alias.hpp:58
@ Division
Definition alias.hpp:60
@ Idle
Definition alias.hpp:59
gen_pool_type< Kokkos::DefaultExecutionSpace > pool_type
Definition alias.hpp:39
decltype( Kokkos::Experimental::create_scatter_view(kernelContribution())) ContributionView
Definition alias.hpp:88
Kokkos::View< F *[Nd], Kokkos::LayoutRight > ParticlesModel
Definition alias.hpp:19
constexpr T glucose
Definition utils.hpp:29
constexpr T dioxygen
Definition utils.hpp:30
Models definition.
Definition config_loader.hpp:9
KOKKOS_INLINE_FUNCTION consteval F c_linear_density(F rho, F d)
Definition utils.hpp:49
Represents a TruncatedNormal (Gaussian) probability distribution.
Definition prng_extension.hpp:362
Definition uptake_dyn.hpp:79