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