Skip to content
Snippets Groups Projects
post.f90 58.1 KiB
Newer Older
MODULE definitions

   type structure
      integer,dimension(:),pointer::octree
      integer noctree,nnode,nleaves
      integer nelemr,nlsf 
      double precision,dimension(:),pointer::x,y,z
      double precision,dimension(:),pointer::u,v,w,wiso,temp,pressure,strain
      double precision,dimension(:),pointer::nodal_pressure,spressure
      double precision,dimension(:),pointer::e2d,eviscosity
      double precision,dimension(:),pointer::crit,dilatr,yield_ratio,frict_angle
      integer,dimension(:,:),pointer::icon,iconr
      double precision,dimension(:,:),pointer:: lsf
      integer,dimension(:),pointer::on(:),is_plastic,matnum
      logical, dimension(:), pointer :: whole_leaf_in_fluid
   end type structure

   type sheet
      integer nsurface,nt
      double precision,dimension(:),pointer::r,s,x,y,z,xn,yn,zn,u,v,w
      integer,dimension(:,:),pointer::icon
      integer nhull,levelt,itype,material
   end type sheet

   type cloud
      double precision,dimension(:),pointer::x,y,z,x0,y0,z0,strain,lsf0,temp,press
      integer,dimension(:),pointer::tag
   end type cloud

END MODULE definitions


!==============================================================================!
!==============================================================================!
!                                                                              |
!              ||===\\                                                         | 
!              ||    \\                                                        |
!              ||     ||   //==\\   ||  ||   //==||  ||/==\\                   |
!              ||     ||  ||    ||  ||  ||  ||   ||  ||    ||                  |
!              ||    //   ||    ||  ||  ||  ||   ||  ||                        |
!              ||===//     \\==//    \\==\\  \\==\\  ||                        |
!                                                                              |
!==============================================================================!
!==============================================================================!
!                                                                              |
!              POST PROCESSING    Apr. 2008                                    |
!                                                                              |
!==============================================================================!
!==============================================================================!

program data_postprocessing

use definitions

implicit none

type (sheet),dimension(:),allocatable::surface
type(structure),SAVE :: ov
type(cloud) :: cl
integer :: ie,mer,nn,ner,i,i1,i2,i3,i4,i5,kfx,kfy,kfz,kft
integer :: iunit,ilsf,nne,is,k,npcl,j,np,nl
integer :: output_u_field
integer :: output_v_field
integer :: output_w_field
integer :: output_velo_vect 
integer :: output_preiso_velo_vect 
Dave Whipp's avatar
Dave Whipp committed
integer :: output_iso_velo_vect 
integer :: output_disp_field
integer :: output_press_fieldn 
integer :: output_press_fielde 
integer :: output_smooth_press_fielde
integer :: output_countnode_field
integer :: output_temp_field
integer :: output_elem_matnum
integer :: output_e2d_fielde 
integer :: output_e2d_fieldn
integer :: output_eviscosity_fielde 
integer :: output_is_plastic_fielde
integer :: output_yield_ratio_fielde
integer :: output_frict_angle_fielde
integer :: output_dilatr_fielde
integer :: output_crit_field
integer :: output_strain_field
integer :: output_lsf_field
integer :: output_surface_icon
integer :: output_strain_tensor
integer :: output_ps
integer :: output_cubes
integer :: output_rivers
integer :: output_regular
integer :: output_zisodisp
integer :: output_cloud
integer :: output_cloud0
integer iproc,nproc,ierr,nnn,nnne,nnnep,levelmax,ix,iy,iz,nlinks,iordermin
integer iconmin,iconmax
integer,dimension(:),allocatable::nstrain,donor,order
integer,dimension(:),allocatable::levs,li
integer nz,ni,ijk,ptcnt,nb,dumpi
integer,dimension(:),allocatable::invoid,elvoid,rtf,ftr
integer myicon(100),nstep,ndir,iter,ii,lsf,levmax
integer vermajor,verminor,verstat,verrev
integer input_vermajor,input_verminor
Dave Whipp's avatar
Dave Whipp committed
integer output_vermajor,output_verminor,output_verstat,output_verrev

logical,dimension(:),allocatable::influid,do_it,subset_leaves,instrain
logical :: nest

character clsf*3,c4*4,cc4*4,dir*128
Dave Whipp's avatar
Dave Whipp committed
character cs,nestin

