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 <pup.h> 8 : 9 : #include "DataStructures/Tensor/TypeAliases.hpp" 10 : #include "Evolution/Systems/GeneralizedHarmonic/GaugeSourceFunctions/Gauges.hpp" 11 : #include "Options/String.hpp" 12 : #include "Utilities/TMPL.hpp" 13 : 14 : /// \cond 15 : class DataVector; 16 : namespace gsl { 17 : template <class T> 18 : class not_null; 19 : } // namespace gsl 20 : /// \endcond 21 : 22 : namespace gh::gauges { 23 : /*! 24 : * \brief Imposes the harmonic gauge condition, \f$H_a=0\f$. 25 : */ 26 1 : class Harmonic final : public GaugeCondition { 27 : public: 28 0 : using options = tmpl::list<>; 29 : 30 0 : static constexpr Options::String help{ 31 : "Apply the Harmonic gauge condition H_a=0."}; 32 : 33 0 : Harmonic() = default; 34 0 : Harmonic(const Harmonic&) = default; 35 0 : Harmonic& operator=(const Harmonic&) = default; 36 0 : Harmonic(Harmonic&&) = default; 37 0 : Harmonic& operator=(Harmonic&&) = default; 38 0 : ~Harmonic() override = default; 39 : 40 : /// \cond 41 : explicit Harmonic(CkMigrateMessage* msg); 42 : using PUP::able::register_constructor; 43 : WRAPPED_PUPable_decl_template(Harmonic); // NOLINT 44 : /// \endcond 45 : 46 : template <size_t SpatialDim> 47 0 : void gauge_and_spacetime_derivative( 48 : gsl::not_null<tnsr::a<DataVector, SpatialDim, Frame::Inertial>*> gauge_h, 49 : gsl::not_null<tnsr::ab<DataVector, SpatialDim, Frame::Inertial>*> 50 : d4_gauge_h, 51 : double time, 52 : const tnsr::I<DataVector, SpatialDim, Frame::Inertial>& inertial_coords) 53 : const; 54 : 55 : // NOLINTNEXTLINE(google-runtime-references) 56 0 : void pup(PUP::er& p) override; 57 : 58 0 : std::unique_ptr<GaugeCondition> get_clone() const override; 59 : }; 60 : } // namespace gh::gauges