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 <memory> 8 : #include <optional> 9 : #include <pup.h> 10 : #include <string> 11 : #include <type_traits> 12 : 13 : #include "DataStructures/DataBox/Prefixes.hpp" 14 : #include "DataStructures/DataVector.hpp" 15 : #include "DataStructures/Tensor/Tensor.hpp" 16 : #include "DataStructures/Variables.hpp" 17 : #include "Evolution/BoundaryConditions/Type.hpp" 18 : #include "Evolution/Systems/GeneralizedHarmonic/BoundaryConditions/BoundaryCondition.hpp" 19 : #include "Evolution/Systems/GeneralizedHarmonic/ConstraintDamping/Tags.hpp" 20 : #include "Evolution/Systems/GeneralizedHarmonic/Tags.hpp" 21 : #include "Options/String.hpp" 22 : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp" 23 : #include "Utilities/Gsl.hpp" 24 : #include "Utilities/MakeWithValue.hpp" 25 : #include "Utilities/Serialization/CharmPupable.hpp" 26 : #include "Utilities/TMPL.hpp" 27 : 28 : /// \cond 29 : namespace domain::Tags { 30 : template <size_t Dim, typename Frame> 31 : struct Coordinates; 32 : } // namespace domain::Tags 33 : /// \endcond 34 : 35 : namespace gh::BoundaryConditions { 36 : /*! 37 : * \brief Sets Dirichlet boundary conditions to a Minkowski spacetime. 38 : */ 39 : template <size_t Dim> 40 1 : class DirichletMinkowski final : public BoundaryCondition<Dim> { 41 : public: 42 0 : using options = tmpl::list<>; 43 0 : static constexpr Options::String help{ 44 : "DirichletMinkowski boundary conditions setting the value of the " 45 : "spacetime metric and its derivatives Phi and Pi to Minkowski (i.e., " 46 : "flat spacetime)."}; 47 : 48 0 : DirichletMinkowski() = default; 49 0 : DirichletMinkowski(DirichletMinkowski&&) = default; 50 0 : DirichletMinkowski& operator=(DirichletMinkowski&&) = default; 51 0 : DirichletMinkowski(const DirichletMinkowski&) = default; 52 0 : DirichletMinkowski& operator=(const DirichletMinkowski&) = default; 53 0 : ~DirichletMinkowski() override = default; 54 : 55 0 : explicit DirichletMinkowski(CkMigrateMessage* msg); 56 : 57 0 : WRAPPED_PUPable_decl_base_template( 58 : domain::BoundaryConditions::BoundaryCondition, DirichletMinkowski); 59 : 60 0 : auto get_clone() const -> std::unique_ptr< 61 : domain::BoundaryConditions::BoundaryCondition> override; 62 : 63 0 : static constexpr evolution::BoundaryConditions::Type bc_type = 64 : evolution::BoundaryConditions::Type::Ghost; 65 : 66 0 : void pup(PUP::er& p) override; 67 : 68 0 : using dg_interior_evolved_variables_tags = tmpl::list<>; 69 0 : using dg_interior_temporary_tags = 70 : tmpl::list<::gh::ConstraintDamping::Tags::ConstraintGamma1, 71 : ::gh::ConstraintDamping::Tags::ConstraintGamma2>; 72 0 : using dg_gridless_tags = tmpl::list<>; 73 : 74 0 : std::optional<std::string> dg_ghost( 75 : const gsl::not_null<tnsr::aa<DataVector, Dim, Frame::Inertial>*> 76 : spacetime_metric, 77 : const gsl::not_null<tnsr::aa<DataVector, Dim, Frame::Inertial>*> pi, 78 : const gsl::not_null<tnsr::iaa<DataVector, Dim, Frame::Inertial>*> phi, 79 : const gsl::not_null<Scalar<DataVector>*> gamma1, 80 : const gsl::not_null<Scalar<DataVector>*> gamma2, 81 : const gsl::not_null<Scalar<DataVector>*> lapse, 82 : const gsl::not_null<tnsr::I<DataVector, Dim, Frame::Inertial>*> shift, 83 : const gsl::not_null<tnsr::II<DataVector, Dim, Frame::Inertial>*> 84 : inv_spatial_metric, 85 : const std::optional< 86 : tnsr::I<DataVector, Dim, Frame::Inertial>>& /*face_mesh_velocity*/, 87 : const tnsr::i<DataVector, Dim, Frame::Inertial>& /*normal_covector*/, 88 : const tnsr::I<DataVector, Dim, Frame::Inertial>& /*normal_vector*/, 89 : const Scalar<DataVector>& interior_gamma1, 90 : const Scalar<DataVector>& interior_gamma2) const; 91 : }; 92 : } // namespace gh::BoundaryConditions