1 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
5 C Program to carry out conformational search of proteins in an united-residue C
8 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
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)'/
53 c call memmon_print_usage()
57 & write(iout,*)'### LAST MODIFIED 4/25/08 7:29PM by adam'
58 if (me.eq.king) call cinfo
59 C Read force field parameters and job setup data
62 c write (iout,*) "After readrtns"
65 if (me.eq.king .or. .not. out1file) then
67 & text_mode_calc(modecalc)(:ilen(text_mode_calc(modecalc))),
69 if (minim) write (iout,'(a)')
70 & 'Conformations will be energy-minimized.'
71 write (iout,'(80(1h*)/)')
75 if (modecalc.eq.-2) then
78 else if (modecalc.eq.-1) then
79 write(iout,*) "call check_sc_map next"
84 if (fg_rank.gt.0) then
85 C Fine-grain slaves just do energy and gradient components.
86 call ergastulum ! slave workhouse in Latin
89 if (modecalc.eq.0) then
90 write (iout,*) "Calling exec_eeval_or_minim"
92 call exec_eeval_or_minim
93 else if (modecalc.eq.1) then
95 else if (modecalc.eq.2) then
97 else if (modecalc.eq.3 .or. modecalc .eq.6) then
99 else if (modecalc.eq.4) then
100 call exec_mult_eeval_or_minim
101 else if (modecalc.eq.5) then
103 else if (ModeCalc.eq.7) then
105 else if (ModeCalc.eq.8) then
107 else if (modecalc.eq.11) then
109 else if (modecalc.eq.12) then
111 else if (modecalc.eq.14) then
115 write (iout,*) "Need a parallel version to run MREMD."
119 write (iout,'(a)') 'This calculation type is not supported',
125 if (fg_rank.eq.0) call finish_task
126 c call memmon_print_usage()
128 call print_detailed_timing
130 call MPI_Finalize(ierr)
133 call dajczas(tcpu(),hrtime,mintime,sectime)
134 stop '********** Program terminated normally.'
137 c--------------------------------------------------------------------------
144 include 'COMMON.SETUP'
145 include 'COMMON.CONTROL'
146 include 'COMMON.IOUNITS'
147 c if (me.eq.king .or. .not. out1file) then
148 c write (iout,*) "Calling chainbuild"
152 c if (me.eq.king .or. .not. out1file) then
153 c write (iout,*) "Calling MD"
159 c---------------------------------------------------------------------------
161 subroutine exec_MREMD
167 include 'COMMON.SETUP'
168 include 'COMMON.CONTROL'
169 include 'COMMON.IOUNITS'
170 include 'COMMON.REMD'
172 if (me.eq.king .or. .not. out1file)
173 & write (iout,*) "Calling chainbuild"
175 if (me.eq.king .or. .not. out1file)
176 & write (iout,*) "Calling REMD"
188 c---------------------------------------------------------------------------
189 subroutine exec_eeval_or_minim
195 include 'COMMON.SETUP'
196 include 'COMMON.TIME1'
197 include 'COMMON.INTERACT'
198 include 'COMMON.NAMES'
200 include 'COMMON.HEADER'
201 include 'COMMON.CONTROL'
202 include 'COMMON.CONTACTS'
203 include 'COMMON.CHAIN'
205 include 'COMMON.IOUNITS'
206 include 'COMMON.FFIELD'
207 include 'COMMON.REMD'
209 include 'COMMON.SBRIDGE'
210 integer i,icall,iretcode,nfun
212 integer nharp,iharp(4,maxres/3)
215 double precision energy(0:n_ene),etot,etota
216 double precision energy_long(0:n_ene),energy_short(0:n_ene)
217 double precision rms,frac,frac_nn,co
218 double precision varia(maxvar)
219 double precision time00,time1,time_ene,evals
221 if (indpdb.eq.0) call chainbuild
222 if (indpdb.ne.0) then
232 write (iout,*) "Energy evaluation/minimization"
234 c print *,'dc',dc(1,0),dc(2,0),dc(3,0)
236 print *,"Processor",myrank," after chainbuild"
238 call etotal_long(energy_long(0))
239 write (iout,*) "Printing long range energy"
240 call enerprint(energy_long(0))
241 call etotal_short(energy_short(0))
242 write (iout,*) "Printing short range energy"
243 call enerprint(energy_short(0))
245 energy(i)=energy_long(i)+energy_short(i)
246 c write (iout,*) i,energy_long(i),energy_short(i),energy(i)
248 write (iout,*) "Printing long+short range energy"
249 call enerprint(energy(0))
251 c write(iout,*)"before etotal"
253 call etotal(energy(0))
254 c write(iout,*)"after etotal"
257 time_ene=MPI_Wtime()-time00
259 time_ene=tcpu()-time00
261 write (iout,*) "Time for energy evaluation",time_ene
262 c print *,"after etotal"
265 call enerprint(energy(0))
266 call hairpin(.true.,nharp,iharp)
267 c print *,'after hairpin'
268 call secondary2(.true.)
269 c print *,'after secondary'
273 print *, 'Calling OVERLAP_SC'
274 call overlap_sc(fail)
275 print *,"After overlap_sc"
279 call sc_move(2,nres-1,10,1d10,nft_sc,etot)
280 print *,'SC_move',nft_sc,etot
281 write(iout,*) 'SC_move',nft_sc,etot
285 print *, 'Calling MINIM_DC'
291 call minim_dc(etot,iretcode,nfun)
293 if (indpdb.ne.0) then
295 call chainbuild_extconf
297 call geom_to_var(nvar,varia)
298 print *,'Calling MINIMIZE.'
304 call minimize(etot,varia,iretcode,nfun)
306 print *,'SUMSL return code is',iretcode,' eval ',nfun
308 evals=nfun/(MPI_WTIME()-time1)
310 evals=nfun/(tcpu()-time1)
312 print *,'# eval/s',evals
313 print *,'refstr=',refstr
314 call hairpin(.false.,nharp,iharp)
315 print *,'after hairpin'
316 call secondary2(.true.)
317 print *,'after secondary'
318 call etotal(energy(0))
320 call enerprint(energy(0))
323 if (out_int) call briefout(0,etot)
325 cartname=prefix(:ilen(prefix))//'.x'
329 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
330 write (iout,'(a,i3)') 'SUMSL return code:',iretcode
331 write (iout,'(a,i20)') '# of energy evaluations:',nfun+1
332 write (iout,'(a,f16.3)')'# of energy evaluations/sec:',evals
334 print *,'refstr=',refstr
335 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
336 call briefout(0,etot)
338 if (outpdb) call pdbout(etot,titel(:50),ipdb)
339 if (outmol2) call mol2out(etot,titel(:32))
342 c---------------------------------------------------------------------------
343 subroutine exec_regularize
349 include 'COMMON.SETUP'
350 include 'COMMON.TIME1'
351 include 'COMMON.INTERACT'
352 include 'COMMON.NAMES'
354 include 'COMMON.HEADER'
355 include 'COMMON.CONTROL'
356 include 'COMMON.CONTACTS'
357 include 'COMMON.CHAIN'
359 include 'COMMON.IOUNITS'
360 include 'COMMON.FFIELD'
361 include 'COMMON.REMD'
363 include 'COMMON.SBRIDGE'
364 double precision energy(0:n_ene)
365 double precision etot,rms,frac,frac_nn,co
371 call regularize(nct-nnt+1,etot,rms,cref(1,nnt),iretcode)
372 call etotal(energy(0))
373 energy(0)=energy(0)-energy(14)
375 call enerprint(energy(0))
377 call briefout(0,etot)
378 if (outpdb) call pdbout(etot,titel(:50),ipdb)
379 if (outmol2) call mol2out(etot,titel(:32))
380 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
381 write (iout,'(a,i3)') 'SUMSL return code:',iretcode
384 c---------------------------------------------------------------------------
385 subroutine exec_thread
391 include "COMMON.SETUP"
395 c---------------------------------------------------------------------------
399 character*10 nodeinfo
401 double precision varia(maxvar)
405 include "COMMON.SETUP"
406 include 'COMMON.CONTROL'
410 if (modecalc.eq.3) then
416 if (modecalc.eq.3) then
427 c---------------------------------------------------------------------------
428 subroutine exec_mult_eeval_or_minim
433 integer muster(mpi_status_size)
436 include 'COMMON.SETUP'
437 include 'COMMON.TIME1'
438 include 'COMMON.INTERACT'
439 include 'COMMON.NAMES'
441 include 'COMMON.HEADER'
442 include 'COMMON.CONTROL'
443 include 'COMMON.CONTACTS'
444 include 'COMMON.CHAIN'
446 include 'COMMON.IOUNITS'
447 include 'COMMON.FFIELD'
448 include 'COMMON.REMD'
450 include 'COMMON.SBRIDGE'
451 double precision varia(maxvar)
452 integer i,j,iconf,ind(6)
453 integer n,it,man,nf_mcmf,nmin,imm,mm,nft
454 double precision energy(0:max_ene),ene,etot,ene0
455 double precision rms,frac,frac_nn,co
456 double precision time
466 open(intin,file=intinname,status='old')
467 write (istat,'(a5,20a12)')"# ",
468 & (wname(print_order(i)),i=1,nprint_ene)
470 write (istat,'(a5,20a12)')"# ",
471 & (ename(print_order(i)),i=1,nprint_ene),
472 & "ETOT total","RMSD","nat.contact","nnt.contact"
474 write (istat,'(a5,20a12)')"# ",
475 & (ename(print_order(i)),i=1,nprint_ene),"ETOT total"
481 read (intin,'(e15.10,e15.5)',end=1100,err=1100) time,ene
482 call read_x(intin,*11)
484 c Broadcast the order to compute internal coordinates to the slaves.
486 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
488 call int_from_cart1(.false.)
490 read (intin,'(i5)',end=1100,err=1100) iconf
491 call read_angles(intin,*11)
492 call geom_to_var(nvar,varia)
495 write (iout,'(a,i7)') 'Conformation #',iconf
496 call etotal(energy(0))
497 call briefout(iconf,energy(0))
498 call enerprint(energy(0))
501 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
502 write (istat,'(i5,20(f12.3))') iconf,
503 & (energy(print_order(i)),i=1,nprint_ene),etot,
504 & rms,frac,frac_nn,co
507 write (istat,'(i5,16(f12.3))') iconf,
508 & (energy(print_order(i)),i=1,nprint_ene),etot
524 if (mm.lt.nodes) then
526 read (intin,'(e15.10,e15.5)',end=11,err=11) time,ene
527 call read_x(intin,*11)
529 c Broadcast the order to compute internal coordinates to the slaves.
531 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
533 call int_from_cart1(.false.)
535 read (intin,'(i5)',end=11,err=11) iconf
536 call read_angles(intin,*11)
537 call geom_to_var(nvar,varia)
540 write (iout,'(a,i7)') 'Conformation #',iconf
550 call mpi_send(ind,6,mpi_integer,mm,idint,CG_COMM,
552 call mpi_send(varia,nvar,mpi_double_precision,mm,
553 * idreal,CG_COMM,ierr)
554 call mpi_send(ene0,1,mpi_double_precision,mm,
555 * idreal,CG_COMM,ierr)
556 c print *,'task ',n,' sent to worker ',mm,nvar
558 call mpi_recv(ind,6,mpi_integer,mpi_any_source,idint,
559 * CG_COMM,muster,ierr)
560 man=muster(mpi_source)
561 c print *,'receiving result from worker ',man,' (',iii1,iii,')'
562 call mpi_recv(varia,nvar,mpi_double_precision,
563 * man,idreal,CG_COMM,muster,ierr)
565 * mpi_double_precision,man,idreal,
566 * CG_COMM,muster,ierr)
567 call mpi_recv(ene0,1,
568 * mpi_double_precision,man,idreal,
569 * CG_COMM,muster,ierr)
570 c print *,'result received from worker ',man,' sending now'
572 call var_to_geom(nvar,varia)
574 call etotal(energy(0))
578 write (iout,'(a,2i7)') 'Conformation #',iconf,ind(5)
581 call enerprint(energy(0))
582 call briefout(it,etot)
583 c if (minim) call briefout(it,etot)
585 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
586 write (istat,'(i5,19(f12.3))') iconf,
587 & (energy(print_order(i)),i=1,nprint_ene),etot,
588 & rms,frac,frac_nn,co
590 write (istat,'(i5,15(f12.3))') iconf,
591 & (energy(print_order(i)),i=1,nprint_ene),etot
596 read (intin,'(e15.10,e15.5)',end=1101,err=1101) time,ene
597 call read_x(intin,*11)
599 c Broadcast the order to compute internal coordinates to the slaves.
601 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
603 call int_from_cart1(.false.)
605 read (intin,'(i5)',end=1101,err=1101) iconf
606 call read_angles(intin,*11)
607 call geom_to_var(nvar,varia)
618 call mpi_send(ind,6,mpi_integer,man,idint,CG_COMM,
620 call mpi_send(varia,nvar,mpi_double_precision,man,
621 * idreal,CG_COMM,ierr)
622 call mpi_send(ene0,1,mpi_double_precision,man,
623 * idreal,CG_COMM,ierr)
624 nf_mcmf=nf_mcmf+ind(4)
630 call mpi_recv(ind,6,mpi_integer,mpi_any_source,idint,
631 * CG_COMM,muster,ierr)
632 man=muster(mpi_source)
633 call mpi_recv(varia,nvar,mpi_double_precision,
634 * man,idreal,CG_COMM,muster,ierr)
636 * mpi_double_precision,man,idreal,
637 * CG_COMM,muster,ierr)
638 call mpi_recv(ene0,1,
639 * mpi_double_precision,man,idreal,
640 * CG_COMM,muster,ierr)
642 call var_to_geom(nvar,varia)
644 call etotal(energy(0))
648 write (iout,'(a,2i7)') 'Conformation #',iconf,ind(5)
651 call enerprint(energy(0))
652 call briefout(it,etot)
654 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
655 write (istat,'(i5,19(f12.3))') iconf,
656 & (energy(print_order(i)),i=1,nprint_ene),etot,
657 & rms,frac,frac_nn,co
659 write (istat,'(i5,15(f12.3))') iconf,
660 & (energy(print_order(i)),i=1,nprint_ene),etot
672 call mpi_send(ind,6,mpi_integer,i,idint,CG_COMM,
677 open(intin,file=intinname,status='old')
678 write (istat,'(a5,20a12)')"# ",
679 & (wname(print_order(i)),i=1,nprint_ene)
680 write (istat,'("# ",20(1pe12.4))')
681 & (weights(print_order(i)),i=1,nprint_ene)
683 write (istat,'(a5,20a12)')"# ",
684 & (ename(print_order(i)),i=1,nprint_ene),
685 & "ETOT total","RMSD","nat.contact","nnt.contact"
687 write (istat,'(a5,14a12)')"# ",
688 & (ename(print_order(i)),i=1,nprint_ene),"ETOT total"
692 read (intin,'(e15.10,e15.5)',end=11,err=11) time,ene
693 call read_x(intin,*11)
695 c Broadcast the order to compute internal coordinates to the slaves.
697 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
699 call int_from_cart1(.false.)
701 read (intin,'(i5)',end=11,err=11) iconf
702 call read_angles(intin,*11)
703 call geom_to_var(nvar,varia)
706 write (iout,'(a,i7)') 'Conformation #',iconf
707 if (minim) call minimize(etot,varia,iretcode,nfun)
708 call etotal(energy(0))
711 call enerprint(energy(0))
712 if (minim) call briefout(it,etot)
714 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
715 write (istat,'(i5,18(f12.3))') iconf,
716 & (energy(print_order(i)),i=1,nprint_ene),
717 & etot,rms,frac,frac_nn,co
720 write (istat,'(i5,14(f12.3))') iconf,
721 & (energy(print_order(i)),i=1,nprint_ene),etot
728 c---------------------------------------------------------------------------
729 subroutine exec_checkgrad
735 include 'COMMON.SETUP'
736 include 'COMMON.TIME1'
737 include 'COMMON.INTERACT'
738 include 'COMMON.NAMES'
740 include 'COMMON.HEADER'
741 include 'COMMON.CONTROL'
742 include 'COMMON.CONTACTS'
743 include 'COMMON.CHAIN'
745 include 'COMMON.IOUNITS'
746 include 'COMMON.FFIELD'
747 include 'COMMON.REMD'
749 include 'COMMON.QRESTR'
750 include 'COMMON.SBRIDGE'
753 double precision energy(0:max_ene)
756 c vbld(i)=vbld(i)+ran_number(-0.1d0,0.1d0)
757 c if (itype(i).ne.10)
758 c & vbld(i+nres)=vbld(i+nres)+ran_number(-0.001d0,0.001d0)
760 if (indpdb.eq.0) call chainbuild
763 c dc(j,i)=dc(j,i)+ran_number(-0.2d0,0.2d0)
767 c if (itype(i).ne.10) then
769 c dc(j,i+nres)=dc(j,i+nres)+ran_number(-0.2d0,0.2d0)
774 c dc(j,0)=ran_number(-0.2d0,0.2d0)
787 print *, "AFTER read fragments"
788 write (iout,*) "iset",iset
790 write(iout,*) "fragment, weights, q0:"
792 write(iout,'(2i5,3(f8.1,f8.2))') ifrag_back(1,i,iset),
793 & ifrag_back(2,i,iset),
794 & wfrag_back(1,i,iset),qin_back(1,i,iset),
795 & wfrag_back(2,i,iset),qin_back(2,i,iset),
796 & wfrag_back(3,i,iset),qin_back(3,i,iset)
799 write(iout,*) "fragment, weights:"
801 write(iout,'(2i5,3f8.1)') ifrag_back(1,i,iset),
802 & ifrag_back(2,i,iset),wfrag_back(1,i,iset),
803 & wfrag_back(2,i,iset),wfrag_back(3,i,iset)
810 call rescale_weights(t_bath)
812 print *,"chainbuild_cart"
814 print *,"After cartprint"
817 print *,"before ETOT"
818 write (iout,*) "usampl",usampl
819 call etotal(energy(0))
821 call enerprint(energy(0))
822 write (iout,*) "Uconst",Uconst," Uconst_back",uconst_back
823 print *,'icheckgrad=',icheckgrad
825 goto (10,20,30) icheckgrad
826 10 call check_ecartint
828 20 call check_cartgrad
833 c---------------------------------------------------------------------------
840 c---------------------------------------------------------------------------
847 include 'COMMON.IOUNITS'
848 C Conformational Space Annealling programmed by Jooyoung Lee.
849 C This method works only with parallel machines!
853 write (iout,*) "CSA works on parallel machines only"
857 c---------------------------------------------------------------------------
858 subroutine exec_softreg
861 include 'COMMON.IOUNITS'
862 include 'COMMON.CONTROL'
863 double precision energy(0:max_ene),etot
864 double precision rms,frac,frac_nn,co
866 call etotal(energy(0))
867 call enerprint(energy(0))
868 if (.not.lsecondary) then
869 write(iout,*) 'Calling secondary structure recognition'
870 call secondary2(.true.)
872 write(iout,*) 'Using secondary structure supplied in pdb'
877 call etotal(energy(0))
879 call enerprint(energy(0))
881 call briefout(0,etot)
882 call secondary2(.true.)
883 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)