ctest wham newcorr
[unres.git] / source / unres / src_MD-M-newcorr / 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  4/25/08 7:29PM by adam'  
56       if (me.eq.king) call cinfo
57 C Read force field parameters and job setup data
58       call readrtns
59       call flush(iout)
60 C
61       if (me.eq.king .or. .not. out1file) then
62        write (iout,'(2a/)') 
63      & text_mode_calc(modecalc)(:ilen(text_mode_calc(modecalc))),
64      & ' calculation.' 
65        if (minim) write (iout,'(a)') 
66      &  'Conformations will be energy-minimized.'
67        write (iout,'(80(1h*)/)') 
68       endif
69       call flush(iout)
70 C
71       if (modecalc.eq.-2) then
72         call test
73         stop
74       else if (modecalc.eq.-1) then
75         write(iout,*) "call check_sc_map next"
76         call check_bond
77         stop
78       endif
79 #ifdef MPI
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
83       else
84 #endif
85       if (modecalc.eq.0) then
86         call exec_eeval_or_minim
87       else if (modecalc.eq.1) then
88         call exec_regularize
89       else if (modecalc.eq.2) then
90         call exec_thread
91       else if (modecalc.eq.3 .or. modecalc .eq.6) then
92         call exec_MC
93       else if (modecalc.eq.4) then
94         call exec_mult_eeval_or_minim
95       else if (modecalc.eq.5) then
96         call exec_checkgrad
97         call exec_checkgrad
98       else if (ModeCalc.eq.7) then
99         call exec_map
100       else if (ModeCalc.eq.8) then
101         call exec_CSA
102       else if (modecalc.eq.11) then
103         call exec_softreg
104       else if (modecalc.eq.12) then
105         call exec_MD
106       else if (modecalc.eq.14) then
107         call exec_MREMD
108       else
109         write (iout,'(a)') 'This calculation type is not supported',
110      &   ModeCalc
111       endif
112 #ifdef MPI
113       endif
114 C Finish task.
115       if (fg_rank.eq.0) call finish_task
116 c      call memmon_print_usage()
117 #ifdef TIMING
118        call print_detailed_timing
119 #endif
120       call MPI_Finalize(ierr)
121       stop 'Bye Bye...'
122 #else
123       call dajczas(tcpu(),hrtime,mintime,sectime)
124       stop '********** Program terminated normally.'
125 #endif
126       end
127 c--------------------------------------------------------------------------
128       subroutine exec_MD
129       include 'DIMENSIONS'
130 #ifdef MPI
131       include "mpif.h"
132 #endif
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"
138       call chainbuild
139       call MD
140       return
141       end
142 c---------------------------------------------------------------------------
143       subroutine exec_MREMD
144       include 'DIMENSIONS'
145 #ifdef MPI
146       include "mpif.h"
147 #endif
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"
154       call chainbuild
155       if (me.eq.king .or. .not. out1file)
156      &   write (iout,*) "Calling REMD"
157       if (remd_mlist) then 
158         call MREMD
159       else
160         do i=1,nrep
161           remd_m(i)=1
162         enddo
163         call MREMD
164       endif
165       return
166       end
167 c---------------------------------------------------------------------------
168       subroutine exec_eeval_or_minim
169       implicit real*8 (a-h,o-z)
170       include 'DIMENSIONS'
171 #ifdef MPI
172       include 'mpif.h'
173 #endif
174       include 'COMMON.SETUP'
175       include 'COMMON.TIME1'
176       include 'COMMON.INTERACT'
177       include 'COMMON.NAMES'
178       include 'COMMON.GEO'
179       include 'COMMON.HEADER'
180       include 'COMMON.CONTROL'
181       include 'COMMON.CONTACTS'
182       include 'COMMON.CHAIN'
183       include 'COMMON.VAR'
184       include 'COMMON.IOUNITS'
185       include 'COMMON.FFIELD'
186       include 'COMMON.REMD'
187       include 'COMMON.MD'
188       include 'COMMON.SBRIDGE'
189       common /srutu/ icall
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
194       time00=MPI_Wtime()
195       call chainbuild_cart
196       if (split_ene) then
197        print *,"Processor",myrank," after chainbuild"
198        icall=1
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))
205        do i=0,n_ene
206          energy(i)=energy_long(i)+energy_short(i)
207          write (iout,*) i,energy_long(i),energy_short(i),energy(i)
208        enddo
209        write (iout,*) "Printing long+short range energy"
210        call enerprint(energy(0))
211       endif
212       call etotal(energy(0))
213       time_ene=MPI_Wtime()-time00
214       write (iout,*) "Time for energy evaluation",time_ene
215       print *,"after etotal"
216       etota = energy(0)
217       etot =etota
218       call enerprint(energy(0))
219       call hairpin(.true.,nharp,iharp)
220       call secondary2(.true.)
221       if (minim) then
222 crc overlap test
223         if (overlapsc) then 
224           print *, 'Calling OVERLAP_SC'
225           call overlap_sc(fail)
226         endif 
227
228         if (searchsc) then 
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
232         endif 
233
234         if (dccart) then
235           print *, 'Calling MINIM_DC'
236           time1=MPI_WTIME()
237           call minim_dc(etot,iretcode,nfun)
238         else
239           if (indpdb.ne.0) then 
240             call bond_regular
241             call chainbuild
242           endif
243           call geom_to_var(nvar,varia)
244           print *,'Calling MINIMIZE.'
245           time1=MPI_WTIME()
246           call minimize(etot,varia,iretcode,nfun)
247         endif
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))
255         etot = energy(0)
256         call enerprint(energy(0))
257
258         call intout
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
264       else
265         print *,'refstr=',refstr
266         if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
267         call briefout(0,etot)
268       endif
269       if (outpdb) call pdbout(etot,titel(:50),ipdb)
270       if (outmol2) call mol2out(etot,titel)
271       return
272       end
273 c---------------------------------------------------------------------------
274       subroutine exec_regularize
275       implicit real*8 (a-h,o-z)
276       include 'DIMENSIONS'
277 #ifdef MPI
278       include 'mpif.h'
279 #endif
280       include 'COMMON.SETUP'
281       include 'COMMON.TIME1'
282       include 'COMMON.INTERACT'
283       include 'COMMON.NAMES'
284       include 'COMMON.GEO'
285       include 'COMMON.HEADER'
286       include 'COMMON.CONTROL'
287       include 'COMMON.CONTACTS'
288       include 'COMMON.CHAIN'
289       include 'COMMON.VAR'
290       include 'COMMON.IOUNITS'
291       include 'COMMON.FFIELD'
292       include 'COMMON.REMD'
293       include 'COMMON.MD'
294       include 'COMMON.SBRIDGE'
295       double precision energy(0:n_ene)
296
297       call gen_dist_constr
298       call sc_conf
299       call intout
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)
303       etot=energy(0)
304       call enerprint(energy(0))
305       call intout
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
311       return
312       end
313 c---------------------------------------------------------------------------
314       subroutine exec_thread
315       include 'DIMENSIONS'
316 #ifdef MP
317       include "mpif.h"
318 #endif
319       include "COMMON.SETUP"
320       call thread_seq
321       return
322       end
323 c---------------------------------------------------------------------------
324       subroutine exec_MC
325       implicit real*8 (a-h,o-z)
326       include 'DIMENSIONS'
327       character*10 nodeinfo
328       double precision varia(maxvar)
329 #ifdef MPI
330       include "mpif.h"
331 #endif
332       include "COMMON.SETUP"
333       include 'COMMON.CONTROL'
334       call mcm_setup
335       if (minim) then
336 #ifdef MPI
337         if (modecalc.eq.3) then
338           call do_mcm(ipar)
339         else
340           call entmcm
341         endif
342 #else
343         if (modecalc.eq.3) then
344           call do_mcm(ipar)
345         else
346           call entmcm
347         endif
348 #endif
349       else
350         call monte_carlo
351       endif
352       return
353       end
354 c---------------------------------------------------------------------------
355       subroutine exec_mult_eeval_or_minim
356       implicit real*8 (a-h,o-z)
357       include 'DIMENSIONS'
358 #ifdef MPI
359       include 'mpif.h'
360       dimension muster(mpi_status_size)
361 #endif
362       include 'COMMON.SETUP'
363       include 'COMMON.TIME1'
364       include 'COMMON.INTERACT'
365       include 'COMMON.NAMES'
366       include 'COMMON.GEO'
367       include 'COMMON.HEADER'
368       include 'COMMON.CONTROL'
369       include 'COMMON.CONTACTS'
370       include 'COMMON.CHAIN'
371       include 'COMMON.VAR'
372       include 'COMMON.IOUNITS'
373       include 'COMMON.FFIELD'
374       include 'COMMON.REMD'
375       include 'COMMON.MD'
376       include 'COMMON.SBRIDGE'
377       double precision varia(maxvar)
378       dimension ind(6)
379       double precision energy(0:max_ene)
380       logical eof
381       eof=.false.
382 #ifdef MPI
383       if(me.ne.king) then
384         call minim_mcmf
385         return
386       endif
387
388       close (intin)
389       open(intin,file=intinname,status='old')
390       write (istat,'(a5,20a12)')"#    ",
391      &  (wname(print_order(i)),i=1,nprint_ene)
392       if (refstr) then
393         write (istat,'(a5,20a12)')"#    ",
394      &   (ename(print_order(i)),i=1,nprint_ene),
395      &   "ETOT total","RMSD","nat.contact","nnt.contact"        
396       else
397         write (istat,'(a5,20a12)')"#    ",
398      &    (ename(print_order(i)),i=1,nprint_ene),"ETOT total"
399       endif
400
401       if (.not.minim) then
402         do while (.not. eof)
403           if (read_cart) then
404             read (intin,'(e15.10,e15.5)',end=1100,err=1100) time,ene
405             call read_x(intin,*11)
406 #ifdef MPI
407 c Broadcast the order to compute internal coordinates to the slaves.
408             if (nfgtasks.gt.1)
409      &        call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
410 #endif
411             call int_from_cart1(.false.)
412           else
413             read (intin,'(i5)',end=1100,err=1100) iconf
414             call read_angles(intin,*11)
415             call geom_to_var(nvar,varia)
416             call chainbuild
417           endif
418           write (iout,'(a,i7)') 'Conformation #',iconf
419           call etotal(energy(0))
420           call briefout(iconf,energy(0))
421           call enerprint(energy(0))
422           etot=energy(0)
423           if (refstr) then 
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
428 cjlee end
429           else
430             write (istat,'(i5,16(f12.3))') iconf,
431      &     (energy(print_order(i)),i=1,nprint_ene),etot
432           endif
433         enddo
434 1100    continue
435         goto 1101
436       endif
437
438       mm=0
439       imm=0
440       nft=0
441       ene0=0.0d0
442       n=0
443       iconf=0
444 c      do n=1,nzsc
445       do while (.not. eof)
446         mm=mm+1
447         if (mm.lt.nodes) then
448           if (read_cart) then
449             read (intin,'(e15.10,e15.5)',end=11,err=11) time,ene
450             call read_x(intin,*11)
451 #ifdef MPI
452 c Broadcast the order to compute internal coordinates to the slaves.
453             if (nfgtasks.gt.1) 
454      &        call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
455 #endif
456             call int_from_cart1(.false.)
457           else
458             read (intin,'(i5)',end=11,err=11) iconf
459             call read_angles(intin,*11)
460             call geom_to_var(nvar,varia)
461             call chainbuild
462           endif
463           write (iout,'(a,i7)') 'Conformation #',iconf
464           n=n+1
465          imm=imm+1
466          ind(1)=1
467          ind(2)=n
468          ind(3)=0
469          ind(4)=0
470          ind(5)=0
471          ind(6)=0
472          ene0=0.0d0
473          call mpi_send(ind,6,mpi_integer,mm,idint,CG_COMM,
474      *                  ierr)
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
480         else
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)
487          call mpi_recv(ene,1,
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'
494
495           call var_to_geom(nvar,varia)
496           call chainbuild
497           call etotal(energy(0))
498           iconf=ind(2)
499           write (iout,*)
500           write (iout,*)
501           write (iout,'(a,2i7)') 'Conformation #',iconf,ind(5)
502
503           etot=energy(0)
504           call enerprint(energy(0))
505           call briefout(it,etot)
506 c          if (minim) call briefout(it,etot)
507           if (refstr) then 
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
512           else
513             write (istat,'(i5,15(f12.3))') iconf,
514      &     (energy(print_order(i)),i=1,nprint_ene),etot
515           endif
516
517           imm=imm-1
518           if (read_cart) then
519             read (intin,'(e15.10,e15.5)',end=1101,err=1101) time,ene
520             call read_x(intin,*11)
521 #ifdef MPI
522 c Broadcast the order to compute internal coordinates to the slaves.
523             if (nfgtasks.gt.1)
524      &        call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
525 #endif
526             call int_from_cart1(.false.)
527           else
528             read (intin,'(i5)',end=1101,err=1101) iconf
529             call read_angles(intin,*11)
530             call geom_to_var(nvar,varia)
531             call chainbuild
532           endif
533           n=n+1
534           imm=imm+1
535           ind(1)=1
536           ind(2)=n
537           ind(3)=0
538           ind(4)=0
539           ind(5)=0
540           ind(6)=0
541           call mpi_send(ind,6,mpi_integer,man,idint,CG_COMM,
542      *                  ierr)
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)
548           nmin=nmin+1
549         endif
550       enddo
551 11    continue
552       do j=1,imm
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)
558         call mpi_recv(ene,1,
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)
564
565         call var_to_geom(nvar,varia)
566         call chainbuild
567         call etotal(energy(0))
568         iconf=ind(2)
569         write (iout,*)
570         write (iout,*)
571         write (iout,'(a,2i7)') 'Conformation #',iconf,ind(5)
572
573         etot=energy(0)
574         call enerprint(energy(0))
575         call briefout(it,etot)
576         if (refstr) then 
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
581         else
582           write (istat,'(i5,15(f12.3))') iconf,
583      &    (energy(print_order(i)),i=1,nprint_ene),etot
584         endif
585         nmin=nmin+1
586       enddo
587 1101  continue
588       do i=1, nodes-1
589          ind(1)=0
590          ind(2)=0
591          ind(3)=0
592          ind(4)=0
593          ind(5)=0
594          ind(6)=0
595          call mpi_send(ind,6,mpi_integer,i,idint,CG_COMM,
596      *                  ierr)
597       enddo
598 #else
599       close (intin)
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)
605       if (refstr) then
606         write (istat,'(a5,20a12)')"#    ",
607      &   (ename(print_order(i)),i=1,nprint_ene),
608      &   "ETOT total","RMSD","nat.contact","nnt.contact"
609       else
610         write (istat,'(a5,14a12)')"#    ",
611      &   (ename(print_order(i)),i=1,nprint_ene),"ETOT total"
612       endif
613       do while (.not. eof)
614           if (read_cart) then
615             read (intin,'(e15.10,e15.5)',end=1100,err=1100) time,ene
616             call read_x(intin,*11)
617 #ifdef MPI
618 c Broadcast the order to compute internal coordinates to the slaves.
619             if (nfgtasks.gt.1)
620      &        call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
621 #endif
622             call int_from_cart1(.false.)
623           else
624             read (intin,'(i5)',end=1100,err=1100) iconf
625             call read_angles(intin,*11)
626             call geom_to_var(nvar,varia)
627             call chainbuild
628           endif
629         write (iout,'(a,i7)') 'Conformation #',iconf
630         if (minim) call minimize(etot,varia,iretcode,nfun)
631         call etotal(energy(0))
632
633         etot=energy(0)
634         call enerprint(energy(0))
635         if (minim) call briefout(it,etot) 
636         if (refstr) then 
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
641 cjlee end
642         else
643           write (istat,'(i5,14(f12.3))') iconf,
644      &   (energy(print_order(i)),i=1,nprint_ene),etot
645         endif
646       enddo
647    11 continue
648 #endif
649       return
650       end
651 c---------------------------------------------------------------------------
652       subroutine exec_checkgrad
653       implicit real*8 (a-h,o-z)
654       include 'DIMENSIONS'
655 #ifdef MPI
656       include 'mpif.h'
657 #endif
658       include 'COMMON.SETUP'
659       include 'COMMON.TIME1'
660       include 'COMMON.INTERACT'
661       include 'COMMON.NAMES'
662       include 'COMMON.GEO'
663       include 'COMMON.HEADER'
664       include 'COMMON.CONTROL'
665       include 'COMMON.CONTACTS'
666       include 'COMMON.CHAIN'
667       include 'COMMON.VAR'
668       include 'COMMON.IOUNITS'
669       include 'COMMON.FFIELD'
670       include 'COMMON.REMD'
671       include 'COMMON.MD'
672       include 'COMMON.SBRIDGE'
673       common /srutu/ icall
674       double precision energy(0:max_ene)
675 c      do i=2,nres
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)
679 c      enddo
680       if (indpdb.eq.0) call chainbuild
681 c      do i=0,nres
682 c        do j=1,3
683 c          dc(j,i)=dc(j,i)+ran_number(-0.2d0,0.2d0)
684 c        enddo
685 c      enddo
686 c      do i=1,nres-1
687 c        if (itype(i).ne.10) then
688 c          do j=1,3
689 c            dc(j,i+nres)=dc(j,i+nres)+ran_number(-0.2d0,0.2d0)
690 c          enddo
691 c        endif
692 c      enddo
693 c      do j=1,3
694 c        dc(j,0)=ran_number(-0.2d0,0.2d0)
695 c      enddo
696       usampl=.true.
697       totT=1.d0
698       eq_time=0.0d0
699       call read_fragments
700       call chainbuild_cart
701       call cartprint
702       call intout
703       icall=1
704       call etotal(energy(0))
705       etot = 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
710   10  print *,'kurwa0'
711       call check_ecartint
712       print *,'kurwa'
713       call check_ecartint
714       return
715   20  print *,'ja pierdole'
716       call check_cartgrad
717       call check_cartgrad
718       return
719   30  call check_eint
720       return
721       end
722 c---------------------------------------------------------------------------
723       subroutine exec_map
724 C Energy maps
725       call map_read
726       call map
727       return
728       end
729 c---------------------------------------------------------------------------
730       subroutine exec_CSA
731 #ifdef MPI
732       include "mpif.h"
733 #endif
734       include 'DIMENSIONS'
735       include 'COMMON.IOUNITS'
736 C Conformational Space Annealling programmed by Jooyoung Lee.
737 C This method works only with parallel machines!
738 #ifdef MPI
739       call together
740 #else
741       write (iout,*) "CSA works on parallel machines only"
742 #endif
743       return
744       end
745 c---------------------------------------------------------------------------
746       subroutine exec_softreg
747       include 'DIMENSIONS'
748       include 'COMMON.IOUNITS'
749       include 'COMMON.CONTROL'
750       double precision energy(0:max_ene)
751       call chainbuild
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)
757       else
758         write(iout,*) 'Using secondary structure supplied in pdb'
759       endif
760
761       call softreg
762
763       call etotal(energy(0))
764       etot=energy(0)
765       call enerprint(energy(0))
766       call intout
767       call briefout(0,etot)
768       call secondary2(.true.)
769       if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
770       return
771       end