diff --git a/src/TNL/Meshes/MeshDetails/traits/MeshEntityTraits.h b/src/TNL/Meshes/MeshDetails/traits/MeshEntityTraits.h index 524c892915d7e60ca0602c6d569a45fa39378557..64cf27b3de731e5b7e8b1836fa37dee756fed33b 100644 --- a/src/TNL/Meshes/MeshDetails/traits/MeshEntityTraits.h +++ b/src/TNL/Meshes/MeshDetails/traits/MeshEntityTraits.h @@ -50,6 +50,21 @@ public: }; +template< typename MeshConfig, + typename DimensionTag > +struct EntityTopologyGetter +{ + static_assert( DimensionTag::value <= MeshConfig::meshDimension, "There are no entities with dimension higher than the mesh dimension." ); + using Topology = typename Topologies::Subtopology< typename MeshConfig::CellTopology, DimensionTag::value >::Topology; +}; + +template< typename MeshConfig > +struct EntityTopologyGetter< MeshConfig, DimensionTag< MeshConfig::CellTopology::dimension > > +{ + using Topology = typename MeshConfig::CellTopology; +}; + + template< typename MeshConfig, typename Device, int Dimension > @@ -60,7 +75,7 @@ public: using GlobalIndexType = typename MeshConfig::GlobalIndexType; using LocalIndexType = typename MeshConfig::LocalIndexType; - using EntityTopology = typename Topologies::EntityTopologyGetter< MeshConfig, DimensionTag< Dimension > >::Topology; + using EntityTopology = typename EntityTopologyGetter< MeshConfig, DimensionTag< Dimension > >::Topology; using EntityType = MeshEntity< MeshConfig, Device, EntityTopology >; using SeedType = MeshEntitySeed< MeshConfig, EntityTopology >; diff --git a/src/TNL/Meshes/MeshEntity.h b/src/TNL/Meshes/MeshEntity.h index 2f46296f8a1715d66d8964d38e55d0d17ec3660f..b68225bc19396352c53cb59fe7869cd4cc9829e8 100644 --- a/src/TNL/Meshes/MeshEntity.h +++ b/src/TNL/Meshes/MeshEntity.h @@ -39,7 +39,7 @@ class MeshEntity protected MeshSuperentityAccess< MeshConfig, Device, EntityTopology_ >, public MeshEntityIndex< typename MeshConfig::IdType > { - static_assert( Topologies::is_compatible_topology< typename MeshConfig::CellTopology, EntityTopology_ >::value, + static_assert( std::is_same< EntityTopology_, typename MeshTraits< MeshConfig, Device >::template EntityTraits< EntityTopology_::dimension >::EntityTopology >::value, "Specified entity topology is not compatible with the MeshConfig." ); public: diff --git a/src/TNL/Meshes/Topologies/MeshEntityTopology.h b/src/TNL/Meshes/Topologies/MeshEntityTopology.h index f0c84b9d0ccc82f3c386cda82523eeb598f0540d..b506f4f5da8893d4ab305117a4528bac25225350 100644 --- a/src/TNL/Meshes/Topologies/MeshEntityTopology.h +++ b/src/TNL/Meshes/Topologies/MeshEntityTopology.h @@ -38,38 +38,6 @@ struct SubentityVertexMap { }; - -template< typename MeshConfig, - typename DimensionTag > -struct EntityTopologyGetter -{ - static_assert( DimensionTag::value <= MeshConfig::meshDimension, "There are no entities with dimension higher than the mesh dimension." ); - using Topology = typename Subtopology< typename MeshConfig::CellTopology, DimensionTag::value >::Topology; -}; - -template< typename MeshConfig > -struct EntityTopologyGetter< MeshConfig, DimensionTag< MeshConfig::CellTopology::dimension > > -{ - using Topology = typename MeshConfig::CellTopology; -}; - - -// Helper struct to determine if one topology is compatible with another one. -template< typename Supertopology, typename Subtopology > -struct is_compatible_topology -{ - static_assert( Supertopology::dimension >= Subtopology::dimension, - "wrong order of topologies in template parameters" ); - static constexpr bool value = std::is_same< typename Topologies::Subtopology< Supertopology, Subtopology::dimension >::Topology, - Subtopology >::value; -}; - -template< typename Supertopology > -struct is_compatible_topology< Supertopology, Supertopology > -{ - static constexpr bool value = true; -}; - } // namespace Topologies } // namespace Meshes } // namespace TNL