subroutine regularize(ncart,etot,rms,cref0,iretcode) implicit real*8 (a-h,o-z) include 'DIMENSIONS' include 'COMMON.SBRIDGE' include 'COMMON.CHAIN' include 'COMMON.INTERACT' include 'COMMON.HEADER' include 'COMMON.IOUNITS' include 'COMMON.MINIM' double precision przes(3),obrot(3,3),fhpb0(maxdim),varia(maxvar) double precision cref0(3,ncart) double precision energia(0:n_ene) logical non_conv link_end0=link_end do i=1,nhpb fhpb0(i)=forcon(i) enddo maxit_reg=2 print *,'Enter REGULARIZE: nnt=',nnt,' nct=',nct,' nsup=',nsup, & ' nstart_seq=',nstart_seq,' nstart_sup',nstart_sup write (iout,'(/a/)') 'Initial energies:' call geom_to_var(nvar,varia) call chainbuild call etotal(energia(0)) etot=energia(0) call enerprint(energia(0)) call fitsq(rms,c(1,nstart_seq),cref0(1,nstart_sup-1), & nsup,przes,obrot,non_conv) write (iout,'(a,f10.5)') & 'Enter REGULARIZE: Initial RMS deviation:',dsqrt(dabs(rms)) write (*,'(a,f10.5)') & 'Enter REGULARIZE: Initial RMS deviation:',dsqrt(dabs(rms)) maxit0=maxit maxfun0=maxfun rtolf0=rtolf maxit=100 maxfun=200 rtolf=1.0D-2 do it=1,maxit_reg print *,'Regularization: pass:',it C Minimize with distance constraints, gradually relieving the weight. call minimize(etot,varia,iretcode,nfun) print *,'Etot=',Etot if (iretcode.eq.11) return call fitsq(rms,c(1,nstart_seq),cref0(1,nstart_sup-1), & nsup,przes,obrot,non_conv) rms=dsqrt(rms) write (iout,'(a,i2,a,f10.5,a,1pe14.5,a,i3/)') & 'Finish pass',it,', RMS deviation:',rms,', energy',etot, & ' SUMSL convergence',iretcode do i=nss+1,nhpb forcon(i)=0.1D0*forcon(i) enddo enddo C Turn off the distance constraints and re-minimize energy. print *,'Final minimization ... ' maxit=maxit0 maxfun=maxfun0 rtolf=rtolf0 link_end=min0(link_end,nss) call minimize(etot,varia,iretcode,nfun) print *,'Etot=',Etot call fitsq(rms,c(1,nstart_seq),cref0(1,nstart_sup-1),nsup, & przes,obrot,non_conv) rms=dsqrt(rms) write (iout,'(a,f10.5,a,1pe14.5,a,i3/)') & 'Final RMS deviation:',rms,' energy',etot,' SUMSL convergence', & iretcode link_end=link_end0 do i=nss+1,nhpb forcon(i)=fhpb0(i) enddo call var_to_geom(nvar,varia) call chainbuild return end