--- /dev/null
+ subroutine read_coords(ncon,*)
+ implicit none
+ include "DIMENSIONS"
+ include "sizesclu.dat"
+#ifdef MPI
+ include "mpif.h"
+ integer IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
+ include "COMMON.MPI"
+#endif
+ include "COMMON.CONTROL"
+ include "COMMON.CHAIN"
+ include "COMMON.INTERACT"
+ include "COMMON.IOUNITS"
+ include "COMMON.VAR"
+ include "COMMON.SBRIDGE"
+ include "COMMON.GEO"
+ include "COMMON.CLUSTER"
+ character*3 liczba
+ integer ncon
+ integer i,j,jj,jjj,jj_old,icount,k,kk,l,ii,if,ib,
+ & nn,nn1,inan
+ integer ixdrf,iret,itmp
+ real*4 prec,reini,refree,rmsdev
+ integer nrec,nlines,iscor,lenrec,lenrec_in
+ double precision energ,t_acq,tcpu
+ integer ilen,iroof
+ external ilen,iroof
+ double precision rjunk
+ integer ntot_all(0:maxprocs-1)
+ logical lerr
+ double precision energia(0:max_ene),etot
+ real*4 csingle(3,maxres2+2)
+ integer Previous,Next
+ character*256 bprotfiles
+c print *,"Processor",me," calls read_protein_data"
+#ifdef MPI
+ if (me.eq.master) then
+ Previous=MPI_PROC_NULL
+ else
+ Previous=me-1
+ endif
+ if (me.eq.nprocs-1) then
+ Next=MPI_PROC_NULL
+ else
+ Next=me+1
+ endif
+c Set the scratchfile names
+ write (liczba,'(bz,i3.3)') me
+#endif
+c 1/27/05 AL Change stored coordinates to single precision and don't store
+c energy components in the binary databases.
+ lenrec=12*(nres+nct-nnt+1)+4*(2*nss+2)+16
+ lenrec_in=12*(nres+nct-nnt+1)+4*(2*nss+2)+24
+#ifdef DEBUG
+ write (iout,*) "nres",nres," nnt",nnt," nct",nct," nss", nss
+ write (iout,*) "lenrec_in",lenrec_in
+#endif
+ bprotfiles=scratchdir(:ilen(scratchdir))//
+ & "/"//prefix(:ilen(prefix))//liczba//".xbin"
+
+#ifdef CHUJ
+ ICON=1
+ 123 continue
+ if (from_cart .and. .not. from_bx .and. .not. from_cx) then
+ if (efree) then
+ read (intin,*,end=13,err=11) energy(icon),totfree(icon),
+ & rmstb(icon),
+ & nss_all(icon),(ihpb_all(ii,icon),jhpb_all(i,icon),
+ & i=1,nss_all(icon)),iscore(icon)
+ else
+ read (intin,*,end=13,err=11) energy(icon),rmstb(icon),
+ & nss_all(icon),(ihpb_all(ii,icon),jhpb_all(i,icon),
+ & i=1,nss_all(icon)),iscore(icon)
+ endif
+ read (intin,'(8f10.5)',end=13,err=10)
+ & ((allcart(j,i,icon),j=1,3),i=1,nres),
+ & ((allcart(j,i+nres,icon),j=1,3),i=nnt,nct)
+ print *,icon,energy(icon),nss_all(icon),rmstb(icon)
+ else
+ read(intin,'(a80)',end=13,err=12) lineh
+ read(lineh(:5),*,err=8) ic
+ if (efree) then
+ read(lineh(6:),*,err=8) energy(icon)
+ else
+ read(lineh(6:),*,err=8) energy(icon)
+ endif
+ goto 9
+ 8 ic=1
+ print *,'error, assuming e=1d10',lineh
+ energy(icon)=1d10
+ nss=0
+ 9 continue
+cold read(lineh(18:),*,end=13,err=11) nss_all(icon)
+ ii = index(lineh(15:)," ")+15
+ read(lineh(ii:),*,end=13,err=11) nss_all(icon)
+ IF (NSS_all(icon).LT.9) THEN
+ read (lineh(20:),*,end=102)
+ & (IHPB_all(I,icon),JHPB_all(I,icon),I=1,NSS_all(icon)),
+ & iscore(icon)
+ ELSE
+ read (lineh(20:),*,end=102)
+ & (IHPB_all(I,icon),JHPB_all(I,icon),I=1,8)
+ read (intin,*) (IHPB_all(I,icon),JHPB_all(I,icon),
+ & I=9,NSS_all(icon)),iscore(icon)
+ ENDIF
+
+ 102 continue
+
+ PRINT *,'IC:',IC,' ENERGY:',ENERGY(ICON)
+ call read_angles(intin,*13)
+ do i=1,nres
+ phiall(i,icon)=phi(i)
+ thetall(i,icon)=theta(i)
+ alphall(i,icon)=alph(i)
+ omall(i,icon)=omeg(i)
+ enddo
+ endif
+ ICON=ICON+1
+ GOTO 123
+C
+C CALCULATE DISTANCES
+C
+ 10 print *,'something wrong with angles'
+ goto 13
+ 11 print *,'something wrong with NSS',nss
+ goto 13
+ 12 print *,'something wrong with header'
+
+ 13 NCON=ICON-1
+
+#endif
+ call flush(iout)
+ jj_old=1
+ open (icbase,file=bprotfiles,status="unknown",
+ & form="unformatted",access="direct",recl=lenrec)
+c Read conformations from binary DA files (one per batch) and write them to
+c a binary DA scratchfile.
+ jj=0
+ jjj=0
+#ifdef MPI
+ write (liczba,'(bz,i3.3)') me
+ IF (ME.EQ.MASTER) THEN
+c Only the master reads the database; it'll send it to the other procs
+c through a ring.
+#endif
+ t_acq = tcpu()
+ icount=0
+
+ if (from_bx) then
+
+ open (intin,file=intinname,status="old",form="unformatted",
+ & access="direct",recl=lenrec_in)
+
+ else if (from_cx) then
+#if (defined(AIX) && !defined(JUBL))
+ call xdrfopen_(ixdrf,intinname, "r", iret)
+#else
+ call xdrfopen(ixdrf,intinname, "r", iret)
+#endif
+ prec=10000.0
+ write (iout,*) "xdrfopen: iret",iret
+ if (iret.eq.0) then
+ write (iout,*) "Error: coordinate file ",
+ & intinname(:ilen(intinname))," does not exist."
+ call flush(iout)
+#ifdef MPI
+ call MPI_ABORT(MPI_COMM_WORLD,IERROR,ERRCODE)
+#endif
+ stop
+ endif
+ else
+ write (iout,*) "Error: coordinate format not specified"
+ call flush(iout)
+#ifdef MPI
+ call MPI_ABORT(MPI_COMM_WORLD,IERROR,ERRCODE)
+#else
+ stop
+#endif
+ endif
+
+#define DEBUG
+#ifdef DEBUG
+ write (iout,*) "Opening file ",intinname(:ilen(intinname))
+ write (iout,*) "lenrec",lenrec_in
+ call flush(iout)
+#endif
+#undef DEBUG
+c write (iout,*) "maxconf",maxconf
+ i=0
+ do while (.true.)
+ i=i+1
+ if (i.gt.maxconf) then
+ write (iout,*) "Error: too many conformations ",
+ & "(",maxconf,") maximum."
+#ifdef MPI
+ call MPI_Abort(MPI_COMM_WORLD,errcode,ierror)
+#endif
+ stop
+ endif
+c write (iout,*) "i",i
+c call flush(iout)
+ if (from_bx) then
+ read(intin,err=101,end=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),
+ & energy(jj+1),
+ & entfac(jj+1),rmstb(jj+1),iscor
+ do j=1,2*nres
+ do k=1,3
+ c(k,j)=csingle(k,j)
+ enddo
+ enddo
+ else
+#if (defined(AIX) && !defined(JUBL))
+ call xdrf3dfcoord_(ixdrf, csingle, itmp, prec, iret)
+ if (iret.eq.0) goto 101
+ call xdrfint_(ixdrf, nss, iret)
+ if (iret.eq.0) goto 101
+ do j=1,nss
+ call xdrfint_(ixdrf, ihpb(j), iret)
+ if (iret.eq.0) goto 101
+ call xdrfint_(ixdrf, jhpb(j), iret)
+ if (iret.eq.0) goto 101
+ enddo
+ call xdrffloat_(ixdrf,reini,iret)
+ if (iret.eq.0) goto 101
+ call xdrffloat_(ixdrf,refree,iret)
+ if (iret.eq.0) goto 101
+ call xdrffloat_(ixdrf,rmsdev,iret)
+ if (iret.eq.0) goto 101
+ call xdrfint_(ixdrf,iscor,iret)
+ if (iret.eq.0) goto 101
+#else
+c write (iout,*) "calling xdrf3dfcoord"
+ call xdrf3dfcoord(ixdrf, csingle, itmp, prec, iret)
+c write (iout,*) "iret",iret
+c call flush(iout)
+ if (iret.eq.0) goto 101
+ call xdrfint(ixdrf, nss, iret)
+c write (iout,*) "iret",iret
+c write (iout,*) "nss",nss
+ call flush(iout)
+ if (iret.eq.0) goto 101
+ do k=1,nss
+ call xdrfint(ixdrf, ihpb(k), iret)
+ if (iret.eq.0) goto 101
+ call xdrfint(ixdrf, jhpb(k), iret)
+ if (iret.eq.0) goto 101
+ enddo
+ call xdrffloat(ixdrf,reini,iret)
+ if (iret.eq.0) goto 101
+ call xdrffloat(ixdrf,refree,iret)
+ if (iret.eq.0) goto 101
+ call xdrffloat(ixdrf,rmsdev,iret)
+ if (iret.eq.0) goto 101
+ call xdrfint(ixdrf,iscor,iret)
+ if (iret.eq.0) goto 101
+#endif
+ energy(jj+1)=reini
+ entfac(jj+1)=refree
+ rmstb(jj+1)=rmsdev
+ do k=1,nres
+ do l=1,3
+ c(l,k)=csingle(l,k)
+ enddo
+ enddo
+ do k=nnt,nct
+ do l=1,3
+ c(l,nres+k)=csingle(l,nres+k-nnt+1)
+ enddo
+ enddo
+ endif
+#ifdef DEBUG
+ write (iout,'(5hREAD ,i5,3f15.4,i10)')
+ & jj+1,energy(jj+1),entfac(jj+1),
+ & rmstb(jj+1),iscor
+ write (iout,*) "Conformation",jjj+1,jj+1
+ 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)
+ call flush(iout)
+#endif
+ call add_new_cconf(jjj,jj,jj_old,icount,Next)
+ enddo
+ 101 continue
+ write (iout,*) i-1," conformations read from DA file ",
+ & intinname(:ilen(intinname))
+ write (iout,*) jj," conformations read so far"
+ if (from_bx) then
+ close(intin)
+ else
+#if (defined(AIX) && !defined(JUBL))
+ call xdrfclose_(ixdrf, iret)
+#else
+ call xdrfclose(ixdrf, iret)
+#endif
+ endif
+#ifdef MPI
+#ifdef DEBUG
+ write (iout,*) "jj_old",jj_old," jj",jj
+#endif
+ call write_and_send_cconf(icount,jj_old,jj,Next)
+ call MPI_Send(0,1,MPI_INTEGER,Next,570,
+ & MPI_COMM_WORLD,IERROR)
+ jj_old=jj+1
+#else
+ call write_and_send_cconf(icount,jj_old,jj,Next)
+#endif
+ t_acq = tcpu() - t_acq
+#ifdef MPI
+ write (iout,*) "Processor",me,
+ & " time for conformation read/send",t_acq
+ ELSE
+c A worker gets the confs from the master and sends them to its neighbor
+ t_acq = tcpu()
+ call receive_and_pass_cconf(icount,jj_old,jj,
+ & Previous,Next)
+ t_acq = tcpu() - t_acq
+ ENDIF
+#endif
+ ncon=jj
+c close(icbase)
+ close(intin)
+
+ write(iout,*)"A total of",ncon," conformations read."
+
+#ifdef MPI
+c Check if everyone has the same number of conformations
+ call MPI_Allgather(ncon,1,MPI_INTEGER,
+ & ntot_all(0),1,MPI_INTEGER,MPI_Comm_World,IERROR)
+ lerr=.false.
+ do i=0,nprocs-1
+ if (i.ne.me) then
+ if (ncon.ne.ntot_all(i)) then
+ write (iout,*) "Number of conformations at processor",i,
+ & " differs from that at processor",me,
+ & ncon,ntot_all(i)
+ lerr = .true.
+ endif
+ endif
+ enddo
+ if (lerr) then
+ write (iout,*)
+ write (iout,*) "Number of conformations read by processors"
+ write (iout,*)
+ do i=0,nprocs-1
+ write (iout,'(8i10)') i,ntot_all(i)
+ enddo
+ write (iout,*) "Calculation terminated."
+ call flush(iout)
+ return1
+ endif
+ return
+#endif
+ 1111 write(iout,*) "Error opening coordinate file ",
+ & intinname(:ilen(intinname))
+ call flush(iout)
+ return1
+ end
+c------------------------------------------------------------------------------
+ subroutine add_new_cconf(jjj,jj,jj_old,icount,Next)
+ implicit none
+ include "DIMENSIONS"
+ include "sizesclu.dat"
+ include "COMMON.CLUSTER"
+ include "COMMON.CHAIN"
+ include "COMMON.INTERACT"
+ include "COMMON.LOCAL"
+ include "COMMON.IOUNITS"
+ include "COMMON.NAMES"
+ include "COMMON.VAR"
+ include "COMMON.SBRIDGE"
+ include "COMMON.GEO"
+ integer i,j,jj,jjj,jj_old,icount,k,kk,l,ii,ib
+ & nn,nn1,inan,Next,itj
+ double precision etot,energia(0:max_ene)
+ jjj=jjj+1
+ call int_from_cart1(.false.)
+ do j=nnt+1,nct
+ if (vbld(j).lt.2.0d0 .or. vbld(j).gt.5.0d0) then
+ write (iout,*) "Conformation",jjj,jj+1
+ write (iout,*) "Bad CA-CA bond length",j," ",vbld(j)
+ 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,*)
+ & "This conformation WILL NOT be added to the database."
+ return
+ endif
+ enddo
+ do j=nnt,nct
+ itj=itype(j)
+ if (itype(j).ne.10 .and. (vbld(nres+j)-dsc(itj)).gt.2.0d0) then
+ write (iout,*) "Conformation",jjj,jj+1
+ write (iout,*) "Bad CA-SC bond length",j," ",vbld(nres+j)
+ 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,*)
+ & "This conformation WILL NOT be added to the database."
+ return
+ endif
+ enddo
+ do j=3,nres
+ if (theta(j).le.0.0d0) then
+ write (iout,*)
+ & "Zero theta angle(s) in conformation",jjj,jj+1
+ 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,*)
+ & "This conformation WILL NOT be added to the database."
+ return
+ endif
+ if (theta(j).gt.179.97*deg2rad) theta(j)=179.97*deg2rad
+ enddo
+ jj=jj+1
+#ifdef DEBUG
+ write (iout,*) "Conformation",jjj,jj
+ 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,'(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)') (vbld(k+nres),k=nnt,nct)
+ 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,'(e15.5,16i5)') entfac(icount+1),
+ & iscore(icount+1,0)
+#endif
+ icount=icount+1
+ call store_cconf_from_file(jj,icount)
+ if (icount.eq.maxstr_proc) then
+#ifdef DEBUG
+ write (iout,* ) "jj_old",jj_old," jj",jj
+#endif
+ call write_and_send_cconf(icount,jj_old,jj,Next)
+ jj_old=jj+1
+ icount=0
+ endif
+ return
+ end
+c------------------------------------------------------------------------------
+ subroutine store_cconf_from_file(jj,icount)
+ implicit none
+ include "DIMENSIONS"
+ include "sizesclu.dat"
+ include "COMMON.CLUSTER"
+ include "COMMON.CHAIN"
+ include "COMMON.SBRIDGE"
+ include "COMMON.INTERACT"
+ include "COMMON.IOUNITS"
+ include "COMMON.VAR"
+ integer i,j,jj,icount
+c Store the conformation that has been read in
+ do i=1,2*nres
+ do j=1,3
+ allcart(j,i,icount)=c(j,i)
+ enddo
+ enddo
+ nss_all(icount)=nss
+ do i=1,nss
+ ihpb_all(i,icount)=ihpb(i)
+ jhpb_all(i,icount)=jhpb(i)
+ enddo
+ return
+ end
+c------------------------------------------------------------------------------
+ subroutine write_and_send_cconf(icount,jj_old,jj,Next)
+ implicit none
+ include "DIMENSIONS"
+ include "sizesclu.dat"
+#ifdef MPI
+ include "mpif.h"
+ integer IERROR
+ include "COMMON.MPI"
+#endif
+ include "COMMON.CHAIN"
+ include "COMMON.SBRIDGE"
+ include "COMMON.INTERACT"
+ include "COMMON.IOUNITS"
+ include "COMMON.CLUSTER"
+ include "COMMON.VAR"
+ integer icount,jj_old,jj,Next
+c Write the structures to a scratch file
+#ifdef MPI
+c Master sends the portion of conformations that have been read in to the neighbor
+#ifdef DEBUG
+ write (iout,*) "Processor",me," entered WRITE_AND_SEND_CONF"
+ call flush(iout)
+#endif
+ call MPI_Send(icount,1,MPI_INTEGER,Next,570,MPI_COMM_WORLD,IERROR)
+ call MPI_Send(nss_all(1),icount,MPI_INTEGER,
+ & Next,571,MPI_COMM_WORLD,IERROR)
+ call MPI_Send(ihpb_all(1,1),icount,MPI_INTEGER,
+ & Next,572,MPI_COMM_WORLD,IERROR)
+ call MPI_Send(jhpb_all(1,1),icount,MPI_INTEGER,
+ & Next,573,MPI_COMM_WORLD,IERROR)
+ call MPI_Send(rmstb(jj_old),icount,MPI_DOUBLE_PRECISION,
+ & Next,577,MPI_COMM_WORLD,IERROR)
+ call MPI_Send(entfac(jj_old),icount,MPI_DOUBLE_PRECISION,
+ & Next,579,MPI_COMM_WORLD,IERROR)
+ call MPI_Send(allcart(1,1,1),3*icount*maxres2,
+ & MPI_REAL,Next,580,MPI_COMM_WORLD,IERROR)
+#endif
+ call dawrite_ccoords(jj_old,jj,icbase)
+ return
+ end
+c------------------------------------------------------------------------------
+#ifdef MPI
+ subroutine receive_and_pass_cconf(icount,jj_old,jj,Previous,
+ & Next)
+ implicit none
+ include "DIMENSIONS"
+ include "sizesclu.dat"
+ include "mpif.h"
+ integer IERROR,STATUS(MPI_STATUS_SIZE)
+ include "COMMON.MPI"
+ include "COMMON.CHAIN"
+ include "COMMON.SBRIDGE"
+ include "COMMON.INTERACT"
+ include "COMMON.IOUNITS"
+ include "COMMON.VAR"
+ include "COMMON.GEO"
+ include "COMMON.CLUSTER"
+ integer i,j,k,icount,jj_old,jj,Previous,Next
+ icount=1
+#ifdef DEBUG
+ write (iout,*) "Processor",me," entered RECEIVE_AND_PASS_CONF"
+ call flush(iout)
+#endif
+ do while (icount.gt.0)
+ call MPI_Recv(icount,1,MPI_INTEGER,Previous,570,MPI_COMM_WORLD,
+ & STATUS,IERROR)
+ call MPI_Send(icount,1,MPI_INTEGER,Next,570,MPI_COMM_WORLD,
+ & IERROR)
+#ifdef DEBUG
+ write (iout,*) "Processor",me," icount",icount
+#endif
+ if (icount.eq.0) return
+ call MPI_Recv(nss_all(1),icount,MPI_INTEGER,
+ & Previous,571,MPI_COMM_WORLD,STATUS,IERROR)
+ call MPI_Send(nss_all(1),icount,MPI_INTEGER,
+ & Next,571,MPI_COMM_WORLD,IERROR)
+ call MPI_Recv(ihpb_all(1,1),icount,MPI_INTEGER,
+ & Previous,572,MPI_COMM_WORLD,STATUS,IERROR)
+ call MPI_Send(ihpb_all(1,1),icount,MPI_INTEGER,
+ & Next,572,MPI_COMM_WORLD,IERROR)
+ call MPI_Recv(jhpb_all(1,1),icount,MPI_INTEGER,
+ & Previous,573,MPI_COMM_WORLD,STATUS,IERROR)
+ call MPI_Send(jhpb_all(1,1),icount,MPI_INTEGER,
+ & Next,573,MPI_COMM_WORLD,IERROR)
+ call MPI_Recv(rmstb(jj_old),icount,MPI_DOUBLE_PRECISION,
+ & Previous,577,MPI_COMM_WORLD,STATUS,IERROR)
+ call MPI_Send(rmstb(jj_old),icount,MPI_DOUBLE_PRECISION,
+ & Next,577,MPI_COMM_WORLD,IERROR)
+ call MPI_Recv(entfac(jj_old),icount,MPI_DOUBLE_PRECISION,
+ & Previous,579,MPI_COMM_WORLD,STATUS,IERROR)
+ call MPI_Send(entfac(jj_old),icount,MPI_DOUBLE_PRECISION,
+ & Next,579,MPI_COMM_WORLD,IERROR)
+ call MPI_Recv(allcart(1,1,1),3*icount*maxres2,
+ & MPI_REAL,Previous,580,MPI_COMM_WORLD,STATUS,IERROR)
+ call MPI_Send(allcart(1,1,1),3*icount*maxres2,
+ & MPI_REAL,Next,580,MPI_COMM_WORLD,IERROR)
+ jj=jj_old+icount-1
+ call dawrite_ccoords(jj_old,jj,icbase)
+ jj_old=jj+1
+#ifdef DEBUG
+ write (iout,*) "Processor",me," received",icount," conformations"
+ do i=1,icount
+ write (iout,'(8f10.4)') (allcart(l,k,i),l=1,3,k=1,nres)
+ write (iout,'(8f10.4)')((allcart(l,k,i+nres),l=1,3,k=nnt,nct)
+ write (iout,'(e15.5,16i5)') entfac(i)
+ enddo
+#endif
+ enddo
+ return
+ end
+#endif
+c------------------------------------------------------------------------------
+ subroutine daread_ccoords(istart_conf,iend_conf)
+ implicit none
+ include "DIMENSIONS"
+ include "sizesclu.dat"
+#ifdef MPI
+ include "mpif.h"
+ include "COMMON.MPI"
+#endif
+ include "COMMON.CHAIN"
+ include "COMMON.CLUSTER"
+ include "COMMON.IOUNITS"
+ include "COMMON.INTERACT"
+ include "COMMON.VAR"
+ include "COMMON.SBRIDGE"
+ include "COMMON.GEO"
+ integer istart_conf,iend_conf
+ integer i,j,ij,ii,iii
+ integer len
+ character*16 form,acc
+ character*32 nam
+c
+c Read conformations off a DA scratchfile.
+c
+#ifdef DEBUG
+ write (iout,*) "DAREAD_COORDS"
+ write (iout,*) "istart_conf",istart_conf," iend_conf",iend_conf
+ inquire(unit=icbase,name=nam,recl=len,form=form,access=acc)
+ write (iout,*) "len=",len," form=",form," acc=",acc
+ write (iout,*) "nam=",nam
+ call flush(iout)
+#endif
+ do ii=istart_conf,iend_conf
+ ij = ii - istart_conf + 1
+ iii=list_conf(ii)
+#ifdef DEBUG
+ write (iout,*) "Reading binary file, record",iii," ii",ii
+ call flush(iout)
+#endif
+ read(icbase,rec=iii) ((allcart(j,i,ij),j=1,3),i=1,nres),
+ & ((allcart(j,i,ij),j=1,3),i=nnt+nres,nct+nres),
+ & nss_all(ij),(ihpb_all(i,ij),jhpb_all(i,ij),i=1,nss),
+ & entfac(ii),rmstb(ii)
+#ifdef DEBUG
+ write (iout,*) ii,iii,ij,entfac(ii)
+ write (iout,'(8f10.5)') ((allcart(j,i,ij),j=1,3),i=1,nres)
+ write (iout,'(8f10.4)') ((allcart(j,i,ij),j=1,3),
+ & i=nnt+nres,nct+nres)
+ write (iout,'(2e15.5)') entfac(ij)
+ write (iout,'(16i5)') nss_all(ij),(ihpb_all(i,ij),
+ & jhpb_all(i,ij),i=1,nss)
+ call flush(iout)
+#endif
+ enddo
+ return
+ end
+c------------------------------------------------------------------------------
+ subroutine dawrite_ccoords(istart_conf,iend_conf,unit_out)
+ implicit none
+ include "DIMENSIONS"
+ include "sizesclu.dat"
+#ifdef MPI
+ include "mpif.h"
+ include "COMMON.MPI"
+#endif
+ include "COMMON.CHAIN"
+ include "COMMON.INTERACT"
+ include "COMMON.IOUNITS"
+ include "COMMON.VAR"
+ include "COMMON.SBRIDGE"
+ include "COMMON.GEO"
+ include "COMMON.CLUSTER"
+ integer istart_conf,iend_conf
+ integer i,j,ii,ij,iii,unit_out
+ integer len
+ character*16 form,acc
+ character*32 nam
+c
+c Write conformations to a DA scratchfile.
+c
+#ifdef DEBUG
+ write (iout,*) "DAWRITE_COORDS"
+ write (iout,*) "istart_conf",istart_conf," iend_conf",iend_conf
+ write (iout,*) "lenrec",lenrec
+ inquire(unit=unit_out,name=nam,recl=len,form=form,access=acc)
+ write (iout,*) "len=",len," form=",form," acc=",acc
+ write (iout,*) "nam=",nam
+ call flush(iout)
+#endif
+ do ii=istart_conf,iend_conf
+ iii=list_conf(ii)
+ ij = ii - istart_conf + 1
+#ifdef DEBUG
+ write (iout,*) "Writing binary file, record",iii," ii",ii
+ call flush(iout)
+#endif
+ write(unit_out,rec=iii) ((allcart(j,i,ij),j=1,3),i=1,nres),
+ & ((allcart(j,i,ij),j=1,3),i=nnt+nres,nct+nres),
+ & nss_all(ij),(ihpb_all(i,ij),jhpb_all(i,ij),i=1,nss_all(ij)),
+ & entfac(ii),rmstb(ii)
+#ifdef DEBUG
+ write (iout,'(8f10.5)') ((allcart(j,i,ij),j=1,3),i=1,nres)
+ write (iout,'(8f10.4)') ((allcart(j,i,ij),j=1,3),i=nnt+nres,
+ & nct+nres)
+ write (iout,'(2e15.5)') entfac(ij)
+ write (iout,'(16i5)') nss_all(ij),(ihpb(i,ij),jhpb(i,ij),i=1,
+ & nss_all(ij))
+ call flush(iout)
+#endif
+ enddo
+ return
+ end