📄 test_checkpoint_mpiio.f90
字号:
call amr_1blk_guardcell(mype,iopt,nlayers,l,mype, & & lcc,lfc,lec,lnc, & & l_srl_only,icoord,ldiag) endif else ! no_permanent_guardcells#ifndef NO_PERMANENT_GUARDCELLS facevarx1(:,:,:,:,1) = facevarx(:,:,:,:,l) facevary1(:,:,:,:,1) = facevary(:,:,:,:,l) facevarz1(:,:,:,:,1) = facevarz(:,:,:,:,l)#endif endif ! no_permanent_guardcells if(nodetype(l).eq.1 .or. advance_all_levels) then ilbnd=il_bnd1 iubnd=iu_bnd1 jlbnd=jl_bnd1 jubnd=ju_bnd1 klbnd=kl_bnd1 kubnd=ku_bnd1 if(neigh(1,1,l).le.-20) ilbnd=1+nguard if(neigh(1,2,l).le.-20) iubnd=nxb+nguard if(neigh(1,3,l).le.-20) jlbnd=1+nguard if(neigh(1,4,l).le.-20) jubnd=nyb+nguard if(ndim.eq.3) then if(neigh(1,5,l).le.-20) klbnd=1+nguard if(neigh(1,6,l).le.-20) kubnd=nzb+nguard endif if (.not.l_with_guardcells) then ilbnd = 1+nguard iubnd = nxb+nguard jlbnd = 1+nguard jubnd = nyb+nguard if (ndim == 3) then klbnd = 1+nguard kubnd = nzb+nguard end if end if ione = 1 if(ndim.eq.3) dz = bsize(3,l)/real(nzb) dy = bsize(2,l)/real(nyb) dx = bsize(1,l)/real(nxb) if(mod(nxb,2).eq.1) then if(ndim.eq.3) dz = bsize(3,l)/real(nzb-k3d) dy = bsize(2,l)/real(nyb-1) dx = bsize(1,l)/real(nxb-1) endif! first test facevarx#ifdef FACEX do k=klbnd,kubnd if(ndim.eq.3) z0 = coord(3,l)-.5*(bsize(3,l)+dz) zk = z0 + dz*real(k-nguard) do j=jlbnd,jubnd y0 = coord(2,l)-.5*(bsize(2,l)+dy) yj = y0 + dy*real(j-nguard) do i=ilbnd,iubnd+ione x0 = coord(1,l)-.5*bsize(1,l)-dx xi = x0 + dx*real(i-nguard) value = ax*xi+ay*yj+az*zk do ivar=1,nfacevar v0 = value*real(ivar) if(abs(facevarx1(ivar,i,j,k,1)-v0)>accuracy) then write(*,996) mype,l,ivar,i,j,k, & & facevarx1(ivar,i,j,k,1),v0 print *,' error = ',abs(facevarx1(ivar,i,j,k,1)-v0) ierror_sum = ierror_sum + 1 endif enddo enddo enddo enddo#endif! now test facevary#ifdef FACEY do k=klbnd,kubnd if(ndim.eq.3) z0 = coord(3,l)-.5*(bsize(3,l)+dz) zk = z0 + dz*real(k-nguard) do i=ilbnd,iubnd x0 = coord(1,l)-.5*(bsize(1,l)+dx) xi = x0 + dx*real(i-nguard) do j=jlbnd,jubnd+ione y0 = coord(2,l)-.5*bsize(2,l)-dy yj = y0 + dy*real(j-nguard) value = ax*xi+ay*yj+az*zk do ivar=1,nfacevar v0 = value*real(ivar) if(abs(facevary1(ivar,i,j,k,1)-v0)>accuracy) then write(*,995) mype,l,ivar,i,j,k, & & facevary1(ivar,i,j,k,1),v0 ierror_sum = ierror_sum + 1 endif enddo enddo enddo enddo#endif! finally test facevarz#ifdef FACEZ if (ndim == 3) then do j=jlbnd,jubnd y0 = coord(2,l)-.5*(bsize(2,l)+dy) yj = y0 + dy*real(j-nguard) do i=ilbnd,iubnd x0 = coord(1,l)-.5*(bsize(1,l)+dx) xi = x0 + dx*real(i-nguard) do k=klbnd,kubnd+ione z0 = coord(3,l)-.5*bsize(3,l)-dz zk = z0 + dz*real(k-nguard) value = ax*xi+ay*yj+az*zk do ivar=1,nfacevar v0 = value*real(ivar) if(abs(facevarz1(ivar,i,j,k,1)-v0)>accuracy) then write(*,994) mype,l,ivar,i,j,k, & & facevarz1(ivar,i,j,k,1),v0 ierror_sum = ierror_sum + 1 endif enddo enddo enddo enddo end if#endif endif enddo endif Call MPI_BARRIER(MPI_COMM_WORLD, ierr) enddo Call MPI_BARRIER(MPI_COMM_WORLD, ierr) if(mype.eq.0) write(*,*) 'face var. guard cell test complete.' call amr_1blk_guardcell_reset Call MPI_BARRIER(MPI_COMM_WORLD, ierr) endif end if#endif!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#ifdef EDGES if (nvaredge > 0) then if (ndim == 3) then! test of guardcell for unk_e's (if appropriate) if(mod(nxb,2).eq.0) then iopt = 1 lcc = .false. lfc = .false. lec = .true. lnc = .false. tag_offset = 100 lguard = .true. lprolong = .false. lflux = .false. ledge = .false. lrestrict = .false. lfulltree = .false. call mpi_amr_comm_setup(mype,nprocs, & & lguard,lprolong,lflux,ledge, & & lrestrict,lfulltree, & & iopt,lcc,lfc,lec,lnc,tag_offset) ! test values do ii=0,nprocs-1 if(mype.eq.ii) then do l=1,lnblocks if(nodetype(l).eq.1 .or. advance_all_levels) then if (no_permanent_guardcells) then iopt = 1 nlayers = nguard lcc = .false. lfc = .false. lec = .true. lnc = .false. l_srl_only = .false. icoord = 0 ldiag = .false. ldiag = diagonals call amr_1blk_guardcell(mype,iopt,nlayers,l,mype, & & lcc,lfc,lec,lnc, & & l_srl_only,icoord,ldiag) else ! no_permanent_guardcells#ifndef NO_PERMANENT_GUARDCELLS unk_e_x1(:,:,:,:,1) = unk_e_x(:,:,:,:,l) unk_e_y1(:,:,:,:,1) = unk_e_y(:,:,:,:,l) unk_e_z1(:,:,:,:,1) = unk_e_z(:,:,:,:,l)#endif endif ! no_permanent_guardcells ilbnd=il_bnd1 iubnd=iu_bnd1 jlbnd=jl_bnd1 jubnd=ju_bnd1 klbnd=kl_bnd1 kubnd=ku_bnd1 if(neigh(1,1,l).le.-20) ilbnd=1+nguard if(neigh(1,2,l).le.-20) iubnd=nxb+nguard if(neigh(1,3,l).le.-20) jlbnd=1+nguard if(neigh(1,4,l).le.-20) jubnd=nyb+nguard if(ndim.eq.3) then if(neigh(1,5,l).le.-20) klbnd=1+nguard if(neigh(1,6,l).le.-20) kubnd=nzb+nguard endif if (.not.l_with_guardcells) then ilbnd = 1+nguard iubnd = nxb+nguard jlbnd = 1+nguard jubnd = nyb+nguard if (ndim == 3) then klbnd = 1+nguard kubnd = nzb+nguard end if end if ione = 1 if(ndim.eq.3) dz = bsize(3,l)/real(nzb) dy = bsize(2,l)/real(nyb) dx = bsize(1,l)/real(nxb) if(mod(nxb,2).eq.1) then if(ndim.eq.3) dz = bsize(3,l)/real(nzb-k3d) dy = bsize(2,l)/real(nyb-1) dx = bsize(1,l)/real(nxb-1) endif ! first test unk_e_x#ifdef UNKE_X do k=klbnd,kubnd+ione if(ndim.eq.3) z0 = coord(3,l)-.5*bsize(3,l)-dz zk = z0 + dz*real(k-nguard) do j=jlbnd,jubnd+ione y0 = coord(2,l)-.5*bsize(2,l)-dy yj = y0 + dy*real(j-nguard) do i=ilbnd,iubnd x0 = coord(1,l)-.5*(bsize(1,l)+dx) xi = x0 + dx*real(i-nguard) value = ax*xi+ay*yj+az*zk do ivar=1,nvaredge v0 = value*real(ivar) if(abs(unk_e_x1(ivar,i,j,k,1)-v0)>accuracy) then write(*,990) mype,l,ivar,i,j,k, & & unk_e_x1(ivar,i,j,k,1),v0 ierror_sum = ierror_sum + 1 endif enddo enddo enddo enddo#endif! now test unk_e_y#ifdef UNKE_Y do k=klbnd,kubnd+ione if(ndim.eq.3) z0 = coord(3,l)-.5*bsize(3,l)-dz zk = z0 + dz*real(k-nguard) do i=ilbnd,iubnd+ione x0 = coord(1,l)-.5*bsize(1,l)-dx xi = x0 + dx*real(i-nguard) do j=jlbnd,jubnd y0 = coord(2,l)-.5*(bsize(2,l)+dy) yj = y0 + dy*real(j-nguard) value = ax*xi+ay*yj+az*zk do ivar=1,nvaredge v0 = value*real(ivar) if(abs(unk_e_y1(ivar,i,j,k,1)-v0)>accuracy) then write(*,991) mype,l,ivar,i,j,k, & & unk_e_y1(ivar,i,j,k,1),v0 ierror_sum = ierror_sum + 1 endif enddo enddo enddo enddo#endif ! finally test unk_e_z#ifdef UNKE_Z do j=jlbnd,jubnd+ione y0 = coord(2,l)-.5*bsize(2,l)-dy yj = y0 + dy*real(j-nguard) do i=ilbnd,iubnd+ione x0 = coord(1,l)-.5*bsize(1,l)-dx xi = x0 + dx*real(i-nguard) do k=klbnd,kubnd z0 = coord(3,l)-.5*(bsize(3,l)+dz) zk = z0 + dz*real(k-nguard) value = ax*xi+ay*yj+az*zk do ivar=1,nvaredge v0 = value*real(ivar) if(abs(unk_e_z1(ivar,i,j,k,1)-v0)>accuracy) then write(*,992) mype,l,ivar,i,j,k, & & unk_e_z1(ivar,i,j,k,1),v0 ierror_sum = ierror_sum + 1 endif enddo enddo enddo enddo#endif endif enddo endif Call MPI_BARRIER(MPI_COMM_WORLD, ierr) enddo Call MPI_BARRIER(MPI_COMM_WORLD, ierr) if(mype.eq.0) write(*,*) 'unk_e. guard cell test complete.' call amr_1blk_guardcell_reset Call MPI_BARRIER(MPI_COMM_WORLD, ierr) endif end if end if#endif!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 222 if(mype.eq.0) write(*,*) 'End of automatic testing.' Call MPI_BARRIER(MPI_COMM_WORLD, ierr) call comm_int_sum_to_all(ierror_tot,ierror_sum) Call MPI_BARRIER(MPI_COMM_WORLD, ierr) lmpi = .false. lnperm = .false. ladvanceall = .false. lmpi = .true. if (no_permanent_guardcells) then lnperm = .true. end if if (advance_all_levels) then ladvanceall = .true. end if if(mype.eq.0) then filename = trim(output_dir) // 'test.log' open(unit = 55,file=filename, & & status='unknown',position='append') write(*,*) ' ' write(*,*) ' ' if(ierror_tot.eq.0) then write(*,*) 'No errors detected - Test Successful ' write(55,*) 'No errors detected - ', & & 'Test of checkpoint Successful ', & & ': nprocs ',nprocs,' ndim ',ndim, & & ' noperm ',lnperm,' advanceall ',ladvanceall, & & ' mpi ',lmpi else write(*,*) ierror_tot,' errors detected - Test failed ' write(55,*) ierror_tot,' errors detected - ', & & 'Test of checkpoint failed ', & & ': nprocs ',nprocs,' ndim ',ndim, & & ' noperm ',lnperm,' advanceall ',ladvanceall, & & ' mpi ',lmpi endif close(unit=55) endif Call MPI_BARRIER(MPI_COMM_WORLD, ierr) if(mype.eq.0) write(*,*) 'Start guardcell consistency check.' Call MPI_BARRIER(MPI_COMM_WORLD, ierr)! call guardcell_test(mype) Call MPI_BARRIER(MPI_COMM_WORLD, ierr) if(mype.eq.0) write(*,*) 'Guardcell consistency check done.' Call MPI_BARRIER(MPI_COMM_WORLD, ierr) if(mype.eq.0) write(*,*) 'Start mesh check.' Call MPI_BARRIER(MPI_COMM_WORLD, ierr) call mesh_test(mype) Call MPI_BARRIER(MPI_COMM_WORLD, ierr) if(mype.eq.0) write(*,*) 'Mesh check done.' Call MPI_BARRIER(MPI_COMM_WORLD, ierr) call amr_close() 998 format('u:error proc ',i3,' block l= ',5(2x,i3),2x,f7.4,2x, & & f7.4)997 format('w:error proc ',i3,' block l= ',4(2x,i3),2x,f7.4,2x, & & f7.4)996 format('fx:error proc ',i3,' block l= ',5(2x,i3),2x,e10.4,2x, & & e10.4)995 format('fy:error proc ',i3,' block l= ',5(2x,i3),2x,f7.4,2x, & & f7.4)994 format('fz:error proc ',i3,' block l= ',5(2x,i3),2x,f7.4,2x, & & f7.4)993 format('n:error proc ',i3,' block l= ',5(2x,i3),2x,f7.4,2x, & & f7.4)992 format('ez:error proc ',i3,' block l= ',5(2x,i3),2x,f7.4,2x, & & f7.4)991 format('ey:error proc ',i3,' block l= ',5(2x,i3),2x,f7.4,2x, & & f7.4)990 format('ex:error proc ',i3,' block l= ',5(2x,i3),2x,f7.4,2x, & & f7.4)#ifdef LIBRARY deallocate(tnewchild) deallocate(rflags)#endif end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -