⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tranal.f

📁 分子动力学模拟程序
💻 F
📖 第 1 页 / 共 5 页
字号:
	     do ITYP=1,NTYPES	       if(LIST(ITYP).ne.0)NSAT=NSAT+NSITS(ITYP)*NSPEC(ITYP)	     end do	     write(19,*)NSAT	     write(19,*)' after ',FULTIM*1.d3,' fs'	     do I=1,NSTOT		ITYP=ITYPE(I)		IS=NSITE(I)		if(LIST(ITYP).ne.0)write(19,'(a2,3(1x,f9.4))')     +          NM(IS)(1:2),SX(I),SY(I),SZ(I)	     end do	  end if	  IAN=IAN+NDUP	  go to 35 40	  write(*,*)' input error in file ',filnam(IFL),' T=',FULTIM 45	  write(*,'(2a/a,f10.3,a,f12.0,i10,2i8)')     +' finish analys of file ',filnam(IFL),      +  ' final T = ',fultim,'      N conf.  ',COR2,NCOR,ITIR,NDP2	  close(12)	end do	write(*,*)' finish analys of the trajectory'      write(*,*)' total number of configurations ',IAN  *   Base pair RDF	if(LCOR3)then  	  NSS=NSPEC(ITS(IS1(1)))	  NPAIRS=NSS*NSPEC(ITS(IS2(1)))	  if(IS1(1).eq.IS2(1))NPAIRS=NSS*(NSS-1)	  SH12=4*PI*D12*(RB12**2+D12**2/12.d0)	  RDF2=COR2*VOL/(dfloat(IAN*NPAIRS)*SH12)	  write(*,'(a,f8.3,a,f9.5)')     +' 1-2 pair correlation at r=',RB12,' is ',RDF2	end if*   Final output	if(LCOR3)call MCOR3	if(LORIENT)call MORI	if(LDIFF)call MDIFF(fildif)	if(LRDF)call RDFOUT	if(LORD)call ORDEROUT	if(LTCF)then	  TRTEMP=TRTEMP/ICTCF	  call TCFOUT(filtcf)	end if	if(LRES)then	  call RESTIM(1)          open(unit=15,file=filres,status='unknown')	  write(15,*)'#  distribution over time residence '	  write(15,*)'#  sites ',IR1(1),' and ',IR2(1)	  write(15,*)'#  between ',RRN,' and ',RRX,' +/- ',RRD 	  write(15,*)'#  total ',ITIR2,' and ',ITIR,' events'	  write(15,*)'#  cases of longer T* time ',ITIR1	  write(15,*)'#  permission time T* = ',TTER*1.d12,' ps '	  write(15,*)'#  average number of hydrated pairs ',     +           IHP*1.*NDUP/IAN	  write(15,*)	  write(15,*)'#  av. residence time with T* ',     +          TIMRS2/ITIR2,' ps' 	  write(15,*)'#  simple average residence time',TIMRS/ITIR,' ps' 	  write(15,*)'#  exponent decay            ',     +  TIMRS1/ITIR1-TTER*1.d12,' ps'	  write(15,*)	  write(15,*)'#  time(ps)      hits1      P1     DECAY    ',     +  ' hits2      P2'	  DTIRS=ITIR2	  do I=1,NITT  	    PPP1=DIST2(I)/ITIR2	    DTIRS=DTIRS-DIST2(I)	    PFUN=DTIRS/ITIR2          	    TTT=I*TIMM/NITT                 	    PPP=DISTT(I)/ITIR          	    write(15,'(f12.3,2x,f6.0,2f13.8,2x,f6.0,f13.8)')     +    TTT,DIST2(I),PPP1,PFUN,DISTT(I),PPP	  end do	end if  	if(LANG)then	  open(unit=17,file=ftor,status='unknown')	  write(17,'(a)')'# distribution over torsion angles'	  write(17,'(a1,10x,50(a4,5x))')'#',     +(NM(NSITE(IT(IADT(I)+1))),I=1,NAG)	  write(17,'(a1,10x,50(a4,5x))')'#',     +(NM(NSITE(JT(IADT(I)+1))),I=1,NAG)	  write(17,'(a1,10x,50(a4,5x))')'#',     +(NM(NSITE(KT(IADT(I)+1))),I=1,NAG)	  write(17,'(a1,10x,50(a4,5x))')'#',     +(NM(NSITE(LT(IADT(I)+1))),I=1,NAG)	  do M=1,NAA	    ANG=-180+(M-0.5)*360/NAA 	    FACT=NAA*NDUP*1.d0/IAN	write(17,'(f7.1,50f9.4)')ANG,     + (NPOP(I,M)*FACT/MANGL(I),I=1,NAG)	  end do	  write(17,'(a,50f9.6)')'# Gaushe ',     +(IGS(I)*1./(IGS(I)+ITRAN(I)),I=1,NAG)	  write(17,'(a,50f9.6)')'# Trans  ',     +(ITRAN(I)*1./(IGS(I)+ITRAN(I)),I=1,NAG)	  close(17)	end if	if(LRMS)then	   write(*,*)' R M S = ',sqrt((RMSS*ISTEP)/(IAN*NDUP))	   write(24,'(a,f14.5)')'#    R M S = ',     +     sqrt((RMSS*ISTEP)/(IAN*NDUP))	end if	stop 197	write(*,*)' Input RDF file not found. File ',FIRDF	stop 198	write(*,*)' Xmol prototype file not found. File ',FXMOL	stop 199	write(*,*)' Torsion list not found. File ',FANGL	stop 921	write(*,*)' Error in renumeration array, file ',FFILTR	stop	end  *          *========================= COR3 ======================================*	subroutine COR3(IGR,ICL)	include 'tranal.h'*  calculation of 3-body correlations	IT1=ITS(IS1(IGR))     ! num of type	IT2=ITS(IS2(IGR))     	IT3=ITS(IS3(IGR))    	NBG1=ISADDR(IT1)+IS1(IGR)-ISADR(IT1)	NEN1=ISADDR(IT1+1)	NST1=NSITS(IT1) 	NBG2=ISADDR(IT2)+IS2(IGR)-ISADR(IT2)	NEN2=ISADDR(IT2+1)	NST2=NSITS(IT2) 	NBG3=ISADDR(IT3)+IS3(IGR)-ISADR(IT3)	NEN3=ISADDR(IT3+1)	NST3=NSITS(IT3)         NB12=(sqrt(RB12)-RMIN12)/DR12+1	do I=NBG1,NEN1,NST1	  do J=NBG2,NEN2,NST2	    DX12=SX(I)-SX(J)	    DY12=SY(I)-SY(J)	    DZ12=SZ(I)-SZ(J)	    call PBC(DX12,DY12,DZ12)	    R12S=DX12**2+DY12**2+DZ12**2   	    NR=NA*sqrt(R12S)/RDFCUT+1	    if(IPRINT.ge.7.and.R12S.lt.RMX12)     +write(*,*)I,J,sqrt(R12S),NR	    if(NR.le.NA)RDF(NR)=RDF(NR)+1.	    if(R12S.gt.RMN12.and.R12S.lt.RMX12)then*	write(*,'(6I4,3f12.3)')I,J,IT1,IT2,IS1(IGR),IS2(IGR),RMN12,R12S,RMX12	      R12=sqrt(R12S)	      COR2=COR2+1.d0                   	      do K=NBG3,NEN3,NST3	        if(I.ne.K.and.J.ne.K)then	          DX13=SX(I)-SX(K)	          DY13=SY(I)-SY(K)	          DZ13=SZ(I)-SZ(K)	          call PBC(DX13,DY13,DZ13)	          R13=DX13**2+DY13**2+DZ13**2		  SCP=(DX12*DX13+DY12*DY13+DZ12*DZ13)/R12		  X3=SCP-0.5d0*R12		  Y3=dsqrt(R13-SCP**2)		  IX3=(X3+RMAXX)/DXX		  IY3=Y3/DYY            * 	write(*,'(3I5,3f12.4,3I4)')I,J,K,R12,X3,Y3,IX3,IY3,NRX 		  if(ICL.eq.1)then	  	  if(IX3.le.NRX.and.IX3.gt.0.and.IY3.le.NRY)     +            P3COR(IX3,IY3)=P3COR(IX3,IY3)+1.d0		  else	  	  if(IX3.le.NRX.and.IX3.gt.0.and.IY3.le.NRY)     +            P3CO2(IX3,IY3)=P3CO2(IX3,IY3)+1.d0		  end if 	  	end if	      end do	    end if	  end do	end do	return	end**============================== ORIENT ==============================*	                                                               	subroutine ORIENT(IGR)	include 'tranal.h'	dimension RV(3),D1(3),D2(3),E0(3),EX(3),EY(3),EZ(3)	dimension FR(NS)	data INIT/0/	IZY=RZMAX/DDZ*  This is only for 2-strand-DNA  (1st and 2nd types) 	if(INIT.eq.0.and.IPROC.eq.4)then	   INIT=1	   NREF=0	   XR0=0.	   YR0=0.	   ZR0=0.	   do ITYP=1,2	     IBEG=ISADR(ITYP)+1	     IEND=ISADR(ITYP+1)C   reference coordinates	     do IS=IBEG,IEND	       NREF=NREF+1	       XR0=XR0+R(IS,1)	       YR0=YR0+R(IS,2)	       ZR0=ZR0+R(IS,3)	     end do	   end do	   XR0=XR0/NREF	   YR0=YR0/NREF	   ZR0=ZR0/NREF	   do ITYP=1,2	     IBEG=ISADR(ITYP)+1	     IEND=ISADR(ITYP+1)	     do IS=IBEG,IEND	       XLOC=R(IS,1)-XR0	       YLOC=R(IS,2)-YR0	       RLOC=sqrt(XLOC**2+YLOC**2)*  define angle between -180 and 180	       FREF=acos(XLOC/RLOC)	       if(YLOC.lt.0.)FREF=-FREF	       FR(IS)=FREF	     end do 	   end do	   write(*,*)' ref. shift ',XR0,YR0,ZR0	end if*  Always:	do IGR=1,NDUP   ! equivalent atoms "to"	do II=1,NOI   ! equivalent atom groups "from"	  if(IPROC.ge.5)then	    ITL1=ITS(IO1(II))	    ITL2=ITS(IO2(II))	    ITL3=ITS(IO3(II))	    do IML1=1,NSPEC(ITL1)  	      ISHFT1=ISADDR(ITL1)+(IML1-1)*NSITS(ITL1)-ISADR(ITL1)	      I=ISHFT1+IO1(II)	      do IML2=1,NSPEC(ITL2)  	        ISHFT2=ISADDR(ITL2)+(IML2-1)*NSITS(ITL2)-ISADR(ITL2)	        I1=ISHFT2+IO2(II)		D1(1)=SX(I1)-SX(I)		D1(2)=SY(I1)-SY(I)		D1(3)=SZ(I1)-SZ(I)		call PBC(D1(1),D1(2),D1(3))		RR=sqrt(D1(1)**2+D1(2)**2+D1(3)**2)		if(RR.le.RB12+D12.and.RR.ge.RB12-D12)then 		   if(IPRINT.ge.7)write(*,*)'find ',IML1,IML2,' at ',RR		do IML3=1,NSPEC(ITL3)  	          ISHFT3=ISADDR(ITL3)+(IML3-1)*NSITS(ITL3)-ISADR(ITL3)	          I2=ISHFT3+IO3(II)                  D2(1)=SX(I2)-SX(I)                  D2(2)=SY(I2)-SY(I)                  D2(3)=SZ(I2)-SZ(I)	          call PBC(D2(1),D2(2),D2(3))	  	  RR=sqrt(D2(1)**2+D2(2)**2+D2(3)**2)		  if(RR.le.RB13+D13.and.RR.ge.RB13-D13)then 		    XX=SX(I1)-SX(I2)		    YY=SY(I1)-SY(I2)		    ZZ=SZ(I1)-SZ(I2)		    call PBC(XX,YY,ZZ)		    RR=sqrt(XX**2+YY**2+ZZ**2)		    if(RR.le.RB23+D23.and.RR.ge.RB23-D23)then*  here we have selected all three atoms satisfying conditions *  COM of mobil coord.syst.	  E0(1)=SX(I)	  E0(2)=SY(I)	  E0(3)=SZ(I)	  if(IPRINT.ge.6)write(*,*)I,I1,I2,' ',NM(IO1(II)),     +  NM(IO2(II)),NM(IO3(II)) 	  call VECT(D1,D2,RV) ! normal v. to 123 plane  (Z axis)	  call NORM(RV,EZ,RN,3)	  RV(1)=D1(1)+D2(1)                 ! mediana of 213 angle  ( X axis)	  RV(2)=D1(2)+D2(2)	  RV(3)=D1(3)+D2(3)	  call NORM(RV,EX,RN2,3)            !  X axis	  call VECT(EZ,EX,EY)               !  Y axis	  IML=IML1 	  if(IPROC.eq.5)call MEANSTR(II,IML,E0,EX,EY,EZ,IML2,IML3) 	  JTYP=ITS(ISOR(IGR))	  NBG=ISADDR(JTYP)+ISOR(IGR)-ISADR(JTYP)	  NEN=ISADDR(JTYP+1)	  NST=NSITS(JTYP)	  do J=NBG,NEN,NST        ! over molecules with given site*	    if(J.eq.ISHFT1+IO1(II).or.J.eq.ISHFT2+IO2(II).or.*     +   ISHFT3+J.eq.IO3(II))go to 320	    if(ISELF.eq.0.and.(NNUM(I1).eq.NNUM(J).or.NNUM(I2).eq.NNUM(J)     + .or.NNUM(I).eq.NNUM(J)))go to 320*	    if(J.eq.ISHFT1+IO1(II))go to 320	    DX=SX(J)-E0(1)	    DY=SY(J)-E0(2)	    DZ=SZ(J)-E0(3)	    call PBC(DX,DY,DZ)	    RR2=DX**2+DY**2+DZ**2            NCOR=NCOR+1*   Calculating 3D distribution	    if(RR2.lt.ROMAX2)then	      RR=sqrt(RR2)              XM=EX(1)*DX+EX(2)*DY+EX(3)*DZ       ! X-coord in molec.c.s.               YM=EY(1)*DX+EY(2)*DY+EY(3)*DZ       ! Y-coord in molec.c.s.               ZM=EZ(1)*DX+EZ(2)*DY+EZ(3)*DZ       ! Z-coord in molec.c.s.*  calculate 3D density 	      NXM=(XM+RXMAX)/DDX	      NYM=(YM+RYMAX)/DDY	      NZM=(ZM+RZMAX)/DDZ	      if(IPROC.eq.5)then	        if(NXM.ge.0.and.NXM.le.NOMX.and.NYM.ge.0.     + and.NYM.le.NOMY.and.NZM.ge.0.and.NZM.le.NOMZ)then     	         ID3(NXM,NYM,NZM)=ID3(NXM,NYM,NZM)+1		 ICNT3=ICNT3+1		 if(IPRINT.ge.8)write(*,*)I,J,NXM,NYM,NZM,XM,YM,ZM		end if	      else if(IPROC.eq.6.and.abs(abs(ZM)-ZB).le.DZB)then  * case of Z=ZB plane            	        NXM=(XM+RXMAX)/DDX	        NYM=(YM+RYMAX)/DDY		if(IPRINT.ge.7)write(*,*)I,J,NXM,NYM,NZM,XM,YM,ZM	if(NXM.ge.0.and.NXM.le.NOMX.and.NYM.ge.0.and.NYM.le.NOMY)then	   	  NCOR=NCOR+1     		  POR(NXM,NYM)=POR(NXM,NYM)+1.		end if	      end if	      if(IPROC.eq.7.and.abs(YM-ZB).le.DZB)then   ! Y=ZB plane         	        NXM=(XM+RXMAX)/DDX	        NYM=(YM+RYMAX)/DDY		if(IPRINT.ge.7)write(*,*)I,J,NXM,NYM,NZM,XM,YM,ZM	if(NXM.ge.0.and.NXM.le.NOMX.and.NYM.ge.0.and.NYM.le.NOMY)then	   	  NCOR=NCOR+1     		  POR(NXM,NYM)=POR(NXM,NYM)+1.		end if	      end if	      if(IPROC.eq.8.and.abs(XM-ZB).le.DZB)then    ! X=ZB plane        	        NXM=(XM+RXMAX)/DDX	        NYM=(YM+RYMAX)/DDY	if(NXM.ge.0.and.NXM.le.NOMX.and.NYM.ge.0.and.NYM.le.NOMY)then	   	  NCOR=NCOR+1     		  POR(NXM,NYM)=POR(NXM,NYM)+1.		end if	      end if    ! IPROC.eq.3	    end if ! of (RR2.lt. 320	    continue	  end do    ! of J=NBG...C----------------> ending IPROC>=5	              end if ! RR.le.RB23	            end if ! RR.le.RB13	          end do  !  IML3=		end if  ! RR.le.RB12	      end do   ! IML2=            end do ! IML1=	  else      !  IPROC.ne.5	  ITL=ITS(IO1(II))    ! type of "from" molecule	  do IML=1,NSPEC(ITL)  ! cycle over "from" molecules	  if(IPROC.eq.-1)then*   This is only for DNA analysis	     if(IO2(II).eq.0)go to 30	     I1=IO1(II)	     if(II.lt.10) then 	       I2=IO1(II+1)	       I3=IO1(II+10)	       I4=IO1(II+11)	     else if(II.eq.10)then		I2=IO1(1)		I3=IO1(20)		I4=IO1(11)	     else if(II.eq.11)then		I2=IO1(20)		I3=IO1(1)		I4=IO1(10)	     else		I2=IO1(II-1)		I3=IO1(II-10)		I4=IO1(II-11)	     end if*   (0,0,0) point	     E0(1)=0.25*(SX(I1)+SX(I2)+SX(I3)+SX(I4))	     E0(2)=0.25*(SY(I1)+SY(I2)+SY(I3)+SY(I4))	     E0(3)=0.25*(SZ(I1)+SZ(I2)+SZ(I3)+SZ(I4))*   local coordinate system             D1(1)=SX(I1)-SX(I3)             D1(2)=SY(I1)-SY(I3)             D1(3)=SZ(I1)-SZ(I3)             D2(1)=SX(I2)-SX(I4)             D2(2)=SY(I2)-SY(I4)             D2(3)=SZ(I2)-SZ(I4)	     if(D1(3).gt. HBOZL)D1(3)=D1(3)-BOZL	     if(D1(3).lt.-HBOZL)D1(3)=D1(3)+BOZL	     if(D2(3).gt. HBOZL)D2(3)=D2(3)-BOZL	     if(D2(3).lt.-HBOZL)D2(3)=D2(3)+BOZL	     if(IPRINT.gt.6)write(*,*)' base ',I1,I2,I3,I4*   Other cases:	  else if(IPROC.ge.0.and.IPROC.le.3)then*   3 atom difining local coord.syst.   IPROC >= 0	     ISHIFT=ISADDR(ITL)+(IML-1)*NSITS(ITL)-ISADR(ITL)	     I=ISHIFT+IO1(II)	     I1=ISHIFT+IO2(II)	     I2=ISHIFT+IO3(II)             D1(1)=SX(I1)-SX(I)             D1(2)=SY(I1)-SY(I)             D1(3)=SZ(I1)-SZ(I)             D2(1)=SX(I2)-SX(I)             D2(2)=SY(I2)-SY(I)             D2(3)=SZ(I2)-SZ(I)	     E0(1)=SX(I)	     E0(2)=SY(I)	     E0(3)=SZ(I)	     call PBC(D1(1),D1(2),D1(3))	     call PBC(D2(1),D2(2),D2(3))	     if(IPRINT.ge.7)write(*,*)I,I1,I2,' ',NM(IO1(II)),     +  NM(IO2(II)),NM(IO3(II))C   specially for DNA - RMC calc.  DNA should be types 1,2	  else if(IPROC.eq.4)thenC   calculating shift	     XSA=0. 	     YSA=0.	     ZSA=0.	     do ITYP=1,2	       IBEG=ISADR(ITYP)+1	       IEND=ISADR(ITYP+1)	       do IS=IBEG,IEND	         XSA=XSA+SX(IS)		 YSA=YSA+SY(IS)		 ZSA=ZSA+SZ(IS)	       end do	     end do	     XSA=XSA/NREF	     YSA=YSA/NREF	     ZSA=ZSA/NREF	     E0(1)=XSA-XR0	     E0(2)=YSA-YR0	     E0(3)=ZSA-ZR0C   calculating turn around Z axis	     FSH=0.	     do ITYP=1,2	       IBEG=ISADR(ITYP)+1	       IEND=ISADR(ITYP+1)	       do IS=IBEG,IEND		 XREA=SX(IS)-XSA		 YREA=SY(IS)-YSA		 RREA=sqrt(XREA**2+YREA**2)		 FREA=acos(XREA/RREA)		 if(YREA.lt.0.)FREA=-FREA		 FROT=FREA-FR(IS)		 if(FROT.gt.PI/2.)FROT=FROT-PI		 if(FROT.lt.-PI/2.)FROT=FROT+PI		 FSH=FSH+FROT	       end do	     end do	     FSH=FSH/NREF	     if(IPRINT.ge.6)write(*,*)XSA,YSA,ZSA,FSH*TODGR*  define vectors	     EX(1)=cos(FSH)	     EX(2)=sin(FSH)	     EX(3)=0.	     EY(1)=-sin(FSH)	     EY(2)=cos(FSH)	     EZ(3)=0.	     EZ(1)=0.	     EZ(2)=0.	     EZ(3)=1.	     go to 123	  else	     write(*,*)' wrong value of IPROC ',IPROC	     stop	  end if	  call VECT(D1,D2,RV) ! normal v. to 123 plane  (Z axis)	  call NORM(RV,EZ,RN,3)	  RV(1)=D1(1)+D2(1)                 ! mediana of 213 angle  ( X axis)	  RV(2)=D1(2)+D2(2)	  RV(3)=D1(3)+D2(3)	  call NORM(RV,EX,RN2,3)            !  X axis	  call VECT(EZ,EX,EY)               !  Y axis

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -