Commit 9afe834a authored by Jakub Klinkovský's avatar Jakub Klinkovský
Browse files

Moved subentity accessors from MeshEntity to MeshSubentityStorageLayers

parent fb33eb17
Loading
Loading
Loading
Loading
+1 −86
Original line number Diff line number Diff line
@@ -107,33 +107,6 @@ getEntityDimension() const
/****
 * Subentities
 */
template< typename MeshConfig,
          typename EntityTopology >
   template< int Subdimensions >
constexpr typename MeshEntity< MeshConfig, EntityTopology >::LocalIndexType
MeshEntity< MeshConfig, EntityTopology >::
getNumberOfSubentities() const
{
   return SubentityTraits< Subdimensions >::count;
}

template< typename MeshConfig,
          typename EntityTopology >
   template< int Subdimensions >
typename MeshEntity< MeshConfig, EntityTopology >::GlobalIndexType
MeshEntity< MeshConfig, EntityTopology >::
getSubentityIndex( const LocalIndexType localIndex) const
{
   static_assert( SubentityTraits< Subdimensions >::storageEnabled, "You try to get subentity which is not configured for storage." );
   Assert( 0 <= localIndex && localIndex < SubentityTraits< Subdimensions >::count,
              std::cerr << "localIndex = " << localIndex
                        << " subentitiesCount = "
                        << SubentityTraits< Subdimensions >::count );
   typedef MeshSubentityStorageLayers< MeshConfig, EntityTopology >  SubentityBaseType;
   return SubentityBaseType::getSubentityIndex( MeshDimensionTag< Subdimensions >(),
                                                localIndex );
}

template< typename MeshConfig,
          typename EntityTopology >
constexpr typename MeshEntity< MeshConfig, EntityTopology >::LocalIndexType
@@ -149,67 +122,9 @@ typename MeshEntity< MeshConfig, EntityTopology >::GlobalIndexType
MeshEntity< MeshConfig, EntityTopology >::
getVertexIndex( const LocalIndexType localIndex ) const
{
   return this->getSubentityIndex< 0 >( localIndex  );
}

template< typename MeshConfig,
          typename EntityTopology >
   template< int Dimensions >
typename MeshEntity< MeshConfig, EntityTopology >::IdPermutationArrayAccessorType
MeshEntity< MeshConfig, EntityTopology >::
subentityOrientation( LocalIndexType index ) const
{
   static const LocalIndexType subentitiesCount = SubentityTraits< Dimension >::count;
   TNL_ASSERT( 0 <= index && index < subentitiesCount, );

   typedef MeshSubentityStorageLayers< MeshConfig, EntityTopology >       SubentityStorageLayers;
   return SubentityStorageLayers::subentityOrientation( MeshDimensionsTag< Dimensions >(), index );
}

/****
 * Mesh initialization method
 */

template< typename MeshConfig,
          typename EntityTopology >
   template< int Subdimensions >
void
MeshEntity< MeshConfig, EntityTopology >::
setSubentityIndex( const LocalIndexType& localIndex,
                   const GlobalIndexType& globalIndex )
{
   static_assert( SubentityTraits< Subdimensions >::storageEnabled, "You try to set subentity which is not configured for storage." );
   Assert( 0 <= localIndex && localIndex < SubentityTraits< Subdimensions >::count,
              std::cerr << "localIndex = " << localIndex
                        << " subentitiesCount = "
                        << SubentityTraits< Subdimensions >::count );
   typedef MeshSubentityStorageLayers< MeshConfig, EntityTopology >  SubentityBaseType;
   SubentityBaseType::setSubentityIndex( MeshDimensionTag< Subdimensions >(),
                                         localIndex,
                                         globalIndex );
   return this->template getSubentityIndex< 0 >( localIndex  );
}

template< typename MeshConfig,
          typename EntityTopology >
   template< int Subdimensions >
typename MeshEntity< MeshConfig, EntityTopology >::template SubentityTraits< Subdimensions >::IdArrayType&
MeshEntity< MeshConfig, EntityTopology >::
subentityIdsArray()
{
   typedef MeshSubentityStorageLayers< MeshConfig, EntityTopology >       SubentityStorageLayers;
   return SubentityStorageLayers::subentityIdsArray( MeshDimensionsTag< Subdimensions >() );
}

template< typename MeshConfig,
          typename EntityTopology >
   template< int Subdimensions >
typename MeshEntity< MeshConfig, EntityTopology >::template SubentityTraits< Subdimensions >::OrientationArrayType&
MeshEntity< MeshConfig, EntityTopology >::
subentityOrientationsArray()
{
   typedef MeshSubentityStorageLayers< MeshConfig, EntityTopology >       SubentityStorageLayers;
   return SubentityStorageLayers::subentityOrientationsArray( MeshDimensionsTag< Subdimensions >() );
}