double precision :: eps,dil,current_time,activation_time,zmin,xx,yy,zz,maxe2d,dist
double precision, allocatable, dimension (:) :: ov_nodee2d, ov_nodecrit
double precision, allocatable, dimension (:) :: countnode 
double precision,dimension(:,:),allocatable::s,n1,n2,n3,zisodisp
double precision,dimension(:,:,:),allocatable::strain,strainn
double precision,dimension(:),allocatable::xi,yi,zi,ui,vi,wi,si,ei
double precision,dimension(:),allocatable::s11,s12,s13,s22,s23,s33,str11,str12,str13,str22,str23,str33
double precision,dimension(:),allocatable::azimuth1,azimuth3,dip1,dip3
double precision zmax,dz,l1,l2,l3,n11,n12,n13,n21,n22,n23,n31,n32,n33,con,dxy
Dave Whipp's avatar
Dave Whipp committed
double precision :: sselemx,sselemy,sselemz,xminls,yminls,zminls,usum,vsum,wsum
double precision :: uvwsum,disp,wmod
double precision dxyz,x,y,z,xcut,dumpdp
integer icut 

!==============================================================================!
!==============================================================================!

call system('clear')

nne=8

! vermajor is incremented for major rewrites
! verminor is incremented for significant revisions or changes to the input or
!   output files
! verstat is used to designated the current code status: 0=alpha, 1=beta, 2=rc
!   3=release
! verrev is incremented for minor changes and bugfixes
vermajor=0
verminor=2
verstat=0

write (*,'(a)') '!------------------------------------------------------------------------------|'
write (*,'(a)') '!------------------------------------------------------------------------------|'
write (*,'(a)') '!                                                                              |'
write (*,'(a)') '!          8888888b.   .d88888b.  888     888       d8888 8888888b.            |'
write (*,'(a)') '!          888  "Y88b d88P" "Y88b 888     888      d88888 888   Y88b           |'
write (*,'(a)') '!          888    888 888     888 888     888     d88P888 888    888           |'
write (*,'(a)') '!          888    888 888     888 888     888    d88P 888 888   d88P           |'
write (*,'(a)') '!          888    888 888     888 888     888   d88P  888 8888888P"            |'
write (*,'(a)') '!          888    888 888     888 888     888  d88P   888 888 T88b             |'
write (*,'(a)') '!          888  .d88P Y88b. .d88P Y88b. .d88P d8888888888 888  T88b            |'
write (*,'(a)') '!          8888888P"   "Y88888P"   "Y88888P" d88P     888 888   T88b           |'
write (*,'(a)') '!                                                                              |'
Dave Whipp's avatar
Dave Whipp committed
write (*,'(a,i1,a,i1,a,i1,a,i1,a)') '!                  DOUAR-WSMP post-processor version ',vermajor,'.',verminor,'.',verstat,'.',verrev,'                   |'
write (*,'(a)') '!------------------------------------------------------------------------------|'
write (*,'(a)') '!------------------------------------------------------------------------------|'
Dave Whipp's avatar
Dave Whipp committed
write (*,*) ''
Dave Whipp's avatar
Dave Whipp committed
write (*,'(a)') '1. Please enter the directory name containing DOUAR output.'
write (*,'(a)') '   NOTE: The directory name should be relative to one level above the working'
write (*,'(a)') '   directory. The default value is "OUT" (i.e., "../OUT")'
read (*,'(a)') dir
ndir=len_trim(dir)
if (ndir.eq.0) then
  ndir=3
  dir(1:ndir)='OUT'
endif

Dave Whipp's avatar
Dave Whipp committed
write (*,*) ''
Dave Whipp's avatar
Dave Whipp committed
write (*,'(a)') '2. Please enter the output 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'

Dave Whipp's avatar
Dave Whipp committed
write (*,*) ''
Dave Whipp's avatar
Dave Whipp committed
write (*,'(a)') '3. Is the output file a debug file? ("y" or "n")'
read (*,'(a)') cs
select case (cs)
Dave Whipp's avatar
Dave Whipp committed
case ('y','Y','yes','Yes')
   write (*,'(a)') '3a. Please enter the debug file 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'
Dave Whipp's avatar
Dave Whipp committed
case ('n','N','no','No')
   write (*,'(a)') 'Output file is not a debug file.'
case default 
   write (*,'(a)') 'Error: Response must be either "y" or "n". Please rerun the post-processor.'
Dave Whipp's avatar
Dave Whipp committed
   write (*,'(a)') 'Exiting...'
Dave Whipp's avatar
Dave Whipp committed
write (*,*) ''
Dave Whipp's avatar
Dave Whipp committed
write (*,'(a)') '4. Is this a nested model? ("y" or "n")'
read (*,'(a)') nestin
select case (trim(nestin))
case ('y','Y','yes','Yes')
   nest=.true.
case ('n','N','no','No')
   nest=.false.
