+c-----------------------------------------
+ subroutine refresh_bank_master_tmscore(ifrom,econf,n)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.CSA'
+ include 'COMMON.BANK'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.CHAIN'
+ include 'COMMON.VAR'
+ include 'COMMON.CONTROL'
+ include 'COMMON.SETUP'
+ include 'mpif.h'
+ character chacc
+ integer iaccn
+ double precision l_diff(mxio),denep
+ integer info(12),idmin
+
+cd write(iout,*) 'refresh_bank_master_tmscore',ifrom
+cd flush(iout)
+
+ info(1)=0
+ info(2)=-2
+ call mpi_send(info,12,mpi_integer,ifrom,idint,CG_COMM,
+ * ierr)
+ call mpi_send(bvar,mxang*maxres*mxch*nbank,mpi_double_precision,
+ * ifrom,idreal,CG_COMM,ierr)
+ call mpi_recv(idmin,1,mpi_integer,
+ * ifrom,idint,CG_COMM,muster,ierr)
+ call mpi_recv(l_diff,nbank,mpi_double_precision,
+ * ifrom,idreal,CG_COMM,muster,ierr)
+
+ chacc=' '
+ iaccn=0
+ nstatnx(movernx(n),1)=nstatnx(movernx(n),1)+1
+
+ difmin=l_diff(idmin)
+ if(difmin.lt.cutdif) then
+c n is redundant to idmin
+ if(econf.lt.bene(idmin)) then
+ if(econf.lt.bene(idmin)-0.01d0) then
+ ibank(idmin)=0
+ jbank(idmin)=0
+ endif
+ denep=bene(idmin)-econf
+ call replace_bvar(idmin,n)
+crc Update dij
+ do i1=1,nbank
+ if (i1.ne.idmin) then
+ dij(i1,idmin)=l_diff(i1)
+ dij(idmin,i1)=l_diff(i1)
+ endif
+ enddo
+ chacc='c'
+ iaccn=idmin
+ nstatnx(movernx(n),2)=nstatnx(movernx(n),2)+1
+ if(idmin.eq.ibmax) call find_max
+ endif
+ else
+c got new conformation
+ del_ene=0.0d0
+ if(ebmax-ebmin.gt.del_ene) then
+ denep=ebmax-econf
+ call replace_bvar(ibmax,n)
+crc Update dij
+ do i1=1,nbank
+ if (i1.ne.ibmax) then
+ dij(i1,ibmax)=l_diff(i1)
+ dij(ibmax,i1)=l_diff(i1)
+ endif
+ enddo
+ chacc='f'
+ iaccn=ibmax
+ nstatnx(movernx(n),3)=nstatnx(movernx(n),3)+1
+ ibank(ibmax)=0
+ jbank(ibmax)=0
+ call find_max
+ else
+ call replace_bvar(ibmax,n)
+ ibank(ibmax)=0
+ jbank(ibmax)=0
+ call find_max
+ endif
+ endif
+cccccccccccccccccccccccccccccccccccccccccccc
+ if (iaccn.eq.0) then
+ if (iref.eq.0) then
+ write(iout,'(i3,a3,i4,i5,a6,1pe12.4,a4,i3,i4,3i5)')
+ & indb(n,2),' e ',indb(n,3),indb(n,1),' etot ',econf,' mv ',
+ & indb(n,5),indb(n,4),indb(n,7),indb(n,8),indb(n,9)
+ else
+ write(iout,'(i3,a3,i4,i5,a6,1pe12.4,a4,i3,i4,3i5
+ & ,a5,0pf4.1,a5,f3.0)')
+ & indb(n,2),' e ',indb(n,3),indb(n,1),' etot ',econf,' mv ',
+ & indb(n,5),indb(n,4),indb(n,7),indb(n,8),indb(n,9),
+ & ' rms ',rmsn(n),' %NC ',pncn(n)*100
+ endif
+ else
+ if (iref.eq.0) then
+ write(iout,'(i3,a3,i4,i5,a6,1pe12.4,a4,i3,i4,3i5,
+ & 1x,a1,i4,0pf8.2,0pf9.1)')
+ & indb(n,2),' e ',indb(n,3),indb(n,1),' etot ',econf,' mv ',
+ & indb(n,5),indb(n,4),indb(n,7),indb(n,8),indb(n,9),
+ & chacc,iaccn,difmin,denep
+ else
+ write(iout,'(i3,a3,i4,i5,a6,1pe12.4,a4,i3,i4,3i5,a5,
+ & 0pf4.1,a5,f3.0,1x,a1,i4,0pf8.2,0pf9.1)')
+ & indb(n,2),' e ',indb(n,3),indb(n,1),' etot ',econf,' mv ',
+ & indb(n,5),indb(n,4),indb(n,7),indb(n,8),indb(n,9),
+ & ' rms ',rmsn(n),' %NC ',pncn(n)*100,
+ & chacc,iaccn,difmin,denep
+ endif
+ endif
+
+ do i=1,nbank
+ jbank(i)=1
+ enddo
+
+ return
+ end
+c-----------------------------------------
+ subroutine refresh_bank_worker_tmscore(var)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.BANK'
+ include 'COMMON.VAR'
+ include 'COMMON.CHAIN'
+ include 'COMMON.SETUP'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.CSA'
+ include 'mpif.h'
+ integer muster(mpi_status_size)
+ double precision var(maxvar)
+ double precision dihang_l(mxang,maxres,mxch)
+ double precision l_diff(mxio)
+
+ call mpi_recv(bvar,mxang*maxres*mxch*nbank,mpi_double_precision,
+ * 0,idreal,CG_COMM,muster,ierr)
+
+ call var_to_geom(nvar,var)
+ do j=2,nres-1
+ dihang_l(1,j,1)=theta(j+1)
+ dihang_l(2,j,1)=phi(j+2)
+ dihang_l(3,j,1)=alph(j)
+ dihang_l(4,j,1)=omeg(j)
+ enddo
+
+ difmin=9.d9
+ do m=1,nbank
+ call get_diff12(dihang_l,bvar(1,1,1,m),l_diff(m))
+ if(l_diff(m).lt.difmin) then
+ difmin=l_diff(m)
+ idmin=m
+ endif
+ enddo
+
+ tm_score=.false.
+ call get_diff12(dihang_l,bvar(1,1,1,idmin),a_diff)
+ tm_score=.true.
+
+cd write(iout,*) idmin,l_diff(idmin),a_diff
+ call mpi_send(idmin,1,mpi_integer,0,idint,CG_COMM,
+ * ierr)
+ call mpi_send(l_diff,nbank,mpi_double_precision,
+ * 0,idreal,CG_COMM,ierr)
+
+ return
+ end
+c------------------------------------------------
+ subroutine print_mv_stat
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.BANK'
+ include 'COMMON.IOUNITS'
+
+ do i=0,mxmv
+ if(nstatnx(i,1).ne.0) then
+ if (i.le.9) then
+ write(iout,'(a4,i1,a7,i4,a7,i4,a5,i4,a5,f5.1)')
+ & '## N',i,' total=',nstatnx(i,1),
+ & ' close=',nstatnx(i,2),' far=',nstatnx(i,3),
+ & ' %acc',(nstatnx(i,2)+nstatnx(i,3))*100.0/nstatnx(i,1)
+ else
+ write(iout,'(a3,i2,a7,i4,a7,i4,a5,i4,a5,f5.1)')
+ & '##N',i,' total=',nstatnx(i,1),
+ & ' close=',nstatnx(i,2),' far=',nstatnx(i,3),
+ & ' %acc',(nstatnx(i,2)+nstatnx(i,3))*100.0/nstatnx(i,1)
+ endif
+ else
+ if (i.le.9) then
+ write(iout,'(a4,i1,a7,i4,a7,i4,a5,i4,a5,f5.1)')
+ & '## N',i,' total=',nstatnx(i,1),
+ & ' close=',nstatnx(i,2),' far=',nstatnx(i,3),
+ & ' %acc',0.0
+ else
+ write(iout,'(a3,i2,a7,i4,a7,i4,a5,i4,a5,f5.1)')
+ & '##N',i,' total=',nstatnx(i,1),
+ & ' close=',nstatnx(i,2),' far=',nstatnx(i,3),
+ & ' %acc',0.0
+ endif
+ endif
+ enddo
+ call flush(iout)
+ return
+ end
+#endif