BioCMAMC-ST
global_initaliser.hpp
1#ifndef __CORE_GLOBAL_INITIALLISER_HPP__
2#define __CORE_GLOBAL_INITIALLISER_HPP__
3
4#include "mixture/species_descriptor.hpp"
5#include <array>
6#include <cma_utils/alias.hpp>
7#include <common/execinfo.hpp>
8#include <common/logger.hpp>
9#include <core/scalar_factory.hpp>
10#include <core/simulation_builder.hpp>
11#include <core/simulation_parameters.hpp>
12#include <cstddef>
13#include <cstdint>
14#include <initializer_list>
15#include <mc/unit.hpp>
16#include <memory>
17#include <optional>
18#include <simulation/feed_descriptor.hpp>
19#include <simulation/mass_transfer.hpp>
20#include <simulation/scalar_initializer.hpp>
21#include <string>
22#include <vector>
23
24class ILoadBalancer;
25
26namespace Simulation
27{
28 class SimulationUnit;
29}
30
31namespace Core
32{
33
41 {
42 public:
49 template <typename T> using OptionalPtr = std::optional<std::unique_ptr<T>>;
50
58 GlobalInitialiser(const ExecInfo& _info,
59 UserControlParameters _user_params,
60 std::shared_ptr<Mixture::SpecieTable> table,
61 std::shared_ptr<IO::Logger> = nullptr);
62
68 // OptionalPtr<CmaRead::FlowIterator> init_flow_iterator();
69
78 std::optional<bool>
79 init_state(const CmaUtils::TransitionnerPtrType& transiionner);
80
81 // /**
82 // * @brief Initializes a transitioner with the provided flow iterator.
83 // *
84 // * @param flow_handle A unique pointer to the flow iterator.
85 // * @return An optional unique pointer to the initialized flow map
86 // * transitioner.
87 // */
88 // std::optional<CmaUtils::TransitionnerPtrType>
89 // init_transitionner(std::unique_ptr<CmaRead::FlowIterator>&& flow_handle);
90
97 std::optional<CmaUtils::TransitionnerPtrType> init_transitionner();
98
105 init_simulation(std::optional<Core::ScalarFactory::ScalarVariant> variant);
106
116 init_simulation(std::unique_ptr<MC::MonteCarloUnit> _unit,
117 Simulation::ScalarInitializer&& scalar_init);
118
124 std::optional<Simulation::ScalarInitializer> init_scalar();
125
126 std::optional<Simulation::ScalarInitializer>
128
129 // Use optional bcause we need to validate step even if theres no mtr
130 std::optional<bool> init_mtr_model(
131 std::optional<Simulation::MassTransfer::Type::MtrTypeVariant>&&
132 variant);
133
139 bool init_feed(std::optional<Simulation::Feed::SimulationFeed> feed
140 = std::nullopt);
141
148
154 [[nodiscard]] bool check_init_terminate() const;
155
156 [[nodiscard]] SimulationParameters get_parameters() const;
157
158 void set_initial_number_particle(uint64_t np) noexcept;
159
160 void set_table(std::shared_ptr<Mixture::SpecieTable> t) noexcept;
161
162 private:
163 void set_logger(std::shared_ptr<IO::Logger> _logger);
164 std::shared_ptr<Mixture::SpecieTable> m_table;
166
180 enum class InitStep : std::size_t
181 {
182 // FlowIterator = 0, ///< Step for initializing the flow iterator.
191 };
192
196 std::array<bool, static_cast<size_t>(InitStep::Count)> validated_steps{};
197
205 template <typename... Args>
206 [[nodiscard]] bool
207 check_steps(InitStep step, Args... args) const
208 {
209 if (!validated_steps[static_cast<size_t>(step)]) // NOLINT
210 {
211 return false;
212 }
213
214 return (... && validated_steps[static_cast<size_t>(args)]);
215 }
216
224 template <typename... Args>
225 void
226 validate_step(InitStep step, Args... args)
227 {
228 validated_steps[static_cast<size_t>(step)] = true; // NOLINT
229 (void)std::initializer_list<int>{ (
230 validated_steps[static_cast<size_t>(args)] = true, 0)... };
231 }
232
239 // CmtCommons::cma_exported_paths_t
240 // get_path_files(const std::string& cma_case_path);
241
245 std::optional<bool>
247
253 void mpi_broadcast();
254
257
259
260 struct inner
261 {
262 };
263
264 std::vector<double> m_liquid_volume;
265 std::vector<double> m_gas_volume;
266
267 std::vector<std::size_t> m_flat_neighobrs;
268
270 // std::vector<size_t> worker_neighbor_data;
272 std::shared_ptr<IO::Logger> m_logger;
274 bool is_host;
275 };
276
277} // namespace Core
278
279#endif //__CORE_GLOBAL_INITIALLISER_HPP__
OptionalPtr< Simulation::SimulationUnit > init_simulation(std::optional< Core::ScalarFactory::ScalarVariant > variant)
Initializes a simulation unit.
Definition global_initaliser.cpp:300
ExecInfo info
Definition global_initaliser.hpp:255
std::vector< double > m_liquid_volume
Definition global_initaliser.hpp:264
std::optional< CmaUtils::TransitionnerPtrType > init_transitionner()
Initializes a transitioner with the provided flow iterator.
Definition global_initaliser.cpp:170
std::shared_ptr< Mixture::SpecieTable > m_table
Definition global_initaliser.hpp:164
void set_initial_number_particle(uint64_t np) noexcept
Definition global_initaliser.cpp:465
bool f_init_gas_flow
Definition global_initaliser.hpp:271
double t_per_flowmap
Definition global_initaliser.hpp:269
std::optional< bool > host_init_state(const CmaUtils::TransitionnerPtrType &transiionner)
Retrieves path files based on the provided case path.
Definition global_initaliser.cpp:501
void validate_step(InitStep step, Args... args)
Validates the specified initialization step and any additional steps.
Definition global_initaliser.hpp:226
void set_table(std::shared_ptr< Mixture::SpecieTable > t) noexcept
Definition global_initaliser.cpp:402
SimulationParameters m_params
Definition global_initaliser.hpp:256
bool check_steps(InitStep step, Args... args) const
Checks the validity of specified initialization steps.
Definition global_initaliser.hpp:207
std::optional< std::unique_ptr< T > > OptionalPtr
Type alias for an optional unique pointer.
Definition global_initaliser.hpp:49
void set_logger(std::shared_ptr< IO::Logger > _logger)
Definition global_initaliser.cpp:104
std::optional< bool > init_mtr_model(std::optional< Simulation::MassTransfer::Type::MtrTypeVariant > &&variant)
Definition global_initaliser.cpp:390
UserControlParameters user_params
Definition global_initaliser.hpp:258
std::array< bool, static_cast< size_t >(InitStep::Count)> validated_steps
Array to track validated initialization steps.
Definition global_initaliser.hpp:196
std::vector< std::size_t > m_flat_neighobrs
Definition global_initaliser.hpp:267
Core::SimulationUnitBuilder m_builder
Definition global_initaliser.hpp:165
std::shared_ptr< IO::Logger > m_logger
Definition global_initaliser.hpp:272
std::optional< bool > init_state(const CmaUtils::TransitionnerPtrType &transiionner)
Initializes a flow iterator.
Definition global_initaliser.cpp:150
OptionalPtr< MC::MonteCarloUnit > init_monte_carlo()
Initializes a Monte Carlo unit.
Definition global_initaliser.cpp:216
std::vector< double > m_gas_volume
Definition global_initaliser.hpp:265
void mpi_broadcast()
Performs MPI broadcast for synchronization.
Definition global_initaliser.cpp:550
std::optional< Simulation::ScalarInitializer > init_scalar()
Initializes a scalar component of the simulation.
Definition global_initaliser.cpp:423
bool is_host
Flag indicating if this instance is the host.
Definition global_initaliser.hpp:274
SimulationParameters get_parameters() const
Definition global_initaliser.cpp:494
InitStep
Enum to define initialization steps.
Definition global_initaliser.hpp:181
@ InitState
Step for initializing the simulation state.
Definition global_initaliser.hpp:184
@ MTR
Definition global_initaliser.hpp:189
@ Feed
Step for initializing the simulation feed.
Definition global_initaliser.hpp:186
@ SimulationUnit
Step for initializing the simulation unit.
Definition global_initaliser.hpp:188
@ Count
Total number of steps in the initialization sequence.
Definition global_initaliser.hpp:190
@ Scalar
Step for initializing scalar values.
Definition global_initaliser.hpp:185
@ Transitioner
Step for initializing the transitioner.
Definition global_initaliser.hpp:183
bool init_feed(std::optional< Simulation::Feed::SimulationFeed > feed=std::nullopt)
Initializes a simulation feed.
Definition global_initaliser.cpp:113
bool check_init_terminate() const
Checks if all initialization steps have been validated.
Definition global_initaliser.cpp:471
GlobalInitialiser(const ExecInfo &_info, UserControlParameters _user_params, std::shared_ptr< Mixture::SpecieTable > table, std::shared_ptr< IO::Logger >=nullptr)
Constructs a GlobalInitialiser instance.
Definition global_initaliser.cpp:72
Definition simulation_builder.hpp:37
interface to balance the number of particle accros ranks
Definition iload_balancer.hpp:13
Definition simulation.hpp:46
rust::Box< TransitionerWrapper > TransitionnerPtrType
Opaque type for flowmap transitioner.
Definition alias.hpp:14
std::variant< Uniform, Local, File, CustomScript, FullCase > ScalarVariant
Path to the custom script used for initializing scalar data.
Definition scalar_factory.hpp:132
Core component to perform simulation.
Definition data_exporter.hpp:38
Namespace that contains classes and structures related to Monte Carlo (MC) simulations.
Definition alias.hpp:16
Namespace that contains classes and structures related to simulation handling.
Definition host_specific.hpp:12
Definition global_initaliser.hpp:261
Definition simulation_parameters.hpp:59
A structure to hold user-defined control parameters for simulation settings.
Definition simulation_parameters.hpp:24
Definition execinfo.hpp:21
Definition scalar_initializer.hpp:29