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 : /*!
26 : * Holds classes implementing sources for the Newtonian Euler system.
27 : */
28 : namespace NewtonianMhd::Sources {
29 : /*!
30 : * \brief Source terms base class.
31 : */
32 : template <size_t Dim>
33 1 : class Source : public PUP::able {
34 : protected:
35 0 : Source() = default;
36 :
37 : public:
38 0 : ~Source() override = default;
39 :
40 : /// \cond
41 : explicit Source(CkMigrateMessage* msg) : PUP::able(msg) {}
42 : WRAPPED_PUPable_abstract(Source);
43 : /// \endcond
44 :
45 0 : virtual auto get_clone() const -> std::unique_ptr<Source> = 0;
46 :
47 0 : virtual void operator()(
48 : gsl::not_null<Scalar<DataVector>*> source_mass_density_cons,
49 : gsl::not_null<tnsr::I<DataVector, Dim>*> source_momentum_density,
50 : gsl::not_null<Scalar<DataVector>*> source_energy_density,
51 : const Scalar<DataVector>& mass_density_cons,
52 : const tnsr::I<DataVector, Dim>& momentum_density,
53 : const Scalar<DataVector>& energy_density,
54 : const tnsr::I<DataVector, Dim>& velocity,
55 : const Scalar<DataVector>& pressure,
56 : const Scalar<DataVector>& specific_internal_energy,
57 : const EquationsOfState::EquationOfState<false, 2>& eos,
58 : const tnsr::I<DataVector, Dim>& coords, double time) const = 0;
59 : };
60 : } // namespace NewtonianMhd::Sources
|