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 :
12 : #include "DataStructures/Tensor/TypeAliases.hpp"
13 : #include "Domain/BoundaryConditions/BoundaryCondition.hpp"
14 : #include "Evolution/BoundaryConditions/Type.hpp"
15 : #include "Evolution/Systems/NewtonianEuler/BoundaryConditions/BoundaryCondition.hpp"
16 : #include "Evolution/Systems/NewtonianEuler/Tags.hpp"
17 : #include "Options/String.hpp"
18 : #include "PointwiseFunctions/Hydro/Tags.hpp"
19 : #include "Utilities/TMPL.hpp"
20 :
21 : /// \cond
22 : class DataVector;
23 : namespace EquationsOfState {
24 : template <bool IsRelativistic, size_t ThermodynamicDim>
25 : class EquationOfState;
26 : } // namespace EquationsOfState
27 : namespace gsl {
28 : template <class T>
29 : class not_null;
30 : } // namespace gsl
31 : /// \endcond
32 :
33 : namespace NewtonianEuler::BoundaryConditions {
34 : /*!
35 : * \brief A boundary condition that only verifies that all characteristic speeds
36 : * are directed out of the domain; no boundary data is altered by this boundary
37 : * condition.
38 : */
39 : template <size_t Dim>
40 1 : class DemandOutgoingCharSpeeds final : public BoundaryCondition<Dim> {
41 : public:
42 0 : using options = tmpl::list<>;
43 0 : static constexpr Options::String help{
44 : "A boundary condition that only verifies the characteristic speeds are "
45 : "all directed out of the domain."};
46 :
47 0 : DemandOutgoingCharSpeeds() = default;
48 0 : DemandOutgoingCharSpeeds(DemandOutgoingCharSpeeds&&) = default;
49 0 : DemandOutgoingCharSpeeds& operator=(DemandOutgoingCharSpeeds&&) = default;
50 0 : DemandOutgoingCharSpeeds(const DemandOutgoingCharSpeeds&) = default;
51 0 : DemandOutgoingCharSpeeds& operator=(const DemandOutgoingCharSpeeds&) =
52 : default;
53 0 : ~DemandOutgoingCharSpeeds() override = default;
54 :
55 0 : explicit DemandOutgoingCharSpeeds(CkMigrateMessage* msg);
56 :
57 0 : WRAPPED_PUPable_decl_base_template(
58 : domain::BoundaryConditions::BoundaryCondition, DemandOutgoingCharSpeeds);
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::DemandOutgoingCharSpeeds;
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 = tmpl::list<>;
70 0 : using dg_interior_primitive_variables_tags =
71 : tmpl::list<hydro::Tags::RestMassDensity<DataVector>,
72 : hydro::Tags::SpatialVelocity<DataVector, Dim, Frame::Inertial>,
73 : hydro::Tags::SpecificInternalEnergy<DataVector>>;
74 0 : using dg_gridless_tags = tmpl::list<hydro::Tags::EquationOfState<false, 2>>;
75 :
76 : template <size_t ThermodynamicDim>
77 0 : static std::optional<std::string> dg_demand_outgoing_char_speeds(
78 : const std::optional<tnsr::I<DataVector, Dim, Frame::Inertial>>&
79 : face_mesh_velocity,
80 : const tnsr::i<DataVector, Dim, Frame::Inertial>&
81 : outward_directed_normal_covector,
82 :
83 : const Scalar<DataVector>& mass_density,
84 : const tnsr::I<DataVector, Dim, Frame::Inertial>& velocity,
85 : const Scalar<DataVector>& specific_internal_energy,
86 : const EquationsOfState::EquationOfState<false, ThermodynamicDim>&
87 : equation_of_state);
88 : };
89 : } // namespace NewtonianEuler::BoundaryConditions
|