SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/NewtonianEuler/Sources - UniformAcceleration.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 10.0 % 20 2
Test Date: 2026-10-22 17:29:42
Legend: Lines:     hit not hit

            Line data    Source code
       1            0 : // Distributed under the MIT License.
       2              : // See LICENSE.txt for details.
       3              : 
       4              : #pragma once
       5              : 
       6              : #include <cstddef>
       7              : #include <limits>
       8              : 
       9              : #include "DataStructures/Tensor/TypeAliases.hpp"
      10              : #include "Evolution/Systems/NewtonianEuler/Sources/Source.hpp"
      11              : #include "Evolution/Systems/NewtonianEuler/TagsDeclarations.hpp"
      12              : #include "Options/String.hpp"
      13              : #include "Utilities/MakeArray.hpp"
      14              : #include "Utilities/TMPL.hpp"
      15              : 
      16              : /// \cond
      17              : class DataVector;
      18              : 
      19              : namespace PUP {
      20              : class er;
      21              : }  // namespace PUP
      22              : 
      23              : namespace gsl {
      24              : template <typename>
      25              : struct not_null;
      26              : }  // namespace gsl
      27              : /// \endcond
      28              : 
      29              : namespace NewtonianEuler::Sources {
      30              : 
      31              : /*!
      32              :  * \brief Source generated from an external uniform acceleration.
      33              :  *
      34              :  * The NewtonianEuler system with source terms is written as
      35              :  *
      36              :  * \f{align*}
      37              :  * \partial_t\rho + \partial_i F^i(\rho) &= S(\rho)\\
      38              :  * \partial_t S^i + \partial_j F^{j}(S^i) &= S(S^i)\\
      39              :  * \partial_t e + \partial_i F^i(e) &= S(e),
      40              :  * \f}
      41              :  *
      42              :  * where \f$F^i(u)\f$ is the volume flux of the conserved quantity \f$u\f$
      43              :  * (see ComputeFluxes). For an external acceleration \f$a^i\f$, one has
      44              :  *
      45              :  * \f{align*}
      46              :  * S(\rho) &= 0\\
      47              :  * S(S^i) &= \rho a^i\\
      48              :  * S(e) &= S_ia^i,
      49              :  * \f}
      50              :  *
      51              :  * where \f$\rho\f$ is the mass density, \f$S^i\f$ is the momentum density,
      52              :  * and \f$e\f$ is the energy density.
      53              :  */
      54              : template <size_t Dim>
      55            1 : class UniformAcceleration : public Source<Dim> {
      56              :  public:
      57              :   /// The applied acceleration
      58            1 :   struct Acceleration {
      59            0 :     using type = std::array<double, Dim>;
      60            0 :     static constexpr Options::String help = {"The applied accerelation."};
      61              :   };
      62              : 
      63            0 :   using options = tmpl::list<Acceleration>;
      64              : 
      65            0 :   static constexpr Options::String help = {
      66              :       "Source terms corresponding to a uniform acceleration."};
      67              : 
      68            0 :   UniformAcceleration() = default;
      69            0 :   UniformAcceleration(const UniformAcceleration& /*rhs*/) = default;
      70            0 :   UniformAcceleration& operator=(const UniformAcceleration& /*rhs*/) = default;
      71            0 :   UniformAcceleration(UniformAcceleration&& /*rhs*/) = default;
      72            0 :   UniformAcceleration& operator=(UniformAcceleration&& /*rhs*/) = default;
      73            0 :   ~UniformAcceleration() override = default;
      74              : 
      75            0 :   explicit UniformAcceleration(
      76              :       const std::array<double, Dim>& acceleration_field);
      77              : 
      78              :   /// \cond
      79              :   explicit UniformAcceleration(CkMigrateMessage* msg);
      80              :   using PUP::able::register_constructor;
      81              :   WRAPPED_PUPable_decl_template(UniformAcceleration);
      82              :   /// \endcond
      83              : 
      84              :   // NOLINTNEXTLINE(google-runtime-references)
      85            0 :   void pup(PUP::er& p) override;
      86              : 
      87            0 :   auto get_clone() const -> std::unique_ptr<Source<Dim>> override;
      88              : 
      89            0 :   void operator()(
      90              :       gsl::not_null<Scalar<DataVector>*> source_mass_density_cons,
      91              :       gsl::not_null<tnsr::I<DataVector, Dim>*> source_momentum_density,
      92              :       gsl::not_null<Scalar<DataVector>*> source_energy_density,
      93              :       const Scalar<DataVector>& mass_density_cons,
      94              :       const tnsr::I<DataVector, Dim>& momentum_density,
      95              :       const Scalar<DataVector>& energy_density,
      96              :       const tnsr::I<DataVector, Dim>& velocity,
      97              :       const Scalar<DataVector>& pressure,
      98              :       const Scalar<DataVector>& specific_internal_energy,
      99              :       const EquationsOfState::EquationOfState<false, 2>& eos,
     100              :       const tnsr::I<DataVector, Dim>& coords, double time) const override;
     101              : 
     102              :  private:
     103              :   template <size_t SpatialDim>
     104            0 :   friend bool operator==(  // NOLINT(readability-redundant-declaration)
     105              :       const UniformAcceleration<SpatialDim>& lhs,
     106              :       const UniformAcceleration<SpatialDim>& rhs);
     107              : 
     108            0 :   std::array<double, Dim> acceleration_field_ =
     109              :       make_array<Dim>(std::numeric_limits<double>::signaling_NaN());
     110              : };
     111              : 
     112              : template <size_t Dim>
     113            0 : bool operator!=(const UniformAcceleration<Dim>& lhs,
     114              :                 const UniformAcceleration<Dim>& rhs);
     115              : }  // namespace NewtonianEuler::Sources
        

Generated by: LCOV version 2.0-1