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<
66 : Variables<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 : const InverseHessian<DataVector, 3, Frame::ElementLogical, Frame::Inertial>&
78 : cell_centered_logical_to_inertial_inv_hessian);
79 : } // namespace Ccz4::fd
|