Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <array>
7 : #include <pup.h>
8 :
9 : #include "Options/String.hpp"
10 : #include "Utilities/Serialization/CharmPupable.hpp"
11 : #include "Utilities/TMPL.hpp"
12 :
13 : namespace Particles::MonteCarlo {
14 :
15 : template <size_t NeutrinoSpecies>
16 0 : class MonteCarloOptions : public PUP::able {
17 : public:
18 0 : explicit MonteCarloOptions(
19 : const std::array<double, NeutrinoSpecies> initial_packet_energy)
20 : : initial_packet_energy_(initial_packet_energy) {}
21 :
22 0 : static constexpr Options::String help = {
23 : "Global options for Monte-Carlo evolution.\n"
24 : "InitialPacketEnergy: [double, double, double] \n"};
25 :
26 0 : struct InitialPacketEnergy {
27 0 : using type = std::array<double, NeutrinoSpecies>;
28 0 : static constexpr Options::String help{
29 : "Initial energy used to create packets"};
30 : };
31 :
32 0 : using options = tmpl::list<InitialPacketEnergy>;
33 :
34 0 : explicit MonteCarloOptions(CkMigrateMessage* msg) : PUP::able(msg) {}
35 :
36 : using PUP::able::register_constructor;
37 0 : void pup(PUP::er& p) override;
38 0 : WRAPPED_PUPable_decl_template(MonteCarloOptions);
39 :
40 0 : const std::array<double, NeutrinoSpecies>& get_initial_packet_energy() const {
41 : return initial_packet_energy_;
42 : }
43 :
44 : private:
45 0 : std::array<double, NeutrinoSpecies> initial_packet_energy_;
46 : };
47 :
48 : } // namespace Particles::MonteCarlo
|