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/Prefixes.hpp" 9 : #include "DataStructures/DataBox/Tag.hpp" 10 : #include "DataStructures/DataVector.hpp" 11 : #include "DataStructures/Tensor/TypeAliases.hpp" 12 : #include "Evolution/Systems/GeneralizedHarmonic/Tags.hpp" 13 : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp" 14 : #include "Utilities/Gsl.hpp" 15 : #include "Utilities/TMPL.hpp" 16 : 17 : /// \cond 18 : class DataVector; 19 : /// \endcond 20 : 21 : namespace gh { 22 : /// @{ 23 : /*! 24 : * \ingroup GeneralRelativityGroup 25 : * \brief Computes spatial derivatives of the spatial metric from 26 : * the generalized harmonic spatial derivative variable. 27 : * 28 : * \details If \f$ \Phi_{kab} \f$ is the generalized 29 : * harmonic spatial derivative variable, then the derivatives of the 30 : * spatial metric are 31 : * \f[ 32 : * \partial_k \gamma_{ij} = \Phi_{kij} 33 : * \f] 34 : * 35 : * This quantity is needed for computing spatial Christoffel symbols. 36 : */ 37 : template <typename DataType, size_t SpatialDim, typename Frame> 38 1 : void deriv_spatial_metric( 39 : gsl::not_null<tnsr::ijj<DataType, SpatialDim, Frame>*> d_spatial_metric, 40 : const tnsr::iaa<DataType, SpatialDim, Frame>& phi); 41 : 42 : template <typename DataType, size_t SpatialDim, typename Frame> 43 1 : tnsr::ijj<DataType, SpatialDim, Frame> deriv_spatial_metric( 44 : const tnsr::iaa<DataType, SpatialDim, Frame>& phi); 45 : /// @} 46 : 47 : namespace Tags { 48 : /*! 49 : * \brief Compute item to get spatial derivatives of the spatial metric from 50 : * the generalized harmonic spatial derivative variable. 51 : * 52 : * \details See `deriv_spatial_metric()`. Can be retrieved using 53 : * `gr::Tags::SpatialMetric` wrapped in `::Tags::deriv`. 54 : */ 55 : template <size_t SpatialDim, typename Frame> 56 1 : struct DerivSpatialMetricCompute 57 : : ::Tags::deriv<gr::Tags::SpatialMetric<DataVector, SpatialDim, Frame>, 58 : tmpl::size_t<SpatialDim>, Frame>, 59 : db::ComputeTag { 60 0 : using argument_tags = tmpl::list<Phi<DataVector, SpatialDim, Frame>>; 61 : 62 0 : using return_type = tnsr::ijj<DataVector, SpatialDim, Frame>; 63 : 64 0 : static constexpr auto function = static_cast<void (*)( 65 : gsl::not_null<tnsr::ijj<DataVector, SpatialDim, Frame>*>, 66 : const tnsr::iaa<DataVector, SpatialDim, Frame>&)>( 67 : &deriv_spatial_metric<DataVector, SpatialDim, Frame>); 68 : 69 0 : using base = 70 : ::Tags::deriv<gr::Tags::SpatialMetric<DataVector, SpatialDim, Frame>, 71 : tmpl::size_t<SpatialDim>, Frame>; 72 : }; 73 : } // namespace Tags 74 : } // namespace gh