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