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
108 write (iout,'(a)') 'This calculation type is not supported',
114 if (fg_rank.eq.0) call finish_task
115 c call memmon_print_usage()
117 call print_detailed_timing
119 call MPI_Finalize(ierr)
122 call dajczas(tcpu(),hrtime,mintime,sectime)
123 stop '********** Program terminated normally.'
126 c--------------------------------------------------------------------------
132 include 'COMMON.SETUP'
133 include 'COMMON.CONTROL'
134 include 'COMMON.IOUNITS'
135 if (me.eq.king .or. .not. out1file)
136 & write (iout,*) "Calling chainbuild"
141 c---------------------------------------------------------------------------
142 subroutine exec_MREMD
147 include 'COMMON.SETUP'
148 include 'COMMON.CONTROL'
149 include 'COMMON.IOUNITS'
150 include 'COMMON.REMD'
151 if (me.eq.king .or. .not. out1file)
152 & write (iout,*) "Calling chainbuild"
154 if (me.eq.king .or. .not. out1file)
155 & write (iout,*) "Calling REMD"
166 c---------------------------------------------------------------------------
167 subroutine exec_eeval_or_minim
168 implicit real*8 (a-h,o-z)
173 include 'COMMON.SETUP'
174 include 'COMMON.TIME1'
175 include 'COMMON.INTERACT'
176 include 'COMMON.NAMES'
178 include 'COMMON.HEADER'
179 include 'COMMON.CONTROL'
180 include 'COMMON.CONTACTS'
181 include 'COMMON.CHAIN'
183 include 'COMMON.IOUNITS'
184 include 'COMMON.FFIELD'
185 include 'COMMON.REMD'
187 include 'COMMON.SBRIDGE'
189 double precision energy(0:n_ene)
190 double precision energy_long(0:n_ene),energy_short(0:n_ene)
191 double precision varia(maxvar)
192 if (indpdb.eq.0) call chainbuild
195 if (indpdb.ne.0) then
201 print *,'dc',dc(1,0),dc(2,0),dc(3,0)
203 print *,"Processor",myrank," after chainbuild"
205 call etotal_long(energy_long(0))
206 write (iout,*) "Printing long range energy"
207 call enerprint(energy_long(0))
208 call etotal_short(energy_short(0))
209 write (iout,*) "Printing short range energy"
210 call enerprint(energy_short(0))
212 energy(i)=energy_long(i)+energy_short(i)
213 write (iout,*) i,energy_long(i),energy_short(i),energy(i)
215 write (iout,*) "Printing long+short range energy"
216 call enerprint(energy(0))
218 call etotal(energy(0))
219 time_ene=MPI_Wtime()-time00
220 write (iout,*) "Time for energy evaluation",time_ene
221 print *,"after etotal"
224 call enerprint(energy(0))
225 call hairpin(.true.,nharp,iharp)
226 print *,'after hairpin'
227 call secondary2(.true.)
228 print *,'after secondary'
232 print *, 'Calling OVERLAP_SC'
233 call overlap_sc(fail)
237 call sc_move(2,nres-1,10,1d10,nft_sc,etot)
238 print *,'SC_move',nft_sc,etot
239 write(iout,*) 'SC_move',nft_sc,etot
243 print *, 'Calling MINIM_DC'
245 call minim_dc(etot,iretcode,nfun)
247 if (indpdb.ne.0) then
251 call geom_to_var(nvar,varia)
252 print *,'Calling MINIMIZE.'
254 call minimize(etot,varia,iretcode,nfun)
256 print *,'SUMSL return code is',iretcode,' eval ',nfun
257 evals=nfun/(MPI_WTIME()-time1)
258 print *,'# eval/s',evals
259 print *,'refstr=',refstr
260 call hairpin(.false.,nharp,iharp)
261 print *,'after hairpin'
262 call secondary2(.true.)
263 print *,'after secondary'
264 call etotal(energy(0))
266 call enerprint(energy(0))
269 call briefout(0,etot)
270 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
271 write (iout,'(a,i3)') 'SUMSL return code:',iretcode
272 write (iout,'(a,i20)') '# of energy evaluations:',nfun+1
273 write (iout,'(a,f16.3)')'# of energy evaluations/sec:',evals
275 print *,'refstr=',refstr
276 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
277 call briefout(0,etot)
279 if (outpdb) call pdbout(etot,titel(:32),ipdb)
280 if (outmol2) call mol2out(etot,titel(:32))
283 c---------------------------------------------------------------------------
284 subroutine exec_regularize
285 implicit real*8 (a-h,o-z)
290 include 'COMMON.SETUP'
291 include 'COMMON.TIME1'
292 include 'COMMON.INTERACT'
293 include 'COMMON.NAMES'
295 include 'COMMON.HEADER'
296 include 'COMMON.CONTROL'
297 include 'COMMON.CONTACTS'
298 include 'COMMON.CHAIN'
300 include 'COMMON.IOUNITS'
301 include 'COMMON.FFIELD'
302 include 'COMMON.REMD'
304 include 'COMMON.SBRIDGE'
305 double precision energy(0:n_ene)
310 call regularize(nct-nnt+1,etot,rms,cref(1,nnt,1),iretcode)
311 call etotal(energy(0))
312 energy(0)=energy(0)-energy(14)
314 call enerprint(energy(0))
316 call briefout(0,etot)
317 if (outpdb) call pdbout(etot,titel(:32),ipdb)
318 if (outmol2) call mol2out(etot,titel(:32))
319 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
320 write (iout,'(a,i3)') 'SUMSL return code:',iretcode
323 c---------------------------------------------------------------------------
324 subroutine exec_thread
329 include "COMMON.SETUP"
333 c---------------------------------------------------------------------------
335 implicit real*8 (a-h,o-z)
337 character*10 nodeinfo
338 double precision varia(maxvar)
342 include "COMMON.SETUP"
343 include 'COMMON.CONTROL'
347 if (modecalc.eq.3) then
353 if (modecalc.eq.3) then
364 c---------------------------------------------------------------------------
365 subroutine exec_mult_eeval_or_minim
366 implicit real*8 (a-h,o-z)
370 dimension muster(mpi_status_size)
372 include 'COMMON.SETUP'
373 include 'COMMON.TIME1'
374 include 'COMMON.INTERACT'
375 include 'COMMON.NAMES'
377 include 'COMMON.HEADER'
378 include 'COMMON.CONTROL'
379 include 'COMMON.CONTACTS'
380 include 'COMMON.CHAIN'
382 include 'COMMON.IOUNITS'
383 include 'COMMON.FFIELD'
384 include 'COMMON.REMD'
386 include 'COMMON.SBRIDGE'
387 double precision varia(maxvar)
389 double precision energy(0:max_ene)
399 open(intin,file=intinname,status='old')
400 write (istat,'(a5,20a12)')"# ",
401 & (wname(print_order(i)),i=1,nprint_ene)
403 write (istat,'(a5,20a12)')"# ",
404 & (ename(print_order(i)),i=1,nprint_ene),
405 & "ETOT total","RMSD","nat.contact","nnt.contact"
407 write (istat,'(a5,20a12)')"# ",
408 & (ename(print_order(i)),i=1,nprint_ene),"ETOT total"
414 read (intin,'(e15.10,e15.5)',end=1100,err=1100) time,ene
415 call read_x(intin,*11)
417 c Broadcast the order to compute internal coordinates to the slaves.
419 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
421 call int_from_cart1(.false.)
423 read (intin,'(i5)',end=1100,err=1100) iconf
424 call read_angles(intin,*11)
425 call geom_to_var(nvar,varia)
428 write (iout,'(a,i7)') 'Conformation #',iconf
429 call etotal(energy(0))
430 call briefout(iconf,energy(0))
431 call enerprint(energy(0))
434 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
435 write (istat,'(i5,20(f12.3))') iconf,
436 & (energy(print_order(i)),i=1,nprint_ene),etot,
437 & rms,frac,frac_nn,co
440 write (istat,'(i5,16(f12.3))') iconf,
441 & (energy(print_order(i)),i=1,nprint_ene),etot
457 if (mm.lt.nodes) then
459 read (intin,'(e15.10,e15.5)',end=11,err=11) time,ene
460 call read_x(intin,*11)
462 c Broadcast the order to compute internal coordinates to the slaves.
464 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
466 call int_from_cart1(.false.)
468 read (intin,'(i5)',end=11,err=11) iconf
469 call read_angles(intin,*11)
470 call geom_to_var(nvar,varia)
473 write (iout,'(a,i7)') 'Conformation #',iconf
483 call mpi_send(ind,6,mpi_integer,mm,idint,CG_COMM,
485 call mpi_send(varia,nvar,mpi_double_precision,mm,
486 * idreal,CG_COMM,ierr)
487 call mpi_send(ene0,1,mpi_double_precision,mm,
488 * idreal,CG_COMM,ierr)
489 c print *,'task ',n,' sent to worker ',mm,nvar
491 call mpi_recv(ind,6,mpi_integer,mpi_any_source,idint,
492 * CG_COMM,muster,ierr)
493 man=muster(mpi_source)
494 c print *,'receiving result from worker ',man,' (',iii1,iii,')'
495 call mpi_recv(varia,nvar,mpi_double_precision,
496 * man,idreal,CG_COMM,muster,ierr)
498 * mpi_double_precision,man,idreal,
499 * CG_COMM,muster,ierr)
500 call mpi_recv(ene0,1,
501 * mpi_double_precision,man,idreal,
502 * CG_COMM,muster,ierr)
503 c print *,'result received from worker ',man,' sending now'
505 call var_to_geom(nvar,varia)
507 call etotal(energy(0))
511 write (iout,'(a,2i7)') 'Conformation #',iconf,ind(5)
514 call enerprint(energy(0))
515 call briefout(it,etot)
516 c if (minim) call briefout(it,etot)
518 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
519 write (istat,'(i5,19(f12.3))') iconf,
520 & (energy(print_order(i)),i=1,nprint_ene),etot,
521 & rms,frac,frac_nn,co
523 write (istat,'(i5,15(f12.3))') iconf,
524 & (energy(print_order(i)),i=1,nprint_ene),etot
529 read (intin,'(e15.10,e15.5)',end=1101,err=1101) time,ene
530 call read_x(intin,*11)
532 c Broadcast the order to compute internal coordinates to the slaves.
534 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
536 call int_from_cart1(.false.)
538 read (intin,'(i5)',end=1101,err=1101) iconf
539 call read_angles(intin,*11)
540 call geom_to_var(nvar,varia)
551 call mpi_send(ind,6,mpi_integer,man,idint,CG_COMM,
553 call mpi_send(varia,nvar,mpi_double_precision,man,
554 * idreal,CG_COMM,ierr)
555 call mpi_send(ene0,1,mpi_double_precision,man,
556 * idreal,CG_COMM,ierr)
557 nf_mcmf=nf_mcmf+ind(4)
563 call mpi_recv(ind,6,mpi_integer,mpi_any_source,idint,
564 * CG_COMM,muster,ierr)
565 man=muster(mpi_source)
566 call mpi_recv(varia,nvar,mpi_double_precision,
567 * man,idreal,CG_COMM,muster,ierr)
569 * mpi_double_precision,man,idreal,
570 * CG_COMM,muster,ierr)
571 call mpi_recv(ene0,1,
572 * mpi_double_precision,man,idreal,
573 * CG_COMM,muster,ierr)
575 call var_to_geom(nvar,varia)
577 call etotal(energy(0))
581 write (iout,'(a,2i7)') 'Conformation #',iconf,ind(5)
584 call enerprint(energy(0))
585 call briefout(it,etot)
587 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
588 write (istat,'(i5,19(f12.3))') iconf,
589 & (energy(print_order(i)),i=1,nprint_ene),etot,
590 & rms,frac,frac_nn,co
592 write (istat,'(i5,15(f12.3))') iconf,
593 & (energy(print_order(i)),i=1,nprint_ene),etot
605 call mpi_send(ind,6,mpi_integer,i,idint,CG_COMM,
610 open(intin,file=intinname,status='old')
611 write (istat,'(a5,20a12)')"# ",
612 & (wname(print_order(i)),i=1,nprint_ene)
613 write (istat,'("# ",20(1pe12.4))')
614 & (weights(print_order(i)),i=1,nprint_ene)
616 write (istat,'(a5,20a12)')"# ",
617 & (ename(print_order(i)),i=1,nprint_ene),
618 & "ETOT total","RMSD","nat.contact","nnt.contact"
620 write (istat,'(a5,14a12)')"# ",
621 & (ename(print_order(i)),i=1,nprint_ene),"ETOT total"
625 read (intin,'(e15.10,e15.5)',end=1100,err=1100) time,ene
626 call read_x(intin,*11)
628 c Broadcast the order to compute internal coordinates to the slaves.
630 & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
632 call int_from_cart1(.false.)
634 read (intin,'(i5)',end=1100,err=1100) iconf
635 call read_angles(intin,*11)
636 call geom_to_var(nvar,varia)
639 write (iout,'(a,i7)') 'Conformation #',iconf
640 if (minim) call minimize(etot,varia,iretcode,nfun)
641 call etotal(energy(0))
644 call enerprint(energy(0))
645 if (minim) call briefout(it,etot)
647 call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
648 write (istat,'(i5,18(f12.3))') iconf,
649 & (energy(print_order(i)),i=1,nprint_ene),
650 & etot,rms,frac,frac_nn,co
653 write (istat,'(i5,14(f12.3))') iconf,
654 & (energy(print_order(i)),i=1,nprint_ene),etot
661 c---------------------------------------------------------------------------
662 subroutine exec_checkgrad
663 implicit real*8 (a-h,o-z)
668 include 'COMMON.SETUP'
669 include 'COMMON.TIME1'
670 include 'COMMON.INTERACT'
671 include 'COMMON.NAMES'
673 include 'COMMON.HEADER'
674 include 'COMMON.CONTROL'
675 include 'COMMON.CONTACTS'
676 include 'COMMON.CHAIN'
678 include 'COMMON.IOUNITS'
679 include 'COMMON.FFIELD'
680 include 'COMMON.REMD'
682 include 'COMMON.SBRIDGE'
684 double precision energy(0:max_ene)
686 c vbld(i)=vbld(i)+ran_number(-0.1d0,0.1d0)
687 c if (itype(i).ne.10)
688 c & vbld(i+nres)=vbld(i+nres)+ran_number(-0.001d0,0.001d0)
690 if (indpdb.eq.0) call chainbuild
693 c dc(j,i)=dc(j,i)+ran_number(-0.2d0,0.2d0)
697 c if (itype(i).ne.10) then
699 c dc(j,i+nres)=dc(j,i+nres)+ran_number(-0.2d0,0.2d0)
704 c dc(j,0)=ran_number(-0.2d0,0.2d0)
714 call etotal(energy(0))
716 call enerprint(energy(0))
717 write (iout,*) "Uconst",Uconst," Uconst_back",uconst_back
718 print *,'icheckgrad=',icheckgrad
719 goto (10,20,30) icheckgrad
720 10 call check_ecartint
722 20 call check_cartgrad
727 c---------------------------------------------------------------------------
734 c---------------------------------------------------------------------------
740 include 'COMMON.IOUNITS'
741 C Conformational Space Annealling programmed by Jooyoung Lee.
742 C This method works only with parallel machines!
746 write (iout,*) "CSA works on parallel machines only"
750 c---------------------------------------------------------------------------
751 subroutine exec_softreg
753 include 'COMMON.IOUNITS'
754 include 'COMMON.CONTROL'
755 double precision energy(0:max_ene)
757 call etotal(energy(0))
758 call enerprint(energy(0))
759 if (.not.lsecondary) then
760 write(iout,*) 'Calling secondary structure recognition'
761 call secondary2(debug)
763 write(iout,*) 'Using secondary structure supplied in pdb'
768 call etotal(energy(0))
770 call enerprint(energy(0))
772 call briefout(0,etot)
773 call secondary2(.true.)
774 if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)