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/DataBox/Tag.hpp" 9 : #include "DataStructures/Tensor/TypeAliases.hpp" 10 : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp" 11 : #include "Utilities/Gsl.hpp" 12 : #include "Utilities/TMPL.hpp" 13 : 14 : /// \ingroup GeneralRelativityGroup 15 : /// Holds functions related to general relativity. 16 : namespace gr { 17 : /// @{ 18 : /*! 19 : * \brief Computes spacetime normal one-form from lapse. 20 : * 21 : * \details If \f$\alpha\f$ is the lapse, then 22 : * 23 : * \f{align} 24 : * n_t &= - \alpha \\ 25 : * n_i &= 0 26 : * \f} 27 : * 28 : * is computed. 29 : */ 30 : template <typename DataType, size_t SpatialDim, typename Frame> 31 1 : void spacetime_normal_one_form( 32 : gsl::not_null<tnsr::a<DataType, SpatialDim, Frame>*> normal_one_form, 33 : const Scalar<DataType>& lapse); 34 : 35 : template <typename DataType, size_t SpatialDim, typename Frame> 36 1 : tnsr::a<DataType, SpatialDim, Frame> spacetime_normal_one_form( 37 : const Scalar<DataType>& lapse); 38 : /// @} 39 : 40 : namespace Tags { 41 : /*! 42 : * \brief Compute item for spacetime normal oneform \f$n_a\f$ from 43 : * the lapse \f$\alpha\f$. 44 : * 45 : * \details Can be retrieved using `gr::Tags::SpacetimeNormalOneForm`. 46 : */ 47 : template <typename DataType, size_t SpatialDim, typename Frame> 48 1 : struct SpacetimeNormalOneFormCompute 49 : : SpacetimeNormalOneForm<DataType, SpatialDim, Frame>, 50 : db::ComputeTag { 51 0 : using argument_tags = tmpl::list<Lapse<DataType>>; 52 : 53 0 : using return_type = tnsr::a<DataType, SpatialDim, Frame>; 54 : 55 0 : static constexpr auto function = 56 : static_cast<void (*)(gsl::not_null<tnsr::a<DataType, SpatialDim, Frame>*>, 57 : const Scalar<DataType>&)>( 58 : &spacetime_normal_one_form<DataType, SpatialDim, Frame>); 59 : 60 0 : using base = SpacetimeNormalOneForm<DataType, SpatialDim, Frame>; 61 : }; 62 : } // namespace Tags 63 : } // namespace gr