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 :
8 : #include "DataStructures/Tensor/TypeAliases.hpp"
9 : #include "Domain/Tags.hpp"
10 : #include "Evolution/Systems/ScalarAdvection/Tags.hpp"
11 : #include "Utilities/Gsl.hpp"
12 :
13 : /// \cond
14 : class DataVector;
15 : namespace gsl {
16 : template <typename T>
17 : class not_null;
18 : } // namespace gsl
19 : /// \endcond
20 :
21 : namespace ScalarAdvection::Tags {
22 : /*!
23 : * \brief Compute the advection velocity field \f$v\f$ of the ScalarAdvection
24 : * system
25 : *
26 : * - For 1D problem, \f$v(x) = 1.0\f$
27 : * - For 2D problem, \f$v(x,y) = (0.5-y,-0.5+x)\f$
28 : *
29 : */
30 : template <size_t Dim>
31 1 : struct VelocityFieldCompute : VelocityField<Dim>, db::ComputeTag {
32 0 : using argument_tags =
33 : tmpl::list<domain::Tags::Coordinates<Dim, Frame::Inertial>>;
34 0 : using return_type = tnsr::I<DataVector, Dim>;
35 0 : using base = VelocityField<Dim>;
36 :
37 0 : static void function(
38 : const gsl::not_null<tnsr::I<DataVector, Dim>*> velocity_field,
39 : const tnsr::I<DataVector, Dim, Frame::Inertial>& inertial_coords);
40 : };
41 : } // namespace ScalarAdvection::Tags
|