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
98 else if (ModeCalc.eq.7) then
100 else if (ModeCalc.eq.8) then
102 else if (modecalc.eq.11) then
104 else if (modecalc.eq.12) then
106 else if (modecalc.eq.14) then
109 write (iout,'(a)') 'This calculation type is not supported',
115 if (fg_rank.eq.0) call finish_task
116 c call memmon_print_usage()
118 call print_detailed_timing
120 call MPI_Finalize(ierr)
123 call dajczas(tcpu(),hrtime,mintime,sectime)
124 stop '********** Program terminated normally.'
127 c--------------------------------------------------------------------------
133 include 'COMMON.SETUP'
134 include 'COMMON.CONTROL'
135 include 'COMMON.IOUNITS'
136 if (me.eq.king .or. .not. out1file)
137 & write (iout,*) "Calling chainbuild"
142 c---------------------------------------------------------------------------
143 subroutine exec_MREMD
148 include 'COMMON.SETUP'
149 include 'COMMON.CONTROL'
150 include 'COMMON.IOUNITS'
151 include 'COMMON.REMD'
152 if (me.eq.king .or. .not. out1file)
153 & write (iout,*) "Calling chainbuild"
155 if (me.eq.king .or. .not. out1file)
156 & write (iout,*) "Calling REMD"
167 c---------------------------------------------------------------------------
168 subroutine exec_eeval_or_minim
169 implicit real*8 (a-h,o-z)
174 include 'COMMON.SETUP'
175 include 'COMMON.TIME1'
176 include 'COMMON.INTERACT'
177 include 'COMMON.NAMES'
179 include 'COMMON.HEADER'
180 include 'COMMON.CONTROL'
181 include 'COMMON.CONTACTS'
182 include 'COMMON.CHAIN'
184 include 'COMMON.IOUNITS'
185 include 'COMMON.FFIELD'
186 include 'COMMON.REMD'
188 include 'COMMON.SBRIDGE'
190 double precision energy(0:n_ene)
191 double precision energy_long(0:n_ene),energy_short(0:n_ene)
192 double precision varia(maxvar)
193 if (indpdb.eq.0) call chainbuild
197 print *,"Processor",myrank," after chainbuild"
199 call etotal_long(energy_long(0))
200 write (iout,*) "Printing long range energy"
201 call enerprint(energy_long(0))
202 call etotal_short(energy_short(0))
203 write (iout,*) "Printing short range energy"
204 call enerprint(energy_short(0))
206 energy(i)=energy_long(i)+energy_short(i)
207 write (iout,*) i,energy_long(i),energy_short(i),energy(i)
209 write (iout,*) "Printing long+short range energy"
210 call enerprint(energy(0))
212 call etotal(energy(0))
213 time_ene=MPI_Wtime()-time00
214 write (iout,*) "Time for energy evaluation",time_ene
215 print *,"after etotal"
218 call enerprint(energy(0))
219 call hairpin(.true.,nharp,iharp)
220 call secondary2(.true.)
224 print *, 'Calling OVERLAP_SC'
225 call overlap_sc(fail)
229 call sc_move(2,nres-1,10,1d10,nft_sc,etot)
230 print *,'SC_move',nft_sc,etot
231 write(iout,*) 'SC_move',nft_sc,etot
235 print *, 'Calling MINIM_DC'
237 call minim_dc(etot,iretcode,nfun)
239 if (indpdb.ne.0) then
243 call geom_to_var(nvar,varia)
244 print *,'Calling MINIMIZE.'
246 call minimize(etot,varia,iretcode,nfun)
248 print *,'SUMSL return code is',iretcode,' eval ',nfun
249 evals=nfun/(MPI_WTIME()-time1)
250 print *,'# eval/s',evals
251 print *,'refstr=',refstr
252 call hairpin(.true.,nharp,iharp)
253 call secondary2(.true.)
254 call etotal(energy(0))
256 call enerprint(energy(0))
259 call briefout(0,etot)
260 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
261 write (iout,'(a,i3)') 'SUMSL return code:',iretcode
262 write (iout,'(a,i20)') '# of energy evaluations:',nfun+1
263 write (iout,'(a,f16.3)')'# of energy evaluations/sec:',evals
265 print *,'refstr=',refstr
266 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
267 call briefout(0,etot)
269 if (outpdb) call pdbout(etot,titel(:50),ipdb)
270 if (outmol2) call mol2out(etot,titel)
273 c---------------------------------------------------------------------------
274 subroutine exec_regularize
275 implicit real*8 (a-h,o-z)
280 include 'COMMON.SETUP'
281 include 'COMMON.TIME1'
282 include 'COMMON.INTERACT'
283 include 'COMMON.NAMES'
285 include 'COMMON.HEADER'
286 include 'COMMON.CONTROL'
287 include 'COMMON.CONTACTS'
288 include 'COMMON.CHAIN'
290 include 'COMMON.IOUNITS'
291 include 'COMMON.FFIELD'
292 include 'COMMON.REMD'
294 include 'COMMON.SBRIDGE'
295 double precision energy(0:n_ene)
300 call regularize(nct-nnt+1,etot,rms,cref(1,nnt,1),iretcode)
301 call etotal(energy(0))
302 energy(0)=energy(0)-energy(14)
304 call enerprint(energy(0))
306 call briefout(0,etot)
307 if (outpdb) call pdbout(etot,titel,ipdb)
308 if (outmol2) call mol2out(etot,titel(:32))
309 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
310 write (iout,'(a,i3)') 'SUMSL return code:',iretcode
313 c---------------------------------------------------------------------------
314 subroutine exec_thread
319 include "COMMON.SETUP"
323 c---------------------------------------------------------------------------
325 implicit real*8 (a-h,o-z)
327 character*10 nodeinfo
328 double precision varia(maxvar)
332 include "COMMON.SETUP"
333 include 'COMMON.CONTROL'
337 if (modecalc.eq.3) then
343 if (modecalc.eq.3) then
354 c---------------------------------------------------------------------------
355 subroutine exec_mult_eeval_or_minim
356 implicit real*8 (a-h,o-z)
360 dimension muster(mpi_status_size)
362 include 'COMMON.SETUP'
363 include 'COMMON.TIME1'
364 include 'COMMON.INTERACT'
365 include 'COMMON.NAMES'
367 include 'COMMON.HEADER'
368 include 'COMMON.CONTROL'
369 include 'COMMON.CONTACTS'
370 include 'COMMON.CHAIN'
372 include 'COMMON.IOUNITS'
373 include 'COMMON.FFIELD'
374 include 'COMMON.REMD'
376 include 'COMMON.SBRIDGE'
377 double precision varia(maxvar)
379 double precision energy(0:max_ene)
389 open(intin,file=intinname,status='old')
390 write (istat,'(a5,20a12)')"# ",
391 & (wname(print_order(i)),i=1,nprint_ene)
393 write (istat,'(a5,20a12)')"# ",
394 & (ename(print_order(i)),i=1,nprint_ene),
395 & "ETOT total","RMSD","nat.contact","nnt.contact"
397 write (istat,'(a5,20a12)')"# ",
398 & (ename(print_order(i)),i=1,nprint_ene),"ETOT total"
404 read (intin,'(e15.10,e15.5)',end=1100,err=1100) time,ene
405 call read_x(intin,*11)
407 c Broadcast the order to compute internal coordinates to the slaves.
409 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
411 call int_from_cart1(.false.)
413 read (intin,'(i5)',end=1100,err=1100) iconf
414 call read_angles(intin,*11)
415 call geom_to_var(nvar,varia)
418 write (iout,'(a,i7)') 'Conformation #',iconf
419 call etotal(energy(0))
420 call briefout(iconf,energy(0))
421 call enerprint(energy(0))
424 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
425 write (istat,'(i5,20(f12.3))') iconf,
426 & (energy(print_order(i)),i=1,nprint_ene),etot,
427 & rms,frac,frac_nn,co
430 write (istat,'(i5,16(f12.3))') iconf,
431 & (energy(print_order(i)),i=1,nprint_ene),etot
447 if (mm.lt.nodes) then
449 read (intin,'(e15.10,e15.5)',end=11,err=11) time,ene
450 call read_x(intin,*11)
452 c Broadcast the order to compute internal coordinates to the slaves.
454 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
456 call int_from_cart1(.false.)
458 read (intin,'(i5)',end=11,err=11) iconf
459 call read_angles(intin,*11)
460 call geom_to_var(nvar,varia)
463 write (iout,'(a,i7)') 'Conformation #',iconf
473 call mpi_send(ind,6,mpi_integer,mm,idint,CG_COMM,
475 call mpi_send(varia,nvar,mpi_double_precision,mm,
476 * idreal,CG_COMM,ierr)
477 call mpi_send(ene0,1,mpi_double_precision,mm,
478 * idreal,CG_COMM,ierr)
479 c print *,'task ',n,' sent to worker ',mm,nvar
481 call mpi_recv(ind,6,mpi_integer,mpi_any_source,idint,
482 * CG_COMM,muster,ierr)
483 man=muster(mpi_source)
484 c print *,'receiving result from worker ',man,' (',iii1,iii,')'
485 call mpi_recv(varia,nvar,mpi_double_precision,
486 * man,idreal,CG_COMM,muster,ierr)
488 * mpi_double_precision,man,idreal,
489 * CG_COMM,muster,ierr)
490 call mpi_recv(ene0,1,
491 * mpi_double_precision,man,idreal,
492 * CG_COMM,muster,ierr)
493 c print *,'result received from worker ',man,' sending now'
495 call var_to_geom(nvar,varia)
497 call etotal(energy(0))
501 write (iout,'(a,2i7)') 'Conformation #',iconf,ind(5)
504 call enerprint(energy(0))
505 call briefout(it,etot)
506 c if (minim) call briefout(it,etot)
508 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
509 write (istat,'(i5,19(f12.3))') iconf,
510 & (energy(print_order(i)),i=1,nprint_ene),etot,
511 & rms,frac,frac_nn,co
513 write (istat,'(i5,15(f12.3))') iconf,
514 & (energy(print_order(i)),i=1,nprint_ene),etot
519 read (intin,'(e15.10,e15.5)',end=1101,err=1101) time,ene
520 call read_x(intin,*11)
522 c Broadcast the order to compute internal coordinates to the slaves.
524 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
526 call int_from_cart1(.false.)
528 read (intin,'(i5)',end=1101,err=1101) iconf
529 call read_angles(intin,*11)
530 call geom_to_var(nvar,varia)
541 call mpi_send(ind,6,mpi_integer,man,idint,CG_COMM,
543 call mpi_send(varia,nvar,mpi_double_precision,man,
544 * idreal,CG_COMM,ierr)
545 call mpi_send(ene0,1,mpi_double_precision,man,
546 * idreal,CG_COMM,ierr)
547 nf_mcmf=nf_mcmf+ind(4)
553 call mpi_recv(ind,6,mpi_integer,mpi_any_source,idint,
554 * CG_COMM,muster,ierr)
555 man=muster(mpi_source)
556 call mpi_recv(varia,nvar,mpi_double_precision,
557 * man,idreal,CG_COMM,muster,ierr)
559 * mpi_double_precision,man,idreal,
560 * CG_COMM,muster,ierr)
561 call mpi_recv(ene0,1,
562 * mpi_double_precision,man,idreal,
563 * CG_COMM,muster,ierr)
565 call var_to_geom(nvar,varia)
567 call etotal(energy(0))
571 write (iout,'(a,2i7)') 'Conformation #',iconf,ind(5)
574 call enerprint(energy(0))
575 call briefout(it,etot)
577 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
578 write (istat,'(i5,19(f12.3))') iconf,
579 & (energy(print_order(i)),i=1,nprint_ene),etot,
580 & rms,frac,frac_nn,co
582 write (istat,'(i5,15(f12.3))') iconf,
583 & (energy(print_order(i)),i=1,nprint_ene),etot
595 call mpi_send(ind,6,mpi_integer,i,idint,CG_COMM,
600 open(intin,file=intinname,status='old')
601 write (istat,'(a5,20a12)')"# ",
602 & (wname(print_order(i)),i=1,nprint_ene)
603 write (istat,'("# ",20(1pe12.4))')
604 & (weights(print_order(i)),i=1,nprint_ene)
606 write (istat,'(a5,20a12)')"# ",
607 & (ename(print_order(i)),i=1,nprint_ene),
608 & "ETOT total","RMSD","nat.contact","nnt.contact"
610 write (istat,'(a5,14a12)')"# ",
611 & (ename(print_order(i)),i=1,nprint_ene),"ETOT total"
615 read (intin,'(e15.10,e15.5)',end=1100,err=1100) time,ene
616 call read_x(intin,*11)
618 c Broadcast the order to compute internal coordinates to the slaves.
620 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
622 call int_from_cart1(.false.)
624 read (intin,'(i5)',end=1100,err=1100) iconf
625 call read_angles(intin,*11)
626 call geom_to_var(nvar,varia)
629 write (iout,'(a,i7)') 'Conformation #',iconf
630 if (minim) call minimize(etot,varia,iretcode,nfun)
631 call etotal(energy(0))
634 call enerprint(energy(0))
635 if (minim) call briefout(it,etot)
637 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
638 write (istat,'(i5,18(f12.3))') iconf,
639 & (energy(print_order(i)),i=1,nprint_ene),
640 & etot,rms,frac,frac_nn,co
643 write (istat,'(i5,14(f12.3))') iconf,
644 & (energy(print_order(i)),i=1,nprint_ene),etot
651 c---------------------------------------------------------------------------
652 subroutine exec_checkgrad
653 implicit real*8 (a-h,o-z)
658 include 'COMMON.SETUP'
659 include 'COMMON.TIME1'
660 include 'COMMON.INTERACT'
661 include 'COMMON.NAMES'
663 include 'COMMON.HEADER'
664 include 'COMMON.CONTROL'
665 include 'COMMON.CONTACTS'
666 include 'COMMON.CHAIN'
668 include 'COMMON.IOUNITS'
669 include 'COMMON.FFIELD'
670 include 'COMMON.REMD'
672 include 'COMMON.SBRIDGE'
674 double precision energy(0:max_ene)
676 c vbld(i)=vbld(i)+ran_number(-0.1d0,0.1d0)
677 c if (itype(i).ne.10)
678 c & vbld(i+nres)=vbld(i+nres)+ran_number(-0.001d0,0.001d0)
680 if (indpdb.eq.0) call chainbuild
683 c dc(j,i)=dc(j,i)+ran_number(-0.2d0,0.2d0)
687 c if (itype(i).ne.10) then
689 c dc(j,i+nres)=dc(j,i+nres)+ran_number(-0.2d0,0.2d0)
694 c dc(j,0)=ran_number(-0.2d0,0.2d0)
704 call etotal(energy(0))
706 call enerprint(energy(0))
707 write (iout,*) "Uconst",Uconst," Uconst_back",uconst_back
708 print *,'icheckgrad=',icheckgrad
709 goto (10,20,30) icheckgrad
715 20 print *,'ja pierdole'
722 c---------------------------------------------------------------------------
729 c---------------------------------------------------------------------------
735 include 'COMMON.IOUNITS'
736 C Conformational Space Annealling programmed by Jooyoung Lee.
737 C This method works only with parallel machines!
741 write (iout,*) "CSA works on parallel machines only"
745 c---------------------------------------------------------------------------
746 subroutine exec_softreg
748 include 'COMMON.IOUNITS'
749 include 'COMMON.CONTROL'
750 double precision energy(0:max_ene)
752 call etotal(energy(0))
753 call enerprint(energy(0))
754 if (.not.lsecondary) then
755 write(iout,*) 'Calling secondary structure recognition'
756 call secondary2(debug)
758 write(iout,*) 'Using secondary structure supplied in pdb'
763 call etotal(energy(0))
765 call enerprint(energy(0))
767 call briefout(0,etot)
768 call secondary2(.true.)
769 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)