program checkx implicit none integer*4 i,nat,ni,nj,mi,mj,j,is,iargc real*8 x,y,z,r,rmin,rmax real*8,allocatable::xx(:),yy(:),zz(:) integer*4,allocatable::it(:) character*80 fn write(6,*)'Checks atom distances in .x file' if(iargc().ne.1)then write(6,*)'Usage: checkx ' stop endif call getarg(1,fn) open(9,file=fn) read(9,*) read(9,*)nat allocate(it(nat),xx(nat),yy(nat),zz(nat)) do 1 i=1,nat 1 read(9,*)it(i),xx(i),yy(i),zz(i) close(9) write(6,*)nat,' atoms' is=0 ni=1 nj=1 mi=1 mj=1 if(nat.lt.2)stop rmin=1.0d9 rmax=0.0d0 do 2 i=1,nat x=xx(i) y=yy(i) z=zz(i) do 2 j=i+1,nat r=dsqrt((x-xx(j))**2+(z-zz(j))**2+(y-yy(j))**2) if(r.gt.rmax)then rmax=r mi=i mj=j endif if(r.lt.rmin)then rmin=r ni=i nj=j endif if(r.lt.0.5d0)then is=is+1 write(6,601)i,it(i),j,it(j),r 601 format(' Small distance:',2(i6,'(',i6,')'),f12.6,' !') endif 2 continue write(6,600)mi,it(mi),mj,it(mj),rmax,ni,it(ni),nj,it(nj),rmin 600 format(' Maximum distance:',2(i6,'(',i6,')'),f12.6,/, 1 ' Minimum distance:',2(i6,'(',i6,')'),f12.6,/) if(is.gt.0)write(6,602)is 602 format(i6,' small distancies') end