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>
16 Kokkos::View<std::size_t**,
17 Kokkos::LayoutRight,
18 Space,
19 Kokkos::MemoryTraits<Kokkos::RandomAccess>>;
20
40 {
41 public:
42 using n_cells_view_type = Kokkos::View<uint64_t*, ComputeSpace>;
43 ReactorDomain(const ReactorDomain&) = delete;
45
51
55 ReactorDomain(ReactorDomain&& other) noexcept = default;
56
60 ReactorDomain(std::span<double> volumes,
61 const NeighborsView<HostSpace>& _neighbors);
66 ~ReactorDomain() = default;
67
72 ReactorDomain& operator=(ReactorDomain&& other) noexcept;
73
77 void setVolumes(std::span<double const> volumes_liq);
78
83
87 [[nodiscard]] size_t getNumberCompartments() const noexcept;
88
92 [[nodiscard]] double getTotalVolume() const noexcept;
93
97 [[nodiscard]] ConstNeighborsView<ComputeSpace> getNeighbors() const;
98
102 [[deprecated("Not needed anymore")]] static ReactorDomain
103 reduce(std::span<const size_t> data, size_t original_size, size_t n_rank);
104
105 [[deprecated("Not needed anymore")]] void in_place_reduce(
106 std::span<const size_t> data, size_t original_size, size_t n_rank);
107
108 template <class Archive> void save(Archive& ar) const
109 {
110
111 ar(id, size, _total_volume);
112 }
113
114 template <class Archive> void load(Archive& ar)
115 {
116 ar(id, size, _total_volume);
117 }
118
119 private:
120 double _total_volume = 0.;
121 size_t id = 0;
122 size_t size = 0;
124 };
125
126 inline ConstNeighborsView<ComputeSpace> ReactorDomain::getNeighbors() const
127 {
128 return k_neighbor;
129 }
130
131 inline size_t ReactorDomain::getNumberCompartments() const noexcept
132 {
133 return size;
134 }
135
136 inline double ReactorDomain::getTotalVolume() const noexcept
137 {
138 return this->_total_volume;
139 }
140
141} // namespace MC
142
143#endif //__MC_REACTORDOMAIN_HPP__
double _total_volume
Domain total volume.
Definition domain.hpp:120
void setLiquidNeighbors(const NeighborsView< HostSpace > &data)
Update neigbors of compartments.
Definition domain.cpp:45
ConstNeighborsView< ComputeSpace > getNeighbors() const
Return a const reference to neighbors.
Definition domain.hpp:126
ReactorDomain & operator=(const ReactorDomain &)=delete
~ReactorDomain()=default
Default destructor.
Kokkos::View< uint64_t *, ComputeSpace > n_cells_view_type
Definition domain.hpp:42
void load(Archive &ar)
Definition domain.hpp:114
double getTotalVolume() const noexcept
Return total volume of domain.
Definition domain.hpp:136
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:84
ReactorDomain()
Default constructor.
Definition domain.cpp:29
NeighborsView< ComputeSpace > k_neighbor
Definition domain.hpp:123
size_t size
Number of compartment.
Definition domain.hpp:122
void save(Archive &ar) const
Definition domain.hpp:108
void in_place_reduce(std::span< const size_t > data, size_t original_size, size_t n_rank)
Definition domain.cpp:63
void setVolumes(std::span< double const > volumes_liq)
Set volume of liquid and gas of each compartment.
Definition domain.cpp:13
ReactorDomain(const ReactorDomain &)=delete
size_t getNumberCompartments() const noexcept
Return the number of compartment in the domain.
Definition domain.hpp:131
ReactorDomain(ReactorDomain &&other) noexcept=default
Move constructor.
Namespace that contains classes and structures related to Monte Carlo (MC) simulations.
Definition alias.hpp:9
Kokkos::DefaultExecutionSpace ComputeSpace
Definition alias.hpp:10
Kokkos::View< std::size_t **, Kokkos::LayoutRight, Space, Kokkos::MemoryTraits< Kokkos::RandomAccess > > NeighborsView
Definition domain.hpp:15