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/TaggedTuple.hpp"
10 : #include "DataStructures/Tensor/TypeAliases.hpp"
11 : #include "Evolution/Systems/ScalarAdvection/Tags.hpp"
12 : #include "Options/String.hpp"
13 : #include "PointwiseFunctions/AnalyticSolutions/AnalyticSolution.hpp"
14 : #include "PointwiseFunctions/InitialDataUtilities/InitialData.hpp"
15 : #include "Utilities/TMPL.hpp"
16 :
17 : /// \cond
18 : class DataVector;
19 :
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
|