2#ifndef __SIMPLE_ACETATE_MODEL_HPP__
3#define __SIMPLE_ACETATE_MODEL_HPP__
5#include "Kokkos_Assert.hpp"
6#include "Kokkos_Core_fwd.hpp"
7#include "Kokkos_Macros.hpp"
8#include "common/common.hpp"
9#include "common/traits.hpp"
10#include "mc/macros.hpp"
11#include "models/utils.hpp"
12#include <mc/prng/prng_extension.hpp>
13#include <mc/traits.hpp>
49 static constexpr std::size_t
n_var
52 static constexpr std::string_view
name =
"simple_acetate";
55 static constexpr std::size_t
n_c = 2;
59 MODEL_CONSTANT std::size_t
N_N = 2;
70 MODEL_CONSTANT Kokkos::Array<FloatType, N_N>
k = {
k_s,
k_a };
74 MODEL_CONSTANT Kokkos::Array<FloatType, N_N>
y = {
y_s,
y_a };
98 std::size_t position_index,
101 KOKKOS_INLINE_FUNCTION
static void
108 KOKKOS_INLINE_FUNCTION
static double
114 static std::array<std::string_view, Self::n_var>
118 "length",
"l_max",
"a_p",
"a_max",
"a_e",
119 "a_e_s",
"a_e_a",
"phi_s",
"phi_a",
130 CHECK_MODEL(SimpleAcetate)
132 KOKKOS_INLINE_FUNCTION
void
138 MODEL_CONSTANT
auto a_max_dist
142 static constexpr auto ld =
l_dist;
143 static constexpr auto lm =
l_dist;
144 auto gen = random_pool.get_state();
149 random_pool.free_state(gen);
160 const std::size_t position_index,
163 Kokkos::Array<FloatType, N_N> adm
167 Kokkos::Array<FloatType, N_N> D{};
168 const auto c0 = GET_CONCENTRATION(0);
169 const auto c1 = GET_CONCENTRATION(1);
172 D[0] = adm[0] * c0 * inv;
173 inv = 1. / (c1 +
k[1]);
174 D[1] = adm[1] * c1 * inv;
177 Kokkos::Array<FloatType, N_N> U{};
182 const auto mask_pa =
static_cast<FloatType>(pa < 0.F);
184 U[1] = mask_pa * Kokkos::min(D[1], -pa) + (1 - mask_pa) * 0.F;
199 GET_CONTRIBS(0) =
phi_s;
200 GET_CONTRIBS(1) =
phi_a;
206 KOKKOS_INLINE_FUNCTION
void
214 ComputeSpace::array_layout,
215 Kokkos::MemoryTraits<Kokkos::MemoryTraitsFlags::Restrict>>
216 buffer_e = buffer_arr;
219 const FloatType new_current_length = current_l / 2.F;
223 for (
auto i = binf; i < bsup; ++i)
225 COPY_PROPERTY_TO(i, idx2, buffer_e);
229 auto gen = random_pool.get_state();
230 const double sigma = 0.2;
231 const double average = Kokkos::log(current_a_e) - sigma * sigma / 2;
233 const auto gen1 =
static_cast<FloatType>(dist.draw(gen));
234 const auto gen2 =
static_cast<FloatType>(dist.draw(gen));
237 const FloatType lmax1 = local_l.draw(gen);
238 const FloatType lmax2 = local_l.draw(gen);
247 random_pool.free_state(gen);
Status
Definition alias.hpp:125
gen_pool_type< Kokkos::DefaultExecutionSpace > pool_type
Definition alias.hpp:100
KernelConcentrationType LocalConcentration
Definition alias.hpp:170
Kokkos::View< F *[Nc], ComputeSpace::array_layout, ComputeSpace, Kokkos::MemoryTraits< Kokkos::MemoryTraitsFlags::Restrict > > ParticlesContribs
Definition alias.hpp:66
Kokkos::View< F *[Nd], ComputeSpace::array_layout, ComputeSpace, Kokkos::MemoryTraits< Kokkos::MemoryTraitsFlags::Restrict > > ParticlesModel
Definition alias.hpp:52
Models definition.
Definition config_loader.hpp:9
KOKKOS_INLINE_FUNCTION MC::Status check_div(const T l, const T lc)
Definition utils.hpp:64
static F consteval _get_phi_s_max(F density, F dl, F glucose_to_biomass_yield=0.5)
Definition utils.hpp:45
KOKKOS_INLINE_FUNCTION consteval F c_linear_density(F rho, F d)
Definition utils.hpp:94
Represents a LogNormal (Gaussian) probability distribution.
Definition prng_extension.hpp:525
Represents a TruncatedNormal (Gaussian) probability distribution.
Definition prng_extension.hpp:354
Definition simple_acetate.hpp:27
particle_var
Definition simple_acetate.hpp:34
@ phi_s
Definition simple_acetate.hpp:44
@ a_e_a
Definition simple_acetate.hpp:42
@ length
Definition simple_acetate.hpp:35
@ a_e
Definition simple_acetate.hpp:40
@ phi_a
Definition simple_acetate.hpp:45
@ a_e_s
Definition simple_acetate.hpp:41
@ l_max
Definition simple_acetate.hpp:36
@ __COUNT__
Definition simple_acetate.hpp:46
@ a_max
Definition simple_acetate.hpp:38
@ a_p
Definition simple_acetate.hpp:37
MC::ParticlesContribs< Self::n_c, Self::FloatType > SelfContribs
Definition simple_acetate.hpp:57
static std::array< std::string_view, Self::n_var > names()
Definition simple_acetate.hpp:115
MODEL_CONSTANT FloatType y_a
Definition simple_acetate.hpp:73
std::nullopt_t Config
Definition simple_acetate.hpp:31
MODEL_CONSTANT Kokkos::Array< FloatType, N_N > k
Definition simple_acetate.hpp:70
MODEL_CONSTANT FloatType phi_s_max
Definition simple_acetate.hpp:77
MODEL_CONSTANT auto l_dist
Definition simple_acetate.hpp:83
float FloatType
Definition simple_acetate.hpp:30
std::true_type uniform_weight
Definition simple_acetate.hpp:28
MC::ParticlesModel< Self::n_var, Self::FloatType > SelfParticle
Definition simple_acetate.hpp:53
MODEL_CONSTANT Kokkos::Array< FloatType, N_N > y
Definition simple_acetate.hpp:74
SimpleAcetate Self
Definition simple_acetate.hpp:29
MODEL_CONSTANT FloatType lin_density
Definition simple_acetate.hpp:66
static KOKKOS_INLINE_FUNCTION MC::Status update(const MC::pool_type &random_pool, FloatType d_t, std::size_t idx, const SelfParticle &arr, const SelfContribs &arr_contribs, std::size_t position_index, const MC::LocalConcentration &c)
Definition simple_acetate.hpp:155
MODEL_CONSTANT auto l_max_dist
Definition simple_acetate.hpp:80
MODEL_CONSTANT FloatType y_s
Definition simple_acetate.hpp:72
MODEL_CONSTANT FloatType a_max_m
Definition simple_acetate.hpp:60
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 simple_acetate.hpp:207
MODEL_CONSTANT FloatType d_m
Definition simple_acetate.hpp:64
MODEL_CONSTANT FloatType l_min_m
Definition simple_acetate.hpp:62
MODEL_CONSTANT FloatType l_max_m
Definition simple_acetate.hpp:61
static constexpr std::string_view name
Definition simple_acetate.hpp:52
MODEL_CONSTANT std::size_t N_N
Definition simple_acetate.hpp:59
static constexpr std::size_t n_c
Definition simple_acetate.hpp:55
static KOKKOS_INLINE_FUNCTION double mass(std::size_t idx, const SelfParticle &arr)
Definition simple_acetate.hpp:109
MODEL_CONSTANT FloatType k_s
Definition simple_acetate.hpp:68
MODEL_CONSTANT FloatType k_a
Definition simple_acetate.hpp:69
static constexpr std::size_t n_var
Definition simple_acetate.hpp:50
static KOKKOS_INLINE_FUNCTION void init(const MC::pool_type &random_pool, std::size_t idx, const SelfParticle &arr)
Definition simple_acetate.hpp:133