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 : }; 46 : 47 : } // namespace Punctures