BioCMAMC-ST
global_initaliser.hpp
1#ifndef __CORE_GLOBAL_INITIALLISER_HPP__
2#define __CORE_GLOBAL_INITIALLISER_HPP__
3
4#include "transitionner/transitionner.hpp"
5#include <core/scalar_factory.hpp>
6#include <core/simulation_parameters.hpp>
7#include <array>
8#include <cma_read/flow_iterator.hpp>
9#include <cma_read/neighbors.hpp>
10#include <cmt_common/cma_case.hpp>
11#include <common/execinfo.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/scalar_initializer.hpp>
20#include <simulation/simulation.hpp>
21#include <string>
22#include <vector>
23
24
25class ILoadBalancer;
26
27namespace Core
28{
29
36 {
37 public:
44 template <typename T> using OptionalPtr = std::optional<std::unique_ptr<T>>;
45
52 GlobalInitialiser(const ExecInfo& _info, UserControlParameters _user_params);
53
60
67 std::optional<bool> init_state(std::unique_ptr<CmaRead::FlowIterator>& flow_handle);
68
76 init_transitionner(std::unique_ptr<CmaRead::FlowIterator>&& flow_handle);
77
84
90 OptionalPtr<Simulation::SimulationUnit> init_simulation(std::optional<Core::ScalarFactory::ScalarVariant> variant=std::nullopt);
91
92
102 init_simulation(std::unique_ptr<MC::MonteCarloUnit> _unit,
103 const Simulation::ScalarInitializer& scalar_init);
104
110 std::optional<Simulation::ScalarInitializer> init_scalar();
111
112 std::optional<Simulation::ScalarInitializer> init_scalar(Core::ScalarFactory::ScalarVariant&& variant);
113
119 void init_feed(std::optional<Simulation::Feed::SimulationFeed> feed = std::nullopt);
120
127
133 [[nodiscard]] bool check_init_terminate() const;
134
135 [[nodiscard]] SimulationParameters get_parameters() const;
136
137 void set_initial_number_particle(uint64_t np) noexcept;
138
139 private:
153 enum class InitStep : std::size_t
154 {
155 FlowIterator = 0,
157 InitState,
158 Scalar,
159 Feed,
160 MC,
162 Count
163 };
164
168 std::array<bool, static_cast<size_t>(InitStep::Count)> validated_steps{};
169
177 template <typename... Args> [[nodiscard]] bool check_steps(InitStep step, Args... args) const
178 {
179 if (!validated_steps[static_cast<size_t>(step)]) // NOLINT
180 {
181 return false;
182 }
183
184 return (... && validated_steps[static_cast<size_t>(args)]);
185 }
186
193 template <typename... Args> void validate_step(InitStep step, Args... args)
194 {
195 validated_steps[static_cast<size_t>(step)] = true; // NOLINT
196 (void)std::initializer_list<int>{(validated_steps[static_cast<size_t>(args)] = true, 0)...};
197 }
198
205 CmtCommons::cma_exported_paths_t get_path_files(const std::string& cma_case_path);
206
210 std::optional<bool> host_init_state(std::unique_ptr<CmaRead::FlowIterator>& flow_handle);
211
216 void mpi_broadcast();
217
218
219
222
224
227 std::vector<double> liquid_volume;
228 std::vector<double> gas_volume;
229 CmaRead::Neighbors::Neighbors_const_view_t liquid_neighbors;
231 std::vector<size_t> worker_neighbor_data;
233 std::optional<Simulation::Feed::SimulationFeed> feed;
235
236 bool is_host;
237 };
238
239} // namespace Core
240
241#endif //__CORE_GLOBAL_INITIALLISER_HPP__
A class responsible for initializing various components of a simulation framework.
Definition global_initaliser.hpp:36
ExecInfo info
Definition global_initaliser.hpp:220
std::optional< bool > init_state(std::unique_ptr< CmaRead::FlowIterator > &flow_handle)
Initializes the simulation state.
Definition global_initaliser.cpp:90
void set_initial_number_particle(uint64_t np) noexcept
Definition global_initaliser.cpp:363
std::optional< Simulation::Feed::SimulationFeed > feed
Definition global_initaliser.hpp:233
uint64_t particle_per_process
Definition global_initaliser.hpp:226
bool f_init_gas_flow
Definition global_initaliser.hpp:232
double t_per_flowmap
Definition global_initaliser.hpp:230
void validate_step(InitStep step, Args... args)
Validates the specified initialization step and any additional steps.
Definition global_initaliser.hpp:193
void init_feed(std::optional< Simulation::Feed::SimulationFeed > feed=std::nullopt)
Initializes a simulation feed.
Definition global_initaliser.cpp:83
bool check_steps(InitStep step, Args... args) const
Checks the validity of specified initialization steps.
Definition global_initaliser.hpp:177
OptionalPtr< Simulation::SimulationUnit > init_simulation(std::optional< Core::ScalarFactory::ScalarVariant > variant=std::nullopt)
Initializes a simulation unit.
Definition global_initaliser.cpp:125
std::vector< double > gas_volume
Definition global_initaliser.hpp:228
std::optional< std::unique_ptr< T > > OptionalPtr
Type alias for an optional unique pointer.
Definition global_initaliser.hpp:44
std::vector< double > liquid_volume
Definition global_initaliser.hpp:227
CmtCommons::cma_exported_paths_t get_path_files(const std::string &cma_case_path)
Retrieves path files based on the provided case path.
Definition global_initaliser.cpp:75
std::vector< size_t > worker_neighbor_data
Definition global_initaliser.hpp:231
GlobalInitialiser(const ExecInfo &_info, UserControlParameters _user_params)
Constructs a GlobalInitialiser instance.
Definition global_initaliser.cpp:61
UserControlParameters user_params
Definition global_initaliser.hpp:223
CmaRead::Neighbors::Neighbors_const_view_t liquid_neighbors
Definition global_initaliser.hpp:229
std::array< bool, static_cast< size_t >(InitStep::Count)> validated_steps
Array to track validated initialization steps.
Definition global_initaliser.hpp:168
OptionalPtr< CmaUtils::FlowMapTransitionner > init_transitionner()
Initializes a transitioner without parameters.
Definition global_initaliser.cpp:112
OptionalPtr< CmaRead::FlowIterator > init_flow_iterator()
Initializes a flow iterator.
Definition global_initaliser.cpp:190
OptionalPtr< MC::MonteCarloUnit > init_monte_carlo()
Initializes a Monte Carlo unit.
Definition global_initaliser.cpp:142
void mpi_broadcast()
Performs MPI broadcast for synchronization.
Definition global_initaliser.cpp:455
std::optional< Simulation::ScalarInitializer > init_scalar()
Initializes a scalar component of the simulation.
Definition global_initaliser.cpp:328
SimulationParameters params
Definition global_initaliser.hpp:221
bool is_host
Flag indicating if this instance is the host.
Definition global_initaliser.hpp:236
std::optional< bool > host_init_state(std::unique_ptr< CmaRead::FlowIterator > &flow_handle)
Host speciffic state init.
Definition global_initaliser.cpp:391
SimulationParameters get_parameters() const
Definition global_initaliser.cpp:384
InitStep
Enum to define initialization steps.
Definition global_initaliser.hpp:154
@ FlowIterator
Step for initializing the flow iterator.
@ InitState
Step for initializing the simulation state.
@ MC
Step for initializing the Monte Carlo unit.
@ Feed
Step for initializing the simulation feed.
@ SimulationUnit
Step for initializing the simulation unit.
@ Count
Total number of steps in the initialization sequence.
@ Scalar
Step for initializing scalar values.
@ Transitioner
Step for initializing the transitioner.
bool check_init_terminate() const
Checks if all initialization steps have been validated.
Definition global_initaliser.cpp:368
Definition iload_balancer.hpp:9
std::variant< Uniform, Local, File, CustomScript, FullCase > ScalarVariant
Path to the custom script used for initializing scalar data.
Definition scalar_factory.hpp:129
Core component to perform simulation.
Definition data_exporter.hpp:18
Definition simulation_parameters.hpp:53
A structure to hold user-defined control parameters for simulation settings.
Definition simulation_parameters.hpp:24
Definition execinfo.hpp:12
Definition scalar_initializer.hpp:30