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 // Kokkos::printf("Using model: %s\r\n",Model::); //TODO Add model's name to trait (optional)
45 if constexpr (ConstWeightModelType<Model>)
46 {
47 Kokkos::printf("Const Weights\r\n");
48 }
49
50 auto unit = std::make_unique<MonteCarloUnit>();
51 unit->domain = ReactorDomain(volumes, neighbors);
52 auto container = ParticlesContainer<Model>(n_particles);
53 try
54 {
55 impl_init(total_mass, n_particles, *unit, std::move(container));
56 }
57 catch (const std::runtime_error& e)
58 {
59 return nullptr;
60 }
61
62 return unit;
63 }
64
65 void post_init_weight(std::unique_ptr<MonteCarloUnit>& unit, double x0, double total_mass);
66
67} // namespace MC
68
69#endif //__MC_INIT_HPP__
Main owning object for Monte-Carlo particles.
Definition particles_container.hpp:135
Represents the spatial domain where Monte Carlo particles can exist.
Definition domain.hpp:37
Concept to check if a model type has uniform_weight
Definition traits.hpp:173
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:209
void impl_init(double &total_mass, uint64_t n_particles, MonteCarloUnit &unit, AutoGenerated::ContainerVariant &&container)
Definition unit.cpp:239