1 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
5 C Program to carry out conformational search of proteins in an united-residue C
8 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9 implicit real*8 (a-h,o-z)
15 include 'COMMON.SETUP'
17 include 'COMMON.TIME1'
18 include 'COMMON.INTERACT'
19 include 'COMMON.NAMES'
21 include 'COMMON.HEADER'
22 include 'COMMON.CONTROL'
23 include 'COMMON.CONTACTS'
24 include 'COMMON.CHAIN'
26 include 'COMMON.IOUNITS'
27 include 'COMMON.FFIELD'
30 include 'COMMON.SBRIDGE'
31 double precision hrtime,mintime,sectime
32 character*64 text_mode_calc(-2:14) /'test',
33 & 'SC rotamer distribution',
34 & 'Energy evaluation or minimization',
35 & 'Regularization of PDB structure',
36 & 'Threading of a sequence on PDB structures',
37 & 'Monte Carlo (with minimization) ',
38 & 'Energy minimization of multiple conformations',
39 & 'Checking energy gradient',
40 & 'Entropic sampling Monte Carlo (with minimization)',
45 & 'Soft regularization of PDB structure',
46 & 'Mesoscopic molecular dynamics (MD) ',
48 & 'Replica exchange molecular dynamics (REMD)'/
51 c call memmon_print_usage()
55 & write(iout,*)'### LAST MODIFIED 4/25/08 7:29PM by adam'
56 if (me.eq.king) call cinfo
57 C Read force field parameters and job setup data
61 if (me.eq.king .or. .not. out1file) then
63 & text_mode_calc(modecalc)(:ilen(text_mode_calc(modecalc))),
65 if (minim) write (iout,'(a)')
66 & 'Conformations will be energy-minimized.'
67 write (iout,'(80(1h*)/)')
71 if (modecalc.eq.-2) then
74 else if (modecalc.eq.-1) then
75 write(iout,*) "call check_sc_map next"
80 if (fg_rank.gt.0) then
81 C Fine-grain slaves just do energy and gradient components.
82 call ergastulum ! slave workhouse in Latin
85 if (modecalc.eq.0) then
86 call exec_eeval_or_minim
87 else if (modecalc.eq.1) then
89 else if (modecalc.eq.2) then
91 else if (modecalc.eq.3 .or. modecalc .eq.6) then
93 else if (modecalc.eq.4) then
94 call exec_mult_eeval_or_minim
95 else if (modecalc.eq.5) then
97 else if (ModeCalc.eq.7) then
99 else if (ModeCalc.eq.8) then
101 else if (modecalc.eq.11) then
103 else if (modecalc.eq.12) then
105 else if (modecalc.eq.14) then
109 write (iout,*) "Need a parallel version to run MREMD."
113 write (iout,'(a)') 'This calculation type is not supported',
119 if (fg_rank.eq.0) call finish_task
120 c call memmon_print_usage()
122 call print_detailed_timing
124 call MPI_Finalize(ierr)
127 call dajczas(tcpu(),hrtime,mintime,sectime)
128 stop '********** Program terminated normally.'
131 c--------------------------------------------------------------------------
137 include 'COMMON.SETUP'
138 include 'COMMON.CONTROL'
139 include 'COMMON.IOUNITS'
140 if (me.eq.king .or. .not. out1file)
141 & write (iout,*) "Calling chainbuild"
146 c---------------------------------------------------------------------------
148 subroutine exec_MREMD
153 include 'COMMON.SETUP'
154 include 'COMMON.CONTROL'
155 include 'COMMON.IOUNITS'
156 include 'COMMON.REMD'
157 if (me.eq.king .or. .not. out1file)
158 & write (iout,*) "Calling chainbuild"
160 if (me.eq.king .or. .not. out1file)
161 & write (iout,*) "Calling REMD"
173 c---------------------------------------------------------------------------
174 subroutine exec_eeval_or_minim
175 implicit real*8 (a-h,o-z)
180 include 'COMMON.SETUP'
181 include 'COMMON.TIME1'
182 include 'COMMON.INTERACT'
183 include 'COMMON.NAMES'
185 include 'COMMON.HEADER'
186 include 'COMMON.CONTROL'
187 include 'COMMON.CONTACTS'
188 include 'COMMON.CHAIN'
190 include 'COMMON.IOUNITS'
191 include 'COMMON.FFIELD'
192 include 'COMMON.REMD'
194 include 'COMMON.SBRIDGE'
196 double precision energy(0:n_ene)
197 double precision energy_long(0:n_ene),energy_short(0:n_ene)
198 double precision varia(maxvar)
199 if (indpdb.eq.0) call chainbuild
202 if (indpdb.ne.0) then
213 print *,'dc',dc(1,0),dc(2,0),dc(3,0)
215 print *,"Processor",myrank," after chainbuild"
217 call etotal_long(energy_long(0))
218 write (iout,*) "Printing long range energy"
219 call enerprint(energy_long(0))
220 call etotal_short(energy_short(0))
221 write (iout,*) "Printing short range energy"
222 call enerprint(energy_short(0))
224 energy(i)=energy_long(i)+energy_short(i)
225 write (iout,*) i,energy_long(i),energy_short(i),energy(i)
227 write (iout,*) "Printing long+short range energy"
228 call enerprint(energy(0))
230 call etotal(energy(0))
232 time_ene=MPI_Wtime()-time00
234 time_ene=tcpu()-time00
236 write (iout,*) "Time for energy evaluation",time_ene
237 print *,"after etotal"
240 call enerprint(energy(0))
241 call hairpin(.true.,nharp,iharp)
242 print *,'after hairpin'
243 call secondary2(.true.)
244 print *,'after secondary'
248 print *, 'Calling OVERLAP_SC'
249 call overlap_sc(fail)
253 call sc_move(2,nres-1,10,1d10,nft_sc,etot)
254 print *,'SC_move',nft_sc,etot
255 write(iout,*) 'SC_move',nft_sc,etot
259 print *, 'Calling MINIM_DC'
265 call minim_dc(etot,iretcode,nfun)
267 if (indpdb.ne.0) then
271 call geom_to_var(nvar,varia)
272 print *,'Calling MINIMIZE.'
278 call minimize(etot,varia,iretcode,nfun)
280 print *,'SUMSL return code is',iretcode,' eval ',nfun
282 evals=nfun/(MPI_WTIME()-time1)
284 evals=nfun/(tcpu()-time1)
286 print *,'# eval/s',evals
287 print *,'refstr=',refstr
288 call hairpin(.false.,nharp,iharp)
289 print *,'after hairpin'
290 call secondary2(.true.)
291 print *,'after secondary'
292 call etotal(energy(0))
294 call enerprint(energy(0))
297 call briefout(0,etot)
298 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
299 write (iout,'(a,i3)') 'SUMSL return code:',iretcode
300 write (iout,'(a,i20)') '# of energy evaluations:',nfun+1
301 write (iout,'(a,f16.3)')'# of energy evaluations/sec:',evals
303 print *,'refstr=',refstr
304 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
305 call briefout(0,etot)
307 if (outpdb) call pdbout(etot,titel(:32),ipdb)
308 if (outmol2) call mol2out(etot,titel(:32))
311 c---------------------------------------------------------------------------
312 subroutine exec_regularize
313 implicit real*8 (a-h,o-z)
318 include 'COMMON.SETUP'
319 include 'COMMON.TIME1'
320 include 'COMMON.INTERACT'
321 include 'COMMON.NAMES'
323 include 'COMMON.HEADER'
324 include 'COMMON.CONTROL'
325 include 'COMMON.CONTACTS'
326 include 'COMMON.CHAIN'
328 include 'COMMON.IOUNITS'
329 include 'COMMON.FFIELD'
330 include 'COMMON.REMD'
332 include 'COMMON.SBRIDGE'
333 double precision energy(0:n_ene)
338 call regularize(nct-nnt+1,etot,rms,cref(1,nnt,1),iretcode)
339 call etotal(energy(0))
340 energy(0)=energy(0)-energy(14)
342 call enerprint(energy(0))
344 call briefout(0,etot)
345 if (outpdb) call pdbout(etot,titel(:32),ipdb)
346 if (outmol2) call mol2out(etot,titel(:32))
347 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
348 write (iout,'(a,i3)') 'SUMSL return code:',iretcode
351 c---------------------------------------------------------------------------
352 subroutine exec_thread
357 include "COMMON.SETUP"
361 c---------------------------------------------------------------------------
363 implicit real*8 (a-h,o-z)
365 character*10 nodeinfo
366 double precision varia(maxvar)
370 include "COMMON.SETUP"
371 include 'COMMON.CONTROL'
375 if (modecalc.eq.3) then
381 if (modecalc.eq.3) then
392 c---------------------------------------------------------------------------
393 subroutine exec_mult_eeval_or_minim
394 implicit real*8 (a-h,o-z)
398 dimension muster(mpi_status_size)
400 include 'COMMON.SETUP'
401 include 'COMMON.TIME1'
402 include 'COMMON.INTERACT'
403 include 'COMMON.NAMES'
405 include 'COMMON.HEADER'
406 include 'COMMON.CONTROL'
407 include 'COMMON.CONTACTS'
408 include 'COMMON.CHAIN'
410 include 'COMMON.IOUNITS'
411 include 'COMMON.FFIELD'
412 include 'COMMON.REMD'
414 include 'COMMON.SBRIDGE'
415 double precision varia(maxvar)
417 double precision energy(0:max_ene)
427 open(intin,file=intinname,status='old')
428 write (istat,'(a5,20a12)')"# ",
429 & (wname(print_order(i)),i=1,nprint_ene)
431 write (istat,'(a5,20a12)')"# ",
432 & (ename(print_order(i)),i=1,nprint_ene),
433 & "ETOT total","RMSD","nat.contact","nnt.contact"
435 write (istat,'(a5,20a12)')"# ",
436 & (ename(print_order(i)),i=1,nprint_ene),"ETOT total"
442 read (intin,'(e15.10,e15.5)',end=1100,err=1100) time,ene
443 call read_x(intin,*11)
445 c Broadcast the order to compute internal coordinates to the slaves.
447 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
449 call int_from_cart1(.false.)
451 read (intin,'(i5)',end=1100,err=1100) iconf
452 call read_angles(intin,*11)
453 call geom_to_var(nvar,varia)
456 write (iout,'(a,i7)') 'Conformation #',iconf
457 call etotal(energy(0))
458 call briefout(iconf,energy(0))
459 call enerprint(energy(0))
462 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
463 write (istat,'(i5,20(f12.3))') iconf,
464 & (energy(print_order(i)),i=1,nprint_ene),etot,
465 & rms,frac,frac_nn,co
468 write (istat,'(i5,16(f12.3))') iconf,
469 & (energy(print_order(i)),i=1,nprint_ene),etot
485 if (mm.lt.nodes) then
487 read (intin,'(e15.10,e15.5)',end=11,err=11) time,ene
488 call read_x(intin,*11)
490 c Broadcast the order to compute internal coordinates to the slaves.
492 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
494 call int_from_cart1(.false.)
496 read (intin,'(i5)',end=11,err=11) iconf
497 call read_angles(intin,*11)
498 call geom_to_var(nvar,varia)
501 write (iout,'(a,i7)') 'Conformation #',iconf
511 call mpi_send(ind,6,mpi_integer,mm,idint,CG_COMM,
513 call mpi_send(varia,nvar,mpi_double_precision,mm,
514 * idreal,CG_COMM,ierr)
515 call mpi_send(ene0,1,mpi_double_precision,mm,
516 * idreal,CG_COMM,ierr)
517 c print *,'task ',n,' sent to worker ',mm,nvar
519 call mpi_recv(ind,6,mpi_integer,mpi_any_source,idint,
520 * CG_COMM,muster,ierr)
521 man=muster(mpi_source)
522 c print *,'receiving result from worker ',man,' (',iii1,iii,')'
523 call mpi_recv(varia,nvar,mpi_double_precision,
524 * man,idreal,CG_COMM,muster,ierr)
526 * mpi_double_precision,man,idreal,
527 * CG_COMM,muster,ierr)
528 call mpi_recv(ene0,1,
529 * mpi_double_precision,man,idreal,
530 * CG_COMM,muster,ierr)
531 c print *,'result received from worker ',man,' sending now'
533 call var_to_geom(nvar,varia)
535 call etotal(energy(0))
539 write (iout,'(a,2i7)') 'Conformation #',iconf,ind(5)
542 call enerprint(energy(0))
543 call briefout(it,etot)
544 c if (minim) call briefout(it,etot)
546 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
547 write (istat,'(i5,19(f12.3))') iconf,
548 & (energy(print_order(i)),i=1,nprint_ene),etot,
549 & rms,frac,frac_nn,co
551 write (istat,'(i5,15(f12.3))') iconf,
552 & (energy(print_order(i)),i=1,nprint_ene),etot
557 read (intin,'(e15.10,e15.5)',end=1101,err=1101) time,ene
558 call read_x(intin,*11)
560 c Broadcast the order to compute internal coordinates to the slaves.
562 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
564 call int_from_cart1(.false.)
566 read (intin,'(i5)',end=1101,err=1101) iconf
567 call read_angles(intin,*11)
568 call geom_to_var(nvar,varia)
579 call mpi_send(ind,6,mpi_integer,man,idint,CG_COMM,
581 call mpi_send(varia,nvar,mpi_double_precision,man,
582 * idreal,CG_COMM,ierr)
583 call mpi_send(ene0,1,mpi_double_precision,man,
584 * idreal,CG_COMM,ierr)
585 nf_mcmf=nf_mcmf+ind(4)
591 call mpi_recv(ind,6,mpi_integer,mpi_any_source,idint,
592 * CG_COMM,muster,ierr)
593 man=muster(mpi_source)
594 call mpi_recv(varia,nvar,mpi_double_precision,
595 * man,idreal,CG_COMM,muster,ierr)
597 * mpi_double_precision,man,idreal,
598 * CG_COMM,muster,ierr)
599 call mpi_recv(ene0,1,
600 * mpi_double_precision,man,idreal,
601 * CG_COMM,muster,ierr)
603 call var_to_geom(nvar,varia)
605 call etotal(energy(0))
609 write (iout,'(a,2i7)') 'Conformation #',iconf,ind(5)
612 call enerprint(energy(0))
613 call briefout(it,etot)
615 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
616 write (istat,'(i5,19(f12.3))') iconf,
617 & (energy(print_order(i)),i=1,nprint_ene),etot,
618 & rms,frac,frac_nn,co
620 write (istat,'(i5,15(f12.3))') iconf,
621 & (energy(print_order(i)),i=1,nprint_ene),etot
633 call mpi_send(ind,6,mpi_integer,i,idint,CG_COMM,
638 open(intin,file=intinname,status='old')
639 write (istat,'(a5,20a12)')"# ",
640 & (wname(print_order(i)),i=1,nprint_ene)
641 write (istat,'("# ",20(1pe12.4))')
642 & (weights(print_order(i)),i=1,nprint_ene)
644 write (istat,'(a5,20a12)')"# ",
645 & (ename(print_order(i)),i=1,nprint_ene),
646 & "ETOT total","RMSD","nat.contact","nnt.contact"
648 write (istat,'(a5,14a12)')"# ",
649 & (ename(print_order(i)),i=1,nprint_ene),"ETOT total"
653 read (intin,'(e15.10,e15.5)',end=11,err=11) time,ene
654 call read_x(intin,*11)
656 c Broadcast the order to compute internal coordinates to the slaves.
658 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
660 call int_from_cart1(.false.)
662 read (intin,'(i5)',end=11,err=11) iconf
663 call read_angles(intin,*11)
664 call geom_to_var(nvar,varia)
667 write (iout,'(a,i7)') 'Conformation #',iconf
668 if (minim) call minimize(etot,varia,iretcode,nfun)
669 call etotal(energy(0))
672 call enerprint(energy(0))
673 if (minim) call briefout(it,etot)
675 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
676 write (istat,'(i5,18(f12.3))') iconf,
677 & (energy(print_order(i)),i=1,nprint_ene),
678 & etot,rms,frac,frac_nn,co
681 write (istat,'(i5,14(f12.3))') iconf,
682 & (energy(print_order(i)),i=1,nprint_ene),etot
689 c---------------------------------------------------------------------------
690 subroutine exec_checkgrad
691 implicit real*8 (a-h,o-z)
696 include 'COMMON.SETUP'
697 include 'COMMON.TIME1'
698 include 'COMMON.INTERACT'
699 include 'COMMON.NAMES'
701 include 'COMMON.HEADER'
702 include 'COMMON.CONTROL'
703 include 'COMMON.CONTACTS'
704 include 'COMMON.CHAIN'
706 include 'COMMON.IOUNITS'
707 include 'COMMON.FFIELD'
708 include 'COMMON.REMD'
710 include 'COMMON.SBRIDGE'
712 double precision energy(0:max_ene)
714 c vbld(i)=vbld(i)+ran_number(-0.1d0,0.1d0)
715 c if (itype(i).ne.10)
716 c & vbld(i+nres)=vbld(i+nres)+ran_number(-0.001d0,0.001d0)
718 if (indpdb.eq.0) call chainbuild
721 c dc(j,i)=dc(j,i)+ran_number(-0.2d0,0.2d0)
725 c if (itype(i).ne.10) then
727 c dc(j,i+nres)=dc(j,i+nres)+ran_number(-0.2d0,0.2d0)
732 c dc(j,0)=ran_number(-0.2d0,0.2d0)
742 call etotal(energy(0))
744 call enerprint(energy(0))
745 write (iout,*) "Uconst",Uconst," Uconst_back",uconst_back
746 print *,'icheckgrad=',icheckgrad
747 goto (10,20,30) icheckgrad
748 10 call check_ecartint
750 20 call check_cartgrad
755 c---------------------------------------------------------------------------
762 c---------------------------------------------------------------------------
768 include 'COMMON.IOUNITS'
769 C Conformational Space Annealling programmed by Jooyoung Lee.
770 C This method works only with parallel machines!
774 write (iout,*) "CSA works on parallel machines only"
778 c---------------------------------------------------------------------------
779 subroutine exec_softreg
781 include 'COMMON.IOUNITS'
782 include 'COMMON.CONTROL'
783 double precision energy(0:max_ene)
785 call etotal(energy(0))
786 call enerprint(energy(0))
787 if (.not.lsecondary) then
788 write(iout,*) 'Calling secondary structure recognition'
789 call secondary2(debug)
791 write(iout,*) 'Using secondary structure supplied in pdb'
796 call etotal(energy(0))
798 call enerprint(energy(0))
800 call briefout(0,etot)
801 call secondary2(.true.)
802 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)