diff --git a/m_fdm_calc.f90 b/m_fdm_calc.f90 index 8004adc..13ab743 100644 --- a/m_fdm_calc.f90 +++ b/m_fdm_calc.f90 @@ -15,10 +15,12 @@ module m_fdm_calc integer :: fdmcyc,fdmsavecount real*8 :: fdmtime,fdmdt real*8 :: sumc,oldsumc,time_int,sum_wrate + real*8 :: sumc1,sum_wrate1 real*8 :: visdt, convdt integer :: fdmstep real*8 :: coe,tt1,tt2,tt3,tt4 real*8 :: umax,umin,vmax,vmin,wmax,wmin ! J. Kwon + real*8, dimension(3) :: velmax, velmin, velmax1, velmin1 !=========================================================================== !=========================================================================== @@ -48,23 +50,26 @@ module m_fdm_calc integer :: i,j,ii,k real*8 :: fl_location,wrate,yr,c real*8 :: tar_sumc - - allocate(u_(nx,ny,nz_all)) - allocate(v_(nx,ny,nz_all)) - allocate(w_(nx,ny,nz_all)) - - u_=0.0 - v_=0.0 - w_=0.0 + real*8 :: yy(nx) if (fdm_sw .eq. 0) then return endif + allocate(u_(nx,ny,nz)) + allocate(v_(nx,ny,nz)) + allocate(w_(nx,ny,nz)) + + u_=0.0 + v_=0.0 + w_=0.0 + ! DQ initializing fdmsavecount=1 !FDM save count sum_wrate=0. + sum_wrate1=0. sumc=0. !for adjusting mean velocity + sumc1=0. !for adjusting mean velocity oldsumc=0. time_int=0. visdt=9999. @@ -73,9 +78,9 @@ module m_fdm_calc fdmtime=0. fullsavenum=1000 !full save file - allocate(y1(2,nx,ny,nz_all)) - allocate(y2(2,nx,ny,nz_all)) - allocate(yf(2,nx,ny,nz_all)) + allocate(y1(2,nx,ny,nz)) + allocate(y2(2,nx,ny,nz)) + allocate(yf(2,nx,ny,nz)) y1=0.0 y2=0.0 @@ -90,20 +95,24 @@ module m_fdm_calc !FDM normal start================================== if (restartnum==0) then + if (myid.eq.master) then OPEN(305,FILE='sfield.bin',form='unformatted',status='unknown') DO i=1,nx - READ (305) y1(2,i,1,1) ! Yr + READ (305) yy(i) ! Yr ENDDO CLOSE (305) + end if - in_yr=y1(2,1,1,1) ! inlet_Yr - out_yr=y1(2,nx,1,1) ! outlet_Yr + call MPI_BCAST(yy, nx, MPI_REAL8, 0, MPI_COMM_TASK, mpi_err) + + in_yr=yy(1) ! inlet_Yr + out_yr=yy(nx) ! outlet_Yr do i=1,ny - do j=1,nz_all + do j=1,nz do ii=1,nx y1(1,ii,i,j)=1. ! rho initializing - y1(2,ii,i,j)=y1(2,ii,1,1) ! Yr initializing + y1(2,ii,i,j)=yy(ii) ! Yr initializing enddo enddo enddo @@ -111,7 +120,7 @@ module m_fdm_calc ! flame location setup sum_wrate=0.; sumc=0. - DO ii=1,nz_all + DO ii=1,nz DO j=1,ny DO i=1,nx yr=y1(2,i,j,ii)/y1(1,i,j,ii) @@ -130,19 +139,22 @@ module m_fdm_calc ENDDO ENDDO - sum_wrate=sum_wrate/(hy*hy*ny*nz_all) - write(*,633) sum_wrate + sum_wrate1=sum_wrate/(hy*hy*ny*nz_all) + CALL MPI_ALLREDUCE(sum_wrate1,sum_wrate,1,MPI_REAL8,MPI_SUM,MPI_COMM_TASK,mpi_err) + if (myid.eq.0) write(*,633) sum_wrate fl_location=(hx*(nx-1.))*(1.-(sumc/(nx*ny*nz_all))) - sumc=sumc*(hx*hy*hy)/(hy*(ny-1.)*hy*(ny-1.)) + sumc1=sumc*(hx*hy*hy)/(hy*(ny-1.)*hy*(ny-1.)) + CALL MPI_ALLREDUCE(sumc1,sumc,1,MPI_REAL8,MPI_SUM,MPI_COMM_TASK,mpi_err) oldsumc=sumc - write(*,634) fl_location/(REAL(nx-1)*hx)*100. + if (myid.eq.0) write(*,634) fl_location/(REAL(nx-1)*hx)*100. 633 format (' ** Consumption Speed, Sc = ',f7.4) 634 format (' ** Flame Location = ',f7.3, ' % point of x-domain.') ! Restart setup ================================================================ else + return write (6,*) '********************************************************' write (6,*) ' FDM field is being initialized for restarting.' write (6,457) restartnum @@ -199,11 +211,10 @@ module m_fdm_calc real*8 :: uvel,vvel,wvel ! J. Kwon - return fdmcyc=itime ! Mean velocty setup - do k=1,nz_all + do k=1,nz do i=1,nx do j=1,ny u_(i,j,k)=u_(i,j,k)+dummyu_ @@ -211,31 +222,34 @@ module m_fdm_calc enddo enddo - write(*,*) - write(*,*) '==========================================================' + if (myid.eq.0) write(*,*) + if (myid.eq.0) write(*,*) '==========================================================' - WRITE(*,932) TIME,DT + if (myid.eq.0) WRITE(*,932) TIME,DT 932 format(' Spectral results at time = ',f10.5,', dT = ',f7.5) - write(*,933) dummyu_ + if (myid.eq.0) write(*,933) dummyu_ 933 format(' ** Mean U = ',f7.4) !---------------------------------------------------------------- ! FDM DNS BGN !---------------------------------------------------------------- - umax=-1.0d300;umin=1.0d300;vmax=-1.0d300;vmin=1.0d300;wmax=-1.0d300;wmin=1.0d300 + velmax1(1)=maxval(u_) + velmin1(1)=minval(u_) + velmax1(2)=maxval(v_) + velmin1(2)=minval(v_) + velmax1(3)=maxval(w_) + velmin1(3)=minval(w_) - do k=1,nz_all - do j=1,ny - do i=1,nx - umax=max(umax,u_(i,j,k)) - umin=min(umin,u_(i,j,k)) - vmax=max(vmax,v_(i,j,k)) - vmin=min(vmin,v_(i,j,k)) - wmax=max(wmax,w_(i,j,k)) - wmin=min(wmin,w_(i,j,k)) - enddo - enddo - enddo + ! MPI_REDUCE [uvw](max|min) + CALL MPI_ALLREDUCE(velmax1,velmax,3,MPI_REAL8,MPI_MAX,MPI_COMM_TASK,mpi_err) + CALL MPI_ALLREDUCE(velmin1,velmin,3,MPI_REAL8,MPI_MIN,MPI_COMM_TASK,mpi_err) + + umax=velmax(1) + umin=velmin(1) + vmax=velmax(2) + vmin=velmin(2) + wmax=velmax(3) + wmin=velmin(3) uvel = max(abs(umax), abs(umin)) vvel = max(abs(vmax), abs(vmin)) @@ -248,14 +262,14 @@ module m_fdm_calc fdmdt=min(DT,visdt,convdt) DT=fdmdt - call solve(nx,ny,nz_all,u_,v_,w_,y1,y2,yf) + call solve(nx,ny,nz,u_,v_,w_,y1,y2,yf) fdmtime=time+fdmdt - write(*,'(a30,3x,4f12.7)')' ** DT, visdt, convdt, fdmdt =' , DT,visdt,convdt,fdmdt + if (myid.eq.0) write(*,'(a30,3x,4f12.7)')' ** DT, visdt, convdt, fdmdt =' , DT,visdt,convdt,fdmdt sumc=0. sum_wrate=0. - do k=1,nz_all + do k=1,nz do j=1,ny do i=1,nx yr=y1(2,i,j,k)/y1(1,i,j,k) @@ -272,21 +286,24 @@ module m_fdm_calc enddo enddo + ! Real time results for Sc and flame location. - sum_wrate=sum_wrate/(hy*hy*REAL(ny*nz_all)) - write(*,633) sum_wrate + sum_wrate1=sum_wrate/(hy*hy*REAL(ny*nz_all)) + CALL MPI_ALLREDUCE(sum_wrate1,sum_wrate,1,MPI_REAL8,MPI_SUM,MPI_COMM_TASK,mpi_err) + if (myid.eq.0) write(*,633) sum_wrate 633 format (' ** Consumption Speed, Sc = ',f7.4) fl_location=(hx*REAL(nx-1))*(1.-(sumc/(REAL(nx*ny*nz_all)))) - sumc=sumc*(hx*hy*hy)/(hy*(REAL(ny)-1.)*hy*(REAL(ny)-1.)) - write(*,634) fl_location/(REAL(nx-1)*hx)*100. + sumc1=sumc*(hx*hy*hy)/(hy*(REAL(ny)-1.)*hy*(REAL(ny)-1.)) + CALL MPI_ALLREDUCE(sumc1,sumc,1,MPI_REAL8,MPI_SUM,MPI_COMM_TASK,mpi_err) + if (myid.eq.0) write(*,634) fl_location/(REAL(nx-1)*hx)*100. 634 format (' ** Flame Location = ',f7.3, ' % point of x-domain.') - write(St_data,'(f10.5,10e25.15)')fdmtime,dummyu_,sum_wrate,fl_location/(REAL(nx-1)*hx)*100. + if (myid.eq.0) write(St_data,'(f10.5,10e25.15)')fdmtime,dummyu_,sum_wrate,fl_location/(REAL(nx-1)*hx)*100. ! Control the inflow mean velocity, dummyu_ - write(*,'(a20,2f12.8)') ' ** oldsumc, sumc = ',oldsumc,sumc + if (myid.eq.0) write(*,'(a20,2f12.8)') ' ** oldsumc, sumc = ',oldsumc,sumc if(swadtv.ne.0.and.mod((fdmcyc+1),swadtv).eq.0) then time_int=fdmtime-time_int delu=(sumc-oldsumc)/time_int @@ -300,11 +317,11 @@ module m_fdm_calc ! FDM DNS END !---------------------------------------------------------------------------- - write(*,*) 'Number of whole calculation = ',fdmcyc - write(*,*) '==========================================================' - write(*,*) + if (myid.eq.0) write(*,*) 'Number of whole calculation = ',fdmcyc + if (myid.eq.0) write(*,*) '==========================================================' + if (myid.eq.0) write(*,*) - call write_vel_max ( umax,vmax,wmax,umin,vmin,wmin ) + if (myid.eq.0) call write_vel_max ( umax,vmax,wmax,umin,vmin,wmin ) return @@ -381,30 +398,6 @@ module m_fdm_calc ENDDO ENDDO -!! z-direction - DO j=1,yy - DO i=1,xx - DO k=1,zz - uz(1,k)=r1_(1,i,j,k) ! 1:rho - uz(2,k)=r1_(2,i,j,k)/r1_(1,i,j,k) ! 2:Y - uz(3,k)=uz(1,k)*ww_(i,j,k) ! 3:rho*w - uz(4,k)=uz(3,k)*uz(2,k) ! 4:rho*w*Y - ENDDO - - CALL dfp(zz,hy,uz(1:4,:),duz(1:4,:),4,3) - CALL d2fp(zz,hy,uz(2,:),d2uz(:),1,3) - - DO k=1,zz -! -( d(rho*w)/dz ) - f_(1,i,j,k)=f_(1,i,j,k)-duz(3,k) ! continuity - -! -( d(rho*w*Yr)/dz ) + d(rho*D* d(Yr)/dz)/dz -! = -( d(rho*w*Yr)/dz ) -! + D* (rho* d2(Yr)/dz2 + d(rho)/dz * d(Yr)/dz ) - f_(2,i,j,k)=f_(2,i,j,k)-duz(4,k) + diff*(uz(1,k)*d2uz(k)+duz(1,k)*duz(2,k)) ! species conserv. - ENDDO - ENDDO - ENDDO ! Boundary condition DO k=1,zz diff --git a/main.f90 b/main.f90 index 13c5ac7..3db4169 100644 --- a/main.f90 +++ b/main.f90 @@ -67,10 +67,7 @@ program x_code ! Initializing the LES stuff if (les) call m_les_begin - if (task.eq.'hydro' .and. myid.eq.master) then - call prepare_fdm - end if - call MPI_BARRIER(MPI_COMM_TASK, mpi_err) + call prepare_fdm call stat_main @@ -134,20 +131,7 @@ program x_code if (fdm_sw.ne.0) then ! Reacting !call gather_4 - if (myid.eq.master) then call fdm_exe - do id_to=1,numprocs-1 - call MPI_Isend (dummy, 1, MPI_REAL, id_to, 0, MPI_COMM_TASK, mpi_request, mpi_err) - end do - else - call MPI_Irecv (dummy, 1, MPI_REAL, master, 0, MPI_COMM_TASK, mpi_request, mpi_err) - do - call MPI_Test(mpi_request, flag, mpi_status, mpi_err) - if (flag) exit - call SLEEPQQ (200) - end do - end if - call MPI_BARRIER(MPI_COMM_TASK, mpi_err) endif ! RHS for scalars