parameter (maxmodel=20) parameter (maxres=1000) character*32 model(maxmodel) integer imodel(maxmodel) integer ifragpair(maxres,maxmodel,maxmodel), & ifragpair_new(maxres,maxmodel,maxmodel), & iflag(maxres),isumfmax(maxmodel),kmax(maxmodel), & isumf(maxmodel),isumfmaxmin(maxmodel),kmaxmin(maxmodel), & jmaxmin(maxmodel),isump(maxmodel),ifragpair_temp(maxres), & ifragpair_temp1(maxres),ninclust(maxmodel),nlenclust(maxmodel), & icluster(maxmodel,maxmodel),ifrag(maxres,maxmodel) logical overlap nmodel=5 nres=114 ifragpair_new=0 lencut=7 do i=1,nmodel do j=1,nmodel if (i.eq.j) cycle read(*,'(a32,33x,1000i1)')model(i),(ifragpair(k,i,j),k=1,nres) enddo enddo do i=1,nmodel do j=i+1,nmodel write(*,'(2a32,1000i1)')model(i),model(j), & (ifragpair(k,i,j),k=1,nres) enddo enddo isumcut=100 iclust=0 DO WHILE (isumcut.ge.lencut) c search the longest fragment (number 1) iflag=0 isummax=0 nfrag=0 do i=1,nmodel do j=1,i-1 c write(*,'(2a32,1000i1)')model(i),model(j),(ifragpair(k,i,j) c & -ifragpair(k,j,i),k=1,nres) isump=0 do k=1,nres kk = ifragpair(k,i,j) if (kk.gt.0) isump(kk)=isump(kk)+1 if (kk.gt.nfrag) nfrag=kk enddo isum=0 do k=1,nfrag if (isump(k).gt.isum) then isum=isump(k) kk=k endif enddo c write(*,'(2a32,i10)')model(i),model(j),isum if (isum.gt.isummax) then isummax=isum imodel(1)=i imodel(2)=j kfmax=kk endif enddo enddo write (*,*) "nfrag",nfrag," kfmax",kfmax c icut = max0(isummax*2/3,lencut) icut = lencut nflag=2 iflag(imodel(1))=i iflag(imodel(2))=j c write(*,*)"Maximum" c write(*,'(2a32,i10)')model(imodel(1)),model(imodel(2)),isummax overlap=.true. i1 = imodel(1) i2 = imodel(2) isumcut=0 do while (overlap) do i=1,nmodel if (iflag(i).gt.0) cycle do j=1,nflag jj = imodel(j) isumf=0 do k=1,nres kk = ifragpair(k,i,jj) if (ifragpair(k,i1,i2).ne.kfmax .or. kk.eq.0) cycle isumf(kk)=isumf(kk)+1 enddo isumfmax(j)=0 do k=1,nfrag if (isumf(k).gt.isumfmax(j)) then isumfmax(j)=isumf(k) kmax(j)=k endif enddo enddo ! j isumfmaxmin(i)=1000 kmaxmin(i)=0 jmaxmin(i)=0 do j=1,nflag if (isumfmax(j).lt.isumfmaxmin(i)) then isumfmaxmin(i)=isumfmax(j) kmaxmin(i)=kmax(j) jmaxmin(i)=imodel(j) endif enddo enddo ! i isumfmaxminmax=0 kmaxminmax=0 imaxminmax=0 jmaxminmax=0 do i=1,nmodel if (iflag(i).gt.0) cycle if (isumfmaxmin(i).gt.isumfmaxminmax) then isumfmaxminmax=isumfmaxmin(i) imaxminmax=i kmaxminmax=kmaxmin(i) jmaxminmax=jmaxmin(i) endif enddo print *,"isumfmaxminmax",isumfmaxminmax," icut",icut if (isumfmaxminmax.lt.icut) then overlap=.false. else isumcut = isumfmaxminmax iimod=imaxminmax jjmod=jmaxminmax kkmod=kmaxminmax nflag=nflag+1 iflag(imaxminmax)=imaxminmax imodel(nflag)=imaxminmax c write(*,'(2a32,i10)')model(imodel(1)),model(imodel(2)),isummax c write(*,'(1000i1)')(ifragpair(k,imodel(1),imodel(2)),k=1,nres) write(*,*) "isumfmaxminmax",isumfmaxminmax print *,"kmaxminmax",kmaxminmax write(*,'(a32)')(model(imodel(i)),i=1,nflag) write(*,'(1000i1)') & (ifragpair(k,imaxminmax,jmaxminmax),k=1,nres) do k=1,nres ifragpair_temp(k)=ifragpair(k,imaxminmax,jmaxminmax) ifragpair_temp1(k)=ifragpair(k,i1,i2) enddo do i=1,nflag do j=1,i-1 ii = imodel(i) jj = imodel(j) do k=1,nres if (ifragpair_temp(k).eq.kmaxminmax .and. & ifragpair_temp1(k).eq.kfmax) then ifragpair(k,ii,jj)=0 ifragpair(k,jj,ii)=0 endif enddo enddo enddo do i=1,nmodel do j=i+1,nmodel write(*,'(2a32,1000i1)')model(i),model(j), & (ifragpair(k,i,j),k=1,nres) enddo enddo endif enddo ! while print *,"iimod",iimod," jjmod",jjmod," kkmod",kkmod, & " isumcut",isumcut if (isumcut.ge.icut) then nclust=nclust+1 print *,"cluster",nclust ninclust(nclust)=nflag nlenclust(nclust)=isumcut do i=1,nflag icluster(i,nclust)=imodel(i) enddo ii=0 do k=1,nres if (ifragpair_temp(k).eq.kkmod .and. & ifragpair_temp1(k).eq.kfmax) then ii=ii+1 print *,k ifrag(ii,nclust)=k endif enddo if (ii.ne.nlenclust(nclust)) write(*,*) "CHUJ NASTAPIL!!!", & ii,nlenclust(nclust) do i=1,nflag do j=1,i-1 do k=1,nres if (ifragpair_temp(k).eq.kkmod .and. & ifragpair_temp1(k).eq.kfmax) then ifragpair_new(k,imodel(i),imodel(j))=nclust ifragpair_new(k,imodel(j),imodel(i))=nclust endif enddo enddo enddo endif ENDDO ! while do i=1,nmodel do j=i+1,nmodel write(*,'(2a32,1000i1)')model(i),model(j), & (ifragpair_new(k,i,j),k=1,nres) enddo enddo write (*,*) "nclust",nclust do i=1,nclust write(*,*) "Cluster",i," ninclust",ninclust(i) write(*,'(a32)') (model(icluster(j,i)),j=1,ninclust(i)) write(*,'(i5)') (ifrag(j,i),j=1,nlenclust(i)) enddo end