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 : #include <utility> 8 : 9 : #include "DataStructures/DataBox/PrefixHelpers.hpp" 10 : #include "DataStructures/Tensor/IndexType.hpp" 11 : #include "DataStructures/Tensor/TypeAliases.hpp" 12 : #include "Domain/Structure/Direction.hpp" 13 : #include "Domain/Structure/DirectionalId.hpp" 14 : #include "Domain/Structure/DirectionalIdMap.hpp" 15 : #include "Domain/Structure/ElementId.hpp" 16 : #include "Evolution/Systems/Ccz4/FiniteDifference/System.hpp" 17 : #include "Evolution/Systems/Ccz4/System.hpp" 18 : #include "Utilities/Gsl.hpp" 19 : #include "Utilities/TMPL.hpp" 20 : 21 : /// \cond 22 : class DataVector; 23 : template <size_t Dim> 24 : class Mesh; 25 : template <typename TagsList> 26 : class Variables; 27 : namespace evolution::dg::subcell { 28 : class GhostData; 29 : } // namespace evolution::dg::subcell 30 : /// \endcond 31 : 32 : namespace Ccz4::fd { 33 : /*! 34 : * \brief Compute first partial derivatives of all the evolved variables in the 35 : * second order Ccz4 system. 36 : * 37 : * The derivatives are computed using FD of order deriv_order using stencil 38 : * the same as `fd::partial_derivatives()`. 39 : * 40 : */ 41 1 : void spacetime_derivatives( 42 : gsl::not_null<Variables< 43 : db::wrap_tags_in<::Tags::deriv, typename System::gradients_tags, 44 : tmpl::size_t<3>, Frame::Inertial>>*> 45 : result, 46 : const Variables<typename System::variables_tag::tags_list>& 47 : volume_evolved_variables, 48 : const DirectionalIdMap<3, evolution::dg::subcell::GhostData>& 49 : all_ghost_data, 50 : const size_t& deriv_order, const Mesh<3>& volume_mesh, 51 : const InverseJacobian<DataVector, 3, Frame::ElementLogical, 52 : Frame::Inertial>& 53 : cell_centered_logical_to_inertial_inv_jacobian); 54 : 55 : /*! 56 : * \brief Compute second partial derivatives of all the evolved variables in the 57 : * second order Ccz4 system 58 : * \details 59 : * The derivatives are computed using FD of order deriv_order. 60 : * 61 : * \note Only 3D 4-th order second derivatives are implemented 62 : * in this stencil 63 : */ 64 1 : void second_spacetime_derivatives( 65 : gsl::not_null<Variables< 66 : db::wrap_tags_in<::Tags::second_deriv, System::gradients_tags, 67 : tmpl::size_t<3>, Frame::Inertial>>*> 68 : result, 69 : const Variables<typename System::variables_tag::tags_list>& 70 : volume_evolved_variables, 71 : const DirectionalIdMap<3, evolution::dg::subcell::GhostData>& 72 : all_ghost_data, 73 : const size_t& deriv_order, const Mesh<3>& volume_mesh, 74 : const InverseJacobian<DataVector, 3, Frame::ElementLogical, 75 : Frame::Inertial>& 76 : cell_centered_logical_to_inertial_inv_jacobian); 77 : } // namespace Ccz4::fd