! $Id$
!
!***********************************************************************
program combine_videofiles
!
! combine slices for two different frequencies and combine
! using a suitable color table layout.
!
! 24-feb-09/axel: adapted from read_videofiles.x
!
use Cparam
use General
!
implicit none
!
real, dimension (nxgrid,nygrid) :: xy,xy1,xy2
real, dimension (nxgrid,nzgrid) :: xz,xz1,xz2
real, dimension (nygrid,nzgrid) :: yz,yz1,yz2
!
integer :: it
integer :: lun0,lun1,lun2
logical :: eof
real :: t,fac1,fac2,maxval1,maxval2
!
character (len=120) :: dir,wfile,rfile1,rfile2
character (len=20) :: field
!
! read name of the field (must coincide with file extension)
!
field = 'Jrad'
write(*,'(a)',ADVANCE='NO') 'enter name of variable (e.g. Jrad): '
read*,field
!
fac1 = 1.0
fac2 = 1.0
! write(*,'(a)',ADVANCE='NO') 'enter two factors for multiplication (e.g. 1.0, 1.0): '
! read*,fac1,fac2 ! [PABourdin] What is this? Please document and fix above question.
!
dir='data/slice_'
dir='data/proc0/slice_'
!
! loop through all times and convert xy, xz, and yz files
! reset the lun to 10 every time. This guarantees unique luns every time round
!
it=0
do while (.true.)
it=it + 1
lun0=0
lun1=10
lun2=20
call safe_character_assign(rfile1,trim(dir)//trim(field)//'1'//'.xy2')
call safe_character_assign(rfile2,trim(dir)//trim(field)//'2'//'.xy2')
call read_slice(trim(rfile1),xy1,nxgrid,nygrid,t,it,lun1,eof); if (eof) exit
call read_slice(trim(rfile2),xy2,nxgrid,nygrid,t,it,lun2,eof); if (eof) exit
maxval1=max(maxval1,maxval(fac1*xy1))
maxval2=max(maxval2,maxval(fac2*xy2))
xy=int(16*fac1*xy1)+16*int(16*fac2*xy2)
xy=16*int(16*fac1*xy1)+int(16*fac2*xy2)
call safe_character_assign(wfile,trim(dir)//trim(field)//'.xy2')
call append_slice(trim(wfile),xy,nxgrid,nygrid,t,it,lun0)
!
call safe_character_assign(rfile1,trim(dir)//trim(field)//'1'//'.xy')
call safe_character_assign(rfile2,trim(dir)//trim(field)//'2'//'.xy')
call read_slice(trim(rfile1),xy1,nxgrid,nygrid,t,it,lun1,eof); if (eof) exit
call read_slice(trim(rfile2),xy2,nxgrid,nygrid,t,it,lun2,eof); if (eof) exit
maxval1=max(maxval1,maxval(fac1*xy1))
maxval2=max(maxval2,maxval(fac2*xy2))
xy=int(16*fac1*xy1)+16*int(16*fac2*xy2)
xy=16*int(16*fac1*xy1)+int(16*fac2*xy2)
call safe_character_assign(wfile,trim(dir)//trim(field)//'.xy')
call append_slice(trim(wfile),xy,nxgrid,nygrid,t,it,lun0)
!
call safe_character_assign(rfile1,trim(dir)//trim(field)//'1'//'.xz')
call safe_character_assign(rfile2,trim(dir)//trim(field)//'2'//'.xz')
call read_slice(trim(rfile1),xz1,nxgrid,nzgrid,t,it,lun1,eof); if (eof) exit
call read_slice(trim(rfile2),xz2,nxgrid,nzgrid,t,it,lun2,eof); if (eof) exit
maxval1=max(maxval1,maxval(fac1*xz1))
maxval2=max(maxval2,maxval(fac2*xz2))
xz=int(16*fac1*xz1)+16*int(16*fac2*xz2)
xz=16*int(16*fac1*xz1)+int(16*fac2*xz2)
call safe_character_assign(wfile,trim(dir)//trim(field)//'.xz')
call append_slice(trim(wfile),xz,nxgrid,nzgrid,t,it,lun0)
!
call safe_character_assign(rfile1,trim(dir)//trim(field)//'1'//'.yz')
call safe_character_assign(rfile2,trim(dir)//trim(field)//'2'//'.yz')
call read_slice(trim(rfile1),yz1,nygrid,nzgrid,t,it,lun1,eof); if (eof) exit
call read_slice(trim(rfile2),yz2,nygrid,nzgrid,t,it,lun2,eof); if (eof) exit
maxval1=max(maxval1,maxval(fac1*yz1))
maxval2=max(maxval2,maxval(fac2*yz2))
yz=int(16*fac1*yz1)+16*int(16*fac2*yz2)
yz=16*int(16*fac1*yz1)+int(16*fac2*yz2)
call safe_character_assign(wfile,trim(dir)//trim(field)//'.yz')
call append_slice(trim(wfile),yz,nygrid,nzgrid,t,it,lun0)
!
enddo
!
print*,'maxval1=',maxval1
print*,'maxval2=',maxval2
end
!***********************************************************************
subroutine read_slice(file,a,ndim1,ndim2,t,it,lun,eof)
!
! read an existing slice file
!
! 12-nov-02/axel: coded
!
integer :: ndim1,ndim2
character (len=*) :: file
real, dimension (ndim1,ndim2) :: a
integer :: it,lun
logical, intent(out) :: eof
real :: t
integer :: io_code
!
eof=.false.
if (it==1) open(lun,file=file,status='old',form='unformatted')
read(lun,iostat=io_code) a,t
if (io_code < 0) then
! end of file
eof=.true.
else
lun=lun+1
endif
!
endsubroutine read_slice
!***********************************************************************
subroutine append_slice(file,a,ndim1,ndim2,t,it,lun)
!
! append to a slice file
!
! 12-nov-02/axel: coded
!
integer :: ndim1,ndim2
character (len=*) :: file
real, dimension (ndim1,ndim2) :: a
integer :: it,lun
real :: t
real, parameter :: pos=0.
!
if (it==1) open(lun,file=file,form='unformatted')
write(lun) a,t,pos
lun=lun+1
!
endsubroutine append_slice
!***********************************************************************