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/fixed_length.hpp"
12#include "models/utils.hpp"
13#include <mc/prng/prng_extension.hpp>
14#include <mc/traits.hpp>
50 static constexpr std::size_t
n_var
53 static constexpr std::string_view
name =
"simple_acetate";
56 MODEL_CONSTANT std::size_t
N_N = 2;
67 MODEL_CONSTANT Kokkos::Array<FloatType, N_N>
k = {
k_s,
k_a };
71 MODEL_CONSTANT Kokkos::Array<FloatType, N_N>
y = {
y_s,
y_a };
98 KOKKOS_INLINE_FUNCTION
static void
105 KOKKOS_INLINE_FUNCTION
static double
111 static std::array<std::string_view, Self::n_var>
115 "length",
"l_max",
"a_p",
"a_max",
"a_e",
116 "a_e_s",
"a_e_a",
"phi_s",
"phi_a",
127 CHECK_MODEL(SimpleAcetate)
129 KOKKOS_INLINE_FUNCTION
void
135 MODEL_CONSTANT
auto a_max_dist
139 static constexpr auto ld =
l_dist;
140 static constexpr auto lm =
l_dist;
141 auto gen = random_pool.get_state();
146 random_pool.free_state(gen);
158 Kokkos::Array<FloatType, N_N> adm
162 Kokkos::Array<FloatType, N_N> D{};
165 D[0] = adm[0] * c[0] * inv;
166 inv = 1. / (c[1] +
k[1]);
167 D[1] = adm[1] * c[1] * inv;
170 Kokkos::Array<FloatType, N_N> U{};
175 const auto mask_pa =
static_cast<FloatType>(pa < 0.F);
177 U[1] = mask_pa * Kokkos::min(D[1], -pa) + (1 - mask_pa) * 0.F;
194 KOKKOS_INLINE_FUNCTION
void
203 Kokkos::MemoryTraits<Kokkos::MemoryTraitsFlags::Restrict>>
204 buffer_e = buffer_arr;
207 const FloatType new_current_length = current_l / 2.F;
211 for (
auto i = binf; i < bsup; ++i)
213 COPY_PROPERTY_TO(i, idx2, buffer_e);
217 auto gen = random_pool.get_state();
219 const double sigma = 0.2;
220 const double average = Kokkos::log(current_a_e) - sigma * sigma / 2;
223 const auto gen1 =
static_cast<FloatType>(dist.draw(gen));
224 const auto gen2 =
static_cast<FloatType>(dist.draw(gen));
227 const FloatType lmax1 = local_l.draw(gen);
228 const FloatType lmax2 = local_l.draw(gen);
230 KOKKOS_ASSERT(gen1 != 0 && gen2 != 0);
238 random_pool.free_state(gen);
245 return { .begin = begin, .end = begin + 2 };
Kokkos::Subview< KernelConcentrationType, int, decltype(Kokkos::ALL)> LocalConcentration
Definition alias.hpp:95
Status
Definition alias.hpp:58
gen_pool_type< Kokkos::DefaultExecutionSpace > pool_type
Definition alias.hpp:39
Kokkos::View< F *[Nd], Kokkos::LayoutRight > ParticlesModel
Definition alias.hpp:19
Models definition.
Definition config_loader.hpp:9
KOKKOS_INLINE_FUNCTION MC::Status check_div(const T l, const T lc)
Definition utils.hpp:19
static F consteval _get_phi_s_max(F density, F dl, F glucose_to_biomass_yield=0.5)
Definition fixed_length.hpp:18
KOKKOS_INLINE_FUNCTION consteval F c_linear_density(F rho, F d)
Definition utils.hpp:49
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:28
particle_var
Definition simple_acetate.hpp:35
@ phi_s
Definition simple_acetate.hpp:45
@ a_e_a
Definition simple_acetate.hpp:43
@ length
Definition simple_acetate.hpp:36
@ a_e
Definition simple_acetate.hpp:41
@ phi_a
Definition simple_acetate.hpp:46
@ a_e_s
Definition simple_acetate.hpp:42
@ l_max
Definition simple_acetate.hpp:37
@ __COUNT__
Definition simple_acetate.hpp:47
@ a_max
Definition simple_acetate.hpp:39
@ a_p
Definition simple_acetate.hpp:38
static std::array< std::string_view, Self::n_var > names()
Definition simple_acetate.hpp:112
MODEL_CONSTANT FloatType y_a
Definition simple_acetate.hpp:70
std::nullopt_t Config
Definition simple_acetate.hpp:32
MODEL_CONSTANT Kokkos::Array< FloatType, N_N > k
Definition simple_acetate.hpp:67
MODEL_CONSTANT FloatType phi_s_max
Definition simple_acetate.hpp:74
MODEL_CONSTANT auto l_dist
Definition simple_acetate.hpp:80
float FloatType
Definition simple_acetate.hpp:31
std::true_type uniform_weight
Definition simple_acetate.hpp:29
MC::ParticlesModel< Self::n_var, Self::FloatType > SelfParticle
Definition simple_acetate.hpp:54
MODEL_CONSTANT Kokkos::Array< FloatType, N_N > y
Definition simple_acetate.hpp:71
static MC::ContribIndexBounds get_bounds()
Definition simple_acetate.hpp:242
SimpleAcetate Self
Definition simple_acetate.hpp:30
static KOKKOS_INLINE_FUNCTION MC::Status update(const MC::pool_type &random_pool, FloatType d_t, std::size_t idx, const SelfParticle &arr, const MC::LocalConcentration &c)
Definition simple_acetate.hpp:152
MODEL_CONSTANT FloatType lin_density
Definition simple_acetate.hpp:63
MODEL_CONSTANT auto l_max_dist
Definition simple_acetate.hpp:77
MODEL_CONSTANT FloatType y_s
Definition simple_acetate.hpp:69
MODEL_CONSTANT FloatType a_max_m
Definition simple_acetate.hpp:57
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:195
MODEL_CONSTANT FloatType d_m
Definition simple_acetate.hpp:61
MODEL_CONSTANT FloatType l_min_m
Definition simple_acetate.hpp:59
MODEL_CONSTANT FloatType l_max_m
Definition simple_acetate.hpp:58
static constexpr std::string_view name
Definition simple_acetate.hpp:53
MODEL_CONSTANT std::size_t N_N
Definition simple_acetate.hpp:56
static KOKKOS_INLINE_FUNCTION double mass(std::size_t idx, const SelfParticle &arr)
Definition simple_acetate.hpp:106
MODEL_CONSTANT FloatType k_s
Definition simple_acetate.hpp:65
MODEL_CONSTANT FloatType k_a
Definition simple_acetate.hpp:66
static constexpr std::size_t n_var
Definition simple_acetate.hpp:51
static KOKKOS_INLINE_FUNCTION void init(const MC::pool_type &random_pool, std::size_t idx, const SelfParticle &arr)
Definition simple_acetate.hpp:130