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 : #include <pup_stl.h>
9 :
10 : #include "DataStructures/Tensor/Tensor.hpp"
11 : #include "Utilities/Serialization/CharmPupable.hpp"
12 :
13 : /// \cond
14 : class DataVector;
15 : namespace gsl {
16 : template <class T>
17 : class not_null;
18 : } // namespace gsl
19 : namespace EquationsOfState {
20 : template <bool IsRelativistic, size_t ThermodynamicDim>
21 : class EquationOfState;
22 : } // namespace EquationsOfState
23 : /// \endcond
24 :
25 : namespace NewtonianEuler {
26 : /*!
27 : * Holds classes implementing sources for the Newtonian Euler system.
28 : */
29 : namespace Sources {
30 : /*!
31 : * \brief Source terms base class.
32 : */
33 : template <size_t Dim>
34 1 : class Source : public PUP::able {
35 : protected:
36 0 : Source() = default;
37 :
38 : public:
39 0 : ~Source() override = default;
40 :
41 : /// \cond
42 : explicit Source(CkMigrateMessage* msg) : PUP::able(msg) {}
43 : WRAPPED_PUPable_abstract(Source);
44 : /// \endcond
45 :
46 0 : virtual auto get_clone() const -> std::unique_ptr<Source> = 0;
47 :
48 0 : virtual void operator()(
49 : gsl::not_null<Scalar<DataVector>*> source_mass_density_cons,
50 : gsl::not_null<tnsr::I<DataVector, Dim>*> source_momentum_density,
51 : gsl::not_null<Scalar<DataVector>*> source_energy_density,
52 : const Scalar<DataVector>& mass_density_cons,
53 : const tnsr::I<DataVector, Dim>& momentum_density,
54 : const Scalar<DataVector>& energy_density,
55 : const tnsr::I<DataVector, Dim>& velocity,
56 : const Scalar<DataVector>& pressure,
57 : const Scalar<DataVector>& specific_internal_energy,
58 : const EquationsOfState::EquationOfState<false, 2>& eos,
59 : const tnsr::I<DataVector, Dim>& coords, double time) const = 0;
60 : };
61 : } // namespace Sources
62 : } // namespace NewtonianEuler
|