case default 
Dave Whipp's avatar
Dave Whipp committed
   write (*,'(a)') 'Error: Response must be either "y" or "n". Please rerun the post-processor.'
   write (*,'(a)') 'Exiting...'
!==============================================================================
!==============================================================================

write(*,'(a)') ''
write(*,'(a)') '**************************************************************************'
write(*,'(a)') '--------------------------------------------------------------------------'
write(*,'(a)') '--------------------------------------------------------------------------'
write(*,'(a)') '------------------- VTK file production in progress ----------------------'
write(*,'(a)') '--------------------------------------------------------------------------'
write(*,'(a)') '--------------------------------------------------------------------------'
if (cs=='y') then
Dave Whipp's avatar
Dave Whipp committed
   write(*,'(a,a,a,a,a,a,a,a,a)') 'Processing output file ', '../'//dir(1:ndir)//'/time_'//c4//'_'//cc4//'.bin'
   open(unit=7,file='../'//dir(1:ndir)//'/time_'//c4//'_'//cc4//'.bin',status='old',form='unformatted')
else
Dave Whipp's avatar
Dave Whipp committed
   write(*,'(a,a,a,a,a,a,a)') 'Processing output file ', '../'//dir(1:ndir)//'/time_'//c4//'.bin'
   open(unit=7,file='../'//dir(1:ndir)//'/time_'//c4//'.bin',status='old',form='unformatted')
end if
write(*,'(a)') '--------------------------------------------------------------------------'
open(unit=77,file='input_of_outputs.txt',status='old')
read(77,*) input_vermajor
read(77,*) input_verminor
write(*,'(a,i1,a,i1)') 'Post-processor input file version ',input_vermajor,'.',input_verminor
if (vermajor/=input_vermajor .or. verminor/=input_verminor) then
  write (*,'(a)') 'Error: Post-processor version and post input file version do not agree.'
  write (*,'(a,i1,a,i1)') 'Post-processor version: ',vermajor,'.',verminor
  write (*,'(a,i1,a,i1)') 'Post input file version: ',input_vermajor,'.',input_verminor
  write (*,'(a)') 'Unable to continue. Exiting.'
  stop
endif
write(*,'(a)') '--------------------------------------------------------------------------'
Dave Whipp's avatar
Dave Whipp committed
read(77,*) output_u_field
read(77,*) output_v_field 
read(77,*) output_w_field
read(77,*) output_velo_vect 
read(77,*) output_preiso_velo_vect 
Dave Whipp's avatar
Dave Whipp committed
read(77,*) output_iso_velo_vect 
read(77,*) output_disp_field 
read(77,*) output_press_fieldn 
read(77,*) output_press_fielde 
read(77,*) output_smooth_press_fielde
read(77,*) output_countnode_field
read(77,*) output_temp_field
read(77,*) output_elem_matnum
read(77,*) output_e2d_fielde 
read(77,*) output_e2d_fieldn
read(77,*) output_eviscosity_fielde 
read(77,*) output_is_plastic_fielde
read(77,*) output_yield_ratio_fielde
read(77,*) output_frict_angle_fielde
read(77,*) output_dilatr_fielde
read(77,*) output_crit_field 
read(77,*) output_strain_field 
read(77,*) output_lsf_field 
read(77,*) output_surface_icon
read(77,*) output_strain_tensor
read(77,*) output_ps
read(77,*) output_cubes
read(77,*) output_rivers
read(77,*) output_regular
read(77,*) output_zisodisp
read(77,*) output_cloud
read(77,*) output_cloud0
Dave Whipp's avatar
Dave Whipp committed
write(*,'(a,l)') 'output u      field       ->',(output_u_field==1)
write(*,'(a,l)') 'output v      field       ->',(output_v_field==1)
write(*,'(a,l)') 'output w      field       ->',(output_w_field==1)
write(*,'(a,l)') 'output velo   vectors     ->',(output_velo_vect==1) 
write(*,'(a,l)') 'output preiso velo vectors->',(output_preiso_velo_vect==1) 
write(*,'(a,l)') 'output iso velo vectors   ->',(output_preiso_velo_vect==1) 
write(*,'(a,l)') 'output disp   field       ->',(output_disp_field==1)
write(*,'(a,l)') 'output node press field   ->',(output_press_fieldn==1) 
write(*,'(a,l)') 'output raw press field    ->',(output_press_fielde==1) 
write(*,'(a,l)') 'output smooth press field ->',(output_smooth_press_fielde==1)
write(*,'(a,l)') 'output countnode field    ->',(output_countnode_field==1)
write(*,'(a,l)') 'output temp   field       ->',(output_temp_field==1)
write(*,'(a,l)') 'output elem material #    ->',(output_elem_matnum==1)
write(*,'(a,l)') 'output elemental e2d field->',(output_e2d_fielde==1) 
write(*,'(a,l)') 'output nodal e2d field    ->',(output_e2d_fieldn==1)
write(*,'(a,l)') 'output elem eff viscosity ->',(output_eviscosity_fielde==1) 
write(*,'(a,l)') 'output element is plastic ->',(output_is_plastic_fielde==1)
write(*,'(a,l)') 'output element yield ratio->',(output_yield_ratio_fielde==1)
write(*,'(a,l)') 'output elem friction angle->',(output_frict_angle_fielde==1)
write(*,'(a,l)') 'output element dilat rate ->',(output_dilatr_fielde==1) 
write(*,'(a,l)') 'output crit   field       ->',(output_crit_field==1)
write(*,'(a,l)') 'output strain field       ->',(output_strain_field==1)
write(*,'(a,l)') 'output lsf    field       ->',(output_lsf_field==1)
write(*,'(a,l)') 'output surfaces icon      ->',(output_surface_icon==1)
write(*,'(a,l)') 'output strain tensor      ->',(output_strain_tensor==1)
write(*,'(a,l)') 'output principal stresses ->',(output_ps==1)
write(*,'(a,l)') 'output elemental fields   ->',(output_cubes==1)
write(*,'(a,l)') 'output rivers             ->',(output_rivers==1)
write(*,'(a,l)') 'output regular            ->',(output_regular==1)
write(*,'(a,l)') 'output zisodisp           ->',(output_zisodisp==1)
write(*,'(a,l)') 'output cloud              ->',(output_cloud==1)
write(*,'(a,l)') 'output cloud0             ->',(output_cloud0==1)
write(*,'(a)') '--------------------------------------------------------------------------'

!==============================================================================!
!==============================================================================!

Dave Whipp's avatar
Dave Whipp committed
read(7) output_vermajor,output_verminor,output_verstat,output_verrev
if (vermajor/=output_vermajor .or. verminor/=output_verminor) then
  write (*,'(a)') 'Error: Post-processor version and DOUAR version do not agree.'
  write (*,'(a,i1,a,i1)') 'Post-processor version: ',vermajor,'.',verminor
  write (*,'(a,i1,a,i1)') 'DOUAR version: ',output_vermajor,'.',output_verminor
  write (*,'(a)') 'Unable to continue. Exiting.'
  stop
Dave Whipp's avatar
Dave Whipp committed
else
  write (*,'(a,i1,a,i1,a,i1,a,i1)') 'Reading output from DOUAR-WSMP v',output_vermajor,'.',output_verminor,'.',output_verstat,'.',output_verrev
Dave Whipp's avatar
Dave Whipp committed
write(*,'(a)') '--------------------------------------------------------------------------'
read (7) ov%noctree,ov%nnode,ov%nleaves,ner,ov%nlsf,npcl,current_time
nn=ov%nnode
allocate(ov%on(nn))
allocate(ov%x(nn),ov%y(nn),ov%z(nn))
allocate(ov%u(nn),ov%v(nn),ov%w(nn),ov%wiso(nn))
allocate(ov%pressure(ov%nleaves),ov%strain(nn))
allocate(ov%e2d(ov%nleaves),ov%eviscosity(ov%nleaves),ov%is_plastic(ov%nleaves))
allocate(ov%dilatr(ov%nleaves),ov%whole_leaf_in_fluid(ov%nleaves))
allocate(ov%crit(ov%nleaves),ov%matnum(ov%nleaves),ov%yield_ratio(ov%nleaves))
allocate(ov%frict_angle(ov%nleaves))
allocate(ov%temp(nn))
allocate(ov%lsf(nn,ov%nlsf))
allocate(influid(nn))
allocate(invoid(nn))
allocate(rtf(nn),ftr(nn),elvoid(nn))
allocate(surface(ov%nlsf))
allocate(ov%nodal_pressure(nn),ov%spressure(ov%nleaves))
allocate(ov%icon(8,ov%nleaves))
allocate(ov%octree(ov%noctree))

!========================
!=====[nodal values]=====
!========================

read(7)(ov%x(i),ov%y(i),ov%z(i),   &
        ov%u(i),ov%v(i),ov%w(i),   &
        ov%wiso(i),                &
        ov%lsf(i,1:ov%nlsf),       &
        ov%temp(i),                &
        ov%nodal_pressure(i),      &
        ov%strain(i),              &
        kfx,kfy,kfz,kft,i=1,nn)

!======================
!=====[icon array]=====
!======================

read(7) (ov%icon(1:8,ie),            &
Loading
Loading full blame...