timlim function ovrtim only on master and MPI_Bcast
[unres.git] / source / unres / src_MD / unres.F
1 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2 C                                                                              C
3 C                                U N R E S                                     C
4 C                                                                              C
5 C Program to carry out conformational search of proteins in an united-residue  C
6 C approximation.                                                               C
7 C                                                                              C
8 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9       implicit real*8 (a-h,o-z)
10       include 'DIMENSIONS'
11
12
13 #ifdef MPI
14       include 'mpif.h'
15       include 'COMMON.SETUP'
16 #endif
17       include 'COMMON.TIME1'
18       include 'COMMON.INTERACT'
19       include 'COMMON.NAMES'
20       include 'COMMON.GEO'
21       include 'COMMON.HEADER'
22       include 'COMMON.CONTROL'
23       include 'COMMON.CONTACTS'
24       include 'COMMON.CHAIN'
25       include 'COMMON.VAR'
26       include 'COMMON.IOUNITS'
27       include 'COMMON.FFIELD'
28       include 'COMMON.REMD'
29       include 'COMMON.MD'
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)',
41      & 'Energy map',
42      & 'CSA calculations',
43      & 'Not used 9',
44      & 'Not used 10',
45      & 'Soft regularization of PDB structure',
46      & 'Mesoscopic molecular dynamics (MD) ',
47      & 'Not used 13',
48      & 'Replica exchange molecular dynamics (REMD)'/
49       external ilen
50
51 c      call memmon_print_usage()
52
53       call init_task
54       if (me.eq.king)
55      & write(iout,*)'### LAST MODIFIED  03/28/12 23:29 by czarek'  
56       if (me.eq.king) call cinfo
57 C Read force field parameters and job setup data
58       call readrtns
59       if (me.eq.king .or. .not. out1file) then
60        write (iout,'(2a/)') 
61      & text_mode_calc(modecalc)(:ilen(text_mode_calc(modecalc))),
62      & ' calculation.' 
63        if (minim) write (iout,'(a)') 
64      &  'Conformations will be energy-minimized.'
65        write (iout,'(80(1h*)/)') 
66       endif
67       call flush(iout)
68 C
69       if (modecalc.eq.-2) then
70         call test
71         stop
72       else if (modecalc.eq.-1) then
73         write(iout,*) "call check_sc_map next"
74         call check_bond
75         stop
76       endif
77 #ifdef MPI
78       if (fg_rank.gt.0) then
79 C Fine-grain slaves just do energy and gradient components.
80         call ergastulum ! slave workhouse in Latin
81       else
82 #endif
83       if (modecalc.eq.0) then
84         call exec_eeval_or_minim
85       else if (modecalc.eq.1) then
86         call exec_regularize
87       else if (modecalc.eq.2) then
88         call exec_thread
89       else if (modecalc.eq.3 .or. modecalc .eq.6) then
90         call exec_MC
91       else if (modecalc.eq.4) then
92         call exec_mult_eeval_or_minim
93       else if (modecalc.eq.5) then
94         call exec_checkgrad
95       else if (ModeCalc.eq.7) then
96         call exec_map
97       else if (ModeCalc.eq.8) then
98         call exec_CSA
99       else if (modecalc.eq.11) then
100         call exec_softreg
101       else if (modecalc.eq.12) then
102         call exec_MD
103       else if (modecalc.eq.14) then
104         call exec_MREMD
105       else
106         write (iout,'(a)') 'This calculation type is not supported',
107      &   ModeCalc
108       endif
109 #ifdef MPI
110       endif
111 C Finish task.
112       if (fg_rank.eq.0) call finish_task
113 c      call memmon_print_usage()
114 #ifdef TIMING
115        call print_detailed_timing
116 #endif
117       call MPI_Finalize(ierr)
118       stop 'Bye Bye...'
119 #else
120       call dajczas(tcpu(),hrtime,mintime,sectime)
121       stop '********** Program terminated normally.'
122 #endif
123       end
124 c--------------------------------------------------------------------------
125       subroutine exec_MD
126       include 'DIMENSIONS'
127 #ifdef MPI
128       include "mpif.h"
129 #endif
130       include 'COMMON.SETUP'
131       include 'COMMON.CONTROL'
132       include 'COMMON.IOUNITS'
133       if (me.eq.king .or. .not. out1file)
134      &   write (iout,*) "Calling chainbuild"
135       call chainbuild
136       call MD
137       return
138       end
139 c---------------------------------------------------------------------------
140       subroutine exec_MREMD
141       include 'DIMENSIONS'
142 #ifdef MPI
143       include "mpif.h"
144       include 'COMMON.SETUP'
145       include 'COMMON.CONTROL'
146       include 'COMMON.IOUNITS'
147       include 'COMMON.REMD'
148       if (me.eq.king .or. .not. out1file)
149      &   write (iout,*) "Calling chainbuild"
150       call chainbuild
151       if (me.eq.king .or. .not. out1file)
152      &   write (iout,*) "Calling REMD"
153       if (remd_mlist) then 
154         call MREMD
155       else
156         do i=1,nrep
157           remd_m(i)=1
158         enddo
159         call MREMD
160       endif
161 #else
162       write (iout,*) "MREMD works on parallel machines only"
163 #endif
164       return
165       end
166 c---------------------------------------------------------------------------
167       subroutine exec_eeval_or_minim
168       implicit real*8 (a-h,o-z)
169       include 'DIMENSIONS'
170 #ifdef MPI
171       include 'mpif.h'
172 #endif
173       include 'COMMON.SETUP'
174       include 'COMMON.TIME1'
175       include 'COMMON.INTERACT'
176       include 'COMMON.NAMES'
177       include 'COMMON.GEO'
178       include 'COMMON.HEADER'
179       include 'COMMON.CONTROL'
180       include 'COMMON.CONTACTS'
181       include 'COMMON.CHAIN'
182       include 'COMMON.VAR'
183       include 'COMMON.IOUNITS'
184       include 'COMMON.FFIELD'
185       include 'COMMON.REMD'
186       include 'COMMON.MD'
187       include 'COMMON.SBRIDGE'
188       common /srutu/ icall
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
193 #ifdef MPI
194       time00=MPI_Wtime()
195 #else
196       time00=tcpu()
197 #endif
198       call chainbuild_cart
199       if (split_ene) then
200        print *,"Processor",myrank," after chainbuild"
201        icall=1
202        call etotal_long(energy_long(0))
203        write (iout,*) "Printing long range energy"
204        call enerprint(energy_long(0))
205        call etotal_short(energy_short(0))
206        write (iout,*) "Printing short range energy"
207        call enerprint(energy_short(0))
208        do i=0,n_ene
209          energy(i)=energy_long(i)+energy_short(i)
210          write (iout,*) i,energy_long(i),energy_short(i),energy(i)
211        enddo
212        write (iout,*) "Printing long+short range energy"
213        call enerprint(energy(0))
214       endif
215       call etotal(energy(0))
216 #ifdef MPI
217       time_ene=MPI_Wtime()-time00
218 #else
219       time_ene=tcpu()-time00
220 #endif
221       write (iout,*) "Time for energy evaluation",time_ene
222       etota = energy(0)
223       etot =etota
224       call enerprint(energy(0))
225       call hairpin(.true.,nharp,iharp)
226       call secondary2(.true.)
227       if (minim) then
228 crc overlap test
229         if (overlapsc) then 
230           call overlap_sc(fail)
231         endif 
232
233         if (searchsc) then 
234           call sc_move(2,nres-1,10,1d10,nft_sc,etot)
235         endif 
236
237         if (dccart) then
238 #ifdef MPI
239           time1=MPI_WTIME()
240 #else
241           time1=tcpu()
242 #endif
243           call minim_dc(etot,iretcode,nfun)
244         else
245           if (indpdb.ne.0) then 
246             call bond_regular
247             call chainbuild
248           endif
249           call geom_to_var(nvar,varia)
250 #ifdef MPI
251           time1=MPI_WTIME()
252 #else
253           time1=tcpu()
254 #endif
255           call minimize(etot,varia,iretcode,nfun)
256         endif
257         print *,'SUMSL return code is',iretcode,' eval ',nfun
258 #ifdef MPI
259         evals=nfun/(MPI_WTIME()-time1)
260 #else
261         evals=nfun/(tcpu()-time1)
262 #endif
263         print *,'# eval/s',evals
264         print *,'refstr=',refstr
265         call hairpin(.true.,nharp,iharp)
266         call secondary2(.true.)
267         call etotal(energy(0))
268         etot = energy(0)
269         call enerprint(energy(0))
270
271         call intout
272         call briefout(0,etot)
273         if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
274           write (iout,'(a,i3)') 'SUMSL return code:',iretcode
275           write (iout,'(a,i20)') '# of energy evaluations:',nfun+1
276           write (iout,'(a,f16.3)')'# of energy evaluations/sec:',evals
277       else
278         print *,'refstr=',refstr
279         if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
280         call briefout(0,etot)
281       endif
282       potE=etot
283 #ifdef NOXDR
284        if (outx) call cartout(0.0d0)
285 #else
286        if (outx) call cartoutx(0.0d0)
287 #endif
288       if (outpdb) call pdbout(etot,titel(:32),ipdb)
289       if (outmol2) call mol2out(etot,titel(:32))
290       return
291       end
292 c---------------------------------------------------------------------------
293       subroutine exec_regularize
294       implicit real*8 (a-h,o-z)
295       include 'DIMENSIONS'
296 #ifdef MPI
297       include 'mpif.h'
298 #endif
299       include 'COMMON.SETUP'
300       include 'COMMON.TIME1'
301       include 'COMMON.INTERACT'
302       include 'COMMON.NAMES'
303       include 'COMMON.GEO'
304       include 'COMMON.HEADER'
305       include 'COMMON.CONTROL'
306       include 'COMMON.CONTACTS'
307       include 'COMMON.CHAIN'
308       include 'COMMON.VAR'
309       include 'COMMON.IOUNITS'
310       include 'COMMON.FFIELD'
311       include 'COMMON.REMD'
312       include 'COMMON.MD'
313       include 'COMMON.SBRIDGE'
314       double precision energy(0:n_ene)
315
316       call gen_dist_constr
317       call sc_conf
318       call intout
319       call regularize(nct-nnt+1,etot,rms,cref(1,nnt),iretcode)
320       call etotal(energy(0))
321       energy(0)=energy(0)-energy(14)
322       etot=energy(0)
323       call enerprint(energy(0))
324       call intout
325       call briefout(0,etot)
326       potE=etot
327 #ifdef NOXDR
328       if (outx) call cartout(0.0d0)
329 #else
330       if (outx) call cartoutx(0.0d0)
331 #endif
332       if (outpdb) call pdbout(etot,titel(:32),ipdb)
333       if (outmol2) call mol2out(etot,titel(:32))
334       if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
335       write (iout,'(a,i3)') 'SUMSL return code:',iretcode
336       return
337       end
338 c---------------------------------------------------------------------------
339       subroutine exec_thread
340       include 'DIMENSIONS'
341 #ifdef MP
342       include "mpif.h"
343 #endif
344       include "COMMON.SETUP"
345       call thread_seq
346       return
347       end
348 c---------------------------------------------------------------------------
349       subroutine exec_MC
350       implicit real*8 (a-h,o-z)
351       include 'DIMENSIONS'
352       character*10 nodeinfo
353       double precision varia(maxvar)
354 #ifdef MPI
355       include "mpif.h"
356 #endif
357       include "COMMON.SETUP"
358       include 'COMMON.CONTROL'
359       call mcm_setup
360       if (minim) then
361 #ifdef MPI
362         if (modecalc.eq.3) then
363           call do_mcm(ipar)
364         else
365           call entmcm
366         endif
367 #else
368         if (modecalc.eq.3) then
369           call do_mcm(ipar)
370         else
371           call entmcm
372         endif
373 #endif
374       else
375         call monte_carlo
376       endif
377       return
378       end
379 c---------------------------------------------------------------------------
380       subroutine exec_mult_eeval_or_minim
381       implicit real*8 (a-h,o-z)
382       include 'DIMENSIONS'
383 #ifdef MPI
384       include 'mpif.h'
385       dimension muster(mpi_status_size)
386 #endif
387       include 'COMMON.SETUP'
388       include 'COMMON.TIME1'
389       include 'COMMON.INTERACT'
390       include 'COMMON.NAMES'
391       include 'COMMON.GEO'
392       include 'COMMON.HEADER'
393       include 'COMMON.CONTROL'
394       include 'COMMON.CONTACTS'
395       include 'COMMON.CHAIN'
396       include 'COMMON.VAR'
397       include 'COMMON.IOUNITS'
398       include 'COMMON.FFIELD'
399       include 'COMMON.REMD'
400       include 'COMMON.MD'
401       include 'COMMON.SBRIDGE'
402       double precision varia(maxvar)
403       dimension ind(6)
404       double precision energy(0:n_ene)
405       logical eof
406       eof=.false.
407 #ifdef MPI
408       if(me.ne.king) then
409         call minim_mcmf
410         return
411       endif
412
413       close (intin)
414       open(intin,file=intinname,status='old')
415       write (istat,'(a5,30a12)')"#    ",
416      &  (wname(print_order(i)),i=1,nprint_ene)
417       if (refstr) then
418         write (istat,'(a5,30a12)')"#    ",
419      &   (ename(print_order(i)),i=1,nprint_ene),
420      &   "ETOT total","RMSD","nat.contact","nnt.contact","cont.order"
421       else
422         write (istat,'(a5,30a12)')"#    ",
423      &    (ename(print_order(i)),i=1,nprint_ene),"ETOT total"
424       endif
425
426       if (.not.minim) then
427         do while (.not. eof)
428           if (read_cart) then
429             read (intin,'(e15.10,e15.5)',end=1100,err=1100) time,ene
430             call read_x(intin,*11)
431 #ifdef MPI
432 c Broadcast the order to compute internal coordinates to the slaves.
433             if (nfgtasks.gt.1)
434      &        call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
435 #endif
436             call int_from_cart1(.false.)
437           else
438             read (intin,'(i5)',end=1100,err=1100) iconf
439             call read_angles(intin,*11)
440             call geom_to_var(nvar,varia)
441             call chainbuild
442           endif
443           write (iout,'(a,i7)') 'Conformation #',iconf
444           call etotal(energy(0))
445           call briefout(iconf,energy(0))
446           call enerprint(energy(0))
447           etot=energy(0)
448           if (refstr) then 
449             call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
450             write (istat,'(i5,30(f12.3))') iconf,
451      &      (energy(print_order(i)),i=1,nprint_ene),etot,
452      &       rms,frac,frac_nn,co
453 cjlee end
454           else
455             write (istat,'(i5,30(f12.3))') iconf,
456      &     (energy(print_order(i)),i=1,nprint_ene),etot
457           endif
458         enddo
459 1100    continue
460         goto 1101
461       endif
462
463       mm=0
464       imm=0
465       nft=0
466       ene0=0.0d0
467       n=0
468       iconf=0
469 c      do n=1,nzsc
470       do while (.not. eof)
471         mm=mm+1
472         if (mm.lt.nodes) then
473           if (read_cart) then
474             read (intin,'(e15.10,e15.5)',end=11,err=11) time,ene
475             call read_x(intin,*11)
476 #ifdef MPI
477 c Broadcast the order to compute internal coordinates to the slaves.
478             if (nfgtasks.gt.1) 
479      &        call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
480 #endif
481             call int_from_cart1(.false.)
482           else
483             read (intin,'(i5)',end=11,err=11) iconf
484             call read_angles(intin,*11)
485             call geom_to_var(nvar,varia)
486             call chainbuild
487           endif
488
489           n=n+1
490           write (iout,*) 'Conformation #',iconf,' read'
491          imm=imm+1
492          ind(1)=1
493          ind(2)=n
494          ind(3)=0
495          ind(4)=0
496          ind(5)=0
497          ind(6)=0
498          ene0=0.0d0
499          call mpi_send(ind,6,mpi_integer,mm,idint,CG_COMM,
500      *                  ierr)
501          call mpi_send(varia,nvar,mpi_double_precision,mm,
502      *                  idreal,CG_COMM,ierr)
503          call mpi_send(ene0,1,mpi_double_precision,mm,
504      *                  idreal,CG_COMM,ierr)
505 c         print *,'task ',n,' sent to worker ',mm,nvar
506         else
507          call mpi_recv(ind,6,mpi_integer,mpi_any_source,idint,
508      *                 CG_COMM,muster,ierr)
509          man=muster(mpi_source)
510 c         print *,'receiving result from worker ',man,' (',iii1,iii,')'
511          call mpi_recv(varia,nvar,mpi_double_precision, 
512      *               man,idreal,CG_COMM,muster,ierr)
513          call mpi_recv(ene,1,
514      *               mpi_double_precision,man,idreal,
515      *               CG_COMM,muster,ierr)
516          call mpi_recv(ene0,1,
517      *               mpi_double_precision,man,idreal,
518      *               CG_COMM,muster,ierr)
519 c         print *,'result received from worker ',man,' sending now'
520
521           call var_to_geom(nvar,varia)
522           call chainbuild
523           call etotal(energy(0))
524           iconf=ind(2)
525           write (iout,*)
526           write (iout,*)
527           write (iout,*) 'Conformation #',iconf," sumsl return code ",
528      &                      ind(5)
529
530           etot=energy(0)
531           call enerprint(energy(0))
532           call briefout(it,etot)
533 c          if (minim) call briefout(it,etot)
534           if (refstr) then 
535             call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
536             write (istat,'(i5,30(f12.3))') iconf,
537      &     (energy(print_order(i)),i=1,nprint_ene),etot,
538      &     rms,frac,frac_nn,co
539           else
540             write (istat,'(i5,30(f12.3))') iconf,
541      &     (energy(print_order(i)),i=1,nprint_ene),etot
542           endif
543
544           imm=imm-1
545           if (read_cart) then
546             read (intin,'(e15.10,e15.5)',end=11,err=11) time,ene
547             call read_x(intin,*11)
548 #ifdef MPI
549 c Broadcast the order to compute internal coordinates to the slaves.
550             if (nfgtasks.gt.1)
551      &        call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
552 #endif
553             call int_from_cart1(.false.)
554           else
555             read (intin,'(i5)',end=11,err=11) iconf
556             call read_angles(intin,*11)
557             call geom_to_var(nvar,varia)
558             call chainbuild
559           endif
560           n=n+1
561           write (iout,*) 'Conformation #',iconf,' read'
562           imm=imm+1
563           ind(1)=1
564           ind(2)=n
565           ind(3)=0
566           ind(4)=0
567           ind(5)=0
568           ind(6)=0
569           call mpi_send(ind,6,mpi_integer,man,idint,CG_COMM,
570      *                  ierr)
571           call mpi_send(varia,nvar,mpi_double_precision,man, 
572      *                  idreal,CG_COMM,ierr)
573           call mpi_send(ene0,1,mpi_double_precision,man,
574      *                  idreal,CG_COMM,ierr)
575           nf_mcmf=nf_mcmf+ind(4)
576           nmin=nmin+1
577         endif
578       enddo
579 11    continue
580       do j=1,imm
581         call mpi_recv(ind,6,mpi_integer,mpi_any_source,idint,
582      *               CG_COMM,muster,ierr)
583         man=muster(mpi_source)
584         call mpi_recv(varia,nvar,mpi_double_precision, 
585      *               man,idreal,CG_COMM,muster,ierr)
586         call mpi_recv(ene,1,
587      *               mpi_double_precision,man,idreal,
588      *               CG_COMM,muster,ierr)
589         call mpi_recv(ene0,1,
590      *               mpi_double_precision,man,idreal,
591      *               CG_COMM,muster,ierr)
592
593         call var_to_geom(nvar,varia)
594         call chainbuild
595         call etotal(energy(0))
596         iconf=ind(2)
597         write (iout,*)
598         write (iout,*)
599         write (iout,*) 'Conformation #',iconf," sumsl return code ",
600      &                  ind(5)
601
602         etot=energy(0)
603         call enerprint(energy(0))
604         call briefout(it,etot)
605         if (refstr) then 
606           call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
607           write (istat,'(i5,30(f12.3))') iconf,
608      &   (energy(print_order(i)),i=1,nprint_ene),etot,
609      &   rms,frac,frac_nn,co
610         else
611           write (istat,'(i5,30(f12.3))') iconf,
612      &    (energy(print_order(i)),i=1,nprint_ene),etot
613         endif
614         nmin=nmin+1
615       enddo
616 1101  continue
617       do i=1, nodes-1
618          ind(1)=0
619          ind(2)=0
620          ind(3)=0
621          ind(4)=0
622          ind(5)=0
623          ind(6)=0
624          call mpi_send(ind,6,mpi_integer,i,idint,CG_COMM,
625      *                  ierr)
626       enddo
627 #else
628       close (intin)
629       open(intin,file=intinname,status='old')
630       write (istat,'(a5,20a12)')"#    ",
631      &   (wname(print_order(i)),i=1,nprint_ene)
632       write (istat,'("#    ",20(1pe12.4))')
633      &   (weights(print_order(i)),i=1,nprint_ene)
634       if (refstr) then
635         write (istat,'(a5,20a12)')"#    ",
636      &   (ename(print_order(i)),i=1,nprint_ene),
637      &   "ETOT total","RMSD","nat.contact","nnt.contact"
638       else
639         write (istat,'(a5,14a12)')"#    ",
640      &   (ename(print_order(i)),i=1,nprint_ene),"ETOT total"
641       endif
642       do while (.not. eof)
643           if (read_cart) then
644             read (intin,'(e15.10,e15.5)',end=1100,err=1100) time,ene
645             call read_x(intin,*11)
646 #ifdef MPI
647 c Broadcast the order to compute internal coordinates to the slaves.
648             if (nfgtasks.gt.1)
649      &        call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
650 #endif
651             call int_from_cart1(.false.)
652           else
653             read (intin,'(i5)',end=1100,err=1100) iconf
654             call read_angles(intin,*11)
655             call geom_to_var(nvar,varia)
656             call chainbuild
657           endif
658         write (iout,'(a,i7)') 'Conformation #',iconf
659         if (minim) call minimize(etot,varia,iretcode,nfun)
660         call etotal(energy(0))
661
662         etot=energy(0)
663         call enerprint(energy(0))
664         if (minim) call briefout(it,etot) 
665         if (refstr) then 
666           call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
667           write (istat,'(i5,18(f12.3))') iconf,
668      &   (energy(print_order(i)),i=1,nprint_ene),
669      &   etot,rms,frac,frac_nn,co
670 cjlee end
671         else
672           write (istat,'(i5,14(f12.3))') iconf,
673      &   (energy(print_order(i)),i=1,nprint_ene),etot
674         endif
675       enddo
676    11 continue
677  1100 continue
678 #endif
679       return
680       end
681 c---------------------------------------------------------------------------
682       subroutine exec_checkgrad
683       implicit real*8 (a-h,o-z)
684       include 'DIMENSIONS'
685 #ifdef MPI
686       include 'mpif.h'
687 #endif
688       include 'COMMON.SETUP'
689       include 'COMMON.TIME1'
690       include 'COMMON.INTERACT'
691       include 'COMMON.NAMES'
692       include 'COMMON.GEO'
693       include 'COMMON.HEADER'
694       include 'COMMON.CONTROL'
695       include 'COMMON.CONTACTS'
696       include 'COMMON.CHAIN'
697       include 'COMMON.VAR'
698       include 'COMMON.IOUNITS'
699       include 'COMMON.FFIELD'
700       include 'COMMON.REMD'
701       include 'COMMON.MD'
702       include 'COMMON.SBRIDGE'
703       common /srutu/ icall
704       double precision energy(0:max_ene)
705 c      do i=2,nres
706 c        vbld(i)=vbld(i)+ran_number(-0.1d0,0.1d0)
707 c        if (itype(i).ne.10) 
708 c     &      vbld(i+nres)=vbld(i+nres)+ran_number(-0.001d0,0.001d0)
709 c      enddo
710       if (indpdb.eq.0) call chainbuild
711 c      do i=0,nres
712 c        do j=1,3
713 c          dc(j,i)=dc(j,i)+ran_number(-0.2d0,0.2d0)
714 c        enddo
715 c      enddo
716 c      do i=1,nres-1
717 c        if (itype(i).ne.10) then
718 c          do j=1,3
719 c            dc(j,i+nres)=dc(j,i+nres)+ran_number(-0.2d0,0.2d0)
720 c          enddo
721 c        endif
722 c      enddo
723 c      do j=1,3
724 c        dc(j,0)=ran_number(-0.2d0,0.2d0)
725 c      enddo
726       usampl=.true.
727       totT=1.d0
728       eq_time=0.0d0
729       call read_fragments
730       read(inp,*) t_bath
731       call rescale_weights(t_bath)
732       call chainbuild_cart
733       call cartprint
734       call intout
735       icall=1
736       call etotal(energy(0))
737       etot = energy(0)
738       call enerprint(energy(0))
739       write (iout,*) "Uconst",Uconst," Uconst_back",uconst_back
740       print *,'icheckgrad=',icheckgrad
741       goto (10,20,30) icheckgrad
742   10  call check_ecartint
743       return
744   20  call check_cartgrad
745       return
746   30  call check_eint
747       return
748       end
749 c---------------------------------------------------------------------------
750       subroutine exec_map
751 C Energy maps
752       call map_read
753       call map
754       return
755       end
756 c---------------------------------------------------------------------------
757       subroutine exec_CSA
758 #ifdef MPI
759       include "mpif.h"
760 #endif
761       include 'DIMENSIONS'
762       include 'COMMON.IOUNITS'
763 C Conformational Space Annealling programmed by Jooyoung Lee.
764 C This method works only with parallel machines!
765 #ifdef MPI
766 csa      call together
767       write (iout,*) "CSA is not supported in this version"
768 #else
769 csa      write (iout,*) "CSA works on parallel machines only"
770       write (iout,*) "CSA is not supported in this version"
771 #endif
772       return
773       end
774 c---------------------------------------------------------------------------
775       subroutine exec_softreg
776       implicit real*8 (a-h,o-z)
777       include 'DIMENSIONS'
778       include 'COMMON.IOUNITS'
779       include 'COMMON.CONTROL'
780       double precision energy(0:max_ene)
781       logical debug /.false./
782       call chainbuild
783       call etotal(energy(0))
784       call enerprint(energy(0))
785       if (.not.lsecondary) then
786         write(iout,*) 'Calling secondary structure recognition'
787         call secondary2(debug)
788       else
789         write(iout,*) 'Using secondary structure supplied in pdb'
790       endif
791
792       call softreg
793
794       call etotal(energy(0))
795       etot=energy(0)
796       call enerprint(energy(0))
797       call intout
798       call briefout(0,etot)
799       call secondary2(.true.)
800       if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
801       return
802       end