From 41c2a8b9d7c217143c41d45f65e8117e8bd953a5 Mon Sep 17 00:00:00 2001 From: Matthias Markl <matthias.markl@fau.de> Date: Tue, 4 Apr 2017 08:15:55 +0200 Subject: [PATCH] extended iterator macros for free_surface support --- src/field/iterators/IteratorMacros.h | 750 ++++++++++++++++++++++++++- 1 file changed, 724 insertions(+), 26 deletions(-) diff --git a/src/field/iterators/IteratorMacros.h b/src/field/iterators/IteratorMacros.h index 2d211d3da..0c11a6014 100644 --- a/src/field/iterators/IteratorMacros.h +++ b/src/field/iterators/IteratorMacros.h @@ -610,6 +610,286 @@ WALBERLA_ASSERT( it3 == (f3)->end() ); \ } \ } } + +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS_OMP' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_OMP_12( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, omp, CODE ) \ + { WALBERLA_ASSERT_NOT_NULLPTR_1( (f0) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f1) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f2) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f3) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f4) ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f1)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f2)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f3)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f4)->xyzSize() ); \ + const ::walberla::cell_idx_t xSize__ = ::walberla::cell_idx_c( (f0)->xSize() ); \ + const ::walberla::cell_idx_t ySize__ = ::walberla::cell_idx_c( (f0)->ySize() ); \ + const ::walberla::cell_idx_t zSize__ = ::walberla::cell_idx_c( (f0)->zSize() ); \ + if( zSize__ >= ySize__ ) \ + { \ + const int izSize = ::walberla::int_c( zSize__ ); \ + __pragma(omp) \ + for( int iz = 0; iz < izSize; ++iz ) { \ + const ::walberla::cell_idx_t z = ::walberla::cell_idx_c( iz ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), ::walberla::cell_idx_t(0), z, xSize__ - ::walberla::cell_idx_t(1), ySize__ - ::walberla::cell_idx_t(1), z ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + } \ + } \ + else \ + { \ + const int iySize = ::walberla::int_c( ySize__ ); \ + __pragma(omp) \ + for( int iy = 0; iy < iySize; ++iy ) { \ + const ::walberla::cell_idx_t y = ::walberla::cell_idx_c( iy ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), y, ::walberla::cell_idx_t(0), xSize__ - ::walberla::cell_idx_t(1), y, zSize__ - ::walberla::cell_idx_t(1) ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + } \ + } } + +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS_OMP' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_OMP_14( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, omp, CODE ) \ + { WALBERLA_ASSERT_NOT_NULLPTR_1( (f0) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f1) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f2) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f3) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f4) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f5) ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f1)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f2)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f3)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f4)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f5)->xyzSize() ); \ + const ::walberla::cell_idx_t xSize__ = ::walberla::cell_idx_c( (f0)->xSize() ); \ + const ::walberla::cell_idx_t ySize__ = ::walberla::cell_idx_c( (f0)->ySize() ); \ + const ::walberla::cell_idx_t zSize__ = ::walberla::cell_idx_c( (f0)->zSize() ); \ + if( zSize__ >= ySize__ ) \ + { \ + const int izSize = ::walberla::int_c( zSize__ ); \ + __pragma(omp) \ + for( int iz = 0; iz < izSize; ++iz ) { \ + const ::walberla::cell_idx_t z = ::walberla::cell_idx_c( iz ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), ::walberla::cell_idx_t(0), z, xSize__ - ::walberla::cell_idx_t(1), ySize__ - ::walberla::cell_idx_t(1), z ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + auto it5 = (f5)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); \ + } \ + } \ + else \ + { \ + const int iySize = ::walberla::int_c( ySize__ ); \ + __pragma(omp) \ + for( int iy = 0; iy < iySize; ++iy ) { \ + const ::walberla::cell_idx_t y = ::walberla::cell_idx_c( iy ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), y, ::walberla::cell_idx_t(0), xSize__ - ::walberla::cell_idx_t(1), y, zSize__ - ::walberla::cell_idx_t(1) ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + auto it5 = (f5)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); \ + } \ + } } + +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS_OMP' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_OMP_16( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, it6, f6, omp, CODE ) \ + { WALBERLA_ASSERT_NOT_NULLPTR_1( (f0) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f1) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f2) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f3) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f4) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f5) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f6) ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f1)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f2)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f3)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f4)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f5)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f6)->xyzSize() ); \ + const ::walberla::cell_idx_t xSize__ = ::walberla::cell_idx_c( (f0)->xSize() ); \ + const ::walberla::cell_idx_t ySize__ = ::walberla::cell_idx_c( (f0)->ySize() ); \ + const ::walberla::cell_idx_t zSize__ = ::walberla::cell_idx_c( (f0)->zSize() ); \ + if( zSize__ >= ySize__ ) \ + { \ + const int izSize = ::walberla::int_c( zSize__ ); \ + __pragma(omp) \ + for( int iz = 0; iz < izSize; ++iz ) { \ + const ::walberla::cell_idx_t z = ::walberla::cell_idx_c( iz ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), ::walberla::cell_idx_t(0), z, xSize__ - ::walberla::cell_idx_t(1), ySize__ - ::walberla::cell_idx_t(1), z ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + auto it5 = (f5)->beginSliceXYZ( interval ); \ + auto it6 = (f6)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5; ++it6; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); \ + WALBERLA_ASSERT( it6 == (f6)->end() ); \ + } \ + } \ + else \ + { \ + const int iySize = ::walberla::int_c( ySize__ ); \ + __pragma(omp) \ + for( int iy = 0; iy < iySize; ++iy ) { \ + const ::walberla::cell_idx_t y = ::walberla::cell_idx_c( iy ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), y, ::walberla::cell_idx_t(0), xSize__ - ::walberla::cell_idx_t(1), y, zSize__ - ::walberla::cell_idx_t(1) ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + auto it5 = (f5)->beginSliceXYZ( interval ); \ + auto it6 = (f6)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5; ++it6; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); \ + WALBERLA_ASSERT( it6 == (f6)->end() ); \ + } \ + } } + +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS_OMP' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_OMP_18( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, it6, f6, it7, f7, omp, CODE ) \ + { WALBERLA_ASSERT_NOT_NULLPTR_1( (f0) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f1) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f2) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f3) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f4) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f5) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f6) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f7) ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f1)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f2)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f3)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f4)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f5)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f6)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f7)->xyzSize() ); \ + const ::walberla::cell_idx_t xSize__ = ::walberla::cell_idx_c( (f0)->xSize() ); \ + const ::walberla::cell_idx_t ySize__ = ::walberla::cell_idx_c( (f0)->ySize() ); \ + const ::walberla::cell_idx_t zSize__ = ::walberla::cell_idx_c( (f0)->zSize() ); \ + if( zSize__ >= ySize__ ) \ + { \ + const int izSize = ::walberla::int_c( zSize__ ); \ + __pragma(omp) \ + for( int iz = 0; iz < izSize; ++iz ) { \ + const ::walberla::cell_idx_t z = ::walberla::cell_idx_c( iz ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), ::walberla::cell_idx_t(0), z, xSize__ - ::walberla::cell_idx_t(1), ySize__ - ::walberla::cell_idx_t(1), z ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + auto it5 = (f5)->beginSliceXYZ( interval ); \ + auto it6 = (f6)->beginSliceXYZ( interval ); \ + auto it7 = (f7)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5; ++it6; ++it7; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); \ + WALBERLA_ASSERT( it6 == (f6)->end() ); \ + WALBERLA_ASSERT( it7 == (f7)->end() ); \ + } \ + } \ + else \ + { \ + const int iySize = ::walberla::int_c( ySize__ ); \ + __pragma(omp) \ + for( int iy = 0; iy < iySize; ++iy ) { \ + const ::walberla::cell_idx_t y = ::walberla::cell_idx_c( iy ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), y, ::walberla::cell_idx_t(0), xSize__ - ::walberla::cell_idx_t(1), y, zSize__ - ::walberla::cell_idx_t(1) ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + auto it5 = (f5)->beginSliceXYZ( interval ); \ + auto it6 = (f6)->beginSliceXYZ( interval ); \ + auto it7 = (f7)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5; ++it6; ++it7; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); \ + WALBERLA_ASSERT( it6 == (f6)->end() ); \ + WALBERLA_ASSERT( it7 == (f7)->end() ); \ + } \ + } } #else // == not WALBERLA_CXX_COMPILER_IS_MSVC @@ -1073,6 +1353,286 @@ } \ } } +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS_OMP' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_OMP_12( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, omp, CODE ) \ + { WALBERLA_ASSERT_NOT_NULLPTR_1( (f0) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f1) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f2) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f3) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f4) ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f1)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f2)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f3)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f4)->xyzSize() ); \ + const ::walberla::cell_idx_t xSize__ = ::walberla::cell_idx_c( (f0)->xSize() ); \ + const ::walberla::cell_idx_t ySize__ = ::walberla::cell_idx_c( (f0)->ySize() ); \ + const ::walberla::cell_idx_t zSize__ = ::walberla::cell_idx_c( (f0)->zSize() ); \ + if( zSize__ >= ySize__ ) \ + { \ + const int izSize = ::walberla::int_c( zSize__ ); \ + _Pragma(#omp) \ + for( int iz = 0; iz < izSize; ++iz ) { \ + const ::walberla::cell_idx_t z = ::walberla::cell_idx_c( iz ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), ::walberla::cell_idx_t(0), z, xSize__ - ::walberla::cell_idx_t(1), ySize__ - ::walberla::cell_idx_t(1), z ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + } \ + } \ + else \ + { \ + const int iySize = ::walberla::int_c( ySize__ ); \ + _Pragma(#omp) \ + for( int iy = 0; iy < iySize; ++iy ) { \ + const ::walberla::cell_idx_t y = ::walberla::cell_idx_c( iy ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), y, ::walberla::cell_idx_t(0), xSize__ - ::walberla::cell_idx_t(1), y, zSize__ - ::walberla::cell_idx_t(1) ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + } \ + } } + +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS_OMP' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_OMP_14( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, omp, CODE ) \ + { WALBERLA_ASSERT_NOT_NULLPTR_1( (f0) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f1) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f2) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f3) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f4) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f5) ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f1)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f2)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f3)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f4)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f5)->xyzSize() ); \ + const ::walberla::cell_idx_t xSize__ = ::walberla::cell_idx_c( (f0)->xSize() ); \ + const ::walberla::cell_idx_t ySize__ = ::walberla::cell_idx_c( (f0)->ySize() ); \ + const ::walberla::cell_idx_t zSize__ = ::walberla::cell_idx_c( (f0)->zSize() ); \ + if( zSize__ >= ySize__ ) \ + { \ + const int izSize = ::walberla::int_c( zSize__ ); \ + _Pragma(#omp) \ + for( int iz = 0; iz < izSize; ++iz ) { \ + const ::walberla::cell_idx_t z = ::walberla::cell_idx_c( iz ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), ::walberla::cell_idx_t(0), z, xSize__ - ::walberla::cell_idx_t(1), ySize__ - ::walberla::cell_idx_t(1), z ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + auto it5 = (f5)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); \ + } \ + } \ + else \ + { \ + const int iySize = ::walberla::int_c( ySize__ ); \ + _Pragma(#omp) \ + for( int iy = 0; iy < iySize; ++iy ) { \ + const ::walberla::cell_idx_t y = ::walberla::cell_idx_c( iy ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), y, ::walberla::cell_idx_t(0), xSize__ - ::walberla::cell_idx_t(1), y, zSize__ - ::walberla::cell_idx_t(1) ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + auto it5 = (f5)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); \ + } \ + } } + +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS_OMP' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_OMP_16( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, it6, f6, omp, CODE ) \ + { WALBERLA_ASSERT_NOT_NULLPTR_1( (f0) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f1) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f2) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f3) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f4) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f5) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f6) ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f1)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f2)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f3)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f4)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f5)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f6)->xyzSize() ); \ + const ::walberla::cell_idx_t xSize__ = ::walberla::cell_idx_c( (f0)->xSize() ); \ + const ::walberla::cell_idx_t ySize__ = ::walberla::cell_idx_c( (f0)->ySize() ); \ + const ::walberla::cell_idx_t zSize__ = ::walberla::cell_idx_c( (f0)->zSize() ); \ + if( zSize__ >= ySize__ ) \ + { \ + const int izSize = ::walberla::int_c( zSize__ ); \ + _Pragma(#omp) \ + for( int iz = 0; iz < izSize; ++iz ) { \ + const ::walberla::cell_idx_t z = ::walberla::cell_idx_c( iz ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), ::walberla::cell_idx_t(0), z, xSize__ - ::walberla::cell_idx_t(1), ySize__ - ::walberla::cell_idx_t(1), z ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + auto it5 = (f5)->beginSliceXYZ( interval ); \ + auto it6 = (f6)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5; ++it6; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); \ + WALBERLA_ASSERT( it6 == (f6)->end() ); \ + } \ + } \ + else \ + { \ + const int iySize = ::walberla::int_c( ySize__ ); \ + _Pragma(#omp) \ + for( int iy = 0; iy < iySize; ++iy ) { \ + const ::walberla::cell_idx_t y = ::walberla::cell_idx_c( iy ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), y, ::walberla::cell_idx_t(0), xSize__ - ::walberla::cell_idx_t(1), y, zSize__ - ::walberla::cell_idx_t(1) ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + auto it5 = (f5)->beginSliceXYZ( interval ); \ + auto it6 = (f6)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5; ++it6; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); \ + WALBERLA_ASSERT( it6 == (f6)->end() ); \ + } \ + } } + +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS_OMP' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_OMP_18( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, it6, f6, it7, f7, omp, CODE ) \ + { WALBERLA_ASSERT_NOT_NULLPTR_1( (f0) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f1) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f2) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f3) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f4) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f5) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f6) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f7) ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f1)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f2)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f3)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f4)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f5)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f6)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f7)->xyzSize() ); \ + const ::walberla::cell_idx_t xSize__ = ::walberla::cell_idx_c( (f0)->xSize() ); \ + const ::walberla::cell_idx_t ySize__ = ::walberla::cell_idx_c( (f0)->ySize() ); \ + const ::walberla::cell_idx_t zSize__ = ::walberla::cell_idx_c( (f0)->zSize() ); \ + if( zSize__ >= ySize__ ) \ + { \ + const int izSize = ::walberla::int_c( zSize__ ); \ + _Pragma(#omp) \ + for( int iz = 0; iz < izSize; ++iz ) { \ + const ::walberla::cell_idx_t z = ::walberla::cell_idx_c( iz ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), ::walberla::cell_idx_t(0), z, xSize__ - ::walberla::cell_idx_t(1), ySize__ - ::walberla::cell_idx_t(1), z ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + auto it5 = (f5)->beginSliceXYZ( interval ); \ + auto it6 = (f6)->beginSliceXYZ( interval ); \ + auto it7 = (f7)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5; ++it6; ++it7; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); \ + WALBERLA_ASSERT( it6 == (f6)->end() ); \ + WALBERLA_ASSERT( it7 == (f7)->end() ); \ + } \ + } \ + else \ + { \ + const int iySize = ::walberla::int_c( ySize__ ); \ + _Pragma(#omp) \ + for( int iy = 0; iy < iySize; ++iy ) { \ + const ::walberla::cell_idx_t y = ::walberla::cell_idx_c( iy ); \ + const CellInterval interval( ::walberla::cell_idx_t(0), y, ::walberla::cell_idx_t(0), xSize__ - ::walberla::cell_idx_t(1), y, zSize__ - ::walberla::cell_idx_t(1) ); \ + auto it0 = (f0)->beginSliceXYZ( interval ); \ + auto it1 = (f1)->beginSliceXYZ( interval ); \ + auto it2 = (f2)->beginSliceXYZ( interval ); \ + auto it3 = (f3)->beginSliceXYZ( interval ); \ + auto it4 = (f4)->beginSliceXYZ( interval ); \ + auto it5 = (f5)->beginSliceXYZ( interval ); \ + auto it6 = (f6)->beginSliceXYZ( interval ); \ + auto it7 = (f7)->beginSliceXYZ( interval ); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5; ++it6; ++it7; \ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); \ + WALBERLA_ASSERT( it6 == (f6)->end() ); \ + WALBERLA_ASSERT( it7 == (f7)->end() ); \ + } \ + } } + #endif #else // == no OpenMP @@ -1215,6 +1775,134 @@ WALBERLA_ASSERT( it2 == (f2)->end() ); \ WALBERLA_ASSERT( it3 == (f3)->end() ); } +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS_OMP' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_OMP_12( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, omp, CODE ) \ + { WALBERLA_ASSERT_NOT_NULLPTR_1( (f0) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f1) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f2) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f3) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f4) ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f1)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f2)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f3)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f4)->xyzSize() ); \ + auto it0 = (f0)->beginXYZ(); \ + auto it1 = (f1)->beginXYZ(); \ + auto it2 = (f2)->beginXYZ(); \ + auto it3 = (f3)->beginXYZ(); \ + auto it4 = (f4)->beginXYZ(); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4;\ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); } + +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS_OMP' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_OMP_14( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, omp, CODE ) \ + { WALBERLA_ASSERT_NOT_NULLPTR_1( (f0) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f1) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f2) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f3) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f4) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f5) ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f1)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f2)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f3)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f4)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f5)->xyzSize() ); \ + auto it0 = (f0)->beginXYZ(); \ + auto it1 = (f1)->beginXYZ(); \ + auto it2 = (f2)->beginXYZ(); \ + auto it3 = (f3)->beginXYZ(); \ + auto it4 = (f4)->beginXYZ(); \ + auto it5 = (f5)->beginXYZ(); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5;\ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); } + +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS_OMP' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_OMP_16( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, it6, f6, omp, CODE ) \ + { WALBERLA_ASSERT_NOT_NULLPTR_1( (f0) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f1) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f2) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f3) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f4) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f5) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f6) ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f1)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f2)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f3)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f4)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f5)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f6)->xyzSize() ); \ + auto it0 = (f0)->beginXYZ(); \ + auto it1 = (f1)->beginXYZ(); \ + auto it2 = (f2)->beginXYZ(); \ + auto it3 = (f3)->beginXYZ(); \ + auto it4 = (f4)->beginXYZ(); \ + auto it5 = (f5)->beginXYZ(); \ + auto it6 = (f6)->beginXYZ(); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5; ++it6;\ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); \ + WALBERLA_ASSERT( it6 == (f6)->end() ); } + +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS_OMP' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_OMP_18( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, it6, f6, it7, f7, omp, CODE ) \ + { WALBERLA_ASSERT_NOT_NULLPTR_1( (f0) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f1) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f2) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f3) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f4) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f5) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f6) ); \ + WALBERLA_ASSERT_NOT_NULLPTR_1( (f7) ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f1)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f2)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f3)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f4)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f5)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f6)->xyzSize() ); \ + WALBERLA_ASSERT_EQUAL_2( (f0)->xyzSize(), (f7)->xyzSize() ); \ + auto it0 = (f0)->beginXYZ(); \ + auto it1 = (f1)->beginXYZ(); \ + auto it2 = (f2)->beginXYZ(); \ + auto it3 = (f3)->beginXYZ(); \ + auto it4 = (f4)->beginXYZ(); \ + auto it5 = (f5)->beginXYZ(); \ + auto it6 = (f6)->beginXYZ(); \ + auto it7 = (f7)->beginXYZ(); \ + while( it0 != (f0)->end() ) \ + { \ + CODE \ + ++it0; ++it1; ++it2; ++it3; ++it4; ++it5; ++it6; ++it7;\ + } \ + WALBERLA_ASSERT( it1 == (f1)->end() ); \ + WALBERLA_ASSERT( it2 == (f2)->end() ); \ + WALBERLA_ASSERT( it3 == (f3)->end() ); \ + WALBERLA_ASSERT( it4 == (f4)->end() ); \ + WALBERLA_ASSERT( it5 == (f5)->end() ); \ + WALBERLA_ASSERT( it6 == (f6)->end() ); \ + WALBERLA_ASSERT( it7 == (f7)->end() ); } + #endif // OpenMP @@ -1321,35 +2009,45 @@ // Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS' (using the same signature) instead #define WALBERLA_FOR_ALL_CELLS_9( it0, f0, it1, f1, it2, f2, it3, f3, CODE ) \ WALBERLA_FOR_ALL_CELLS_OMP_10( it0, f0, it1, f1, it2, f2, it3, f3, omp parallel for schedule(static), CODE ) +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_11( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, CODE ) \ + WALBERLA_FOR_ALL_CELLS_OMP_12( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, omp parallel for schedule(static), CODE ) +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_13( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, CODE ) \ + WALBERLA_FOR_ALL_CELLS_OMP_14( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, omp parallel for schedule(static), CODE ) +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_15( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, it6, f6, CODE ) \ + WALBERLA_FOR_ALL_CELLS_OMP_16( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, it6, f6, omp parallel for schedule(static), CODE ) +// Do not call this macro, call 'WALBERLA_FOR_ALL_CELLS' (using the same signature) instead +#define WALBERLA_FOR_ALL_CELLS_17( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, it6, f6, it7, f7, CODE ) \ + WALBERLA_FOR_ALL_CELLS_OMP_18( it0, f0, it1, f1, it2, f2, it3, f3, it4, f4, it5, f5, it6, f6, it7, f7, omp parallel for schedule(static), CODE ) - -#define WALBERLA_FOR_ALL_CELLS_OMP_1(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_OMP_2(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_OMP_3(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_OMP_5(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_OMP_7(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_OMP_9(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_OMP_11(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_OMP_12(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_OMP_13(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_OMP_14(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_OMP_15(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_OMP_16(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO - -#define WALBERLA_FOR_ALL_CELLS_1(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_2(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_4(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_6(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_8(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_10(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_11(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_12(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_13(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_14(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_15(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO -#define WALBERLA_FOR_ALL_CELLS_16(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_AN_ITERATOR_MACRO +#define WALBERLA_FOR_ALL_CELLS_OMP_1(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_OMP_1 +#define WALBERLA_FOR_ALL_CELLS_OMP_2(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_OMP_2 +#define WALBERLA_FOR_ALL_CELLS_OMP_3(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_OMP_3 +#define WALBERLA_FOR_ALL_CELLS_OMP_5(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_OMP_5 +#define WALBERLA_FOR_ALL_CELLS_OMP_7(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_OMP_7 +#define WALBERLA_FOR_ALL_CELLS_OMP_9(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_OMP_9 +#define WALBERLA_FOR_ALL_CELLS_OMP_11(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_OMP_11 +#define WALBERLA_FOR_ALL_CELLS_OMP_13(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_OMP_13 +#define WALBERLA_FOR_ALL_CELLS_OMP_15(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_OMP_15 +#define WALBERLA_FOR_ALL_CELLS_OMP_17(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_OMP_17 +#define WALBERLA_FOR_ALL_CELLS_OMP_19(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_OMP_19 +#define WALBERLA_FOR_ALL_CELLS_OMP_20(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_OMP_20 +#define WALBERLA_FOR_ALL_CELLS_1(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_1 +#define WALBERLA_FOR_ALL_CELLS_2(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_2 +#define WALBERLA_FOR_ALL_CELLS_4(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_4 +#define WALBERLA_FOR_ALL_CELLS_6(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_6 +#define WALBERLA_FOR_ALL_CELLS_8(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_8 +#define WALBERLA_FOR_ALL_CELLS_10(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_10 +#define WALBERLA_FOR_ALL_CELLS_12(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_12 +#define WALBERLA_FOR_ALL_CELLS_14(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_14 +#define WALBERLA_FOR_ALL_CELLS_16(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_16 +#define WALBERLA_FOR_ALL_CELLS_18(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_18 +#define WALBERLA_FOR_ALL_CELLS_19(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_19 +#define WALBERLA_FOR_ALL_CELLS_20(...) THIS_IS_SUPPOSED_TO_FAIL___YOU_MADE_AN_ERROR_WHEN_USING_ITERATOR_MACRO___WALBERLA_FOR_ALL_CELLS_20 #define WALBERLA_FOR_ALL_CELLS_OMP(...) \ -- GitLab