+++ /dev/null
-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-C C
-C U N R E S C
-C C
-C Program to carry out conformational search of proteins in an united-residue C
-C approximation. C
-C C
-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
-
-
-#ifdef MPI
- include 'mpif.h'
- include 'COMMON.SETUP'
-#endif
- include 'COMMON.TIME1'
- include 'COMMON.INTERACT'
- include 'COMMON.NAMES'
- include 'COMMON.GEO'
- include 'COMMON.HEADER'
- include 'COMMON.CONTROL'
- include 'COMMON.CONTACTS'
- include 'COMMON.CHAIN'
- include 'COMMON.VAR'
- include 'COMMON.IOUNITS'
- include 'COMMON.FFIELD'
-c include 'COMMON.REMD'
-c include 'COMMON.MD'
- include 'COMMON.SBRIDGE'
- double precision hrtime,mintime,sectime
- character*64 text_mode_calc(-2:14) /'test',
- & 'SC rotamer distribution',
- & 'Energy evaluation or minimization',
- & 'Regularization of PDB structure',
- & 'Threading of a sequence on PDB structures',
- & 'Monte Carlo (with minimization) ',
- & 'Energy minimization of multiple conformations',
- & 'Checking energy gradient',
- & 'Entropic sampling Monte Carlo (with minimization)',
- & 'Energy map',
- & 'CSA calculations',
- & 'Not used 9',
- & 'Not used 10',
- & 'Soft regularization of PDB structure',
- & 'Mesoscopic molecular dynamics (MD) ',
- & 'Not used 13',
- & 'Replica exchange molecular dynamics (REMD)'/
- external ilen
-
-c call memmon_print_usage()
-
- call init_task
- if (me.eq.king)
- & write(iout,*)'### LAST MODIFIED 11/03/09 1:19PM by czarek'
- if (me.eq.king) call cinfo
-C Read force field parameters and job setup data
- call readrtns
- call flush(iout)
-C
- if (me.eq.king .or. .not. out1file) then
- write (iout,'(2a/)')
- & text_mode_calc(modecalc)(:ilen(text_mode_calc(modecalc))),
- & ' calculation.'
- if (minim) write (iout,'(a)')
- & 'Conformations will be energy-minimized.'
- write (iout,'(80(1h*)/)')
- endif
- call flush(iout)
-C
-c if (modecalc.eq.-2) then
-c call test
-c stop
-c else if (modecalc.eq.-1) then
-c write(iout,*) "call check_sc_map next"
-c call check_bond
-c stop
-c endif
-#ifdef MPI
- if (fg_rank.gt.0) then
-C Fine-grain slaves just do energy and gradient components.
- call ergastulum ! slave workhouse in Latin
- else
-#endif
- if (modecalc.eq.0) then
- call exec_eeval_or_minim
-c else if (modecalc.eq.1) then
-c call exec_regularize
-c else if (modecalc.eq.2) then
-c call exec_thread
-c else if (modecalc.eq.3 .or. modecalc .eq.6) then
-c call exec_MC
- else if (modecalc.eq.4) then
- call exec_mult_eeval_or_minim
- else if (modecalc.eq.5) then
- call exec_checkgrad
-c else if (ModeCalc.eq.7) then
-c call exec_map
- else if (ModeCalc.eq.8) then
- call exec_CSA
-c else if (modecalc.eq.11) then
-c call exec_softreg
-c else if (modecalc.eq.12) then
-c call exec_MD
-c else if (modecalc.eq.14) then
-c call exec_MREMD
- else
- write (iout,'(a)') 'This calculation type is not supported',
- & ModeCalc
- endif
-#ifdef MPI
- endif
-C Finish task.
- if (fg_rank.eq.0) call finish_task
-c call memmon_print_usage()
-#ifdef TIMING
- call print_detailed_timing
-#endif
- call MPI_Finalize(ierr)
- stop 'Bye Bye...'
-#else
- call dajczas(tcpu(),hrtime,mintime,sectime)
- stop '********** Program terminated normally.'
-#endif
- end
-c---------------------------------------------------------------------------
- subroutine exec_eeval_or_minim
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
-#ifdef MPI
- include 'mpif.h'
-#endif
- include 'COMMON.SETUP'
- include 'COMMON.TIME1'
- include 'COMMON.INTERACT'
- include 'COMMON.NAMES'
- include 'COMMON.GEO'
- include 'COMMON.HEADER'
- include 'COMMON.CONTROL'
- include 'COMMON.CONTACTS'
- include 'COMMON.CHAIN'
- include 'COMMON.VAR'
- include 'COMMON.IOUNITS'
- include 'COMMON.FFIELD'
-c include 'COMMON.REMD'
-c include 'COMMON.MD'
- include 'COMMON.SBRIDGE'
- common /srutu/ icall
- double precision energy(0:n_ene)
- double precision energy_long(0:n_ene),energy_short(0:n_ene)
- double precision varia(maxvar)
- if (indpdb.eq.0) call chainbuild
-c time00=MPI_Wtime()
- call chainbuild_cart
-c if (split_ene) then
-c print *,"Processor",myrank," after chainbuild"
-c icall=1
-c call etotal_long(energy_long(0))
-c write (iout,*) "Printing long range energy"
-c call enerprint(energy_long(0))
-c call etotal_short(energy_short(0))
-c write (iout,*) "Printing short range energy"
-c call enerprint(energy_short(0))
-c do i=0,n_ene
-c energy(i)=energy_long(i)+energy_short(i)
-c write (iout,*) i,energy_long(i),energy_short(i),energy(i)
-c enddo
-c write (iout,*) "Printing long+short range energy"
-c call enerprint(energy(0))
-c endif
- call etotal(energy(0))
-c time_ene=MPI_Wtime()-time00
- write (iout,*) "Time for energy evaluation",time_ene
- print *,"after etotal"
- etota = energy(0)
- etot =etota
- call enerprint(energy(0))
-c call hairpin(.true.,nharp,iharp)
-c call secondary2(.true.)
- if (minim) then
-
- if (dccart) then
- print *, 'Calling MINIM_DC'
-c time1=MPI_WTIME()
- call minim_dc(etot,iretcode,nfun)
- else
- if (indpdb.ne.0) then
- call bond_regular
- call chainbuild
- endif
- call geom_to_var(nvar,varia)
- print *,'Calling MINIMIZE.'
-c time1=MPI_WTIME()
- call minimize(etot,varia,iretcode,nfun)
- endif
- print *,'SUMSL return code is',iretcode,' eval ',nfun
-c evals=nfun/(MPI_WTIME()-time1)
- print *,'# eval/s',evals
- print *,'refstr=',refstr
-c call hairpin(.true.,nharp,iharp)
-c call secondary2(.true.)
- call etotal(energy(0))
- etot = energy(0)
- call enerprint(energy(0))
-
- call intout
- call briefout(0,etot)
- if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
- write (iout,'(a,i3)') 'SUMSL return code:',iretcode
- write (iout,'(a,i20)') '# of energy evaluations:',nfun+1
- write (iout,'(a,f16.3)')'# of energy evaluations/sec:',evals
- else
- print *,'refstr=',refstr
- if (refstr) call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
- call briefout(0,etot)
- endif
- if (outpdb) call pdbout(etot,titel(:32),ipdb)
- if (outmol2) call mol2out(etot,titel(:32))
- return
- end
-
- subroutine exec_checkgrad
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
-#ifdef MPI
- include 'mpif.h'
-#endif
- include 'COMMON.SETUP'
- include 'COMMON.TIME1'
- include 'COMMON.INTERACT'
- include 'COMMON.NAMES'
- include 'COMMON.GEO'
- include 'COMMON.HEADER'
- include 'COMMON.CONTROL'
- include 'COMMON.CONTACTS'
- include 'COMMON.CHAIN'
- include 'COMMON.VAR'
- include 'COMMON.IOUNITS'
- include 'COMMON.FFIELD'
-c include 'COMMON.REMD'
- include 'COMMON.MD_'
- include 'COMMON.SBRIDGE'
- common /srutu/ icall
- double precision energy(0:max_ene)
-c do i=2,nres
-c vbld(i)=vbld(i)+ran_number(-0.1d0,0.1d0)
-c if (itype(i).ne.10)
-c & vbld(i+nres)=vbld(i+nres)+ran_number(-0.001d0,0.001d0)
-c enddo
- if (indpdb.eq.0) call chainbuild
-c do i=0,nres
-c do j=1,3
-c dc(j,i)=dc(j,i)+ran_number(-0.2d0,0.2d0)
-c enddo
-c enddo
-c do i=1,nres-1
-c if (itype(i).ne.10) then
-c do j=1,3
-c dc(j,i+nres)=dc(j,i+nres)+ran_number(-0.2d0,0.2d0)
-c enddo
-c endif
-c enddo
-c do j=1,3
-c dc(j,0)=ran_number(-0.2d0,0.2d0)
-c enddo
- usampl=.true.
- totT=1.d0
- eq_time=0.0d0
-c call read_fragments
-c read(inp,*) t_bath
-c call rescale_weights(t_bath)
- call chainbuild_cart
- call cartprint
- call intout
- icall=1
- call etotal(energy(0))
- etot = energy(0)
- call enerprint(energy(0))
- write (iout,*) "Uconst",Uconst," Uconst_back",uconst_back
- print *,'icheckgrad=',icheckgrad
- goto (10,20,30) icheckgrad
- 10 call check_ecartint
- return
- 20 call check_cartgrad
- return
- 30 call check_eint
- return
- end
-c---------------------------------------------------------------------------
- subroutine exec_CSA
-#ifdef MPI
- include "mpif.h"
-#endif
- include 'DIMENSIONS'
- include 'COMMON.IOUNITS'
-C Conformational Space Annealling programmed by Jooyoung Lee.
-C This method works only with parallel machines!
-#ifdef MPI
- call together
-#else
- write (iout,*) "CSA works on parallel machines only"
-#endif
- return
- end
-c---------------------------------------------------------------------------
-#ifdef MPI
- subroutine exec_mult_eeval_or_minim
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
- include 'mpif.h'
- integer muster(mpi_status_size)
- include 'COMMON.SETUP'
- include 'COMMON.TIME1'
- include 'COMMON.INTERACT'
- include 'COMMON.NAMES'
- include 'COMMON.GEO'
- include 'COMMON.HEADER'
- include 'COMMON.CONTROL'
- include 'COMMON.CONTACTS'
- include 'COMMON.CHAIN'
- include 'COMMON.VAR'
- include 'COMMON.IOUNITS'
- include 'COMMON.FFIELD'
- include 'COMMON.SBRIDGE'
- double precision varia(maxvar)
- integer ind(6)
- double precision energy(0:n_ene)
- logical eof
- eof=.false.
-
- if(me.ne.king) then
- call minim_mcmf
- return
- endif
-
- close (intin)
- open(intin,file=intinname,status='old')
- write (istat,'(a5,100a12)')"# ",
- & (wname(print_order(i)),i=1,nprint_ene)
- if (refstr) then
- write (istat,'(a5,100a12)')"# ",
- & (ename(print_order(i)),i=1,nprint_ene),
- & "ETOT total","RMSD","nat.contact","nnt.contact",
- & "cont.order","TMscore"
- else
- write (istat,'(a5,100a12)')"# ",
- & (ename(print_order(i)),i=1,nprint_ene),"ETOT total"
- endif
-
- if (.not.minim) then
- do while (.not. eof)
- if (read_cart) then
- read (intin,'(e15.10,e15.5)',end=1100,err=1100) time,ene
- call read_x(intin,*11)
-c Broadcast the order to compute internal coordinates to the slaves.
- if (nfgtasks.gt.1)
- & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
- call int_from_cart1(.false.)
- else
- read (intin,'(i5)',end=1100,err=1100) iconf
- call read_angles(intin,*11)
- call geom_to_var(nvar,varia)
- call chainbuild
- endif
- write (iout,'(a,i7)') 'Conformation #',iconf
- call etotal(energy(0))
- call briefout(iconf,energy(0))
- call enerprint(energy(0))
- etot=energy(0)
- if (refstr) then
- call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
- call calc_tmscore(tm,.true.)
- write (istat,'(i5,100(f12.3))') iconf,
- & (energy(print_order(i)),i=1,nprint_ene),etot,
- & rms,frac,frac_nn,co,tm
- else
- write (istat,'(i5,100(f12.3))') iconf,
- & (energy(print_order(i)),i=1,nprint_ene),etot
- endif
- enddo
-1100 continue
- goto 1101
- endif
-
- mm=0
- imm=0
- nft=0
- ene0=0.0d0
- n=0
- iconf=0
- do while (.not. eof)
- mm=mm+1
- if (mm.lt.nodes) then
- if (read_cart) then
- read (intin,'(e15.10,e15.5)',end=11,err=11) time,ene
- call read_x(intin,*11)
-c Broadcast the order to compute internal coordinates to the slaves.
- if (nfgtasks.gt.1)
- & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
- call int_from_cart1(.false.)
- else
- read (intin,'(i5)',end=11,err=11) iconf
- call read_angles(intin,*11)
- call geom_to_var(nvar,varia)
- call chainbuild
- endif
-
- n=n+1
- write (iout,*) 'Conformation #',iconf,' read'
- imm=imm+1
- ind(1)=1
- ind(2)=n
- ind(3)=0
- ind(4)=0
- ind(5)=0
- ind(6)=0
- ene0=0.0d0
- call mpi_send(ind,6,mpi_integer,mm,idint,CG_COMM,
- * ierr)
- call mpi_send(varia,nvar,mpi_double_precision,mm,
- * idreal,CG_COMM,ierr)
- call mpi_send(ene0,1,mpi_double_precision,mm,
- * idreal,CG_COMM,ierr)
-c print *,'task ',n,' sent to worker ',mm,nvar
- else
- call mpi_recv(ind,6,mpi_integer,mpi_any_source,idint,
- * CG_COMM,muster,ierr)
- man=muster(mpi_source)
-c print *,'receiving result from worker ',man,' (',iii1,iii,')'
- call mpi_recv(varia,nvar,mpi_double_precision,
- * man,idreal,CG_COMM,muster,ierr)
- call mpi_recv(ene,1,
- * mpi_double_precision,man,idreal,
- * CG_COMM,muster,ierr)
- call mpi_recv(ene0,1,
- * mpi_double_precision,man,idreal,
- * CG_COMM,muster,ierr)
-c print *,'result received from worker ',man,' sending now'
-
- call var_to_geom(nvar,varia)
- call chainbuild
- call etotal(energy(0))
- iconf=ind(2)
- write (iout,*)
- write (iout,*)
- write (iout,*) 'Conformation #',iconf," sumsl return code ",
- & ind(5)
-
- etot=energy(0)
- call enerprint(energy(0))
- call briefout(iconf,etot)
- if (refstr) then
- call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
- call calc_tmscore(tm,.true.)
- write (istat,'(i5,100(f12.3))') iconf,
- & (energy(print_order(i)),i=1,nprint_ene),etot,
- & rms,frac,frac_nn,co,tm
- else
- write (istat,'(i5,100(f12.3))') iconf,
- & (energy(print_order(i)),i=1,nprint_ene),etot
- endif
-
- imm=imm-1
- if (read_cart) then
- read (intin,'(e15.10,e15.5)',end=11,err=11) time,ene
- call read_x(intin,*11)
-c Broadcast the order to compute internal coordinates to the slaves.
- if (nfgtasks.gt.1)
- & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
- call int_from_cart1(.false.)
- else
- read (intin,'(i5)',end=11,err=11) iconf
- call read_angles(intin,*11)
- call geom_to_var(nvar,varia)
- call chainbuild
- endif
- n=n+1
- write (iout,*) 'Conformation #',iconf,' read'
- imm=imm+1
- ind(1)=1
- ind(2)=n
- ind(3)=0
- ind(4)=0
- ind(5)=0
- ind(6)=0
- call mpi_send(ind,6,mpi_integer,man,idint,CG_COMM,
- * ierr)
- call mpi_send(varia,nvar,mpi_double_precision,man,
- * idreal,CG_COMM,ierr)
- call mpi_send(ene0,1,mpi_double_precision,man,
- * idreal,CG_COMM,ierr)
- nf_mcmf=nf_mcmf+ind(4)
- nmin=nmin+1
- endif
- enddo
-11 continue
- do j=1,imm
- call mpi_recv(ind,6,mpi_integer,mpi_any_source,idint,
- * CG_COMM,muster,ierr)
- man=muster(mpi_source)
- call mpi_recv(varia,nvar,mpi_double_precision,
- * man,idreal,CG_COMM,muster,ierr)
- call mpi_recv(ene,1,
- * mpi_double_precision,man,idreal,
- * CG_COMM,muster,ierr)
- call mpi_recv(ene0,1,
- * mpi_double_precision,man,idreal,
- * CG_COMM,muster,ierr)
-
- call var_to_geom(nvar,varia)
- call chainbuild
- call etotal(energy(0))
- iconf=ind(2)
- write (iout,*)
- write (iout,*)
- write (iout,*) 'Conformation #',iconf," sumsl return code ",
- & ind(5)
-
- etot=energy(0)
- call enerprint(energy(0))
- call briefout(iconf,etot)
- if (refstr) then
- call rms_nac_nnc(rms,frac,frac_nn,co,.true.)
- call calc_tmscore(tm,.true.)
- write (istat,'(i5,100(f12.3))') iconf,
- & (energy(print_order(i)),i=1,nprint_ene),etot,
- & rms,frac,frac_nn,co,tm
- else
- write (istat,'(i5,100(f12.3))') iconf,
- & (energy(print_order(i)),i=1,nprint_ene),etot
- endif
- nmin=nmin+1
- enddo
-1101 continue
- do i=1, nodes-1
- ind(1)=0
- ind(2)=0
- ind(3)=0
- ind(4)=0
- ind(5)=0
- ind(6)=0
- call mpi_send(ind,6,mpi_integer,i,idint,CG_COMM,
- * ierr)
- enddo
- return
- end
-#else
- subroutine exec_mult_eeval_or_minim
- include 'DIMENSIONS'
- include 'COMMON.IOUNITS'
- write (iout,*) "Unsupported option in serial version"
- return
- end
-#endif
-c---------------------------------------------------------------------------
-