BioCMAMC-ST
mcinit.hpp
1#ifndef __MC_INIT_HPP__
2#define __MC_INIT_HPP__
3
4#include <biocma_cst_config.hpp>
5#include <cassert>
6#include <common/execinfo.hpp>
7#include <common/logger.hpp>
8#include <cstdint>
9#include <mc/domain.hpp>
10#include <mc/particles_container.hpp>
11#include <mc/traits.hpp>
12#include <mc/unit.hpp>
13#include <memory>
14#include <span>
15#include <stdexcept>
16#include <utility>
17
18namespace MC
19{
20
21 void impl_init(double& total_mass,
22 uint64_t n_particles,
23 MonteCarloUnit& unit,
24 AutoGenerated::ContainerVariant&& container,
25 bool uniform_init);
40 template <ModelType Model>
41 std::unique_ptr<MonteCarloUnit>
42 init(const std::shared_ptr<IO::Logger>& _logger,
43 uint64_t n_particles,
44 std::size_t n_samples,
45 std::span<double> volumes,
46 std::span<const size_t> _neighbors,
47 bool uniform_mc_init,
48 double& total_mass)
49 {
50 (void)_neighbors; // TODO remove
51 if constexpr (ConstWeightModelType<Model>)
52 {
53 if (_logger)
54 {
55 _logger->print(
56 "Model",
57 "Const Weights"); // TODO Add model's name to trait (optional)
58 }
59 }
60
61 auto unit = std::make_unique<MonteCarloUnit>();
62 unit->domain = ReactorDomain(volumes);
63
64 // bool flag_virtual = unit->domain.getNumberCompartments() == 1;
65 auto container = ParticlesContainer<Model>(
66 load_tuning_constant(), n_particles, n_samples);
67 try
68 {
69 impl_init(total_mass,
70 n_particles,
71 *unit,
72 std::move(container),
73 uniform_mc_init);
74 }
75 catch (const std::runtime_error& e)
76 {
77 return nullptr;
78 }
79
80 return unit;
81 }
82
83 void post_init_weight(std::unique_ptr<MonteCarloUnit>& unit,
84 double x0,
85 double total_mass);
86
87} // namespace MC
88
89#endif //__MC_INIT_HPP__
Main owning object for Monte-Carlo particles.
Definition particles_container.hpp:53
Represents the spatial domain where Monte Carlo particles can exist.
Definition domain.hpp:76
Concept to check if a model type has uniform_weight
Definition traits.hpp:183
Namespace that contains classes and structures related to Monte Carlo (MC) simulations.
Definition alias.hpp:15
std::unique_ptr< MonteCarloUnit > init(const std::shared_ptr< IO::Logger > &_logger, uint64_t n_particles, std::size_t n_samples, std::span< double > volumes, std::span< const size_t > _neighbors, bool uniform_mc_init, double &total_mass)
Helper function to initialize a MonteCarloUnit.
Definition mcinit.hpp:42
RuntimeParameters load_tuning_constant()
Definition unit.cpp:287
void impl_init(double &total_mass, uint64_t n_particles, MonteCarloUnit &unit, AutoGenerated::ContainerVariant &&container, bool uniform_init)
Definition unit.cpp:229
void post_init_weight(std::unique_ptr< MonteCarloUnit > &unit, double x0, double total_mass)
Definition unit.cpp:194
General-purpose Monte Carlo unit to carry out simulations.
Definition unit.hpp:34