+++ /dev/null
- program wham_multparm
-! program WHAM_multparm
-! Creation/update of the database of conformations
- use wham_data
- use io_wham
- use io_database
- use wham_calc
- use ene_calc
- use conform_compar
- use work_part
-!
- use io_units
- use control_data, only:indpdb
-#ifdef MPI
- use mpi_data
-! use mpi_
-#endif
- use control, only:initialize
-!el use io_config, only:parmread
-!
-#ifndef ISNAN
- external proc_proc
-#ifdef WINPGI
-!MS$ATTRIBUTES C :: proc_proc
-#endif
-#endif
-!
-!el#ifndef ISNAN
-!el external proc_proc
-!el#endif
-!el#ifdef WINPGI
-!elcMS$ATTRIBUTES C :: proc_proc
-!el#endif
-! include "DIMENSIONS"
-! include "DIMENSIONS.ZSCOPT"
-! include "DIMENSIONS.FREE"
-! implicit none
-#ifdef MPI
-! include "COMMON.MPI"
-! use mpi_data
- include "mpif.h"
- integer :: IERROR,ERRCODE
-#endif
-! include "COMMON.IOUNITS"
-! include "COMMON.FREE"
-! include "COMMON.CONTROL"
-! include "COMMON.ALLPARM"
-! include "COMMON.PROT"
- real(kind=8) :: rr !,x(max_paropt)
- integer :: idumm
- integer :: i,ipar,islice
-
-!el run_wham=.true.
-!#define WHAM_RUN
-! call alloc_wham_arrays
-!write(iout,*) "after alloc wham"
-#ifdef MPI
- call MPI_Init( IERROR )
- call MPI_Comm_rank( MPI_COMM_WORLD, me, IERROR )
- call MPI_Comm_size( MPI_COMM_WORLD, nprocs, IERROR )
- Master = 0
- if (ierror.gt.0) then
- write(iout,*) "SEVERE ERROR - Can't initialize MPI."
- call mpi_finalize(ierror)
- stop
- endif
-!el if (nprocs.gt.MaxProcs+1) then
-!el write (2,*) "Error - too many processors",&
-!el nprocs,MaxProcs+1
-!el write (2,*) "Increase MaxProcs and recompile"
-!el call MPI_Finalize(IERROR)
-!el stop
-!el endif
-#endif
-! NaNQ initialization
-#ifndef ISNAN
- i=-1
- rr=dacos(100.0d0)
-#ifdef WINPGI
- idumm=proc_proc(rr,i)
-#else
- call proc_proc(rr,i)
-#endif
-#endif
-!write(iout,*) "before init"
- call initialize
-!write(iout,*)"after init"
- call openunits
-!write(iout,*)"after open ui"
- call cinfo
-!write(iout,*)"after cinfo"
- call read_general_data(*10)
-!write(iout,*)"after read_gen"
- call flush(iout)
- call molread(*10)
-!write(iout,*)"after molread"
- call flush(iout)
-#ifdef MPI
- write (iout,*) "Calling proc_groups"
- call proc_groups
- write (iout,*) "proc_groups exited"
- call flush(iout)
-#endif
-!el----------
- call alloc_wham_arrays
-!el----------
- do ipar=1,nParmSet
- write (iout,*) "Calling parmread",ipar
- call parmread(ipar,*10)
- if (.not.separate_parset) then
- call store_parm(ipar)
- write (iout,*) "Finished storing parameters",ipar
- else if (ipar.eq.myparm) then
- call store_parm(1)
- write (iout,*) "Finished storing parameters",ipar
- endif
- call flush(iout)
- enddo
- call read_efree(*10)
- write (iout,*) "Finished READ_EFREE"
- call flush(iout)
- call read_protein_data(*10)
- write (iout,*) "Finished READ_PROTEIN_DATA"
- call flush(iout)
- if (indpdb.gt.0) then
- call promienie
- call read_compar
- call read_ref_structure(*10)
-!write(iout,*)"before proc_cont, define frag"
- call proc_cont
- call fragment_list
- if (constr_dist.gt.0) call read_dist_constr
- endif
- write (iout,*) "Begin read_database"
- call flush(iout)
- call read_database(*10)
- write (iout,*) "Finished read_database"
- call flush(iout)
- if (separate_parset) nparmset=1
- do islice=1,nslice
- if (ntot(islice).gt.0) then
-#ifdef MPI
- call work_partition(islice,.true.)
- write (iout,*) "work_partition OK"
- call flush(iout)
-#endif
- write (iout,*) "call enecalc",islice,nslice
- call enecalc(islice,*10)
- write (iout,*) "enecalc OK"
- call flush(iout)
- call WHAMCALC(islice,*10)
- write (iout,*) "wham_calc OK"
- call flush(iout)
- call write_dbase(islice,*10)
- write (iout,*) "write_dbase OK"
- call flush(iout)
- if (ensembles.gt.0) then
- call make_ensembles(islice,*10)
- write (iout,*) "make_ensembles OK"
- call flush(iout)
- endif
- endif
- enddo
-#ifdef MPI
- call MPI_Finalize( IERROR )
-#endif
- stop
- 10 write (iout,*) "Error termination of the program"
-#ifdef MPI
- call MPI_Finalize( IERROR )
-#endif
- stop
- end program wham_multparm
-!------------------------------------------------------------------------------
-!
-!------------------------------------------------------------------------------
-#ifdef MPI
- subroutine proc_groups
-! Split the processors into the Master and Workers group, if needed.
- use io_units
- use MPI_data
- use wham_data
-
- implicit none
-! include "DIMENSIONS"
-! include "DIMENSIONS.ZSCOPT"
-! include "DIMENSIONS.FREE"
-! include "COMMON.IOUNITS"
-! include "COMMON.MPI"
-! include "COMMON.FREE"
- include "mpif.h"
- integer :: n,chunk,i,j,ii,remainder
- integer :: kolorW,key,ierror,errcode
- logical :: lprint
- lprint=.true.
-!
-! Split the communicator if independent runs for different parameter
-! sets will be performed.
-!
- if (nparmset.eq.1 .or. .not.separate_parset) then
- WHAM_COMM = MPI_COMM_WORLD
- else if (separate_parset) then
- if (nprocs.lt.nparmset) then
- write (iout,*) &
- "*** Cannot split parameter sets for fewer processors than sets",&
- nprocs,nparmset
- call MPI_Finalize(ierror)
- stop
- endif
- write (iout,*) "nparmset",nparmset
- nprocs = nprocs/nparmset
- kolorW = me/nprocs
- key = mod(me,nprocs)
- write (iout,*) "My old rank",me," kolor",kolorW," key",key
- call MPI_Comm_split(MPI_COMM_WORLD,kolorW,key,WHAM_COMM,ierror)
- call MPI_Comm_size(WHAM_COMM,nprocs,ierror)
- call MPI_Comm_rank(WHAM_COMM,me,ierror)
- write (iout,*) "My new rank",me," comm size",nprocs
- write (iout,*) "MPI_COMM_WORLD",MPI_COMM_WORLD,&
- " WHAM_COMM",WHAM_COMM
- myparm=kolorW+1
- write (iout,*) "My parameter set is",myparm
- call flush(iout)
- else
- myparm=nparmset
- endif
- Me1 = Me
- Nprocs1 = Nprocs
- return
- end subroutine proc_groups
-#endif
-!------------------------------------------------------------------------------
-#ifdef AIX
- subroutine flush(iu)
- call flush_(iu)
- return
- end subroutine flush
-#endif
-!-----------------------------------------------------------------------------
- subroutine promienie(*)
-
- use io_units
- use names
- use io_base, only:ucase
- use energy_data, only:sigma0,dsc,dsc_inv
- use wham_data
- use w_compar_data
- implicit none
-! include 'DIMENSIONS'
-! include 'COMMON.CONTROL'
-! include 'COMMON.INTERACT'
-! include 'COMMON.IOUNITS'
-! include 'COMMON.CONTPAR'
-! include 'COMMON.LOCAL'
- integer ::i,j
- real(kind=8) :: facont=1.569D0 ! facont = (2/(1-sqrt(1-1/4)))**(1/6)
- character(len=8) :: contfunc
- character(len=8) :: contfuncid(5)=reshape((/'GB ',&
- 'DIST ','CEN ','ODC ','SIG '/),shape(contfuncid))
-!el character(len=8) ucase
- call getenv("CONTFUNC",contfunc)
- contfunc=ucase(contfunc)
- do icomparfunc=1,5
- if (contfunc.eq.contfuncid(icomparfunc)) goto 10
- enddo
- 10 continue
- write (iout,*) "Sidechain contact function is ",contfunc,&
- "icomparfunc",icomparfunc
- do i=1,ntyp
- do j=1,ntyp
- if (icomparfunc.lt.3) then
- read(isidep1,*) chi_comp(i,j),chip_comp(i,j),sig_comp(i,j),&
- sc_cutoff(i,j)
- else if (icomparfunc.lt.5) then
- read(isidep1,*) sc_cutoff(i,j)
- else if (icomparfunc.eq.5) then
- sc_cutoff(i,j)=dsqrt(sigma0(i)**2+sigma0(j)**2)*facont
- else
- write (iout,*) "Error - Unknown contact function"
- return 1
- endif
- enddo
- enddo
- close (isidep1)
- do i=1,ntyp1
- if (i.eq.10 .or. i.eq.ntyp1) then
- dsc_inv(i)=0.0d0
- else
- dsc_inv(i)=1.0d0/dsc(i)
- endif
- enddo
- return
- end subroutine promienie
-!-----------------------------------------------------------------------------
- subroutine alloc_wham_arrays
-
- use names
- use geometry_data, only:nres
- use energy_data, only:maxcont
- use wham_data
- use w_compar_data
- integer :: i,j,k,l
-!-------------------------
-! COMMON.FREE
-! common /wham/
- allocate(stot(nslice)) !(maxslice)
- do i=1,nslice
- stot(i)=0
- enddo
- allocate(Kh(nQ,MaxR,MaxT_h,nParmSet),q0(nQ,MaxR,MaxT_h,nParmSet))!(MaxQ,MaxR,MaxT_h,max_parm)
- allocate(f(maxR,maxT_h,nParmSet)) !(maxR,maxT_h,max_parm)
- allocate(beta_h(maxT_h,nParmSet)) !(MaxT_h,max_parm)
- allocate(nR(maxT_h,nParmSet),nRR(maxT_h,nParmSet)) !(maxT_h,max_parm)
- allocate(snk(MaxR,MaxT_h,nParmSet,nSlice)) !(MaxR,MaxT_h,max_parm,MaxSlice)
-! do i=1,MaxR
-! do j=1,MaxT_h
-! do k=1,nParmSet
-! do l=1,nSlice
-! snk(i,j,k,l)=0
-! enddo
-! enddo
-! enddo
-! enddo
-
- allocate(totraj(maxR,nParmSet)) !(maxR,max_parm)
-
- allocate(nT_h(nParmSet))!(max_parm)
- allocate(replica(nParmSet))
- allocate(umbrella(nParmSet))
- allocate(read_iset(nParmSet))
-! allocate(nT_h(nParmSet))
-!-------------------------
-! COMMON.PROT
-! common /protein/
- allocate(ntot(nslice)) !(maxslice)
-! allocatable :: isampl !(max_parm)
-!-------------------------
-! COMMON.PROTFILES
-! common /protfil/
- allocate(protfiles(maxfile_prot,2,MaxR,MaxT_h,nParmSet)) !(maxfile_prot,2,MaxR,MaxT_h,Max_Parm)
- allocate(nfile_bin(MaxR,MaxT_h,nParmSet))
- allocate(nfile_asc(MaxR,MaxT_h,nParmSet))
- allocate(nfile_cx(MaxR,MaxT_h,nParmSet))
- allocate(rec_start(MaxR,MaxT_h,nParmSet))
- allocate(rec_end(MaxR,MaxT_h,nParmSet)) !(MaxR,MaxT_h,Max_Parm)
-!-------------------------
-! COMMON.OBCINKA
-! common /obcinka/
- allocate(time_start_collect(maxR,MaxT_h,nParmSet))
- allocate(time_end_collect(maxR,MaxT_h,nParmSet)) !(maxR,MaxT_h,Max_Parm)
-!-------------------------
-! COMMON.CONTPAR
-! common /contpar/
- allocate(sig_comp(ntyp,ntyp),chi_comp(ntyp,ntyp),&
- chip_comp(ntyp,ntyp),sc_cutoff(ntyp,ntyp)) !(ntyp,ntyp)
-!-------------------------
-! COMMON.PEPTCONT
-! common /peptcont/
- allocate(icont_pept_ref(2,maxcont)) !(2,maxcont)
-! allocate(ncont_frag_ref()) !(mmaxfrag)
-! allocate(icont_frag_ref(2,maxcont)) !(2,maxcont,mmaxfrag)
- allocate(isec_ref(nres)) !(maxres)
-!-------------------------
-! COMMON.VAR
-! Angles from experimental structure
-! common /varref/
- allocate(vbld_ref(nres),theta_ref(nres),&
- phi_ref(nres),alph_ref(nres),omeg_ref(nres)) !(maxres)
-!-------------------------
- end subroutine alloc_wham_arrays
-!-----------------------------------------------------------------------------
-!-----------------------------------------------------------------------------