Loading src/Python/pytnl/tnl/Mesh.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ void export_Meshes( py::module & m ) using Reader = TNL::Meshes::Readers::VTKReader; py::class_< Reader >( m, "VTKReader" ) .def(py::init<>()) .def(py::init<std::string>()) .def("readMesh", &Reader::template readMesh< MeshOfEdges >) .def("readMesh", &Reader::template readMesh< MeshOfTriangles >) .def("readMesh", &Reader::template readMesh< MeshOfTetrahedrons >) Loading src/TNL/Meshes/DistributedMeshes/loadDistributedMesh.h 0 → 100644 +106 −0 Original line number Diff line number Diff line /*************************************************************************** loadDistributedMesh.h - description ------------------- begin : Apr 9, 2020 copyright : (C) 2020 by Tomas Oberhuber et al. email : tomas.oberhuber@fjfi.cvut.cz ***************************************************************************/ /* See Copyright Notice in tnl/Copyright */ #pragma once #include <TNL/Meshes/Mesh.h> #include <TNL/Meshes/DistributedMeshes/DistributedMesh.h> namespace TNL { namespace Meshes { template< typename CommunicatorType, typename MeshConfig, typename Device > bool loadDistributedMesh( const String& fileName, Mesh< MeshConfig, Device >& mesh, DistributedMeshes::DistributedMesh< Mesh< MeshConfig, Device > >& distributedMesh ) { std::cerr << "Distributed Mesh is not supported yet, only Distributed Grid is supported."; return false; } template< typename Problem, typename MeshConfig, typename Device > bool decomposeMesh( const Config::ParameterContainer& parameters, const String& prefix, Mesh< MeshConfig, Device >& mesh, DistributedMeshes::DistributedMesh< Mesh< MeshConfig, Device > >& distributedMesh, Problem& problem ) { std::cerr << "Distributed Mesh is not supported yet, only Distributed Grid is supported."; return false; } // overloads for grids template< typename CommunicatorType, int Dimension, typename Real, typename Device, typename Index > bool loadDistributedMesh( const String& fileName, Grid< Dimension, Real, Device, Index >& mesh, DistributedMeshes::DistributedMesh< Grid< Dimension, Real, Device, Index > > &distributedMesh ) { std::cout << "Loading a global mesh from the file " << fileName << "..."; Grid< Dimension, Real, Device, Index > globalGrid; try { globalGrid.load( fileName ); } catch(...) { std::cerr << std::endl; std::cerr << "I am not able to load the global mesh from the file " << fileName << "." << std::endl; return false; } std::cout << " [ OK ] " << std::endl; typename Meshes::DistributedMeshes::DistributedMesh<Grid< Dimension, Real, Device, Index >>::SubdomainOverlapsType overlap; distributedMesh.template setGlobalGrid< CommunicatorType >( globalGrid ); distributedMesh.setupGrid(mesh); return true; } template< typename Problem, int Dimension, typename Real, typename Device, typename Index > bool decomposeMesh( const Config::ParameterContainer& parameters, const String& prefix, Grid< Dimension, Real, Device, Index >& mesh, DistributedMeshes::DistributedMesh< Grid< Dimension, Real, Device, Index > > &distributedMesh, Problem& problem ) { using GridType = Grid< Dimension, Real, Device, Index >; using DistributedGridType = DistributedMeshes::DistributedMesh< GridType >; using SubdomainOverlapsType = typename DistributedGridType::SubdomainOverlapsType; using CommunicatorType = typename Problem::CommunicatorType; SubdomainOverlapsType lower( 0 ), upper( 0 ); distributedMesh.setOverlaps( lower, upper ); distributedMesh.setupGrid( mesh ); problem.getSubdomainOverlaps( parameters, prefix, mesh, lower, upper ); distributedMesh.setOverlaps( lower, upper ); distributedMesh.setupGrid( mesh ); return true; } } // namespace Meshes } // namespace TNL src/TNL/Meshes/Readers/NetgenReader.h +10 −4 Original line number Diff line number Diff line Loading @@ -30,10 +30,15 @@ namespace Readers { class NetgenReader { public: bool detectMesh( const String& fileName ) NetgenReader() = delete; NetgenReader( const String& fileName ) : fileName( fileName ) {} bool detectMesh() { this->reset(); this->fileName = fileName; std::ifstream inputFile( fileName.getString() ); if( ! inputFile ) Loading Loading @@ -146,13 +151,15 @@ public: } template< typename MeshType > static bool readMesh( const String& fileName, MeshType& mesh ) bool readMesh( MeshType& mesh ) { typedef typename MeshType::PointType PointType; typedef MeshBuilder< MeshType > MeshBuilder; const int dimension = PointType::getSize(); // TODO: check that detectMesh has been called // TODO: reuse inputFile from the detectMesh method std::ifstream inputFile( fileName.getString() ); if( ! inputFile ) { Loading Loading @@ -285,7 +292,6 @@ protected: void reset() { fileName = ""; meshDimension = worldDimension = 0; cellShape = VTK::EntityShape::Vertex; } Loading src/TNL/Meshes/Readers/TNLReader.h +9 −5 Original line number Diff line number Diff line Loading @@ -21,11 +21,16 @@ namespace Readers { class TNLReader { public: TNLReader() = delete; TNLReader( const String& fileName ) : fileName( fileName ) {} bool detectMesh( const String& fileName ) detectMesh() { this->reset(); this->fileName = fileName; const String objectType = getObjectType( fileName ); const std::vector< String > parsedMeshType = parseObjectType( objectType ); Loading Loading @@ -94,8 +99,8 @@ public: } template< typename MeshType > static bool readMesh( const String& fileName, MeshType& mesh ) bool readMesh( MeshType& mesh ) { mesh.load( fileName ); return true; Loading Loading @@ -155,7 +160,6 @@ protected: void reset() { fileName = ""; meshType = ""; meshDimension = worldDimension = 0; cellShape = VTK::EntityShape::Vertex; Loading src/TNL/Meshes/Readers/VTKReader.h +10 −4 Original line number Diff line number Diff line Loading @@ -26,10 +26,15 @@ namespace Readers { class VTKReader { public: bool detectMesh( const String& fileName ) VTKReader() = delete; VTKReader( const String& fileName ) : fileName( fileName ) {} bool detectMesh() { this->reset(); this->fileName = fileName; std::ifstream inputFile( fileName.getString() ); if( ! inputFile ) { Loading Loading @@ -149,7 +154,7 @@ public: } template< typename MeshType > bool readMesh( const String& fileName, MeshType& mesh ) bool readMesh( MeshType& mesh ) { using MeshBuilder = MeshBuilder< MeshType >; using IndexType = typename MeshType::GlobalIndexType; Loading @@ -159,6 +164,8 @@ public: const VTK::EntityShape cellType = VTK::TopologyToEntityShape< typename MeshType::template EntityTraits< MeshType::getMeshDimension() >::EntityTopology >::shape; MeshBuilder meshBuilder; // TODO: check that detectMesh has been called // TODO: reuse inputFile from the detectMesh method std::ifstream inputFile( fileName.getString() ); if( ! inputFile ) { std::cerr << "Failed to open the file " << fileName << "." << std::endl; Loading Loading @@ -348,7 +355,6 @@ protected: void reset() { fileName = ""; meshDimension = worldDimension = 0; cellShape = VTK::EntityShape::Vertex; realType = ""; Loading Loading
src/Python/pytnl/tnl/Mesh.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ void export_Meshes( py::module & m ) using Reader = TNL::Meshes::Readers::VTKReader; py::class_< Reader >( m, "VTKReader" ) .def(py::init<>()) .def(py::init<std::string>()) .def("readMesh", &Reader::template readMesh< MeshOfEdges >) .def("readMesh", &Reader::template readMesh< MeshOfTriangles >) .def("readMesh", &Reader::template readMesh< MeshOfTetrahedrons >) Loading
src/TNL/Meshes/DistributedMeshes/loadDistributedMesh.h 0 → 100644 +106 −0 Original line number Diff line number Diff line /*************************************************************************** loadDistributedMesh.h - description ------------------- begin : Apr 9, 2020 copyright : (C) 2020 by Tomas Oberhuber et al. email : tomas.oberhuber@fjfi.cvut.cz ***************************************************************************/ /* See Copyright Notice in tnl/Copyright */ #pragma once #include <TNL/Meshes/Mesh.h> #include <TNL/Meshes/DistributedMeshes/DistributedMesh.h> namespace TNL { namespace Meshes { template< typename CommunicatorType, typename MeshConfig, typename Device > bool loadDistributedMesh( const String& fileName, Mesh< MeshConfig, Device >& mesh, DistributedMeshes::DistributedMesh< Mesh< MeshConfig, Device > >& distributedMesh ) { std::cerr << "Distributed Mesh is not supported yet, only Distributed Grid is supported."; return false; } template< typename Problem, typename MeshConfig, typename Device > bool decomposeMesh( const Config::ParameterContainer& parameters, const String& prefix, Mesh< MeshConfig, Device >& mesh, DistributedMeshes::DistributedMesh< Mesh< MeshConfig, Device > >& distributedMesh, Problem& problem ) { std::cerr << "Distributed Mesh is not supported yet, only Distributed Grid is supported."; return false; } // overloads for grids template< typename CommunicatorType, int Dimension, typename Real, typename Device, typename Index > bool loadDistributedMesh( const String& fileName, Grid< Dimension, Real, Device, Index >& mesh, DistributedMeshes::DistributedMesh< Grid< Dimension, Real, Device, Index > > &distributedMesh ) { std::cout << "Loading a global mesh from the file " << fileName << "..."; Grid< Dimension, Real, Device, Index > globalGrid; try { globalGrid.load( fileName ); } catch(...) { std::cerr << std::endl; std::cerr << "I am not able to load the global mesh from the file " << fileName << "." << std::endl; return false; } std::cout << " [ OK ] " << std::endl; typename Meshes::DistributedMeshes::DistributedMesh<Grid< Dimension, Real, Device, Index >>::SubdomainOverlapsType overlap; distributedMesh.template setGlobalGrid< CommunicatorType >( globalGrid ); distributedMesh.setupGrid(mesh); return true; } template< typename Problem, int Dimension, typename Real, typename Device, typename Index > bool decomposeMesh( const Config::ParameterContainer& parameters, const String& prefix, Grid< Dimension, Real, Device, Index >& mesh, DistributedMeshes::DistributedMesh< Grid< Dimension, Real, Device, Index > > &distributedMesh, Problem& problem ) { using GridType = Grid< Dimension, Real, Device, Index >; using DistributedGridType = DistributedMeshes::DistributedMesh< GridType >; using SubdomainOverlapsType = typename DistributedGridType::SubdomainOverlapsType; using CommunicatorType = typename Problem::CommunicatorType; SubdomainOverlapsType lower( 0 ), upper( 0 ); distributedMesh.setOverlaps( lower, upper ); distributedMesh.setupGrid( mesh ); problem.getSubdomainOverlaps( parameters, prefix, mesh, lower, upper ); distributedMesh.setOverlaps( lower, upper ); distributedMesh.setupGrid( mesh ); return true; } } // namespace Meshes } // namespace TNL
src/TNL/Meshes/Readers/NetgenReader.h +10 −4 Original line number Diff line number Diff line Loading @@ -30,10 +30,15 @@ namespace Readers { class NetgenReader { public: bool detectMesh( const String& fileName ) NetgenReader() = delete; NetgenReader( const String& fileName ) : fileName( fileName ) {} bool detectMesh() { this->reset(); this->fileName = fileName; std::ifstream inputFile( fileName.getString() ); if( ! inputFile ) Loading Loading @@ -146,13 +151,15 @@ public: } template< typename MeshType > static bool readMesh( const String& fileName, MeshType& mesh ) bool readMesh( MeshType& mesh ) { typedef typename MeshType::PointType PointType; typedef MeshBuilder< MeshType > MeshBuilder; const int dimension = PointType::getSize(); // TODO: check that detectMesh has been called // TODO: reuse inputFile from the detectMesh method std::ifstream inputFile( fileName.getString() ); if( ! inputFile ) { Loading Loading @@ -285,7 +292,6 @@ protected: void reset() { fileName = ""; meshDimension = worldDimension = 0; cellShape = VTK::EntityShape::Vertex; } Loading
src/TNL/Meshes/Readers/TNLReader.h +9 −5 Original line number Diff line number Diff line Loading @@ -21,11 +21,16 @@ namespace Readers { class TNLReader { public: TNLReader() = delete; TNLReader( const String& fileName ) : fileName( fileName ) {} bool detectMesh( const String& fileName ) detectMesh() { this->reset(); this->fileName = fileName; const String objectType = getObjectType( fileName ); const std::vector< String > parsedMeshType = parseObjectType( objectType ); Loading Loading @@ -94,8 +99,8 @@ public: } template< typename MeshType > static bool readMesh( const String& fileName, MeshType& mesh ) bool readMesh( MeshType& mesh ) { mesh.load( fileName ); return true; Loading Loading @@ -155,7 +160,6 @@ protected: void reset() { fileName = ""; meshType = ""; meshDimension = worldDimension = 0; cellShape = VTK::EntityShape::Vertex; Loading
src/TNL/Meshes/Readers/VTKReader.h +10 −4 Original line number Diff line number Diff line Loading @@ -26,10 +26,15 @@ namespace Readers { class VTKReader { public: bool detectMesh( const String& fileName ) VTKReader() = delete; VTKReader( const String& fileName ) : fileName( fileName ) {} bool detectMesh() { this->reset(); this->fileName = fileName; std::ifstream inputFile( fileName.getString() ); if( ! inputFile ) { Loading Loading @@ -149,7 +154,7 @@ public: } template< typename MeshType > bool readMesh( const String& fileName, MeshType& mesh ) bool readMesh( MeshType& mesh ) { using MeshBuilder = MeshBuilder< MeshType >; using IndexType = typename MeshType::GlobalIndexType; Loading @@ -159,6 +164,8 @@ public: const VTK::EntityShape cellType = VTK::TopologyToEntityShape< typename MeshType::template EntityTraits< MeshType::getMeshDimension() >::EntityTopology >::shape; MeshBuilder meshBuilder; // TODO: check that detectMesh has been called // TODO: reuse inputFile from the detectMesh method std::ifstream inputFile( fileName.getString() ); if( ! inputFile ) { std::cerr << "Failed to open the file " << fileName << "." << std::endl; Loading Loading @@ -348,7 +355,6 @@ protected: void reset() { fileName = ""; meshDimension = worldDimension = 0; cellShape = VTK::EntityShape::Vertex; realType = ""; Loading