Commit 300e3fd1 authored by Tomáš Oberhuber's avatar Tomáš Oberhuber
Browse files

Fixing mesh config validator.

Adding mesh simplex.
parent e4b3ca38
Loading
Loading
Loading
Loading
+31 −22
Original line number Diff line number Diff line
@@ -19,25 +19,26 @@
#define	TNLMESHCONFIGVALIDATOR_H

#include <core/tnlAssert.h>
#include <mesh/topologies/tnlMeshEntityTopology.h>
#include <mesh/tnlDimensionsTag.h>

/*
template< typename MeshConfig,
          typename MeshEntity,
          int dimensions >
          typename dimensions >
class tnlMeshConfigValidatorSubtopologyLayer :
   public tnlMeshConfigValidatorSubtopologyLayer< MeshConfig, MeshEntity, dimensions - 1 >
public tnlMeshConfigValidatorSubtopologyLayer< MeshConfig, MeshEntity, typename dimensions::Decrement >
{
   static_assert( ! MeshConfig::subentityStorage( MeshEntity(), dimensions ) || 
   static_assert( ! MeshConfig::subentityStorage( MeshEntity(), dimensions::value ) || 
                    MeshConfig::entityStorage( MeshEntity::dimensions ), "entities of which subentities are stored must be stored" );
   static_assert( ! MeshConfig::subentityStorage( MeshEntity(), dimensions ) ||
                    MeshConfig::entityStorage( dimensions ), "entities that are stored as subentities must be stored");
   // TODO: fix this 
   //static_assert( ! MeshConfig::subentityOrientationStorage(TTopology(), TDim()) || TConfig::subentityStorage(TTopology(), TDim()), "orientation can be stored only for subentities that are stored");
   static_assert( ! MeshConfig::subentityStorage( MeshEntity(), dimensions::value ) ||
                    MeshConfig::entityStorage( dimensions::value ), "entities that are stored as subentities must be stored");
   static_assert( ! MeshConfig::subentityOrientationStorage( MeshEntity(), dimensions::value ) || 
                    MeshConfig::subentityStorage( MeshEntity(), dimensions::value ), "orientation can be stored only for subentities that are stored");
};

template< typename MeshConfig,
          typename MeshEntity >
class tnlMeshConfigValidatorSubtopologyLayer< MeshConfig, MeshEntity, 0 >
class tnlMeshConfigValidatorSubtopologyLayer< MeshConfig, MeshEntity, tnlDimensionsTag< 0 > >
{
   static_assert( ! MeshConfig::subentityStorage( MeshEntity(), 0 ) ||
                    MeshConfig::entityStorage( 0 ), "entities that are stored as subentities must be stored" );
@@ -47,29 +48,35 @@ class tnlMeshConfigValidatorSubtopologyLayer< MeshConfig, MeshEntity, 0 >

template< typename MeshConfig,
          typename MeshEntity,
          int dimensions >
          typename dimensions >
class tnlMeshConfigValidatorSupertopologyLayer :
 public tnlMeshConfigValidatorSupertopologyLayer< MeshConfig, MeshEntity, dimensions - 1 >
public tnlMeshConfigValidatorSupertopologyLayer< MeshConfig, MeshEntity, typename dimensions::Decrement >
{
   static_assert( ! MeshConfig::superentityStorage( MeshEntity(), 0 ) || MeshConfig::entityStorage( MeshEntity::dimensions ), "entities of which superentities are stored must be stored");
   static_assert( ! MeshConfig::superentityStorage( MeshEntity(), 0 ) || MeshConfig::entityStorage( dimensions ), "entities that are stored as superentities must be stored");
   static_assert( ! MeshConfig::superentityStorage( MeshEntity(), 0 ) ||
                  MeshConfig::entityStorage( MeshEntity::dimensions ), "entities of which superentities are stored must be stored");
   static_assert( ! MeshConfig::superentityStorage( MeshEntity(), 0 ) ||
                  MeshConfig::entityStorage( dimensions::value ), "entities that are stored as superentities must be stored");
};

template< typename MeshConfig,
          typename MeshEntity >
class tnlMeshConfigValidatorSupertopologyLayer< MeshConfig, MeshEntity, MeshEntity::dimensions >
class tnlMeshConfigValidatorSupertopologyLayer< MeshConfig, MeshEntity, tnlDimensionsTag< MeshEntity::dimensions > >
{};
*/


