Three-Dimensional Fluid Code with XcalableMP
169
44 do iz = 1, lz
45 do iy = 1, ly
46 do ix = 1, lx
47
ram = max( ram, ... )
Listing 2 Typical XMP programs using the global-view programming model for both Y and Z
domain decomposition methods
1 integer parameter :: lx=..., ly=..., lz=...
2 integer parameter :: ny=..., nz=...
3 !$XMP NODES proc(ny,nz)
4 !$XMP TEMPLATE t(lx,ly,lz)
5 !$XMP DISTRIBUTE t( * ,BLOCK,BLOCK) ONTO proc
6 real * 8 :: physval(6,lx,ly,lz)
7 real * 8 :: ram
8 !$XMP ALIGN ( * , * ,j,k) WITH t( * ,j,k) :: physval
9 !$XMP SHADOW (0,0,1,1) :: physval
10 ...
11 !$XMP LOOP (iy,iz) ON t( * ,iy,iz)
12 !$OMP PARALLEL DO PRIVATE(iy,ix)
13 do iz = 1, lz
14 do iy = 1, ly
15 do ix = 2, lx-1
16
...
17
physval(..,ix,iy,iz) = ... &
18
physval(..,ix-1,iy,iz) ... physval(..,ix+1,iy,iz)
19
...
20 ...
21 !$XMP REFLECT (physval) width(0,0,1,0)
22 !$XMP LOOP (iy,iz) ON t( * ,iy,iz)
23 !$OMP PARALLEL DO PRIVATE(iy,ix)
24 do iz = 1, lz
25 do iy = 2, ly-1
26 do ix = 1, lx
27
...
28
physval(..,ix,iy,iz) = ... &
29
physval(..,ix,iy-1,iz) ... physval(..,ix,iy+1,iz)
30
...
31 ...
32 !$XMP REFLECT (physval) width(0,0,0,1)
33 !$XMP LOOP (iy,iz) ON t( * ,iy,iz)
34 !$OMP PARALLEL DO PRIVATE(iy,ix)
35 do iz = 2, lz-1
36 do iy = 1, ly
37 do ix = 1, lx
38
...
39
physval(..,ix,iy,iz) = ... &
40
physval(..,ix,iy,iz-1) ... physval(..,ix,iy,iz+1)
41
...
42 ...
43 !$XMP LOOP (iy,iz) ON t( * ,iy,iz) REDUCTION(max:ram)
44 !$OMP PARALLEL DO REDUCTION(max:ram) PRIVATE(iy,ix)
169
44 do iz = 1, lz
45 do iy = 1, ly
46 do ix = 1, lx
47
ram = max( ram, ... )
Listing 2 Typical XMP programs using the global-view programming model for both Y and Z
domain decomposition methods
1 integer parameter :: lx=..., ly=..., lz=...
2 integer parameter :: ny=..., nz=...
3 !$XMP NODES proc(ny,nz)
4 !$XMP TEMPLATE t(lx,ly,lz)
5 !$XMP DISTRIBUTE t( * ,BLOCK,BLOCK) ONTO proc
6 real * 8 :: physval(6,lx,ly,lz)
7 real * 8 :: ram
8 !$XMP ALIGN ( * , * ,j,k) WITH t( * ,j,k) :: physval
9 !$XMP SHADOW (0,0,1,1) :: physval
10 ...
11 !$XMP LOOP (iy,iz) ON t( * ,iy,iz)
12 !$OMP PARALLEL DO PRIVATE(iy,ix)
13 do iz = 1, lz
14 do iy = 1, ly
15 do ix = 2, lx-1
16
...
17
physval(..,ix,iy,iz) = ... &
18
physval(..,ix-1,iy,iz) ... physval(..,ix+1,iy,iz)
19
...
20 ...
21 !$XMP REFLECT (physval) width(0,0,1,0)
22 !$XMP LOOP (iy,iz) ON t( * ,iy,iz)
23 !$OMP PARALLEL DO PRIVATE(iy,ix)
24 do iz = 1, lz
25 do iy = 2, ly-1
26 do ix = 1, lx
27
...
28
physval(..,ix,iy,iz) = ... &
29
physval(..,ix,iy-1,iz) ... physval(..,ix,iy+1,iz)
30
...
31 ...
32 !$XMP REFLECT (physval) width(0,0,0,1)
33 !$XMP LOOP (iy,iz) ON t( * ,iy,iz)
34 !$OMP PARALLEL DO PRIVATE(iy,ix)
35 do iz = 2, lz-1
36 do iy = 1, ly
37 do ix = 1, lx
38
...
39
physval(..,ix,iy,iz) = ... &
40
physval(..,ix,iy,iz-1) ... physval(..,ix,iy,iz+1)
41
...
42 ...
43 !$XMP LOOP (iy,iz) ON t( * ,iy,iz) REDUCTION(max:ram)
44 !$OMP PARALLEL DO REDUCTION(max:ram) PRIVATE(iy,ix)
