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 : #include <type_traits>
11 :
12 : #include "DataStructures/DataBox/Prefixes.hpp"
13 : #include "DataStructures/DataVector.hpp"
14 : #include "DataStructures/Tensor/Tensor.hpp"
15 : #include "Evolution/BoundaryConditions/Type.hpp"
16 : #include "Evolution/DgSubcell/Tags/Mesh.hpp"
17 : #include "Evolution/Systems/Burgers/BoundaryConditions/BoundaryCondition.hpp"
18 : #include "Evolution/Systems/Burgers/Tags.hpp"
19 : #include "Options/String.hpp"
20 : #include "Utilities/Gsl.hpp"
21 : #include "Utilities/Serialization/CharmPupable.hpp"
22 : #include "Utilities/TMPL.hpp"
23 :
24 : /// \cond
25 : template <size_t Dim>
26 : class Direction;
27 : template <size_t Dim>
28 : class Mesh;
29 : /// \endcond
30 :
31 : namespace Burgers::BoundaryConditions {
32 : /*!
33 : * \brief A boundary condition that only verifies that all characteristic speeds
34 : * are directed out of the domain; no boundary data is altered by this boundary
35 : * condition.
36 : */
37 1 : class DemandOutgoingCharSpeeds final : public BoundaryCondition {
38 : public:
39 0 : using options = tmpl::list<>;
40 0 : static constexpr Options::String help{
41 : "A boundary condition that only verifies the characteristic speeds "
42 : "are all directed out of the domain."};
43 :
44 0 : DemandOutgoingCharSpeeds() = default;
45 0 : DemandOutgoingCharSpeeds(DemandOutgoingCharSpeeds&&) = default;
46 0 : DemandOutgoingCharSpeeds& operator=(DemandOutgoingCharSpeeds&&) = default;
47 0 : DemandOutgoingCharSpeeds(const DemandOutgoingCharSpeeds&) = default;
48 0 : DemandOutgoingCharSpeeds& operator=(const DemandOutgoingCharSpeeds&) =
49 : default;
50 0 : ~DemandOutgoingCharSpeeds() override = default;
51 :
52 0 : explicit DemandOutgoingCharSpeeds(CkMigrateMessage* msg);
53 :
54 0 : WRAPPED_PUPable_decl_base_template(
55 : domain::BoundaryConditions::BoundaryCondition, DemandOutgoingCharSpeeds);
56 :
57 0 : auto get_clone() const -> std::unique_ptr<
58 : domain::BoundaryConditions::BoundaryCondition> override;
59 :
60 0 : static constexpr evolution::BoundaryConditions::Type bc_type =
61 : evolution::BoundaryConditions::Type::DemandOutgoingCharSpeeds;
62 :
63 0 : void pup(PUP::er& p) override;
64 :
65 0 : using dg_interior_evolved_variables_tags = tmpl::list<Tags::U>;
66 0 : using dg_interior_temporary_tags = tmpl::list<>;
67 0 : using dg_gridless_tags = tmpl::list<>;
68 :
69 0 : static std::optional<std::string> dg_demand_outgoing_char_speeds(
70 : const std::optional<tnsr::I<DataVector, 1, Frame::Inertial>>&
71 : face_mesh_velocity,
72 : const tnsr::i<DataVector, 1, Frame::Inertial>&
73 : outward_directed_normal_covector,
74 : const Scalar<DataVector>& u);
75 :
76 0 : using fd_interior_evolved_variables_tags = tmpl::list<Tags::U>;
77 0 : using fd_interior_temporary_tags =
78 : tmpl::list<evolution::dg::subcell::Tags::Mesh<1>>;
79 0 : using fd_gridless_tags = tmpl::list<>;
80 :
81 0 : static void fd_demand_outgoing_char_speeds(
82 : gsl::not_null<Scalar<DataVector>*> u, const Direction<1>& direction,
83 : const std::optional<tnsr::I<DataVector, 1, Frame::Inertial>>&
84 : face_mesh_velocity,
85 : const tnsr::i<DataVector, 1, Frame::Inertial>&
86 : outward_directed_normal_covector,
87 : const Scalar<DataVector>& u_interior, const Mesh<1>& subcell_mesh);
88 : };
89 : } // namespace Burgers::BoundaryConditions
|