HPF Livermore Loop 18 Kernel Source
(Explicit Hydrodynamics)
program liv18
PARAMETER (n=1024)
double precision za(n, n), zr(n, n), zb(n, n)
double precision zu(n, n), zz(n, n)
double precision zv(n, n), zq(n, n)
double precision zm(n, n), zp(n, n), t, s
double precision time, dclock, tbuf(1), sum
CHPF$ processors p(4,8)
CHPF$ template templ(n,n)
CHPF$ align za(i,j) with templ(i,j)
CHPF$ align zr(i,j) with templ(i,j)
CHPF$ align zb(i,j) with templ(i,j)
CHPF$ align zu(i,j) with templ(i,j)
CHPF$ align zz(i,j) with templ(i,j)
CHPF$ align zv(i,j) with templ(i,j)
CHPF$ align zq(i,j) with templ(i,j)
CHPF$ align zm(i,j) with templ(i,j)
CHPF$ align zp(i,j) with templ(i,j)
CHPF$ distribute templ(block,block) onto p
C -- Initializations --
C t = 0.0037
C s = 0.0041
do i = 1, n
do j = 1, n
za(j, i) = 1.0
zb(j, i) = 2.0
zu(j, i) = 3.0
zv(j, i) = 4.0
zr(j, i) = 5.0
zp(j, i) = 6.0
zm(j, i) = 7.0
zq(j, i) = 8.0
zz(j, i) = 9.0
enddo
enddo
C -- Explicit Hydrodynamics --
do k = 2, n - 1
do j = 2, n - 1
za(j,k) = ( zp(j-1,k+1)+zq(j-1,k+1)-zp(j-1,k)-zq(j-1,k) )
. * ( zr(j,k)+zr(j-1,k) ) / ( zm(j-1,k)+zm(j-1,k+1) )
enddo
enddo
do k = 2, n - 1
do j = 2, n - 1
zb(j,k) = ( zp(j-1,k)+zq(j-1,k)-zp(j,k)-zq(j,k) )
. * ( zr(j,k)+zr(j,k-1) ) / ( zm(j,k)+zm(j-1,k) )
enddo
enddo
do k = 2, n - 1
do j = 2, n - 1
zu(j,k) = zu(j,k) + 0.0041 *
. ( za(j,k) * ( zz(j,k)-zz(j+1,k) ) -
. za(j-1,k) * ( zz(j,k)-zz(j-1,k) ) -
. zb(j,k) * ( zz(j,k)-zz(j,k-1) ) +
. zb(j,k+1) * ( zz(j,k)-zz(j,k+1) ) )
zv(j,k) = zv(j,k) + 0.0041 *
. ( za(j,k) * ( zr(j,k)-zr(j+1,k) ) -
. za(j-1,k) * ( zr(j,k)-zr(j-1,k) ) -
. zb(j,k) * ( zr(j,k)-zr(j,k-1) ) +
. zb(j,k+1) * ( zr(j,k)-zr(j,k+1) ) )
enddo
enddo
do k = 2, n - 1
do j = 2, n - 1
zr(j, k) = zr(j, k) + 0.0037 * zu(j, k)
zz(j, k) = zz(j, k) + 0.0037 * zv(j, k)
enddo
enddo
C Compute checksum
C sum = 0.0
C do i = 1, n
C do j = 1, n
C sum = sum + 0.1*za(j,i) + 0.2*zb(j,i) + 0.3*zu(j,i) +
C . 0.4*zv(j,i) + 0.5*zr(j,i) + 0.6*zp(j,i) +
C . 0.7*zm(j,i) + 0.8*zq(j,i) + 0.9*zz(j,i)
C enddo
C enddo
C write (*, 100) n, 1, time, sum
100 format ('Explicit: Size = ',i3,' Proc = ',i2,
* ' Time = ',f9.6,' Checksum = ',f20.10)
end