Commit 210ed3ea authored by Jakub Klinkovský's avatar Jakub Klinkovský
Browse files

Added Meshes/Readers, generalized MeshTypeResolver

parent aba25699
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@ SET( headers MeshEntityId.h
             MeshEntity_impl.h
             MeshIntegrityChecker.h
             MeshIntegrityCheckerLayer.h
             MeshReaderNetgen.h
             MeshWriterNetgen.h
             MeshWriterVTKLegacy.h
             Mesh_impl.h )
+5 −0
Original line number Diff line number Diff line
SET( headers Netgen.h
             TNL.h
)

INSTALL( FILES ${headers} DESTINATION include/tnl-${tnlVersion}/TNL/Meshes/Readers )
+109 −0
Original line number Diff line number Diff line
/***************************************************************************
                          TNL.h  -  description
                             -------------------
    begin                : Nov 20, 2016
    copyright            : (C) 2016 by Tomas Oberhuber et al.
    email                : tomas.oberhuber@fjfi.cvut.cz
 ***************************************************************************/

/* See Copyright Notice in tnl/Copyright */

#pragma once

#include <TNL/String.h>
#include <TNL/Object.h>
#include <TNL/Containers/List.h>

namespace TNL {
namespace Meshes {
namespace Readers {

class TNL
{
public:
   bool
   readFile( const String& fileName )
   {
      this->reset();

      String meshType;
      if( ! getObjectType( fileName, meshType ) )
      {
         std::cerr << "I am not able to detect the mesh type from the file " << fileName << "." << std::endl;
         return EXIT_FAILURE;
      }

      Containers::List< String > parsedMeshType;
      if( ! parseObjectType( meshType, parsedMeshType ) )
      {
         std::cerr << "Unable to parse the mesh type " << meshType << "." << std::endl;
         return false;
      }

      meshType = parsedMeshType[ 0 ];
      if( meshType == "Meshes::Grid" ) {
         // save parts necessary to determine the mesh type
         meshDimension = std::atoi( parsedMeshType[ 1 ].getString() );
         realType = parsedMeshType[ 2 ];
         indexType = parsedMeshType[ 4 ];
      }
      // TODO: loading of unstructured meshes
      else {
         std::cerr << "The mesh type " << meshType << " is not supported (yet)." << std::endl;
         return false;
      }

      return true;
   }

   template< typename MeshType >
   bool
   initializeMesh( MeshType& mesh )
   {
      return mesh.load( fileName );
   }

   String
   getMeshType() const
   {
      return meshType;
   }

   int
   getMeshDimension() const
   {
      return meshDimension;
   }

   String
   getRealType() const
   {
      return realType;
   }

   String
   getIndexType() const
   {
      return indexType;
   }
 
protected:
   String fileName;
   String meshType;
   int meshDimension = 0;
   String realType;
   String indexType;

   void reset()
   {
      fileName = "";
      meshType = "";
      meshDimension = 0;
      realType = "";
      indexType = "";
   }
};

} // namespace Readers
} // namespace Meshes
} // namespace TNL
+11 −32
Original line number Diff line number Diff line
@@ -11,6 +11,8 @@
#pragma once

#include <TNL/Config/ParameterContainer.h>
#include <TNL/Solvers/BuildConfigTags.h>
#include <TNL/Meshes/Readers/TNL.h>

namespace TNL {
namespace Solvers {   
@@ -51,20 +53,20 @@ class MeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, true >
   protected:

   static bool resolveMeshDimension( const Config::ParameterContainer& parameters,
                                      const Containers::List< String >& parsedMeshType );
                                      Meshes::Readers::TNL& reader );

   // Overload for disabled dimensions
   template< int MeshDimension,
             typename = typename std::enable_if< ! ConfigTagDimension<ConfigTag,MeshDimension>::enabled >::type,
             typename = typename std::enable_if< ! ConfigTagDimensions<ConfigTag,MeshDimension>::enabled >::type,
             typename = void >
   static bool resolveMeshRealType( const Config::ParameterContainer& parameters,
                                    const Containers::List< String >& parsedMeshType );
                                    Meshes::Readers::TNL& reader );

   // Overload for enabled dimensions
   template< int MeshDimension,
             typename = typename std::enable_if< ConfigTagDimension<ConfigTag,MeshDimension>::enabled >::type >
             typename = typename std::enable_if< ConfigTagDimensions<ConfigTag,MeshDimension>::enabled >::type >
   static bool resolveMeshRealType( const Config::ParameterContainer& parameters,
                                    const Containers::List< String >& parsedMeshType );
                                    Meshes::Readers::TNL& reader );

   // Overload for disabled real types
   template< int MeshDimension,
@@ -72,14 +74,14 @@ class MeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, true >
             typename = typename std::enable_if< ! ConfigTagReal<ConfigTag, MeshRealType>::enabled >::type,
             typename = void >
   static bool resolveMeshIndexType( const Config::ParameterContainer& parameters,
                                     const Containers::List< String >& parsedMeshType );
                                     Meshes::Readers::TNL& reader );

   // Overload for enabled real types
   template< int MeshDimension,
             typename MeshRealType,
             typename = typename std::enable_if< ConfigTagReal<ConfigTag, MeshRealType>::enabled >::type >
   static bool resolveMeshIndexType( const Config::ParameterContainer& parameters,
                                     const Containers::List< String >& parsedMeshType );
                                     Meshes::Readers::TNL& reader );

   // Overload for disabled index types
   template< int MeshDimension,
@@ -88,7 +90,7 @@ class MeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, true >
             typename = typename std::enable_if< ! ConfigTagIndex<ConfigTag, MeshIndexType>::enabled >::type,
             typename = void >
   static bool resolveMeshType( const Config::ParameterContainer& parameters,
                                const Containers::List< String >& parsedMeshType );
                                Meshes::Readers::TNL& reader );

   // Overload for enabled index types
   template< int MeshDimension,
@@ -96,7 +98,7 @@ class MeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, true >
             typename MeshIndexType,
             typename = typename std::enable_if< ConfigTagIndex<ConfigTag, MeshIndexType>::enabled >::type >
   static bool resolveMeshType( const Config::ParameterContainer& parameters,
                                const Containers::List< String >& parsedMeshType );
                                Meshes::Readers::TNL& reader );



@@ -104,29 +106,6 @@ class MeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, true >
    friend class MeshTypeResolverDimensionSupportChecker;
};

/*template< int Dimension, bool DimensionSupport, typename MeshTypeResolver >
class MeshTypeResolverDimensionSupportChecker
{
};

template< int Dimension, typename MeshTypeResolver >
class MeshTypeResolverDimensionSupportChecker< Dimension, true, MeshTypeResolver >
{
   public:

   static bool checkDimension( const Config::ParameterContainer& parameters,
                                const Containers::List< String >& parsedMeshType );
};

template< int Dimension, typename MeshTypeResolver >
class MeshTypeResolverDimensionSupportChecker< Dimension, false, MeshTypeResolver >
{
   public:

   static bool checkDimension( const Config::ParameterContainer& parameters,
                                const Containers::List< String >& parsedMeshType );
};*/

} // namespace Solvers
} // namespace TNL

Loading