Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <pup.h> 7 : 8 : #include "DataStructures/DataBox/Prefixes.hpp" 9 : #include "DataStructures/Tensor/TypeAliases.hpp" 10 : #include "Evolution/Systems/ScalarAdvection/Tags.hpp" 11 : #include "Options/String.hpp" 12 : #include "PointwiseFunctions/AnalyticSolutions/AnalyticSolution.hpp" 13 : #include "PointwiseFunctions/InitialDataUtilities/InitialData.hpp" 14 : #include "Utilities/TMPL.hpp" 15 : #include "Utilities/TaggedTuple.hpp" 16 : 17 : /// \cond 18 : class DataVector; 19 : // IWYU pragma: no_forward_declare Tensor 20 : namespace PUP { 21 : class er; 22 : } // namespace PUP 23 : /// \endcond 24 : 25 : namespace ScalarAdvection { 26 : namespace Solutions { 27 : /*! 28 : * \brief An 1D sinusoidal wave advecting with speed 1.0, periodic over the 29 : * interval \f$[-1, 1]\f$. 30 : * 31 : * \f{align}{ 32 : * u(x,t)=\sin \pi(x-t) 33 : * \f} 34 : * 35 : */ 36 1 : class Sinusoid : public evolution::initial_data::InitialData, 37 : public MarkAsAnalyticSolution { 38 : public: 39 0 : using options = tmpl::list<>; 40 0 : static constexpr Options::String help{ 41 : "An advecting 1D sine wave u(x,t) = sin(pi(x-t)), periodic over the " 42 : "interval [-1, 1]"}; 43 : 44 0 : Sinusoid() = default; 45 0 : Sinusoid(const Sinusoid&) = default; 46 0 : Sinusoid& operator=(const Sinusoid&) = default; 47 0 : Sinusoid(Sinusoid&&) = default; 48 0 : Sinusoid& operator=(Sinusoid&&) = default; 49 0 : ~Sinusoid() override = default; 50 : 51 0 : auto get_clone() const 52 : -> std::unique_ptr<evolution::initial_data::InitialData> override; 53 : 54 : template <typename DataType> 55 0 : tuples::TaggedTuple<ScalarAdvection::Tags::U> variables( 56 : const tnsr::I<DataType, 1>& x, double t, 57 : tmpl::list<ScalarAdvection::Tags::U> /*meta*/) const; 58 : 59 : // NOLINTNEXTLINE(google-runtime-references) 60 0 : void pup(PUP::er& p) override; 61 : 62 : /// \cond 63 : explicit Sinusoid(CkMigrateMessage* msg); 64 : using PUP::able::register_constructor; 65 : WRAPPED_PUPable_decl_template(Sinusoid); 66 : /// \endcond 67 : }; 68 : 69 0 : bool operator==(const Sinusoid& /*lhs*/, const Sinusoid& /*rhs*/); 70 : 71 0 : bool operator!=(const Sinusoid& lhs, const Sinusoid& rhs); 72 : 73 : } // namespace Solutions 74 : } // namespace ScalarAdvection