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