PROGRAM JACOBI
      REAL T(0:1001), TNEW(1000), TOL
      INTEGER N
      TOL=1.0E-5
      PRINT*, 'Enter N'
      READ*, N
!$OMP PARALLEL DO DEFAULT(SHARED) PRIVATE(I) SHARED(N)

      DO I = 1, N
        T(I) = 0.0
      ENDDO
!$OMP END PARALLEL DO
      T(1) = 1
      T(N) = 100
40    CONTINUE
!$OMP PARALLEL DO DEFAULT(SHARED) PRIVATE(I) SHARED(N)

      DO I = 2, N-1
        TNEW(I) = (T(I-1)+T(I+1))/2.0
      ENDDO
!$OMP END PARALLEL DO
      DIFMAX = 0.0
!$OMP PARALLEL DO DEFAULT(SHARED) PRIVATE(DIFF, I)
!$OMP&  SHARED(N) REDUCTION(MAX:DIFMAX)

      DO I = 1, N
        DIFF = ABS(TNEW(I)-T(I))
        DIFMAX = MAX(DIFF,DIFMAX)
        T(I) = TNEW(I)
      ENDDO

!$OMP END PARALLEL DO
      IF (DIFMAX .GT. TOL) GOTO 40
      DO 50 I = 1, N,1
        WRITE(UNIT=*,FMT=*) TNEW(I)
50    CONTINUE
      END