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

Refactoring the mesh.

parent 4967324e
Loading
Loading
Loading
Loading
+24 −52
Original line number Diff line number Diff line
@@ -33,60 +33,39 @@ class tnlMesh : public tnlObject,
   public:
   typedef MeshConfig                                        Config;
   typedef tnlMeshTraits< MeshConfig >                       MeshTraits;
   typedef typename tnlMeshTraits< MeshConfig >::CellType    CellType;
   typedef typename tnlMeshTraits< MeshConfig >::PointType   PointType;
   static const int dimensions = MeshTraits::meshDimensions;
   template< int Dimensions > using EntityTraits = typename MeshTraits::template EntityTraits< Dimensions >;

   static tnlString getType();
   
   virtual tnlString getTypeVirtual() const
   {
      return this->getType();
   }
   virtual tnlString getTypeVirtual() const;
   
   using tnlObject::save;
   using tnlObject::load;
   static constexpr int getDimensions();

   bool save( tnlFile& file ) const
   {
      if( ! tnlObject::save( file ) ||
          ! entitiesStorage.save( file ) )
      {
         cerr << "Mesh saving failed." << endl;
         return false;
      }
      return true;
   }
   template< int Dimensions >
   bool entitiesAvalable() const;

   bool load( tnlFile& file )
   {
      if( ! tnlObject::load( file ) ||
          ! entitiesStorage.load( file ) )
      {
         cerr << "Mesh loading failed." << endl;
         return false;
      }
      return true;
   }
   // TODO: jeden GlobalIndexType a LocalIndexType pro vsechny entity
   
   static const int getDimensions();
   typename EntityTraits< dimensions >::GlobalIndexType getNumberOfCells() const;

   template< int Dimensions >
   bool entitiesAvalable() const
   {
      return MeshTraits::template EntityTraits< Dimensions >::available;
   }
   typename EntityTraits< Dimensions >::GlobalIndexType getNumberOfEntities() const;

   CellType& getCell( const typename MeshTraits::template EntityTraits< dimensions >::GlobalIndexType entityIndex );

   const CellType& getCell( const typename MeshTraits::template EntityTraits< dimensions >::GlobalIndexType entityIndex ) const;

   

   bool save( tnlFile& file ) const;

   bool load( tnlFile& file );   
   

   template< int Dimensions >
   typename MeshTraits::template EntityTraits< Dimensions >::GlobalIndexType getNumberOfEntities() const
   {
      return entitiesStorage.getNumberOfEntities( tnlDimensionsTag< Dimensions >() );
   }

   typename MeshTraits::template EntityTraits< dimensions >::GlobalIndexType getNumberOfCells() const
   {
      return entitiesStorage.getNumberOfEntities( tnlDimensionsTag< dimensions >() );
   }

   template< int Dimensions >
      typename MeshTraits::template EntityTraits< Dimensions >::EntityType&
@@ -116,17 +95,6 @@ class tnlMesh : public tnlObject,
      return entitiesStorage.getEntities( tnlDimensionsTag< Dimensions >() );
   }

   typename MeshTraits::template EntityTraits< dimensions >::EntityType&
      getCell( const typename MeshTraits::template EntityTraits< dimensions >::GlobalIndexType entityIndex )
   {
      return entitiesStorage.getEntity( tnlDimensionsTag< dimensions >(), entityIndex );
   }

   const typename MeshTraits::template EntityTraits< dimensions >::EntityType&
      getCell( const typename MeshTraits::template EntityTraits< dimensions >::GlobalIndexType entityIndex ) const
   {
      return entitiesStorage.getEntity( tnlDimensionsTag< dimensions >(), entityIndex );
   }

   void print( ostream& str ) const
   {
@@ -161,6 +129,10 @@ class tnlMesh : public tnlObject,
      return meshInitializer.createMesh( points, cellSeeds, *this );
   }
   
   
   using tnlObject::save;
   using tnlObject::load;
   
   protected:
            
      tnlMeshStorageLayers< MeshConfig > entitiesStorage;
+89 −0
Original line number Diff line number Diff line
@@ -30,6 +30,95 @@ getType()
   return tnlString( "tnlMesh< ") + MeshConfig::getType() + " >";
}

template< typename MeshConfig >
tnlString
tnlMesh< MeshConfig >::
getTypeVirtual() const
{
   return this->getType();
}

template< typename MeshConfig >   
constexpr int
tnlMesh< MeshConfig >::
getDimensions()
{
   return dimensions;
}

template< typename MeshConfig >   
   template< int Dimensions >
bool
tnlMesh< MeshConfig >::
entitiesAvalable() const
{
   return MeshTraits::template EntityTraits< Dimensions >::available;
}

template< typename MeshConfig >   
   template< int Dimensions >
typename tnlMesh< MeshConfig >::template EntityTraits< Dimensions >::GlobalIndexType 
tnlMesh< MeshConfig >::
getNumberOfEntities() const
{
   return entitiesStorage.getNumberOfEntities( tnlDimensionsTag< Dimensions >() );
}

template< typename MeshConfig >   
typename tnlMesh< MeshConfig >::template EntityTraits< tnlMesh< MeshConfig >::dimensions >::GlobalIndexType
tnlMesh< MeshConfig >::
getNumberOfCells() const
{
   return entitiesStorage.getNumberOfEntities( tnlDimensionsTag< dimensions >() );
}

template< typename MeshConfig >   
typename tnlMesh< MeshConfig >::CellType&
tnlMesh< MeshConfig >::
getCell( const typename MeshTraits::template EntityTraits< dimensions >::GlobalIndexType cellIndex )
{
   return entitiesStorage.getEntity( tnlDimensionsTag< dimensions >(), cellIndex );
}

template< typename MeshConfig >   
const typename tnlMesh< MeshConfig >::CellType&
tnlMesh< MeshConfig >::
getCell( const typename MeshTraits::template EntityTraits< dimensions >::GlobalIndexType cellIndex ) const
{
   return entitiesStorage.getEntity( tnlDimensionsTag< dimensions >(), cellIndex );
}


   
   
template< typename MeshConfig >
bool
tnlMesh< MeshConfig >::
save( tnlFile& file ) const
{
   if( ! tnlObject::save( file ) ||
       ! entitiesStorage.save( file ) )
   {
      cerr << "Mesh saving failed." << endl;
      return false;
   }
   return true;
}

template< typename MeshConfig >
bool
tnlMesh< MeshConfig >::
load( tnlFile& file )
{
   if( ! tnlObject::load( file ) ||
       ! entitiesStorage.load( file ) )
   {
      cerr << "Mesh loading failed." << endl;
      return false;
   }
   return true;
}


#endif	/* TNLMESH_IMPL_H */