Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include "Domain/BoundaryConditions/Periodic.hpp" 7 : #include "Evolution/Systems/CurvedScalarWave/BoundaryConditions/AnalyticConstant.hpp" 8 : #include "Evolution/Systems/CurvedScalarWave/BoundaryConditions/DemandOutgoingCharSpeeds.hpp" 9 : #include "Evolution/Systems/CurvedScalarWave/BoundaryConditions/Factory.hpp" 10 : #include "Evolution/Systems/GeneralizedHarmonic/BoundaryConditions/BoundaryCondition.hpp" 11 : #include "Evolution/Systems/GeneralizedHarmonic/BoundaryConditions/DemandOutgoingCharSpeeds.hpp" 12 : #include "Evolution/Systems/GeneralizedHarmonic/BoundaryConditions/DirichletAnalytic.hpp" 13 : #include "Evolution/Systems/GeneralizedHarmonic/BoundaryConditions/Factory.hpp" 14 : #include "Evolution/Systems/ScalarTensor/BoundaryConditions/BoundaryCondition.hpp" 15 : #include "Evolution/Systems/ScalarTensor/BoundaryConditions/ConstraintPreserving.hpp" 16 : #include "Evolution/Systems/ScalarTensor/BoundaryConditions/ProductOfConditions.hpp" 17 : #include "Utilities/TMPL.hpp" 18 : 19 : namespace ScalarTensor::BoundaryConditions { 20 : 21 : namespace detail { 22 : 23 : // Remove boundary condition products of DemandOutgoingCharSpeeds with 24 : // other types of boundary conditions 25 : template <typename DerivedGhCondition, typename DerivedScalarCondition> 26 : using ProductOfConditionsIfConsistent = tmpl::conditional_t< 27 : (DerivedGhCondition::bc_type == 28 : evolution::BoundaryConditions::Type::DemandOutgoingCharSpeeds) xor 29 : (DerivedScalarCondition::bc_type == 30 : evolution::BoundaryConditions::Type::DemandOutgoingCharSpeeds), 31 : tmpl::list<>, 32 : ProductOfConditions<DerivedGhCondition, DerivedScalarCondition>>; 33 : 34 : template <typename GhList, typename ScalarList> 35 : struct AllProductConditions; 36 : 37 : template <typename GhList, typename... ScalarConditions> 38 : struct AllProductConditions<GhList, tmpl::list<ScalarConditions...>> { 39 : using type = tmpl::flatten<tmpl::list<tmpl::transform< 40 : GhList, tmpl::bind<ProductOfConditionsIfConsistent, tmpl::_1, 41 : tmpl::pin<ScalarConditions>>>...>>; 42 : }; 43 : 44 : } // namespace detail 45 : 46 : /// Typelist of standard BoundaryConditions. For now, we only support a subset 47 : /// of the available boundary conditions 48 1 : using subset_standard_boundary_conditions_gh = 49 : tmpl::list<gh::BoundaryConditions::DemandOutgoingCharSpeeds<3>, 50 : gh::BoundaryConditions::DirichletAnalytic<3>>; 51 : 52 0 : using subset_standard_boundary_conditions_scalar = tmpl::list< 53 : CurvedScalarWave::BoundaryConditions::AnalyticConstant<3>, 54 : CurvedScalarWave::BoundaryConditions::DemandOutgoingCharSpeeds<3>>; 55 0 : using standard_boundary_conditions = tmpl::append< 56 : detail::AllProductConditions< 57 : subset_standard_boundary_conditions_gh, 58 : subset_standard_boundary_conditions_scalar>::type, 59 : tmpl::list<ScalarTensor::BoundaryConditions::ConstraintPreserving, 60 : domain::BoundaryConditions::Periodic<BoundaryCondition>>>; 61 : 62 : } // namespace ScalarTensor::BoundaryConditions