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

📄 mdee.f

📁 分子动力学模拟程序
💻 F
📖 第 1 页 / 共 2 页
字号:
      PROGRAM MDEE*      include "mdee.h"*-----------------------------------------------      DIMENSION  QP(4)      character*4 CDUM*      NAMELIST /INPUT/ NTYPES,NSPEC,NSITS,FNAME,TPRES     X         ,TRTEMP,RHO,DT,RCUT,TDELT,FTSCL,QT,QPR     X         ,BOXL,BOYL,BOZL,BDTOL,TOLER,C14LJ,C14EL     X         ,NSTEPS,NFREQ,IPOT,NAVER,IPRINT,NAMOL     X         ,NDUMP,IAVER,ICHECK,IHIST,ALPHA,FEXP     X         ,LRST,LDMP,LSCLT,LSCFT,LNVT,LNPT,LCHECK,L14NB     X         ,L0AVS,L0VS,LSHEJK,LCHP,LCHT,LXMOL,LECH,L15NB     X         ,SHORT,ICHNB,LGR,LGDMP,LGRST,ALLSTS,RDFCUT,PATHDB     X         ,LCFDMP,LCFRST,NSTEG,JUMP,N1,N2,MAX     +         ,ME0,NE,IEE,NCEE,PLOW,LSEP,LSCTD*        character*20 FNM, FINP*24,PATHDB*64,DATE*8      character*128 TAKESTR,AUX      data ODIN/1.d0/      label = "MDEE_v4.4   "	DATE  = '30.11.05'      PRINT *,'*** MOLECULAR DYNAMICS',     X' PROGRAM FOR MIXTURES OF RIGID or FLEXIBLE MOLECULES'      PRINT *,'*** ',     X '         with removing/inserting of molecules '	write(*,*)'     (expanded ensemble method)'      PRINT *	write(*,*)'Version ',label,'           from ',DATE	write(*,*)	time0	= cputime(0.d0)**     Default parameters**Physical parameters (default) for a many-particle system:*      RHO        = 1.00              ! density   (if BOXL=0)      TRTEMP     = 300.0             ! temperature      TPRES      = 1.                ! pressure (atm)      NOP        = NPART             ! number of particles      NFREQ      = 10                ! num. of short time steps in DT      NAVER      = 100               ! num. of steps for averaging       DT         = 1.D-15            ! time step      RCUT       = 10.D0             ! cut-off      TDELT      = 50.D0             ! ??      RDFCUT     = 10.D0             ! cut off for RDF        ALPHA	= 2.5                  ! Ewald: erfc(alpha)=0      FEXP	= 8.                   !        exp(-fexp)=0      NUMTASK=1      TASKID=0      LHEX=.false.      LOCT=.false.      FTSCL      = 0.001                ! cutoff large forces       QT	 = 10.D0      QPR	 = 300.d0      JUMP       = 1      BOXL       = 0.D0      BOYL       = 0.D0      BOZL       = 0.D0      SHORT	= 5.                   ! R for closest neigbours         TOLER      = 1.D-4      BDTOL      = 1.D-4 	MAX	= MAXS      ICHECK	= 1      LMNBL=.false.	IHIST	= 1	ICHNB	= 10    ! cheking neigbours   list	NCEE	= 1     ! num. of steps followed by change of subensemble**Some control parameters*      FNAME	 = "md"      LCHECK     = .FALSE.              ! true - ony input checking      LNVT       = .FALSE.      LNPT       = .FALSE.      LSCLT      = .FALSE.      LSCFT      = .FALSE.      L0AVS      = .FALSE.      L0VS       = .FALSE.      LRST       = .FALSE.      LDMP       = .FALSE.      LCHL       = .FALSE.      LCHP       = .FALSE.      LCHT       = .FALSE.      LECH	= .false.      LSEP      = .false.      LSCTD=.false.      MSTEP      =  0*           DO I       = 1,NTPS        ISHEJK(I)  = 1        NRB(I)     = 0        C14LJ(I)   = 1.D0        C14EL(I)   = 1.D0        L14NB(I)=.true.        L15NB(I)=.true.        LMOVE(I)=.true.      END DO**Read in new values*      READ(*,INPUT)      if(.not.LRST)then	  L0AVS=.true.	  ME=ME0      end if      do IE=1,NE	read(*,*)EC(IE),EE(IE) 	if(IPRINT.ge.7)write(*,*)EC(IE),EE(IE)*  some historical reasons...        EE(IE)=-EE(IE)      end do          if(LCHECK)L0AVS=.false.      if(MAX.gt.MAXS)stop "increase MAXS"      FTSCL=1.d0/FTSCL**   file names*      IC=1      do I=1,20        if(FNAME(I:I).ne.' ')IC=I      end do      IC1=IC+1      IC2=IC+4	ICFN=IC+2      FNM='                    '	write(FDUMP,'(24(1h  ))')	write(FLST,'(24(1h  ))')	write(FRDF,'(24(1h  ))')	write(FTRK,'(24(1h  ))')      write(FBIO,'(24(1h  ))')      write(FINP,'(24(1h  ))')      FNM(1:IC)=FNAME(1:IC)      FDUMP(1:IC)=FNM      FDUMP(IC1:IC2)='.dmp'      FLST(1:IC)=FNM      FLST(IC1:IC2)='.lst'      FRDF(1:IC)=FNM      FRDF(IC1:IC2)='.rdf'      FBIO(1:IC)=FNM      FBIO(IC1:IC2+1)='.xmol'      FINP(1:IC)=FNM      FINP(IC1:IC2)='.inp'	CLN=BOXL**---------------- DEFINE MOLECULE TYPES -------------------------------*      SUMM         = 0.D0      NRBB         = 0      NRAA         = 0      NRTT         = 0      NRII         = 0      NX           = 0      IADB(1)      = 1      IADA(1)      = 1      IADT(1)      = 1      TOTMAS       = 0.D0	NEFAC=0**  Input of molecules from data base        NTYP=0*     	do ITYP=1,NTYPES        CALL READMOL (SUMM,NRBB,NRAA,NRTT,NRII,NX,NTYP,PATHDB,     +  NAMOL(ITYP))        TOTMAS       = TOTMAS+SUMM*NSPEC(ITYP)        SUMMAS(NTYP) = SUMM	  NAME(ITYP)=NAMOL(ITYP)(1:6)        if(IEE(ITYP).eq.0)NEFAC=NEFAC+NSPEC(ITYP)      end do*           IF(NX  .GT.NS  ) STOP '!!! INCREASE NS   !'      IF(NTYPES.GT.NTPS) STOP '!!! INCREASE NTPS !'      IF(NRBB.GT.NB  ) STOP '!!! INCREASE NB   !'      IF(NRAA.GT.NA  ) STOP '!!! INCREASE NA   !'      IF(NRTT.GT.NT  ) STOP '!!! INCREASE NT   !'      IF(NRII.GT.NI  ) STOP '!!! INCREASE NI   !'      IF(TOTMAS.EQ.0 ) STOP '!!! NO PARTICLES WITH MASSES DEFINED !'*      IF(LSHEJK) THEN      NFREQ = 1      PRINT "(/'*** CONSTRAINED DYNAMICS WILL BE USED! ***'/)"      END IF	NRBT=0.	do ITYP=1,NTYPES	  NRBT=NRBT+NRB(ITYP)*NSPEC(ITYP)	end do*      NOP     = 0      NSITES  = 0      NSTOT   = 0      IATOM=0      IMOL=0      FNSTR	= 0.      IST=0      TOTCH=0.      if(IPRINT.ge.9)then	  write(*,*)	  write(*,*)' Check references:'	  write(*,*)' Iatom    Imol    Isit   Ityp     Name      Nb  '	end if	DO ITYP = 1,NTYPES          NOP     = NOP    + NSPEC(ITYP)          if(NOP.gt.NPART)stop '!!! Increase NPART in mdee.h'          NSITES  = NSITES + NSITS(ITYP)          IF(NSITES.GT.NS   ) STOP '!!! INCREASE NS    !'          if(NSITS(ITYP).eq.2)FNSTR=FNSTR+2.d0*NSPEC(ITYP)          if(NSITS(ITYP).ge.3)FNSTR=FNSTR+3.d0*NSPEC(ITYP)          NSTOT   = NSTOT  + NSPEC(ITYP)*NSITS(ITYP)          IF(NSTOT .GT.NTOT ) STOP '!!! INCREASE NTOT  !'          FNSS3   = 3.D0*DFLOAT(NSITES)          IF(NSPEC(ITYP).LE.0) STOP '!!! CHECK NSPEC !!!'                 TFACT(ITYP) = 1.D0          IF(LSHEJK) TFACT(ITYP) = FNSS3/(FNSS3-NRB(ITYP))          NRTSC(ITYP) = 0          write(*,'(a6,i4,a3,a6,3x,a5,i5,4x,a6,i4)')     +' type ',ITYP,' - ',NAME(ITYP),' Nmol',NSPEC(ITYP),     +'Nsites',NSITS(ITYP)	  do IS=1,NSPEC(ITYP)	    IMOL=IMOL+1            ITM(IMOL)=ITYP            do I=1,NSITS(ITYP)	      ISITE=IST+I	      IATOM=IATOM+1	      NNUM(IATOM)=IMOL              ITS(ISITE)=ITYP	      NSITE(IATOM)=ISITE	      ITYPE(IATOM)=ITYP	      TOTCH	= TOTCH+CHARGE(ISITE)	      if(IPRINT.ge.9)write(*,'(4I6,2x,2a4,a6,2x,I5)')     +      IATOM,IMOL,ISITE,ITYP,NM(ISITE),' on ',NAME(ITYP),NRB(ITYP)	    end do	  end do	  IST=IST+NSITS(ITYP)      END DO! OF ITYP      write(*,*)      write(*,'(a,f8.3)')'*** Total charge            Q =  ',TOTCH      IF(NOP.EQ.1) RHO = 0.D0*      PRINT "(/'*** NR OF SITES/MOL (NSITES)  ',I6)" ,NSITES      PRINT "( '*** NR OF SITES/TOT (NSTOT)   ',I6)" ,NSTOT      PRINT "( '*** NR OF PARTICLES (NOP)     ',I6)",NOP	PRINT "( '*** NR OF BONDS (NRBT)        ',I6)",NRBT***  FNST - number of degrees of freedom *  Obs!  total momenta is fixed!       FNST        = 3.d0*DFLOAT(NSTOT)-3.d0      if(LSHEJK)FNST=FNST-NRBT	FTIMES      = 1.D0/DFLOAT(NFREQ)       FNOP        = DFLOAT(NOP)      FNSTI	= FNST-3.d0*FNOP-FNSTR+3.d0      write(*,'(a,f6.0)')'*** NR of DEGREES of FREEDOM ',FNST      write(*,'(a,f6.0)')'***              rotational: ',FNSTR      write(*,'(a,f6.0)')'***              internal:   ',FNSTI*     	write(*,*)      CALL IUNITS      CALL ELRCLJ	write(*,*)**  concentrations in M/l*     	write(*,'(a)')'   Concentrations of different molecules:'	do ITYP=1,NTYPES	  CONC=NSPEC(ITYP)/(AVSNO*1.d-27*VOL)	  write (*,'(4x,a4,f9.4,a4)')     +  NAME(ITYP)(1:4),CONC,' M/l'  	end do*  Zeros	do I=1,NRH	  do J=1,LHIST	    HIST(I,J)=0.	  end do	end do**	Parameters for NVT-ensemble:*      IF(LNVT) THEN        DQT	= (UNITT*1.d15/QT)**2	  write(*,*)        write(*,'(a,f10.3)')'*** Constant temperature MD: T = ',TRTEMP        PRINT *,'   NOSE-NVT RELAXATION TIME      ',QT,' fs'        LSCLT      = .FALSE.      END IF!(LNVT...**	Parameters for NPT-ensemble:*      IF(LNPT) THEN        if(.not.LNVT)write(*,*)'!!! Attention: NPE-ensemble???'        DQT	= (UNITT*1.d15/QT)**2

⌨️ 快捷键说明

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