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