PROGRAM RandomWalk * RandomWalk auf einem quadratischen Gitter **** REAL R(97) INTEGER HOP,IBIT EXTERNAL RAN PARAMETER (NBIG=100000) REAL XS(NBIG),YS(NBIG) C Erzeugen von Zufallszahlen 0,1,2,3 IBIT(X) = INT(4.*X) OPEN (10,FILE="RandomWalk.dat", & FORM="FORMATTED",STATUS="UNKNOWN") OPEN (15,FILE="RandomWalk_t.dat", & FORM="FORMATTED",STATUS="UNKNOWN") A=3.0 PRINT *, & 'Eingabe Anzahl der Zufallsschritte , Anfangszustand ISEED' PRINT *, & ' (2 natuerliche Zahlen):' READ *,M,ISEED C Startpunkte X=0.*A Y=0.*A WRITE (*,*) 'Nach Vollendung des Programmes kan man sich die' WRITE (*,*) 'berechnete Trajektorie mit' WRITE (*,*) 'xmgrace RandomWalk.dat anschauen' WRITE (*,*) '(auf Gross- und Kleinschreibung achten)' WRITE (10,*) 0,X,Y C RAN Zufallszahl zwischen 0 und 1 DO 100, I=1,M HOP=IBIT(RAN(ISEED,IX1,IX2,IX3,R)) IF (HOP.EQ.0) THEN X=X+1 ELSEIF (HOP.EQ.1) THEN X=X-1 ELSEIF (HOP.EQ.2) THEN Y=Y+1 ELSEIF (HOP.EQ.3) THEN Y=Y-1 ELSE PRINT *, 'Kein Sprung' ENDIF XS(I)=X*A YS(I)=Y*A WRITE (10,*) XS(I),YS(I) WRITE (15,*) I,XS(I),YS(I) 100 CONTINUE 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 * *