Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <memory>
7 : #include <optional>
8 : #include <string>
9 :
10 : #include "DataStructures/DataVector.hpp"
11 : #include "DataStructures/Tensor/Tensor.hpp"
12 : #include "Evolution/BoundaryConditions/Type.hpp"
13 : #include "Evolution/Systems/CurvedScalarWave/Tags.hpp"
14 : #include "Evolution/Systems/ScalarTensor/BoundaryConditions/BoundaryCondition.hpp"
15 : #include "Options/String.hpp"
16 : #include "PointwiseFunctions/GeneralRelativity/GeneralizedHarmonic/ConstraintDampingTags.hpp"
17 : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp"
18 : #include "Utilities/Serialization/CharmPupable.hpp"
19 : #include "Utilities/TMPL.hpp"
20 :
21 : namespace ScalarTensor::BoundaryConditions {
22 : /// A `BoundaryCondition` that only verifies that all characteristic speeds are
23 : /// directed out of the domain; no boundary data is altered by this boundary
24 : /// condition.
25 1 : class DemandOutgoingCharSpeeds final : public BoundaryCondition {
26 : public:
27 0 : using options = tmpl::list<>;
28 0 : static constexpr Options::String help{
29 : "A boundary condition that only verifies the characteristic speeds are "
30 : "all directed out of the domain."};
31 :
32 0 : DemandOutgoingCharSpeeds() = default;
33 0 : DemandOutgoingCharSpeeds(DemandOutgoingCharSpeeds&&) = default;
34 0 : DemandOutgoingCharSpeeds& operator=(DemandOutgoingCharSpeeds&&) = default;
35 0 : DemandOutgoingCharSpeeds(const DemandOutgoingCharSpeeds&) = default;
36 0 : DemandOutgoingCharSpeeds& operator=(const DemandOutgoingCharSpeeds&) =
37 : default;
38 0 : ~DemandOutgoingCharSpeeds() override = default;
39 :
40 0 : explicit DemandOutgoingCharSpeeds(CkMigrateMessage* msg);
41 :
42 0 : WRAPPED_PUPable_decl_base_template(
43 : domain::BoundaryConditions::BoundaryCondition, DemandOutgoingCharSpeeds);
44 :
45 0 : auto get_clone() const -> std::unique_ptr<
46 : domain::BoundaryConditions::BoundaryCondition> override;
47 :
48 0 : static constexpr evolution::BoundaryConditions::Type bc_type =
49 : evolution::BoundaryConditions::Type::DemandOutgoingCharSpeeds;
50 :
51 0 : void pup(PUP::er& p) override;
52 :
53 0 : using dg_interior_evolved_variables_tags = tmpl::list<>;
54 0 : using dg_interior_temporary_tags =
55 : tmpl::list<::gh::Tags::ConstraintGamma1, gr::Tags::Lapse<DataVector>,
56 : gr::Tags::Shift<DataVector, 3>,
57 : ::CurvedScalarWave::Tags::ConstraintGamma1>;
58 0 : using dg_gridless_tags = tmpl::list<>;
59 0 : using dg_interior_primitive_variables_tags = tmpl::list<>;
60 :
61 0 : static std::optional<std::string> dg_demand_outgoing_char_speeds(
62 : const std::optional<tnsr::I<DataVector, 3, Frame::Inertial>>&
63 : face_mesh_velocity,
64 : const tnsr::i<DataVector, 3, Frame::Inertial>&
65 : outward_directed_normal_covector,
66 : const tnsr::I<DataVector, 3, Frame::Inertial>&
67 : /*outward_directed_normal_vector*/,
68 :
69 : const Scalar<DataVector>& gh_gamma1, const Scalar<DataVector>& lapse,
70 : const tnsr::I<DataVector, 3, Frame::Inertial>& shift,
71 : const Scalar<DataVector>& csw_gamma1);
72 : };
73 : } // namespace ScalarTensor::BoundaryConditions
|