Three-Dimensional Fluid Code with XcalableMP
175
Listing 4 Typical XMP programs using the local-view programming model with put communications for all of X, Y, and Z domain decomposition method
1 integer, parameter :: lx=..., ly=..., lz=...
2 real * 8 :: ram
3 real * 8, allocatable :: rami(:)
4 real * 8, allocatable :: physval(6,:,:,:)[:]
5 real * 8 :: ramc[ * ]
6 ...
7 limgn = THIS_IMAGE()
8 lsx = lx / nx
9 lsy = ly / ny
10 lsz = lz / nz
11 linxp = limgn + 1
12 linxm = limgn - 1
13 linyp = limgn + nx
14 linym = limgn - nx
15 linzp = limgn + (nx * ny)
16 linzm = limgn - (nx * ny)
17 allocate( physval(6,0:lsx+1,0:lsy+1,0:lsz+1)[ * ] )
18 allocate( rami(nx * ny * nz) )
19 ...
20 physval(:,lsx+1,:,:)[linxm] = physval1(:,1,:,:)
21 physval(:,0,:,:)[linxp] = physval1(:,lsx,:,:)
22 SYNC ALL
23 !$OMP PARALLEL DO PRIVATE(iy,ix)
24 do iz = 1, lsz
25 do iy = 1, lsy
26 do ix = 1, lsx
27
...
28
physval(..,ix,iy,iz) = ... &
29
physval(..,ix-1,iy,iz) ... physval(..,ix+1,iy,iz)
30
...
31 ...
32 physval(:,:,lsy+1,:)[linym] = physval1(:,:,1,:)
33 physval(:,:,0,:)[linyp] = physval1(:,:,lsy,:)
34 SYNC ALL
35 !$OMP PARALLEL DO PRIVATE(iy,ix)
36 do iz = 1, lsz
37 do iy = 1, lsy
38 do ix = 1, lsx
39
...
40
physval(..,ix,iy,iz) = ... &
41
physval(..,ix,iy-1,iz) ... physval(..,ix,iy+1,iz)
42
...
43 ...
44 physval(:,:,:,lsz+1)[linzm] = physval1(:,:,:,1)
45 physval(:,:,:,0)[linzp] = physval1(:,:,:,lsz)
46 SYNC ALL
47 !$OMP PARALLEL DO PRIVATE(iy,ix)
48 do iz = 1, lsz
49 do iy = 1, lsy
50 do ix = 1, lsx
Précédent

- 181/265

Suivant