BioCMAMC-ST
feed_descriptor.hpp
1#ifndef __SIMULATION_FEED_DESCRIPTOR_HPP__
2#define __SIMULATION_FEED_DESCRIPTOR_HPP__
3
4#include <cstddef>
5#include <cstdint>
6#include <optional>
7#include <variant>
8#include <vector>
9
10enum class FeedType : std::uint8_t
11{
12 Constant,
13 DelayedConstant,
14 Step,
15 Pulse,
16 Custom
17};
18
20{
21 using feed_value_t = std::vector<double>;
22 using feed_position_t = std::vector<std::size_t>;
23 using feed_species_t = std::vector<std::size_t>;
24
25 struct Constant
26 {
27 };
28
30 {
31 double t_init;
32 double t_end;
34 };
35
36 struct Step
37 {
38 double t_init = 0.;
39 };
40
41 struct Pulse
42 {
43 double t_init;
44 double t_end;
45 double frequency;
47 };
48
49 struct Custom
50 {
51 };
52
53 using FeedTypeVariant = std::variant<Constant, Step, Pulse, Custom, DelayedConstant>;
54
55 FeedType get_type(const FeedTypeVariant& v);
56
58 {
59 public:
60 FeedDescritor() = default;
61 FeedDescritor(double _f,
62 feed_value_t&& _target,
63 feed_position_t&& _position,
64 feed_species_t _species,
65 FeedTypeVariant _props,
66 bool set_exit);
67
68 double flow_value{};
73 bool set_exit = true;
74 size_t n_v{};
75
76 void update(double t, double d_t) noexcept;
77
78 private:
79 FeedType type{};
81 };
82
84 {
85 static FeedDescritor constant(double _f,
86 feed_value_t&& _target,
87 feed_position_t&& _position,
88 feed_species_t _species,
89 bool set_exit = true);
91 feed_value_t&& _target,
92 feed_position_t&& _position,
93 feed_species_t _species,
94 double t_init,
95 double t_end,
96 bool set_exit = true);
97
98 static FeedDescritor pulse(double _f,
99 feed_value_t&& _target,
100 feed_position_t&& _position,
101 feed_species_t _species,
102 double t_init,
103 double t_end,
104 double frequency,
105 bool set_exit = true);
106 };
107
109 {
110 std::optional<std::vector<FeedDescritor>> liquid;
111 std::optional<std::vector<FeedDescritor>> gas;
112 };
113
114 // struct Visitor
115 // {
116 // void operator()(Uniform args);
117 // void operator()(Local args);
118 // void operator()(File filepath);
119 // void operator()(CustomScript path);
120 // };
121} // namespace Simulation::Feed
122
123#endif
Definition feed_descriptor.hpp:58
void update(double t, double d_t) noexcept
Definition feed_descriptor.cpp:53
bool set_exit
Definition feed_descriptor.hpp:73
FeedTypeVariant props
Definition feed_descriptor.hpp:72
FeedType type
Definition feed_descriptor.hpp:79
feed_value_t value
Definition feed_descriptor.hpp:69
feed_value_t target
Definition feed_descriptor.hpp:80
size_t n_v
Definition feed_descriptor.hpp:74
feed_position_t position
Definition feed_descriptor.hpp:70
feed_species_t species
Definition feed_descriptor.hpp:71
double flow_value
Definition feed_descriptor.hpp:68
Definition feed_descriptor.hpp:20
std::vector< std::size_t > feed_species_t
Definition feed_descriptor.hpp:23
std::vector< double > feed_value_t
Definition feed_descriptor.hpp:21
std::vector< std::size_t > feed_position_t
Definition feed_descriptor.hpp:22
std::variant< Constant, Step, Pulse, Custom, DelayedConstant > FeedTypeVariant
Definition feed_descriptor.hpp:53
FeedType get_type(const FeedTypeVariant &v)
Definition feed_descriptor.cpp:24
Definition feed_descriptor.hpp:26
Definition feed_descriptor.hpp:50
Definition feed_descriptor.hpp:30
double t_end
Definition feed_descriptor.hpp:32
double stored_value
Definition feed_descriptor.hpp:33
double t_init
Definition feed_descriptor.hpp:31
Definition feed_descriptor.hpp:84
static FeedDescritor delayedconstant(double _f, feed_value_t &&_target, feed_position_t &&_position, feed_species_t _species, double t_init, double t_end, bool set_exit=true)
static FeedDescritor pulse(double _f, feed_value_t &&_target, feed_position_t &&_position, feed_species_t _species, double t_init, double t_end, double frequency, bool set_exit=true)
Definition feed_descriptor.cpp:150
static FeedDescritor constant(double _f, feed_value_t &&_target, feed_position_t &&_position, feed_species_t _species, bool set_exit=true)
Definition feed_descriptor.cpp:124
Definition feed_descriptor.hpp:42
double t_init
Definition feed_descriptor.hpp:43
double frequency
Definition feed_descriptor.hpp:45
double stored_value
Definition feed_descriptor.hpp:46
double t_end
Definition feed_descriptor.hpp:44
Definition feed_descriptor.hpp:109
std::optional< std::vector< FeedDescritor > > gas
Definition feed_descriptor.hpp:111
std::optional< std::vector< FeedDescritor > > liquid
Definition feed_descriptor.hpp:110
Definition feed_descriptor.hpp:37
double t_init
Definition feed_descriptor.hpp:38