BioCMAMC-ST
mcinit.hpp
1#ifndef __MC_INIT_HPP__
2#define __MC_INIT_HPP__
3
4#include <cassert>
5#include <common/execinfo.hpp>
6#include <cstdint>
7#include <mc/domain.hpp>
8#include <mc/particles_container.hpp>
9#include <mc/traits.hpp>
10#include <mc/unit.hpp>
11#include <memory>
12#include <stdexcept>
13#include <utility>
14#include <span>
15#include <biocma_cst_config.hpp>
16
17namespace MC
18{
19
20 void impl_init(double& total_mass,
21 uint64_t n_particles,
22 MonteCarloUnit& unit,
23 AutoGenerated::ContainerVariant&& container);
38 template <ModelType Model>
39 std::unique_ptr<MonteCarloUnit> init(uint64_t n_particles,
40 std::span<double> volumes,
41 const NeighborsView<HostSpace>& neighbors,
42 double& total_mass)
43 {
44 if constexpr (ConstWeightModelType<Model>)
45 {
46 Kokkos::printf("Const Weights\r\n");
47 }
48 auto unit = std::make_unique<MonteCarloUnit>();
49 unit->domain = ReactorDomain(volumes, neighbors);
50 auto container = ParticlesContainer<Model>(n_particles);
51 try
52 {
53 impl_init(total_mass, n_particles, *unit, std::move(container));
54 }
55 catch (const std::runtime_error& e)
56 {
57 return nullptr;
58 }
59
60 return unit;
61 }
62
63 void post_init_weight(std::unique_ptr<MonteCarloUnit>& unit, double x0, double total_mass);
64
65} // namespace MC
66
67#endif //__MC_INIT_HPP__
Main owning object for Monte-Carlo particles.
Definition particles_container.hpp:128
Represents the spatial domain where Monte Carlo particles can exist.
Definition domain.hpp:37
Definition traits.hpp:115
Namespace that contains classes and structures related to Monte Carlo (MC) simulations.
Definition alias.hpp:9
std::unique_ptr< MonteCarloUnit > init(uint64_t n_particles, std::span< double > volumes, const NeighborsView< HostSpace > &neighbors, double &total_mass)
Helper function to initialize a MonteCarloUnit.
Definition mcinit.hpp:39
Kokkos:: View< std::size_t **, Kokkos::LayoutRight, Space, Kokkos::MemoryTraits< Kokkos::RandomAccess > > NeighborsView
Definition domain.hpp:15
void post_init_weight(std::unique_ptr< MonteCarloUnit > &unit, double x0, double total_mass)
Definition unit.cpp:155
void impl_init(double &total_mass, uint64_t n_particles, MonteCarloUnit &unit, AutoGenerated::ContainerVariant &&container)
Definition unit.cpp:185