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