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 "Elliptic/BoundaryConditions/BoundaryCondition.hpp"
9 : #include "Elliptic/Protocols/FirstOrderSystem.hpp"
10 : #include "Elliptic/Systems/Poisson/Equations.hpp"
11 : #include "Elliptic/Systems/Poisson/Geometry.hpp"
12 : #include "Elliptic/Systems/Punctures/Sources.hpp"
13 : #include "Elliptic/Systems/Punctures/Tags.hpp"
14 : #include "NumericalAlgorithms/LinearOperators/PartialDerivatives.hpp"
15 : #include "Utilities/ProtocolHelpers.hpp"
16 : #include "Utilities/TMPL.hpp"
17 :
18 : namespace Punctures {
19 :
20 : /*!
21 : * \brief The puncture equation, formulated as a set of coupled first-order
22 : * partial differential equations
23 : *
24 : * See \ref Punctures for details on the puncture equation. Since it is just a
25 : * flat-space Poisson equation with nonlinear sources, we can reuse the
26 : * Euclidean Poisson fluxes.
27 : */
28 1 : struct FirstOrderSystem
29 : : tt::ConformsTo<elliptic::protocols::FirstOrderSystem> {
30 0 : static constexpr size_t volume_dim = 3;
31 :
32 0 : using primal_fields = tmpl::list<Tags::Field>;
33 0 : using primal_fluxes =
34 : tmpl::list<::Tags::Flux<Tags::Field, tmpl::size_t<3>, Frame::Inertial>>;
35 :
36 0 : using background_fields = tmpl::list<Tags::Alpha, Tags::Beta>;
37 0 : using inv_metric_tag = void;
38 :
39 0 : using fluxes_computer = Poisson::Fluxes<3, Poisson::Geometry::FlatCartesian>;
40 0 : using sources_computer = Sources;
41 0 : using sources_computer_linearized = LinearizedSources;
42 :
43 0 : using boundary_conditions_base =
44 : elliptic::BoundaryConditions::BoundaryCondition<3>;
45 0 : using modify_boundary_data = void;
46 : };
47 :
48 : } // namespace Punctures
|