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