subroutine oligomer implicit none include "DIMENSIONS" include "COMMON.CHAIN" include "COMMON.INTERACT" include "COMMON.IOUNITS" integer nchain,i,ii,ipi,ipj,ipmin,j,jmin,k,ix,iy,iz, & ixmin,iymin,izmin logical newchain integer ichain(2,20),iper(20),iaux double precision dchain,dchainmin,cmchain(3,20) nchain=1 newchain=.false. ichain(1,nchain)=1 do i=2,nres if (itype(i).eq.ntyp1) then if (newchain) then ichain(2,nchain)=i nchain=nchain+1 newchain=.false. else newchain=.true. ichain(1,nchain)=i endif endif enddo ichain(2,nchain)=nres write (iout,*) "Chains" do i=1,nchain write (iout,*) i,ichain(1,i),ichain(2,i) enddo cmchain=0.0d0 do i=1,nchain ii=0 do j=ichain(1,i),ichain(2,i) if (itype(j).eq.ntyp1) cycle ii=ii+1 do k=1,3 cmchain(k,i)=cmchain(k,i)+c(k,j) enddo enddo do k=1,3 cmchain(k,i)=cmchain(k,i)/ii enddo enddo do i=1,nchain iper(i)=i enddo do i=1,nchain dchainmin=1.0d10 do j=i+1,nchain ipi=iper(i) ipj=iper(j) do ix=-1,1 do iy=-1,1 do iz=-1,1 dchain=(cmchain(1,ipj)-cmchain(1,ipi)+ix*boxxsize)**2+ & (cmchain(2,ipj)-cmchain(2,ipi)+iy*boxysize)**2+ & (cmchain(3,ipj)-cmchain(3,ipi)+iz*boxzsize)**2 if (dchain.lt.dchainmin) then dchainmin=dchain ixmin=ix iymin=iy izmin=iz jmin=j endif enddo enddo enddo enddo cmchain(1,jmin)=cmchain(1,jmin)+ixmin*boxxsize cmchain(2,jmin)=cmchain(2,jmin)+iymin*boxysize cmchain(3,jmin)=cmchain(3,jmin)+izmin*boxzsize do k=ichain(1,jmin),ichain(2,jmin) c(1,k)=c(1,k)+ixmin*boxxsize c(2,k)=c(2,k)+iymin*boxysize c(3,k)=c(3,k)+izmin*boxzsize enddo write (iout,*) "jmin",jmin," ixmin",ixmin," iymin",iymin, & " izmin",izmin iaux=iper(i+1) iper(i+1)=iper(jmin) iper(jmin)=iaux enddo return end