Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <memory>
7 : #include <pup.h>
8 :
9 : #include "Utilities/Serialization/CharmPupable.hpp"
10 : #include "Utilities/TMPL.hpp"
11 :
12 : namespace NewtonianEuler::fd {
13 : /// \cond
14 : template <size_t Dim>
15 : class AoWeno53Prim;
16 : template <size_t Dim>
17 : class MonotonisedCentralPrim;
18 : /// \endcond
19 :
20 : /*!
21 : * \brief The base class from which all reconstruction schemes must inherit
22 : *
23 : * Currently we have hard-coded reconstructing \f$\rho, p, v^i\f$. However, the
24 : * DG-subcell solver is coded generally enough that an efficient implementation
25 : * of reconstructing the conserved or characteristic variables is also possible.
26 : * It is not yet clear how much info about what is being reconstructed is needed
27 : * at compile time and so we currently append `Prim` to the end of the
28 : * reconstruction schemes to clarify that they are reconstructing the primitive
29 : * variables. Ideally the choice of what variables to reconstruct can be made by
30 : * a runtime argument to the individual reconstruction schemes.
31 : */
32 : template <size_t Dim>
33 1 : class Reconstructor : public PUP::able {
34 : public:
35 0 : Reconstructor() = default;
36 0 : Reconstructor(const Reconstructor&) = default;
37 0 : Reconstructor& operator=(const Reconstructor&) = default;
38 0 : Reconstructor(Reconstructor&&) = default;
39 0 : Reconstructor& operator=(Reconstructor&&) = default;
40 0 : ~Reconstructor() override = default;
41 :
42 : /// \cond
43 : explicit Reconstructor(CkMigrateMessage* msg);
44 : WRAPPED_PUPable_abstract(Reconstructor<Dim>); // NOLINT
45 : /// \endcond
46 :
47 0 : using creatable_classes =
48 : tmpl::list<AoWeno53Prim<Dim>, MonotonisedCentralPrim<Dim>>;
49 :
50 0 : virtual std::unique_ptr<Reconstructor<Dim>> get_clone() const = 0;
51 :
52 0 : virtual size_t ghost_zone_size() const = 0;
53 :
54 0 : void pup(PUP::er& p) override;
55 : };
56 : } // namespace NewtonianEuler::fd
|