! { dg-do run } SUBROUTINE SUBDOMAIN(X, ISTART, IPOINTS) INTEGER ISTART, IPOINTS REAL X(*) INTEGER I DO 100 I=1,IPOINTS X(ISTART+I) = 123.456 100 CONTINUE END SUBROUTINE SUBDOMAIN SUBROUTINE SUB(X, NPOINTS) INCLUDE "omp_lib.h" ! or USE OMP_LIB REAL X(*) INTEGER NPOINTS INTEGER IAM, NT, IPOINTS, ISTART !$OMP PARALLEL DEFAULT(PRIVATE) SHARED(X,NPOINTS) IAM = OMP_GET_THREAD_NUM() NT = OMP_GET_NUM_THREADS() IPOINTS = NPOINTS/NT ISTART = IAM * IPOINTS IF (IAM .EQ. NT-1) THEN IPOINTS = NPOINTS - ISTART ENDIF CALL SUBDOMAIN(X,ISTART,IPOINTS) !$OMP END PARALLEL END SUBROUTINE SUB PROGRAM A4 REAL ARRAY(10000) CALL SUB(ARRAY, 10000) END PROGRAM A4