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