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 : #include <pup.h>
9 :
10 : #include "Utilities/Serialization/CharmPupable.hpp"
11 : #include "Utilities/TMPL.hpp"
12 :
13 : namespace ScalarAdvection::fd {
14 : /// \cond
15 : template <size_t Dim>
16 : class AoWeno53;
17 : template <size_t Dim>
18 : class MonotonisedCentral;
19 : /// \endcond
20 :
21 : /*!
22 : * \brief The base class from which all reconstruction schemes must inherit
23 : */
24 : template <size_t Dim>
25 1 : class Reconstructor : public PUP::able {
26 : public:
27 0 : Reconstructor() = default;
28 0 : Reconstructor(const Reconstructor&) = default;
29 0 : Reconstructor& operator=(const Reconstructor&) = default;
30 0 : Reconstructor(Reconstructor&&) = default;
31 0 : Reconstructor& operator=(Reconstructor&&) = default;
32 0 : ~Reconstructor() override = default;
33 :
34 0 : void pup(PUP::er& p) override;
35 :
36 : /// \cond
37 : explicit Reconstructor(CkMigrateMessage* msg);
38 : WRAPPED_PUPable_abstract(Reconstructor<Dim>); // NOLINT
39 : /// \endcond
40 :
41 0 : using creatable_classes = tmpl::list<AoWeno53<Dim>, MonotonisedCentral<Dim>>;
42 :
43 0 : virtual std::unique_ptr<Reconstructor<Dim>> get_clone() const = 0;
44 :
45 0 : virtual size_t ghost_zone_size() const = 0;
46 : };
47 : } // namespace ScalarAdvection::fd
|