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 "PointwiseFunctions/InitialDataUtilities/Background.hpp" 10 : #include "PointwiseFunctions/InitialDataUtilities/InitialGuess.hpp" 11 : #include "Utilities/Serialization/CharmPupable.hpp" 12 : 13 1 : namespace elliptic::analytic_data { 14 : /*! 15 : * \brief Subclasses represent analytic solutions of elliptic systems. 16 : * 17 : * Subclasses must define the compile-time interfaces of both 18 : * `elliptic::analytic_data::InitialGuess` and 19 : * `elliptic::analytic_data::Background`. 20 : * 21 : * The combined set of system variables and background fields must solve the 22 : * elliptic PDEs. Subclasses must list all additional requirements needed so 23 : * they solve the elliptic PDEs in the class documentation and in their option 24 : * help-string. 25 : */ 26 1 : class AnalyticSolution : public elliptic::analytic_data::InitialGuess, 27 : public elliptic::analytic_data::Background { 28 : protected: 29 0 : AnalyticSolution() = default; 30 : 31 : public: 32 0 : ~AnalyticSolution() override = default; 33 : 34 : /// \cond 35 : explicit AnalyticSolution(CkMigrateMessage* msg) : PUP::able(msg) {} 36 : WRAPPED_PUPable_abstract(AnalyticSolution); 37 : /// \endcond 38 : 39 0 : virtual std::unique_ptr<AnalyticSolution> get_clone() const = 0; 40 : }; 41 : } // namespace elliptic::analytic_data