end
- subroutine test_n16
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
-#ifdef MPI
- include 'mpif.h'
-#endif
- include 'COMMON.GEO'
- include 'COMMON.VAR'
- include 'COMMON.INTERACT'
- include 'COMMON.IOUNITS'
- include 'COMMON.DISTFIT'
- include 'COMMON.SBRIDGE'
- include 'COMMON.CONTROL'
- include 'COMMON.FFIELD'
- include 'COMMON.MINIM'
- include 'COMMON.CHAIN'
- double precision time0,time1
- double precision energy(0:n_ene),ee
- double precision var(maxvar),var1(maxvar)
- integer jdata(5)
- logical debug
- debug=.true.
-
-c
- call geom_to_var(nvar,var1)
- call chainbuild
- call etotal(energy(0))
- etot=energy(0)
- write(iout,*) nnt,nct,etot
- call write_pdb(1,'first structure',etot)
- call secondary2(.true.)
-
- do i=1,4
- jdata(i)=bfrag(i,2)
- enddo
-
- DO ij=1,4
- ieval=0
- jdata(5)=ij
- call var_to_geom(nvar,var1)
- write(iout,*) 'N16 test',(jdata(i),i=1,5)
- call beta_slide(jdata(1),jdata(2),jdata(3),jdata(4),jdata(5)
- & ,ieval,ij)
- call geom_to_var(nvar,var)
-
- if (minim) then
-#ifdef MPI
- time0=MPI_WTIME()
-#else
- time0=tcpu()
-#endif
- call minimize(etot,var,iretcode,nfun)
- write(iout,*)'------------------------------------------------'
- write(iout,*)'SUMSL return code is',iretcode,' eval ',nfun,
- & '+ DIST eval',ieval
-#ifdef MPI
- time1=MPI_WTIME()
-#else
- time1=tcpu()
-#endif
- write (iout,'(a,f6.2,f8.2,a)')' Time for full min.',time1-time0,
- & nfun/(time1-time0),' eval/s'
-
- call var_to_geom(nvar,var)
- call chainbuild
- call write_pdb(ij*100+99,'full min',etot)
- endif
-
-
- ENDDO
-
- return
- end
subroutine test_local
end
-c------------------------------------------
- subroutine test11
+c-------------------------------------------------
+
+ subroutine secondary(lprint)
implicit real*8 (a-h,o-z)
include 'DIMENSIONS'
-#ifdef MPI
- include 'mpif.h'
-#endif
- include 'COMMON.GEO'
include 'COMMON.CHAIN'
include 'COMMON.IOUNITS'
- include 'COMMON.VAR'
- include 'COMMON.CONTROL'
- include 'COMMON.SBRIDGE'
- include 'COMMON.FFIELD'
- include 'COMMON.MINIM'
-c
- include 'COMMON.DISTFIT'
- integer if(20,maxres),nif,ifa(20)
- integer ibc(0:maxres,0:maxres),istrand(20)
- integer ibd(maxres),ifb(10,2),nifb,lifb(10),lifb0
- integer itmp(20,maxres)
- double precision time0,time1
- double precision energy(0:n_ene),ee
- double precision varia(maxvar),vorg(maxvar)
-c
- logical debug,ltest,usedbfrag(maxres/3)
- character*50 linia
-c
- integer betasheet(maxres),ibetasheet(maxres),nbetasheet
- integer bstrand(maxres/3,6),nbstrand
+ include 'COMMON.DISTFIT'
-c------------------------
+ integer ncont,icont(2,maxres*maxres/2),isec(maxres,3)
+ logical lprint,not_done
+ real dcont(maxres*maxres/2),d
+ real rcomp /7.0/
+ real rbeta /5.2/
+ real ralfa /5.2/
+ real r310 /6.6/
+ double precision xpi(3),xpj(3)
- debug=.true.
-c------------------------
- nbstrand=0
- nbetasheet=0
- do i=1,nres
- betasheet(i)=0
- ibetasheet(i)=0
- enddo
- call geom_to_var(nvar,vorg)
- call secondary2(debug)
- if (nbfrag.le.1) return
- do i=1,nbfrag
- usedbfrag(i)=.false.
+ call chainbuild
+cd call write_pdb(99,'sec structure',0d0)
+ ncont=0
+ nbfrag=0
+ nhfrag=0
+ do i=1,nres
+ isec(i,1)=0
+ isec(i,2)=0
+ isec(i,3)=0
enddo
-
- nbetasheet=nbetasheet+1
- nbstrand=2
- bstrand(1,1)=bfrag(1,1)
- bstrand(1,2)=bfrag(2,1)
- bstrand(1,3)=nbetasheet
- bstrand(1,4)=1
- bstrand(1,5)=bfrag(1,1)
- bstrand(1,6)=bfrag(2,1)
- do i=bfrag(1,1),bfrag(2,1)
- betasheet(i)=nbetasheet
- ibetasheet(i)=1
- enddo
-c
- bstrand(2,1)=bfrag(3,1)
- bstrand(2,2)=bfrag(4,1)
- bstrand(2,3)=nbetasheet
- bstrand(2,5)=bfrag(3,1)
- bstrand(2,6)=bfrag(4,1)
-
- if (bfrag(3,1).le.bfrag(4,1)) then
- bstrand(2,4)=2
- do i=bfrag(3,1),bfrag(4,1)
- betasheet(i)=nbetasheet
- ibetasheet(i)=2
+ do i=2,nres-3
+ do k=1,3
+ xpi(k)=0.5d0*(c(k,i-1)+c(k,i))
enddo
- else
- bstrand(2,4)=-2
- do i=bfrag(4,1),bfrag(3,1)
- betasheet(i)=nbetasheet
- ibetasheet(i)=2
+ do j=i+2,nres
+ do k=1,3
+ xpj(k)=0.5d0*(c(k,j-1)+c(k,j))
+ enddo
+cd d = (c(1,i)-c(1,j))*(c(1,i)-c(1,j)) +
+cd & (c(2,i)-c(2,j))*(c(2,i)-c(2,j)) +
+cd & (c(3,i)-c(3,j))*(c(3,i)-c(3,j))
+cd print *,'CA',i,j,d
+ d = (xpi(1)-xpj(1))*(xpi(1)-xpj(1)) +
+ & (xpi(2)-xpj(2))*(xpi(2)-xpj(2)) +
+ & (xpi(3)-xpj(3))*(xpi(3)-xpj(3))
+ if ( d.lt.rcomp*rcomp) then
+ ncont=ncont+1
+ icont(1,ncont)=i
+ icont(2,ncont)=j
+ dcont(ncont)=sqrt(d)
+ endif
+ enddo
+ enddo
+ if (lprint) then
+ write (iout,*)
+ write (iout,'(a)') '#PP contact map distances:'
+ do i=1,ncont
+ write (iout,'(3i4,f10.5)')
+ & i,icont(1,i),icont(2,i),dcont(i)
enddo
endif
- iused_nbfrag=1
-
- do while (iused_nbfrag.ne.nbfrag)
-
- do j=2,nbfrag
-
- IF (.not.usedbfrag(j)) THEN
-
- write (*,*) j,(bfrag(i,j),i=1,4)
- do jk=6,1,-1
- write (*,'(i4,a3,10i4)') jk,'B',(bstrand(i,jk),i=1,nbstrand)
- enddo
- write (*,*) '------------------'
+c finding parallel beta
+cd write (iout,*) '------- looking for parallel beta -----------'
+ nbeta=0
+ nstrand=0
+ do i=1,ncont
+ i1=icont(1,i)
+ j1=icont(2,i)
+ if(dcont(i).le.rbeta .and. j1-i1.gt.4 .and.
+ & isec(i1,1).le.1.and.isec(j1,1).le.1.and.
+ & (isec(i1,2).ne.isec(j1,2).or.isec(i1,2)*isec(j1,2).eq.0).and.
+ & (isec(i1,3).ne.isec(j1,3).or.isec(i1,3)*isec(j1,3).eq.0).and.
+ & (isec(i1,2).ne.isec(j1,3).or.isec(i1,2)*isec(j1,3).eq.0).and.
+ & (isec(i1,3).ne.isec(j1,2).or.isec(i1,3)*isec(j1,2).eq.0)
+ & ) then
+ ii1=i1
+ jj1=j1
+cd write (iout,*) i1,j1,dcont(i)
+ not_done=.true.
+ do while (not_done)
+ i1=i1+1
+ j1=j1+1
+ do j=1,ncont
+ if (i1.eq.icont(1,j) .and. j1.eq.icont(2,j)
+ & .and. dcont(j).le.rbeta .and.
+ & isec(i1,1).le.1.and.isec(j1,1).le.1.and.
+ & (isec(i1,2).ne.isec(j1,2).or.isec(i1,2)*isec(j1,2).eq.0).and.
+ & (isec(i1,3).ne.isec(j1,3).or.isec(i1,3)*isec(j1,3).eq.0).and.
+ & (isec(i1,2).ne.isec(j1,3).or.isec(i1,2)*isec(j1,3).eq.0).and.
+ & (isec(i1,3).ne.isec(j1,2).or.isec(i1,3)*isec(j1,2).eq.0)
+ & ) goto 5
+ enddo
+ not_done=.false.
+ 5 continue
+cd write (iout,*) i1,j1,dcont(j),not_done
+ enddo
+ j1=j1-1
+ i1=i1-1
+ if (i1-ii1.gt.1) then
+ ii1=max0(ii1-1,1)
+ jj1=max0(jj1-1,1)
+ nbeta=nbeta+1
+ if(lprint)write(iout,*)'parallel beta',nbeta,ii1,i1,jj1,j1
+ nbfrag=nbfrag+1
+ bfrag(1,nbfrag)=ii1
+ bfrag(2,nbfrag)=i1
+ bfrag(3,nbfrag)=jj1
+ bfrag(4,nbfrag)=j1
- if (bfrag(3,j).le.bfrag(4,j)) then
- do i=bfrag(3,j),bfrag(4,j)
- if(betasheet(i).eq.nbetasheet) then
- in=ibetasheet(i)
- do k=bfrag(3,j),bfrag(4,j)
- betasheet(k)=nbetasheet
- ibetasheet(k)=in
- enddo
- nbstrand=nbstrand+1
- usedbfrag(j)=.true.
- iused_nbfrag=iused_nbfrag+1
- do k=bfrag(1,j),bfrag(2,j)
- betasheet(k)=nbetasheet
- ibetasheet(k)=nbstrand
- enddo
- if (bstrand(in,4).lt.0) then
- bstrand(nbstrand,1)=bfrag(2,j)
- bstrand(nbstrand,2)=bfrag(1,j)
- bstrand(nbstrand,3)=nbetasheet
- bstrand(nbstrand,4)=-nbstrand
- bstrand(nbstrand,5)=bstrand(nbstrand,1)
- bstrand(nbstrand,6)=bstrand(nbstrand,2)
- if(bstrand(in,1).lt.bfrag(4,j)) then
- call bgrow(bstrand,nbstrand,in,1,bfrag(4,j))
- else
- bstrand(nbstrand,5)=bstrand(nbstrand,5)+
- & (bstrand(in,5)-bfrag(4,j))
- endif
- if(bstrand(in,2).gt.bfrag(3,j)) then
- call bgrow(bstrand,nbstrand,in,2,bfrag(3,j))
- else
- bstrand(nbstrand,6)=bstrand(nbstrand,6)-
- & (-bstrand(in,6)+bfrag(3,j))
- endif
- else
- bstrand(nbstrand,1)=bfrag(1,j)
- bstrand(nbstrand,2)=bfrag(2,j)
- bstrand(nbstrand,3)=nbetasheet
- bstrand(nbstrand,4)=nbstrand
- bstrand(nbstrand,5)=bstrand(nbstrand,1)
- bstrand(nbstrand,6)=bstrand(nbstrand,2)
- if(bstrand(in,1).gt.bfrag(3,j)) then
- call bgrow(bstrand,nbstrand,in,1,bfrag(3,j))
- else
- bstrand(nbstrand,5)=bstrand(nbstrand,5)-
- & (-bstrand(in,5)+bfrag(3,j))
- endif
- if(bstrand(in,2).lt.bfrag(4,j)) then
- call bgrow(bstrand,nbstrand,in,2,bfrag(4,j))
- else
- bstrand(nbstrand,6)=bstrand(nbstrand,6)+
- & (bstrand(in,6)-bfrag(4,j))
- endif
- endif
- goto 11
- endif
- if(betasheet(bfrag(1,j)+i-bfrag(3,j)).eq.nbetasheet) then
- in=ibetasheet(bfrag(1,j)+i-bfrag(3,j))
- do k=bfrag(1,j),bfrag(2,j)
- betasheet(k)=nbetasheet
- ibetasheet(k)=in
- enddo
- nbstrand=nbstrand+1
- usedbfrag(j)=.true.
- iused_nbfrag=iused_nbfrag+1
- do k=bfrag(3,1),bfrag(4,1)
- betasheet(k)=nbetasheet
- ibetasheet(k)=nbstrand
- enddo
- if (bstrand(in,4).lt.0) then
- bstrand(nbstrand,1)=bfrag(4,j)
- bstrand(nbstrand,2)=bfrag(3,j)
- bstrand(nbstrand,3)=nbetasheet
- bstrand(nbstrand,4)=-nbstrand
- bstrand(nbstrand,5)=bstrand(nbstrand,1)
- bstrand(nbstrand,6)=bstrand(nbstrand,2)
- if(bstrand(in,1).lt.bfrag(2,j)) then
- call bgrow(bstrand,nbstrand,in,1,bfrag(2,j))
- else
- bstrand(nbstrand,5)=bstrand(nbstrand,5)+
- & (bstrand(in,5)-bfrag(2,j))
- endif
- if(bstrand(in,2).gt.bfrag(1,j)) then
- call bgrow(bstrand,nbstrand,in,2,bfrag(1,j))
- else
- bstrand(nbstrand,6)=bstrand(nbstrand,6)-
- & (-bstrand(in,6)+bfrag(1,j))
- endif
- else
- bstrand(nbstrand,1)=bfrag(3,j)
- bstrand(nbstrand,2)=bfrag(4,j)
- bstrand(nbstrand,3)=nbetasheet
- bstrand(nbstrand,4)=nbstrand
- bstrand(nbstrand,5)=bstrand(nbstrand,1)
- bstrand(nbstrand,6)=bstrand(nbstrand,2)
- if(bstrand(in,1).gt.bfrag(1,j)) then
- call bgrow(bstrand,nbstrand,in,1,bfrag(1,j))
- else
- bstrand(nbstrand,5)=bstrand(nbstrand,5)-
- & (-bstrand(in,5)+bfrag(1,j))
- endif
- if(bstrand(in,2).lt.bfrag(2,j)) then
- call bgrow(bstrand,nbstrand,in,2,bfrag(2,j))
- else
- bstrand(nbstrand,6)=bstrand(nbstrand,6)+
- & (bstrand(in,6)-bfrag(2,j))
- endif
- endif
- goto 11
- endif
- enddo
- else
- do i=bfrag(4,j),bfrag(3,j)
- if(betasheet(i).eq.nbetasheet) then
- in=ibetasheet(i)
- do k=bfrag(4,j),bfrag(3,j)
- betasheet(k)=nbetasheet
- ibetasheet(k)=in
+ do ij=ii1,i1
+ isec(ij,1)=isec(ij,1)+1
+ isec(ij,1+isec(ij,1))=nbeta
enddo
- nbstrand=nbstrand+1
- usedbfrag(j)=.true.
- iused_nbfrag=iused_nbfrag+1
- do k=bfrag(1,j),bfrag(2,j)
- betasheet(k)=nbetasheet
- ibetasheet(k)=nbstrand
+ do ij=jj1,j1
+ isec(ij,1)=isec(ij,1)+1
+ isec(ij,1+isec(ij,1))=nbeta
enddo
- if (bstrand(in,4).lt.0) then
- bstrand(nbstrand,1)=bfrag(1,j)
- bstrand(nbstrand,2)=bfrag(2,j)
- bstrand(nbstrand,3)=nbetasheet
- bstrand(nbstrand,4)=nbstrand
- bstrand(nbstrand,5)=bstrand(nbstrand,1)
- bstrand(nbstrand,6)=bstrand(nbstrand,2)
- if(bstrand(in,1).lt.bfrag(3,j)) then
- call bgrow(bstrand,nbstrand,in,1,bfrag(3,j))
- else
- bstrand(nbstrand,5)=bstrand(nbstrand,5)-
- & (bstrand(in,5)-bfrag(3,j))
- endif
- if(bstrand(in,2).gt.bfrag(4,j)) then
- call bgrow(bstrand,nbstrand,in,2,bfrag(4,j))
- else
- bstrand(nbstrand,6)=bstrand(nbstrand,6)+
- & (-bstrand(in,6)+bfrag(4,j))
- endif
+
+ if(lprint) then
+ nstrand=nstrand+1
+ if (nbeta.le.9) then
+ write(12,'(a18,i1,a9,i3,a2,i3,a1)')
+ & "DefPropRes 'strand",nstrand,
+ & "' 'num = ",ii1-1,"..",i1-1,"'"
else
- bstrand(nbstrand,1)=bfrag(2,j)
- bstrand(nbstrand,2)=bfrag(1,j)
- bstrand(nbstrand,3)=nbetasheet
- bstrand(nbstrand,4)=-nbstrand
- bstrand(nbstrand,5)=bstrand(nbstrand,1)
- bstrand(nbstrand,6)=bstrand(nbstrand,2)
- if(bstrand(in,1).gt.bfrag(4,j)) then
- call bgrow(bstrand,nbstrand,in,1,bfrag(4,j))
- else
- bstrand(nbstrand,5)=bstrand(nbstrand,5)+
- & (-bstrand(in,5)+bfrag(4,j))
- endif
- if(bstrand(in,2).lt.bfrag(3,j)) then
- call bgrow(bstrand,nbstrand,in,2,bfrag(3,j))
- else
- bstrand(nbstrand,6)=bstrand(nbstrand,6)-
- & (bstrand(in,6)-bfrag(3,j))
- endif
+ write(12,'(a18,i2,a9,i3,a2,i3,a1)')
+ & "DefPropRes 'strand",nstrand,
+ & "' 'num = ",ii1-1,"..",i1-1,"'"
endif
- goto 11
- endif
- if(betasheet(bfrag(2,j)-i+bfrag(4,j)).eq.nbetasheet) then
- in=ibetasheet(bfrag(2,j)-i+bfrag(4,j))
- do k=bfrag(1,j),bfrag(2,j)
- betasheet(k)=nbetasheet
- ibetasheet(k)=in
- enddo
- nbstrand=nbstrand+1
- usedbfrag(j)=.true.
- iused_nbfrag=iused_nbfrag+1
- do k=bfrag(4,j),bfrag(3,j)
- betasheet(k)=nbetasheet
- ibetasheet(k)=nbstrand
- enddo
- if (bstrand(in,4).lt.0) then
- bstrand(nbstrand,1)=bfrag(4,j)
- bstrand(nbstrand,2)=bfrag(3,j)
- bstrand(nbstrand,3)=nbetasheet
- bstrand(nbstrand,4)=nbstrand
- bstrand(nbstrand,5)=bstrand(nbstrand,1)
- bstrand(nbstrand,6)=bstrand(nbstrand,2)
- if(bstrand(in,1).lt.bfrag(2,j)) then
- call bgrow(bstrand,nbstrand,in,1,bfrag(2,j))
- else
- bstrand(nbstrand,5)=bstrand(nbstrand,5)-
- & (bstrand(in,5)-bfrag(2,j))
- endif
- if(bstrand(in,2).gt.bfrag(1,j)) then
- call bgrow(bstrand,nbstrand,in,2,bfrag(1,j))
- else
- bstrand(nbstrand,6)=bstrand(nbstrand,6)+
- & (-bstrand(in,6)+bfrag(1,j))
- endif
+ nstrand=nstrand+1
+ if (nbeta.le.9) then
+ write(12,'(a18,i1,a9,i3,a2,i3,a1)')
+ & "DefPropRes 'strand",nstrand,
+ & "' 'num = ",jj1-1,"..",j1-1,"'"
else
- bstrand(nbstrand,1)=bfrag(3,j)
- bstrand(nbstrand,2)=bfrag(4,j)
- bstrand(nbstrand,3)=nbetasheet
- bstrand(nbstrand,4)=-nbstrand
- bstrand(nbstrand,5)=bstrand(nbstrand,1)
- bstrand(nbstrand,6)=bstrand(nbstrand,2)
- if(bstrand(in,1).gt.bfrag(1,j)) then
- call bgrow(bstrand,nbstrand,in,1,bfrag(1,j))
- else
- bstrand(nbstrand,5)=bstrand(nbstrand,5)+
- & (-bstrand(in,5)+bfrag(1,j))
- endif
- if(bstrand(in,2).lt.bfrag(2,j)) then
- call bgrow(bstrand,nbstrand,in,2,bfrag(2,j))
- else
- bstrand(nbstrand,6)=bstrand(nbstrand,6)-
- & (bstrand(in,6)-bfrag(2,j))
- endif
+ write(12,'(a18,i2,a9,i3,a2,i3,a1)')
+ & "DefPropRes 'strand",nstrand,
+ & "' 'num = ",jj1-1,"..",j1-1,"'"
endif
- goto 11
+ write(12,'(a8,4i4)')
+ & "SetNeigh",ii1-1,i1-1,jj1-1,j1-1
+ endif
endif
- enddo
endif
-
-
-
- ENDIF
- enddo
-
- j=2
- do while (usedbfrag(j))
- j=j+1
enddo
-
- nbstrand=nbstrand+1
- nbetasheet=nbetasheet+1
- bstrand(nbstrand,1)=bfrag(1,j)
- bstrand(nbstrand,2)=bfrag(2,j)
- bstrand(nbstrand,3)=nbetasheet
- bstrand(nbstrand,5)=bfrag(1,j)
- bstrand(nbstrand,6)=bfrag(2,j)
-
- bstrand(nbstrand,4)=nbstrand
- do i=bfrag(1,j),bfrag(2,j)
- betasheet(i)=nbetasheet
- ibetasheet(i)=nbstrand
- enddo
-c
- nbstrand=nbstrand+1
- bstrand(nbstrand,1)=bfrag(3,j)
- bstrand(nbstrand,2)=bfrag(4,j)
- bstrand(nbstrand,3)=nbetasheet
- bstrand(nbstrand,5)=bfrag(3,j)
- bstrand(nbstrand,6)=bfrag(4,j)
-
- if (bfrag(3,j).le.bfrag(4,j)) then
- bstrand(nbstrand,4)=nbstrand
- do i=bfrag(3,j),bfrag(4,j)
- betasheet(i)=nbetasheet
- ibetasheet(i)=nbstrand
- enddo
- else
- bstrand(nbstrand,4)=-nbstrand
- do i=bfrag(4,j),bfrag(3,j)
- betasheet(i)=nbetasheet
- ibetasheet(i)=nbstrand
- enddo
- endif
-
- iused_nbfrag=iused_nbfrag+1
- usedbfrag(j)=.true.
+c finding antiparallel beta
+cd write (iout,*) '--------- looking for antiparallel beta ---------'
- 11 continue
- do jk=6,1,-1
- write (*,'(i4,a3,10i4)') jk,'A',(bstrand(i,jk),i=1,nbstrand)
- enddo
-
-
- enddo
-
- do i=1,nres
- if (betasheet(i).ne.0) write(*,*) i,betasheet(i),ibetasheet(i)
- enddo
- write(*,*)
- do j=6,1,-1
- write (*,'(i4,a3,10i4)') j,':',(bstrand(i,j),i=1,nbstrand)
- enddo
-
-c------------------------
- nifb=0
- do i=1,nbstrand
- do j=i+1,nbstrand
- if(iabs(bstrand(i,5)-bstrand(j,5)).le.5 .or.
- & iabs(bstrand(i,6)-bstrand(j,6)).le.5 ) then
- nifb=nifb+1
- ifb(nifb,1)=bstrand(i,4)
- ifb(nifb,2)=bstrand(j,4)
- endif
- enddo
- enddo
-
- write(*,*)
- do i=1,nifb
- write (*,'(a3,20i4)') "ifb",i,ifb(i,1),ifb(i,2)
- enddo
-
- do i=1,nbstrand
- ifa(i)=bstrand(i,4)
- enddo
- write (*,'(a3,20i4)') "ifa",(ifa(i),i=1,nbstrand)
-
- nif=iabs(bstrand(1,6)-bstrand(1,5))+1
- do j=2,nbstrand
- if (iabs(bstrand(j,6)-bstrand(j,5))+1.gt.nif)
- & nif=iabs(bstrand(j,6)-bstrand(j,5))+1
- enddo
-
- write(*,*) nif
- do i=1,nif
- do j=1,nbstrand
- if(j,i)=bstrand(j,6)+(i-1)*sign(1,bstrand(j,5)-bstrand(j,6))
- if (if(j,i).gt.0) then
- if(betasheet(if(j,i)).eq.0 .or.
- & ibetasheet(if(j,i)).ne.iabs(bstrand(j,4))) if(j,i)=0
- else
- if(j,i)=0
- endif
- enddo
- write(*,'(a3,10i4)') 'if ',(if(j,i),j=1,nbstrand)
- enddo
-
-c read (inp,*) (ifa(i),i=1,4)
-c do i=1,nres
-c read (inp,*,err=20,end=20) (if(j,i),j=1,4)
-c enddo
-c 20 nif=i-1
- stop
-c------------------------
-
- isa=4
- is=2*isa-1
- iconf=0
-cccccccccccccccccccccccccccccccccc
- DO ig=1,is**isa-1
-cccccccccccccccccccccccccccccccccc
-
- ii=ig
- do j=1,is
- istrand(is-j+1)=int(ii/is**(is-j))
- ii=ii-istrand(is-j+1)*is**(is-j)
- enddo
- ltest=.true.
- do k=1,isa
- istrand(k)=istrand(k)+1
- if(istrand(k).gt.isa) istrand(k)=istrand(k)-2*isa-1
- enddo
- do k=1,isa
- do l=1,isa
- if(istrand(k).eq.istrand(l).and.k.ne.l.or.
- & istrand(k).eq.-istrand(l).and.k.ne.l) ltest=.false.
- enddo
- enddo
-
- lifb0=1
- do m=1,nifb
- lifb(m)=0
- do k=1,isa-1
- if(
- & ifb(m,1).eq.istrand(k).and.ifb(m,2).eq.istrand(k+1).or.
- & ifb(m,2).eq.istrand(k).and.ifb(m,1).eq.istrand(k+1).or.
- & -ifb(m,1).eq.istrand(k).and.-ifb(m,2).eq.istrand(k+1).or.
- & -ifb(m,2).eq.istrand(k).and.-ifb(m,1).eq.istrand(k+1))
- & lifb(m)=1
- enddo
- lifb0=lifb0*lifb(m)
- enddo
-
- if (mod(isa,2).eq.0) then
- do k=isa/2+1,isa
- if (istrand(k).eq.1) ltest=.false.
- enddo
- else
- do k=(isa+1)/2+1,isa
- if (istrand(k).eq.1) ltest=.false.
- enddo
- endif
-
- IF (ltest.and.lifb0.eq.1) THEN
- iconf=iconf+1
-
- call var_to_geom(nvar,vorg)
-
- write (*,'(i5,i10,10i3)') iconf,ig,(istrand(k),k=1,isa)
- write (iout,'(i5,i10,10i3)') iconf,ig,(istrand(k),k=1,isa)
- write (linia,'(10i3)') (istrand(k),k=1,isa)
-
- do i=1,nres
- do j=1,nres
- ibc(i,j)=0
- enddo
- enddo
-
-
- do i=1,4
- if ( sign(1,istrand(i)).eq.sign(1,ifa(iabs(istrand(i)))) ) then
- do j=1,nif
- itmp(iabs(istrand(i)),j)=if(iabs(ifa(iabs(istrand(i)))),j)
- enddo
- else
- do j=1,nif
- itmp(iabs(istrand(i)),j)=if(iabs(ifa(iabs(istrand(i)))),nif-j+1)
- enddo
- endif
- enddo
-
- do i=1,nif
- write(*,*) (itmp(j,i),j=1,4)
- enddo
-
- do i=1,nif
-c ifa(1),ifa(2),ifa(3),ifa(4)
-c if(1,i),if(2,i),if(3,i),if(4,i)
- do k=1,isa-1
- ltest=.false.
- do m=1,nifb
- if(
- & ifb(m,1).eq.istrand(k).and.ifb(m,2).eq.istrand(k+1).or.
- & ifb(m,2).eq.istrand(k).and.ifb(m,1).eq.istrand(k+1).or.
- & -ifb(m,1).eq.istrand(k).and.-ifb(m,2).eq.istrand(k+1).or.
- & -ifb(m,2).eq.istrand(k).and.-ifb(m,1).eq.istrand(k+1))
- & then
- ltest=.true.
- goto 110
- endif
- enddo
- 110 continue
- if (ltest) then
- ibc(itmp(iabs(istrand(k)),i),itmp(iabs(istrand(k+1)),i))=-1
- else
- ibc(itmp(iabs(istrand(k)),i),itmp(iabs(istrand(k+1)),i))=-2
- endif
-c
- if (k.lt.3)
- & ibc(itmp(iabs(istrand(k)),i),itmp(iabs(istrand(k+2)),i))=-3
- if (k.lt.2)
- & ibc(itmp(iabs(istrand(k)),i),itmp(iabs(istrand(k+3)),i))=-4
- enddo
- enddo
-c------------------------
-
-c
-c freeze sec.elements
-c
- do i=1,nres
- mask(i)=1
- mask_phi(i)=1
- mask_theta(i)=1
- mask_side(i)=1
- enddo
-
- do j=1,nbfrag
- do i=bfrag(1,j),bfrag(2,j)
- mask(i)=0
- mask_phi(i)=0
- mask_theta(i)=0
- enddo
- if (bfrag(3,j).le.bfrag(4,j)) then
- do i=bfrag(3,j),bfrag(4,j)
- mask(i)=0
- mask_phi(i)=0
- mask_theta(i)=0
- enddo
- else
- do i=bfrag(4,j),bfrag(3,j)
- mask(i)=0
- mask_phi(i)=0
- mask_theta(i)=0
- enddo
- endif
- enddo
- do j=1,nhfrag
- do i=hfrag(1,j),hfrag(2,j)
- mask(i)=0
- mask_phi(i)=0
- mask_theta(i)=0
- enddo
- enddo
- mask_r=.true.
-
-c------------------------
-c generate constrains
-c
- nhpb0=nhpb
- call chainbuild
- ind=0
- do i=1,nres-3
- do j=i+3,nres
- ind=ind+1
- if ( ibc(i,j).eq.-1 .or. ibc(j,i).eq.-1) then
- d0(ind)=DIST(i,j)
- w(ind)=10.0
- nhpb=nhpb+1
- ihpb(nhpb)=i
- jhpb(nhpb)=j
- forcon(nhpb)=10.0
- dhpb(nhpb)=d0(ind)
- else if ( ibc(i,j).eq.-2 .or. ibc(j,i).eq.-2) then
- d0(ind)=5.0
- w(ind)=10.0
- nhpb=nhpb+1
- ihpb(nhpb)=i
- jhpb(nhpb)=j
- forcon(nhpb)=10.0
- dhpb(nhpb)=d0(ind)
- else if ( ibc(i,j).eq.-3 .or. ibc(j,i).eq.-3) then
- d0(ind)=11.0
- w(ind)=10.0
- nhpb=nhpb+1
- ihpb(nhpb)=i
- jhpb(nhpb)=j
- forcon(nhpb)=10.0
- dhpb(nhpb)=d0(ind)
- else if ( ibc(i,j).eq.-4 .or. ibc(j,i).eq.-4) then
- d0(ind)=16.0
- w(ind)=10.0
- nhpb=nhpb+1
- ihpb(nhpb)=i
- jhpb(nhpb)=j
- forcon(nhpb)=10.0
- dhpb(nhpb)=d0(ind)
- else if ( ibc(i,j).gt.0 ) then
- d0(ind)=DIST(i,ibc(i,j))
- w(ind)=10.0
- nhpb=nhpb+1
- ihpb(nhpb)=i
- jhpb(nhpb)=j
- forcon(nhpb)=10.0
- dhpb(nhpb)=d0(ind)
- else if ( ibc(j,i).gt.0 ) then
- d0(ind)=DIST(ibc(j,i),j)
- w(ind)=10.0
- nhpb=nhpb+1
- ihpb(nhpb)=i
- jhpb(nhpb)=j
- forcon(nhpb)=10.0
- dhpb(nhpb)=d0(ind)
- else
- w(ind)=0.0
- endif
- dd(ind)=d0(ind)
- enddo
- enddo
- call hpb_partition
-cd--------------------------
-
- write(iout,'(i3,2i4,a3,2i4,f7.2)') (i,ibc(ihpb(i),jhpb(i)),
- & ibc(jhpb(i),ihpb(i)),' --',
- & ihpb(i),jhpb(i),dhpb(i),i=1,nhpb)
-
-cd nhpb=0
-cd goto 901
-c
-c
- call contact_cp_min(varia,ifun,iconf,linia,debug)
- if (minim) then
-#ifdef MPI
- time0=MPI_WTIME()
-#else
- time0=tcpu()
-#endif
- call minimize(etot,varia,iretcode,nfun)
- write(iout,*)'------------------------------------------------'
- write(iout,*)'SUMSL return code is',iretcode,' eval ',nfun,
- & '+ DIST eval',ifun
-#ifdef MPI
- time1=MPI_WTIME()
-#else
- time0=tcpu()
-#endif
- write (iout,'(a,f6.2,f8.2,a)')' Time for full min.',time1-time0,
- & nfun/(time1-time0),' eval/s'
-
- write (linia,'(a10,10i3)') 'full_min',(istrand(k),k=1,isa)
- call var_to_geom(nvar,varia)
- call chainbuild
- call write_pdb(900+iconf,linia,etot)
- endif
-
- call etotal(energy(0))
- etot=energy(0)
- call enerprint(energy(0))
-cd call intout
-cd call briefout(0,etot)
-cd call secondary2(.true.)
-
- 901 CONTINUE
-ctest return
-cccccccccccccccccccccccccccccccccccc
- ENDIF
- ENDDO
-cccccccccccccccccccccccccccccccccccc
-
- return
- 10 write (iout,'(a)') 'Error reading test structure.'
- return
- end
-c--------------------------------------------------------
-
- subroutine test3
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
-#ifdef MPI
- include 'mpif.h'
-#endif
- include 'COMMON.GEO'
- include 'COMMON.CHAIN'
- include 'COMMON.IOUNITS'
- include 'COMMON.VAR'
- include 'COMMON.CONTROL'
- include 'COMMON.SBRIDGE'
- include 'COMMON.FFIELD'
- include 'COMMON.MINIM'
-c
- include 'COMMON.DISTFIT'
- integer if(3,maxres),nif
- integer ibc(maxres,maxres),istrand(20)
- integer ibd(maxres),ifb(10,2),nifb,lifb(10),lifb0
- double precision time0,time1
- double precision energy(0:n_ene),ee
- double precision varia(maxvar)
-c
- logical debug,ltest
- character*50 linia
-c
- do i=1,nres
- read (inp,*,err=20,end=20) if(1,i),if(2,i),if(3,i)
- enddo
- 20 nif=i-1
- write (*,'(a4,3i5)') ('if =',if(1,i),if(2,i),if(3,i),
- & i=1,nif)
-
-
-c------------------------
- call secondary2(debug)
-c------------------------
- do i=1,nres
- do j=1,nres
- ibc(i,j)=0
- enddo
- enddo
-
-c
-c freeze sec.elements and store indexes for beta constrains
-c
- do i=1,nres
- mask(i)=1
- mask_phi(i)=1
- mask_theta(i)=1
- mask_side(i)=1
- enddo
-
- do j=1,nbfrag
- do i=bfrag(1,j),bfrag(2,j)
- mask(i)=0
- mask_phi(i)=0
- mask_theta(i)=0
- enddo
- if (bfrag(3,j).le.bfrag(4,j)) then
- do i=bfrag(3,j),bfrag(4,j)
- mask(i)=0
- mask_phi(i)=0
- mask_theta(i)=0
- ibc(bfrag(1,j)+i-bfrag(3,j),i)=-1
- enddo
- else
- do i=bfrag(4,j),bfrag(3,j)
- mask(i)=0
- mask_phi(i)=0
- mask_theta(i)=0
- ibc(bfrag(2,j)-i+bfrag(4,j),i)=-1
- enddo
- endif
- enddo
- do j=1,nhfrag
- do i=hfrag(1,j),hfrag(2,j)
- mask(i)=0
- mask_phi(i)=0
- mask_theta(i)=0
- enddo
- enddo
- mask_r=.true.
-
-
-c ---------------- test --------------
- do i=1,nif
- if (ibc(if(1,i),if(2,i)).eq.-1) then
- ibc(if(1,i),if(2,i))=if(3,i)
- ibc(if(1,i),if(3,i))=if(2,i)
- else if (ibc(if(2,i),if(1,i)).eq.-1) then
- ibc(if(2,i),if(1,i))=0
- ibc(if(1,i),if(2,i))=if(3,i)
- ibc(if(1,i),if(3,i))=if(2,i)
- else
- ibc(if(1,i),if(2,i))=if(3,i)
- ibc(if(1,i),if(3,i))=if(2,i)
- endif
- enddo
-
- do i=1,nres
- do j=1,nres
- if (ibc(i,j).ne.0) write(*,'(3i5)') i,j,ibc(i,j)
- enddo
- enddo
-c------------------------
- call chainbuild
- ind=0
- do i=1,nres-3
- do j=i+3,nres
- ind=ind+1
- if ( ibc(i,j).eq.-1 ) then
- d0(ind)=DIST(i,j)
- w(ind)=10.0
- nhpb=nhpb+1
- ihpb(nhpb)=i
- jhpb(nhpb)=j
- forcon(nhpb)=10.0
- dhpb(nhpb)=d0(ind)
- else if ( ibc(i,j).gt.0 ) then
- d0(ind)=DIST(i,ibc(i,j))
- w(ind)=10.0
- nhpb=nhpb+1
- ihpb(nhpb)=i
- jhpb(nhpb)=j
- forcon(nhpb)=10.0
- dhpb(nhpb)=d0(ind)
- else if ( ibc(j,i).gt.0 ) then
- d0(ind)=DIST(ibc(j,i),j)
- w(ind)=10.0
- nhpb=nhpb+1
- ihpb(nhpb)=i
- jhpb(nhpb)=j
- forcon(nhpb)=10.0
- dhpb(nhpb)=d0(ind)
- else
- w(ind)=0.0
- endif
- enddo
- enddo
- call hpb_partition
-
-cd--------------------------
- write(*,'(i3,2i4,a3,2i4,f7.2)') (i,ibc(ihpb(i),jhpb(i)),
- & ibc(jhpb(i),ihpb(i)),' --',
- & ihpb(i),jhpb(i),dhpb(i),i=1,nhpb)
-
-
- linia='dist'
- debug=.true.
- in_pdb=7
-c
- call contact_cp_min(varia,ieval,in_pdb,linia,debug)
- if (minim) then
-#ifdef MPI
- time0=MPI_WTIME()
-#else
- time0=tcpu()
-#endif
- call minimize(etot,varia,iretcode,nfun)
- write(iout,*)'------------------------------------------------'
- write(iout,*)'SUMSL return code is',iretcode,' eval ',nfun,
- & '+ DIST eval',ieval
-#ifdef MPI
- time1=MPI_WTIME()
-#else
- time0=tcpu()
-#endif
- write (iout,'(a,f6.2,f8.2,a)')' Time for full min.',time1-time0,
- & nfun/(time1-time0),' eval/s'
-
-
- call var_to_geom(nvar,varia)
- call chainbuild
- call write_pdb(999,'full min',etot)
- endif
-
- call etotal(energy(0))
- etot=energy(0)
- call enerprint(energy(0))
- call intout
- call briefout(0,etot)
- call secondary2(.true.)
-
- return
- 10 write (iout,'(a)') 'Error reading test structure.'
- return
- end
-
-
-
-
- subroutine test__
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
-#ifdef MPI
- include 'mpif.h'
-#endif
- include 'COMMON.GEO'
- include 'COMMON.CHAIN'
- include 'COMMON.IOUNITS'
- include 'COMMON.VAR'
- include 'COMMON.CONTROL'
- include 'COMMON.SBRIDGE'
- include 'COMMON.FFIELD'
- include 'COMMON.MINIM'
-c
- include 'COMMON.DISTFIT'
- integer if(2,2),ind
- integer iff(maxres)
- double precision time0,time1
- double precision energy(0:n_ene),ee
- double precision theta2(maxres),phi2(maxres),alph2(maxres),
- & omeg2(maxres),
- & theta1(maxres),phi1(maxres),alph1(maxres),
- & omeg1(maxres)
- double precision varia(maxvar),varia2(maxvar)
-c
-
-
- read (inp,*,err=10,end=10) if(1,1),if(1,2),if(2,1),if(2,2)
- write (iout,'(a4,4i5)') 'if =',if(1,1),if(1,2),if(2,1),if(2,2)
- read (inp,*,err=10,end=10) (theta2(i),i=3,nres)
- read (inp,*,err=10,end=10) (phi2(i),i=4,nres)
- read (inp,*,err=10,end=10) (alph2(i),i=2,nres-1)
- read (inp,*,err=10,end=10) (omeg2(i),i=2,nres-1)
- do i=1,nres
- theta2(i)=deg2rad*theta2(i)
- phi2(i)=deg2rad*phi2(i)
- alph2(i)=deg2rad*alph2(i)
- omeg2(i)=deg2rad*omeg2(i)
- enddo
- do i=1,nres
- theta1(i)=theta(i)
- phi1(i)=phi(i)
- alph1(i)=alph(i)
- omeg1(i)=omeg(i)
- enddo
-
- do i=1,nres
- mask(i)=1
- enddo
-
-
-c------------------------
- do i=1,nres
- iff(i)=0
- enddo
- do j=1,2
- do i=if(j,1),if(j,2)
- iff(i)=1
- enddo
- enddo
-
- call chainbuild
- call geom_to_var(nvar,varia)
- call write_pdb(1,'first structure',0d0)
-
- call secondary(.true.)
-
- call secondary2(.true.)
-
- do j=1,nbfrag
- if ( (bfrag(3,j).lt.bfrag(4,j) .or.
- & bfrag(4,j)-bfrag(2,j).gt.4) .and.
- & bfrag(2,j)-bfrag(1,j).gt.3 ) then
- nn=nn+1
-
- if (bfrag(3,j).lt.bfrag(4,j)) then
- write(iout,'(a6,i3,a1,i3,a1,i3,a1,i3)')
- & "select",bfrag(1,j)-1,"-",bfrag(2,j)-1
- & ,",",bfrag(3,j)-1,"-",bfrag(4,j)-1
- else
- write(iout,'(a6,i3,a1,i3,a1,i3,a1,i3)')
- & "select",bfrag(1,j)-1,"-",bfrag(2,j)-1
- & ,",",bfrag(4,j)-1,"-",bfrag(3,j)-1
- endif
- endif
- enddo
-
- do i=1,nres
- theta(i)=theta2(i)
- phi(i)=phi2(i)
- alph(i)=alph2(i)
- omeg(i)=omeg2(i)
- enddo
-
- call chainbuild
- call geom_to_var(nvar,varia2)
- call write_pdb(2,'second structure',0d0)
-
-
-
-c-------------------------------------------------------
-
- ifun=-1
- call contact_cp(varia,varia2,iff,ifun,7)
- if (minim) then
-#ifdef MPI
- time0=MPI_WTIME()
-#else
- time0=tcpu()
-#endif
- call minimize(etot,varia,iretcode,nfun)
- write(iout,*)'------------------------------------------------'
- write(iout,*)'SUMSL return code is',iretcode,' eval ',nfun,
- & '+ DIST eval',ifun
-#ifdef MPI
- time1=MPI_WTIME()
-#else
- time1=tcpu()
-#endif
- write (iout,'(a,f6.2,f8.2,a)')' Time for full min.',time1-time0,
- & nfun/(time1-time0),' eval/s'
-
-
- call var_to_geom(nvar,varia)
- call chainbuild
- call write_pdb(999,'full min',etot)
- endif
-
- call etotal(energy(0))
- etot=energy(0)
- call enerprint(energy(0))
- call intout
- call briefout(0,etot)
-
- return
- 10 write (iout,'(a)') 'Error reading test structure.'
- return
- end
-
-c-------------------------------------------------
-c-------------------------------------------------
-
- subroutine secondary(lprint)
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
- include 'COMMON.CHAIN'
- include 'COMMON.IOUNITS'
- include 'COMMON.DISTFIT'
-
- integer ncont,icont(2,maxres*maxres/2),isec(maxres,3)
- logical lprint,not_done
- real dcont(maxres*maxres/2),d
- real rcomp /7.0/
- real rbeta /5.2/
- real ralfa /5.2/
- real r310 /6.6/
- double precision xpi(3),xpj(3)
-
-
-
- call chainbuild
-cd call write_pdb(99,'sec structure',0d0)
- ncont=0
- nbfrag=0
- nhfrag=0
- do i=1,nres
- isec(i,1)=0
- isec(i,2)=0
- isec(i,3)=0
- enddo
-
- do i=2,nres-3
- do k=1,3
- xpi(k)=0.5d0*(c(k,i-1)+c(k,i))
- enddo
- do j=i+2,nres
- do k=1,3
- xpj(k)=0.5d0*(c(k,j-1)+c(k,j))
- enddo
-cd d = (c(1,i)-c(1,j))*(c(1,i)-c(1,j)) +
-cd & (c(2,i)-c(2,j))*(c(2,i)-c(2,j)) +
-cd & (c(3,i)-c(3,j))*(c(3,i)-c(3,j))
-cd print *,'CA',i,j,d
- d = (xpi(1)-xpj(1))*(xpi(1)-xpj(1)) +
- & (xpi(2)-xpj(2))*(xpi(2)-xpj(2)) +
- & (xpi(3)-xpj(3))*(xpi(3)-xpj(3))
- if ( d.lt.rcomp*rcomp) then
- ncont=ncont+1
- icont(1,ncont)=i
- icont(2,ncont)=j
- dcont(ncont)=sqrt(d)
- endif
- enddo
- enddo
- if (lprint) then
- write (iout,*)
- write (iout,'(a)') '#PP contact map distances:'
- do i=1,ncont
- write (iout,'(3i4,f10.5)')
- & i,icont(1,i),icont(2,i),dcont(i)
- enddo
- endif
-
-c finding parallel beta
-cd write (iout,*) '------- looking for parallel beta -----------'
- nbeta=0
- nstrand=0
- do i=1,ncont
- i1=icont(1,i)
- j1=icont(2,i)
- if(dcont(i).le.rbeta .and. j1-i1.gt.4 .and.
- & isec(i1,1).le.1.and.isec(j1,1).le.1.and.
- & (isec(i1,2).ne.isec(j1,2).or.isec(i1,2)*isec(j1,2).eq.0).and.
- & (isec(i1,3).ne.isec(j1,3).or.isec(i1,3)*isec(j1,3).eq.0).and.
- & (isec(i1,2).ne.isec(j1,3).or.isec(i1,2)*isec(j1,3).eq.0).and.
- & (isec(i1,3).ne.isec(j1,2).or.isec(i1,3)*isec(j1,2).eq.0)
- & ) then
- ii1=i1
- jj1=j1
-cd write (iout,*) i1,j1,dcont(i)
- not_done=.true.
- do while (not_done)
- i1=i1+1
- j1=j1+1
- do j=1,ncont
- if (i1.eq.icont(1,j) .and. j1.eq.icont(2,j)
- & .and. dcont(j).le.rbeta .and.
- & isec(i1,1).le.1.and.isec(j1,1).le.1.and.
- & (isec(i1,2).ne.isec(j1,2).or.isec(i1,2)*isec(j1,2).eq.0).and.
- & (isec(i1,3).ne.isec(j1,3).or.isec(i1,3)*isec(j1,3).eq.0).and.
- & (isec(i1,2).ne.isec(j1,3).or.isec(i1,2)*isec(j1,3).eq.0).and.
- & (isec(i1,3).ne.isec(j1,2).or.isec(i1,3)*isec(j1,2).eq.0)
- & ) goto 5
- enddo
- not_done=.false.
- 5 continue
-cd write (iout,*) i1,j1,dcont(j),not_done
- enddo
- j1=j1-1
- i1=i1-1
- if (i1-ii1.gt.1) then
- ii1=max0(ii1-1,1)
- jj1=max0(jj1-1,1)
- nbeta=nbeta+1
- if(lprint)write(iout,*)'parallel beta',nbeta,ii1,i1,jj1,j1
-
- nbfrag=nbfrag+1
- bfrag(1,nbfrag)=ii1
- bfrag(2,nbfrag)=i1
- bfrag(3,nbfrag)=jj1
- bfrag(4,nbfrag)=j1
-
- do ij=ii1,i1
- isec(ij,1)=isec(ij,1)+1
- isec(ij,1+isec(ij,1))=nbeta
- enddo
- do ij=jj1,j1
- isec(ij,1)=isec(ij,1)+1
- isec(ij,1+isec(ij,1))=nbeta
- enddo
-
- if(lprint) then
- nstrand=nstrand+1
- if (nbeta.le.9) then
- write(12,'(a18,i1,a9,i3,a2,i3,a1)')
- & "DefPropRes 'strand",nstrand,
- & "' 'num = ",ii1-1,"..",i1-1,"'"
- else
- write(12,'(a18,i2,a9,i3,a2,i3,a1)')
- & "DefPropRes 'strand",nstrand,
- & "' 'num = ",ii1-1,"..",i1-1,"'"
- endif
- nstrand=nstrand+1
- if (nbeta.le.9) then
- write(12,'(a18,i1,a9,i3,a2,i3,a1)')
- & "DefPropRes 'strand",nstrand,
- & "' 'num = ",jj1-1,"..",j1-1,"'"
- else
- write(12,'(a18,i2,a9,i3,a2,i3,a1)')
- & "DefPropRes 'strand",nstrand,
- & "' 'num = ",jj1-1,"..",j1-1,"'"
- endif
- write(12,'(a8,4i4)')
- & "SetNeigh",ii1-1,i1-1,jj1-1,j1-1
- endif
- endif
- endif
- enddo
-
-c finding antiparallel beta
-cd write (iout,*) '--------- looking for antiparallel beta ---------'
-
- do i=1,ncont
- i1=icont(1,i)
- j1=icont(2,i)
- if (dcont(i).le.rbeta.and.
- & isec(i1,1).le.1.and.isec(j1,1).le.1.and.
- & (isec(i1,2).ne.isec(j1,2).or.isec(i1,2)*isec(j1,2).eq.0).and.
- & (isec(i1,3).ne.isec(j1,3).or.isec(i1,3)*isec(j1,3).eq.0).and.
- & (isec(i1,2).ne.isec(j1,3).or.isec(i1,2)*isec(j1,3).eq.0).and.
- & (isec(i1,3).ne.isec(j1,2).or.isec(i1,3)*isec(j1,2).eq.0)
- & ) then
- ii1=i1
- jj1=j1
-cd write (iout,*) i1,j1,dcont(i)
+ do i=1,ncont
+ i1=icont(1,i)
+ j1=icont(2,i)
+ if (dcont(i).le.rbeta.and.
+ & isec(i1,1).le.1.and.isec(j1,1).le.1.and.
+ & (isec(i1,2).ne.isec(j1,2).or.isec(i1,2)*isec(j1,2).eq.0).and.
+ & (isec(i1,3).ne.isec(j1,3).or.isec(i1,3)*isec(j1,3).eq.0).and.
+ & (isec(i1,2).ne.isec(j1,3).or.isec(i1,2)*isec(j1,3).eq.0).and.
+ & (isec(i1,3).ne.isec(j1,2).or.isec(i1,3)*isec(j1,2).eq.0)
+ & ) then
+ ii1=i1
+ jj1=j1
+cd write (iout,*) i1,j1,dcont(i)
not_done=.true.
do while (not_done)
cd write (iout,*) i1,j1,dcont(j),not_done
enddo
i1=i1-1
- j1=j1+1
- if (i1-ii1.gt.1) then
- if(lprint)write (iout,*)'antiparallel beta',
- & nbeta,ii1-1,i1,jj1,j1-1
-
- nbfrag=nbfrag+1
- bfrag(1,nbfrag)=max0(ii1-1,1)
- bfrag(2,nbfrag)=i1
- bfrag(3,nbfrag)=jj1
- bfrag(4,nbfrag)=max0(j1-1,1)
-
- nbeta=nbeta+1
- iii1=max0(ii1-1,1)
- do ij=iii1,i1
- isec(ij,1)=isec(ij,1)+1
- isec(ij,1+isec(ij,1))=nbeta
- enddo
- jjj1=max0(j1-1,1)
- do ij=jjj1,jj1
- isec(ij,1)=isec(ij,1)+1
- isec(ij,1+isec(ij,1))=nbeta
- enddo
-
-
- if (lprint) then
- nstrand=nstrand+1
- if (nstrand.le.9) then
- write(12,'(a18,i1,a9,i3,a2,i3,a1)')
- & "DefPropRes 'strand",nstrand,
- & "' 'num = ",ii1-2,"..",i1-1,"'"
- else
- write(12,'(a18,i2,a9,i3,a2,i3,a1)')
- & "DefPropRes 'strand",nstrand,
- & "' 'num = ",ii1-2,"..",i1-1,"'"
- endif
- nstrand=nstrand+1
- if (nstrand.le.9) then
- write(12,'(a18,i1,a9,i3,a2,i3,a1)')
- & "DefPropRes 'strand",nstrand,
- & "' 'num = ",j1-2,"..",jj1-1,"'"
- else
- write(12,'(a18,i2,a9,i3,a2,i3,a1)')
- & "DefPropRes 'strand",nstrand,
- & "' 'num = ",j1-2,"..",jj1-1,"'"
- endif
- write(12,'(a8,4i4)')
- & "SetNeigh",ii1-2,i1-1,jj1-1,j1-2
- endif
- endif
- endif
- enddo
-
- if (nstrand.gt.0.and.lprint) then
- write(12,'(a27,$)') "DefPropRes 'sheet' 'strand1"
- do i=2,nstrand
- if (i.le.9) then
- write(12,'(a9,i1,$)') " | strand",i
- else
- write(12,'(a9,i2,$)') " | strand",i
- endif
- enddo
- write(12,'(a1)') "'"
- endif
-
-
-c finding alpha or 310 helix
-
- nhelix=0
- do i=1,ncont
- i1=icont(1,i)
- j1=icont(2,i)
- if (j1.eq.i1+3.and.dcont(i).le.r310
- & .or.j1.eq.i1+4.and.dcont(i).le.ralfa ) then
-cd if (j1.eq.i1+3) write (iout,*) "found 1-4 ",i1,j1,dcont(i)
-cd if (j1.eq.i1+4) write (iout,*) "found 1-5 ",i1,j1,dcont(i)
- ii1=i1
- jj1=j1
- if (isec(ii1,1).eq.0) then
- not_done=.true.
- else
- not_done=.false.
- endif
- do while (not_done)
- i1=i1+1
- j1=j1+1
- do j=1,ncont
- if (i1.eq.icont(1,j) .and. j1.eq.icont(2,j)) goto 10
- enddo
- not_done=.false.
- 10 continue
-cd write (iout,*) i1,j1,not_done
- enddo
- j1=j1-1
- if (j1-ii1.gt.4) then
- nhelix=nhelix+1
-cd write (iout,*)'helix',nhelix,ii1,j1
-
- nhfrag=nhfrag+1
- hfrag(1,nhfrag)=ii1
- hfrag(2,nhfrag)=max0(j1-1,1)
-
- do ij=ii1,j1
- isec(ij,1)=-1
- enddo
- if (lprint) then
- write (iout,'(a6,i3,2i4)') "Helix",nhelix,ii1-1,j1-2
- if (nhelix.le.9) then
- write(12,'(a17,i1,a9,i3,a2,i3,a1)')
- & "DefPropRes 'helix",nhelix,
- & "' 'num = ",ii1-1,"..",j1-2,"'"
- else
- write(12,'(a17,i2,a9,i3,a2,i3,a1)')
- & "DefPropRes 'helix",nhelix,
- & "' 'num = ",ii1-1,"..",j1-2,"'"
- endif
- endif
- endif
- endif
- enddo
-
- if (nhelix.gt.0.and.lprint) then
- write(12,'(a26,$)') "DefPropRes 'helix' 'helix1"
- do i=2,nhelix
- if (nhelix.le.9) then
- write(12,'(a8,i1,$)') " | helix",i
- else
- write(12,'(a8,i2,$)') " | helix",i
- endif
- enddo
- write(12,'(a1)') "'"
- endif
-
- if (lprint) then
- write(12,'(a37)') "DefPropRes 'coil' '! (helix | sheet)'"
- write(12,'(a20)') "XMacStand ribbon.mac"
- endif
-
-
- return
- end
-c----------------------------------------------------------------------------
-
- subroutine write_pdb(npdb,titelloc,ee)
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
- include 'COMMON.IOUNITS'
- character*50 titelloc1
- character*(*) titelloc
- character*3 zahl
- character*5 liczba5
- double precision ee
- integer npdb,ilen
- external ilen
-
- titelloc1=titelloc
- lenpre=ilen(prefix)
- if (npdb.lt.1000) then
- call numstr(npdb,zahl)
- open(ipdb,file=prefix(:lenpre)//'@@'//zahl//'.pdb')
- else
- if (npdb.lt.10000) then
- write(liczba5,'(i1,i4)') 0,npdb
- else
- write(liczba5,'(i5)') npdb
- endif
- open(ipdb,file=prefix(:lenpre)//'@@'//liczba5//'.pdb')
- endif
- call pdbout(ee,titelloc1,ipdb)
- close(ipdb)
- return
- end
-
-c-----------------------------------------------------------
- subroutine contact_cp2(var,var2,iff,ieval,in_pdb)
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
-#ifdef MPI
- include 'mpif.h'
-#endif
- include 'COMMON.SBRIDGE'
- include 'COMMON.FFIELD'
- include 'COMMON.IOUNITS'
- include 'COMMON.DISTFIT'
- include 'COMMON.VAR'
- include 'COMMON.CHAIN'
- include 'COMMON.MINIM'
-
- character*50 linia
- integer nf,ij(4)
- double precision var(maxvar),var2(maxvar)
- double precision time0,time1
- integer iff(maxres),ieval
- double precision theta1(maxres),phi1(maxres),alph1(maxres),
- & omeg1(maxres)
-
-
- call var_to_geom(nvar,var)
- call chainbuild
- nhpb0=nhpb
- ind=0
- do i=1,nres-3
- do j=i+3,nres
- ind=ind+1
- if ( iff(i).eq.1.and.iff(j).eq.1 ) then
- d0(ind)=DIST(i,j)
- w(ind)=10.0
- nhpb=nhpb+1
- ihpb(nhpb)=i
- jhpb(nhpb)=j
- forcon(nhpb)=10.0
- dhpb(nhpb)=d0(ind)
- else
- w(ind)=0.0
- endif
- enddo
- enddo
- call hpb_partition
-
- do i=1,nres
- theta1(i)=theta(i)
- phi1(i)=phi(i)
- alph1(i)=alph(i)
- omeg1(i)=omeg(i)
- enddo
-
- call var_to_geom(nvar,var2)
-
- do i=1,nres
- if ( iff(i).eq.1 ) then
- theta(i)=theta1(i)
- phi(i)=phi1(i)
- alph(i)=alph1(i)
- omeg(i)=omeg1(i)
- endif
- enddo
-
- call chainbuild
-cd call write_pdb(3,'combined structure',0d0)
-cd time0=MPI_WTIME()
-
- NX=NRES-3
- NY=((NRES-4)*(NRES-5))/2
- call distfit(.true.,200)
-
-cd time1=MPI_WTIME()
-cd write (iout,'(a,f6.2,a)') ' Time for distfit ',time1-time0,' sec'
-
- ipot0=ipot
- maxmin0=maxmin
- maxfun0=maxfun
- wstrain0=wstrain
+ j1=j1+1
+ if (i1-ii1.gt.1) then
+ if(lprint)write (iout,*)'antiparallel beta',
+ & nbeta,ii1-1,i1,jj1,j1-1
- ipot=6
- maxmin=2000
- maxfun=5000
- call geom_to_var(nvar,var)
-cd time0=MPI_WTIME()
- call minimize(etot,var,iretcode,nfun)
- write(iout,*)'SUMSL return code is',iretcode,' eval SOFT',nfun
+ nbfrag=nbfrag+1
+ bfrag(1,nbfrag)=max0(ii1-1,1)
+ bfrag(2,nbfrag)=i1
+ bfrag(3,nbfrag)=jj1
+ bfrag(4,nbfrag)=max0(j1-1,1)
-cd time1=MPI_WTIME()
-cd write (iout,'(a,f6.2,f8.2,a)')' Time for soft min.',time1-time0,
-cd & nfun/(time1-time0),' SOFT eval/s'
- call var_to_geom(nvar,var)
- call chainbuild
+ nbeta=nbeta+1
+ iii1=max0(ii1-1,1)
+ do ij=iii1,i1
+ isec(ij,1)=isec(ij,1)+1
+ isec(ij,1+isec(ij,1))=nbeta
+ enddo
+ jjj1=max0(j1-1,1)
+ do ij=jjj1,jj1
+ isec(ij,1)=isec(ij,1)+1
+ isec(ij,1+isec(ij,1))=nbeta
+ enddo
- iwsk=0
- nf=0
- if (iff(1).eq.1) then
- iwsk=1
- nf=nf+1
- ij(nf)=0
- endif
- do i=2,nres
- if ( iwsk.eq.0.and.iff(i-1).eq.0.and.iff(i).eq.1 ) then
- iwsk=1
- nf=nf+1
- ij(nf)=i
- endif
- if ( iwsk.eq.1.and.iff(i-1).eq.1.and.iff(i).eq.0 ) then
- iwsk=0
- nf=nf+1
- ij(nf)=i-1
+ if (lprint) then
+ nstrand=nstrand+1
+ if (nstrand.le.9) then
+ write(12,'(a18,i1,a9,i3,a2,i3,a1)')
+ & "DefPropRes 'strand",nstrand,
+ & "' 'num = ",ii1-2,"..",i1-1,"'"
+ else
+ write(12,'(a18,i2,a9,i3,a2,i3,a1)')
+ & "DefPropRes 'strand",nstrand,
+ & "' 'num = ",ii1-2,"..",i1-1,"'"
+ endif
+ nstrand=nstrand+1
+ if (nstrand.le.9) then
+ write(12,'(a18,i1,a9,i3,a2,i3,a1)')
+ & "DefPropRes 'strand",nstrand,
+ & "' 'num = ",j1-2,"..",jj1-1,"'"
+ else
+ write(12,'(a18,i2,a9,i3,a2,i3,a1)')
+ & "DefPropRes 'strand",nstrand,
+ & "' 'num = ",j1-2,"..",jj1-1,"'"
+ endif
+ write(12,'(a8,4i4)')
+ & "SetNeigh",ii1-2,i1-1,jj1-1,j1-2
endif
- enddo
- if (iff(nres).eq.1) then
- nf=nf+1
- ij(nf)=nres
+ endif
endif
-
-
-cd write(linia,'(a6,i3,a1,i3,a1,i3,a1,i3)')
-cd & "select",ij(1),"-",ij(2),
-cd & ",",ij(3),"-",ij(4)
-cd call write_pdb(in_pdb,linia,etot)
-
-
- ipot=ipot0
- maxmin=maxmin0
- maxfun=maxfun0
-cd time0=MPI_WTIME()
- call minimize(etot,var,iretcode,nfun)
-cd write(iout,*)'SUMSL DIST return code is',iretcode,' eval ',nfun
- ieval=nfun
-
-cd time1=MPI_WTIME()
-cd write (iout,'(a,f6.2,f8.2,a)')' Time for DIST min.',time1-time0,
-cd & nfun/(time1-time0),' eval/s'
-cd call var_to_geom(nvar,var)
-cd call chainbuild
-cd call write_pdb(6,'dist structure',etot)
-
-
- nhpb= nhpb0
- link_start=1
- link_end=nhpb
- wstrain=wstrain0
-
- return
- end
-c-----------------------------------------------------------
- subroutine contact_cp(var,var2,iff,ieval,in_pdb)
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
- include 'COMMON.SBRIDGE'
- include 'COMMON.FFIELD'
- include 'COMMON.IOUNITS'
- include 'COMMON.DISTFIT'
- include 'COMMON.VAR'
- include 'COMMON.CHAIN'
- include 'COMMON.MINIM'
-
- character*50 linia
- integer nf,ij(4)
- double precision energy(0:n_ene)
- double precision var(maxvar),var2(maxvar)
- double precision time0,time1
- integer iff(maxres),ieval
- double precision theta1(maxres),phi1(maxres),alph1(maxres),
- & omeg1(maxres)
- logical debug
-
- debug=.false.
-c debug=.true.
- if (ieval.eq.-1) debug=.true.
-
-
-c
-c store selected dist. constrains from 1st structure
-c
-#ifdef OSF
-c Intercept NaNs in the coordinates
-c write(iout,*) (var(i),i=1,nvar)
- x_sum=0.D0
- do i=1,nvar
- x_sum=x_sum+var(i)
enddo
- if (x_sum.ne.x_sum) then
- write(iout,*)" *** contact_cp : Found NaN in coordinates"
- call flush(iout)
- print *," *** contact_cp : Found NaN in coordinates"
- return
- endif
-#endif
-
-
- call var_to_geom(nvar,var)
- call chainbuild
- nhpb0=nhpb
- ind=0
- do i=1,nres-3
- do j=i+3,nres
- ind=ind+1
- if ( iff(i).eq.1.and.iff(j).eq.1 ) then
- d0(ind)=DIST(i,j)
- w(ind)=10.0
- nhpb=nhpb+1
- ihpb(nhpb)=i
- jhpb(nhpb)=j
- forcon(nhpb)=10.0
- dhpb(nhpb)=d0(ind)
- else
- w(ind)=0.0
- endif
- enddo
- enddo
- call hpb_partition
-
- do i=1,nres
- theta1(i)=theta(i)
- phi1(i)=phi(i)
- alph1(i)=alph(i)
- omeg1(i)=omeg(i)
- enddo
-
-c
-c freeze sec.elements from 2nd structure
-c
- do i=1,nres
- mask_phi(i)=1
- mask_theta(i)=1
- mask_side(i)=1
- enddo
-
- call var_to_geom(nvar,var2)
- call secondary2(debug)
- do j=1,nbfrag
- do i=bfrag(1,j),bfrag(2,j)
- mask(i)=0
- mask_phi(i)=0
- mask_theta(i)=0
- enddo
- if (bfrag(3,j).le.bfrag(4,j)) then
- do i=bfrag(3,j),bfrag(4,j)
- mask(i)=0
- mask_phi(i)=0
- mask_theta(i)=0
- enddo
- else
- do i=bfrag(4,j),bfrag(3,j)
- mask(i)=0
- mask_phi(i)=0
- mask_theta(i)=0
- enddo
- endif
- enddo
- do j=1,nhfrag
- do i=hfrag(1,j),hfrag(2,j)
- mask(i)=0
- mask_phi(i)=0
- mask_theta(i)=0
- enddo
- enddo
- mask_r=.true.
-
-c
-c copy selected res from 1st to 2nd structure
-c
-
- do i=1,nres
- if ( iff(i).eq.1 ) then
- theta(i)=theta1(i)
- phi(i)=phi1(i)
- alph(i)=alph1(i)
- omeg(i)=omeg1(i)
- endif
- enddo
- if(debug) then
-c
-c prepare description in linia variable
-c
- iwsk=0
- nf=0
- if (iff(1).eq.1) then
- iwsk=1
- nf=nf+1
- ij(nf)=1
- endif
- do i=2,nres
- if ( iwsk.eq.0.and.iff(i-1).eq.0.and.iff(i).eq.1 ) then
- iwsk=1
- nf=nf+1
- ij(nf)=i
- endif
- if ( iwsk.eq.1.and.iff(i-1).eq.1.and.iff(i).eq.0 ) then
- iwsk=0
- nf=nf+1
- ij(nf)=i-1
- endif
+ if (nstrand.gt.0.and.lprint) then
+ write(12,'(a27,$)') "DefPropRes 'sheet' 'strand1"
+ do i=2,nstrand
+ if (i.le.9) then
+ write(12,'(a9,i1,$)') " | strand",i
+ else
+ write(12,'(a9,i2,$)') " | strand",i
+ endif
enddo
- if (iff(nres).eq.1) then
- nf=nf+1
- ij(nf)=nres
- endif
-
- write(linia,'(a6,i3,a1,i3,a1,i3,a1,i3)')
- & "SELECT",ij(1)-1,"-",ij(2)-1,
- & ",",ij(3)-1,"-",ij(4)-1
-
+ write(12,'(a1)') "'"
endif
-c
-c run optimization
-c
- call contact_cp_min(var,ieval,in_pdb,linia,debug)
- return
- end
-
- subroutine contact_cp_min(var,ieval,in_pdb,linia,debug)
-c
-c input : theta,phi,alph,omeg,in_pdb,linia,debug
-c output : var,ieval
-c
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
-#ifdef MPI
- include 'mpif.h'
-#endif
- include 'COMMON.SBRIDGE'
- include 'COMMON.FFIELD'
- include 'COMMON.IOUNITS'
- include 'COMMON.DISTFIT'
- include 'COMMON.VAR'
- include 'COMMON.CHAIN'
- include 'COMMON.MINIM'
-
- character*50 linia
- integer nf,ij(4)
- double precision energy(0:n_ene)
- double precision var(maxvar)
- double precision time0,time1
- integer ieval,info(3)
- logical debug,fail,check_var,reduce,change
-
- write(iout,'(a20,i6,a20)')
- & '------------------',in_pdb,'-------------------'
-
- if (debug) then
- call chainbuild
- call write_pdb(1000+in_pdb,'combined structure',0d0)
-#ifdef MPI
- time0=MPI_WTIME()
-#else
- time0=tcpu()
-#endif
- endif
-c
-c run optimization of distances
-c
-c uses d0(),w() and mask() for frozen 2D
-c
-ctest---------------------------------------------
-ctest NX=NRES-3
-ctest NY=((NRES-4)*(NRES-5))/2
-ctest call distfit(debug,5000)
-
- do i=1,nres
- mask_side(i)=0
- enddo
-
- ipot01=ipot
- maxmin01=maxmin
- maxfun01=maxfun
-c wstrain01=wstrain
- wsc01=wsc
- wscp01=wscp
- welec01=welec
- wvdwpp01=wvdwpp
-c wang01=wang
- wscloc01=wscloc
- wtor01=wtor
- wtor_d01=wtor_d
-
- ipot=6
- maxmin=2000
- maxfun=4000
-c wstrain=1.0
- wsc=0.0
- wscp=0.0
- welec=0.0
- wvdwpp=0.0
-c wang=0.0
- wscloc=0.0
- wtor=0.0
- wtor_d=0.0
-
- call geom_to_var(nvar,var)
-cde change=reduce(var)
- if (check_var(var,info)) then
- write(iout,*) 'cp_min error in input'
- print *,'cp_min error in input'
- return
- endif
-
-cd call etotal(energy(0))
-cd call enerprint(energy(0))
-cd call check_eint
-
-#ifdef MPI
- time0=MPI_WTIME()
-#else
- time0=tcpu()
-#endif
-cdtest call minimize(etot,var,iretcode,nfun)
-cdtest write(iout,*)'SUMSL return code is',iretcode,' eval SDIST',nfun
-#ifdef MPI
- time1=MPI_WTIME()
-#else
- time1=tcpu()
-#endif
-cd call etotal(energy(0))
-cd call enerprint(energy(0))
-cd call check_eint
-
- do i=1,nres
- mask_side(i)=1
- enddo
-
- ipot=ipot01
- maxmin=maxmin01
- maxfun=maxfun01
-c wstrain=wstrain01
- wsc=wsc01
- wscp=wscp01
- welec=welec01
- wvdwpp=wvdwpp01
-c wang=wang01
- wscloc=wscloc01
- wtor=wtor01
- wtor_d=wtor_d01
-ctest--------------------------------------------------
-
- if(debug) then
-#ifdef MPI
- time1=MPI_WTIME()
-#else
- time1=tcpu()
-#endif
- write (iout,'(a,f6.2,a)')' Time for distfit ',time1-time0,' sec'
- call write_pdb(2000+in_pdb,'distfit structure',0d0)
- endif
-
+c finding alpha or 310 helix
- ipot0=ipot
- maxmin0=maxmin
- maxfun0=maxfun
- wstrain0=wstrain
-c
-c run soft pot. optimization
-c with constrains:
-c nhpb,ihpb(),jhpb(),forcon(),dhpb() and hpb_partition
-c and frozen 2D:
-c mask_phi(),mask_theta(),mask_side(),mask_r
-c
- ipot=6
- maxmin=2000
- maxfun=4000
+ nhelix=0
+ do i=1,ncont
+ i1=icont(1,i)
+ j1=icont(2,i)
+ if (j1.eq.i1+3.and.dcont(i).le.r310
+ & .or.j1.eq.i1+4.and.dcont(i).le.ralfa ) then
+cd if (j1.eq.i1+3) write (iout,*) "found 1-4 ",i1,j1,dcont(i)
+cd if (j1.eq.i1+4) write (iout,*) "found 1-5 ",i1,j1,dcont(i)
+ ii1=i1
+ jj1=j1
+ if (isec(ii1,1).eq.0) then
+ not_done=.true.
+ else
+ not_done=.false.
+ endif
+ do while (not_done)
+ i1=i1+1
+ j1=j1+1
+ do j=1,ncont
+ if (i1.eq.icont(1,j) .and. j1.eq.icont(2,j)) goto 10
+ enddo
+ not_done=.false.
+ 10 continue
+cd write (iout,*) i1,j1,not_done
+ enddo
+ j1=j1-1
+ if (j1-ii1.gt.4) then
+ nhelix=nhelix+1
+cd write (iout,*)'helix',nhelix,ii1,j1
-cde change=reduce(var)
-cde if (check_var(var,info)) write(iout,*) 'error before soft'
-#ifdef MPI
- time0=MPI_WTIME()
-#else
- time0=tcpu()
-#endif
- call minimize(etot,var,iretcode,nfun)
+ nhfrag=nhfrag+1
+ hfrag(1,nhfrag)=ii1
+ hfrag(2,nhfrag)=max0(j1-1,1)
- write(iout,*)'SUMSL return code is',iretcode,' eval SOFT',nfun
-#ifdef MPI
- time1=MPI_WTIME()
-#else
- time1=tcpu()
-#endif
- write (iout,'(a,f6.2,f8.2,a)')' Time for soft min.',time1-time0,
- & nfun/(time1-time0),' SOFT eval/s'
- if (debug) then
- call var_to_geom(nvar,var)
- call chainbuild
- call write_pdb(3000+in_pdb,'soft structure',etot)
- endif
-c
-c run full UNRES optimization with constrains and frozen 2D
-c the same variables as soft pot. optimizatio
-c
- ipot=ipot0
- maxmin=maxmin0
- maxfun=maxfun0
-c
-c check overlaps before calling full UNRES minim
-c
- call var_to_geom(nvar,var)
- call chainbuild
- call etotal(energy(0))
-#ifdef OSF
- write(iout,*) 'N7 ',energy(0)
- if (energy(0).ne.energy(0)) then
- write(iout,*) 'N7 error - gives NaN',energy(0)
- endif
-#endif
- ieval=1
- if (energy(1).eq.1.0d20) then
- write (iout,'(a,1pe14.5)')'#N7_OVERLAP evdw=1d20',energy(1)
- call overlap_sc(fail)
- if(.not.fail) then
- call etotal(energy(0))
- ieval=ieval+1
- write (iout,'(a,1pe14.5)')'#N7_OVERLAP evdw after',energy(1)
+ do ij=ii1,j1
+ isec(ij,1)=-1
+ enddo
+ if (lprint) then
+ write (iout,'(a6,i3,2i4)') "Helix",nhelix,ii1-1,j1-2
+ if (nhelix.le.9) then
+ write(12,'(a17,i1,a9,i3,a2,i3,a1)')
+ & "DefPropRes 'helix",nhelix,
+ & "' 'num = ",ii1-1,"..",j1-2,"'"
+ else
+ write(12,'(a17,i2,a9,i3,a2,i3,a1)')
+ & "DefPropRes 'helix",nhelix,
+ & "' 'num = ",ii1-1,"..",j1-2,"'"
+ endif
+ endif
+ endif
+ endif
+ enddo
+
+ if (nhelix.gt.0.and.lprint) then
+ write(12,'(a26,$)') "DefPropRes 'helix' 'helix1"
+ do i=2,nhelix
+ if (nhelix.le.9) then
+ write(12,'(a8,i1,$)') " | helix",i
else
- mask_r=.false.
- nhpb= nhpb0
- link_start=1
- link_end=nhpb
- wstrain=wstrain0
- return
+ write(12,'(a8,i2,$)') " | helix",i
endif
- endif
- call flush(iout)
-c
-cdte time0=MPI_WTIME()
-cde change=reduce(var)
-cde if (check_var(var,info)) then
-cde write(iout,*) 'error before mask dist'
-cde call var_to_geom(nvar,var)
-cde call chainbuild
-cde call write_pdb(10000+in_pdb,'before mask dist',etot)
-cde endif
-cdte call minimize(etot,var,iretcode,nfun)
-cdte write(iout,*)'SUMSL MASK DIST return code is',iretcode,
-cdte & ' eval ',nfun
-cdte ieval=ieval+nfun
-cdte
-cdte time1=MPI_WTIME()
-cdte write (iout,'(a,f6.2,f8.2,a)')
-cdte & ' Time for mask dist min.',time1-time0,
-cdte & nfun/(time1-time0),' eval/s'
-cdte call flush(iout)
- if (debug) then
- call var_to_geom(nvar,var)
- call chainbuild
- call write_pdb(4000+in_pdb,'mask dist',etot)
- endif
-c
-c switch off freezing of 2D and
-c run full UNRES optimization with constrains
-c
- mask_r=.false.
-#ifdef MPI
- time0=MPI_WTIME()
-#else
- time0=tcpu()
-#endif
-cde change=reduce(var)
-cde if (check_var(var,info)) then
-cde write(iout,*) 'error before dist'
-cde call var_to_geom(nvar,var)
-cde call chainbuild
-cde call write_pdb(11000+in_pdb,'before dist',etot)
-cde endif
+ enddo
+ write(12,'(a1)') "'"
+ endif
- call minimize(etot,var,iretcode,nfun)
+ if (lprint) then
+ write(12,'(a37)') "DefPropRes 'coil' '! (helix | sheet)'"
+ write(12,'(a20)') "XMacStand ribbon.mac"
+ endif
-cde change=reduce(var)
-cde if (check_var(var,info)) then
-cde write(iout,*) 'error after dist',ico
-cde call var_to_geom(nvar,var)
-cde call chainbuild
-cde call write_pdb(12000+in_pdb+ico*1000,'after dist',etot)
-cde endif
- write(iout,*)'SUMSL DIST return code is',iretcode,' eval ',nfun
- ieval=ieval+nfun
-#ifdef MPI
- time1=MPI_WTIME()
-#else
- time1=tcpu()
-#endif
- write (iout,'(a,f6.2,f8.2,a)')' Time for dist min.',time1-time0,
- & nfun/(time1-time0),' eval/s'
-cde call etotal(energy(0))
-cde write(iout,*) 'N7 after dist',energy(0)
- call flush(iout)
- if (debug) then
- call var_to_geom(nvar,var)
- call chainbuild
- call write_pdb(in_pdb,linia,etot)
- endif
-c
-c reset constrains
-c
- nhpb= nhpb0
- link_start=1
- link_end=nhpb
- wstrain=wstrain0
+ return
+ end
+c----------------------------------------------------------------------------
+
+ subroutine write_pdb(npdb,titelloc,ee)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.IOUNITS'
+ character*50 titelloc1
+ character*(*) titelloc
+ character*3 zahl
+ character*5 liczba5
+ double precision ee
+ integer npdb,ilen
+ external ilen
+
+ titelloc1=titelloc
+ lenpre=ilen(prefix)
+ if (npdb.lt.1000) then
+ call numstr(npdb,zahl)
+ open(ipdb,file=prefix(:lenpre)//'@@'//zahl//'.pdb')
+ else
+ if (npdb.lt.10000) then
+ write(liczba5,'(i1,i4)') 0,npdb
+ else
+ write(liczba5,'(i5)') npdb
+ endif
+ open(ipdb,file=prefix(:lenpre)//'@@'//liczba5//'.pdb')
+ endif
+ call pdbout(ee,titelloc1,ipdb)
+ close(ipdb)
+ return
+ end
- return
- end
c--------------------------------------------------------
subroutine softreg
implicit real*8 (a-h,o-z)
end
- subroutine beta_slide(i1,i2,i3,i4,i5,ieval,ij)
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
-#ifdef MPI
- include 'mpif.h'
-#endif
- include 'COMMON.GEO'
- include 'COMMON.VAR'
- include 'COMMON.INTERACT'
- include 'COMMON.IOUNITS'
- include 'COMMON.DISTFIT'
- include 'COMMON.SBRIDGE'
- include 'COMMON.CONTROL'
- include 'COMMON.FFIELD'
- include 'COMMON.MINIM'
- include 'COMMON.CHAIN'
- double precision time0,time1
- double precision energy(0:n_ene),ee
- double precision var(maxvar)
- integer jdata(5),isec(maxres)
-c
- jdata(1)=i1
- jdata(2)=i2
- jdata(3)=i3
- jdata(4)=i4
- jdata(5)=i5
-
- call secondary2(.false.)
-
- do i=1,nres
- isec(i)=0
- enddo
- do j=1,nbfrag
- do i=bfrag(1,j),bfrag(2,j)
- isec(i)=1
- enddo
- do i=bfrag(4,j),bfrag(3,j),sign(1,bfrag(3,j)-bfrag(4,j))
- isec(i)=1
- enddo
- enddo
- do j=1,nhfrag
- do i=hfrag(1,j),hfrag(2,j)
- isec(i)=2
- enddo
- enddo
-
-c
-c cut strands at the ends
-c
- if (jdata(2)-jdata(1).gt.3) then
- jdata(1)=jdata(1)+1
- jdata(2)=jdata(2)-1
- if (jdata(3).lt.jdata(4)) then
- jdata(3)=jdata(3)+1
- jdata(4)=jdata(4)-1
- else
- jdata(3)=jdata(3)-1
- jdata(4)=jdata(4)+1
- endif
- endif
-
-cv call chainbuild
-cv call etotal(energy(0))
-cv etot=energy(0)
-cv write(iout,*) nnt,nct,etot
-cv call write_pdb(ij*100,'first structure',etot)
-cv write(iout,*) 'N16 test',(jdata(i),i=1,5)
-
-c------------------------
-c generate constrains
-c
- ishift=jdata(5)-2
- if(ishift.eq.0) ishift=-2
- nhpb0=nhpb
- call chainbuild
- do i=jdata(1),jdata(2)
- isec(i)=-1
- if(jdata(4).gt.jdata(3))then
- do j=jdata(3)+i-jdata(1)-2,jdata(3)+i-jdata(1)+2
- isec(j)=-1
-cd print *,i,j,j+ishift
- nhpb=nhpb+1
- ihpb(nhpb)=i
- jhpb(nhpb)=j
- forcon(nhpb)=1000.0
- dhpb(nhpb)=DIST(i,j+ishift)
- enddo
- else
- do j=jdata(3)-i+jdata(1)+2,jdata(3)-i+jdata(1)-2,-1
- isec(j)=-1
-cd print *,i,j,j+ishift
- nhpb=nhpb+1
- ihpb(nhpb)=i
- jhpb(nhpb)=j
- forcon(nhpb)=1000.0
- dhpb(nhpb)=DIST(i,j+ishift)
- enddo
- endif
- enddo
-
- do i=nnt,nct-2
- do j=i+2,nct
- if(isec(i).gt.0.or.isec(j).gt.0) then
-cd print *,i,j
- nhpb=nhpb+1
- ihpb(nhpb)=i
- jhpb(nhpb)=j
- forcon(nhpb)=0.1
- dhpb(nhpb)=DIST(i,j)
- endif
- enddo
- enddo
-
- call hpb_partition
-
- call geom_to_var(nvar,var)
- maxfun0=maxfun
- wstrain0=wstrain
- maxfun=4000/5
-
- do ico=1,5
-
- wstrain=wstrain0/ico
-
-cv time0=MPI_WTIME()
- call minimize(etot,var,iretcode,nfun)
- write(iout,'(a10,f6.3,a14,i3,a6,i5)')
- & ' SUMSL DIST',wstrain,' return code is',iretcode,
- & ' eval ',nfun
- ieval=ieval+nfun
-cv time1=MPI_WTIME()
-cv write (iout,'(a,f6.2,f8.2,a)')
-cv & ' Time for dist min.',time1-time0,
-cv & nfun/(time1-time0),' eval/s'
-cv call var_to_geom(nvar,var)
-cv call chainbuild
-cv call write_pdb(ij*100+ico,'dist cons',etot)
-
- enddo
-c
- nhpb=nhpb0
- call hpb_partition
- wstrain=wstrain0
- maxfun=maxfun0
-c
-cd print *,etot
- wscloc0=wscloc
- wscloc=10.0
- call sc_move(nnt,nct,100,100d0,nft_sc,etot)
- wscloc=wscloc0
-cv call chainbuild
-cv call etotal(energy(0))
-cv etot=energy(0)
-cv call write_pdb(ij*100+10,'sc_move',etot)
-cd call intout
-cd print *,nft_sc,etot
-
- return
- end
-
- subroutine beta_zip(i1,i2,ieval,ij)
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
-#ifdef MPI
- include 'mpif.h'
-#endif
- include 'COMMON.GEO'
- include 'COMMON.VAR'
- include 'COMMON.INTERACT'
- include 'COMMON.IOUNITS'
- include 'COMMON.DISTFIT'
- include 'COMMON.SBRIDGE'
- include 'COMMON.CONTROL'
- include 'COMMON.FFIELD'
- include 'COMMON.MINIM'
- include 'COMMON.CHAIN'
- double precision time0,time1
- double precision energy(0:n_ene),ee
- double precision var(maxvar)
- character*10 test
-
-cv call chainbuild
-cv call etotal(energy(0))
-cv etot=energy(0)
-cv write(test,'(2i5)') i1,i2
-cv call write_pdb(ij*100,test,etot)
-cv write(iout,*) 'N17 test',i1,i2,etot,ij
-
-c
-c generate constrains
-c
- nhpb0=nhpb
- nhpb=nhpb+1
- ihpb(nhpb)=i1
- jhpb(nhpb)=i2
- forcon(nhpb)=1000.0
- dhpb(nhpb)=4.0
-
- call hpb_partition
-
- call geom_to_var(nvar,var)
- maxfun0=maxfun
- wstrain0=wstrain
- maxfun=1000/5
-
- do ico=1,5
- wstrain=wstrain0/ico
-cv time0=MPI_WTIME()
- call minimize(etot,var,iretcode,nfun)
- write(iout,'(a10,f6.3,a14,i3,a6,i5)')
- & ' SUMSL DIST',wstrain,' return code is',iretcode,
- & ' eval ',nfun
- ieval=ieval+nfun
-cv time1=MPI_WTIME()
-cv write (iout,'(a,f6.2,f8.2,a)')
-cv & ' Time for dist min.',time1-time0,
-cv & nfun/(time1-time0),' eval/s'
-c do not comment the next line
- call var_to_geom(nvar,var)
-cv call chainbuild
-cv call write_pdb(ij*100+ico,'dist cons',etot)
- enddo
-
- nhpb=nhpb0
- call hpb_partition
- wstrain=wstrain0
- maxfun=maxfun0
-
-cv call etotal(energy(0))
-cv etot=energy(0)
-cv write(iout,*) 'N17 test end',i1,i2,etot,ij
-
-
- return
- end