/****
 * Vertex entity specialization
+62 −0
Original line number Diff line number Diff line
@@ -41,6 +41,68 @@ class MeshSubentityStorageLayers
                                       EntityTopology,
                                       MeshDimensionsTag< EntityTopology::dimensions - 1 > >
{
   using BaseType = MeshSubentityStorageLayer< MeshConfig,
                                               EntityTopology,
                                               MeshDimensionsTag< EntityTopology::dimensions - 1 > >;

   static constexpr int Dimensions = EntityTopology::dimensions;
   using MeshTraitsType = MeshTraits< MeshConfig >;

   template< int Subdimensions >
   using SubentityTraits = typename MeshTraitsType::template SubentityTraits< EntityTopology, Subdimensions >;

public:
   template< int Subdimensions >
   constexpr typename SubentityTraits< Subdimensions >::LocalIndexType getNumberOfSubentities() const
   {
      return SubentityTraits< Subdimensions >::count;
   }

   template< int Subdimensions >
   void setSubentityIndex( const typename SubentityTraits< Subdimensions >::LocalIndexType& localIndex,
                           const typename SubentityTraits< Subdimensions >::GlobalIndexType& globalIndex )
   {
      static_assert( SubentityTraits< Subdimensions >::storageEnabled, "You try to set subentity which is not configured for storage." );
      Assert( 0 <= localIndex && localIndex < SubentityTraits< Subdimensions >::count,
                 std::cerr << "localIndex = " << localIndex
                           << " subentitiesCount = "
                           << SubentityTraits< Subdimensions >::count );
      BaseType::setSubentityIndex( MeshDimensionsTag< Subdimensions >(),
                                   localIndex,
                                   globalIndex );
   }

   template< int Subdimensions >
   typename SubentityTraits< Subdimensions >::GlobalIndexType
   getSubentityIndex( const typename SubentityTraits< Subdimensions >::LocalIndexType localIndex ) const
   {
      static_assert( SubentityTraits< Subdimensions >::storageEnabled, "You try to get subentity which is not configured for storage." );
      Assert( 0 <= localIndex && localIndex < SubentityTraits< Subdimensions >::count,
                 std::cerr << "localIndex = " << localIndex
                           << " subentitiesCount = "
                           << SubentityTraits< Subdimensions >::count );
      return BaseType::getSubentityIndex( MeshDimensionsTag< Subdimensions >(),
                                          localIndex );
   }

   template< int Subdimensions >
   typename SubentityTraits< Subdimensions >::IdArrayType& subentityIdsArray()
   {
      return BaseType::subentityIdsArray( MeshDimensionsTag< Subdimensions >() );
   }

   template< int Subdimensions >
   typename SubentityTraits< Subdimensions >::OrientationArrayType& subentityOrientationsArray()
   {
      return BaseType::subentityOrientationsArray( MeshDimensionsTag< Subdimensions >() );
   }

   template< int Subdimensions >
   typename MeshTraitsType::IdPermutationArrayAccessorType subentityOrientation( typename SubentityTraits< Subdimensions >::LocalIndexType index ) const
   {
      Assert( 0 <= index && index < SubentityTraits< Subdimensions >::count, );
      return BaseType::subentityOrientation( MeshDimensionsTag< Subdimensions >(), index );
   }
};


+12 −24
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@ class MeshInitializer;
template< typename MeshConfig,
          typename EntityTopology_ >
class MeshEntity
   : public MeshSubentityStorageLayers< MeshConfig, EntityTopology_ >,
   : protected MeshSubentityStorageLayers< MeshConfig, EntityTopology_ >,
     protected MeshSuperentityAccess< MeshConfig, EntityTopology_ >,
     public MeshEntityId< typename MeshConfig::IdType,
                          typename MeshConfig::GlobalIndexType >
@@ -46,7 +46,6 @@ class MeshEntity
      using EntityTopology  = EntityTopology_;
      using GlobalIndexType = typename MeshTraitsType::GlobalIndexType;
      using LocalIndexType  = typename MeshTraitsType::LocalIndexType;
      using IdPermutationArrayAccessorType = typename MeshTraitsType::IdPermutationArrayAccessorType;

      template< int Subdimensions >
      using SubentityTraits = typename MeshTraitsType::template SubentityTraits< EntityTopology, Subdimensions >;
@@ -73,11 +72,9 @@ class MeshEntity
      /****
       * Subentities
       */
      template< int Subdimensions >
      constexpr LocalIndexType getNumberOfSubentities() const;

      template< int Subdimensions >
      GlobalIndexType getSubentityIndex( const LocalIndexType localIndex) const;
      using MeshSubentityStorageLayers< MeshConfig, EntityTopology_ >::getNumberOfSubentities;
      using MeshSubentityStorageLayers< MeshConfig, EntityTopology_ >::getSubentityIndex;
      using MeshSubentityStorageLayers< MeshConfig, EntityTopology_ >::subentityOrientation;

      /****
       * Superentities
@@ -92,27 +89,18 @@ class MeshEntity

      GlobalIndexType getVertexIndex( const LocalIndexType localIndex ) const;

      template< int Dimensions >
      IdPermutationArrayAccessorType subentityOrientation( LocalIndexType index ) const;

   protected:
      /****
       * Methods for the mesh initialization
       */
      using MeshSubentityStorageLayers< MeshConfig, EntityTopology_ >::setSubentityIndex;
      using MeshSubentityStorageLayers< MeshConfig, EntityTopology_ >::subentityIdsArray;
      using MeshSubentityStorageLayers< MeshConfig, EntityTopology_ >::subentityOrientationsArray;

      using MeshSuperentityAccess< MeshConfig, EntityTopology_ >::bindSuperentitiesStorageNetwork;
      using MeshSuperentityAccess< MeshConfig, EntityTopology_ >::setNumberOfSuperentities;
      using MeshSuperentityAccess< MeshConfig, EntityTopology_ >::setSuperentityIndex;

      template< int Subdimensions >
      void setSubentityIndex( const LocalIndexType& localIndex,
                              const GlobalIndexType& globalIndex );

      template< int Subdimensions >
      typename SubentityTraits< Subdimensions >::IdArrayType& subentityIdsArray();

      template< int Subdimensions >
      typename SubentityTraits< Subdimensions >::OrientationArrayType& subentityOrientationsArray();

   friend MeshInitializer< MeshConfig >;

   template< typename Mesh, typename DimensionsTag, typename SuperdimensionsTag >