diff --git a/install b/install index a48d882e79ee8e2e0ff575cc2676042c18b71065..e46c01d9b3ef300b40a58c4afea6a73e4321aba2 100755 --- a/install +++ b/install @@ -109,7 +109,7 @@ fi PYTHON_TEST="`python src/Tools/python-path-test.py 2> /dev/null`" -echo "xxxxx ${PYTHON_TEST} xxxxx\n" +#echo "xxxxx ${PYTHON_TEST} xxxxx\n" if test PYTHON_TEST != "xOK"; then source ${BUILD_PREFIX}/python-version diff --git a/src/TNL/Meshes/GridDetails/GridTraverser.h b/src/TNL/Meshes/GridDetails/GridTraverser.h index 21bda6877d80510cc703a373b233d0d8bc6bbdc2..4696c819076c9b4e1e1b30b295e82a33f956d16c 100644 --- a/src/TNL/Meshes/GridDetails/GridTraverser.h +++ b/src/TNL/Meshes/GridDetails/GridTraverser.h @@ -46,8 +46,8 @@ class GridTraverser< Meshes::Grid< 1, Real, Devices::Host, Index > > static void processEntities( const GridPointer& gridPointer, - const CoordinatesType& begin, - const CoordinatesType& end, + const CoordinatesType begin, + const CoordinatesType end, const CoordinatesType& entityOrientation, const CoordinatesType& entityBasis, UserData& userData ); diff --git a/src/TNL/Meshes/GridDetails/GridTraverser_impl.h b/src/TNL/Meshes/GridDetails/GridTraverser_impl.h index 5cf076ee58dbb4b1180e1e7c464598806f34279d..5de8f7f231a95e0e8ffe5502e12d33e863b19236 100644 --- a/src/TNL/Meshes/GridDetails/GridTraverser_impl.h +++ b/src/TNL/Meshes/GridDetails/GridTraverser_impl.h @@ -27,19 +27,18 @@ void GridTraverser< Meshes::Grid< 1, Real, Devices::Host, Index > >:: processEntities( const GridPointer& gridPointer, - const CoordinatesType& begin, - const CoordinatesType& end, + const CoordinatesType begin, + const CoordinatesType end, const CoordinatesType& entityOrientation, const CoordinatesType& entityBasis, UserData& userData ) -{ - - - GridEntity entity( *gridPointer ); - entity.setOrientation( entityOrientation ); - entity.setBasis( entityBasis ); +{ if( processOnlyBoundaryEntities ) { + GridEntity entity( *gridPointer ); + entity.setOrientation( entityOrientation ); + entity.setBasis( entityBasis ); + entity.getCoordinates() = begin; entity.refresh(); EntitiesProcessor::processEntity( entity.getMesh(), userData, entity ); @@ -49,13 +48,28 @@ processEntities( } else { - for( entity.getCoordinates().x() = begin.x(); + //TODO: This does not work with gcc-5.4 and older, should work at gcc 6.x + /*for( entity.getCoordinates().x() = begin.x(); entity.getCoordinates().x() <= end.x(); entity.getCoordinates().x() ++ ) { entity.refresh(); EntitiesProcessor::processEntity( entity.getMesh(), userData, entity ); + }*/ +#pragma omp parallel firstprivate( begin, end ) if( Devices::Host::isOMPEnabled() ) + { + GridEntity entity( *gridPointer ); + entity.setOrientation( entityOrientation ); + entity.setBasis( entityBasis ); +#pragma omp for + for( IndexType x = begin.x(); x<= end.x(); x ++ ) + { + entity.getCoordinates().x() = x; + entity.refresh(); + EntitiesProcessor::processEntity( entity.getMesh(), userData, entity ); + } } + } } @@ -221,12 +235,12 @@ processEntities( const CoordinatesType& entityBasis, UserData& userData ) { - GridEntity entity( *gridPointer ); - entity.setOrientation( entityOrientation ); - entity.setBasis( entityBasis ); - if( processOnlyBoundaryEntities ) { + GridEntity entity( *gridPointer ); + entity.setOrientation( entityOrientation ); + entity.setBasis( entityBasis ); + if( YOrthogonalBoundary ) for( entity.getCoordinates().x() = begin.x(); entity.getCoordinates().x() <= end.x(); @@ -254,7 +268,7 @@ processEntities( } else { - //TODO: This does not work with gcc-5.4 and older + //TODO: This does not work with gcc-5.4 and older, should work at gcc 6.x /*#pragma omp parallel for firstprivate( entity, begin, end ) if( Devices::Host::isOMPEnabled() ) for( entity.getCoordinates().y() = begin.y(); entity.getCoordinates().y() <= end.y(); @@ -266,15 +280,21 @@ processEntities( entity.refresh(); EntitiesProcessor::processEntity( entity.getMesh(), userData, entity ); }*/ -#pragma omp parallel for firstprivate( entity, begin, end ) if( Devices::Host::isOMPEnabled() ) - for( IndexType y = begin.y(); y <= end.y(); y ++ ) - for( IndexType x = begin.x(); x<= end.x(); x ++ ) - { - entity.getCoordinates().x() = x; - entity.getCoordinates().y() = y; - entity.refresh(); - EntitiesProcessor::processEntity( entity.getMesh(), userData, entity ); - } +#pragma omp parallel firstprivate( begin, end ) if( Devices::Host::isOMPEnabled() ) + { + GridEntity entity( *gridPointer ); + entity.setOrientation( entityOrientation ); + entity.setBasis( entityBasis ); +#pragma omp for + for( IndexType y = begin.y(); y <= end.y(); y ++ ) + for( IndexType x = begin.x(); x<= end.x(); x ++ ) + { + entity.getCoordinates().x() = x; + entity.getCoordinates().y() = y; + entity.refresh(); + EntitiesProcessor::processEntity( entity.getMesh(), userData, entity ); + } + } } } @@ -406,12 +426,12 @@ processEntities( const CoordinatesType& entityBasis, UserData& userData ) { - GridEntity entity( *gridPointer ); - entity.setOrientation( entityOrientation ); - entity.setBasis( entityBasis ); - if( processOnlyBoundaryEntities ) { + GridEntity entity( *gridPointer ); + entity.setOrientation( entityOrientation ); + entity.setBasis( entityBasis ); + if( ZOrthogonalBoundary ) for( entity.getCoordinates().y() = begin.y(); entity.getCoordinates().y() <= end.y(); @@ -460,7 +480,7 @@ processEntities( } else { - // TODO: this does not work with gcc-5.4 and older + // TODO: this does not work with gcc-5.4 and older, should work at gcc 6.x /*#pragma omp parallel for firstprivate( entity, begin, end ) if( Devices::Host::isOMPEnabled() ) for( entity.getCoordinates().z() = begin.z(); entity.getCoordinates().z() <= end.z(); @@ -475,18 +495,23 @@ processEntities( entity.refresh(); EntitiesProcessor::processEntity( entity.getMesh(), userData, entity ); }*/ -#pragma omp parallel for firstprivate( entity, begin, end ) if( Devices::Host::isOMPEnabled() ) - for( IndexType z = begin.y(); z <= end.y(); z ++ ) - for( IndexType y = begin.y(); y <= end.y(); y ++ ) - for( IndexType x = begin.x(); x<= end.x(); x ++ ) - { - entity.getCoordinates().x() = x; - entity.getCoordinates().y() = y; - entity.getCoordinates().z() = z; - entity.refresh(); - EntitiesProcessor::processEntity( entity.getMesh(), userData, entity ); - } - +#pragma omp parallel firstprivate( begin, end ) if( Devices::Host::isOMPEnabled() ) + { + GridEntity entity( *gridPointer ); + entity.setOrientation( entityOrientation ); + entity.setBasis( entityBasis ); +#pragma omp for + for( IndexType z = begin.y(); z <= end.y(); z ++ ) + for( IndexType y = begin.y(); y <= end.y(); y ++ ) + for( IndexType x = begin.x(); x<= end.x(); x ++ ) + { + entity.getCoordinates().x() = x; + entity.getCoordinates().y() = y; + entity.getCoordinates().z() = z; + entity.refresh(); + EntitiesProcessor::processEntity( entity.getMesh(), userData, entity ); + } + } } } diff --git a/src/TNL/Meshes/GridEntity.h b/src/TNL/Meshes/GridEntity.h index 51617553dd80443b6ea44bffad1ac1bf0d2df543..0f806f000c6a32e40b187038dc874ba0c27ef3e4 100644 --- a/src/TNL/Meshes/GridEntity.h +++ b/src/TNL/Meshes/GridEntity.h @@ -203,9 +203,9 @@ class GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, C __cuda_callable__ inline GridEntity( const GridType& grid, - const CoordinatesType& coordinates, - const EntityOrientationType& orientation = EntityOrientationType( 0 ), - const EntityBasisType& basis = EntityBasisType( 1 ) ); + const CoordinatesType& coordinates, + const EntityOrientationType& orientation = EntityOrientationType( 0 ), + const EntityBasisType& basis = EntityBasisType( 1 ) ); __cuda_callable__ inline const CoordinatesType& getCoordinates() const;