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