program xshell_express implicit none integer*4 n1,nat,nm,is,i,ii,j,k,im,jj,imm,jm integer*4 ,allocatable::as(:),asn(:) real*8,allocatable::r(:,:),rn(:,:) real*8 rmax,anm,cm(3),x,y,z character*20 st character*80 s80 if(iargc().ne.3)then write(6,*)'Usage: xshell_express rlim n1 nm' stop else call getarg(1,st) read(st,*)rmax write(6,602)rmax 602 format(' Cut-off distance:',f8.2,' A') call getarg(2,st) read(st,*)n1 call getarg(3,st) read(st,*)nm endif rmax=rmax*rmax anm=dble(nm) open(3,file='FILE.X',status='old') read(3,*) read(3,*)nat close(3) allocate(as(nat),r(nat,3),asn(nat),rn(nat,3)) is=0 imm=0 open(3,file='FILE.X',status='old') open(33,file='RFILE.X') 1 read(3,300,end=999,err=999)s80 300 format(a80) read(3,*,end=999,err=999)nat is=is+1 im=0 do 2 i=1,nat 2 read(3,*)as(i),(r(i,k),k=1,3) c first n1 atoms automatically: do 3 i=1,n1 asn(i)=as(i) do 3 k=1,3 3 rn(i,k)=r(i,k) ii=n1 c inspect the molecules: jm=0 do 4 i=n1+1,nat-nm+1,nm im=im+1 do 51 k=1,3 cm(k)=0.0d0 do 5 j=i,i+nm-1 5 cm(k)=cm(k)+r(j,k) 51 cm(k)=cm(k)/anm do 6 j=1,n1 x=r(j,1) y=r(j,2) z=r(j,3) if((x-cm(1))**2+(y-cm(2))**2+(z-cm(3))**2.lt.rmax)then do 7 jj=i,i+nm-1 ii=ii+1 asn(ii)=as(jj) do 7 k=1,3 7 rn(ii,k)=r(jj,k) jm=jm+1 goto 4 endif 6 continue 4 continue write(33,300)s80 write(33,*)ii do 8 i=1,ii 8 write(33,333)asn(i),(rn(i,k),k=1,3) 333 format(i6,3f12.6) if(jm.gt.imm)imm=jm goto 1 999 close(3) close(33) write(6,6003)is,im,imm 6003 format(/,i4,' structures, ',i3,' molecules,',i4,' maximum left') end