Skip to content
Snippets Groups Projects
a2b.f90 4.26 KiB
Newer Older
  • Learn to ignore specific revisions
  • program a2b
    
    ! this program transforms the ascii output file from DOUAR
    ! into a binary file that is approximately 4 times smaller
    
    implicit none
    integer ndir,nstep,iter,nn,nsurface,nt,ner,mer,is,ie,i
    character dir*128,c4*4,cs,cc4*4
    integer noctree,nnode,nleaves,nlsf,npcl
    double precision current_time,activation_time
    double precision,dimension(:),allocatable::x,y,z,u,v,w,temp,pressure,strain
    double precision,dimension(:,:),allocatable::lsf
    integer,dimension(:),allocatable::kx,ky,kz,kt
    integer,dimension(:,:),allocatable::icon
    double precision,dimension(:),allocatable::crit,e2d
    logical,dimension(:),allocatable::whole
    integer,dimension(:),allocatable::octree
    integer,dimension(:,:),allocatable::iconr
    logical,dimension(:),allocatable::influid
    integer,dimension(:),allocatable::invoid,elvoid,ftr,rtf
    integer,dimension(:),allocatable::i5
    double precision,dimension(:),allocatable::xn,yn,zn,r,s
    
    print*,'Enter directory (default is OUT)'
    read (*,'(a)') dir
    ndir=len_trim(dir)
    if (ndir.eq.0) then
      ndir=3
      dir(1:ndir)='OUT'
    endif
    
    print*,'Enter time step >'
    read*,nstep
    write (c4,'(i4)') nstep
    if (nstep.lt.1000) c4(1:1)='0'
    if (nstep.lt.100) c4(1:2)='00'
    if (nstep.lt.10) c4(1:3)='000'
    
    print*,'Is it a debug file ? (y or n)'
    read (*,'(a)') cs
    select case (cs)
    case ('y')
       print*,'Which debug file: please enter grid iteration number'
       read*,iter
       write (cc4,'(i4)') iter
       if (iter.lt.1000) cc4(1:1)='0'
       if (iter.lt.100) cc4(1:2)='00'
       if (iter.lt.10) cc4(1:3)='000'
    case ('n')
       print*,'it is not a debug file'
    case default 
       print *,'error: please input y or n'
       stop
    end select
    
    if (cs=='y') then
       write(*,*) 'output file to be processed: ', '../'//dir(1:ndir)//'/time_'//c4//'_'//cc4//'.txt'
       open(unit=7,file='../'//dir(1:ndir)//'/time_'//c4//'_'//cc4//'.txt',status='old')
       open(unit=8,file='../'//dir(1:ndir)//'/time_'//c4//'_'//cc4//'.bin',status='unknown',form='unformatted')
    else
       write(*,*) 'output file to be processed: ', '../'//dir(1:ndir)//'/time_'//c4//'.txt'
       open(unit=7,file='../'//dir(1:ndir)//'/time_'//c4//'.txt',status='old')
       open(unit=8,file='../'//dir(1:ndir)//'/time_'//c4//'.bin',status='unknown',form='unformatted')
    end if
    
    read (7,*) noctree,nnode,nleaves,ner,nlsf,npcl,current_time
    write (8) noctree,nnode,nleaves,ner,nlsf,npcl,current_time
    
    nn=nnode
    
    allocate (x(nn),y(nn),z(nn),u(nn),v(nn),w(nn),lsf(nn,nlsf),temp(nn),pressure(nn),strain(nn))
    allocate (kx(nn),ky(nn),kz(nn),kt(nn))
    read (7,*)(x(i),y(i),z(i),u(i),v(i),w(i),lsf(i,1:nlsf),temp(i),pressure(i),strain(i), &
               kx(i),ky(i),kz(i),kt(i),i=1,nn)
    write (8)(x(i),y(i),z(i),u(i),v(i),w(i),lsf(i,1:nlsf),temp(i),pressure(i),strain(i), &
              kx(i),ky(i),kz(i),kt(i),i=1,nn)
    deallocate (x,y,z,u,v,w,lsf,pressure,temp,strain,kx,ky,kz,kt)
    
    allocate(icon(8,nleaves),crit(nleaves),e2d(nleaves),whole(nleaves))
    read (7,*) (icon(1:8,ie),crit(ie),e2d(ie),whole(ie),ie=1,nleaves)
    write (8) (icon(1:8,ie),crit(ie),e2d(ie),whole(ie),ie=1,nleaves)
    deallocate (icon,crit,e2d,whole)
    
    allocate(octree(noctree))
    read (7,*) (octree(i),i=1,noctree)
    write (8) (octree(i),i=1,noctree)
    deallocate (octree)
    
    mer=ner   ! mer=1
    if(ner.gt.mer)mer=ner
    allocate(iconr(9,mer))
    read (7,*) (iconr(1:9,ie),ie=1,ner)
    write (8) (iconr(1:9,ie),ie=1,ner)
    deallocate (iconr)
    
    allocate (influid(nn),invoid(nn),elvoid(nn),ftr(nn),rtf(nn))
    read (7,*) (invoid(i),elvoid(i),ftr(i),rtf(i),influid(i),i=1,nn)
    write (8) (invoid(i),elvoid(i),ftr(i),rtf(i),influid(i),i=1,nn)
    deallocate (influid,invoid,elvoid,ftr,rtf)
    
    allocate (i5(ner))
    read (7,*) (i5(i),i=1,ner)
    write (8) (i5(i),i=1,ner)
    deallocate (i5)
    
    do is=1,nlsf
       read (7,*) nsurface,activation_time,nt
       write (8) nsurface,activation_time,nt
       allocate (x(nsurface),y(nsurface),z(nsurface),xn(nsurface),yn(nsurface),zn(nsurface))
       allocate (r(nsurface),s(nsurface),u(nsurface),v(nsurface),w(nsurface))
       allocate (icon(3,nt))
    if (cs=='y') then
       read (7,*) (r(i),s(i),x(i),y(i),z(i),xn(i),yn(i),zn(i),i=1,nsurface)
       write (8) (r(i),s(i),x(i),y(i),z(i),xn(i),yn(i),zn(i),i=1,nsurface)
    else
       read (7,*) (r(i),s(i),x(i),y(i),z(i),xn(i),yn(i),zn(i),u(i),v(i),w(i),i=1,nsurface)
       write (8) (r(i),s(i),x(i),y(i),z(i),xn(i),yn(i),zn(i),u(i),v(i),w(i),i=1,nsurface)
    end if
    read (7,*) (icon(1:3,i),i=1,nt)
    write (8) (icon(1:3,i),i=1,nt)
    deallocate (x,y,z,xn,yn,zn,r,s,u,v,w,icon)
    end do
    
    close(7)
    close (8)
    
    end