blob: 52b630999d4e31c4a1e3da0168927988caa186bc [file] [log] [blame]
c---------------------------------------------------------------------
c---------------------------------------------------------------------
subroutine setup_btio
c---------------------------------------------------------------------
c---------------------------------------------------------------------
include 'header.h'
include 'mpinpb.h'
character*(128) newfilenm
integer m
if (node .lt. 10000) then
write (newfilenm, 996) filenm,node
else
print *, 'error generating file names (> 10000 nodes)'
stop
endif
996 format (a,'.',i4.4)
open (unit=99, file=newfilenm, form='unformatted',
$ status='unknown')
do m = 1, 5
xce_sub(m) = 0.d0
end do
idump_sub = 0
return
end
c---------------------------------------------------------------------
c---------------------------------------------------------------------
subroutine output_timestep
c---------------------------------------------------------------------
c---------------------------------------------------------------------
include 'header.h'
include 'mpinpb.h'
integer ix, iio, jio, kio, cio, aio
do cio=1,ncells
write(99)
$ ((((u(aio,ix, jio,kio,cio),aio=1,5),
$ ix=0, cell_size(1,cio)-1),
$ jio=0, cell_size(2,cio)-1),
$ kio=0, cell_size(3,cio)-1)
enddo
idump_sub = idump_sub + 1
if (rd_interval .gt. 0) then
if (idump_sub .ge. rd_interval) then
rewind(99)
call acc_sub_norms(idump+1)
rewind(99)
idump_sub = 0
endif
endif
return
end
c---------------------------------------------------------------------
c---------------------------------------------------------------------
subroutine acc_sub_norms(idump_cur)
include 'header.h'
include 'mpinpb.h'
integer idump_cur
integer ix, jio, kio, cio, ii, m, ichunk
double precision xce_single(5)
ichunk = idump_cur - idump_sub + 1
do ii=0, idump_sub-1
do cio=1,ncells
read(99)
$ ((((u(m,ix, jio,kio,cio),m=1,5),
$ ix=0, cell_size(1,cio)-1),
$ jio=0, cell_size(2,cio)-1),
$ kio=0, cell_size(3,cio)-1)
enddo
if (node .eq. root) print *, 'Reading data set ', ii+ichunk
call error_norm(xce_single)
do m = 1, 5
xce_sub(m) = xce_sub(m) + xce_single(m)
end do
enddo
return
end
c---------------------------------------------------------------------
c---------------------------------------------------------------------
subroutine btio_cleanup
c---------------------------------------------------------------------
c---------------------------------------------------------------------
close(unit=99)
return
end
c---------------------------------------------------------------------
c---------------------------------------------------------------------
subroutine accumulate_norms(xce_acc)
c---------------------------------------------------------------------
c---------------------------------------------------------------------
include 'header.h'
include 'mpinpb.h'
double precision xce_acc(5)
character*(128) newfilenm
integer m
if (rd_interval .gt. 0) goto 20
if (node .lt. 10000) then
write (newfilenm, 996) filenm,node
else
print *, 'error generating file names (> 10000 nodes)'
stop
endif
996 format (a,'.',i4.4)
open (unit=99, file=newfilenm,
$ form='unformatted')
c clear the last time step
call clear_timestep
c read back the time steps and accumulate norms
call acc_sub_norms(idump)
close(unit=99)
20 continue
do m = 1, 5
xce_acc(m) = xce_sub(m) / dble(idump)
end do
return
end