concepts.hpp serif/discretization/domain/ids/concepts.hpp serif/discretization/domain/ids/validation/unique_ids.hpp serif/utils/misc/concepts/type_uniqueness.hpp src/include/serif/discretization/domain/ids/lists/lists.hpp serif serif::discretization serif::discretization::domain serif::discretization::domain::ids serif::discretization::domain::ids::validation This file defines concepts for domain ID lists in the discretization framework. Specifically we define here concepts used to validate traits of a domain. Emily M. Boudreaux #pragmaonce #include"serif/discretization/domain/ids/concepts.hpp" #include"serif/discretization/domain/ids/validation/unique_ids.hpp" #include"serif/utils/misc/concepts/type_uniqueness.hpp" namespaceserif::discretization::domain::ids::validation{ usingutils::misc::concepts::AllTypesAreUnique; //---IDvaluevalidation--- template<typename...DomainIDTs> conceptHaveUniqueDomainIDs=all_unique_values(DomainIDTs::ID...); template<typename...BoundaryIDTs> conceptHaveUniqueBoundaryIDs=all_unique_values(BoundaryIDTs::ID...); //---Typevalidation(Domains&Boundaries)--- template<typename...DomainIDTs> conceptHaveUniqueDomains=AllTypesAreUnique<typenameDomainIDTs::domain_type...>; template<typename...BoundaryIDTs> conceptHaveUniqueBoundaries=AllTypesAreUnique<typenameBoundaryIDTs::boundary_type...>; //AwellformedIDtable:everyentryisreallyanID,nointegerisreused, //andnovolume(orsurface)istaggedtwice. // //Notethatthesearevariadicconcepts,thereforetheymustbeappliedtoapackasawhole //viaarequires-clause.Writingthemasatemplateparameterconstraint //(e.g.template<AreDistinctDomainIDs...Ts>)willapplythemtoeachelement //individually,thischecksnothing. template<typename...DomainIDTs> conceptAreDistinctDomainIDs= (IsDomainID<DomainIDTs>&&...)&&//1.everythinginthepackreallyisaDomainID HaveUniqueDomainIDs<DomainIDTs...>&&//2.norepeatedintegerattribute HaveUniqueDomains<DomainIDTs...>;//3.novolumetaggedtwice template<typename...BoundaryIDTs> conceptAreDistinctBoundaryIDs= (IsBoundaryID<BoundaryIDTs>&&...)&&//1.everythinginthepackreallyisaBoundaryID HaveUniqueBoundaryIDs<BoundaryIDTs...>&&//2.norepeatedintegerattribute HaveUniqueBoundaries<BoundaryIDTs...>;//3.nosurfacetaggedtwice }