Commit 644b6fc6 authored by Jakub Klinkovský's avatar Jakub Klinkovský
Browse files

Updated mesh type resolver for CUDA

parent e48bb4e8
Loading
Loading
Loading
Loading
+14 −14
Original line number Diff line number Diff line
@@ -147,32 +147,32 @@ protected:
                                ProblemSetterArgs&&... problemSetterArgs );

   // Overload for disabled mesh types
   template< typename MeshType,
   template< typename MeshConfig,
             typename = typename std::enable_if< ! BuildConfigTags::MeshDeviceTag< ConfigTag, Device >::enabled ||
                                                 ! BuildConfigTags::MeshTag< ConfigTag,
                                                                             Device,
                                                                             typename MeshType::Config::CellTopology,
                                                                             MeshType::Config::worldDimension,
                                                                             typename MeshType::Config::RealType,
                                                                             typename MeshType::Config::GlobalIndexType,
                                                                             typename MeshType::Config::LocalIndexType,
                                                                             typename MeshType::Config::IdType
                                                                             typename MeshConfig::CellTopology,
                                                                             MeshConfig::worldDimension,
                                                                             typename MeshConfig::RealType,
                                                                             typename MeshConfig::GlobalIndexType,
                                                                             typename MeshConfig::LocalIndexType,
                                                                             typename MeshConfig::IdType
                                                                           >::enabled >::type,
             typename = void >
   static bool resolveTerminate( Reader& reader,
                                 ProblemSetterArgs&&... problemSetterArgs );

   // Overload for enabled mesh types
   template< typename MeshType,
   template< typename MeshConfig,
             typename = typename std::enable_if< BuildConfigTags::MeshDeviceTag< ConfigTag, Device >::enabled &&
                                                 BuildConfigTags::MeshTag< ConfigTag,
                                                                             Device,
                                                                             typename MeshType::Config::CellTopology,
                                                                             MeshType::Config::worldDimension,
                                                                             typename MeshType::Config::RealType,
                                                                             typename MeshType::Config::GlobalIndexType,
                                                                             typename MeshType::Config::LocalIndexType,
                                                                             typename MeshType::Config::IdType
                                                                             typename MeshConfig::CellTopology,
                                                                             MeshConfig::worldDimension,
                                                                             typename MeshConfig::RealType,
                                                                             typename MeshConfig::GlobalIndexType,
                                                                             typename MeshConfig::LocalIndexType,
                                                                             typename MeshConfig::IdType
                                                                           >::enabled >::type >
   static bool resolveTerminate( Reader& reader,
                                 ProblemSetterArgs&&... problemSetterArgs );
+5 −5
Original line number Diff line number Diff line
@@ -319,8 +319,7 @@ resolveMeshType( Reader& reader,
                 ProblemSetterArgs&&... problemSetterArgs )
{
   using MeshConfig = typename BuildConfigTags::MeshConfigTemplateTag< ConfigTag >::template MeshConfig< CellTopology, WorldDimension, Real, GlobalIndex, LocalIndex, Id >;
   using MeshType = Meshes::Mesh< MeshConfig >;
   return resolveTerminate< MeshType >( reader, std::forward<ProblemSetterArgs>(problemSetterArgs)... );
   return resolveTerminate< MeshConfig >( reader, std::forward<ProblemSetterArgs>(problemSetterArgs)... );
}

template< typename Reader,
@@ -328,14 +327,14 @@ template< typename Reader,
          typename Device,
          template< typename MeshType > class ProblemSetter,
          typename... ProblemSetterArgs >
   template< typename MeshType,
   template< typename MeshConfig,
             typename, typename >
bool
MeshTypeResolver< Reader, ConfigTag, Device, ProblemSetter, ProblemSetterArgs... >::
resolveTerminate( Reader& reader,
                  ProblemSetterArgs&&... problemSetterArgs )
{
   std::cerr << "The mesh type " << TNL::getType< MeshType >() << " is disabled in the build configuration for device " << Device::getDeviceType() << "." << std::endl;
   std::cerr << "The mesh config type " << TNL::getType< MeshConfig >() << " is disabled in the build configuration for device " << Device::getDeviceType() << "." << std::endl;
   return false;
};

@@ -344,13 +343,14 @@ template< typename Reader,
          typename Device,
          template< typename MeshType > class ProblemSetter,
          typename... ProblemSetterArgs >
   template< typename MeshType,
   template< typename MeshConfig,
             typename >
bool
MeshTypeResolver< Reader, ConfigTag, Device, ProblemSetter, ProblemSetterArgs... >::
resolveTerminate( Reader& reader,
                  ProblemSetterArgs&&... problemSetterArgs )
{
   using MeshType = Meshes::Mesh< MeshConfig, Device >;
   return ProblemSetter< MeshType >::run( std::forward<ProblemSetterArgs>(problemSetterArgs)... );
};

+14 −3
Original line number Diff line number Diff line
@@ -111,9 +111,9 @@ bool resolveMeshType( const String& fileName_,
}

// TODO: reorganize
template< typename Mesh >
template< typename MeshConfig, typename Device >
bool
loadMesh( const String& fileName_, Mesh& mesh )
loadMesh( const String& fileName_, Mesh< MeshConfig, Device >& mesh )
{
   std::cout << "Loading mesh from file " << fileName_ << " ..." << std::endl;
   std::string fileName( fileName_.getString() );
@@ -139,12 +139,23 @@ loadMesh( const String& fileName_, Mesh& mesh )
      std::cerr << "I am not able to load the mesh from the file " << fileName_ << ". "
                   "Perhaps the mesh stored in the file is not supported by the mesh "
                   "passed to the loadMesh function? The mesh type is "
                << Mesh::getType() << std::endl;
                << mesh.getType() << std::endl;
      return false;
   }
   return true;
}

template< typename MeshConfig >
bool
loadMesh( const String& fileName, Mesh< MeshConfig, Devices::Cuda >& mesh )
{
   Mesh< MeshConfig, Devices::Host > hostMesh;
   if( ! loadMesh( fileName, hostMesh ) )
      return false;
   mesh = hostMesh;
   return true;
}

template< int Dimension, typename Real, typename Device, typename Index >
bool
loadMesh( const String& fileName, Grid< Dimension, Real, Device, Index >& mesh )