Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <cstddef> 7 : #include <memory> 8 : 9 : #include "Utilities/Serialization/CharmPupable.hpp" 10 : #include "Utilities/TMPL.hpp" 11 : 12 : /// \cond 13 : namespace PUP { 14 : class er; 15 : } // namespace PUP 16 : /// \endcond 17 : 18 : namespace grmhd::GhValenciaDivClean::fd { 19 : /// \cond 20 : template <typename System> 21 : class MonotonisedCentralPrim; 22 : template <typename System> 23 : class PositivityPreservingAdaptiveOrderPrim; 24 : template <typename System> 25 : class Wcns5zPrim; 26 : /// \endcond 27 : 28 : /*! 29 : * \brief The base class from which all reconstruction schemes must inherit 30 : */ 31 : 32 : // template on System instead 33 : template <typename System> 34 1 : class Reconstructor : public PUP::able { 35 : public: 36 0 : Reconstructor() = default; 37 0 : Reconstructor(const Reconstructor&) = default; 38 0 : Reconstructor& operator=(const Reconstructor&) = default; 39 0 : Reconstructor(Reconstructor&&) = default; 40 0 : Reconstructor& operator=(Reconstructor&&) = default; 41 0 : ~Reconstructor() override = default; 42 : 43 : /// \cond 44 : explicit Reconstructor(CkMigrateMessage* msg); 45 : WRAPPED_PUPable_abstract(Reconstructor<System>); // NOLINT 46 : /// \endcond 47 : 48 0 : using system = System; 49 0 : using creatable_classes = 50 : tmpl::list<MonotonisedCentralPrim<System>, 51 : PositivityPreservingAdaptiveOrderPrim<System>, 52 : Wcns5zPrim<System>>; 53 : 54 0 : virtual std::unique_ptr<Reconstructor<System>> get_clone() const = 0; 55 : 56 0 : virtual size_t ghost_zone_size() const = 0; 57 : 58 0 : virtual bool supports_adaptive_order() const { return false; } 59 : 60 0 : virtual bool reconstruct_rho_times_temperature() const = 0; 61 : 62 : // NOLINTNEXTLINE(google-runtime-references) 63 0 : void pup(PUP::er& p) override; 64 : }; 65 : } // namespace grmhd::GhValenciaDivClean::fd