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
|