X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=source%2Funres%2Fsrc_MD-M-newcorr%2Fcompare_s1.F;fp=source%2Funres%2Fsrc_MD-M-newcorr%2Fcompare_s1.F;h=4e77c2122786ea8ef6ee0946bacb3a46d6014055;hb=7308760ff07636ef6b1ee28d8c3a67a23c14b34b;hp=0000000000000000000000000000000000000000;hpb=9a54ab407f6d0d9d564d52763b3e2136450b9ffc;p=unres.git diff --git a/source/unres/src_MD-M-newcorr/compare_s1.F b/source/unres/src_MD-M-newcorr/compare_s1.F new file mode 100644 index 0000000..4e77c21 --- /dev/null +++ b/source/unres/src_MD-M-newcorr/compare_s1.F @@ -0,0 +1,188 @@ + subroutine compare_s1(n_thr,num_thread_save,energyx,x, + & icomp,enetbss,coordss,rms_d,modif,iprint) +C This subroutine compares the new conformation, whose variables are in X +C with the previously accumulated conformations whose energies and variables +C are stored in ENETBSS and COORDSS, respectively. The meaning of other +C variables is as follows: +C +C N_THR - on input the previous # of accumulated confs, on output the current +C # of accumulated confs. +C N_REPEAT - an array that indicates how many times the structure has already +C been used to start the reversed-reversing procedure. Addition of +C a new structure replacement of a structure with a similar, but +C lower-energy structure resets the respective entry in N_REPEAT to zero +C I9 - output unit +C ENERGYX,X - the energy and variables of the new conformations. +C ICOMP - comparison result: +C 0 - the new structure is similar to one of the previous ones and does +C not have a remarkably lower energy and is therefore rejected; +C 1 - the new structure is different and is added to the set, because +C there is still room in the COORDSS and ENETBSS arrays; +C 2 - the new structure is different, but higher in energy than any +C previous one and is therefore rejected +C 3 - there is no more room in the COORDSS and ENETBSS arrays, but +C the new structure is lower in energy than at least the highest- +C energy previous structure and therefore replaces it. +C 9 - the new structure is similar to a number of previous structures, +C but has a remarkably lower energy than any of them; therefore +C replaces all these structures; +C MODIF - a logical variable that shows whether to include the new structure +C in the set of accumulated structures + implicit real*8 (a-h,o-z) + include 'DIMENSIONS' + include 'COMMON.GEO' + include 'COMMON.VAR' +crc include 'COMMON.DEFORM' + include 'COMMON.IOUNITS' +#ifdef UNRES + include 'COMMON.CHAIN' +#endif + + dimension x(maxvar) + dimension x1(maxvar) + double precision przes(3),obrot(3,3) + integer list(max_thread) + logical non_conv,modif + double precision enetbss(max_threadss) + double precision coordss(maxvar,max_threadss) + + nlist=0 +#ifdef UNRES + call var_to_geom(nvar,x) + call chainbuild + do k=1,2*nres + do kk=1,3 + cref(kk,k,1)=c(kk,k) + enddo + enddo +#endif +c write(iout,*)'*ene=',energyx + j=0 + enex_jp=-1.0d+99 + do i=1,n_thr + do k=1,nvar + x1(k)=coordss(k,i) + enddo + if (iprint.gt.3) then + write (iout,*) 'Compare_ss, i=',i + write (iout,*) 'New structure Energy:',energyx + write (iout,'(10f8.3)') (rad2deg*x(k),k=1,nvar) + write (iout,*) 'Template structure Energy:',enetbss(i) + write (iout,'(10f8.3)') (rad2deg*x1(k),k=1,nvar) + endif + +#ifdef UNRES + call var_to_geom(nvar,x1) + call chainbuild +cd write(iout,*)'C and CREF' +cd write(iout,'(i5,3f10.5,5x,3f10.5)')(k,(c(j,k),j=1,3), +cd & (cref(j,k),j=1,3),k=1,nres) + call fitsq(roznica,c(1,1),cref(1,1,1),nres,przes,obrot,non_conv) + if (non_conv) then + print *,'Problems in FITSQ!!!' + print *,'X' + print '(10f8.3)',(x(k),k=1,nvar) + print *,'X1' + print '(10f8.3)',(x1(k),k=1,nvar) + print *,'C and CREF' + print '(i5,3f10.5,5x,3f10.5)',(k,(c(j,k),j=1,3), + & (cref(j,k,1),j=1,3),k=1,nres) + endif + roznica=dsqrt(dabs(roznica)) + iresult = 1 + if (roznica.lt.rms_d) iresult = 0 +#else + energyy=enetbss(i) + call cmprs(x,x1,roznica,energyx,energyy,iresult) +#endif + if (iprint.gt.1) write(iout,'(i5,f10.6,$)') i,roznica +c print '(i5,f8.3)',i,roznica + if(iresult.eq.0) then + nlist = nlist + 1 + list(nlist)=i + if (iprint.gt.1) write(iout,*) + if(energyx.ge.enetbss(i)) then + if (iprint.gt.1) + & write(iout,*)'s*>> structure rejected - same as nr ',i, + & ' RMS',roznica + minimize_s_flag=0 + icomp=0 + go to 1106 + endif + endif + if(energyx.lt.enetbss(i).and.enex_jp.lt.enetbss(i))then + j=i + enex_jp=enetbss(i) + endif + enddo + if (iprint.gt.1) write(iout,*) + if(nlist.gt.0) then + if (modif) then + if (iprint.gt.1) + & write(iout,'(a,i3,$)')'s*>> structure accepted1 - repl nr ', + & list(1) + else + if (iprint.gt.1) + & write(iout,'(a,i3)') + & 's*>> structure accepted1 - would repl nr ',list(1) + endif + icomp=9 + if (.not. modif) goto 1106 + j=list(1) + enetbss(j)=energyx + do i=1,nvar + coordss(i,j)=x(i) + enddo + do j=2,nlist + if (iprint.gt.1) write(iout,'(i3,$)')list(j) + do kk=list(j)+1,nlist + enetbss(kk-1)=enetbss(kk) + do i=1,nvar + coordss(i,kk-1)=coordss(i,kk) + enddo + enddo + enddo + if (iprint.gt.1) write(iout,*) + go to 1106 + endif + if(n_thr.lt.num_thread_save) then + icomp=1 + if (modif) then + if (iprint.gt.1) + & write(iout,*)'s*>> structure accepted - add with nr ',n_thr+1 + else + if (iprint.gt.1) + & write(iout,*)'s*>> structure accepted - would add with nr ', + & n_thr+1 + goto 1106 + endif + n_thr=n_thr+1 + enetbss(n_thr)=energyx + do i=1,nvar + coordss(i,n_thr)=x(i) + enddo + else + if(j.eq.0) then + if (iprint.gt.1) + & write(iout,*)'s*>> structure rejected - too high energy' + icomp=2 + go to 1106 + end if + icomp=3 + if (modif) then + if (iprint.gt.1) + & write(iout,*)'s*>> structure accepted - repl nr ',j + else + if (iprint.gt.1) + & write(iout,*)'s*>> structure accepted - would repl nr ',j + goto 1106 + endif + enetbss(j)=energyx + do i=1,nvar + coordss(i,j)=x(i) + enddo + end if + +1106 continue + return + end