Skip to content
Snippets Groups Projects
Commit 2bb71149 authored by Jakub Klinkovský's avatar Jakub Klinkovský
Browse files

Moved EntityTopologyGetter to MeshEntityTraits.h

parent ff969833
No related branches found
No related tags found
No related merge requests found
...@@ -50,6 +50,21 @@ public: ...@@ -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, template< typename MeshConfig,
typename Device, typename Device,
int Dimension > int Dimension >
...@@ -60,7 +75,7 @@ public: ...@@ -60,7 +75,7 @@ public:
using GlobalIndexType = typename MeshConfig::GlobalIndexType; using GlobalIndexType = typename MeshConfig::GlobalIndexType;
using LocalIndexType = typename MeshConfig::LocalIndexType; 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 EntityType = MeshEntity< MeshConfig, Device, EntityTopology >;
using SeedType = MeshEntitySeed< MeshConfig, EntityTopology >; using SeedType = MeshEntitySeed< MeshConfig, EntityTopology >;
......
...@@ -39,7 +39,7 @@ class MeshEntity ...@@ -39,7 +39,7 @@ class MeshEntity
protected MeshSuperentityAccess< MeshConfig, Device, EntityTopology_ >, protected MeshSuperentityAccess< MeshConfig, Device, EntityTopology_ >,
public MeshEntityIndex< typename MeshConfig::IdType > 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." ); "Specified entity topology is not compatible with the MeshConfig." );
public: public:
......
...@@ -38,38 +38,6 @@ struct SubentityVertexMap ...@@ -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 Topologies
} // namespace Meshes } // namespace Meshes
} // namespace TNL } // namespace TNL
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment