Loading src/TNL/Meshes/MeshDetails/CMakeLists.txt +2 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ SET( headers MeshEntityId.h MeshIntegrityCheckerLayer.h MeshWriterNetgen.h MeshWriterVTKLegacy.h Mesh_impl.h ) Mesh_impl.h Traverser_impl.h ) INSTALL( FILES ${headers} DESTINATION ${TNL_TARGET_INCLUDE_DIRECTORY}/Meshes/MeshDetails ) src/TNL/Meshes/MeshDetails/Traverser_impl.h 0 → 100644 +84 −0 Original line number Diff line number Diff line /*************************************************************************** Traverser_impl.h - description ------------------- begin : Dec 25, 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/Meshes/Traverser.h> namespace TNL { namespace Meshes { template< typename Mesh, typename MeshEntity, int EntitiesDimension > template< typename UserData, typename EntitiesProcessor > void Traverser< Mesh, MeshEntity, EntitiesDimension >:: processBoundaryEntities( const MeshPointer& meshPointer, SharedPointer< UserData, DeviceType >& userDataPointer ) const { auto entitiesCount = meshPointer->template getBoundaryEntitiesCount< EntitiesDimension >(); #ifdef HAVE_OPENMP #pragma omp parallel for if( Devices::Host::isOMPEnabled() ) #endif for( decltype(entitiesCount) i = 0; i < entitiesCount; i++ ) { const auto entityIndex = meshPointer->template getBoundaryEntityIndex< EntitiesDimension >( i ); auto& entity = meshPointer->template getEntity< EntitiesDimension >( entityIndex ); // TODO: if the Mesh::IdType is void, then we should also pass the entityIndex EntitiesProcessor::processEntity( *meshPointer, *userDataPointer, entity ); } } template< typename Mesh, typename MeshEntity, int EntitiesDimension > template< typename UserData, typename EntitiesProcessor > void Traverser< Mesh, MeshEntity, EntitiesDimension >:: processInteriorEntities( const MeshPointer& meshPointer, SharedPointer< UserData, DeviceType >& userDataPointer ) const { auto entitiesCount = meshPointer->template getInteriorEntitiesCount< EntitiesDimension >(); #ifdef HAVE_OPENMP #pragma omp parallel for if( Devices::Host::isOMPEnabled() ) #endif for( decltype(entitiesCount) i = 0; i < entitiesCount; i++ ) { const auto entityIndex = meshPointer->template getInteriorEntityIndex< EntitiesDimension >( i ); auto& entity = meshPointer->template getEntity< EntitiesDimension >( entityIndex ); // TODO: if the Mesh::IdType is void, then we should also pass the entityIndex EntitiesProcessor::processEntity( *meshPointer, *userDataPointer, entity ); } } template< typename Mesh, typename MeshEntity, int EntitiesDimension > template< typename UserData, typename EntitiesProcessor > void Traverser< Mesh, MeshEntity, EntitiesDimension >:: processAllEntities( const MeshPointer& meshPointer, SharedPointer< UserData, DeviceType >& userDataPointer ) const { auto entitiesCount = meshPointer->template getEntitiesCount< EntitiesDimension >(); #ifdef HAVE_OPENMP #pragma omp parallel for if( Devices::Host::isOMPEnabled() ) #endif for( decltype(entitiesCount) entityIndex = 0; entityIndex < entitiesCount; entityIndex++ ) { auto& entity = meshPointer->template getEntity< EntitiesDimension >( entityIndex ); // TODO: if the Mesh::IdType is void, then we should also pass the entityIndex EntitiesProcessor::processEntity( *meshPointer, *userDataPointer, entity ); } } } // namespace Meshes } // namespace TNL src/TNL/Meshes/Traverser.h +25 −1 Original line number Diff line number Diff line Loading @@ -10,17 +10,41 @@ #pragma once #include <TNL/SharedPointer.h> namespace TNL { namespace Meshes { template< typename Mesh, typename MeshEntity, int EntitiesDimension = MeshEntity::getEntityDimension() > class Traverser{}; class Traverser { public: using MeshType = Mesh; using MeshPointer = SharedPointer< MeshType >; using DeviceType = typename MeshType::DeviceType; template< typename UserData, typename EntitiesProcessor > void processBoundaryEntities( const MeshPointer& meshPointer, SharedPointer< UserData, DeviceType >& userDataPointer ) const; template< typename UserData, typename EntitiesProcessor > void processInteriorEntities( const MeshPointer& meshPointer, SharedPointer< UserData, DeviceType >& userDataPointer ) const; template< typename UserData, typename EntitiesProcessor > void processAllEntities( const MeshPointer& meshPointer, SharedPointer< UserData, DeviceType >& userDataPointer ) const; }; } // namespace Meshes } // namespace TNL #include <TNL/Meshes/MeshDetails/Traverser_impl.h> #include <TNL/Meshes/GridDetails/Traverser_Grid1D.h> #include <TNL/Meshes/GridDetails/Traverser_Grid2D.h> #include <TNL/Meshes/GridDetails/Traverser_Grid3D.h> Loading
src/TNL/Meshes/MeshDetails/CMakeLists.txt +2 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ SET( headers MeshEntityId.h MeshIntegrityCheckerLayer.h MeshWriterNetgen.h MeshWriterVTKLegacy.h Mesh_impl.h ) Mesh_impl.h Traverser_impl.h ) INSTALL( FILES ${headers} DESTINATION ${TNL_TARGET_INCLUDE_DIRECTORY}/Meshes/MeshDetails )
src/TNL/Meshes/MeshDetails/Traverser_impl.h 0 → 100644 +84 −0 Original line number Diff line number Diff line /*************************************************************************** Traverser_impl.h - description ------------------- begin : Dec 25, 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/Meshes/Traverser.h> namespace TNL { namespace Meshes { template< typename Mesh, typename MeshEntity, int EntitiesDimension > template< typename UserData, typename EntitiesProcessor > void Traverser< Mesh, MeshEntity, EntitiesDimension >:: processBoundaryEntities( const MeshPointer& meshPointer, SharedPointer< UserData, DeviceType >& userDataPointer ) const { auto entitiesCount = meshPointer->template getBoundaryEntitiesCount< EntitiesDimension >(); #ifdef HAVE_OPENMP #pragma omp parallel for if( Devices::Host::isOMPEnabled() ) #endif for( decltype(entitiesCount) i = 0; i < entitiesCount; i++ ) { const auto entityIndex = meshPointer->template getBoundaryEntityIndex< EntitiesDimension >( i ); auto& entity = meshPointer->template getEntity< EntitiesDimension >( entityIndex ); // TODO: if the Mesh::IdType is void, then we should also pass the entityIndex EntitiesProcessor::processEntity( *meshPointer, *userDataPointer, entity ); } } template< typename Mesh, typename MeshEntity, int EntitiesDimension > template< typename UserData, typename EntitiesProcessor > void Traverser< Mesh, MeshEntity, EntitiesDimension >:: processInteriorEntities( const MeshPointer& meshPointer, SharedPointer< UserData, DeviceType >& userDataPointer ) const { auto entitiesCount = meshPointer->template getInteriorEntitiesCount< EntitiesDimension >(); #ifdef HAVE_OPENMP #pragma omp parallel for if( Devices::Host::isOMPEnabled() ) #endif for( decltype(entitiesCount) i = 0; i < entitiesCount; i++ ) { const auto entityIndex = meshPointer->template getInteriorEntityIndex< EntitiesDimension >( i ); auto& entity = meshPointer->template getEntity< EntitiesDimension >( entityIndex ); // TODO: if the Mesh::IdType is void, then we should also pass the entityIndex EntitiesProcessor::processEntity( *meshPointer, *userDataPointer, entity ); } } template< typename Mesh, typename MeshEntity, int EntitiesDimension > template< typename UserData, typename EntitiesProcessor > void Traverser< Mesh, MeshEntity, EntitiesDimension >:: processAllEntities( const MeshPointer& meshPointer, SharedPointer< UserData, DeviceType >& userDataPointer ) const { auto entitiesCount = meshPointer->template getEntitiesCount< EntitiesDimension >(); #ifdef HAVE_OPENMP #pragma omp parallel for if( Devices::Host::isOMPEnabled() ) #endif for( decltype(entitiesCount) entityIndex = 0; entityIndex < entitiesCount; entityIndex++ ) { auto& entity = meshPointer->template getEntity< EntitiesDimension >( entityIndex ); // TODO: if the Mesh::IdType is void, then we should also pass the entityIndex EntitiesProcessor::processEntity( *meshPointer, *userDataPointer, entity ); } } } // namespace Meshes } // namespace TNL
src/TNL/Meshes/Traverser.h +25 −1 Original line number Diff line number Diff line Loading @@ -10,17 +10,41 @@ #pragma once #include <TNL/SharedPointer.h> namespace TNL { namespace Meshes { template< typename Mesh, typename MeshEntity, int EntitiesDimension = MeshEntity::getEntityDimension() > class Traverser{}; class Traverser { public: using MeshType = Mesh; using MeshPointer = SharedPointer< MeshType >; using DeviceType = typename MeshType::DeviceType; template< typename UserData, typename EntitiesProcessor > void processBoundaryEntities( const MeshPointer& meshPointer, SharedPointer< UserData, DeviceType >& userDataPointer ) const; template< typename UserData, typename EntitiesProcessor > void processInteriorEntities( const MeshPointer& meshPointer, SharedPointer< UserData, DeviceType >& userDataPointer ) const; template< typename UserData, typename EntitiesProcessor > void processAllEntities( const MeshPointer& meshPointer, SharedPointer< UserData, DeviceType >& userDataPointer ) const; }; } // namespace Meshes } // namespace TNL #include <TNL/Meshes/MeshDetails/Traverser_impl.h> #include <TNL/Meshes/GridDetails/Traverser_Grid1D.h> #include <TNL/Meshes/GridDetails/Traverser_Grid2D.h> #include <TNL/Meshes/GridDetails/Traverser_Grid3D.h>