PROGRAM PARALLEL_JACOBI
INTEGER CAP_LEFT, CAP_RIGHT
PARAMETER (CAP_LEFT=-1, CAP_RIGHT=-2)
REAL T(0:1001), TNEW(1000), TOL
INTEGER N, CAP_LT,
CAP_HT
EXTERNAL CAP_RMAX
REAL CAP_RMAX
INTEGER CAP_PROCNUM, CAP_NPROC
COMMON /CAP_TOOLS/CAP_PROCNUM,
CAP_NPROC
CALL CAP_INIT
TOL=1.0E-5
IF (CAP_PROCNUM.EQ.1)PRINT*,
'Enter N'
IF (CAP_PROCNUM.EQ.1)READ*,
N
CALL CAP_RECEIVE(N, 1, 1, CAP_LEFT)
CALL CAP_SEND(N, 1, 1, CAP_RIGHT)
CALL CAP_SETUPPART(1, N, CAP_LT,
CAP_HT)
DO I = MAX(1,
CAP_LT), MIN(N, CAP_HT), 1
T(I) = 0.0
ENDDO
IF (1.GE.CAP_LT.AND.1.LE.CAP_HT) T(1) = 1
IF (N.GE.CAP_LT.AND.N.LE.CAP_HT) T(N) = 100
40 CONTINUE
CALL CAP_EXCHANGE(T(CAP_HT+1), T(CAP_LT), 1, 2, CAP_RIGHT)
CALL CAP_EXCHANGE(T(CAP_LT-1),
T(CAP_HT), 1, 2, CAP_LEFT)
DO I = MAX(2, CAP_LT), MIN(N-1, CAP_HT), 1
TNEW(I) = (T(I-1)+T(I+1))/2.0
ENDDO
DIFMAX = 0.0
DO I = MAX(1,
CAP_LT), MIN(N, CAP_HT), 1
DIFF = ABS(TNEW(I)-T(I))
DIFMAX = MAX(DIFF,DIFMAX)
T(I) = TNEW(I)
ENDDO
CALL
CAP_COMMUTATIVE(DIFMAX, 2, CAP_RMAX)
IF (DIFMAX.GT.TOL) GOTO 40
DO 50 I = 1, N, 1
IF (CAP_PROCNUM.EQ.1)WRITE(UNIT=*,FMT=*)
TNEW(I)
50 CONTINUE
CALL
CAP_FINISH()
END