1 subroutine func1(n,What,x)
4 include "DIMENSIONS.ZSCOPT"
12 include "COMMON.WEIGHTS"
13 include "COMMON.WEIGHTDER"
14 include "COMMON.CLASSES"
15 include "COMMON.ENERGIES"
16 include "COMMON.IOUNITS"
17 include "COMMON.VMCPAR"
18 include "COMMON.OPTIM"
19 include "COMMON.NAMES"
20 include "COMMON.INTERACT"
21 include "COMMON.TIME1"
22 include "COMMON.CHAIN"
23 include "COMMON.PROTFILES"
24 include "COMMON.COMPAR"
25 include "COMMON.PROTNAME"
26 include "COMMON.THERMAL"
27 include "COMMON.TORSION"
28 C Define local variables
29 integer i,ii,iii,ind,jj,j,k,l,ik,jk,iprot,ib,l1,l2,ll1,ll2,
32 integer ipass_conf,istart_conf,iend_conf
33 double precision energia(0:max_ene)
34 double precision etoti,sumpart,esquarei,emeani,elowesti,enepsjk,
35 & eave_pft(max_ene),emix_pft(max_ene),
36 & elowest_t(2,maxT),esquare_ft,
37 & elowest_aux(2,maxT),
38 & efree_t,emixsq_pft(max_ene),
39 & eneps_mixt(nntyp),eneps_meant(nntyp),
40 & enepsave_ft(nntyp),eneps_mix_ft(nntyp),
41 & eneps_mixsq_ft(nntyp),emean_ft,fac
43 double precision e_total_(maxstr_proc),eini_(maxstr_proc),
44 & entfac_(maxstr_proc),rmstb_(maxstr_proc)
47 double precision tcpu_ini,tcpu
55 c write (iout,*) "FUNC1: Init_Ene ",init_ene
59 write (iout,*) "ELOWEST at the beginning of FUC1"
61 do ibatch=1,natlike(iprot)+2
62 do ib=1,nbeta(ibatch,iprot)
63 write (iout,*) "iprot",iprot," ibatch",ibatch," ib",ib,
64 & " elowest",elowest(ib,ibatch,iprot)
70 call MPI_Bcast( What, 1, MPI_INTEGER, Master, Comm1, IERROR)
71 call MPI_Bcast( cutoffeval, 1, MPI_LOGICAL, Master, Comm1, IERROR)
72 call MPI_Bcast(x(1),n,MPI_DOUBLE_PRECISION, Master, Comm1, IERROR)
75 write (iout,*) "Processor",me,me1," What",What
76 write (iout,*) "Processor",me,me1," x",(x(i),i=1,n)
81 write (iout,*) "x",(x(i),i=1,n)
84 C Convert variables into weights and other UNRES energy parameters.
86 C Calculate the total energies.
88 c write (iout,*) "Processor",me," nprot",nprot
89 c Revise the list of conformations
91 write (iout,*) "MAKE_LIST called"
93 call MPI_Bcast( enecut(1), nprot, MPI_DOUBLE_PRECISION,
94 & Master, Comm1, IERROR)
95 call make_list(.true.,.false.,n,x)
101 open(icsa_rbank,file="corr."//protname(iprot),
102 & access="direct",form="formatted",recl=25+10*natlike(iprot))
103 vormat='(2i6,2i3,e15.5,'
104 if (natlike(iprot).lt.10) then
105 write(vormat(16:),'(i1,a)') maxdimnat*natlike(iprot),'f7.4/)'
107 write(vormat(16:),'(i2,a)') maxdimnat*natlike(iprot),'f7.4/)'
109 write (iout,*) "format ",vormat
114 write (iout,*) "Processor",me," iprot",iprot,
115 & " indstart",indstart(me1,iprot)," indend",indend(me1,iprot),
116 & " init_ene",init_ene," mod_fourier",mod_fourier(nloctyp),
117 & " mod_elec",mod_elec," mod_scp",mod_scp," mod_tor",mod_tor,
118 & " mod_sccor",mod_sccor
120 call restore_molinfo(iprot)
123 IF (NCHUNK_CONF(IPROT).EQ.1) THEN
126 do i=indstart(me1,iprot),indend(me1,iprot)
128 do i=1,ntot_work(iprot)
130 c write (iout,*) "i",i," ii",ii," calling ene_eval"
131 call ene_eval(iprot,i,ii)
132 c write (iout,*) "After ene_eval: i",i," ii",ii
135 write (icsa_rbank,vormat,rec=i)
136 & i,list_conf(i,iprot),
137 & e_total(i,iprot),((nu(l,k,ii,iprot),l=1,natdim(k,iprot)),
138 & k=1,natlike(iprot))
145 if (.not.init_ene .and. mod_fourier(nloctyp).eq.0
146 & .and. .not. mod_elec .and. .not. mod_scp
147 & .and. .not. mod_tor .and. .not. mod_sccor) then
148 open (ientin,file=benefiles(iprot),status="old",
149 & form="unformatted",access="direct",recl=lenrec_ene(iprot))
150 if (natlike(iprot).gt.0)
151 & open (icbase,file=bprotfiles(iprot),status="old",
152 & form="unformatted",access="direct",recl=lenrec(iprot))
154 open (icbase,file=bprotfiles(iprot),status="old",
155 & form="unformatted",access="direct",recl=lenrec(iprot))
156 c write (iout,*) "lenrec_ene",lenrec_ene(iprot)
158 open (ientout,file=benefiles(iprot),status="unknown",
159 & form="unformatted",access="direct",recl=lenrec_ene(iprot))
163 do i=indstart(me1,iprot),indend(me1,iprot),maxstr_proc
165 iend_conf=min0(i+maxstr_proc-1,indend(me1,iprot))
167 do i=1,ntot_work(iprot),maxstr_proc
169 iend_conf=min0(i+maxstr_proc-1,ntot(iprot))
173 c Read the chunk of conformations off a DA scratchfile.
175 if (.not. init_ene .and. mod_fourier(nloctyp).eq.0
176 & .and. .not. mod_elec .and. .not. mod_scp
177 & .and. .not. mod_tor .and. .not. mod_sccor) then
179 write (iout,*) "func1: calling daread_ene",istart_conf,
182 call daread_ene(iprot,istart_conf,iend_conf)
183 if (natlike(iprot).gt.0) then
185 write (iout,*) "Calling daread_coords",istart_conf,
188 call daread_ccoords(iprot,istart_conf,iend_conf)
190 do iii=istart_conf,iend_conf
191 call ene_eval(iprot,iii,ii)
194 write (iout,*) "func1: calling dawrite_ene",istart_conf,
197 call dawrite_ene(iprot,istart_conf,iend_conf,ientin)
199 call daread_ccoords(iprot,istart_conf,iend_conf)
200 do iii=istart_conf,iend_conf
201 call ene_eval(iprot,iii,ii)
203 call dawrite_ene(iprot,istart_conf,iend_conf,ientout)
207 do iii=istart_conf,iend_conf
208 write (icsa_rbank,vormat,rec=iii)
209 & iii,list_conf(iii,iprot),
210 & e_total(iii,iprot),
211 & ((nu(l,k,iii-istart_conf+1,iprot),l=1,natdim(k,iprot)),
212 & k=1,natlike(iprot))
218 if (.not.init_ene .and. mod_fourier(nloctyp).eq.0
219 & .and. .not. mod_elec .and. .not. mod_scp
220 & .and. .not. mod_tor .and. .not. mod_sccor) then
222 if (natlike(iprot).gt.0) close(icbase)
226 if (init_ene .or. mod_fourier(nloctyp).gt.0 .or. mod_elec
227 & .or. mod_scp .or. mod_tor .or. mod_sccor) close(ientout)
231 c print *,"Processor",me,me1," finished computing energies"
233 do i=1,scount(me1,iprot)
234 e_total_(i)=e_total(indstart(me1,iprot)+i-1,iprot)
235 eini_(i)=eini(indstart(me1,iprot)+i-1,iprot)
236 entfac_(i)=entfac(indstart(me1,iprot)+i-1,iprot)
237 rmstb_(i)=rmstb(indstart(me1,iprot)+i-1,iprot)
239 if (What.eq.2 .or. What.eq.3) then
240 c call MPI_Gatherv(e_total(indstart(me1,iprot),iprot),
241 c & scount(me1,iprot),MPI_DOUBLE_PRECISION,e_total(1,iprot),
242 c & scount(0,iprot),idispl(0,iprot),MPI_DOUBLE_PRECISION,Master,
244 call MPI_Gatherv(e_total_(1),
245 & scount(me1,iprot),MPI_DOUBLE_PRECISION,e_total(1,iprot),
246 & scount(0,iprot),idispl(0,iprot),MPI_DOUBLE_PRECISION,Master,
248 c call MPI_Gatherv(entfac(indstart(me1,iprot),iprot),
249 c & scount(me1,iprot),MPI_DOUBLE_PRECISION,entfac(1,iprot),
250 c & scount(0,iprot),idispl(0,iprot),MPI_DOUBLE_PRECISION,Master,
252 call MPI_Gatherv(entfac_(1),
253 & scount(me1,iprot),MPI_DOUBLE_PRECISION,entfac(1,iprot),
254 & scount(0,iprot),idispl(0,iprot),MPI_DOUBLE_PRECISION,Master,
256 c call MPI_Gatherv(eini(indstart(me1,iprot),iprot),
257 c & scount(me1,iprot),MPI_DOUBLE_PRECISION,eini(1,iprot),
258 c & scount(0,iprot),idispl(0,iprot),MPI_DOUBLE_PRECISION,Master,
260 call MPI_Gatherv(eini_(1),
261 & scount(me1,iprot),MPI_DOUBLE_PRECISION,eini(1,iprot),
262 & scount(0,iprot),idispl(0,iprot),MPI_DOUBLE_PRECISION,Master,
264 c call MPI_Gatherv(rmstb(indstart(me1,iprot),iprot),
265 c & scount(me1,iprot),MPI_DOUBLE_PRECISION,rmstb(1,iprot),
266 c & scount(0,iprot),idispl(0,iprot),MPI_DOUBLE_PRECISION,Master,
268 call MPI_Gatherv(rmstb_(1),
269 & scount(me1,iprot),MPI_DOUBLE_PRECISION,rmstb(1,iprot),
270 & scount(0,iprot),idispl(0,iprot),MPI_DOUBLE_PRECISION,Master,
274 c call MPI_Allgatherv(e_total(indstart(me1,iprot),iprot),
275 c & scount(me1,iprot),MPI_DOUBLE_PRECISION,e_total(1,iprot),
276 c & scount(0,iprot),idispl(0,iprot),MPI_DOUBLE_PRECISION,
278 call MPI_Allgatherv(e_total_(1),
279 & scount(me1,iprot),MPI_DOUBLE_PRECISION,e_total(1,iprot),
280 & scount(0,iprot),idispl(0,iprot),MPI_DOUBLE_PRECISION,
285 c Mean and lowest energies of structural classes
287 IF (NCHUNK_CONF(IPROT).EQ.1) THEN
290 do i=1,ntot_work(iprot)
294 do i=indstart(me1,iprot),indend(me1,iprot)
298 istart_conf=indstart(me1,iprot)
299 iend_conf=indend(me1,iprot)
301 do i=1,ntot_work(iprot)
305 iend_conf=ntot_work(iprot)
308 do i=1,ntot_work(iprot)
309 write (iout,*) "i",i," i2ii",i2ii(i,iprot)
313 open (ientin,file=benefiles(iprot),status="old",
314 & form="unformatted",access="direct",recl=lenrec_ene(iprot))
315 c call daread_ene(iprot,istart_conf,iend_conf)
316 call emin_search(iprot)
320 open (ientin,file=benefiles(iprot),status="old",
321 & form="unformatted",access="direct",recl=lenrec_ene(iprot))
324 do istart_conf=indstart(me1,iprot),indend(me1,iprot),maxstr_proc
325 iend_conf=min0(istart_conf+maxstr_proc-1,indend(me1,iprot))
327 do istart_conf=1,ntot_work(iprot),maxstr_proc
328 iend_conf=min0(istart_conf+maxstr_proc-1,ntot_work(iprot))
331 c Read the chunk of energies and derivatives off a DA scratchfile.
333 ipass_conf=ipass_conf+1
334 do i=1,ntot_work(iprot)
338 do i=istart_conf,iend_conf
343 write (iout,*) "ipass_conf",ipass_conf,
344 & " istart_conf",istart_conf," iend_conf",iend_conf
345 do i=1,ntot_work(iprot)
346 write (iout,*) "i",i," i2ii",i2ii(i,iprot)
350 call daread_ene(iprot,istart_conf,iend_conf)
351 call emin_search(iprot)
360 c Complete the calculation of the lowest energies over all classes and
361 c distribute the values to all procs
364 write (iout,*) "Processor",me,me1," calling MPI_Reduce: 2"
365 do k=1,natlike(iprot)+2
366 write (iout,*) "iprot",iprot," k",k
367 do ib=1,nbeta(k,iprot)
368 write (iout,*) "ib",ib
369 write (iout,'(7hELOWEST,10e15.3)')
370 & elowest(ib,k,iprot)
375 do ibatch=1,natlike(iprot)+2
376 do ib=1,nbeta(ibatch,iprot)
377 elowest_aux(1,ib)=elowest(ib,ibatch,iprot)
378 elowest_aux(2,ib)=ind_lowest(ib,ibatch,iprot)
380 call MPI_Allreduce(elowest_aux(1,1),elowest_t(1,1),
381 & nbeta(ibatch,iprot),
382 & MPI_2DOUBLE_PRECISION, MPI_MINLOC, Comm1, IERROR)
384 do ib=1,nbeta(ibatch,iprot)
385 write (iout,*) "beta=",betaT(ib,ibatch,iprot)
386 write (iout,'(9helowest_t,10f15.3)')
387 & elowest_t(1,ib),elowest_t(2,ib)
389 write (iout,*) "Processor",me,me1," finished MPI_Reduce: 2"
391 do ib=1,nbeta(ibatch,iprot)
392 c write (iout,*) "IB",ib," ibatch",ibatch," iprot",iprot
394 elowest(ib,ibatch,iprot)=elowest_t(1,ib)
395 c write (iout,*) "elowest",ib,ibatch,iprot,
396 c & elowest(ib,ibatch,iprot)
398 ind_lowest(ib,ibatch,iprot)=elowest_t(2,ib)
406 c write (iout,*) "After averages, calling Thermal"
408 if (What.eq.2) call thermal(iprot)
409 c write (iout,*) "After thermal"
413 if (me1.eq.Master) then
417 write (iout,*) "iprot",iprot," elowest",
418 & ((elowest(ib,k,iprot),ib=1,nbeta(k,iprot)),k=1,natlike(iprot)+2)
421 do ib=1,nbeta(2,iprot)
422 fac=betaT(ib,2,iprot)
423 c 6/15/05 AL Heat capacity
424 zvtot(ib,iprot)=(esquare_ftot(ib,iprot)-
425 & emean_ftot(ib,iprot)**2)*fac*fac*Rgas
426 & -ebis_ftot(ib,iprot)+heatbase(iprot)
428 write (iout,*) "iprot",iprot," ib",ib,
429 & " emeantot",emean_ftot(ib,iprot),
430 & " esquaretot",esquare_ftot(ib,iprot),
431 & " ebistot",ebis_ftot(ib,iprot),
432 & " zvtot",zvtot(ib,iprot)
435 write (iout,*) "beta",
437 & " efree",efree(ib,2,iprot),
438 & " emean",emean_ftot(ib,iprot),
439 & " variance",esquare_ftot(ib,iprot)
442 c 4/13/04 AL Correlation coefficients between energy and nativelikeness
443 c in the respective classes.
445 write (iout,*) "iprot",iprot," ib",ib,
447 write (iout,*) "emean",emean_ftot(ib,iprot),
448 & " esquare",esquare_ftot(ib,iprot)
454 & "Averages of nativelikeness and energy-nativelikeness",
455 & " correlation coefficients:"
457 do i=1,natlike(iprot)
458 do ib=1,nbeta(i+1,iprot)
459 write (iout,*) "protein",iprot," property",i,
460 & " temperature",ib," natdim",natdim(i,iprot)," value(s)",
461 & (nuave(j,ib,i,iprot),j=1,natdim(i,iprot))
472 write (iout,*) "Calling CUTOFF_VIOLATION"
475 c write (iout,*) "CUTOFFEVAL",cutoffeval
477 if (cutoffeval) call cutoff_violation
478 t_func = t_func + tcpu() - tcpu_ini
480 write (iout,*) "Exitting FUNC1"
485 c-------------------------------------------------------------------------------
486 subroutine targetfun(n,x,nf,f,uiparm,ufparm)
489 include "DIMENSIONS.ZSCOPT"
492 integer IERROR,Errcode,status(MPI_STATUS_SIZE)
496 double precision x(n)
497 include "COMMON.WEIGHTS"
498 include "COMMON.IOUNITS"
499 include "COMMON.DERIV"
500 include "COMMON.VMCPAR"
501 include "COMMON.CLASSES"
503 include "COMMON.ENERGIES"
504 include "COMMON.WEIGHTDER"
505 include "COMMON.OPTIM"
506 include "COMMON.TIME1"
507 include "COMMON.COMPAR"
510 integer i,ii,it,inat,j,k,l,kk,iprot,ib
513 double precision urparm
515 double precision f,kara,viol,gnmr,gnmr1,aux
519 write (iout,*) me,me1,"Calling TARGETFUN"
521 call write_restart(n,x)
527 c Maximum likelihood contribution
529 do iT=1,nbeta(1,iprot)
530 f = f + weilik(iT,iprot)*sumlik(iT,iprot)
534 write (iout,*)"target_fun: sumlik"
536 write (iout,*) (sumlik(ii,iprot),ii=1,nbeta_l(iprot))
538 write (iout,*) "f before Cv =",f
542 c 6/15/05 AL Contribution from Cv
543 do ib=1,nbeta(2,iprot)
544 f=f+weiCv(ib,iprot)*(zvtot(ib,iprot)-target_cv(ib,iprot))**2
546 c write (iout,*) "target_fun from CV: f=",f
548 c write (iout,*) "target_fun: f=",f
549 c 8/2/2013 Contribution from conformation-dependent averages
551 do inat=1,natlike(iprot)
552 do ib=1,nbeta(inat+2,iprot)
553 do k=1,natdim(inat,iprot)
554 f = f+weinat(k,ib,inat,iprot)*
555 & (nuave(k,ib,inat,iprot)-nuexp(k,ib,inat,iprot))**2
557 write (iout,*) "iprot",iprot," inat",inat,
558 & " ib",ib," k=",k," nuave",nuave(k,ib,inat,iproti),
559 & " nuexp",nuexp(k,ib,inat,iprot),
560 & " weight",weinat(k,ib,inat,iprot)
566 c write (iout,*) "target_fun after adding nativelikeness: f=",f
568 c add constraints on weights
571 kara=kara+gnmr1(x(i),x_low(i),x_up(i))
576 c write (iout,*) "target_fun: f=",f,1.0d16*kara
580 c-----------------------------------------------------------------------------
581 subroutine targetgrad(n,x,nf,g,uiparm,rdum,ufparm)
584 include "DIMENSIONS.ZSCOPT"
585 include "COMMON.TIME1"
588 integer IERROR,ERRCODE,status(MPI_STATUS_SIZE)
591 double precision x(n),
592 & g(n),gg(max_paropt)
593 include "COMMON.WEIGHTS"
594 include "COMMON.ENERGIES"
595 include "COMMON.CLASSES"
596 include "COMMON.IOUNITS"
597 include "COMMON.DERIV"
598 include "COMMON.COMPAR"
599 include "COMMON.WEIGHTDER"
600 include "COMMON.OPTIM"
601 include "COMMON.VMCPAR"
603 include "COMMON.NAMES"
610 double precision xi,delta /1.0d-6/
612 double precision urparm
614 double precision zewn(MaxT,maxprot),aux,zscder
615 double precision zewnvtot(maxT,maxprot)
616 double precision sumlik0(maxT,maxprot),zv0tot(maxT,maxprot),
617 & nuave0(maxdimnat,maxT,maxnatlike,maxprot)
618 double precision geps(nntyp),gtor(maxtor_var)
619 double precision rdum
621 integer ll1,ll2,nl1,nl2,nn
622 integer i,ii,ind,inat,j,k,kk,iprot,ib,n_weight
623 integer iti,itj,jj,icant
626 double precision gnmrprim,gnmr1prim
627 double precision tcpu_ini,tcpu
628 logical in_sc_pair_list
629 external in_sc_pair_list
635 write (iout,*) "Processor",me,me1," calling TARGETGRAD"
640 write (iout,*) "Calling TARGETGRAD"
645 write (iout,*) "x",(x(i),i=1,n)
652 do ib=1,nbeta(2,iprot)
653 c 6/15/05 AL Contributions from Cv
654 zewnvtot(ib,iprot)=2*weiCv(ib,iprot)*
655 & (zvtot(ib,iprot)-target_cv(ib,iprot))
667 if (mod_tor .or. mod_sccor) then
672 c Maximum likelihood gradient
674 do ib=1,nbeta(1,iprot)
677 if (imask(k).gt.0) then
679 g(kk)=g(kk)+weilik(ib,iprot)*sumlikder(kk,ib,iprot)
683 geps(k)=geps(k)+weilik(ib,iprot)*sumlikeps(k,ib,iprot)
686 gtor(k)=gtor(k)+weilik(ib,iprot)*sumliktor(k,ib,iprot)
691 write (iout,*) "gtor"
693 write(iout,*) k,gtor(k)
697 c Heat-capacity gradient
699 do ib=1,nbeta(2,iprot)
702 if (imask(k).gt.0) then
704 g(kk)=g(kk)+zvdertot(kk,ib,iprot)*zewnvtot(ib,iprot)
708 geps(k)=geps(k)+zewnvtot(ib,iprot)*zvepstot(k,ib,iprot)
711 gtor(k)=gtor(k)+zewnvtot(ib,iprot)*zvtortot(k,ib,iprot)
716 write (iout,*) "gtor"
718 write(iout,*) k,gtor(k)
720 write (iout,*) "grad: g",(g(i),i=1,n)
723 c Derivatives of conformational-dependent properties
725 do inat=1,natlike(iprot)
726 do ib=1,nbeta(inat+2,iprot)
727 call propderiv(ib,inat,iprot)
728 do l=1,natdim(inat,iprot)
729 aux=2*weinat(l,ib,inat,iprot)*
730 & (nuave(l,ib,inat,iprot)-nuexp(l,ib,inat,iprot))
732 write (iout,*) "iprot",iprot," ib",ib,
733 & " inat",inat," l",l,
734 & " nuave",nuave(l,ib,inat,iprot),
735 & " weight",weinat(ib,inat,iprot),
741 if (imask(k).gt.0) then
743 g(kk)=g(kk)+aux*rder(kk,l)
747 geps(k)=geps(k)+aux*reps(k,l)
750 gtor(k)=gtor(k)+aux*rtor(k,l)
757 write (iout,*) "gtor"
759 write(iout,*) k,gtor(k)
762 c Compute numerically the remaining part of the gradient
765 if (imask(i).gt.0) n_weight=n_weight+1
768 c Sum up the gradient in SC epsilons, if needed
773 g(ii)=g(ii)+geps(icant(iti,iti))
775 if (.not. in_sc_pair_list(iti,j)) then
776 g(ii)=g(ii)+0.5d0*geps(icant(iti,j))
784 g(ii)=geps(icant(iti,itj))
787 c write (iout,*) "n_ene",n_ene
788 if (mod_tor .or. mod_sccor) then
796 write (iout,*) "n",n," n_weight",n_weight
797 write (iout,*) "After SC: grad:"
799 write (iout,*) i,g(i)
805 do ib=1,nbeta(1,iprot)
806 sumlik0(ib,iprot)=sumlik(ib,iprot)
810 do ib=1,nbeta(2,iprot)
811 zv0tot(ib,iprot)=zvtot(ib,iprot)
815 do i=1,natlike(iprot)
816 do ib=1,nbeta(i+2,iprot)
817 do k=1,natdim(i,iprot)
818 nuave0(k,ib,i,iprot)=nuave(k,ib,i,iprot)
825 if (nbeta(2,iprot).gt.0) nn=nn-1
829 if (nbeta(2,iprot).gt.0) then
831 do ib=1,nbeta(2,iprot)
832 g(ii)=g(ii)+zewnvtot(ib,iprot)
837 write (iout,*) "n",n," n_weight",n_weight
838 write (iout,*) "After heat grad:"
840 write (iout,*) i,g(i)
844 c write (iout,*) "n_weight",n_weight," n",n
848 c write (iout,*) "i",i," x",x(i),xi
853 do ib=1,nbeta(1,iprot)
854 g(i)=g(i)+weilik(ib,iprot)*(sumlik(ib,iprot)
855 & -sumlik0(ib,iprot))/delta
859 write (iout,*) "init numerical derivatives"
862 c Contribution from Cv
864 do ib=1,nbeta(2,iprot)
865 g(i)=g(i)+zewnvtot(ib,iprot)*
866 & (zvtot(ib,iprot)-zv0tot(ib,iprot))/delta
869 c Contribution from average nativelikenss and correlation coefficients
870 c between energy and nativelikeness
872 do ii=1,natlike(iprot)
873 do ib=1,nbeta(ii+2,iprot)
874 do k=1,natdim(i,iprot)
875 aux=2*weinat(k,ib,inat,iprot)*
876 & (nuave(l,ib,inat,iprot)-nuexp(l,ib,inat,iprot))
877 g(i)=g(i)+aux*(nuave(k,ib,ii,iprot)-
878 & nuave0(k,ib,ii,iprot))/delta
886 write (iout,*) "n",n," n_weight",n_weight
887 write (iout,*) "After num grad:"
889 write (iout,*) k,g(k)
895 write (iout,*) "finish numerical derivatives"
899 c 1/10/2007 AL Correction: ENDIF...IF insterted to prevent unmatched
900 c SEND is I_LOCAL_CHECK.GT.0
903 write (iout,*) "mode",mode
906 c transform the gradient to the x space
908 g(i)=g(i)*(x_up(i)-x_low(i))/(pi*(1.0d0+(x(i)
909 & -0.5d0*(x_up(i)+x_low(i)))**2))
912 c add constraints on weights
913 c write (iout,*) "Gradient in constraints"
915 g(i)=g(i)+1.0d16*gnmr1prim(x(i),x_low(i),x_up(i))
917 write (iout,*) i,x(i),x_low(i),x_up(i),
918 & gnmr1prim(x(i),x_low(i),x_up(i))
923 write (iout,*) "grad"
925 write (iout,*) i,g(i)
928 t_grad = t_grad + tcpu() - tcpu_ini
930 write (iout,*) "Exit targetgrad"
935 c------------------------------------------------------------------------------
936 subroutine matout(ndim,n,a)
937 implicit real*8 (a-h,o-z)
938 include "DIMENSIONS.ZSCOPT"
939 include "COMMON.IOUNITS"
940 double precision a(ndim)
941 character*6 line6 / '------' /
942 character*12 line12 / '------------' /
946 write (iout,1000) (k,k=i,nlim)
947 write (iout,1020) line6,(line12,k=i,nlim)
948 1000 format (/7x,6(i7,5x))
949 1020 format (a6,6a12)
954 3 b(k-i+1)=a(icant(i,j))
955 write (iout,1010) j,(b(k),k=1,jlim1)
958 1010 format (i3,3x,6(1pe11.4,1x))
961 c------------------------------------------------------------------------------
965 include "DIMENSIONS.ZSCOPT"
968 integer IERROR,ERRCODE,status(MPI_STATUS_SIZE)
971 include "COMMON.WEIGHTS"
972 include "COMMON.ENERGIES"
973 include "COMMON.IOUNITS"
974 include "COMMON.DERIV"
975 include "COMMON.WEIGHTDER"
976 include "COMMON.VMCPAR"
978 include "COMMON.NAMES"
980 include "COMMON.CLASSES"
981 include "COMMON.THERMAL"
985 include "COMMON.TIME1"
986 double precision aux,zscder
987 double precision fac,fac2
988 double precision efj(2),emj(2),varj(2),edecum,edecum1,ebisdecum,
990 double precision eavpfj(max_ene,2),emixpfj(max_ene,2),
991 & emixsqpfj(max_ene,2),enepsavefj(nntyp,2),enepsmixfj(nntyp,2),
992 & enepsmixsqfj(nntyp,2),eavpfjprim(max_ene,2),
993 & entoravefj(0:3,maxtor_var,2),entoravefjprim(0:3,maxtor_var,2),
994 & entormixfj(0:3,maxtor_var,2),entormixsqfj(0:3,maxtor_var,2)
995 integer i,ii,j,k,kk,iprot,ib
996 integer iti,itj,jj,icant
1002 do ib=1,nbeta(2,iprot)
1003 fac = betaT(ib,2,iprot)
1007 if (imask(k).gt.0) then
1009 ebisdecum=emix_pfbistot(k,ib,iprot)-
1010 & eave_pftot(k,ib,iprot)
1011 & *ebis_ftot(ib,iprot)
1012 edecum=emix_pfprimtot(k,ib,iprot)
1013 & -eave_pfprimtot(k,ib,iprot)
1014 & *emean_ftot(ib,iprot)
1015 edecum1=emix_pftot(k,ib,iprot)
1016 & -eave_pftot(k,ib,iprot)
1017 & *emean_ftot(ib,iprot)
1018 e2decum=emixsq_pftot(k,ib,iprot)
1019 & -eave_pftot(k,ib,iprot)
1020 & *esquare_ftot(ib,iprot)
1021 zvdertot(kk,ib,iprot)=Rgas*fac2*(2*edecum
1022 & -fac*(e2decum-2*emean_ftot(ib,iprot)
1024 & -eave_pfbistot(k,ib,iprot)
1027 write (iout,*) "k=",k,
1028 & "eave_pftot",eave_pftot(k,ib,iprot),
1029 & " emix_pftot",emix_pftot(k,ib,iprot),
1030 & " emix_pfprimtot",emix_pfprimtot(k,ib,iprot),
1031 & " emix_pfbistot",emix_pfbistot(k,ib,iprot),
1032 & " eave_pfprimtot",eave_pfprimtot(k,ib,iprot),
1033 & " eave_pfbistot",eave_pfbistot(k,ib,iprot),
1034 & " emixsq_pftot",emixsq_pftot(k,ib,iprot),
1035 & " ebis_ftot",ebis_ftot(ib,iprot),
1036 & " emean_ftot",emean_ftot(ib,iprot)
1037 write (iout,*) "k=",k," edecum",edecum,
1038 & " edecum1",edecum1,
1039 & " e2decum",e2decum," ebisdecum",ebisdecum,
1041 & zvdertot(kk,ib,iprot)
1047 ebisdecum=eneps_mix_fbistot(k,ib,iprot)-
1048 & enepsave_ftot(k,ib,iprot)*ebis_ftot(ib,iprot)
1049 edecum=eneps_mix_ftot(k,ib,iprot)
1050 & -enepsave_ftot(k,ib,iprot)*emean_ftot(ib,iprot)
1051 e2decum=eneps_mixsq_ftot(k,ib,iprot)
1052 & -enepsave_ftot(k,ib,iprot)*esquare_ftot(ib,iprot)
1053 zvepstot(k,ib,iprot)=ww(1)*(Rgas*fac2*(2*edecum
1054 & -fac*(e2decum-2*emean_ftot(ib,iprot)
1055 & *edecum))+fac*ebisdecum)
1057 write (iout,*) ib,k,"ebisdecum",ebisdecum,
1058 & " edecum",edecum," e2decum",e2decum," zvepstot",
1059 & zvepstot(k,ibb,iprot)
1061 & " enepsave_ftot",enepsave_ftot(k,ib,iprot),
1062 & " eneps_mix_ftot",eneps_mix_ftot(k,ib,iprot),
1063 & " eneps_mix_fbistot",eneps_mix_fbistot(k,ib,iprot),
1064 & " eneps_mixsq_ftot",eneps_mixsq_ftot(k,ib,iprot),
1065 & " emean_ftot",emean_ftot(ib,iprot),
1066 & " ebis_ftot",ebis_ftot(ib,iprot)
1070 if (mod_tor .or. mod_sccor) then
1072 ebisdecum=entor_mix_fbistot(k,ib,iprot)-
1073 & entorave_ftot(k,ib,iprot)*ebis_ftot(ib,iprot)
1074 edecum=entor_mix_fprimtot(k,ib,iprot)
1075 & -entorave_fprimtot(k,ib,iprot)*emean_ftot(ib,iprot)
1076 edecum1=entor_mix_ftot(k,ib,iprot)
1077 & -entorave_ftot(k,ib,iprot)*emean_ftot(ib,iprot)
1078 e2decum=entor_mixsq_ftot(k,ib,iprot)
1079 & -entorave_ftot(k,ib,iprot)*esquare_ftot(ib,iprot)
1080 zvtortot(k,ib,iprot)=Rgas*fac2*(2*edecum
1081 & -fac*(e2decum-2*emean_ftot(ib,iprot)
1082 & *edecum1))-entorave_fbistot(k,ib,iprot)
1086 & " entorave_ftot",entorave_ftot(k,ib,iprot),
1087 & " entor_mix_ftot",entor_mix_ftot(k,ib,iprot),
1088 & " entor_mix_fprimtot",entor_mix_fprimtot(k,ib,iprot),
1089 & " entor_mix_fbistot",entor_mix_fbistot(k,ib,iprot),
1090 & " entorave_fprimtot",entorave_fprimtot(k,ib,iprot),
1091 & " entorave_fbistot",entorave_fbistot(k,ib,iprot),
1092 & " entor_mixsq_ftot",entor_mixsq_ftot(k,ib,iprot),
1093 & " emean_ftot",emean_ftot(ib,iprot),
1094 & " ebis_ftot",ebis_ftot(ib,iprot)
1095 write (iout,*) ib,k," ebisdecum",ebisdecum,
1096 & " edecum",edecum," edecum1",edecum1," e2decum",e2decum,
1097 & " zvtortot",zvtortot(k,ibb,iprot)
1102 write (iout,*) "iprot",iprot,
1104 write (iout,*) "zvder",
1105 & (zvdertot(k,ibb,iprot),k=1,kk)
1111 c------------------------------------------------------------------------------
1112 subroutine propderiv(ib,inat,iprot)
1113 c Compute the derivatives of conformation-dependent averages in force-field
1116 include "DIMENSIONS"
1117 include "DIMENSIONS.ZSCOPT"
1120 integer IERROR,ERRCODE,status(MPI_STATUS_SIZE)
1123 include "COMMON.WEIGHTS"
1124 include "COMMON.ENERGIES"
1125 include "COMMON.CLASSES"
1126 include "COMMON.IOUNITS"
1127 include "COMMON.DERIV"
1128 include "COMMON.WEIGHTDER"
1129 include "COMMON.VMCPAR"
1130 include "COMMON.GEO"
1131 include "COMMON.OPTIM"
1132 include "COMMON.NAMES"
1133 include "COMMON.COMPAR"
1135 include "COMMON.MPI"
1137 include "COMMON.TIME1"
1138 include "COMMON.VAR"
1139 double precision aux,zscder
1140 double precision fac
1141 double precision efj(2),emj(2),varj(2)
1142 double precision eavpfj(max_ene,2),emixpfj(max_ene,2),
1143 & emixsqpfj(max_ene,2),enepsavefj(nntyp,2),enepsmixfj(nntyp,2),
1144 & enepsmixsqfj(nntyp,2)
1146 integer i,ii,ind,j,k,kk,iprot,ib,ibb,l1
1147 integer iti,itj,jj,icant
1150 c write (iout,*) "Entered PROPDERIV"
1152 fac = betaT(ib,inat+2,iprot)
1153 c write (iout,*) "derivatives: iprot",iprot,
1155 do l=1,natdim(inat,iprot)
1158 if (imask(k).gt.0) then
1160 rder(kk,l)=-fac*(nu_pf(k,l,ib,inat,iprot)
1161 & -nuave(l,ib,inat,iprot)*
1162 & eave_nat_pftot(k,ib,inat,iprot))
1167 do l=1,natdim(inat,iprot)
1169 reps(k,l)=-ww(1)*fac*(nuepsave_f(k,l,ib,inat,iprot)-
1170 & nuave(l,ib,inat,iprot)*enepsave_nat_ftot(k,ib,inat,iprot))
1174 if (mod_tor .or. mod_sccor) then
1175 do l=1,natdim(inat,iprot)
1177 rtor(k,l)=-fac*(nutorave_f(k,l,ib,inat,iprot)-
1178 & nuave(l,inat,ib,iprot)*entorave_nat_ftot(k,ib,inat,iprot))
1184 c-------------------------------------------------------------------------------
1185 subroutine ene_eval(iprot,i,ii)
1187 include "DIMENSIONS"
1188 include "DIMENSIONS.ZSCOPT"
1191 integer IERROR,ErrCode
1192 include "COMMON.MPI"
1194 include "COMMON.CONTROL"
1195 include "COMMON.COMPAR"
1196 include "COMMON.WEIGHTS"
1197 include "COMMON.WEIGHTDER"
1198 include "COMMON.CLASSES"
1199 include "COMMON.ENERGIES"
1200 include "COMMON.IOUNITS"
1201 include "COMMON.VMCPAR"
1202 include "COMMON.NAMES"
1203 include "COMMON.INTERACT"
1204 include "COMMON.TIME1"
1205 include "COMMON.CHAIN"
1206 include "COMMON.VAR"
1207 include "COMMON.GEO"
1208 include "COMMON.SCCOR"
1209 include "COMMON.TORSION"
1210 C Define local variables
1211 integer i,ii,ij,jj,j,k,ik,jk,l,ll,lll,iprot,iblock
1212 double precision energia(0:max_ene)
1213 double precision etoti,enepsjk
1214 double precision ftune_eps
1222 write (iout,*) "ene_eval: iprot",iprot," i",i," ii",ii
1224 if (init_ene .or. (mod_fourier(nloctyp).gt.0
1225 & .or. mod_elec .or. mod_scp .or. mod_tor .or. mod_sccor) ) then
1227 write (iout,*) "FUNC1: doing UNRES"
1228 write (iout,*) "Protein",iprot," i",i," ii",ii," nres",nres
1231 call restore_ccoords(iprot,ii)
1232 call int_from_cart1(.false.)
1234 write (iout,'(8f10.5)') ((c(j,k),j=1,3),k=1,nres)
1235 write (iout,'(8f10.5)') ((c(j,k+nres),j=1,3),k=nnt,nct)
1236 write (iout,'(8f10.4)') (vbld(k),k=2,nres)
1237 write (iout,'(8f10.4)') (vbld(k+nres),k=nnt,nct)
1238 write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
1239 write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
1240 write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
1241 write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
1246 call etotal(energia(0))
1247 c if (natlike(iprot).gt.0)
1248 c & call natsimil(i,ii,iprot,.false.)
1249 e_total(i,iprot)=energia(0)
1251 enetb(ii,j,iprot)=energia(j)
1254 write (iout,*) "FUN nntyp",nntyp," eneps",eneps_temp(1,45)
1257 eneps(k,j,ii,iprot)=eneps_temp(k,j)
1261 write (iout,'(2i5,18(1pe12.4))') i,ii,
1262 & (enetb(ii,j,iprot),j=1,n_ene)
1263 write(iout,'(4hENER,i10,3f15.3,2i10,i5)')
1264 & i,energia(0),eini(i,iprot),entfac(i,iprot)
1267 c write (iout,*) "Matrix eneps"
1270 c write (iout,*) j,k,icant(j,k),
1271 c & eneps_temp(1,icant(j,k)),
1272 c & eneps_temp(2,icant(j,k))
1278 if (mod_tor .or. mod_sccor) then
1279 c write (iout,*) "etor",enetb(ii,13,iprot),enetb(ii,19,iprot)
1282 do ij=-ntortyp+1,ntortyp-1
1283 do jj=-ntortyp+1,ntortyp-1
1284 if (mask_tor(0,jj,ij,iblock).eq.1) then
1286 entor(k,ii,iprot)=etor_temp(0,0,jj,ij,iblock)
1287 c write (iout,*) "etor_temp",restyp(itortyp(j)),
1288 c & restyp(itortyp(i)),
1289 c & k,etor_temp(ji,ii)
1290 else if (mask_tor(0,jj,ij,iblock).gt.1) then
1291 if (tor_mode.eq.0) then
1292 do l=1,nterm(jj,ij,iblock)
1294 entor(k,ii,iprot)=etor_temp(l,0,jj,ij,iblock)
1296 if (mask_tor(0,jj,ij,iblock).gt.2) then
1297 do l=nterm(jj,ij,iblock)+1,2*nterm(jj,ij,iblock)
1299 entor(k,ii,iprot)=etor_temp(l,0,jj,ij,iblock)
1302 else if (tor_mode.eq.1) then
1304 do l=1,nterm_kcc(jj,ij)
1305 do ll=1,nterm_kcc_Tb(jj,ij)
1306 do lll=1,nterm_kcc_Tb(jj,ij)
1308 entor(k,ii,iprot)=etor_temp_kcc(lll,ll,l,ij,jj)
1312 if (mask_tor(0,jj,ij,1).gt.2) then
1313 do l=nterm_kcc(jj,ij)+1,2*nterm_kcc(jj,ij)
1314 do ll=1,nterm_kcc_Tb(jj,ij)
1315 do lll=1,nterm_kcc_Tb(jj,ij)
1317 entor(k,ii,iprot)=etor_temp_kcc(lll,ll,l,ij,jj)
1328 do ij=-nsccortyp+1,nsccortyp-1
1329 do jj=-nsccortyp+1,nsccortyp-1
1331 if (mask_tor(ll,jj,ij,1).eq.1) then
1333 entor(k,ii,iprot)=etor_temp(0,ll,jj,ij,1)
1334 c write (iout,*) "etor_temp",restyp(isccortyp(jj)),
1335 c & restyp(isccortyp(ij)),
1336 c & k,etor_temp(jj,ij)
1337 else if (mask_tor(ll,jj,ij,1).gt.1) then
1338 do l=1,nterm_sccor(jj,ij)
1340 entor(k,ii,iprot)=etor_temp(l,ll,jj,ij,1)
1342 do l=nterm_sccor(jj,ij)+1,2*nterm_sccor(jj,ij)
1344 entor(k,ii,iprot)=etor_temp(l,ll,jj,ij,1)
1352 c write (iout,*) "Conformation",i
1353 c write (iout,'(8f10.5)') ((c(j,i),j=1,3),i=1,nres)
1354 c write (iout,'(8f10.5)') ((c(j,i+nres),j=1,3),i=nnt,nct)
1355 c write (iout,'(8f10.4)') (vbld(k),k=2,nres)
1356 c write (iout,'(8f10.4)') (vbld(k+nres),k=nnt,nct)
1357 c write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
1358 c write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
1359 c write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
1360 c write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
1361 call enerprint(energia(0))
1362 c write(iout,'(4hENER,i10,3f15.3,2i10,i5)')
1363 c & i,energia(0),eini(i,iprot),entfac(i,iprot)
1364 c write (iout,'(i5,18(1pe12.4))') ii,
1365 c & (enetb(ii,j,iprot),j=1,n_ene)
1366 c write (iout,'(i5,16(1pe12.4))') i,
1367 c & (energia(j),j=1,n_ene),energia(0)
1368 c print *,"Processor",me,me1," computing energies",i
1370 if (energia(0).ge.1.0d99) then
1371 write (iout,*) "FUNC1:CHUJ NASTAPIL in energy evaluation for",
1372 & " point",i,". Probably NaNs in some of the energy components."
1373 write (iout,*) "The components of the energy are:"
1374 call enerprint(energia(0))
1375 write (iout,*) "Conformation",i,ii
1376 write (iout,'(8f10.5)') ((c(j,k),j=1,3),k=1,nres)
1377 write (iout,'(8f10.5)') ((c(j,k+nres),j=1,3),k=nnt,nct)
1378 write (iout,'(8f10.4)') (vbld(k),k=2,nres)
1379 write (iout,'(8f10.4)') (vbld(k+nres),k=nnt,nct)
1380 write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
1381 write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
1382 write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
1383 write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
1384 write (iout,*) "Calculation terminated at this point.",
1385 & " Check the database of conformations"
1388 call MPI_Abort(MPI_COMM_WORLD,ErrCode,IERROR)
1390 stop "SEVERE error in energy calculation"
1394 enetb(ii,1,iprot)=0.0d0
1397 enetb(ii,1,iprot)=enetb(ii,1,iprot)+
1398 & ftune_eps(eps(j,k))*eneps(1,icant(j,k),ii,iprot)+
1399 & eps(j,k)*eneps(2,icant(j,k),ii,iprot)
1405 etoti=etoti+enetb(ii,j,iprot)*ww(j)
1407 e_total(i,iprot)=etoti
1408 c write (iout,*) "FUNC1 natlike",iprot,natlike(iprot)
1409 if (natlike(iprot).gt.0) then
1410 call restore_ccoords(iprot,ii)
1411 call int_from_cart1(.false.)
1412 c call natsimil(i,ii,iprot,.false.)
1414 c & "natsimil",i,ii,(nu(k,ii,iprot),k=1,natlike(iprot))
1417 write (iout,'(i5,18(1pe12.4))') i,
1418 & (enetb(ii,j,iprot),j=1,n_ene)
1419 write (iout,'(18(1pe12.4))')
1420 & (eneps(1,j,ii,iprot),j=201,210)
1421 write(iout,'(4hENER,i10,3f15.3)')
1422 & i,e_total(i,iprot),eini(i,iprot),entfac(i,iprot)