rename
[unres4.git] / source / wham / io_database.f90
diff --git a/source/wham/io_database.f90 b/source/wham/io_database.f90
deleted file mode 100644 (file)
index 13d4f37..0000000
+++ /dev/null
@@ -1,1488 +0,0 @@
-      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