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 <pup.h>
9 : #include <string>
10 :
11 : #include "DataStructures/Tensor/TypeAliases.hpp"
12 : #include "Domain/BoundaryConditions/BoundaryCondition.hpp"
13 : #include "Evolution/BoundaryConditions/Type.hpp"
14 : #include "Evolution/Systems/ForceFree/BoundaryConditions/BoundaryCondition.hpp"
15 : #include "Options/String.hpp"
16 : #include "PointwiseFunctions/GeneralRelativity/TagsDeclarations.hpp"
17 : #include "Utilities/TMPL.hpp"
18 :
19 : /// \cond
20 : class DataVector;
21 : namespace gsl {
22 : template <class T>
23 : class not_null;
24 : } // namespace gsl
25 : /// \endcond
26 :
27 : namespace ForceFree::BoundaryConditions {
28 : /*!
29 : * \brief A boundary condition that only verifies that all characteristic speeds
30 : * are directed out of the domain; no boundary data is altered by this boundary
31 : * condition.
32 : */
33 1 : class DemandOutgoingCharSpeeds final : public BoundaryCondition {
34 : public:
35 0 : using options = tmpl::list<>;
36 0 : static constexpr Options::String help{
37 : "DemandOutgoingCharSpeeds boundary condition that only verifies the "
38 : "characteristic speeds are all directed out of the domain."};
39 :
40 0 : DemandOutgoingCharSpeeds() = default;
41 0 : DemandOutgoingCharSpeeds(DemandOutgoingCharSpeeds&&) = default;
42 0 : DemandOutgoingCharSpeeds& operator=(DemandOutgoingCharSpeeds&&) = default;
43 0 : DemandOutgoingCharSpeeds(const DemandOutgoingCharSpeeds&) = default;
44 0 : DemandOutgoingCharSpeeds& operator=(const DemandOutgoingCharSpeeds&) =
45 : default;
46 0 : ~DemandOutgoingCharSpeeds() override = default;
47 :
48 0 : explicit DemandOutgoingCharSpeeds(CkMigrateMessage* msg);
49 :
50 0 : WRAPPED_PUPable_decl_base_template(
51 : domain::BoundaryConditions::BoundaryCondition, DemandOutgoingCharSpeeds);
52 :
53 0 : auto get_clone() const -> std::unique_ptr<
54 : domain::BoundaryConditions::BoundaryCondition> override;
55 :
56 0 : static constexpr evolution::BoundaryConditions::Type bc_type =
57 : evolution::BoundaryConditions::Type::DemandOutgoingCharSpeeds;
58 :
59 0 : void pup(PUP::er& p) override;
60 :
61 0 : using dg_interior_evolved_variables_tags = tmpl::list<>;
62 0 : using dg_interior_temporary_tags =
63 : tmpl::list<gr::Tags::Shift<DataVector, 3>, gr::Tags::Lapse<DataVector>>;
64 0 : using dg_interior_primitive_variables_tags = tmpl::list<>;
65 0 : using dg_gridless_tags = tmpl::list<>;
66 :
67 0 : static std::optional<std::string> dg_demand_outgoing_char_speeds(
68 : const std::optional<tnsr::I<DataVector, 3, Frame::Inertial>>&
69 : face_mesh_velocity,
70 : const tnsr::i<DataVector, 3, Frame::Inertial>&
71 : outward_directed_normal_covector,
72 : const tnsr::I<DataVector, 3, Frame::Inertial>&
73 : /*outward_directed_normal_vector*/,
74 :
75 : const tnsr::I<DataVector, 3, Frame::Inertial>& shift,
76 : const Scalar<DataVector>& lapse);
77 : };
78 : } // namespace ForceFree::BoundaryConditions
|