Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include "DataStructures/DataBox/Tag.hpp" 7 : #include "DataStructures/Tensor/TypeAliases.hpp" 8 : #include "Evolution/Systems/ForceFree/Tags.hpp" 9 : #include "PointwiseFunctions/GeneralRelativity/TagsDeclarations.hpp" 10 : #include "Utilities/TMPL.hpp" 11 : 12 : /// \cond 13 : namespace Tags { 14 : template <typename Tag> 15 : struct Normalized; 16 : } // namespace Tags 17 : namespace gsl { 18 : template <typename T> 19 : class not_null; 20 : } // namespace gsl 21 : /// \endcond 22 : 23 : namespace ForceFree { 24 1 : namespace Tags { 25 : /*! 26 : * \brief Compute the largest characteristic speed of the GRFFE system with 27 : * divergence cleaning. 28 : * 29 : * Wave speeds of the fast modes of the GRFFE system are the speed of light. 30 : * 31 : * \f{align*} 32 : * \lambda_\pm = \beta^i\beta_i \pm \alpha 33 : * \f} 34 : * 35 : * where \f$\alpha\f$ is the lapse and \f$\beta^i\f$ is the shift. Therefore the 36 : * largest characteristic speed is \f$\lambda_\text{max} = 37 : * \sqrt{\beta_i\beta^i}+\alpha\f$. 38 : */ 39 1 : struct LargestCharacteristicSpeedCompute : LargestCharacteristicSpeed, 40 : db::ComputeTag { 41 0 : using argument_tags = 42 : tmpl::list<gr::Tags::Lapse<DataVector>, gr::Tags::Shift<DataVector, 3>, 43 : gr::Tags::SpatialMetric<DataVector, 3>>; 44 0 : using return_type = double; 45 0 : using base = LargestCharacteristicSpeed; 46 0 : static void function(gsl::not_null<double*> speed, 47 : const Scalar<DataVector>& lapse, 48 : const tnsr::I<DataVector, 3>& shift, 49 : const tnsr::ii<DataVector, 3>& spatial_metric); 50 : }; 51 : 52 : } // namespace Tags 53 : } // namespace ForceFree