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/Tags.hpp"
20 : #include "Options/String.hpp"
21 : #include "PointwiseFunctions/GeneralRelativity/GeneralizedHarmonic/ConstraintDampingTags.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::Tags::ConstraintGamma1, ::gh::Tags::ConstraintGamma2>;
71 0 : using dg_gridless_tags = tmpl::list<>;
72 :
73 0 : std::optional<std::string> dg_ghost(
74 : const gsl::not_null<tnsr::aa<DataVector, Dim, Frame::Inertial>*>
75 : spacetime_metric,
76 : const gsl::not_null<tnsr::aa<DataVector, Dim, Frame::Inertial>*> pi,
77 : const gsl::not_null<tnsr::iaa<DataVector, Dim, Frame::Inertial>*> phi,
78 : const gsl::not_null<Scalar<DataVector>*> gamma1,
79 : const gsl::not_null<Scalar<DataVector>*> gamma2,
80 : const gsl::not_null<Scalar<DataVector>*> lapse,
81 : const gsl::not_null<tnsr::I<DataVector, Dim, Frame::Inertial>*> shift,
82 : const gsl::not_null<tnsr::II<DataVector, Dim, Frame::Inertial>*>
83 : inv_spatial_metric,
84 : const std::optional<
85 : tnsr::I<DataVector, Dim, Frame::Inertial>>& /*face_mesh_velocity*/,
86 : const tnsr::i<DataVector, Dim, Frame::Inertial>& /*normal_covector*/,
87 : const tnsr::I<DataVector, Dim, Frame::Inertial>& /*normal_vector*/,
88 : const Scalar<DataVector>& interior_gamma1,
89 : const Scalar<DataVector>& interior_gamma2) const;
90 : };
91 : } // namespace gh::BoundaryConditions
|