validation.hpp type_traits serif/discretization/domain/concepts.hpp serif/discretization/domain/ids/lists/concepts.hpp serif/discretization/domain/relation/concepts.hpp serif/discretization/domain/relation/lists/concepts.hpp serif/discretization/domain/relation/lists/relation_list.hpp serif/discretization/domain/resolver.hpp src/include/serif/discretization/domain/relation/validation/concepts.hpp serif::discretization::domain::relation::validation::RelationUsesRegisteredEntities< FullyConnected< DomainT >, DomainIDsT, BoundaryIDsT > serif::discretization::domain::relation::validation::RelationUsesRegisteredEntities< Inscribed< InnerDomainT, OuterDomainT >, DomainIDsT, BoundaryIDsT > serif::discretization::domain::relation::validation::RelationUsesRegisteredEntities< DomainBoundary< BoundaryT, DomainTs... >, DomainIDsT, BoundaryIDsT > serif::discretization::domain::relation::validation::RelationsUseRegisteredEntities< DomainIDsT, BoundaryIDsT, lists::RelationList< RelationTs... > > serif serif::discretization serif::discretization::domain serif::discretization::domain::relation serif::discretization::domain::relation::validation Compile-time validation of relations in the discretization framework. This file provides utilities to check if relations use registered entities based on provided domain and boundary IDs. Emily M. Boudreaux This header is primarily split into a singular and a plural section. The plural section simply folds over a pack to invoke the singular section. #pragmaonce #include<type_traits> #include"serif/discretization/domain/concepts.hpp" #include"serif/discretization/domain/ids/lists/concepts.hpp" #include"serif/discretization/domain/relation/concepts.hpp" #include"serif/discretization/domain/relation/lists/concepts.hpp" #include"serif/discretization/domain/relation/lists/relation_list.hpp" #include"serif/discretization/domain/resolver.hpp" namespaceserif::discretization::domain::relation::validation{ usingids::lists::IsDomainIDList; usingids::lists::IsBoundaryIDList; usinglists::IsRelationList; template<IsRelationRelationT,IsDomainIDListDomainIDsT,IsBoundaryIDListBoundaryIDsT> structRelationUsesRegisteredEntities; template<IsDomainOrSetDomainT,IsDomainIDListDomainIDsT,IsBoundaryIDListBoundaryIDsT> structRelationUsesRegisteredEntities<FullyConnected<DomainT>,DomainIDsT,BoundaryIDsT>: std::bool_constant<DomainIDResolver<DomainT,DomainIDsT>::registered>{}; template<IsDomainOrSetInnerDomainT,IsDomainOrSetOuterDomainT,IsDomainIDListDomainIDsT,IsBoundaryIDListBoundaryIDsT> structRelationUsesRegisteredEntities<Inscribed<InnerDomainT,OuterDomainT>,DomainIDsT,BoundaryIDsT>: std::bool_constant< DomainIDResolver<InnerDomainT,DomainIDsT>::registered&& DomainIDResolver<OuterDomainT,DomainIDsT>::registered>{}; template<IsBoundaryBoundaryT,IsDomainOrSet...DomainTs,IsDomainIDListDomainIDsT,IsBoundaryIDListBoundaryIDsT> structRelationUsesRegisteredEntities<DomainBoundary<BoundaryT,DomainTs...>,DomainIDsT,BoundaryIDsT>: std::bool_constant< BoundaryIDResolver<BoundaryT,BoundaryIDsT>::registered&& (DomainIDResolver<DomainTs,DomainIDsT>::registered&&...)>{}; template<IsDomainIDListDomainIDsT,IsBoundaryIDListBoundaryIDsT,typenameRelationListT> structRelationsUseRegisteredEntities; template<IsDomainIDListDomainIDsT,IsBoundaryIDListBoundaryIDsT,IsRelation...RelationTs> structRelationsUseRegisteredEntities<DomainIDsT,BoundaryIDsT,lists::RelationList<RelationTs...>>: std::bool_constant<(RelationUsesRegisteredEntities<RelationTs,DomainIDsT,BoundaryIDsT>::value&&...)>{}; }