41 integer :: IminS, ImaxS, JminS, JmaxS
42 integer :: Nlevels, Ntiles
44 real(r8) :: Avalue, bytefac, megabytefac, size1d, size2d
45 real(r8) :: sumAsize, sumBsize, sumDsize
46 real(r8) :: totalAsize, totalBsize, totalDsize
48 real(r8),
parameter :: spv = 0.0_r8
51 real(r8),
allocatable :: Bwrk(:), Dwrk(:)
54 real(r8),
allocatable :: Asize(:,:)
55 real(r8),
allocatable :: Bsize(:,:)
56 real(r8),
allocatable :: Dsize(:,:)
57 real(r8),
allocatable :: IOsize(:,:)
71 IF (.not.
allocated(asize))
THEN
72 allocate ( asize(0:ntiles,
ngrids) )
75 IF (.not.
allocated(bsize))
THEN
76 allocate ( bsize(0:ntiles,
ngrids) )
79 IF (.not.
allocated(dsize))
THEN
80 allocate ( dsize(0:ntiles,
ngrids) )
83 IF (.not.
allocated(iosize))
THEN
84 allocate ( iosize(0:ntiles,
ngrids) )
88 IF (.not.
allocated(bwrk))
THEN
89 allocate ( bwrk(ntiles+1) )
91 IF (.not.
allocated(dwrk))
THEN
92 allocate ( dwrk(ntiles+1) )
102 bytefac=real(kind(bytefac),r8)
103 megabytefac=bytefac*1.0e-6_r8
129 imins=
bounds(ng)%Istr(tile)-4
130 imaxs=
bounds(ng)%Iend(tile)+3
131 jmins=
bounds(ng)%Jstr(tile)-4
132 jmaxs=
bounds(ng)%Jend(tile)+3
134 imins=
bounds(ng)%Istr(tile)-3
135 imaxs=
bounds(ng)%Iend(tile)+3
136 jmins=
bounds(ng)%Jstr(tile)-3
137 jmaxs=
bounds(ng)%Jend(tile)+3
139 size1d=real((imaxs-imins+1),r8)
140 size2d=real((imaxs-imins+1)*(jmaxs-jmins+1),r8)
142 asize(tile,ng)=megabytefac* &
143 & (4.0_r8*size1d*real(
n(ng)+1,r8)+ &
145 & 5.0_r8*size2d*real(
n(ng),r8)+ &
146 & 1.0_r8*size2d*real(
n(ng)*
nt(ng),r8))
147# if !(defined PARALLEL_IO && defined DISTRIBUTE)
153 iosize(tile,ng)=megabytefac*2.0_r8* &
154 & real(2+(
lm(ng)+2)*(
mm(ng)+2)*(nlevels),r8)
156 iosize(tile,ng)=megabytefac* &
157 & real(2+(
lm(ng)+2)*(
mm(ng)+2)*(
n(ng)+1),r8)
160 asize(tile,ng)=megabytefac* &
162 iosize(tile,ng)=megabytefac* &
163 & real(2+(
lm(ng)+2)*(
mm(ng)+2),r8)
187 dsize(0,ng)=megabytefac*
dmem(ng)
194 WRITE (
stdout,
"(/,80('>'))")
210 avalue=max(asize(tile,ng), bsize(tile,ng), iosize(tile,ng))
211 sumasize=sumasize+avalue
212 sumbsize=sumbsize+bsize(tile,ng)
213 sumdsize=sumdsize+dsize(tile,ng)
214 WRITE (
stdout,20) tile, dsize(tile,ng), avalue, &
216 & dsize(tile,ng)+avalue, bsize(tile,ng)
218 & dsize(tile,ng)+avalue
221 totalasize=totalasize+sumasize
222 totalbsize=totalbsize+sumbsize
223 totaldsize=totaldsize+sumdsize
225 WRITE (
stdout,30)
' SUM', sumdsize, sumasize, &
227 & sumasize+sumdsize, sumbsize
232 WRITE (
stdout,30)
'TOTAL', sumdsize, sumasize, &
234 & sumasize+sumdsize, sumbsize
241 WRITE (
stdout,30)
'TOTAL', totaldsize, totalasize, &
243 & totalasize+totaldsize, totalbsize
245 & totalasize+totaldsize
248 WRITE (
stdout,
"(/,80('<'))")
253 IF (
allocated(asize))
deallocate ( asize )
254 IF (
allocated(bsize))
deallocate ( bsize )
255 IF (
allocated(dsize))
deallocate ( dsize )
256 IF (
allocated(iosize))
deallocate ( iosize )
261 10
FORMAT (/,
' Dynamic and Automatic memory (MB) usage for Grid ', &
262 & i2.2,
':',2x,i0,
'x',i0,
'x',i0,2x,
'tiling: ',i0,
'x',i0, &
263 & /,/,5x,
'tile',10x,
'Dynamic',8x,
'Automatic', &
266 & 6x,
'MPI-Buffers', &
270 10
FORMAT (/,
' Dynamic and Automatic memory (MB) usage for Grid ', &
271 & i2.2,
':',2x,i0,
'x',i0,2x,
'tiling: ',i0,
'x',i0, &
272 & /,/,5x,
'tile',10x,
'Dynamic',8x,
'Automatic', &
275 & 6x,
'MPI-Buffers', &
279 20
FORMAT (4x,i5,4(4x,f13.2))
280 30
FORMAT (/,4x,a,4(4x,f13.2))