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
|