| ! { dg-do compile } |
| SUBROUTINE A12( 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 MASTER |
| C=C+1 |
| PRINT *, "Iteration ", C, " TOOBIG=", TOOBIG |
| !$OMP END MASTER |
| ENDDO |
| !$OMP END PARALLEL |
| END SUBROUTINE A12 |