BioCMAMC-ST
utils.hpp
1#ifndef __BIO__UTILS_HPP__
2#define __BIO__UTILS_HPP__
3
4#include "Kokkos_Macros.hpp"
5#include <Kokkos_Core.hpp>
6#include <Kokkos_MathematicalConstants.hpp>
7#include <Kokkos_Random.hpp>
8#include <common/traits.hpp>
9#include <mc/alias.hpp>
10#include <mc/prng/prng.hpp>
14namespace Models
15{
16
17 template <FloatingPointType T>
18 KOKKOS_INLINE_FUNCTION MC::Status
19 check_div(const T l, const T lc)
20 {
21 return (l >= lc) ? MC::Status::Division : MC::Status::Idle;
22 }
23
24 namespace MolarMass
25 {
26 namespace GramPerMole
27 {
28
29 template <FloatingPointType T> constexpr T glucose = static_cast<T>(180);
30 template <FloatingPointType T> constexpr T dioxygen = static_cast<T>(32);
31 template <FloatingPointType T> constexpr T acetate = static_cast<T>(59);
32
33 constexpr double co2 = 44;
34 ;
35 }; // namespace GramPerMole
36
37 constexpr double glucose = GramPerMole::glucose<double> * 1e-3;
38 constexpr double dioxygen = GramPerMole::dioxygen<double> * 1e-3;
39 ;
40 constexpr double acetate = GramPerMole::acetate<double> * 1e-3;
41 ;
42 constexpr double co2 = GramPerMole::co2 * 1e-3;
43 ;
44 [[deprecated]] constexpr double X = 113.1e-3;
45 }; // namespace MolarMass
46
47 template <FloatingPointType F>
48 KOKKOS_INLINE_FUNCTION consteval F
49 c_linear_density(F rho, F d)
50 {
51 return rho * F(Kokkos::numbers::pi) * d * d / F(4.);
52 }
53
54 static constexpr double tau_division_proba = 1e-7;
55
56 KOKKOS_INLINE_FUNCTION bool
58 double gamma,
59 MC::pool_type random_pool)
60 {
61 (void)d_t;
62 // const double proba_div =
63 // (1 - Kokkos::exp(-d_t / tau_division_proba)) * gamma;
64
65 auto generator = random_pool.get_state();
66 const double x = generator.drand(0., 1.);
67 random_pool.free_state(generator);
68
69 return x < gamma;
70 }
71
72 namespace GammaDivision
73 {
74 KOKKOS_INLINE_FUNCTION double
75 threshold_linear(double lenght, double threshold, double upper_bound)
76 {
77 return (lenght <= threshold)
78 ? 0
79 : (lenght - threshold) / (upper_bound - threshold);
80 }
81
82 KOKKOS_INLINE_FUNCTION constexpr float
83 logistic(float x, float xmax, float alpha)
84 {
85 // auto blna = alpha * std::log(xmax);
86 // return 1 / (1 + std::exp(-alpha * std::log(x) + blna));
87 // return x<xmax?1. / (1 + std::exp(alpha * std::log((x-xmax)/xmax ))):1.;
88
89 const auto z = x < xmax ? std::pow(x / (xmax - x), alpha) : 1.;
90 return z / (1. + z);
91 }
92
93 } // namespace GammaDivision
94
95 KOKKOS_INLINE_FUNCTION bool
96 almost_equal(double val, double val2, double tolerance = 1e-8)
97 {
98 return Kokkos::abs(val - val2) < tolerance;
99 }
100
101 template <typename... Args>
102 KOKKOS_INLINE_FUNCTION double
103 min_var(Args... args)
104 {
105 return (Kokkos::min)({ args... });
106 }
107 template <>
108 KOKKOS_INLINE_FUNCTION double
110 {
111 return 0.;
112 }
113
114} // namespace Models
115
116#endif
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
Definition utils.hpp:73
KOKKOS_INLINE_FUNCTION double threshold_linear(double lenght, double threshold, double upper_bound)
Definition utils.hpp:75
KOKKOS_INLINE_FUNCTION constexpr float logistic(float x, float xmax, float alpha)
Definition utils.hpp:83
Definition utils.hpp:27
constexpr T acetate
Definition utils.hpp:31
constexpr T glucose
Definition utils.hpp:29
constexpr T dioxygen
Definition utils.hpp:30
constexpr double co2
Definition utils.hpp:33
Definition utils.hpp:25
constexpr double acetate
Definition utils.hpp:40
constexpr double co2
Definition utils.hpp:42
constexpr double X
Definition utils.hpp:44
constexpr double glucose
Definition utils.hpp:37
constexpr double dioxygen
Definition utils.hpp:38
Models definition.
Definition config_loader.hpp:9
KOKKOS_INLINE_FUNCTION bool check_probability_division(double d_t, double gamma, MC::pool_type random_pool)
Definition utils.hpp:57
KOKKOS_INLINE_FUNCTION double min_var()
Definition utils.hpp:109
KOKKOS_INLINE_FUNCTION MC::Status check_div(const T l, const T lc)
Definition utils.hpp:19
KOKKOS_INLINE_FUNCTION bool almost_equal(double val, double val2, double tolerance=1e-8)
Definition utils.hpp:96
KOKKOS_INLINE_FUNCTION consteval F c_linear_density(F rho, F d)
Definition utils.hpp:49
static constexpr double tau_division_proba
Definition utils.hpp:54