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