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;
46 };
47
48 struct Custom
49 {
50 };
51
52 using FeedTypeVariant = std::variant<Constant, Step, Pulse, Custom, DelayedConstant>;
53
54 FeedType get_type(const FeedTypeVariant& v);
55
57 {
58 public:
59 FeedDescritor() = default;
60 FeedDescritor(double _f,
61 feed_value_t&& _target,
62 feed_position_t&& _position,
63 feed_species_t _species,
64 FeedTypeVariant _props,
65 bool set_exit);
66
67 double flow_value{};
72 bool set_exit = true;
73 size_t n_v{};
74
75 void update(double t, double d_t) noexcept;
76
77 private:
78 FeedType type{};
80 };
81
83 {
84 static FeedDescritor constant(double _f,
85 feed_value_t&& _target,
86 feed_position_t&& _position,
87 feed_species_t _species,
88 bool set_exit = true);
90 feed_value_t&& _target,
91 feed_position_t&& _position,
92 feed_species_t _species,
93 double t_init,
94 double t_end,
95 bool set_exit = true);
96 };
97
99 {
100 std::optional<std::vector<FeedDescritor>> liquid;
101 std::optional<std::vector<FeedDescritor>> gas;
102 };
103
104 // struct Visitor
105 // {
106 // void operator()(Uniform args);
107 // void operator()(Local args);
108 // void operator()(File filepath);
109 // void operator()(CustomScript path);
110 // };
111} // namespace Simulation::Feed
112
113#endif
Definition feed_descriptor.hpp:57
void update(double t, double d_t) noexcept
Definition feed_descriptor.cpp:52
bool set_exit
Definition feed_descriptor.hpp:72
FeedTypeVariant props
Definition feed_descriptor.hpp:71
FeedType type
Definition feed_descriptor.hpp:78
feed_value_t value
Definition feed_descriptor.hpp:68
feed_value_t target
Definition feed_descriptor.hpp:79
size_t n_v
Definition feed_descriptor.hpp:73
feed_position_t position
Definition feed_descriptor.hpp:69
feed_species_t species
Definition feed_descriptor.hpp:70
double flow_value
Definition feed_descriptor.hpp:67
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:52
FeedType get_type(const FeedTypeVariant &v)
Definition feed_descriptor.cpp:23
Definition feed_descriptor.hpp:26
Definition feed_descriptor.hpp:49
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:83
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 constant(double _f, feed_value_t &&_target, feed_position_t &&_position, feed_species_t _species, bool set_exit=true)
Definition feed_descriptor.cpp:113
Definition feed_descriptor.hpp:42
double t_init
Definition feed_descriptor.hpp:43
double frequency
Definition feed_descriptor.hpp:45
double t_end
Definition feed_descriptor.hpp:44
Definition feed_descriptor.hpp:99
std::optional< std::vector< FeedDescritor > > gas
Definition feed_descriptor.hpp:101
std::optional< std::vector< FeedDescritor > > liquid
Definition feed_descriptor.hpp:100
Definition feed_descriptor.hpp:37
double t_init
Definition feed_descriptor.hpp:38