! $Id$
!***********************************************************************
program read_vectorfiles
!
! combine vector files from different processors into one
!
! 8-aug-03/axel: coded
!
use Cparam
use General, only: safe_character_assign,itoa
!
implicit none
!
integer, parameter :: nt=999999,nvecmax=999999
integer :: iproc,ipy,ipz,it,ivec,l,m,n,mm,nn
integer :: lun,lun2=9
real :: t=0.,v1,v2,v3
!
character (len=fnlen) :: fullname=''
character (len=fnlen) :: datadir='data',path=''
character (len=1) :: field='b'
!
! read name of the field (must coincide with file extension)
!
write(*,'(a)',ADVANCE='NO') 'magnetic field (b) or vorticity (o)? '
read*,field
!
! open vector files in all directories
!
do iproc=0,ncpus-1
lun=10+iproc
call safe_character_assign(path,trim(datadir)//'/proc'//itoa(iproc))
call safe_character_assign(fullname,trim(path)//'/'//field//'vec.dat')
open(lun,file=fullname,form='unformatted')
enddo
open(lun2,file='data/'//field//'vec.dat',form='unformatted')
!
! loop over all times
!
do it=1,nt
!
do iproc=0,ncpus-1
lun=10+iproc
!
! position on the processor grid
! x is fastest direction, z slowest
!
ipy = modulo(iproc, nprocy)
ipz = iproc/(nprocy)
!
! make sure the time stamp is repeated only once!
! jump out of the vector-reading loop when next time stamp encountered
!
do ivec=1,nvecmax
read(lun,end=999) l,m,n,v1,v2,v3
mm=m+ipy*ny
nn=n+ipz*nz
if ((l==0.and.iproc==0).or.l>0) write(lun2) l,mm,nn,v1,v2,v3
if (l==0) exit
enddo
if (l>0) print*,'nvecmax is too small!'
t=v1
enddo
print*,'t=',t
enddo
!
999 continue
print*,'finished OK, close files, iproc=',iproc
do iproc=0,ncpus-1
lun=10+iproc
print*,'written full set of slices at t=',t
close(lun)
enddo
close(lun2)
!
end
!***********************************************************************