template< typename MeshConfig, int dimensions >
class tnlMeshConfigValidatorLayer :
 public tnlMeshConfigValidatorLayer< MeshConfig, dimensions - 1 >//,
 //public ConfigValidatorSubtopologyLayer< MeshConfig, typename Subtopology<typename TConfig::TCellTopology, TDim::VALUE>::TTopology, typename TDim::Decrement>,
 //public ConfigValidatorSupertopologyLayer< MeshConfig, typename Subtopology<typename TConfig::TCellTopology, TDim::VALUE>::TTopology, Dim<TConfig::TCellTopology::DIMENSION>>
 public tnlMeshConfigValidatorLayer< MeshConfig, dimensions - 1 >,
 public tnlMeshConfigValidatorSubtopologyLayer< MeshConfig, 
                                                typename tnlSubentities< typename MeshConfig::CellTopology, dimensions >::Tag,
                                                tnlDimensionsTag< dimensions - 1 > >,
 public tnlMeshConfigValidatorSupertopologyLayer< MeshConfig, 
                                                  typename tnlSubentities< typename MeshConfig::CellTopology, dimensions >::Tag,
                                                  tnlDimensionsTag< MeshConfig::CellTopology::dimensions > >
{
	//typedef typename Subtopology<typename TConfig::TCellTopology, TDim::VALUE>::TTopology TTopology;
	typedef typename tnlSubentities< typename MeshConfig::CellTopology, dimensions >::Tag Topology;

//	static_assert( ! MeshConfig::entityStorage( dimensions ) || MeshConfig::subentityStorage( TTopology(), Dim<0>()), "subvertices of all stored entities must be stored");
	static_assert( ! MeshConfig::entityStorage( dimensions ) || MeshConfig::subentityStorage( Topology(), 0 ), "subvertices of all stored entities must be stored");
};

template< typename MeshConfig >
@@ -79,8 +86,10 @@ class tnlMeshConfigValidatorLayer< MeshConfig, 0 >

template< typename MeshConfig >
class tnlMeshConfigValidatorLayerCell :
   public tnlMeshConfigValidatorLayer< MeshConfig, MeshConfig::CellTopology::dimensions - 1 >//,
