1! { dg-do run } 2 SUBROUTINE SUBDOMAIN(X, ISTART, IPOINTS) 3 INTEGER ISTART, IPOINTS 4 REAL X(*) 5 INTEGER I 6 DO 100 I=1,IPOINTS 7 X(ISTART+I) = 123.456 8 100 CONTINUE 9 END SUBROUTINE SUBDOMAIN 10 SUBROUTINE SUB(X, NPOINTS) 11 INCLUDE "omp_lib.h" ! or USE OMP_LIB 12 REAL X(*) 13 INTEGER NPOINTS 14 INTEGER IAM, NT, IPOINTS, ISTART 15!$OMP PARALLEL DEFAULT(PRIVATE) SHARED(X,NPOINTS) 16 IAM = OMP_GET_THREAD_NUM() 17 NT = OMP_GET_NUM_THREADS() 18 IPOINTS = NPOINTS/NT 19 ISTART = IAM * IPOINTS 20 IF (IAM .EQ. NT-1) THEN 21 IPOINTS = NPOINTS - ISTART 22 ENDIF 23 CALL SUBDOMAIN(X,ISTART,IPOINTS) 24!$OMP END PARALLEL 25 END SUBROUTINE SUB 26 PROGRAM A4 27 REAL ARRAY(10000) 28 CALL SUB(ARRAY, 10000) 29 END PROGRAM A4 30