From 644b6fc6af696692918fa649b91ada0dc21fc01a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Klinkovsk=C3=BD?= <klinkjak@fjfi.cvut.cz> Date: Fri, 17 Feb 2017 22:33:31 +0100 Subject: [PATCH] Updated mesh type resolver for CUDA --- .../Meshes/TypeResolver/MeshTypeResolver.h | 28 +++++++++---------- .../TypeResolver/MeshTypeResolver_impl.h | 10 +++---- .../Meshes/TypeResolver/TypeResolver_impl.h | 17 +++++++++-- 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/src/TNL/Meshes/TypeResolver/MeshTypeResolver.h b/src/TNL/Meshes/TypeResolver/MeshTypeResolver.h index 3a13344dc7..cc23337c39 100644 --- a/src/TNL/Meshes/TypeResolver/MeshTypeResolver.h +++ b/src/TNL/Meshes/TypeResolver/MeshTypeResolver.h @@ -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 ); diff --git a/src/TNL/Meshes/TypeResolver/MeshTypeResolver_impl.h b/src/TNL/Meshes/TypeResolver/MeshTypeResolver_impl.h index 24a8514b03..c58c73cbf8 100644 --- a/src/TNL/Meshes/TypeResolver/MeshTypeResolver_impl.h +++ b/src/TNL/Meshes/TypeResolver/MeshTypeResolver_impl.h @@ -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)... ); }; diff --git a/src/TNL/Meshes/TypeResolver/TypeResolver_impl.h b/src/TNL/Meshes/TypeResolver/TypeResolver_impl.h index f5576a7cee..d7f3e55768 100644 --- a/src/TNL/Meshes/TypeResolver/TypeResolver_impl.h +++ b/src/TNL/Meshes/TypeResolver/TypeResolver_impl.h @@ -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 ) -- GitLab