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

📄 order.f

📁 分子动力学模拟程序
💻 F
字号:
*  TRANAL v. > 3.1*  Subroutines to compute order parameter / dipole couplings**  Initialization**======================= ORDERIN =====================================*      subroutine ORDERIN      include "tranal.h"      open(unit=29,file=FORDIN,status='old',err=100)      STR=TAKESTR(29,IE)      read(STR,*)NEQH      if(NEQH.le.0)then        write(*,*)' Unacceptable number of CH bonds in order parameter',     &' computations: ',NEQH        stop      end if      if(NEQH.gt.NEQHM)then        write(*,*)' Increase NEQHM in dimpar_tr.h'        stop      end if      J=1 19   STR=TAKESTR(29,IE)        read(STR,*,end=20)NC(J),NH(J),IOR(J)        if(IOR(J).gt.0)then          if(J.eq.NEQH)then            write(*,*)' Warning: IOR changed to 0 for the last pair '             write(*,*)' in order parameters calculations'            IOR(J)=0            go to 15          end if          read(STR,*,end=20)NC(J),NH(J),IOR(J),ORF1(J),ORF2(J)          J=J+1          STR=TAKESTR(29,IE)          read(STR,*,err=20)NC(J),NH(J)          ORF1(J)=ORF1(J-1)          ORF2(J)=ORF2(J-1)          IOR(J)=0        else          ORF1(J)=0          ORF2(J)=0          IOR(J)=0        end if        J=J+1        if(J.le.NEQH)go to 19 15   write(*,*)' Order parameter will be calculated for:'      do J=1,NEQH        write(*,'(a4,a1,a4,a,i5,a,i5)')     +  NM(NC(J)),'-',NM(NH(J)),', or ',NC(J),' - ',NH(J)        if(IOR(J).eq.1)write(*,*)' in pair with '        CSHL(J)=0.              ! length        DCP(J)=0.               ! dipole coupling parameter	SORD(J)=0               ! order parameter       end do      STR=TAKESTR(29,IE)      read(STR,*)IOD      if(IOD.lt.0)IOD=0      if(IOD.gt.IODM)IOD=IODM      close(29)      if(IOD.gt.0)then        do J=1,NEQH          do I=1,IOD            ORDR(I,J)=0.          end do        end do      end if      return 100  write(*,*)' Input file ',FORDIN,' for order parameter ',     & 'calculations not found '      stop 20   write(*,*)' Input error in the order parameter file ',FORDIN      write(*,*)STR      stop      end**======================== ORDERP =====================================*      subroutine ORDERP      include "tranal.h"      J=0 5    J=J+1      if(J.gt.NEQH)return      ITYP=ITS(NC(J))      NML=NSPEC(ITYP)      if(IOR(J).eq.1)then* If we want to distinguish enantiomers (flag IOR=1)        J1=J+1        do N=1,NML	  IC = ISADDR(ITYP)+(N-1)*NSITS(ITYP)+NC(J)-ISADR(ITYP)	  IH = ISADDR(ITYP)+(N-1)*NSITS(ITYP)+NH(J)-ISADR(ITYP)          DX1 = SX(IH)-SX(IC)          DY1 = SY(IH)-SY(IC)          DZ1 = SZ(IH)-SZ(IC)          call PBC(DX1,DY1,DZ1)          RR1 = sqrt(DX1**2+DY1**2+DZ1**2)	  IC2 = ISADDR(ITYP)+(N-1)*NSITS(ITYP)+NC(J1)-ISADR(ITYP)	  IH2 = ISADDR(ITYP)+(N-1)*NSITS(ITYP)+NH(J1)-ISADR(ITYP)          DX2 = SX(IH2)-SX(IC2)          DY2 = SY(IH2)-SY(IC2)          DZ2 = SZ(IH2)-SZ(IC2)          call PBC(DX2,DY2,DZ2)          RR2 = sqrt(DX2**2+DY2**2+DZ2**2)          CORD1 = DZ1/RR1                  ! Cos(theta)          CORD2 = DZ2/RR2          ORD1 = 0.5*(3.*CORD1**2-1.)          ORD2 = 0.5*(3.*CORD2**2-1.)          DCP1 = ORD1/RR1**3          DCP2 = ORD2/RR2**3*  reference vector	  I3 = ISADDR(ITYP)+(N-1)*NSITS(ITYP)+ORF1(J)-ISADR(ITYP)	  I4 = ISADDR(ITYP)+(N-1)*NSITS(ITYP)+ORF2(J)-ISADR(ITYP)          DX3 = SX(I3)-SX(I4)          DY3 = SY(I3)-SY(I4)          DZ3 = SZ(I3)-SZ(I4)          call PBC(DX3,DY3,DZ3)          RR3 = sqrt(DX3**2+DY3**2+DZ3**2)*  Checking scalar product          SC1 = (DX1*DX3+DY1*DY3+DZ1*DZ3)/(RR1*RR3)          SC2 = (DX2*DX3+DY2*DY3+DZ2*DZ3)/(RR2*RR3)          if(SC1.le.SC2)then     ! the same order               CSHL(J)=CSHL(J)+RR1            SORD(J)=SORD(J)+ORD1            DCP(J)=DCP(J)+DCP1            CSHL(J1)=CSHL(J1)+RR2            SORD(J1)=SORD(J1)+ORD2            DCP(J1)=DCP(J1)+DCP2            if(IOD.gt.0)then              IN1=(CORD1+1.)*0.5*IOD+1              IN2=(CORD2+1.)*0.5*IOD+1              ORDR(IN1,J)=ORDR(IN1,J)+1.              ORDR(IN2,J1)=ORDR(IN2,J1)+1.            end if          else                   ! change order            CSHL(J)=CSHL(J)+RR2            SORD(J)=SORD(J)+ORD2            DCP(J)=DCP(J)+DCP2            CSHL(J1)=CSHL(J1)+RR1            SORD(J1)=SORD(J1)+ORD1            DCP(J1)=DCP(J1)+DCP1            if(IOD.gt.0)then              IN1=(CORD1+1.)*0.5*IOD+1              IN2=(CORD2+1.)*0.5*IOD+1              ORDR(IN1,J1)=ORDR(IN1,J1)+1.              ORDR(IN2,J)=ORDR(IN2,J)+1.            end if          end if        end do        J=J1      else        do N=1,NML	  IC = ISADDR(ITYP)+(N-1)*NSITS(ITYP)+NC(J)-ISADR(ITYP)	  IH = ISADDR(ITYP)+(N-1)*NSITS(ITYP)+NH(J)-ISADR(ITYP)          DX = SX(IH)-SX(IC)          DY = SY(IH)-SY(IC)          DZ = SZ(IH)-SZ(IC)          call PBC(DX,DY,DZ)          RR = sqrt(DX**2+DY**2+DZ**2)          CORD = DZ/RR                  ! Cos(theta)          ORD = 0.5*(3*CORD**2-1.)      ! NMR order parameter          CSHL(J)=CSHL(J)+RR            ! average bond length          SORD(J)=SORD(J)+ORD          DCP(J)= DCP(J)+ORD/RR**3       ! NMR dipole coupling          if(IOD.gt.0)then            IN1=(CORD+1.)*0.5*IOD+1            ORDR(IN1,J)=ORDR(IN1,J)+1.          end if        end do      end if      go to 5      end**======================= ORDEROUT ====================================*      subroutine ORDEROUT      include "tranal.h"      open(unit=26,file=FORD,status='unknown')      write(26,*)' Order parameter calculations'      write(26,*)'  Bond                 order       length ',     &'  DC(1/A**3)'      do J=1,NEQH        ITYP=ITS(NC(J))        NML=NSPEC(ITYP)        FAC=NDUP*1./(IAN*NML)        SO=SORD(J)*FAC        BL=CSHL(J)*FAC        DC=DCP(J)*FAC        write(26,'(a4,a1,a4,2i5,3f12.4)')     +  NM(NC(J)),'-',NM(NH(J)),NC(J),NH(J),SO,BL,DC      end do      if(IOD.le.0)return      write(26,*)      write(26,*)' Distribution of Cos(theta)          '      write(26,*)      do J=1,NEQH        ITYP=ITS(NC(J))        NML=NSPEC(ITYP)        FAC=NDUP*IOD*1./(IAN*NML)        write(26,*)        write(26,'(a,a4,a1,a4,2i5)')     &  ' vector ',NM(NC(J)),'-',NM(NH(J)),NC(J),NH(J)        do I=1,IOD          COT=-1.+(I-0.5)*2./IOD          write(26,'(2f12.5,5x,a4,a1,a4)')     &    COT,ORDR(I,J)*FAC,NM(NC(J)),':',NM(NH(J))        end do        write(26,*)'-------------------------------------------'      end do      end

⌨️ 快捷键说明

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