program fake_adi implicit none integer ldx, ldy, ldz, nx, ny, nz, maxsteps parameter (ldx = 128, ldy = 128, ldz = 128) parameter (nx = 128, ny = 128, nz = 128) parameter (maxsteps = 2) real*8 data(ldx,ldy,ldz) integer i, j, k, istep external rand, dtime real*4 dtime, t, t2(2) real*8 rand, checksum c do k =1,nz do j =1,ny do i =1,nx data(i,j,k) = rand() enddo enddo enddo c t = dtime(t2) c do istep = 1, maxsteps c c*$* assert concurrent call do k =1,nz do j =1,ny call xsweep(data(1,j,k),1,nx) enddo enddo c c*$* assert concurrent call do k =1,nz do i =1,nx call ysweep(data(i,1,k),ldx,ny) enddo enddo c c*$* assert concurrent call do j =1,ny do i =1,nx call zsweep(data(i,j,1),ldx*ldy,nz) enddo enddo c enddo c t = dtime(t2) write(6,1) t 1 format(1x,'Time: ',f6.3,' seconds') checksum = 0.0d0 do k =1,nz do j =1,ny do i =1,nx checksum = checksum + data(i,j,k) enddo enddo enddo c write(6,2) checksum 2 format(1x,'Checksum: ',1pe17.10) c end c--------------------------------------------------------------------- subroutine xsweep(v,is,n) implicit none real*8 v(1+is*(n-1)) integer is, n integer i real*8 half parameter (half = 0.5d0) c do i =2,n v(1+is*(i-1)) = v(1+is*(i-1)) + half*v(1+is*(i-2)) enddo c do i = n-1, 1, -1 v(1+is*(i-1)) = v(1+is*(i-1)) - half*v(1+is*i) enddo c return end c--------------------------------------------------------------------- subroutine ysweep(v,is,n) implicit none real*8 v(1+is*(n-1)) integer is, n integer i real*8 half parameter (half = 0.5d0) c do i =2,n v(1+is*(i-1)) = v(1+is*(i-1)) + half*v(1+is*(i-2)) enddo c do i = n-1, 1, -1 v(1+is*(i-1)) = v(1+is*(i-1)) - half*v(1+is*i) enddo c return end c--------------------------------------------------------------------- subroutine zsweep(v,is,n) implicit none real*8 v(1+is*(n-1)) integer is, n integer i real*8 half parameter (half = 0.5d0) c do i =2,n v(1+is*(i-1)) = v(1+is*(i-1)) + half*v(1+is*(i-2)) enddo c do i = n-1, 1, -1 v(1+is*(i-1)) = v(1+is*(i-1)) - half*v(1+is*i) enddo c return end