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