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/Tensor.hpp" 9 : #include "Utilities/Gsl.hpp" 10 : 11 : namespace Xcts { 12 : /// @{ 13 : /*! 14 : * \brief The longitudinal operator, or vector gradient, \f$(L\beta)^{ij}\f$ 15 : * 16 : * Computes the longitudinal operator 17 : * 18 : * \f{equation} 19 : * (L\beta)^{ij} = \nabla^i \beta^j + \nabla^j \beta^i - 20 : * \frac{2}{3}\gamma^{ij}\nabla_k\beta^k 21 : * \f} 22 : * 23 : * of a vector field \f$\beta^i\f$, where \f$\nabla\f$ denotes the covariant 24 : * derivative w.r.t. the metric \f$\gamma\f$ (see e.g. Eq. (3.50) in 25 : * \cite BaumgarteShapiro). Note that in the XCTS equations the longitudinal 26 : * operator is typically applied to conformal quantities and w.r.t. the 27 : * conformal metric \f$\bar{\gamma}\f$. 28 : * 29 : * In terms of the symmetric "strain" quantity 30 : * \f$B_{ij}=\nabla_{(i}\gamma_{j)k}\beta^k\f$ the longitudinal operator is: 31 : * 32 : * \f{equation} 33 : * (L\beta)^{ij} = 2\left(\gamma^{ik}\gamma^{jl} - 34 : * \frac{1}{3} \gamma^{ij}\gamma^{kl}\right) B_{kl} 35 : * \f} 36 : * 37 : * Note that the strain can be computed with `Elasticity::strain`. 38 : */ 39 : template <typename DataType> 40 1 : void longitudinal_operator(gsl::not_null<tnsr::II<DataType, 3>*> result, 41 : const tnsr::ii<DataType, 3>& strain, 42 : const tnsr::II<DataType, 3>& inv_metric); 43 : 44 : template <typename DataType> 45 1 : void longitudinal_operator( 46 : gsl::not_null<tnsr::II<DataType, 3>*> result, 47 : const tnsr::I<DataType, 3>& shift, const tnsr::iJ<DataType, 3>& deriv_shift, 48 : const tnsr::II<DataType, 3>& inv_metric, 49 : const tnsr::Ijj<DataType, 3>& christoffel_second_kind); 50 : /// @} 51 : 52 : /// @{ 53 : /*! 54 : * \brief The conformal longitudinal operator \f$(L\beta)^{ij}\f$ on a flat 55 : * conformal metric in Cartesian coordinates \f$\gamma_{ij}=\delta_{ij}\f$ 56 : * 57 : * \see `Xcts::longitudinal_operator` 58 : */ 59 : template <typename DataType> 60 1 : void longitudinal_operator_flat_cartesian( 61 : gsl::not_null<tnsr::II<DataType, 3>*> result, 62 : const tnsr::ii<DataType, 3>& strain); 63 : 64 : template <typename DataType> 65 : void longitudinal_operator_flat_cartesian( 66 : gsl::not_null<tnsr::II<DataType, 3>*> result, 67 : const tnsr::iJ<DataType, 3>& deriv_shift); 68 : /// @} 69 : } // namespace Xcts