BioCMAMC-ST
api.hpp
1#ifndef __BIOMC_API_HPP__
2#define __BIOMC_API_HPP__
3
4#include "common/logger.hpp"
5#include <api/results.hpp>
6#include <common/execinfo.hpp>
7#include <core/case_data.hpp>
8#include <core/scalar_factory.hpp>
9#include <core/simulation_parameters.hpp>
10#include <cstdlib>
11#include <memory>
12#include <optional>
13#include <simulation/feed_descriptor.hpp>
14#include <simulation/mass_transfer.hpp>
15#include <span>
16#include <string_view>
17#include <utility>
18
23namespace Api
24{
25 constexpr std::array<int, 3>
27 {
28 return { _BIOMC_VERSION_MAJOR, _BIOMC_VERSION_MINOR, _BIOMC_VERSION_DEV };
29 }
30
31 void finalise();
32
49 {
50 public:
68
78 static std::optional<std::unique_ptr<SimulationInstance>>
79 init(int argc,
80 char** argv,
81 std::optional<std::size_t> run_id = std::nullopt) noexcept;
82
83 static std::vector<std::string> get_model_list() noexcept;
84
93
101 ApiResult apply(bool to_load) noexcept;
102
108 ApiResult apply() noexcept;
109
116 ApiResult apply_load() noexcept;
117
125 register_parameters(Core::UserControlParameters&& params) noexcept;
126
133 bool register_result_path(std::string_view path);
134
136 register_initial_condition(Core::ScalarFactory::ScalarVariant&& type);
137 ApiResult register_initialiser_file_path(std::string_view path);
145 ApiResult register_cma_path(std::string_view path);
146
153 bool register_serde(std::string_view path);
154
161 ApiResult register_model_name(std::string_view path);
162
163 ApiResult set_feed(Simulation::Feed::FeedDescriptor feed_variant,
164 Phase phase = Phase::Liquid);
165
166 ApiResult set_mtr(Simulation::MassTransfer::Type::MtrTypeVariant&& variant);
167
168 void set_auto_mtr();
169
171 register_scalar_initiazer(Core::ScalarFactory::ScalarVariant&& var);
172
178 [[nodiscard]] int get_id() const;
179
180 [[nodiscard]] const ExecInfo& get_exec_info() const;
181
187 ApiResult exec() noexcept;
188
189 void
190 set_logger(std::shared_ptr<IO::Logger> _logger)
191 {
192
193 logger = std::move(_logger);
194 }
195
196 [[nodiscard]] auto&
198 {
199 return logger;
200 }
201
202 private:
203 int id{};
204
213 SimulationInstance(int argc,
214 char** argv,
215 std::optional<std::size_t> run_id);
216
217 std::shared_ptr<IO::Logger> logger;
218
219 std::optional<Core::ScalarFactory::ScalarVariant> scalar_initializer_variant
220 = std::nullopt;
223 bool loaded = false;
224 bool applied = false;
225 bool registered = false;
226 std::optional<Simulation::Feed::SimulationFeed> feed
227 = std::nullopt;
228 std::optional<Simulation::MassTransfer::Type::MtrTypeVariant> mtr_type
229 = std::nullopt;
230
232 };
233
234} // namespace Api
235#endif
Api This namespace contains classes and functions related to the simulation API.
Definition api.hpp:24
constexpr std::array< int, 3 > get_version()
Definition api.hpp:26
void finalise()
Definition api.cpp:69
Core component to perform simulation.
Definition data_exporter.hpp:19
Definition impl_post_process.hpp:11
Namespace that contains classes and structures related to simulation handling.
Definition main_exporter.hpp:18
Definition results.hpp:8
ApiResult register_model_name(std::string_view path)
Register the model name for the simulation.
Definition api.cpp:407
SimulationInstance(SimulationInstance &&)=default
Defaulted move constructor for efficient resource transfer.
std::optional< Core::ScalarFactory::ScalarVariant > scalar_initializer_variant
Definition api.hpp:220
bool register_result_path(std::string_view path)
Register a result output path.
Definition api.cpp:353
static std::vector< std::string > get_model_list() noexcept
Definition api.cpp:414
bool registered
Flag indicating if resources are registered.
Definition api.hpp:225
ApiResult apply(bool to_load) noexcept
Apply the simulation configuration and prepare for execution.
Definition api.cpp:319
const ExecInfo & get_exec_info() const
Definition api.cpp:420
ApiResult exec() noexcept
Execute the simulation.
Definition api.cpp:173
bool register_serde(std::string_view path)
Register a serialization/deserialization (serde) path.
Definition api.cpp:399
ApiResult set_feed(Simulation::Feed::FeedDescriptor feed_variant, Phase phase=Phase::Liquid)
Definition api.cpp:90
void set_logger(std::shared_ptr< IO::Logger > _logger)
Definition api.hpp:190
std::optional< Simulation::MassTransfer::Type::MtrTypeVariant > mtr_type
Definition api.hpp:229
void set_auto_mtr()
Definition api.cpp:245
SimulationInstance(const SimulationInstance &)=delete
Deleted copy constructor to prevent copying.
ApiResult register_initial_condition(Core::ScalarFactory::ScalarVariant &&type)
Definition api.cpp:391
auto & get_logger() const
Definition api.hpp:197
Core::CaseData _data
Case data for the simulation.
Definition api.hpp:221
bool auto_mtr
Definition api.hpp:231
SimulationInstance & operator=(SimulationInstance &&)=default
Defaulted move assignment operator for efficient resource transfer.
std::shared_ptr< IO::Logger > logger
Definition api.hpp:217
int get_id() const
Retrieve the simulation instance's unique identifier.
Definition api.cpp:84
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:158
ApiResult register_cma_path(std::string_view path)
Register a path for CMA data.
Definition api.cpp:369
ApiResult apply_load() noexcept
Load ad apply the simulation configuration and prepare for execution based on file.
Definition api.cpp:208
ApiResult set_mtr(Simulation::MassTransfer::Type::MtrTypeVariant &&variant)
Definition api.cpp:235
ApiResult register_parameters(Core::UserControlParameters &&params) noexcept
Register user control parameters for the simulation.
Definition api.cpp:344
bool applied
Flag indicating if the configuration is applied.
Definition api.hpp:224
std::optional< Simulation::Feed::SimulationFeed > feed
Optional feed configuration.
Definition api.hpp:227
SimulationInstance & operator=(const SimulationInstance &)=delete
Deleted copy assignment operator to prevent copying.
Core::UserControlParameters params
User-defined control parameters.
Definition api.hpp:222
bool loaded
Flag indicating if the instance is loaded.
Definition api.hpp:223
ApiResult register_initialiser_file_path(std::string_view path)
Definition api.cpp:362
ApiResult register_scalar_initiazer(Core::ScalarFactory::ScalarVariant &&var)
Definition api.cpp:311
SimulationInstance()=delete
Default constructor.
Holds the data required to execute a simulation case.
Definition case_data.hpp:39
A structure to hold user-defined control parameters for simulation settings.
Definition simulation_parameters.hpp:24
Definition execinfo.hpp:12