Newer
Older
!------------------------------------------------------------------------------|
!------------------------------------------------------------------------------|
! |
! ||===\\ |
! || \\ |
! || || //==\\ || || //==|| ||/==\\ |
! || || || || || || || || || || |
! || // || || || || || || || |
! ||===// \\==// \\==\\ \\==\\ || |
! |
!------------------------------------------------------------------------------|
!------------------------------------------------------------------------------|
! |
! WRITE_GLOBAL_OUTPUT Nov. 2006 |
! |
!------------------------------------------------------------------------------|
!------------------------------------------------------------------------------|
subroutine write_global_output (params,istep,iter,current_time,osolve,ov, &
vo,surface,cl,bcdef,nest,density_str,outputtype)
!------------------------------------------------------------------------------|
!(((((((((((((((( Purpose of the routine ))))))))))))))))))))))))))))))))))))))
!------------------------------------------------------------------------------|
! subroutine to generate large global output files in subdirectory OUT
! the files contain:
! - array lengths
! - nodal values
! - icon array
! - octree array
! - bad faces array
! - void arrays
! - surface information
! istep is time step
! osolve is solve octree
! surface are surfaces
! ns is number of surfaces
! see code for details and order of output
! Note that if you modify this routine, you may also need to modify
! define_ov.f90, define_cloud.f90, define_surface.f90 and VTK/post.f90
!------------------------------------------------------------------------------|
!(((((((((((((((( declaration of the subroutine arguments ))))))))))))))))))))
!------------------------------------------------------------------------------|
use definitions
!use mpi
include 'mpif.h'
type (parameters) params
integer istep,iter
double precision current_time
type (octreesolve) osolve
type (octreev) ov
type (void) vo
type (sheet) surface(params%ns)
type (cloud) cl
type (bc_definition) bcdef
type (string) :: density_str(2**params%levelmax_oct,2**params%levelmax_oct)
character*5 outputtype
!------------------------------------------------------------------------------|
!(((((((((((((((( declaration of the subroutine internal variables )))))))))))))
!------------------------------------------------------------------------------|
integer i,j,is,k,err,size_str(2),stat
integer iproc,nproc,ierr,prevstep
character*4 cistep,citer,cprevstep
!------------------------------------------------------------------------------|
!------------------------------------------------------------------------------|
call mpi_comm_size (mpi_comm_world,nproc,ierr)
call mpi_comm_rank (mpi_comm_world,iproc,ierr)
if (iproc.eq.0) then
outdir=nest%ssoutdir
call int_to_char (cistep,4,istep)
select case (outputtype)
case ('debug')
call int_to_char (citer,4,iter)
Dave Whipp
committed
open (9,file=trim(outdir)//'/time_'//cistep//'_'//citer//'.bin',status='unknown',form='unformatted')
Dave Whipp
committed
open (9,file=trim(outdir)//'/time_'//cistep//'.bin',status='unknown',form='unformatted')
! open (1234,file='OUT/time_'//cistep//'.dat',status='replace')
case default
call stop_run ('pb with argument in write_global_output$')
end select
! write version number
write (9) params%vermajor,params%verminor,params%verstat,params%verrev
! write optional output flags
write (9) params%isostasy,(params%isobc .and. params%isostasy),params%nest, &
params%compaction
Dave Whipp
committed
write (9) osolve%octree(3),osolve%nnode,osolve%nleaves,osolve%nface, &
osolve%nlsf,cl%np,current_time
! write info on octree solve nodes (x,y,z,u,v,w,lsf,temp)
Dave Whipp
committed
write (9) osolve%x
write (9) osolve%y
write (9) osolve%z*params%vex
write (9) osolve%u
write (9) osolve%v
write (9) osolve%w
write (9) osolve%lsf
write (9) osolve%temp
write (9) ov%temporary_nodal_pressure
write (9) osolve%strain
write (9) osolve%kfix
write (9) osolve%kfixt
! write isostasy and compaction output (optional) - dwhipp 07.13
Dave Whipp
committed
if (params%isostasy) write (9) osolve%wiso
if (params%compaction) write (9) osolve%wcompact
Dave Whipp
committed
write (9) osolve%icon
write (9) osolve%pressure
write (9) osolve%spressure
write (9) osolve%crit
write (9) osolve%e2d
write (9) osolve%eviscosity
write (9) osolve%is_plastic
write (9) osolve%dilatr
write (9) osolve%matnum
write (9) osolve%yield_ratio
write (9) osolve%frict_angle
write (9) ov%whole_leaf_in_fluid
! write compaction output (optional) - dwhipp 07.13
Dave Whipp
committed
if (params%compaction) write (9) osolve%compaction_density
Dave Whipp
committed
write (9) osolve%octree
Dave Whipp
committed
write (9) osolve%iface
Dave Whipp
committed
write (9) vo%node
write (9) vo%leaf
write (9) vo%ftr
write (9) vo%rtf
write (9) vo%influid
Dave Whipp
committed
write (9) vo%face
! write surface information (r,s,x,y,z,xn,yn,zn)
do is=1,osolve%nlsf
Dave Whipp
committed
write (9) surface(is)%nsurface,surface(is)%activation_time,surface(is)%nt
select case (outputtype)
case ('debug')
Dave Whipp
committed
write (9) surface(is)%r
write (9) surface(is)%s
write (9) surface(is)%x
write (9) surface(is)%y
write (9) surface(is)%z*params%vex
write (9) surface(is)%xn
write (9) surface(is)%yn
write (9) surface(is)%zn*params%vex
Dave Whipp
committed
write (9) surface(is)%r
write (9) surface(is)%s
write (9) surface(is)%x
write (9) surface(is)%y
write (9) surface(is)%z*params%vex
write (9) surface(is)%xn
write (9) surface(is)%yn
write (9) surface(is)%zn*params%vex
write (9) surface(is)%u
write (9) surface(is)%v
write (9) surface(is)%w
Dave Whipp
committed
write (9) surface(is)%icon
Dave Whipp
committed
write (9) cl%x
write (9) cl%y
write (9) cl%z*params%vex
write (9) cl%x0
write (9) cl%y0
write (9) cl%z0*params%vex
write (9) cl%strain
write (9) cl%lsf0
write (9) cl%temp
write (9) cl%press
write (9) cl%e2dp
write (9) cl%tag
write (9) cl%matnum
write (9) cl%ematnump
! Write isostasy basal displacement array (optional) - dwhipp 07.13
if (params%isostasy .and. params%isobc) then
write (9) 2**params%levelmax_oct
Dave Whipp
committed
write (9) bcdef%zisodisp+surface(osolve%nlsf)%sp01
! else
! write (9) ((0.d0+surface(osolve%nlsf)%sp01,j=1,2**params%levelmax_oct+1), &
! i=1,2**params%levelmax_oct+1)
! write nested model info (optional) - dwhipp 07.13
if (params%nest) then
write(9) nest%sselemx,nest%sselemy,nest%sselemz,nest%xminls,nest%yminls,&
nest%zminls
! else
! write(9) 0.d0,0.d0,0.d0,0.d0,0.d0,0.d0
endif
! write compaction density strings - dwhipp 07.13
if (params%compaction) then
write (9) 2**params%levelmax_oct ! Should test on read that this value is same as current model's val from input file
do j=1,2**params%levelmax_oct
do i=1,2**params%levelmax_oct
size_str=size(density_str(i,j)%density)
write (9) size_str(1)
write (9) density_str(i,j)%density,density_str(i,j)%densityp, &
density_str(i,j)%compactiblep
enddo
enddo
endif
close (9)
!delete file from previous timestep if not marked for permanent save
!mschmiddunser 12.14
if (outputtype=='final') then
prevstep = istep-1
if (prevstep < params%savoffset .AND. prevstep >=0 .OR. &
prevstep >= params%savoffset .AND. (.NOT. mod(prevstep-params%savoffset,params%savstep)==0)) then
call int_to_char (cprevstep,4,prevstep)
open (91,file=trim(outdir)//'/time_'//cprevstep//'.bin',iostat=stat,status='old',form='unformatted')
if (stat.eq.0) close(91, status='delete')
end if
end if
end if
return
end
!------------------------------------------------------------------------------|
!------------------------------------------------------------------------------|