File: stencilf2.f

package info (click to toggle)
blitz%2B%2B 1%3A1.0.2%2Bds-4.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 8,580 kB
  • sloc: cpp: 57,803; python: 1,941; fortran: 1,510; f90: 852; makefile: 838; sh: 321
file content (48 lines) | stat: -rw-r--r-- 1,134 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
! Tiled fortran stencil

       SUBROUTINE stencilftiled(A, B, N, iters)
       INTEGER N, iters
       DOUBLE PRECISION A(N,N,N), B(N,N,N)
       INTEGER z
       DOUBLE PRECISION c
       c = 1 / 7.

       DO z=1,iters
         CALL tiledStencil(A, B, N, c)
         CALL tiledStencil(B, A, N, c)
       ENDDO 
 
       RETURN
       END

       SUBROUTINE tiledStencil(A, B, N, c)
       INTEGER N
       DOUBLE PRECISION A(N,N,N), B(N,N,N)
       DOUBLE PRECISION c
       INTEGER i,j,k,bi,bj,bk,ni,nj,nk
       INTEGER blockSize

       blockSize = 16

       DO bi=2,N-1,blockSize
         DO bj=2,N-1,blockSize
           DO bk=2,N-1,blockSize
             ni = min(bi+blockSize-1,N-1)
             nj = min(bj+blockSize-1,N-1)
             nk = min(bk+blockSize-1,N-1)

             DO k=bk,nk
               DO j=bj,nj
                 DO i=bi,ni
                   A(i,j,k) = c * (B(i,j,k) + B(i+1,j,k) + B(i-1,j,k) 
     .            + B(i,j+1,k) + B(i,j-1,k) + B(i,j,k+1) + B(i,j,k-1))
                 ENDDO
               ENDDO
             ENDDO
           ENDDO
         ENDDO
       ENDDO

       RETURN
       END