(5/5)
表A-3 サブルーチンRECURのソースコード
1 C======================================================================= 2 SUBROUTINE RECUR(XX,AA,BB,CC,DD,NN,N0,N1) 3 C======================================================================= 4 C 2000/7/11 5 C RIAM, KYUSHU UNIVERSITY 6 C MASATOSHI YAGI 7 C 8 C AA(I)*XX(N-1)+BB(N)*XX(N)+CC(N)*XX(N+1)=DD(N) N=0,---,NN 9 C N0=0 : XX( 0)=A0 ; N0=1 : D(XX( 0))/DY=AN. 10 C N1=0 : XX(NN)=B0 ; N1=1 : D(XX(NN))/DY=BN. 11 C 12 C N0=0 XX(0) = A0 13 C N1=0 XX(NN) = B0 14 C N0=1 XX(0) = DR*AN 15 C N1=1 XX(NN) = DR*BN 16 C======================================================================= 17 IMPLICIT REAL*8(A-H,O-Z) 18 PARAMETER( IDM = 200 ) 19 COMPLEX*16, DIMENSION(0:IDM) :: XX,AA,BB,CC,DD,EE,FF 20 COMPLEX*16 GG 21 C----------------------------------------------------------------------- 22 NM=NN-1 23 C----- 24 SELECT CASE (N1) 25 CASE(0) ! N1=0 26 EE(NM)=0.0D0 27 FF(NM)=XX(NN) 28 CASE(1) ! N1=1 29 GG =1.0D0/(3.0D0*AA(NM)-CC(NM)) 30 EE(NM)=(4.0D0*AA(NM)+BB(NM))*GG 31 FF(NM)= - (DD(NM)-2.0D0*XX(NN)*AA(NM))*GG 32 C## EE(NM)=(4.0D0*AA(NM)+BB(NM))/(3.0D0*AA(NM)-CC(NM)) 33 C## FF(NM)= - (DD(NM)-2.0D0*XX(NN)*AA(NM))/(3.0D0*AA(NM)-CC(NM)) 34 END SELECT 35 C 36 s2 DO N=NM-1,0,-1 ! EE(NN-2),....EE(0) 37 s2 GG=1.0D0/(BB(N+1)+CC(N+1)*EE(N+1)) 38 s2 EE(N)=-AA(N+1)*GG 39 s2 FF(N)=(DD(N+1)-CC(N+1)*FF(N+1))*GG 40 C## EE(N)=-AA(N+1)/(BB(N+1)+CC(N+1)*EE(N+1)) 41 C## FF(N)=(DD(N+1)-CC(N+1)*FF(N+1))/(BB(N+1)+CC(N+1)*EE(N+1)) 42 s2 END DO 43 C 44 IF(N0 .EQ. 1) THEN 45 XX(0)=((4.-EE(1))*FF(0)-FF(1))/(3.-(4.-EE(1))*EE(0)) 46 & -2.0D0*XX(0)/(3.0D0-(4.0D0-EE(1))*EE(0)) 47 END IF 48 C 49 s6 DO N=1,NN ! XX(1),...XX(NN) 50 s6 XX(N)=EE(N-1)*XX(N-1)+FF(N-1) 51 s6 END DO 52 C 53 RETURN 54 END Vectorization messages: program name(RECUR) jpc2217i-i "zztext.f", line 37 - 38: EE is not vectorized since recursive reference takes place. jpc2217i-i "zztext.f", line 39: FF is not vectorized since recursive reference takes place. jpc2217i-i "zztext.f", line 50: XX is not vectorized since recursive reference takes place. tmrhs.f: UXP/V Fortran V20L20 Mon Aug 14 10:39:05 2000
表A-4 サブルーチンbanfac,bansolのソースコード
1 subroutine banfac(b,n,int) 2 complex*16 b(5,n) 3 C## 4 select case(int) 5 case(1) 6 C 7 C int = 1, linear elements = tridiagonal system 8 C 9 s4 do j = 2, n 10 m4 b(2, j) = b(2, j) / b(3, j-1) 11 s4 b(3, j) = b(3, j) - b(2,j)*b(4,j-1) 12 v4 end do 13 C 14 C## 15 case(2) . . . 40 end select 41 return 42 end Vectorization messages: program name(banfac) jpc2306i-i "banfac.f", line 9: This DO loop is not vectorized since partial vectorization overhead is too large. jpc2217i-i "banfac.f", line 10 - 11: b is not vectorized since recursive reference takes place. jpc2217i-i "banfac.f", line 35 - 37: b is not vectorized since recursive reference takes place. 1 subroutine bansol(r,x,b,n,int) 2 complex*16 r(n), x(n), b(5,n) 3 select case(int) 4 case(1) 5 C## 6 C## int = 1, tridiagonal system 7 C## 8 s6 do j = 2, n 9 s6 r(j) = r(j) - b(2,j)*r(j-1) 10 s6 end do 11 C## 12 x(n) = r(n) / b(3, n) 13 s4 do j = n-1, 1, -1 14 m4 x(j) = (r(j) - b(4,j)*x(j+1))/b(3,j) 15 v4 end do 16 C## 17 case(2) . . . 39 end select 40 return 41 end Vectorization messages: program name(bansol) jpc2217i-i "bansol.f", line 9: r is not vectorized since recursive reference takes place. jpc2306i-i "bansol.f", line 13: This DO loop is not vectorized since partial vectorization overhead is too large. jpc2217i-i "bansol.f", line 14: x is not vectorized since recursive reference takes place.