BioCMAMC-ST
api.hpp
1#ifndef __BIOMC_API_HPP__
2#define __BIOMC_API_HPP__
3
4#include "common/execinfo.hpp"
5#include "core/scalar_factory.hpp"
6#include <api/results.hpp>
7#include <core/case_data.hpp>
8#include <core/simulation_parameters.hpp>
9#include <cstdint>
10#include <cstdlib>
11#include <memory>
12#include <optional>
13#include <simulation/feed_descriptor.hpp>
14#include <span>
15#include <string_view>
16
21namespace Api
22{
23
24 void finalise();
25
41 {
42 public:
59
69 static std::optional<std::unique_ptr<SimulationInstance>>
70 init(int argc, char** argv, std::optional<std::size_t> run_id = std::nullopt) noexcept;
71
80
87 ApiResult apply(bool to_load) noexcept;
88
94 ApiResult apply() noexcept;
95
101 ApiResult apply_load() noexcept;
102
109 ApiResult register_parameters(Core::UserControlParameters&& params) noexcept;
110
117 bool register_result_path(std::string_view path);
118
119 ApiResult register_initial_condition(Core::ScalarFactory::ScalarVariant&& type);
120 ApiResult register_initialiser_file_path(std::string_view path);
128 bool register_cma_path(std::string_view path, bool recursive = false);
129
136 bool register_serde(std::string_view path);
137
144 ApiResult register_model_name(std::string_view path);
145
146 bool set_feed(Simulation::Feed::FeedDescritor feed_variant,bool gas=false);
147
158 bool set_feed_constant(double _flow,
159 std::span<double> _concentration,
160 std::span<std::size_t> _position,
161 std::span<std::size_t> _species,
162 bool gas = false,
163 bool fed_batch = false);
164
165 bool set_feed_constant_from_rvalue(double _f,
166 std::vector<double>&& _target,
167 std::vector<std::size_t>&& _position,
168 std::vector<std::size_t>&& _species,
169 bool gas = false,
170 bool fed_batch = false);
171
172 ApiResult register_scalar_initiazer(Core::ScalarFactory::ScalarVariant&& var);
173
179 [[nodiscard]] int get_id() const;
180
181 [[nodiscard]] const ExecInfo& get_exec_info() const
182 {
183 return _data.exec_info;
184 }
185
191 ApiResult exec() noexcept;
192
193 private:
194 int id{};
195
204 SimulationInstance(int argc, char** argv, std::optional<std::size_t> run_id);
205
206 std::optional<Core::ScalarFactory::ScalarVariant> scalar_initializer_variant = std::nullopt;
209 bool loaded = false;
210 bool applied = false;
211 bool registered = false;
212 std::optional<Simulation::Feed::SimulationFeed> feed =
213 std::nullopt;
214 };
215
216} // namespace Api
217#endif
Api This namespace contains classes and functions related to the simulation API.
Definition api.hpp:22
void finalise()
Definition api.cpp:64
Core component to perform simulation.
Definition data_exporter.hpp:18
Namespace that contains classes and structures related to simulation handling.
Definition host_specific.hpp:12
Definition results.hpp:9
Represents an instance of a simulation with customizable parameters and behaviors.
Definition api.hpp:41
ApiResult register_model_name(std::string_view path)
Register the model name for the simulation.
Definition api.cpp:294
SimulationInstance(SimulationInstance &&)=default
Defaulted move constructor for efficient resource transfer.
std::optional< Core::ScalarFactory::ScalarVariant > scalar_initializer_variant
Definition api.hpp:206
bool register_result_path(std::string_view path)
Register a result output path.
Definition api.cpp:256
bool set_feed_constant_from_rvalue(double _f, std::vector< double > &&_target, std::vector< std::size_t > &&_position, std::vector< std::size_t > &&_species, bool gas=false, bool fed_batch=false)
Definition api.cpp:82
bool registered
Flag indicating if resources are registered.
Definition api.hpp:211
const ExecInfo & get_exec_info() const
Definition api.hpp:181
ApiResult exec() noexcept
Execute the simulation.
Definition api.cpp:158
bool register_serde(std::string_view path)
Register a serialization/deserialization (serde) path.
Definition api.cpp:287
bool register_cma_path(std::string_view path, bool recursive=false)
Register a path for CMA data.
Definition api.cpp:272
SimulationInstance(const SimulationInstance &)=delete
Deleted copy constructor to prevent copying.
ApiResult register_initial_condition(Core::ScalarFactory::ScalarVariant &&type)
Definition api.cpp:281
bool set_feed(Simulation::Feed::FeedDescritor feed_variant, bool gas=false)
Definition api.cpp:92
Core::CaseData _data
Case data for the simulation.
Definition api.hpp:207
bool set_feed_constant(double _flow, std::span< double > _concentration, std::span< std::size_t > _position, std::span< std::size_t > _species, bool gas=false, bool fed_batch=false)
Configure feed constants for the simulation.
Definition api.cpp:114
SimulationInstance & operator=(SimulationInstance &&)=default
Defaulted move assignment operator for efficient resource transfer.
int get_id() const
Retrieve the simulation instance's unique identifier.
Definition api.cpp:72
static std::optional< std::unique_ptr< SimulationInstance > > init(int argc, char **argv, std::optional< std::size_t > run_id=std::nullopt) noexcept
Initialize a simulation instance.
Definition api.cpp:146
ApiResult apply_load() noexcept
Load ad apply the simulation configuration and prepare for execution based on file.
Definition api.cpp:179
ApiResult register_parameters(Core::UserControlParameters &&params) noexcept
Register user control parameters for the simulation.
Definition api.cpp:248
bool applied
Flag indicating if the configuration is applied.
Definition api.hpp:210
~SimulationInstance()
Default destructor.
Definition api.cpp:140
std::optional< Simulation::Feed::SimulationFeed > feed
Optional feed configuration.
Definition api.hpp:212
SimulationInstance & operator=(const SimulationInstance &)=delete
Deleted copy assignment operator to prevent copying.
Core::UserControlParameters params
User-defined control parameters.
Definition api.hpp:208
ApiResult apply() noexcept
Apply the simulation configuration and prepare for execution.
Definition api.cpp:198
bool loaded
Flag indicating if the instance is loaded.
Definition api.hpp:209
ApiResult register_initialiser_file_path(std::string_view path)
Definition api.cpp:265
ApiResult register_scalar_initiazer(Core::ScalarFactory::ScalarVariant &&var)
Definition api.cpp:232
SimulationInstance()=delete
Default constructor.
Holds the data required to execute a simulation case.
Definition case_data.hpp:28
ExecInfo exec_info
Information about the execution environment.
Definition case_data.hpp:61
A structure to hold user-defined control parameters for simulation settings.
Definition simulation_parameters.hpp:24
Definition execinfo.hpp:12