//   public tnlMeshConfigValidatorSubtopologyLayer< MeshConfig, typename MeshConfig::CellType, MeshConfig::CellType::dimensions - 1 >
   public tnlMeshConfigValidatorLayer< MeshConfig, MeshConfig::CellTopology::dimensions - 1 >,
   public tnlMeshConfigValidatorSubtopologyLayer< MeshConfig, 
                                                  typename MeshConfig::CellTopology,
                                                  tnlDimensionsTag< MeshConfig::CellTopology::dimensions - 1 > >
{
	typedef typename MeshConfig::CellTopology    CellTopology;
 	static const int dimensions =  CellTopology::dimensions;
+9 −9
Original line number Diff line number Diff line
@@ -173,13 +173,13 @@ class tnlMeshEntityInitializerLayer< ConfigTag,
   static void initSubentities( EntityType& entity, GlobalIndexType entityIndex, const SeedType& entitySeed,
                                InitializerType& meshInitializer )
   {
      cout << "   Initiating subentities with " << DimensionsTag::value << " dimensions ... " << endl;
      //cout << "   Initiating subentities with " << DimensionsTag::value << " dimensions ... " << endl;
      auto subentitySeeds = SubentitySeedsCreatorType::create( entitySeed );

      IdArrayType& subentityIdsArray = InitializerType::template subentityIdsArray< DimensionsTag >( entity );
      for( LocalIndexType i = 0; i < subentitySeeds.getSize(); i++ )
      {         
         cout << "    Adding subentity " << subentityIdsArray[ i ] << endl;
         //cout << "    Adding subentity " << subentityIdsArray[ i ] << endl;
         subentityIdsArray[ i ] = meshInitializer.findEntitySeedIndex( subentitySeeds[ i ] );         
         meshInitializer.
            template getSuperentityInitializer< DimensionsTag >().
@@ -231,18 +231,18 @@ class tnlMeshEntityInitializerLayer< ConfigTag,
   static void initSubentities( EntityType& entity, GlobalIndexType entityIndex, const SeedType& entitySeed,
                                InitializerType& meshInitializer )
   {
      cout << "   Initiating subentities with " << DimensionsTag::value << " dimensions ... " << endl;
      //cout << "   Initiating subentities with " << DimensionsTag::value << " dimensions ... " << endl;
      auto subentitySeeds = SubentitySeedsCreatorType::create( entitySeed );

      IdArrayType& subentityIdsArray = InitializerType::template subentityIdsArray< DimensionsTag >( entity );
      OrientationArrayType &subentityOrientationsArray = InitializerType::template subentityOrientationsArray< DimensionsTag >( entity );
      for( LocalIndexType i = 0; i < subentitySeeds.getSize(); i++ )
      {         
         cout << "    Adding subentity " << subentityIdsArray[ i ] << endl;
         //cout << "    Adding subentity " << subentityIdsArray[ i ] << endl;
         GlobalIndexType subentityIndex = meshInitializer.findEntitySeedIndex( subentitySeeds[ i ] );
         subentityIdsArray[ i ] = subentityIndex;
         subentityOrientationsArray[ i ] = meshInitializer.template getReferenceOrientation< DimensionsTag >( subentityIndex ).createOrientation( subentitySeeds[ i ] );
         cout << "    Subentity orientation = " << subentityOrientationsArray[ i ].getSubvertexPermutation() << endl;
         //cout << "    Subentity orientation = " << subentityOrientationsArray[ i ].getSubvertexPermutation() << endl;
         meshInitializer.
            template getSuperentityInitializer< DimensionsTag >().
               addSuperentity( EntityDimensionsTag(), subentityIdsArray[ i ], entityIndex );
@@ -294,14 +294,14 @@ class tnlMeshEntityInitializerLayer< ConfigTag,
   static void initSubentities( EntityType& entity, GlobalIndexType entityIndex, const SeedType& entitySeed,
                                InitializerType& meshInitializer )
   {
      cout << "   Initiating subentities with " << DimensionsTag::value << " dimensions ... " << endl;
      //cout << "   Initiating subentities with " << DimensionsTag::value << " dimensions ... " << endl;
      auto subentitySeeds = SubentitySeedsCreatorType::create( entitySeed );

      IdArrayType& subentityIdsArray = InitializerType::template subentityIdsArray< DimensionsTag >( entity );
      OrientationArrayType &subentityOrientationsArray = InitializerType::template subentityOrientationsArray< DimensionsTag >( entity );
      for( LocalIndexType i = 0; i < subentitySeeds.getSize(); i++ )
      {         
         cout << "    Adding subentity " << subentityIdsArray[ i ] << endl;
         //cout << "    Adding subentity " << subentityIdsArray[ i ] << endl;
         subentityIdsArray[ i ] = meshInitializer.findEntitySeedIndex( subentitySeeds[ i ] );         
         subentityOrientationsArray[ i ] = meshInitializer.template getReferenceOrientation< DimensionsTag >( subentitySeeds[ i ] ).createOrientation( subentitySeeds[ i ] );
      }
@@ -347,7 +347,7 @@ class tnlMeshEntityInitializerLayer< ConfigTag,
   static void initSubentities( EntityType& entity, GlobalIndexType entityIndex, const SeedType& entitySeed,
                                InitializerType& meshInitializer )
   {
      cout << "   Initiating subentities with " << DimensionsTag::value << " dimensions ... " << endl;
      //cout << "   Initiating subentities with " << DimensionsTag::value << " dimensions ... " << endl;
      auto subentitySeeds = SubentitySeedsCreatorType::create( entitySeed );

		IdArrayType& subentityIdsArray = InitializerType::template subentityIdsArray< DimensionsTag >( entity );
@@ -398,7 +398,7 @@ class tnlMeshEntityInitializerLayer< ConfigTag,
      static void initSubentities( EntityType& entity, GlobalIndexType entityIndex, const SeedType& entitySeed,
                                   InitializerType& meshInitializer )
      {
         cout << "   Initiating subentities with " << DimensionsTag::value << " dimensions ... " << endl;
         //cout << "   Initiating subentities with " << DimensionsTag::value << " dimensions ... " << endl;
         auto subentitySeeds = SubentitySeedsCreatorType::create( entitySeed );
         IdArrayType& subentityIdsArray = InitializerType::template subentityIdsArray< DimensionsTag >( entity );
         for( LocalIndexType i = 0; i < subentitySeeds.getSize(); i++)
+8 −8
Original line number Diff line number Diff line
@@ -199,11 +199,11 @@ class tnlMeshInitializerLayer< ConfigTag,
      void initEntities( InitializerType &initializer, const PointArrayType &points, const CellSeedArrayType &cellSeeds)
      {
         EntityArrayType &entityArray = initializer.template meshEntitiesArray< DimensionsTag >();
         cout << " Initiating entities with " << DimensionsTag::value << " dimensions ... " << endl;
         //cout << " Initiating entities with " << DimensionsTag::value << " dimensions ... " << endl;
         entityArray.setSize( cellSeeds.getSize() );
         for( GlobalIndexType i = 0; i < entityArray.getSize(); i++ )
         {
            cout << "  Initiating entity " << i << endl;
            //cout << "  Initiating entity " << i << endl;
            EntityInitializerType::initEntity( entityArray[i], i, cellSeeds[i], initializer );
         }
         /***
@@ -349,14 +349,14 @@ class tnlMeshInitializerLayer< ConfigTag,
      void initEntities( InitializerType& initializer, const PointArrayType& points )
      {
         EntityArrayType &entityArray = initializer.template meshEntitiesArray< DimensionsTag >();
         cout << " Initiating entities with " << DimensionsTag::value << " dimensions ... " << endl;
         //cout << " Initiating entities with " << DimensionsTag::value << " dimensions ... " << endl;
         entityArray.setSize( this->seedsIndexedSet.getSize() );
         SeedArrayType seedsArray;
         seedsArray.setSize( this->seedsIndexedSet.getSize() );
         this->seedsIndexedSet.toArray( seedsArray );
         for( GlobalIndexType i = 0; i < this->seedsIndexedSet.getSize(); i++ )
         {
            cout << "  Initiating entity " << i << endl;
            //cout << "  Initiating entity " << i << endl;
            EntityInitializerType::initEntity( entityArray[ i ], i, seedsArray[ i ], initializer );
         }
         this->seedsIndexedSet.reset();
@@ -465,14 +465,14 @@ class tnlMeshInitializerLayer< ConfigTag,
      void initEntities( InitializerType& initializer, const PointArrayType& points )
      {
         EntityArrayType &entityArray = initializer.template meshEntitiesArray< DimensionsTag >();
         cout << " Initiating entities with " << DimensionsTag::value << " dimensions ... " << endl;
         //cout << " Initiating entities with " << DimensionsTag::value << " dimensions ... " << endl;
         entityArray.setSize( this->seedsIndexedSet.getSize() );
         SeedArrayType seedsArray;
         seedsArray.setSize( this->seedsIndexedSet.getSize() );
         this->seedsIndexedSet.toArray( seedsArray );
         for( GlobalIndexType i = 0; i < this->seedsIndexedSet.getSize(); i++ )
         {
            cout << "  Initiating entity " << i << endl;
            //cout << "  Initiating entity " << i << endl;
            EntityInitializerType::initEntity( entityArray[ i ], i, seedsArray[ i ], initializer );
         }
         this->seedsIndexedSet.reset();
@@ -490,14 +490,14 @@ class tnlMeshInitializerLayer< ConfigTag,
      
      void createEntityReferenceOrientations()
      {
         cout << " Creating entity reference orientations with " << DimensionsTag::value << " dimensions ... " << endl;
         //cout << " Creating entity reference orientations with " << DimensionsTag::value << " dimensions ... " << endl;
         SeedArrayType seedsArray;
         seedsArray.setSize( this->seedsIndexedSet.getSize() );
         this->seedsIndexedSet.toArray( seedsArray );
         this->referenceOrientations.setSize( seedsArray.getSize() );
         for( GlobalIndexType i = 0; i < seedsArray.getSize(); i++ )
         {
            cout << "  Creating reference orientation for entity " << i << endl;
            //cout << "  Creating reference orientation for entity " << i << endl;
            this->referenceOrientations[ i ] = ReferenceOrientationType( seedsArray[ i ] );
         }
         BaseType::createEntityReferenceOrientations();
+1 −1
Original line number Diff line number Diff line
@@ -175,7 +175,7 @@ class tnlMeshReaderNetgen
         PointType p;
         for( int d = 0; d < dimensions; d++ )
            iss >> p[ d ];
         cout << "Setting point number " << i << " of " << pointsCount << endl;
         //cout << "Setting point number " << i << " of " << pointsCount << endl;
         meshBuilder.setPoint( i, p );
         if( verbose )
            cout << pointsCount << " vertices expected ... " << i+1 << "/" << pointsCount << "        \r" << flush;
+4 −5
Original line number Diff line number Diff line
@@ -71,7 +71,6 @@ class tnlMeshSuperentityStorageInitializerLayer< ConfigTag,
      using BaseType::initSuperentities;
      void initSuperentities( MeshInitializer& meshInitializer )
      {
         cerr << "####" << endl;
         std::sort( indexPairs.begin(),
                    indexPairs.end(),
                    []( IndexPair pair0, IndexPair pair1 ){ return ( pair0.entityIndex < pair1.entityIndex ); } );
@@ -80,12 +79,12 @@ class tnlMeshSuperentityStorageInitializerLayer< ConfigTag,
         superentityIdsArray.setSize( static_cast< GlobalIndexType >( indexPairs.size() )  );
         GlobalIndexType currentBegin = 0;
         GlobalIndexType lastEntityIndex = 0;
         cout << "There are " << superentityIdsArray.getSize() << " superentities..." << endl;
         //cout << "There are " << superentityIdsArray.getSize() << " superentities..." << endl;
         for( GlobalIndexType i = 0; i < superentityIdsArray.getSize(); i++)
         {
            superentityIdsArray[ i ] = indexPairs[i].superentityIndex;
            
            cout << "Adding superentity " << indexPairs[i].superentityIndex << " to entity " << lastEntityIndex << endl;
            //cout << "Adding superentity " << indexPairs[i].superentityIndex << " to entity " << lastEntityIndex << endl;
            if( indexPairs[ i ].entityIndex != lastEntityIndex )
            {
               meshInitializer.template superentityIdsArray< DimensionsTag >( meshInitializer.template meshEntitiesArray< EntityDimensions >()[ lastEntityIndex ] ).bind( superentityIdsArray, currentBegin, i - currentBegin );
@@ -144,7 +143,7 @@ class tnlMeshSuperentityStorageInitializerLayer< ConfigTag,
   
   public:
   void addSuperentity()                           {} // This method is due to 'using BaseType::...;' in the derived classes.
   void initSuperentities( MeshInitializerType& ) {cerr << "***" << endl;}
   void initSuperentities( MeshInitializerType& ) {}
};

template< typename ConfigTag,
@@ -158,7 +157,7 @@ class tnlMeshSuperentityStorageInitializerLayer< ConfigTag,

   public:
   void addSuperentity()                           {} // This method is due to 'using BaseType::...;' in the derived classes.
   void initSuperentities( MeshInitializerType& ) { cerr << "***" << endl;}
   void initSuperentities( MeshInitializerType& ) {}
};


Loading