!=============================================================================== !=============================================================================== ! | ! IO_DORURE Apr. 2008 | ! | !=============================================================================== !=============================================================================== subroutine io_DoRuRe2 (params,aktion) use definitions ! when called with the 'init' argument this routine erases all preexisting output files if irestart=0. ! when called with the 'close' argument, it closes some output files that have to remain open all through the run. implicit none type(parameters) params character(*) aktion character*40 :: string character*2 :: cis integer iproc,ierr,is,us !------------------------------------------------------------------------------- !------------------------------------------------------------------------------- INCLUDE 'mpif.h' call mpi_comm_rank (mpi_comm_world,iproc,ierr) if (params%doDoRuRe .and. iproc.eq.0) then if (trim(aktion).eq.'init') then if (params%irestart == 0) then open (8,file='Log.txt',status='replace') open (804,file='./DORURE/p_stats.dat',status='replace') ; close(804) open (805,file='./DORURE/q_stats.dat',status='replace') ; close(805) open (806,file='./DORURE/solver_stats.dat',status='replace') ; close(806) open (807,file='./DORURE/octree_stats.dat',status='replace') ; close(807) open (808,file='./DORURE/levels_stats.dat',status='replace') ; close(808) open (810,file='./DORURE/conv_stats.dat',status='replace') ; close(810) open (811,file='./DORURE/levels_volumes_stats.dat',status='replace') ; close(811) open (812,file='./DORURE/cloud_stats.dat',status='replace') ; close(812) open (815,file='./DORURE/div_stats.dat',status='replace') ; close(815) open (816,file='./DORURE/e2d_stats.dat',status='replace') ; close(816) open (820,file='./DORURE/diag1_stats.dat',status='replace') ; close(820) open (821,file='./DORURE/diag3_stats.dat',status='replace') ; close(821) open (822,file='./DORURE/nelem1_stats.dat',status='replace') ; close(822) open (823,file='./DORURE/nelem3_stats.dat',status='replace') ; close(823) open (826,file='./DORURE/nonlin_stats.dat',status='replace') ; close(826) open (827,file='./DORURE/vel_stats.dat',status='replace') ; close(827) open (828,file='./DORURE/temp_stats.dat',status='replace') ; close(828) open (829,file='./DORURE/e3d_stats.dat',status='replace') ; close(829) open (830,file='./DORURE/dt_stats.dat',status='replace') ; close(830) do is=1,params%ns call int_to_char(cis,2,is) ! us=600+is ! open(us,file='./DORURE/work_'//cis//'_stats.dat',status='replace') ; close(us) ! us=650+is ! open(us,file='./DORURE/vol_'//cis//'_stats.dat',status='replace') ; close(us) us=700+is open(us,file='./DORURE/surf_'//cis//'_stats.dat',status='replace') ; close(us) end do open (99,file='screen.txt',status='replace') else open (8,file='Log.txt',position='append',status='old') open (99,file='screen.txt',position='append',status='old') end if elseif (trim(aktion).eq.'close' ) then close(99) close(8) else call stop_run ('pb in the DoRuRe subroutine') end if end if end subroutine io_DoRuRe2 !=============================================================================== !=============================================================================== ! | ! DORURE_DT_STATS Feb. 2008 | ! | !=============================================================================== !=============================================================================== subroutine DoRuRe_dt_stats (doDoRuRe,istep,dt) implicit none logical doDoRuRe integer istep double precision dt integer ierr, iproc INCLUDE 'mpif.h' call mpi_comm_rank (mpi_comm_world,iproc,ierr) if (doDoRuRe .and. iproc.eq.0) then open (830,file = 'DORURE/dt_stats.dat',& position= 'append', & form = 'formatted', & access = 'sequential', & status = 'old') write(830,'(i9,es11.4)') istep,dt close(830) end if return end subroutine DoRuRe_dt_stats !=============================================================================== !=============================================================================== ! | ! DORURE_CLOUD_STATS Feb. 2008 | ! | !=============================================================================== !=============================================================================== subroutine DoRuRe_cloud_stats (doDoRuRe,istep,iter,clnp,nremove,ninject,s,t,p) implicit none logical doDoRuRe integer istep,iter,clnp,nremove,ninject double precision s(clnp),t(clnp),p(clnp) integer ierr, iproc INCLUDE 'mpif.h' call mpi_comm_rank (mpi_comm_world,iproc,ierr) if (doDoRuRe .and. iproc.eq.0) then open (812,file ='./DORURE/cloud_stats.dat',& position ='append', & form ='formatted', & access ='sequential', & status ='old') write(812,'(es11.4,i10,2i5,9es11.4)') istep+dble(iter)*.01d0,clnp,nremove,ninject, & minval(s),sum(s)/clnp,maxval(s), & minval(t),sum(t)/clnp,maxval(t), & minval(p),sum(p)/clnp,maxval(p) close(812) end if return end subroutine DoRuRe_cloud_stats !=============================================================================== !=============================================================================== ! | ! DORURE_DIAG_STATS Feb. 2008 | ! | !=============================================================================== !=============================================================================== subroutine DoRuRe_diag_stats (doDoRuRe,sizediag,diag,ndof,istep,iter,iter_nl) implicit none logical doDoRuRe integer sizediag double precision diag(sizediag) integer ndof,istep,iter,iter_nl integer ierr,iproc,nproc INCLUDE 'mpif.h' call mpi_comm_rank (mpi_comm_world,iproc,ierr) if (doDoRuRe .and. iproc.eq.0) then if (ndof==1) then open (820,file ='./DORURE/diag1_stats.dat',& position='append', & form ='formatted', & access ='sequential', & status ='old') write(820,'(i5,2f25.8)') istep,minval(diag),maxval(diag) close(820) end if if (ndof==3) then open (821,file ='./DORURE/diag3_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status ='old') write(821,'(3es11.4)') istep+dble(iter)*.01d0+dble(iter_nl)*.0001d0,minval(diag),maxval(diag) close(821) end if end if return end subroutine DoRuRe_diag_stats !=============================================================================== !=============================================================================== ! | ! DORURE_LEAF_STATS Feb. 2008 | ! | !=============================================================================== !=============================================================================== subroutine DoRuRe_leaf_stats (doDoRuRe,nleaves,e2d,e3d,p,q,dilatrtemp,istep,iter,iter_nl) implicit none logical doDoRuRe integer nleaves double precision :: e2d(nleaves),p(nleaves),q(nleaves),e3d(nleaves),dilatrtemp(nleaves) integer istep,iter,iter_nl integer ierr,iproc INCLUDE 'mpif.h' call mpi_comm_rank (mpi_comm_world,iproc,ierr) if (doDoRuRe .and. iproc.eq.0) then open (816,file ='./DORURE/e2d_stats.dat',& position='append', & form ='formatted', & access ='sequential', & status ='old') write(816,'(3es13.4)') istep+dble(iter)*.01d0+dble(iter_nl)*.0001d0,minval(e2d),maxval(e2d) close(816) open (829,file ='./DORURE/e3d_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status ='old') write(829,'(3es13.4)') istep+dble(iter)*.01d0+dble(iter_nl)*.0001d0,minval(e3d),maxval(e3d) close(829) open (804,file ='./DORURE/p_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status ='old') write(804,'(3es13.4)') istep+dble(iter)*.01d0+dble(iter_nl)*.0001d0,minval(p),maxval(p) close(804) open (805,file ='./DORURE/q_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status ='old') write(805,'(3es13.4)') istep+dble(iter)*.01d0+dble(iter_nl)*.0001d0,minval(q),maxval(q) close(805) end if end subroutine DoRuRe_leaf_stats !=============================================================================== !=============================================================================== ! | ! DORURE_NELEM_STATS Feb. 2008 | ! | !=============================================================================== !=============================================================================== subroutine DoRuRe_nelem_stats (doDoRuRe,nbproc,nelem,ndof,nleaves,istep,iter,iter_nl) implicit none logical doDoRuRe integer nbproc,nelem(nbproc),ndof,nleaves,istep,iter,iter_nl integer ierr,iproc,nproc,jproc INCLUDE 'mpif.h' call mpi_comm_size (mpi_comm_world,nproc,ierr) call mpi_comm_rank (mpi_comm_world,iproc,ierr) if (doDoRuRe .and. iproc.eq.0) then if (ndof==1) then open (822,file ='./DORURE/nelem1_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status ='old') write(822,'(3i10)') istep,minval(nelem),maxval(nelem) close(822) end if if (ndof==3) then open (823,file ='./DORURE/nelem3_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status='old') write(823,'(es11.4,2i10)') istep+dble(iter)*.01d0+dble(iter_nl)*.0001d0,minval(nelem),maxval(nelem) close(823) end if write(8,*) '(processor,nb of built elements by this processor):' write(8,*) ('(',jproc,',',nelem(jproc),')',jproc=1,nproc) write(8,*) 'Redundancy ',(float(sum(nelem))/nleaves-1.)*100.,'%' end if return end subroutine DoRuRe_nelem_stats !=============================================================================== !=============================================================================== ! | ! DORURE_SOLVER_STATS Feb. 2008 | ! | !=============================================================================== !=============================================================================== subroutine DoRuRe_solver_stats (doDoRuRe,istep,iter,iter_nl,n,nz,rinfog,infog,time1,time2,time3,nb) implicit none logical doDoRuRe integer istep,iter,iter_nl,nl,n,nz,infog,nb double precision rinfog real time1,time2,time3 integer iproc,ierr INCLUDE 'mpif.h' call mpi_comm_rank (mpi_comm_world,iproc,ierr) if (doDoRuRe .and. iproc.eq.0) then open (806,file ='./DORURE/solver_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status ='old') write(806,'(es11.4,2i10,4es11.4,i9)') istep+dble(iter)*.01d0+dble(iter_nl)*.0001d0,& n,nz, rinfog/1.d9,infog/1073741824.d0*8.d0, & time2-time1,time3-time2,nb close(806) end if end subroutine DoRuRe_solver_stats !=============================================================================== !=============================================================================== ! | ! DORURE_CONV_STATS Feb. 2008 | ! | !=============================================================================== !=============================================================================== subroutine DoRuRe_conv_stats (doDoRuRe,istep,iter,iter_nl,velocity_diff_norm,tol,maxu,maxv,maxw) implicit none logical doDoRuRe integer istep,iter,iter_nl double precision velocity_diff_norm,tol,maxu,maxv,maxw integer iproc,ierr INCLUDE 'mpif.h' call mpi_comm_rank (mpi_comm_world,iproc,ierr) if (doDoRuRe .and. iproc.eq.0) then open (810,file ='./DORURE/conv_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status ='old') write(810,'(6es15.6)') istep+dble(iter)*.01d0+dble(iter_nl)*.0001d0,velocity_diff_norm,tol,maxu,maxv,maxw close(810) end if return end subroutine DoRuRe_conv_stats !=============================================================================== !=============================================================================== ! | ! DORURE_TEMP_STATS Feb. 2008 | ! | !=============================================================================== !=============================================================================== subroutine DoRuRe_temp_stats(doDoRuRe,istep,nnode,temp) implicit none logical doDoRuRe integer istep,nnode double precision temp(nnode) integer iproc,ierr INCLUDE 'mpif.h' call mpi_comm_rank (mpi_comm_world,iproc,ierr) if (doDoRuRe .and. iproc.eq.0) then open (828,file ='./DORURE/temp_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status ='old') write(828,'(i5,2es11.4)') istep,minval(temp),maxval(temp) close(828) end if return end subroutine DoRuRe_temp_stats !=============================================================================== !=============================================================================== ! | ! DORURE_VEL_STATS Feb. 2008 | ! | !=============================================================================== !=============================================================================== subroutine DoRuRe_vel_stats(doDoRuRe,istep,iter,iter_nl,nnode,unode,vnode,wnode) implicit none logical doDoRuRe integer istep,iter,iter_nl,nnode double precision unode(nnode),vnode(nnode),wnode(nnode) integer iproc,ierr INCLUDE 'mpif.h' call mpi_comm_rank (mpi_comm_world,iproc,ierr) if (doDoRuRe .and. iproc.eq.0) then open (827,file ='./DORURE/vel_stats.dat', & position='append', & form='formatted', & access='sequential', & status='old') write(827,'(7es15.5)') istep+iter*0.01d0+iter_nl*0.0001d0, & minval(unode),maxval(unode),& minval(vnode),maxval(vnode),& minval(wnode),maxval(wnode) close(827) end if return end subroutine DoRuRe_vel_stats !=============================================================================== !=============================================================================== ! | ! DORUREE_SURF_STATS Feb. 2008 | ! | !=============================================================================== !=============================================================================== subroutine DoRuRe_surf_stats (doDoRuRe,istep,ref_count,is,nt,nsurface,nedge,nadd) implicit none logical doDoRuRe integer istep,ref_count,is,nt,nsurface,nedge,nadd integer us,iproc,ierr character(len=2) cis INCLUDE 'mpif.h' call mpi_comm_rank (mpi_comm_world,iproc,ierr) if (doDoRuRe .and. iproc.eq.0) then call int_to_char(cis,2,is) us=700+is open(us,file ='./DORURE/surf_'//cis//'_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status ='old') write(us,'(es11.4,4i7)') real(istep)+real(ref_count)/100.d0,nt,nsurface,nedge,nadd close(us) end if return end subroutine DoRuRe_surf_stats !=============================================================================== !=============================================================================== ! | ! DORURE_OCTREE_STATS Feb. 2008 | ! | !=============================================================================== !=============================================================================== subroutine DoRuRe_octree_stats (osolve,params,istep,iter,iter_nl) use definitions implicit none type (octreesolve) osolve type (parameters) params integer istep,iter,iter_nl integer ierr,iproc,i,ie,k,il,nlev,err integer,dimension(:),allocatable::levs integer,dimension(:),allocatable::levelstat double precision phi(8),vol,voltot INCLUDE 'mpif.h' call mpi_comm_rank (mpi_comm_world,iproc,ierr) if (params%doDoRuRe .and. iproc.eq.0) then open (807,file ='./DORURE/octree_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status ='old') write(807,'(es11.4,3i8)') istep+dble(iter)*.01d0+dble(iter_nl)*.0001d0,osolve%nleaves,osolve%nnode,osolve%nface close(807) allocate (levelstat(4:10),stat=err) ; if (err.ne.0) call stop_run ('Error alloc levelstat in write_octree_stats$') allocate (levs(osolve%nleaves),stat=err) ; if (err.ne.0) call stop_run ('Error alloc levs in write_octree_stats$') call octree_find_element_level (osolve%octree,osolve%noctree,levs,osolve%nleaves) levelstat( 4)=count(levs== 4) levelstat( 5)=count(levs== 5) levelstat( 6)=count(levs== 6) levelstat( 7)=count(levs== 7) levelstat( 8)=count(levs== 8) levelstat( 9)=count(levs== 9) levelstat(10)=count(levs==10) voltot=0.d0 do i=1,osolve%nleaves do k=1,8 phi(k)=osolve%lsf(osolve%icon(k,i),1) end do call compute_positive_volume (phi,vol,3) voltot=voltot+vol/(2.d0**levs(i))**3 end do open (808,file ='./DORURE/levels_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status ='old') write(808,'(es11.4,7i7)') istep+dble(iter)*.01d0+dble(iter_nl)*.0001d0,levelstat(4:10) close(808) open (811,file ='./DORURE/levels_volumes_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status ='old') write(811,'(9es11.4)') istep+dble(iter)*.01d0+dble(iter_nl)*.0001d0,(levelstat(i)/8.d0**i,i=4,10),1.d0-voltot close(811) write (8,*) 'Levs',levelstat(4:10) write (8,*) 'Total fluid volume ',1.d0-voltot deallocate (levs) deallocate (levelstat) end if return end subroutine DoRuRe_octree_stats !=============================================================================== !=============================================================================== ! | ! DORURE_DIV_STATS Feb. 2008 | ! | !=============================================================================== !=============================================================================== subroutine DoRuRe_div_stats (doDoRuRe,istep,iter,nleaves,divergence) implicit none logical doDoRuRe integer istep,iter,nleaves double precision divergence(nleaves) integer iproc,ierr INCLUDE 'mpif.h' call mpi_comm_rank (mpi_comm_world,iproc,ierr) if (doDoRuRe .and. iproc.eq.0) then open (815,file ='./DORURE/div_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status ='old') write(815,'(4es13.4)') istep+dble(iter)*.01d0,minval(divergence),sum(divergence)/nleaves,maxval(divergence) close(815) end if end subroutine DoRuRe_div_stats !=============================================================================== !=============================================================================== ! | ! DORURE_NONLIN_STATS Feb. 2008 | ! | !=============================================================================== !=============================================================================== subroutine DoRuRe_nonlin_stats(doDoRuRe,istep,iter,iter_nl) implicit none logical doDoRuRe integer istep,iter,iter_nl integer iproc,ierr INCLUDE 'mpif.h' call mpi_comm_rank (mpi_comm_world,iproc,ierr) if (doDoRuRe .and. iproc.eq.0) then open (826,file ='./DORURE/nonlin_stats.dat', & position='append', & form ='formatted', & access ='sequential', & status ='old') write(826,'(es11.4,i5)') istep+iter/100.d0,iter_nl close(826) end if return end subroutine DoRuRe_nonlin_stats !------------------------------------------------------------------------------| !------------------------------------------------------------------------------|