hpfLDr (1158339), страница 2
Текст из файла (страница 2)
DO 5 K = I+1, N+1
A(J,K) = A(J,K) - A(J,I) * A(I,K) / A(I,I)
5 CONTINUE
1 CONTINUE
C сначала вычисляется X(N)
X(N) = A(N,N+1) / A(N,N)
C
C Нахождение X(N-1), X(N-2), ...,X(1) обратной подстановкой
C
DO 6 J = N-1, 1, -1
*HPF$ INDEPENDENT
DO 7 I = 1, J
A(I,N+1) = A(I,N+1) - A(I,J+1) * X(J+1)
7 CONTINUE
X(J) = A(J,N+1) / A(J,J)
6 CONTINUE
PRINT *, X
END
Пример 2. Алгоритм Якоби
PROGRAM JACOBI
PARAMETER (K=8, ITMAX=20)
REAL A(K,K), B(K,K)
*HPF$ DISTRIBUTE A (BLOCK, BLOCK)
*HPF$ ALIGN B(I,J) WITH A(I,J)
C массивы A и B распределяются блоками
PRINT *, '******** TEST_JACOBI_HPF ********'
C гнездо из двух циклов INDEPENDENT, итерация (i,j) выполняется
C на том процессоре, где размещен элемент A(i,j)
*HPF$ INDEPENDENT
DO 1 J = 1, K
*HPF$ INDEPENDENT
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
*HPF$ INDEPENDENT
DO 21 J = 2, K-1
*HPF$ INDEPENDENT
DO 21 I = 2, K-1
A(I,J) = B(I,J)
21 CONTINUE
*HPF$ INDEPENDENT
DO 22 J = 2, K-1
*HPF$ INDEPENDENT
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
2 CONTINUE
3 OPEN (3, FILE='JACH.DAT', FORM='FORMATTED')
WRITE (3,*) B
CLOSE (3)
END
Пример 3. "Красно-черная" последовательная верхняя релаксация
program redblack
parameter (n1 = 20,n2 = 10)
real a(n1,n2),w
integer itmax
*HPF$ DISTRIBUTE (BLOCK,BLOCK) :: a
itmax = 20
w = 0.5
*HPF$ INDEPENDENT
do 1 j = 1,n2
*HPF$ INDEPENDENT
do 1 I = 1,n1
if (i.eq.j) then
a(i,j) = n1+2
else
a(i,j) = (-(1.))
endif
1 continue
do 2 it = 1,itmax
*HPF$ INDEPENDENT
do 21 J = 1,n2/2-1
*HPF$ INDEPENDENT
do 21 I = 1,n1/2-1
a(2*i+1,2*j+1) = w/4*(a(2*i,2*j+1)+a(2*i+2,2*j+1)+
+ a(2*i+1,2*j)+a(2*i+1,2*j+2))+(1-w)*a(2*i+1,2*j+1)
21 continue
*HPF$ INDEPENDENT
do 22 J = 1, n2/2-1
*HPF$ INDEPENDENT
do 22 I = 1,n1/2-1
a(2*i,2*j) = w/4*(a(2*i-1,2*j)+a(2*i+1,2*j)+a(2*i,2*j-1)+
+ a(2*i,2*j+1))+(1-w)*a(2*i,2*j)
22 continue
*HPF$ INDEPENDENT
do 23 J = 1,n2/2-1
*HPF$ INDEPENDENT
do 23 I = 1,n1/2-1
a(2*i,2*j+1) = w/4*(a(2*i-1,2*j+1)+a(2*i+1,2*j+1)+
+ a(2*i,2*j)+a(2*i,2*j+2))+(1-w)*a(2*i,2*j+1)
23 continue
*HPF$ INDEPENDENT
do 24 J = 1,n2/2-1
*HPF$ INDEPENDENT
do 24 I = 1,n1/2-1
a(2*i+1,2*j) = w/4*(a(2*i,2*j)+a(2*i+2,2*j)+
+ a(2*i+1,2*j-1)+A(2*i+1,2*j+1))+(1-w)*a(2*i+1,2*j)
24 continue
print *,'IT= ',it
2 continue
end