PROGRAM MD_2D_Diff ** * Programm zur Durchfuehrung von Molekulardynamiksimuationen * mit dem Verlet Algorithmus. Propagation eines Metallteilchens * mit der Masse von Al (26,981538 amu) in einem periodischen * zweidimensionalen Potential * Zeitschritt 1fs, Gitterkonstante A= 3 Angstrom * COMMON /DATA/ A,PI,POT0 REAL R(97) EXTERNAL RAN OPEN (10,FILE="Trajektorie_Al_Diff.dat", & FORM="FORMATTED",STATUS="UNKNOWN") OPEN (25,FILE="Trajektorie_Al_all_Diff.dat", & FORM="FORMATTED",STATUS="UNKNOWN") POT0=.2 A=3. PI=ACOS(-1.) AMASS=26.981538 DEL=1. NSTEP=50 C X0 x-Koordinate des Anfangspunktes in der Einheitszelle in Einheiten von a C Y0 y-Koordinate des Anfangspunktes in der Einheitszelle in Einheiten von a C EKIN kinetische Energie am Anfang in eV C ANG Winkel der Anfangsrichtung C AMASS Masse in amu des Teilchens C DEL Zeitschritt in fs C N Anzahl der Zeitschritte Write (*,*) "Molekulardynamiksimulationen" CAG WRITE (*,*) "Gebe die Anfangskoordinaten X0 und Y0 in der" CAG WRITE (*,*) "Einheitszelle an (0 Ekin = 2 * (1/2) * k_B T TEMP=EKIN/8.6173431E-5 X0=XF Y0=YF ANG=(180.*ATAN2(VYF,VXF)/PI) ANG=ANG+15.0*(2.*RAN(ISEED,IX1,IX2,IX3,R)-1.) EKIN=TEMPI*8.6173431E-5 V=SQRT(2.*EKIN/AMASS) VX=V*COS(ANG*PI/180.) VY=V*SIN(ANG*PI/180.) 10 CONTINUE END SUBROUTINE VERLET (N,X0,Y0,VX0,VY0,XF,YF,VXF,VYF,DEL,AMASS,NI) **** * VERLET Algorithmus **** REAL R(97) EXTERNAL RAN CALL ABLEITUNG(X0,Y0,FX,FY) X1=X0+DEL*VX0+(.5*FX*DEL**2)/AMASS Y1=Y0+DEL*VY0+(.5*FY*DEL**2)/AMASS DO 100, I=1,N VPOT=POT(X1,Y1) CALL ABLEITUNG(X1,Y1,FX,FY) X2=2.*X1-X0+FX*DEL**2/AMASS Y2=2.*Y1-Y0+FY*DEL**2/AMASS VX1=(X2-X0)/(2.*DEL) VY1=(Y2-Y0)/(2.*DEL) EKIN=.5*AMASS*(VX1**2+VY1**2) ETOT=EKIN+VPOT WRITE (10,*) X1,Y1 WRITE (25,*) (NI+I),X1,Y1,EKIN,VPOT,ETOT X0=X1 X1=X2 Y0=Y1 Y1=Y2 100 CONTINUE XF=X2 YF=Y2 VXF=VX1 VYF=VY1 END SUBROUTINE ABLEITUNG(X,Y,FX,FY) **** * Kraft = -Gradient des Potentials *** COMMON /DATA/ A,PI,POT0 ARG=2.*PI/A POT=.25*POT0*(2.+COS(ARG*X)+COS(ARG*Y)) FX=.25*POT0*ARG*SIN(ARG*X) FY=.25*POT0*ARG*SIN(ARG*Y) END * * REAL FUNCTION POT(X,Y) COMMON /DATA/ A,PI,POT0 ARGX=2.*PI*X/A ARGY=2.*PI*Y/A POT=.25*POT0*(2.+COS(ARGX)+COS(ARGY)) END * * REAL FUNCTION RAN(IDUM,IX1,IX2,IX3,R) * Returns a random deviate between 0.0 and 1.0. Set IDUM to * any negative value to initialize or reinitialize the sequence. * Numerical Recipes p.196 REAL R(97) INTEGER IX1,IX2,IX3,IC1,IC2,IC3,IA1,IA2,IA3,IFF PARAMETER (M1=259200,IA1=7141,IC1=54733,RM1=1./M1) PARAMETER (M2=134456,IA2=8121,IC2=28411,RM2=1./M2) PARAMETER (M3=243000,IA3=4561,IC3=51349) DATA IFF /0/ IF (IDUM.LT.0.OR.IFF.EQ.0) THEN IFF=1 IX1=MOD(IC1-IDUM,M1) IX1=MOD(IA1*IX1+IC1,M1) IX2=MOD(IX1,M2) IX1=MOD(IA1*IX1+IC1,M1) IX3=MOD(IX1,M3) DO 11, J=1,97 IX1=MOD(IA1*IX1+IC1,M1) IX2=MOD(IA2*IX2+IC2,M2) R(J)=(FLOAT(IX1)+FLOAT(IX2)*RM2)*RM1 11 CONTINUE IDUM=1 ENDIF IX1=MOD(IA1*IX1+IC1,M1) IX2=MOD(IA2*IX2+IC2,M2) IX3=MOD(IA3*IX3+IC3,M3) J=1+(97*IX3)/M3 * IF (J.GT.97.OR.J.LT.1) PAUSE RAN=R(J) R(J)=(FLOAT(IX1)+FLOAT(IX2)*RM2)*RM1 RETURN END * *