! @@name: masked.1 ! @@type: F-fixed ! @@operation: compile ! @@expect: success ! @@version: omp_5.1 SUBROUTINE MASKED_EXAMPLE( X, XOLD, N, TOL ) REAL X(*), XOLD(*), TOL INTEGER N INTEGER C, I, TOOBIG REAL ERROR, Y, AVERAGE EXTERNAL AVERAGE C = 0 TOOBIG = 1 !$OMP PARALLEL DO WHILE( TOOBIG > 0 ) !$OMP DO PRIVATE(I) DO I = 2, N-1 XOLD(I) = X(I) ENDDO !$OMP SINGLE TOOBIG = 0 !$OMP END SINGLE !$OMP DO PRIVATE(I,Y,ERROR), REDUCTION(+:TOOBIG) DO I = 2, N-1 Y = X(I) X(I) = AVERAGE( XOLD(I-1), X(I), XOLD(I+1) ) ERROR = Y-X(I) IF( ERROR > TOL .OR. ERROR < -TOL ) TOOBIG = TOOBIG+1 ENDDO !$OMP MASKED ! primary thread (thread 0) C = C + 1 PRINT *, 'Iteration ', C, 'TOOBIG=', TOOBIG !$OMP END MASKED ENDDO !$OMP BARRIER !$OMP MASKED FILTER(1) ! thread 1 ! The print statement will not be executed ! if the number of threads is less than 2. PRINT *, 'Total number of iterations =', C !$OMP END MASKED !$OMP END PARALLEL END SUBROUTINE MASKED_EXAMPLE