63 lines
2.5 KiB
Plaintext
63 lines
2.5 KiB
Plaintext
PROGRAM JACAS
|
|
PARAMETER (K=8, ITMAX=20)
|
|
REAL A(K,K), EPS, MAXEPS, B(K,K)
|
|
CDVM$ DISTRIBUTE ( BLOCK, BLOCK) :: A
|
|
CDVM$ ALIGN B(I,J) WITH A(I,J)
|
|
CDVM$ REDUCTION_GROUP REPS
|
|
C arrays A and B with block distribution
|
|
|
|
PRINT *, '********** TEST_JACOBI_AS **********'
|
|
CDVM$ SHADOW_GROUP SA ( A )
|
|
C creation of descriptor for operations with imported/exported
|
|
C elements of array A
|
|
MAXEPS = 0.5E - 7
|
|
CDVM$ PARALLEL ( J, I) ON A( I, J)
|
|
C nest of parallel loops for initialization of arrays
|
|
DO 1 J = 1, K
|
|
DO 1 I = 1, K
|
|
A( I, J) = 0.
|
|
IF(I.EQ.1 .OR. J.EQ.1 .OR. I.EQ.K .OR. J.EQ.K) THEN
|
|
B(I, J) = 0.
|
|
ELSE
|
|
B(I, J) = ( 1. + I + J )
|
|
ENDIF
|
|
1 CONTINUE
|
|
DO 2 IT = 1, ITMAX
|
|
EPS = 0.
|
|
C descriptor of reduction operations is created
|
|
C and initial values of reduction variables are stored
|
|
CDVM$ PARALLEL ( J, I) ON A( I, J) , SHADOW_START SA,
|
|
CDVM$* REDUCTION(REPS:MAX(EPS))
|
|
C the loops iteration order is changed: at first
|
|
C exported (boundary) elements of A are calculated and sent
|
|
C then internal elements of array A are calculated
|
|
DO 21 J = 2, K-1
|
|
DO 21 I = 2, K-1
|
|
EPS = MAX ( EPS, ABS( B( I, J) - A( I, J)))
|
|
A( I, J) = B( I, J)
|
|
21 CONTINUE
|
|
CDVM$ REDUCTION_START REPS
|
|
C start of reduction operation to accumulate the partial results
|
|
C calculated in copies of variable EPS on every processor
|
|
CDVM$ PARALLEL ( J, I) ON B( I, J) , SHADOW_WAIT SA
|
|
C the loops iteration order is changed: at first
|
|
C internal elements of B are calculated, then imported elements
|
|
C of array A from neighboring processors are received,
|
|
C then boundary elements of array B are calculated
|
|
DO 22 J = 2, K-1
|
|
DO 22 I = 2, K-1
|
|
B(I, J) = (A( I-1, J ) + A( I, J-1 ) + A( I+1, J ) +
|
|
* A( I, J+1 ))/4
|
|
22 CONTINUE
|
|
CDVM$ REDUCTION_WAIT REPS
|
|
C awaiting completion of reduction operation
|
|
PRINT 200, IT, EPS
|
|
200 FORMAT(' IT = ',I4, ' EPS = ', E14.7)
|
|
IF ( EPS .LT. MAXEPS ) GO TO 3
|
|
2 CONTINUE
|
|
3 OPEN (3, FILE='JACAS.DAT', FORM='FORMATTED',STATUS='UNKNOWN')
|
|
WRITE (3,*) B
|
|
CLOSE (3)
|
|
END
|
|
|