Adam's changes
[unres.git] / source / unres / src-HCD-5D / regularize.F
1       subroutine regularize(ncart,etot,rms,cref0,iretcode)
2       implicit real*8 (a-h,o-z)
3       include 'DIMENSIONS'
4       include 'COMMON.SBRIDGE'
5       include 'COMMON.CHAIN'
6       include 'COMMON.INTERACT'
7       include 'COMMON.HEADER'
8       include 'COMMON.IOUNITS'
9       include 'COMMON.MINIM'
10       double precision przes(3),obrot(3,3),fhpb0(maxdim_cont),
11      & varia(maxvar)
12       double precision cref0(3,ncart)
13       double precision energia(0:n_ene)
14       logical non_conv
15       link_end0=link_end
16       do i=1,nhpb
17         fhpb0(i)=forcon(i)
18       enddo
19       maxit_reg=2
20       print *,'Enter REGULARIZE: nnt=',nnt,' nct=',nct,' nsup=',nsup,
21      & ' nstart_seq=',nstart_seq,' nstart_sup',nstart_sup
22       write (iout,'(/a/)') 'Initial energies:'
23       call geom_to_var(nvar,varia)
24       call chainbuild
25       call etotal(energia(0))
26       etot=energia(0)
27       call enerprint(energia(0))
28       call fitsq(rms,c(1,nstart_seq),cref0(1,nstart_sup-1),
29      &  nsup,przes,obrot,non_conv)
30       write (iout,'(a,f10.5)') 
31      & 'Enter REGULARIZE: Initial RMS deviation:',dsqrt(dabs(rms))
32       write (*,'(a,f10.5)') 
33      & 'Enter REGULARIZE: Initial RMS deviation:',dsqrt(dabs(rms))
34       maxit0=maxit
35       maxfun0=maxfun
36       rtolf0=rtolf
37       maxit=100
38       maxfun=200
39       rtolf=1.0D-2
40       do it=1,maxit_reg
41         print *,'Regularization: pass:',it
42 C Minimize with distance constraints, gradually relieving the weight.
43         call minimize(etot,varia,iretcode,nfun)
44         print *,'Etot=',Etot
45         if (iretcode.eq.11) return
46         call fitsq(rms,c(1,nstart_seq),cref0(1,nstart_sup-1),
47      &   nsup,przes,obrot,non_conv)
48         rms=dsqrt(rms)
49         write (iout,'(a,i2,a,f10.5,a,1pe14.5,a,i3/)') 
50      &   'Finish pass',it,', RMS deviation:',rms,', energy',etot,
51      &   ' SUMSL convergence',iretcode
52         do i=nss+1,nhpb
53           forcon(i)=0.1D0*forcon(i)
54         enddo
55       enddo
56 C Turn off the distance constraints and re-minimize energy.
57       print *,'Final minimization ... '
58       maxit=maxit0
59       maxfun=maxfun0
60       rtolf=rtolf0
61       link_end=min0(link_end,nss)
62       call minimize(etot,varia,iretcode,nfun)
63       print *,'Etot=',Etot
64       call fitsq(rms,c(1,nstart_seq),cref0(1,nstart_sup-1),nsup,
65      &  przes,obrot,non_conv)
66       rms=dsqrt(rms)
67       write (iout,'(a,f10.5,a,1pe14.5,a,i3/)') 
68      & 'Final RMS deviation:',rms,' energy',etot,' SUMSL convergence',
69      & iretcode
70       link_end=link_end0
71       do i=nss+1,nhpb
72         forcon(i)=fhpb0(i)
73       enddo
74       call var_to_geom(nvar,varia)
75       call chainbuild
76       return
77       end