BioCMAMC-ST
domain.hpp
1#ifndef __MC_REACTORDOMAIN_HPP__
2#define __MC_REACTORDOMAIN_HPP__
3
4#include <Kokkos_Core.hpp>
5#include <cassert>
6#include <common/common.hpp>
7#include <cstddef>
8#include <cstdint>
9#include <mc/traits.hpp>
10#include <span>
11
12namespace MC
13{
14 template <typename Space>
15 using NeighborsView = Kokkos::
16 View<std::size_t**, Kokkos::LayoutRight, Space, Kokkos::MemoryTraits<Kokkos::RandomAccess>>;
17
37 {
38 public:
39 using n_cells_view_type = Kokkos::View<uint64_t*, ComputeSpace>;
40 ReactorDomain(const ReactorDomain&) = delete;
42
48
52 ReactorDomain(ReactorDomain&& other) noexcept = default;
53
57 ReactorDomain(std::span<double> volumes, const NeighborsView<HostSpace>& _neighbors);
62 ~ReactorDomain() = default;
63
68 ReactorDomain& operator=(ReactorDomain&& other) noexcept;
69
73 void setVolumes(std::span<double const> volumes_liq);
74
79
83 [[nodiscard]] size_t getNumberCompartments() const noexcept;
84
88 [[nodiscard]] double getTotalVolume() const noexcept;
89
93 [[nodiscard]] ConstNeighborsView<ComputeSpace> getNeighbors() const;
94
98 [[deprecated("Not needed anymore")]] static ReactorDomain
99 reduce(std::span<const size_t> data, size_t original_size, size_t n_rank);
100
101 [[deprecated("Not needed anymore")]] void
102 in_place_reduce(std::span<const size_t> data, size_t original_size, size_t n_rank);
103
104 template <class Archive> void save(Archive& ar) const
105 {
106
107 ar(id, size, _total_volume);
108 }
109
110 template <class Archive> void load(Archive& ar)
111 {
112 ar(id, size, _total_volume);
113 }
114
115 private:
116 double _total_volume = 0.;
117 size_t id = 0;
118 size_t size = 0;
120 };
121
122 inline ConstNeighborsView<ComputeSpace> ReactorDomain::getNeighbors() const
123 {
124 return k_neighbor;
125 }
126
127 inline size_t ReactorDomain::getNumberCompartments() const noexcept
128 {
129 return size;
130 }
131
132 inline double ReactorDomain::getTotalVolume() const noexcept
133 {
134 return this->_total_volume;
135 }
136
137} // namespace MC
138
139#endif //__MC_REACTORDOMAIN_HPP__
Represents the spatial domain where Monte Carlo particles can exist.
Definition domain.hpp:37
double _total_volume
Domain total volume.
Definition domain.hpp:116
void setLiquidNeighbors(const NeighborsView< HostSpace > &data)
Update neigbors of compartments.
Definition domain.cpp:47
ConstNeighborsView< ComputeSpace > getNeighbors() const
Return a const reference to neighbors.
Definition domain.hpp:122
ReactorDomain & operator=(const ReactorDomain &)=delete
~ReactorDomain()=default
Default destructor.
Kokkos::View< uint64_t *, ComputeSpace > n_cells_view_type
Definition domain.hpp:39
void load(Archive &ar)
Definition domain.hpp:110
double getTotalVolume() const noexcept
Return total volume of domain.
Definition domain.hpp:132
static ReactorDomain reduce(std::span< const size_t > data, size_t original_size, size_t n_rank)
Return a unique domain from data obtained with MPI gather.
Definition domain.cpp:86
ReactorDomain()
Default constructor.
Definition domain.cpp:31
NeighborsView< ComputeSpace > k_neighbor
Definition domain.hpp:119
size_t size
Number of compartment.
Definition domain.hpp:118
void save(Archive &ar) const
Definition domain.hpp:104
void in_place_reduce(std::span< const size_t > data, size_t original_size, size_t n_rank)
Definition domain.cpp:66
void setVolumes(std::span< double const > volumes_liq)
Set volume of liquid and gas of each compartment.
Definition domain.cpp:15
ReactorDomain(const ReactorDomain &)=delete
size_t getNumberCompartments() const noexcept
Return the number of compartment in the domain.
Definition domain.hpp:127
ReactorDomain(ReactorDomain &&other) noexcept=default
Move constructor.
Namespace that contains classes and structures related to Monte Carlo (MC) simulations.
Definition alias.hpp:9
Kokkos:: View< std::size_t **, Kokkos::LayoutRight, Space, Kokkos::MemoryTraits< Kokkos::RandomAccess > > NeighborsView
Definition domain.hpp:15