+++ /dev/null
- module io_database
-!-----------------------------------------------------------------------------
- use names
- use wham_data
- use io_units
- use io_base, only:ilen
- use energy_data, only:nnt,nct,nss,ihpb,jhpb,iset
- use geometry_data, only:nres,c
-#ifdef MPI
- use MPI_data
-! include "COMMON.MPI"
-#endif
-
- implicit none
-!-----------------------------------------------------------------------------
-!
-!
-!-----------------------------------------------------------------------------
- contains
-!-----------------------------------------------------------------------------
-! readrtns.F
-!-------------------------------------------------------------------------------
- subroutine opentmp(islice,iunit,bprotfile_temp)
-! implicit none
-! include "DIMENSIONS"
-! include "DIMENSIONS.ZSCOPT"
-! include "DIMENSIONS.FREE"
-! use MPI_data, only:me
-#ifdef MPI
- include "mpif.h"
- integer :: IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
-! include "COMMON.MPI"
-#endif
-! include "COMMON.IOUNITS"
-! include "COMMON.PROTFILES"
-! include "COMMON.PROT"
-! include "COMMON.FREE"
- character(len=64) :: bprotfile_temp
- character(len=3) :: liczba,liczba2
- character(len=2) :: liczba1
- integer :: iunit,islice
-! integer ilen,iroof
-! external ilen,iroof
-! logical :: lerr
-! integer :: lenrec,lenrec2
-
-!el
-! lenrec2=12*(nres+nct-nnt+1)+4*(2*nss+2)+24+8*nQ
-! lenrec=lenrec2+8
- write (liczba1,'(bz,i2.2)') islice
-#ifdef MPI
- write (liczba,'(bz,i3.3)') me
-!#ifdef MPI
-! write (iout,*) "separate_parset ",separate_parset,
-! & " myparm",myparm
- if (separate_parset) then
- write (liczba2,'(bz,i3.3)') myparm
- bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"// &
- prefix(:ilen(prefix))//liczba//"_"//liczba2//".xbin.tmp"//liczba1
- open (iunit,file=bprotfile_temp,status="unknown",&
- form="unformatted",access="direct",recl=lenrec)
- else
- bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"// &
- prefix(:ilen(prefix))//liczba//".xbin.tmp"//liczba1
- open (iunit,file=bprotfile_temp,status="unknown",&
- form="unformatted",access="direct",recl=lenrec)
- endif
-#else
- bprotfile_temp = scratchdir(:ilen(scratchdir))// &
- "/"//prefix(:ilen(prefix))//".xbin.tmp"//liczba1
- open (iunit,file=bprotfile_temp,status="unknown",&
- form="unformatted",access="direct",recl=lenrec)
-#endif
-! write (iout,*) "OpenTmp iunit",iunit," bprotfile_temp",
-! & bprotfile_temp
-! call flush(iout)
- return
- end subroutine opentmp
-!-------------------------------------------------------------------------------
- subroutine read_database(*)
-
-! use energy_data, only:nct,nnt,nss
-! implicit none
-! include "DIMENSIONS"
-! include "DIMENSIONS.ZSCOPT"
-! include "DIMENSIONS.FREE"
- use MPI_data, only:me,nprocs
-#ifdef MPI
- include "mpif.h"
- integer :: IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
-! include "COMMON.MPI"
-#endif
-! include "COMMON.CHAIN"
-! include "COMMON.IOUNITS"
-! include "COMMON.PROTFILES"
-! include "COMMON.NAMES"
-! include "COMMON.VAR"
-! include "COMMON.GEO"
-! include "COMMON.ENEPS"
-! include "COMMON.PROT"
-! include "COMMON.INTERACT"
-! include "COMMON.FREE"
-! include "COMMON.SBRIDGE"
-! include "COMMON.OBCINKA"
- real(kind=4) :: csingle(3,nres*2) !(3,maxres2)
- character(len=64) :: nazwa,bprotfile_temp
- character(len=3) :: liczba
- character(len=2) :: liczba1
- integer :: i,j,ii,jj(nslice),k,kk(nslice),l,&
- ll(nslice),mm(nslice),if
- integer :: nrec,nlines,iscor,iunit,islice
- real(kind=8) :: energ
-! integer ilen,iroof
-! external ilen,iroof
- real(kind=8) :: rmsdev,energia(0:n_ene),efree,eini,temp
-!el real(kind=8) :: rmsdev,energia(0:max_eneW),efree,eini,temp
- real(kind=8) :: prop(nQ) !(maxQ)
- integer :: ntot_all(nslice,0:nprocs-1)!(maxslice,0:maxprocs-1)
- integer :: iparm,ib,iib,ir,nprop,nthr,npars
- real(kind=8) :: etot,time
- integer :: ixdrf,iret
- logical :: lerr,linit
-
- lenrec1=12*(nres+nct-nnt+1)+4*(2*nss+2)+24
- lenrec2=12*(nres+nct-nnt+1)+4*(2*nss+2)+24+8*nQ
- lenrec=lenrec2+8
- write (iout,*) "lenrec",lenrec," lenrec1",lenrec1,&
- " lenrec2",lenrec2
-
- do i=1,nQ
- prop(i)=0.0d0
- enddo
- do islice=1,nslice
- ll(islice)=0
- mm(islice)=0
- enddo
- write (iout,*) "nparmset",nparmset
- if (hamil_rep) then
- npars=1
- else
- npars=nparmset
- endif
- do iparm=1,npars
-
- if (replica(iparm)) then
- nthr = 1
- else
- nthr = nT_h(iparm)
- endif
-
- do ib=1,nthr
- do iR=1,nRR(ib,iparm)
-
- write (iout,*) "iparm",iparm," ib",ib," iR",iR," nQ",nQ
- do islice=1,nslice
- jj(islice)=0
- kk(islice)=0
- enddo
-
- IF (NFILE_BIN(iR,ib,iparm).GT.0) THEN
-! Read conformations from binary DA files (one per batch) and write them to
-! a binary DA scratchfile.
- write (liczba,'(bz,i3.3)') me
- do if=1,nfile_bin(iR,ib,iparm)
- nazwa=protfiles(if,1,iR,ib,iparm) &
- (:ilen(protfiles(if,1,iR,ib,iparm)))//".bx"
- open (ientin,file=nazwa,status="old",form="unformatted",&
- access="direct",recl=lenrec2,err=1111)
- ii=0
- do islice=1,nslice
- call opentmp(islice,ientout,bprotfile_temp)
- call bxread(nazwa,islice,ii,jj(islice),kk(islice),ll(islice),&
- mm(islice),iR,ib,iparm)
- close(ientout)
- enddo
- close(ientin)
- enddo
- ENDIF ! NFILE_BIN>0
-!
- IF (NFILE_ASC(iR,ib,iparm).GT.0) THEN
-! Read conformations from multiple ASCII int files and write them to a binary
-! DA scratchfile.
- do if=1,nfile_asc(iR,ib,iparm)
- nazwa=protfiles(if,2,iR,ib,iparm) &
- (:ilen(protfiles(if,2,iR,ib,iparm)))//".x"
- open(unit=ientin,file=nazwa,status='old',err=1111)
- write(iout,*) "reading ",nazwa(:ilen(nazwa))
- ii=0
- call xread(nazwa,ii,jj,kk,ll,mm,iR,ib,iparm)
- enddo ! if
- ENDIF
- IF (NFILE_CX(iR,ib,iparm).gt.0) THEN
-! Read conformations from cx files and write them to a binary
-! DA scratchfile.
- do if=1,nfile_cx(iR,ib,iparm)
- nazwa=protfiles(if,2,iR,ib,iparm) &
- (:ilen(protfiles(if,2,iR,ib,iparm)))//".cx"
- write(iout,*) "reading ",nazwa(:ilen(nazwa))
- ii=0
- print *,"Calling cxread"
- call cxread(nazwa,ii,jj,kk,ll,mm,iR,ib,iparm,&
- *1111)
-write(iout,*)"after call cxread"
- close(ientout)
- write (iout,*) "exit cxread"
- call flush(iout)
- enddo
- ENDIF
-write(iout,*)"*********************in read database"
-
- do islice=1,nslice
-! stot(islice)=0
- stot(islice)=stot(islice)+jj(islice)
- enddo
-
- enddo
- enddo
- write (iout,*) "IPARM",iparm
- enddo
-
- if (nslice.eq.1) then
-#ifdef MPI
- write (liczba,'(bz,i3.3)') me
- bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"// &
- prefix(:ilen(prefix))//liczba//".xbin.tmp"
-#else
- bprotfile_temp = scratchdir(:ilen(scratchdir))// &
- "/"//prefix(:ilen(prefix))//".xbin.tmp"
-#endif
- write(iout,*) mm(1)," conformations read",ll(1),&
- " conformations written to ",&
- bprotfile_temp(:ilen(bprotfile_temp))
- else
- do islice=1,nslice
- write (liczba1,'(bz,i2.2)') islice
-#ifdef MPI
- write (liczba,'(bz,i3.3)') me
- bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"// &
- prefix(:ilen(prefix))//liczba//".xbin.tmp"//liczba1
-#else
- bprotfile_temp = scratchdir(:ilen(scratchdir))// &
- "/"//prefix(:ilen(prefix))//".xbin.tmp"//liczba1
-#endif
- write(iout,*) mm(islice)," conformations read",ll(islice),&
- " conformations written to ",&
- bprotfile_temp(:ilen(bprotfile_temp))
- enddo
- endif
-
-#ifdef MPI
-! Check if everyone has the same number of conformations
- call MPI_Allgather(stot(1),nslice,MPI_INTEGER,&
- ntot_all(1,0),nslice,MPI_INTEGER,MPI_Comm_World,IERROR)
- lerr=.false.
- do i=0,nprocs-1
- if (i.ne.me) then
- do islice=1,nslice
- if (stot(islice).ne.ntot_all(islice,i)) then
- write (iout,*) "Number of conformations at processor",i,&
- " differs from that at processor",me,&
- stot(islice),ntot_all(islice,i)," slice",islice
- lerr = .true.
- endif
- enddo
- endif
- enddo
- if (lerr) then
- write (iout,*)
- write (iout,*) "Numbers of conformations read by processors"
- write (iout,*)
- do i=0,nprocs-1
- write (iout,'(8i10)') i,(ntot_all(islice,i),islice=1,nslice)
- enddo
- write (iout,*) "Calculation terminated."
- call flush(iout)
- return 1
- endif
- do islice=1,nslice
- ntot(islice)=stot(islice)
- enddo
-write(iout,*) "end of read database"
- return
-#endif
- 1111 write(iout,*) "Error opening coordinate file ",nazwa(:ilen(nazwa))
- call flush(iout)
- return 1
- end subroutine read_database
-!--------------------------------------------------------------------------------
- integer function iroof(n,m)
- integer :: n,m,ii
- ii = n/m
- if (ii*m .lt. n) ii=ii+1
- iroof = ii
- return
- end function iroof
-!--------------------------------------------------------------------------------
-! bxread.F
-!--------------------------------------------------------------------------------
- subroutine bxread(nazwa,islice,ii,jj,kk,ll,mm,iR,ib,iparm)
-! implicit none
-! include "DIMENSIONS"
-! include "DIMENSIONS.ZSCOPT"
-! include "DIMENSIONS.FREE"
-! use energy_data, only:nnt,nct,nss,ihpb,jhpbi
- use MPI_data, only:nprocs
-#ifdef MPI
- include "mpif.h"
- integer :: IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
-! include "COMMON.MPI"
-#endif
-! include "COMMON.CHAIN"
-! include "COMMON.IOUNITS"
-! include "COMMON.PROTFILES"
-! include "COMMON.NAMES"
-! include "COMMON.VAR"
-! include "COMMON.GEO"
-! include "COMMON.ENEPS"
-! include "COMMON.PROT"
-! include "COMMON.INTERACT"
-! include "COMMON.FREE"
-! include "COMMON.SBRIDGE"
- real(kind=4) :: csingle(3,nres*2) !(3,maxres2)
- character(len=64) :: nazwa,bprotfile_temp
- character(len=3) :: liczba
- integer :: i,is,ie,j,ii,jj,k,kk,l,ll,mm,if
- integer :: nrec,nlines,iscor,islice
- real(kind=8) :: energ
-! integer ilen,iroof
-! external ilen,iroof
- real(kind=8) :: rmsdev,energia(0:n_ene),efree,eini,temp
-!el real(kind=8) :: rmsdev,energia(0:max_eneW),efree,eini,temp
- real(kind=8) :: prop(nQ) !(maxQ)
- integer :: ntot_all(0:nprocs-1)!(0:maxprocs-1)
- integer :: iparm,ib,iib,ir,nprop,nthr,nrec_slice
- real(kind=8) :: etot,time
- logical :: lerr
- nrec_slice=(rec_end(iR,ib,iparm)-rec_start(iR,ib,iparm)+1)/nslice
- is=rec_start(iR,ib,iparm)+(islice-1)*nrec_slice
- ie=rec_start(iR,ib,iparm)+islice*nrec_slice-1
- write (iout,*) "bxread: islice",islice," nslice",nslice,&
- " nrec_slice",nrec_slice
- write (iout,*) "is",is," ie",ie,"rec_start",&
- rec_start(iR,ib,iparm)," rec_end",rec_end(iR,ib,iparm)
- do i=is,ie
- read(ientin,rec=i+1,err=101) &
- ((csingle(l,k),l=1,3),k=1,nres),&
- ((csingle(l,k+nres),l=1,3),k=nnt,nct),&
- nss,(ihpb(k),jhpb(k),k=1,nss),&
- eini,efree,rmsdev,(prop(j),j=1,nQ),iscor
- ii=ii+1
- kk=kk+1
- if (mod(kk,isampl(iparm)).eq.0) then
- jj=jj+1
- write(ientout,rec=jj) &
- ((csingle(l,k),l=1,3),k=1,nres),&
- ((csingle(l,k+nres),l=1,3),k=nnt,nct),&
- nss,(ihpb(k),jhpb(k),k=1,nss),&
- eini,efree,rmsdev,(prop(j),j=1,nQ),iR,ib,iparm
-#ifdef DEBUG
- do i=1,2*nres
- do j=1,3
- c(j,i)=csingle(j,i)
- enddo
- enddo
- call int_from_cart1(.false.)
- write (iout,*) "Writing conformation, record",jj
- write (iout,*) "Cartesian coordinates"
- write (iout,'(8f10.5)') ((c(j,i),j=1,3),i=1,nres)
- write (iout,'(8f10.5)') ((c(j,i+nres),j=1,3),i=nnt,nct)
- write (iout,*) "Internal coordinates"
- write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
- write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
- write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
- write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
- write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
- write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
- write (iout,'(16i5)') nss,(ihpb(k),jhpb(k),k=1,nss)
- write (iout,'(f10.5,i5)') rmsdev,iscor
-#endif
- endif
- enddo
- 101 continue
- close(ientin)
- write (iout,*) ii," conformations read from DA file ",&
- nazwa(:ilen(nazwa))
- write (iout,*) kk," conformations read so far, slice",islice
- write (iout,*) jj," conformations stored so far, slice",islice
-
- return
- end subroutine bxread
-!--------------------------------------------------------------------------------
-! cxread.F
-!--------------------------------------------------------------------------------
- subroutine cxread(nazwa,ii,jj,kk,ll,mm,iR,ib,iparm,*)
-
-#define DEBUG
-#ifdef DEBUG
- use geometry, only:int_from_cart1
- use geometry_data, only:vbld,rad2deg,theta,phi,alph,omeg
- integer :: iscor
-#endif
-! implicit real*8 (a-h,o-z)
-! include 'DIMENSIONS'
-! include 'DIMENSIONS.ZSCOPT'
-! include 'DIMENSIONS.FREE'
- integer,parameter :: MaxTraj=2050
-! include 'COMMON.CHAIN'
-! include 'COMMON.INTERACT'
-! include 'COMMON.NAMES'
-! include 'COMMON.IOUNITS'
-! include 'COMMON.HEADER'
-! include 'COMMON.SBRIDGE'
-! include 'COMMON.PROTFILES'
-! include 'COMMON.OBCINKA'
-! include 'COMMON.FREE'
-! include 'COMMON.VAR'
-! include 'COMMON.GEO'
-! include 'COMMON.PROT'
- character(len=64) :: nazwa,bprotfile_temp
- real(kind=4) :: rtime,rpotE,ruconst,rt_bath,rprop(nQ) !(2000) !(maxQ)
- real(kind=8) :: time
- integer :: iret,itmp,itraj,ntraj
- real(kind=4) :: xoord(3,2*nres+2),prec
- integer :: nstep(0:MaxTraj-1)
-! integer ilen
-! external ilen
- integer :: ii,jj(nslice),kk(nslice),ll(nslice),mm(nslice) !(maxslice)
- integer :: is(nSlice),ie(nSlice),nrec_slice
- real(kind=8) :: ts(nSlice),te(nSlice),time_slice
- integer :: iR,ib,iparm,i,j,it,islice,nprop_prev
- integer :: k,l,iib,islice1,nprop
- real(kind=8) :: efree,rmsdev
- integer :: ixdrf
-!el integer :: slice
-! logical :: conf_check
-! ixdrf=0
-! nprop=0
-
-! ruconst=0.0d0
-! rtime=0.0d0
-! rpotE=0.0d0
-! rt_bath=0.0d0
-
- call set_slices(is,ie,ts,te,iR,ib,iparm)
- nprop_prev=0
- do i=1,nQ
- rprop(i)=0.0d0
- enddo
- do i=0,MaxTraj-1
- nstep(i)=0
- enddo
- ntraj=0
- it=0
- iret=1
-#if (defined(AIX) && !defined(JUBL))
- call xdrfopen_(ixdrf,nazwa, "r", iret)
-#else
- call xdrfopen(ixdrf,nazwa, "r", iret)
-#endif
- if (iret.eq.0) return 1
-
- islice1=1
- call opentmp(islice1,ientout,bprotfile_temp)
- print *,"bumbum" !d
- do while (iret.gt.0)
-
-#if (defined(AIX) && !defined(JUBL))
- call xdrffloat_(ixdrf, rtime, iret)
- print *,"rtime",rtime," iret",iret !d
- call xdrffloat_(ixdrf, rpotE, iret)
- write (iout,*) "rpotE",rpotE," iret",iret !d
- call flush(iout)
- call xdrffloat_(ixdrf, ruconst, iret)
- call xdrffloat_(ixdrf, rt_bath, iret)
- call xdrfint_(ixdrf, nss, iret)
- do j=1,nss
- call xdrfint_(ixdrf, ihpb(j), iret)
- call xdrfint_(ixdrf, jhpb(j), iret)
- enddo
- call xdrfint_(ixdrf, nprop, iret)
- if (umbrella(iparm) .or. read_iset(iparm) .or. hamil_rep) &
- call xdrfint(ixdrf, iset, iret)
- do i=1,nprop
- call xdrffloat_(ixdrf, rprop(i), iret)
- enddo
-#else
- call xdrffloat(ixdrf, rtime, iret)
- call xdrffloat(ixdrf, rpotE, iret)
- write (iout,*) "rpotE",rpotE," iret",iret !d
- call flush(iout)
- call xdrffloat(ixdrf, ruconst, iret)
- call xdrffloat(ixdrf, rt_bath, iret)
- call xdrfint(ixdrf, nss, iret)
- do j=1,nss
- call xdrfint(ixdrf, ihpb(j), iret)
- call xdrfint(ixdrf, jhpb(j), iret)
- enddo
- call xdrfint(ixdrf, nprop, iret)
- write (iout,*) "nprop",nprop !d
- if (it.gt.0 .and. nprop.ne.nprop_prev) then
- write (iout,*) "Warning previous nprop",nprop_prev,&
- " current",nprop
- nprop=nprop_prev
- else
- nprop_prev=nprop
- endif
- call flush(iout)
- if (umbrella(iparm) .or. read_iset(iparm) .or. hamil_rep) &
- call xdrfint(ixdrf, iset, iret)
- do i=1,nprop
- call xdrffloat(ixdrf, rprop(i), iret)
- enddo
-#endif
- if (iret.eq.0) exit
- itraj=mod(it,totraj(iR,iparm))
-#define DEBUG
-#ifdef DEBUG
- write (iout,*) "ii",ii," itraj",itraj," it",it
-#endif
- if (iset.eq.0) iset = 1
- call flush(iout)
- it=it+1
- if (itraj.gt.ntraj) ntraj=itraj
- nstep(itraj)=nstep(itraj)+1
-! rprop(2)=dsqrt(rprop(2))
-! rprop(3)=dsqrt(rprop(3))
-#ifdef DEBUG
- write (iout,*) "umbrella ",umbrella
- write (iout,*) rtime,rpotE,rt_bath,nss,&
- (ihpb(j),jhpb(j),j=1,nss),(rprop(j),j=1,nprop)
- write (iout,*) "nprop",nprop," iset",iset," myparm",myparm
- call flush(iout)
-#endif
- prec=10000.0
- itmp=0
-#if (defined(AIX) && !defined(JUBL))
- call xdrf3dfcoord_(ixdrf, xoord, itmp, prec, iret)
-#else
- call xdrf3dfcoord(ixdrf, xoord, itmp, prec, iret)
-#endif
-#ifdef DEBUG
- write (iout,'(10f8.3)') ((xoord(j,i),j=1,3),i=1,2*nres+2)
-#endif
-#undef DEBUG
- if (iret.eq.0) exit
- if (itmp .ne. nres + nct - nnt + 1) then
- write (iout,*) "Error: inconsistent sizes",itmp,nres+nct-nnt+1
- call flush(iout)
- exit
- endif
-
- time=rtime
- write (iout,*) "calling slice" !d
- call flush(iout) !d
- islice=slice(nstep(itraj),time,is,ie,ts,te)
- write (iout,*) "islice",islice !d
- call flush(iout) !d
-
- do i=1,nres
- do j=1,3
- c(j,i)=xoord(j,i)
- enddo
- enddo
- do i=1,nct-nnt+1
- do j=1,3
- c(j,i+nres+nnt-1)=xoord(j,i+nres)
- enddo
- enddo
-
- if (islice.gt.0 .and. islice.le.nslice .and. (.not.separate_parset &
- .or. iset.eq.myparm)) then
- ii=ii+1
- kk(islice)=kk(islice)+1
- mm(islice)=mm(islice)+1
- if (mod(nstep(itraj),isampl(iparm)).eq.0 .and. &
- conf_check(ll(islice)+1,1)) then
- if (replica(iparm)) then
- rt_bath=1.0d0/(rt_bath*1.987D-3)
- do i=1,nT_h(iparm)
- if (abs(real(beta_h(i,iparm))-rt_bath).lt.1.0e-4) then
- iib = i
- goto 22
- endif
- enddo
- 22 continue
- if (i.gt.nT_h(iparm)) then
- write (iout,*) "Error - temperature of conformation",&
- ii,1.0d0/(rt_bath*1.987D-3),&
- " does not match any of the list"
- write (iout,*) &
- 1.0d0/(rt_bath*1.987D-3),&
- (1.0d0/(beta_h(i,iparm)*1.987D-3),i=1,nT_h(iparm))
- call flush(iout)
-! exit
-! call MPI_Abort(MPI_COMM_WORLD,IERROR,ERRCODE)
- ii=ii-1
- kk(islice)=kk(islice)-1
- mm(islice)=mm(islice)-1
- goto 112
- endif
- else
- iib = ib
- endif
-
- efree=0.0d0
- jj(islice)=jj(islice)+1
- if (umbrella(iparm)) then
- snk(iset,iib,iparm,islice)=snk(iset,iib,iparm,islice)+1
- else if (hamil_rep) then
- snk(1,iib,iparm,islice)=snk(1,iib,iparm,islice)+1
- else
- snk(iR,iib,iparm,islice)=snk(iR,iib,iparm,islice)+1
- endif
- ll(islice)=ll(islice)+1
-#ifdef DEBUG
- write (iout,*) "Writing conformation, record",ll(islice)
- write (iout,*) "ib",ib," iib",iib
- write (iout,*) "ntraj",ntraj," itraj",itraj,&
- " nstep",nstep(itraj)
- write (iout,*) "pote",rpotE," time",rtime
-! if (replica(iparm)) then
-! write (iout,*) "TEMP",1.0d0/(rt_bath*1.987D-3)
-! write (iout,*) "TEMP list"
-! write (iout,*)
-! & (1.0d0/(beta_h(i,iparm)*1.987D-3),i=1,nT_h(iparm))
-! endif
- write (iout,*) "iparm",iparm," ib",ib," iR",iR," nQ",nQ
-! write (iout,*) "nres",nres," nnt",nnt," nct",nct," nss",nss
-! write (iout,*) "length",nres*4+(nct-nnt+1)*4+4+2*nss*4
- call flush(iout)
-#endif
- if (islice.ne.islice1) then
-! write (iout,*) "islice",islice," islice1",islice1
- close(ientout)
-! write (iout,*) "Closing file ",
-! & bprotfile_temp(:ilen(bprotfile_temp))
- call opentmp(islice,ientout,bprotfile_temp)
-! write (iout,*) "Opening file ",
-! & bprotfile_temp(:ilen(bprotfile_temp))
- islice1=islice
- endif
- if (umbrella(iparm)) then
- write(ientout,rec=ll(islice)) &
- ((xoord(l,k),l=1,3),k=1,nres),&
- ((xoord(l,k),l=1,3),k=nres+1,nres+nct-nnt+1),&
- nss,(ihpb(k),jhpb(k),k=1,nss),&
- rpotE+0.0d0,efree,rmsdev,(rprop(i)+0.0d0,i=1,nQ),&
- iset,iib,iparm
- else if (hamil_rep) then
- write(ientout,rec=ll(islice)) &
- ((xoord(l,k),l=1,3),k=1,nres),&
- ((xoord(l,k),l=1,3),k=nres+1,nres+nct-nnt+1),&
- nss,(ihpb(k),jhpb(k),k=1,nss),&
- rpotE+0.0d0,efree,rmsdev,(rprop(i)+0.0d0,i=1,nQ),&
- iR,iib,iset
- else
- write(ientout,rec=ll(islice)) &
- ((xoord(l,k),l=1,3),k=1,nres),&
- ((xoord(l,k),l=1,3),k=nres+1,nres+nct-nnt+1),&
- nss,(ihpb(k),jhpb(k),k=1,nss),&
- rpotE+0.0d0,efree,rmsdev,(rprop(i)+0.0d0,i=1,nQ),&
- iR,iib,iparm
- endif
-#ifdef DEBUG
- call int_from_cart1(.false.)
- write (iout,*) "Writing conformation, record",ll(islice)
- write (iout,*) "Cartesian coordinates"
- write (iout,'(8f10.5)') ((c(j,i),j=1,3),i=1,nres)
- write (iout,'(8f10.5)') ((c(j,i+nres),j=1,3),i=nnt,nct)
- write (iout,*) "Internal coordinates"
- write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
- write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
- write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
- write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
- write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
- write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
- write (iout,'(16i5)') nss,(ihpb(k),jhpb(k),k=1,nss)
-! write (iout,'(8f10.5)') (rprop(j),j=1,nQ)
- write (iout,'(16i5)') iscor
- call flush(iout)
-#endif
- endif
- endif
-
- 112 continue
-
- enddo
- close(ientout)
-#if (defined(AIX) && !defined(JUBL))
- call xdrfclose_(ixdrf, iret)
-#else
- call xdrfclose(ixdrf, iret)
-#endif
- write (iout,'(i10," trajectories found in file.")') ntraj+1
- write (iout,'(a)') "Numbers of steps in trajectories:"
- write (iout,'(8i10)') (nstep(i),i=0,ntraj)
- write (iout,*) ii," conformations read from file",&
- nazwa(:ilen(nazwa))
- do islice=1,nslice
- write (iout,*) mm(islice)," conformations read so far, slice",&
- islice
- write (iout,*) ll(islice),&
- " conformations stored so far, slice",islice
- enddo
- call flush(iout)
-#undef DEBUG
- return
- end subroutine cxread
-!--------------------------------------------------------------------------------
-! xread.F
-!--------------------------------------------------------------------------------
- subroutine xread(nazwa,ii,jj,kk,ll,mm,iR,ib,iparm)
-
- use geometry_data
-! implicit none
-! include "DIMENSIONS"
-! include "DIMENSIONS.ZSCOPT"
-! include "DIMENSIONS.FREE"
- use MPI_data, only:nprocs
-#ifdef MPI
- include "mpif.h"
- integer :: IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
-! include "COMMON.MPI"
-#endif
- integer,parameter :: MaxTraj=2050
-! include "COMMON.CHAIN"
-! include "COMMON.IOUNITS"
-! include "COMMON.PROTFILES"
-! include "COMMON.NAMES"
-! include "COMMON.VAR"
-! include "COMMON.GEO"
-! include "COMMON.ENEPS"
-! include "COMMON.PROT"
-! include "COMMON.INTERACT"
-! include "COMMON.FREE"
-! include "COMMON.SBRIDGE"
-! include "COMMON.OBCINKA"
- real(kind=4) :: csingle(3,nres*2)
- character(len=64) :: nazwa,bprotfile_temp
- integer :: i,j,k,l,ii,jj(nslice),kk(nslice),ll(nslice),&
- mm(nslice) !(maxslice)
- integer :: iscor,islice,islice1 !el,slice
- real(kind=8) :: energ
-! integer ilen,iroof
-! external ilen,iroof
- real(kind=8) :: rmsdev,energia(0:n_ene),efree,eini,temp
-!el real(kind=8) :: rmsdev,energia(0:max_eneW),efree,eini,temp
- real(kind=8) :: prop(nQ) !(maxQ)
- integer :: ntot_all(0:nprocs-1)!(0:maxprocs-1)
- integer :: iparm,ib,iib,ir,nprop,nthr
- real(kind=8) :: etot,time,ts(nslice),te(nslice)
- integer :: is(nslice),ie(nslice),itraj,ntraj,it,iset
- integer :: nstep(0:MaxTraj-1)
- logical :: lerr
-
- call set_slices(is,ie,ts,te,iR,ib,iparm)
- do i=1,nQ
- prop(i)=0.0d0
- enddo
- do i=0,MaxTraj-1
- nstep(i)=0
- enddo
- ntraj=0
- it=0
- islice1=1
- call opentmp(islice1,ientout,bprotfile_temp)
- do while (.true.)
- if (replica(iparm)) then
- if (hamil_rep .or. umbrella(iparm)) then
- read (ientin,*,end=1112,err=1112) time,eini,&
- etot,temp,nss,(ihpb(j),jhpb(j),j=1,nss),&
- nprop,(prop(j),j=1,nprop),iset
- else
- read (ientin,*,end=1112,err=1112) time,eini,&
- etot,temp,nss,(ihpb(j),jhpb(j),j=1,nss),&
- nprop,(prop(j),j=1,nprop)
- endif
- temp=1.0d0/(temp*1.987D-3)
-! write (iout,*) time,eini,etot,nss,
-! & (ihpb(j),jhpb(j),j=1,nss),(prop(j),j=1,nprop)
-! call flush(iout)
- do i=1,nT_h(iparm)
- if (beta_h(i,iparm).eq.temp) then
- iib = i
- goto 22
- endif
- enddo
- 22 continue
- if (i.gt.nT_h(iparm)) then
- write (iout,*) "Error - temperature of conformation",&
- ii,1.0d0/(temp*1.987D-3),&
- " does not match any of the list"
- write (iout,*) &
- 1.0d0/(temp*1.987D-3),&
- (1.0d0/(beta_h(i,iparm)*1.987D-3),i=1,nT_h(iparm))
- call flush(iout)
-#ifdef MPI
- call MPI_Abort(MPI_COMM_WORLD,IERROR,ERRCODE)
-#endif
- endif
- else
- read (ientin,*,end=1112,err=1112) time,eini,&
- etot,nss,(ihpb(j),jhpb(j),j=1,nss),&
- nprop,(prop(j),j=1,nprop)
- iib = ib
- endif
- itraj=mod(it,totraj(iR,iparm))
-! write (*,*) "ii",ii," itraj",itraj
-! call flush(iout)
- it=it+1
- if (itraj.gt.ntraj) ntraj=itraj
- nstep(itraj)=nstep(itraj)+1
- islice=slice(nstep(itraj),time,is,ie,ts,te)
- read (ientin,'(8f10.5)',end=1112,err=1112) &
- ((csingle(l,k),l=1,3),k=1,nres),&
- ((csingle(l,k+nres),l=1,3),k=nnt,nct)
- efree=0.0d0
- if (islice.gt.0 .and. islice.le.nslice) then
- ii=ii+1
- kk(islice)=kk(islice)+1
- mm(islice)=mm(islice)+1
- if (mod(nstep(itraj),isampl(iparm)).eq.0) then
- jj(islice)=jj(islice)+1
- if (hamil_rep) then
- snk(iR,iib,iset,islice)=snk(iR,iib,iset,islice)+1
- else if (umbrella(iparm)) then
- snk(iset,iib,iparm,islice)=snk(iset,iib,iparm,islice)+1
- else
- snk(iR,iib,iparm,islice)=snk(iR,iib,iparm,islice)+1
- endif
- ll(islice)=ll(islice)+1
-! write (iout,*) ii,kk,jj,ll,eini,(prop(j),j=1,nprop)
-#ifdef DEBUG
-! write (iout,*) "Writing conformation, record",ll(islice)
-! write (iout,*) "ib",ib," iib",iib
- if (replica(iparm)) then
- write (iout,*) "TEMP",1.0d0/(temp*1.987D-3)
- write (iout,*) "TEMP list"
- write (iout,*) &
- (1.0d0/(beta_h(i,iparm)*1.987D-3),i=1,nT_h(iparm))
- endif
- call flush(iout)
-#endif
-! write (iout,*) "iparm",iparm," ib",ib," iR",iR," nQ",nQ
-! write (iout,*) "nres",nres," nnt",nnt," nct",nct," nss",nss
-! write (iout,*) "length",nres*4+(nct-nnt+1)*4+4+2*nss*4
-! call flush(iout)
- if (islice.ne.islice1) then
-! write (iout,*) "islice",islice," islice1",islice1
- close(ientout)
-! write (iout,*) "Closing file ",
-! & bprotfile_temp(:ilen(bprotfile_temp))
- call opentmp(islice,ientout,bprotfile_temp)
-! write (iout,*) "Opening file ",
-! & bprotfile_temp(:ilen(bprotfile_temp))
-! call flush(iout)
- islice1=islice
- endif
- write(ientout,rec=ll(islice)) &
- ((csingle(l,k),l=1,3),k=1,nres),&
- ((csingle(l,k+nres),l=1,3),k=nnt,nct),&
- nss,(ihpb(k),jhpb(k),k=1,nss),&
- eini,efree,rmsdev,(prop(i),i=1,nQ),iR,iib,iparm
-#ifdef DEBUG
- do i=1,2*nres
- do j=1,3
- c(j,i)=csingle(j,i)
- enddo
- enddo
- call int_from_cart1(.false.)
- write (iout,*) "Writing conformation, record",ll(islice)
- write (iout,*) "Cartesian coordinates"
- write (iout,'(8f10.5)') ((c(j,i),j=1,3),i=1,nres)
- write (iout,'(8f10.5)') ((c(j,i+nres),j=1,3),i=nnt,nct)
- write (iout,*) "Internal coordinates"
- write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
- write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
- write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
- write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
- write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
- write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
- write (iout,'(16i5)') nss,(ihpb(k),jhpb(k),k=1,nss)
-! write (iout,'(8f10.5)') (prop(j),j=1,nQ)
- write (iout,'(16i5)') iscor
- call flush(iout)
-#endif
- endif
- endif
- enddo
- 1112 continue
- close(ientout)
- write (iout,'(i10," trajectories found in file.")') ntraj+1
- write (iout,'(a)') "Numbers of steps in trajectories:"
- write (iout,'(8i10)') (nstep(i),i=0,ntraj)
- write (iout,*) ii," conformations read from file",&
- nazwa(:ilen(nazwa))
- write (iout,*) mm(islice)," conformations read so far, slice",&
- islice
- write (iout,*) ll(islice)," conformations stored so far, slice",&
- islice
- call flush(iout)
- return
- end subroutine xread
-!--------------------------------------------------------------------------------
-! enecalc1.F
-!--------------------------------------------------------------------------------
- subroutine write_dbase(islice,*)
-
- use geometry_data
- use control_data, only:indpdb
- use w_compar_data
- use conform_compar, only:conf_compar
-! implicit none
-! include "DIMENSIONS"
-! include "DIMENSIONS.ZSCOPT"
-! include "DIMENSIONS.FREE"
-! include "DIMENSIONS.COMPAR"
- use geometry, only:int_from_cart1
-#ifdef MPI
- include "mpif.h"
- integer :: IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
-! include "COMMON.MPI"
-#endif
-! include "COMMON.CONTROL"
-! include "COMMON.CHAIN"
-! include "COMMON.IOUNITS"
-! include "COMMON.PROTFILES"
-! include "COMMON.NAMES"
-! include "COMMON.VAR"
-! include "COMMON.SBRIDGE"
-! include "COMMON.GEO"
-! include "COMMON.FFIELD"
-! include "COMMON.ENEPS"
-! include "COMMON.LOCAL"
-! include "COMMON.WEIGHTS"
-! include "COMMON.INTERACT"
-! include "COMMON.FREE"
-! include "COMMON.ENERGIES"
-! include "COMMON.COMPAR"
-! include "COMMON.PROT"
-! include "COMMON.CONTACTS1"
- character(len=64) :: nazwa
- character(len=80) :: bxname,cxname
- character(len=64) :: bprotfile_temp
- character(len=3) :: liczba,licz
- character(len=2) :: licz2
- integer :: i,itj,ii,iii,j,k,l
- integer :: ixdrf,iret
- integer :: iscor,islice
- real(kind=8) :: rmsdev,efree,eini
- real(kind=4) :: csingle(3,nres*2)
- real(kind=8) :: energ
-! integer ilen,iroof
-! external ilen,iroof
- integer :: ir,ib,iparm
- integer :: isecstr(nres)
- write (licz2,'(bz,i2.2)') islice
- call opentmp(islice,ientout,bprotfile_temp)
- write (iout,*) "bprotfile_temp ",bprotfile_temp
- call flush(iout)
- if (.not.bxfile .and. .not. cxfile .and. indpdb.eq.0 &
- .and. ensembles.eq.0) then
- close(ientout,status="delete")
- return
- endif
-#ifdef MPI
- write (liczba,'(bz,i3.3)') me
- if (bxfile .or. cxfile .or. ensembles.gt.0) then
- if (.not.separate_parset) then
- bxname = prefix(:ilen(prefix))//liczba//".bx"
- else
- write (licz,'(bz,i3.3)') myparm
- bxname = prefix(:ilen(prefix))//liczba//"_par"//licz//".bx"
- endif
- open (ientin,file=bxname,status="unknown",&
- form="unformatted",access="direct",recl=lenrec1)
- endif
-#else
- if (bxfile .or. cxfile .or. ensembles.gt.0) then
- if (nslice.eq.1) then
- bxname = prefix(:ilen(prefix))//".bx"
- else
- bxname = prefix(:ilen(prefix))// &
- "_slice_"//licz2//".bx"
- endif
- open (ientin,file=bxname,status="unknown",&
- form="unformatted",access="direct",recl=lenrec1)
- write (iout,*) "Calculating energies; writing geometry",&
- " and energy components to ",bxname(:ilen(bxname))
- endif
-#if (defined(AIX) && !defined(JUBL))
- call xdrfopen_(ixdrf,cxname, "w", iret)
-#else
- call xdrfopen(ixdrf,cxname, "w", iret)
-#endif
- if (iret.eq.0) then
- write (iout,*) "Error opening cxfile ",cxname(:ilen(cxname))
- cxfile=.false.
- endif
-!el endif
-#endif
- if (indpdb.gt.0) then
- if (nslice.eq.1) then
-#ifdef MPI
- if (.not.separate_parset) then
- statname=prefix(:ilen(prefix))//'_'//pot(:ilen(pot)) &
- //liczba//'.stat'
- else
- write (licz,'(bz,i3.3)') myparm
- statname=prefix(:ilen(prefix))//'_par'//licz//'_'// &
- pot(:ilen(pot))//liczba//'.stat'
- endif
-
-#else
- statname=prefix(:ilen(prefix))//'_'//pot(:ilen(pot))//'.stat'
-#endif
- else
-#ifdef MPI
- if (.not.separate_parset) then
- statname=prefix(:ilen(prefix))//'_'//pot(:ilen(pot))// &
- "_slice_"//licz2//liczba//'.stat'
- else
- write (licz,'(bz,i3.3)') myparm
- statname=prefix(:ilen(prefix))//'_'//pot(:ilen(pot))// &
- '_par'//licz//"_slice_"//licz2//liczba//'.stat'
- endif
-#else
- statname=prefix(:ilen(prefix))//'_'//pot(:ilen(pot)) &
- //"_slice_"//licz2//'.stat'
-#endif
- endif
- open(istat,file=statname,status="unknown")
- endif
-
-#ifdef MPI
- do i=1,scount(me)
-#else
- do i=1,ntot(islice)
-#endif
- read(ientout,rec=i,err=101) &
- ((csingle(l,k),l=1,3),k=1,nres),&
- ((csingle(l,k+nres),l=1,3),k=nnt,nct),&
- nss,(ihpb(k),jhpb(k),k=1,nss),&
- eini,efree,rmsdev,(q(k,i),k=1,nQ),iR,ib,iparm
-! write (iout,*) iR,ib,iparm,eini,efree
- do j=1,2*nres
- do k=1,3
- c(k,j)=csingle(k,j)
- enddo
- enddo
- call int_from_cart1(.false.)
- iscore=0
-! write (iout,*) "Calling conf_compar",i
-! call flush(iout)
- anatemp= 1.0d0/(beta_h(ib,iparm)*1.987D-3)
- if (indpdb.gt.0) then
- call conf_compar(i,.false.,.true.)
-! else
-! call elecont(.false.,ncont,icont,nnt,nct)
-! call secondary2(.false.,.false.,ncont,icont,isecstr)
- endif
-! write (iout,*) "Exit conf_compar",i
-! call flush(iout)
- if (bxfile .or.cxfile .or. ensembles.gt.0) write (ientin,rec=i) &
- ((csingle(l,k),l=1,3),k=1,nres),&
- ((csingle(l,k+nres),l=1,3),k=nnt,nct),&
- nss,(ihpb(k),jhpb(k),k=1,nss),&
-! & potE(i,iparm),-entfac(i),rms_nat,iscore
- potE(i,nparmset),-entfac(i),rms_nat,iscore
-! write (iout,'(2i5,3e15.5)') i,me,potE(i,iparm),-entfac(i)
-#ifndef MPI
- if (cxfile) call cxwrite(ixdrf,csingle,potE(i,nparmset),&
- -entfac(i),rms_nat,iscore)
-#endif
- enddo
- close(ientout,status="delete")
- close(istat)
- if (bxfile .or. cxfile .or. ensembles.gt.0) close(ientin)
-#ifdef MPI
- call MPI_Barrier(WHAM_COMM,IERROR)
- if (me.ne.Master .or. .not.bxfile .and. .not. cxfile &
- .and. ensembles.eq.0) return
- write (iout,*)
- if (bxfile .or. ensembles.gt.0) then
- if (nslice.eq.1) then
- if (.not.separate_parset) then
- bxname = prefix(:ilen(prefix))//".bx"
- else
- write (licz,'(bz,i3.3)') myparm
- bxname = prefix(:ilen(prefix))//"_par"//licz//".bx"
- endif
- else
- if (.not.separate_parset) then
- bxname = prefix(:ilen(prefix))//"_slice_"//licz2//".bx"
- else
- write (licz,'(bz,i3.3)') myparm
- bxname = prefix(:ilen(prefix))//"par_"//licz// &
- "_slice_"//licz2//".bx"
- endif
- endif
- open (ientout,file=bxname,status="unknown",&
- form="unformatted",access="direct",recl=lenrec1)
- write (iout,*) "Master is creating binary database ",&
- bxname(:ilen(bxname))
- endif
- if (cxfile) then
- if (nslice.eq.1) then
- if (.not.separate_parset) then
- cxname = prefix(:ilen(prefix))//".cx"
- else
- cxname = prefix(:ilen(prefix))//"_par"//licz//".cx"
- endif
- else
- if (.not.separate_parset) then
- cxname = prefix(:ilen(prefix))// &
- "_slice_"//licz2//".cx"
- else
- cxname = prefix(:ilen(prefix))//"_par"//licz// &
- "_slice_"//licz2//".cx"
- endif
- endif
-#if (defined(AIX) && !defined(JUBL))
- call xdrfopen_(ixdrf,cxname, "w", iret)
-#else
- call xdrfopen(ixdrf,cxname, "w", iret)
-#endif
- if (iret.eq.0) then
- write (iout,*) "Error opening cxfile ",cxname(:ilen(cxname))
- cxfile=.false.
- endif
- endif
- do j=0,nprocs-1
- write (liczba,'(bz,i3.3)') j
- if (separate_parset) then
- write (licz,'(bz,i3.3)') myparm
- bxname = prefix(:ilen(prefix))//liczba//"_par"//licz//".bx"
- else
- bxname = prefix(:ilen(prefix))//liczba//".bx"
- endif
- open (ientin,file=bxname,status="unknown",&
- form="unformatted",access="direct",recl=lenrec1)
- write (iout,*) "Master is reading conformations from ",&
- bxname(:ilen(bxname))
- iii = 0
-! write (iout,*) "j",j," indstart",indstart(j)," indend",indend(j)
-! call flush(iout)
- do i=indstart(j),indend(j)
- iii = iii+1
- read(ientin,rec=iii,err=101) &
- ((csingle(l,k),l=1,3),k=1,nres),&
- ((csingle(l,k+nres),l=1,3),k=nnt,nct),&
- nss,(ihpb(k),jhpb(k),k=1,nss),&
- eini,efree,rmsdev,iscor
- if (bxfile .or. ensembles.gt.0) then
- write (ientout,rec=i) &
- ((csingle(l,k),l=1,3),k=1,nres),&
- ((csingle(l,k+nres),l=1,3),k=nnt,nct),&
- nss,(ihpb(k),jhpb(k),k=1,nss),&
- eini,efree,rmsdev,iscor
- endif
- if(cxfile)call cxwrite(ixdrf,csingle,eini,efree,rmsdev,iscor)
-#ifdef DEBUG
- do k=1,2*nres
- do l=1,3
- c(l,k)=csingle(l,k)
- enddo
- enddo
- call int_from_cart1(.false.)
- write (iout,'(2i5,3e15.5)') i,iii,eini,efree
- write (iout,*) "The Cartesian geometry is:"
- write (iout,'(8f10.5)') ((c(l,k),l=1,3),k=1,nres)
- write (iout,'(8f10.5)') ((c(l,k+nres),l=1,3),k=nnt,nct)
- write (iout,*) "The internal geometry is:"
- write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
- write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
- write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
- write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
- write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
- write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
- write (iout,'(16i5)') nss,(ihpb(k),jhpb(k),k=1,nss)
- write (iout,'(f10.5,i5)') rmsdev,iscor
-#endif
- enddo ! i
- write (iout,*) iii," conformations (from",indstart(j)," to",&
- indend(j),") read from ",&
- bxname(:ilen(bxname))
- close (ientin,status="delete")
- enddo ! j
- if (bxfile .or. cxfile .or. ensembles.gt.0) close (ientout)
-#if (defined(AIX) && !defined(JUBL))
- if (cxfile) call xdrfclose_(ixdrf,cxname,iret)
-#else
- if (cxfile) call xdrfclose(ixdrf,cxname,iret)
-#endif
-#endif
- return
- 101 write (iout,*) "Error in scratchfile."
- call flush(iout)
- return 1
- end subroutine write_dbase
-!-------------------------------------------------------------------------------
- subroutine cxwrite(ixdrf,csingle,eini,efree,rmsdev,iscor)
-! implicit none
-! include "DIMENSIONS"
-! include "DIMENSIONS.ZSCOPT"
-! include "DIMENSIONS.FREE"
-! include "DIMENSIONS.COMPAR"
-#ifdef MPI
- include "mpif.h"
- integer :: IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
-! include "COMMON.MPI"
-#endif
-! include "COMMON.CONTROL"
-! include "COMMON.CHAIN"
-! include "COMMON.IOUNITS"
-! include "COMMON.PROTFILES"
-! include "COMMON.NAMES"
-! include "COMMON.VAR"
-! include "COMMON.SBRIDGE"
-! include "COMMON.GEO"
-! include "COMMON.FFIELD"
-! include "COMMON.ENEPS"
-! include "COMMON.LOCAL"
-! include "COMMON.WEIGHTS"
-! include "COMMON.INTERACT"
-! include "COMMON.FREE"
-! include "COMMON.ENERGIES"
-! include "COMMON.COMPAR"
-! include "COMMON.PROT"
- integer :: i,j,itmp,iscor,iret,ixdrf
- real(kind=8) :: rmsdev,efree,eini
- real(kind=4) :: csingle(3,nres*2),xoord(3,2*nres+2)
- real(kind=4) :: prec
-
-! write (iout,*) "cxwrite"
-! call flush(iout)
- prec=10000.0
- do i=1,nres
- do j=1,3
- xoord(j,i)=csingle(j,i)
- enddo
- enddo
- do i=nnt,nct
- do j=1,3
- xoord(j,nres+i-nnt+1)=csingle(j,i+nres)
- enddo
- enddo
-
- itmp=nres+nct-nnt+1
-
-! write (iout,*) "itmp",itmp
-! call flush(iout)
-#if (defined(AIX) && !defined(JUBL))
- call xdrf3dfcoord_(ixdrf, xoord, itmp, prec, iret)
-
-! write (iout,*) "xdrf3dfcoord"
-! call flush(iout)
- call xdrfint_(ixdrf, nss, iret)
- do j=1,nss
- call xdrfint_(ixdrf, ihpb(j), iret)
- call xdrfint_(ixdrf, jhpb(j), iret)
- enddo
- call xdrffloat_(ixdrf,real(eini),iret)
- call xdrffloat_(ixdrf,real(efree),iret)
- call xdrffloat_(ixdrf,real(rmsdev),iret)
- call xdrfint_(ixdrf,iscor,iret)
-#else
- call xdrf3dfcoord(ixdrf, xoord, itmp, prec, iret)
-
- call xdrfint(ixdrf, nss, iret)
- do j=1,nss
- call xdrfint(ixdrf, ihpb(j), iret)
- call xdrfint(ixdrf, jhpb(j), iret)
- enddo
- call xdrffloat(ixdrf,real(eini),iret)
- call xdrffloat(ixdrf,real(efree),iret)
- call xdrffloat(ixdrf,real(rmsdev),iret)
- call xdrfint(ixdrf,iscor,iret)
-#endif
-
- return
- end subroutine cxwrite
-!-------------------------------------------------------------------------------
-! slices.F
-!-------------------------------------------------------------------------------
- subroutine set_slices(is,ie,ts,te,iR,ib,iparm)
-! implicit none
-! include 'DIMENSIONS'
-! include 'DIMENSIONS.ZSCOPT'
-! include 'DIMENSIONS.FREE'
-! include 'COMMON.IOUNITS'
-! include 'COMMON.PROTFILES'
-! include 'COMMON.OBCINKA'
-! include 'COMMON.PROT'
- integer :: islice,iR,ib,iparm
- integer :: is(MaxSlice),ie(MaxSlice),nrec_slice
- real(kind=8) :: ts(MaxSlice),te(MaxSlice),time_slice
-
- do islice=1,nslice
- if (time_end_collect(iR,ib,iparm).ge.1.0d10) then
- ts(islice)=time_start_collect(iR,ib,iparm)
- te(islice)=time_end_collect(iR,ib,iparm)
- nrec_slice=(rec_end(iR,ib,iparm)- &
- rec_start(iR,ib,iparm)+1)/nslice
- is(islice)=rec_start(iR,ib,iparm)+(islice-1)*nrec_slice
- ie(islice)=rec_start(iR,ib,iparm)+islice*nrec_slice-1
- else
- time_slice=(time_end_collect(iR,ib,iparm) &
- -time_start_collect(iR,ib,iparm))/nslice
- ts(islice)=time_start_collect(iR,ib,iparm)+(islice-1)* &
- time_slice
- te(islice)=time_start_collect(iR,ib,iparm)+islice*time_slice
- is(islice)=rec_start(iR,ib,iparm)
- ie(islice)=rec_end(iR,ib,iparm)
- endif
- enddo
-
- write (iout,*) "nrec_slice",nrec_slice," time_slice",time_slice
- write (iout,*) "is",(is(islice),islice=1,nslice)
- write (iout,*) "ie",(ie(islice),islice=1,nslice)
- write (iout,*) "rec_start",&
- rec_start(iR,ib,iparm)," rec_end",rec_end(iR,ib,iparm)
- write (iout,*) "ts",(ts(islice),islice=1,nslice)
- write (iout,*) "te",(te(islice),islice=1,nslice)
- write (iout,*) "time_start",&
- time_start_collect(iR,ib,iparm)," time_end",&
- time_end_collect(iR,ib,iparm)
- call flush(iout)
-
- return
- end subroutine set_slices
-!-----------------------------------------------------------------------------
- integer function slice(irecord,time,is,ie,ts,te)
-! implicit none
-! include 'DIMENSIONS'
-! include 'DIMENSIONS.ZSCOPT'
-! include 'DIMENSIONS.FREE'
-! include 'COMMON.IOUNITS'
-! include 'COMMON.PROTFILES'
-! include 'COMMON.OBCINKA'
-! include 'COMMON.PROT'
- integer :: is(MaxSlice),ie(MaxSlice),nrec_slice
- real(kind=8) :: ts(MaxSlice),te(MaxSlice),time_slice
- integer :: i,ii,irecord
- real(kind=8) :: time
-
-! write (iout,*) "within slice nslice",nslice
-! call flush(iout)
- if (irecord.lt.is(1) .or. time.lt.ts(1)) then
- ii=0
- else
- ii=1
- do while (ii.le.nslice .and. &
- (irecord.lt.is(ii) .or. irecord.gt.ie(ii) .or. &
- time.lt.ts(ii) .or. time.gt.te(ii)) )
-! write (iout,*) "ii",ii,time,ts(ii)
-! call flush(iout)
- ii=ii+1
- enddo
- endif
-! write (iout,*) "end: ii",ii
-! call flush(iout)
- slice=ii
- return
- end function slice
-!-----------------------------------------------------------------------------
-! enecalc1.F
-!-----------------------------------------------------------------------------
- logical function conf_check(ii,iprint)
-
- use names, only:ntyp1
- use geometry_data
- use energy_data, only:itype,dsc
- use geometry, only:int_from_cart1
-! use
-! include "DIMENSIONS"
-! include "DIMENSIONS.ZSCOPT"
-! include "DIMENSIONS.FREE"
-!#ifdef MPI
-! use MPI_data
-! include "mpif.h"
-! include "COMMON.MPI"
-!#endif
-! include "COMMON.CHAIN"
-! include "COMMON.IOUNITS"
-! include "COMMON.PROTFILES"
-! include "COMMON.NAMES"
-! include "COMMON.VAR"
-! include "COMMON.SBRIDGE"
-! include "COMMON.GEO"
-! include "COMMON.FFIELD"
-! include "COMMON.ENEPS"
-! include "COMMON.LOCAL"
-! include "COMMON.WEIGHTS"
-! include "COMMON.INTERACT"
-! include "COMMON.FREE"
-! include "COMMON.ENERGIES"
-! include "COMMON.CONTROL"
-! include "COMMON.TORCNSTR"
-! implicit none
-#ifdef MPI
- include "mpif.h"
- integer :: IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
-#endif
- integer :: j,k,l,ii,itj,iprint
- if (.not. check_conf) then
- conf_check=.true.
- return
- endif
- call int_from_cart1(.false.)
- do j=nnt+1,nct
- if (itype(j-1).ne.ntyp1 .and. itype(j).ne.ntyp1 .and. &
- (vbld(j).lt.2.0d0 .or. vbld(j).gt.5.0d0)) then
- if (iprint.gt.0) &
- write (iout,*) "Bad CA-CA bond length",j," ",vbld(j),&
- " for conformation",ii
- if (iprint.gt.1) then
- write (iout,*) "The Cartesian geometry is:"
- write (iout,'(8f10.5)') ((c(l,k),l=1,3),k=1,nres)
- write (iout,'(8f10.5)') ((c(l,k+nres),l=1,3),k=nnt,nct)
- write (iout,*) "The internal geometry is:"
- write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
- write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
- write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
- write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
- write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
- write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
- endif
- if (iprint.gt.0) write (iout,*) &
- "This conformation WILL NOT be added to the database."
- conf_check=.false.
- return
- endif
- enddo
- do j=nnt,nct
- itj=itype(j)
- if (itype(j).ne.10 .and.itype(j).ne.ntyp1 .and. &
- (vbld(nres+j)-dsc(iabs(itj))).gt.2.0d0) then
- if (iprint.gt.0) &
- write (iout,*) "Bad CA-SC bond length",j," ",vbld(nres+j),&
- " for conformation",ii
- if (iprint.gt.1) then
- write (iout,*) "The Cartesian geometry is:"
- write (iout,'(8f10.5)') ((c(l,k),l=1,3),k=1,nres)
- write (iout,'(8f10.5)') ((c(l,k+nres),l=1,3),k=nnt,nct)
- write (iout,*) "The internal geometry is:"
- write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
- write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
- write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
- write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
- write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
- write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
- endif
- if (iprint.gt.0) write (iout,*) &
- "This conformation WILL NOT be added to the database."
- conf_check=.false.
- return
- endif
- enddo
- do j=3,nres
- if (theta(j).le.0.0d0) then
- if (iprint.gt.0) &
- write (iout,*) "Zero theta angle(s) in conformation",ii
- if (iprint.gt.1) then
- write (iout,*) "The Cartesian geometry is:"
- write (iout,'(8f10.5)') ((c(l,k),l=1,3),k=1,nres)
- write (iout,'(8f10.5)') ((c(l,k+nres),l=1,3),k=nnt,nct)
- write (iout,*) "The internal geometry is:"
- write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
- write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
- write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
- write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
- write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
- write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
- endif
- if (iprint.gt.0) write (iout,*) &
- "This conformation WILL NOT be added to the database."
- conf_check=.false.
- return
- endif
- if (theta(j).gt.179.97*deg2rad) theta(j)=179.97*deg2rad
- enddo
- conf_check=.true.
-! write (iout,*) "conf_check passed",ii
- return
- end function conf_check
-!-----------------------------------------------------------------------------
- end module io_database