---------------------------------------------------------------------------------------PROGRAM LOGIS1 C THE LOGISTIC MAP C THIS PROGRAM GENERATES POINTS FOR THE LOGISTIC MAP C X(N+1) = AX(1-X) C WHERE A IS THE BIFURCATION PARAMETER. AT THE PROMPT, SELECT 1 FOR C THE FIRST ITERATE, 2 FOR THE SECOND ITERATE, 3 FOR THE THIRD C ITERATE, AND 4 FOR THE FOURTH ITERATE. C THE VALUES OF X ARE TO BE FOUND IN A FILE TITLED 'RESULT.' C DIMENSION X(101),Y(101) OPEN(2,FILE='RESULT',STATUS='NEW') WRITE(*,10) 10 FORMAT(1X,'SELECT THE VALUE OF THE CONTROL PARAMETER. ',\) READ(*,*) A WRITE(*,20) 20 FORMAT(1X,'SELECT THE ITERATIVE MAP. ',\) READ(*,*) N X(1) = 0.0 GO TO (25,35,45,55) N C FIRST ITERATE MAP 25 DO 30 I=1,100 X(I+1) = X(I)+0.01 30 Y(I) = A*X(I)*(1.0-X(I)) GO TO 65 C SECOND ITERATE MAP 35 DO 40 I=1,100 X(I+1) = X(I)+0.01 Y(I) = A*X(I)*(1.0-X(I)) 40 Y(I) = A*Y(I)*(1.0-Y(I)) GO TO 65 C THIRD ITERATE MAP 45 DO 50 I=1,100 X(I+1) = X(I)+0.01 Y(I) = A*X(I)*(1.0-X(I)) Y(I) = A*Y(I)*(1.0-Y(I)) 50 Y(I) = A*Y(I)*(1.0-Y(I)) GO TO 65 C FOURTH ITERATE MAP 55 DO 60 I=1,100 X(I+1) = X(I)+0.01 Y(I) = A*X(I)*(1.0-X(I)) Y(I) = A*Y(I)*(1.0-Y(I)) Y(I) = A*Y(I)*(1.0-Y(I)) 60 Y(I) = A*Y(I)*(1.0-Y(I)) 65 WRITE(2,70) (Y(I), I=1,101) 70 FORMAT(E14.5) CLOSE(2) WRITE(*,80) 80 FORMAT(1X,'PRESS RETURN TO TERMINATE.') PAUSE END -------------------PROGRAM LOGIS2 C THE LOGISTIC TIME SERIES C C C C C C C THIS PROGRAM GENERATES POINTS FOR THE LOGISTIC TIME SERIES X(N) VERSUS N FROM THE LOGISTIC EQUATION X(N+1) = AX(1-X) WHERE A IS THE BIFURCATION PARAMETER. THE NUMBER OF POINTS TO BE CALCUATED CANNOT BE MORE THAN 999. THE VALUES OF X ARE TO BE FOUND IN A FILE TITLED 'RESULT.' DIMENSION X(1000) OPEN(2,FILE='RESULT',STATUS='NEW') WRITE(*,10) 10 FORMAT(1X,'SELECT THE NUMBER OF POINTS TO BE CALCULATED. ',\) READ(*,*) N WRITE(*,20) 20 FORMAT(1X,'SELECT THE VALUE OF THE INITIAL POINT. ',\) READ(*,*) X(1) WRITE(*,30) 30 FORMAT(1X,'SELECT THE VALUE OF THE CONTROL PARAMETER. ',\) READ(*,*) A DO 50 I=1,N+1 50 X(I+1) = A*X(I)*(1.0-X(I)) WRITE(2,60) (X(I), I=1,N+1) 60 FORMAT(E14.5) CLOSE(2) WRITE(*,70) 70 FORMAT(1X,'PRESS RETURN TO TERMINATE.') PAUSE END ------------------PROGRAM LOTKA C C C C C C C C C C C C C C SOLUTION OF THE LOTKA-VOLTERRA EQUATIONS BY THE RUNGE-KUTTA METHOD THE EQUATIONS ARE DX/DT = X(A-BY) DY/DT = Y(BX-C) WHERE A,B,C ARE PARAMETERS. THE SOLUTIONS ARE ADVANCED BY A TIME INCREMENT DT. THE PRINTOUTS OF X AND Y ARE CONTROLLED BY THE NUMBER OF TIME INCREMENTS NUM BETWEEN WRITES TO THE OUTPUT FILE. THIS IS SET BY THE VALUE OF M, WHERE M = 1/NUM*DT. TOO LARGE A TIME INCREMENT WILL CAUSE ERRATIC BEHAVIOR OF THE PROGRAM. AN INITIAL VALUE OF 0.01 IS RECOMMENDED. WHEN ENTERING VALUES OF PARAMETERS UPON SEEING THE SCREEN PROMPT, YOU MUST LEAVE A SPACE BETWEEN NUMBERS. THE OUTPUT FILES ARE LABELED 'XRESULT' AND 'YRESULT.' F1(X,Y,A,B) = X*(A-B*Y) F2(X,Y,B,C) = Y*(B*X-C) OPEN(2,FILE='XRESULT', STATUS='NEW') OPEN(3,FILE='YRESULT', STATUS='NEW') WRITE(*,10) 10 FORMAT(1X,'SELECT THE NUMBER OF POINTS TO BE CALCULATED, THE VALUE XS OF A,B,C AND THE',/1X,'INITIAL VALUES OF X AND Y. ',\) READ(*,*) N,A,B,C,X,Y WRITE(*,25) 25 FORMAT(1X,'SELECT THE TIME INCREMENT AND THE VALUE OF M. ',\) READ(*,*) DT, M WRITE(2,40) X WRITE(3,40) Y C NUM IS A COUNTER FOR TIME INTERVALS BETWEEN OUTPUT WRITES NUM = 0 DO 50 I=1,N AK1 = F1(X,Y,A,B)*DT AM1 = F2(X,Y,B,C)*DT X1 = X+AK1/2.0 Y1 = Y+AM1/2.0 AK2 = F1(X1,Y1,A,B)*DT AM2 = F2(X1,Y1,B,C)*DT X2 = X+AK2/2.0 Y2 = Y+AM2/2.0 AK3 = F1(X2,Y2,A,B)*DT AM3 = F2(X2,Y2,B,C)*DT X3 = X+AK3 Y3 = Y+AM3 AK4 = F1(X3,Y3,A,B)*DT AM4 = F2(X3,Y3,B,C)*DT X1 = X+(AK1+2.0*AK2+2.0*AK3+AK4)/6.0 Y1 = Y+(AM1+2.0*AM2+2.0*AM3+AM4)/6.0 X = X1 Y = Y1 IF(NUM.EQ.0) GO TO 35 IF(NUM*M*DT.EQ.1) GO TO 30 GO TO 45 30 NUM = 0 35 WRITE(2,40) X WRITE(3,40) Y 40 FORMAT(E14.5) 45 NUM = NUM + 1 50 CONTINUE CLOSE(2) CLOSE(3) WRITE(*,60) 60 FORMAT(1X,'PRESS RETURN TO TERMINATE') PAUSE END ------------------PROGRAM MCINT C C C C C C C C C C MONTE CARLO INTEGRATION THIS PROGRAM INTEGRATES 1/(1+X*X) USING THE RANDOM NUMBER GENERATOR RAN2(IDUM) FROM PRESS. THE PROGRAM ASKS FOR THE INPUT, WHICH IS THE NUMBER OF SAMPLE POINTS (RAMDOM NUMBERS) IN THE EVALUATION OF THE INTEGRAL. THE OUTPUT IS TO THE SCREEN. NOTE HOW MANY POINTS MUST BE SAMPLED TO APPROACH THE TRUE VALUE OF 2.65163. IMPLICIT REAL*8(A-H,O-Z) CHARACTER*3 ANS 3 WRITE (*,5) 5 FORMAT(1X,'ENTER THE NUMBER OF SAMPLE POINTS DESIRED. READ (*,*) N WRITE (*,7) 7 FORMAT(1X,'THE PROGRAM IS RUNNING.') IDUM = -1 ',\) AINT = 0.0 DO 10 I=1,N X = -4.0+8.0*RAN2(IDUM) C THE FOLLOWING LINE IS THE FUNCTION, WHICH MAY BE CHANGED. F = 1.0/(1.0+X*X) AINT = AINT+F 10 CONTINUE AINT = AINT*8.0/N 20 FORMAT(6E12.5) WRITE (*,12) AINT 12 FORMAT(1X,'THE VALUE OF THE INTEGRAL IS',2X,E10.5) WRITE (*,25) 25 FORMAT(1X,'DO YOU WISH TO DO ANOTHER CALCULATION? (yes OR no) ',\) READ (*,30) ANS 30 FORMAT(A3) IF (ANS.EQ.'yes') GO TO 3 WRITE (*,35) 35 FORMAT(1X,'PRESS RETURN TO TERMINATE') PAUSE END --------------------PROGRAM POLYMER C C C C C C C C C C C C C C C C C C C C THIS FORTRAN PROGRAM ILLUSTRATES POLYMER FOLDING BY GENERATING A SELF-AVOIDING RANDOM WALK. THE POLYMER MODEL IS THE BEAD-SPRING MODEL. THE PROGRAM PROMPTS FOR THE NUMBER OF BEADS AND FOR THE SEED VALUE FOR THE RANDOM NUMBER GENERATOR. THE NUMBER OF BEADS CANNOT EXCEED 500. IN SOME CASES THE POLYMER CHAIN MUST BE TERMINATED BECAUSE IT CANNOT GROW FARTHER. SUCH CASES ARE INDICATED ON THE SCREEN AND THE POLYMER IS DRAWN AS FAR AS IT CAN GO. THIS IS NOT A STATISTICAL SELF-AVOIDING WALK, SINCE THE MOVES ARE NOT ALL EQUALLY PROBABLE. IT IS INTENDED ONLY TO SHOW POLYMER FOLDING. THIS PROGRAM REQUIRES A RANDOM NUMBER GENERATOR SUCH AS RAN2 FOUND IN PRESS. THIS PROGRAM WRITES THE OUTPUT TO FILES 'RESULTX' AND 'RESULTY.' THE OUTPUT FILES CAN BE EXPORTED TO A PLOTTING ROUTINE, OR THE RESULTS CAN BE PLOTTED ON GRAPH PAPER. DIMENSION IX(500),IY(500) OPEN(2,FILE='RESULTX',STATUS='NEW') OPEN(3,FILE='RESULTY',STATUS='NEW') NUMBER OF BEADS IS N WRITE(*,5) 5 FORMAT(1X,'PLEASE TYPE IN THE NUMBER OF BEADS. '\) READ(*,*) N WRITE(*,10) 10 FORMAT(1X,'PLEASE TYPE IN THE VALUE OF THE RANDOM NUMBER SEED. X) READ(*,*) IDUM SET UP INITIAL SITES L = 1 IX(1) = 100 IY(1) = 100 IX(2) = 100+L '\ C 100 102 105 110 115 120 125 130 135 140 C 500 540 505 510 515 520 525 530 IY(2) = 100 BEGIN THE RANDOM WALK DO 150 I=3,N A = RAN2(IDUM) NCOUNT = 0 IF(A.LT.0.25) GO TO 115 IF(A.LT.0.5) GO TO 125 IF(A.LT.0.75) GO TO 135 NCOUNT = NCOUNT+1 IF(NCOUNT.GT.4) GO TO 500 DO 110 K=1,I-1 IF(IX(K).EQ.IX(I-1).AND.IY(K).EQ.IY(I-1)-L) GO TO 115 IX(I) = IX(I-1) IY(I) = IY(I-1)-L GO TO 150 NCOUNT = NCOUNT+1 IF(NCOUNT.GT.4) GO TO 500 DO 120 K=1,I-1 IF(IX(K).EQ.IX(I-1)-L.AND.IY(K).EQ.IY(I-1)) GO TO 125 IX(I) = IX(I-1)-L IY(I) = IY(I-1) GO TO 150 NCOUNT = NCOUNT+1 IF(NCOUNT.GT.4) GO TO 500 DO 130 K=1,I-1 IF(IX(K).EQ.IX(I-1).AND.IY(K).EQ.IY(I-1)+L) GO TO 135 IX(I) = IX(I-1) IY(I) = IY(I-1)+L GO TO 150 NCOUNT = NCOUNT+1 IF(NCOUNT.GT.4) GO TO 500 DO 140 K=1,I-1 IF(IX(K).EQ.IX(I-1)+L.AND.IY(K).EQ.IY(I-1)) GO TO 105 IX(I) = IX(I-1)+L IY(I) = IY(I-1) GO TO 150 NCOUNT > 4; CHAIN IS STUCK. REEVALUATE PREVIOUS POSITION. MCOUNT = 0 IF(A.LT.0.25) GO TO 510 IF(A.LT.0.5) GO TO 520 IF(A.LT.0.75) GO TO 530 MCOUNT = MCOUNT+1 IF(MCOUNT.GT.4) GO TO 590 DO 505 K=1,I-1 IF(IX(K).EQ.IX(I-2).AND.IY(K).EQ.IY(I-2)-L) GO TO 510 GO TO 550 MCOUNT = MCOUNT+1 IF(MCOUNT.GT.4) GO TO 590 DO 515 K=1,I-1 IF(IX(K).EQ.IX(I-2)-L.AND.IY(K).EQ.IY(I-2)) GO TO 520 GO TO 560 MCOUNT = MCOUNT+1 IF(MCOUNT.GT.4) GO TO 590 DO 525 K=1,I-1 IF(IX(K).EQ.IX(I-2).AND.IY(K).EQ.IY(I-2)+L) GO TO 530 GO TO 570 MCOUNT = MCOUNT+1 IF(MCOUNT.GT.4) GO TO 590 DO 535 K=1,I-1 535 IF(IX(K).EQ.IX(I-2)+L.AND.IY(K).EQ.IY(I-2)) GO TO 540 GO TO 580 550 IX(I-1) = IX(I-2) IY(I-1) = IY(I-2)-L GO TO 102 560 IX(I-1) = IX(I-2)-L IY(I-1) = IY(I-2) GO TO 102 570 IX(I-1) = IX(I-2) IY(I-1) = IY(I-2)+L GO TO 102 580 IX(I-1) = IX(I-2)+L IY(I-1) = IY(I-2) GO TO 102 590 WRITE(*,595) 595 FORMAT('CHAIN GROWTH TERMINATED') GO TO 205 150 CONTINUE C WRITE FINAL CONFIGURATION TO FILES "RESULTX" AND "RESULTY" 205 WRITE(2,645) (IX(I),I=1,N) WRITE(3,645) (IY(I),I=1,N) 645 FORMAT(I5) CLOSE(2) CLOSE(3) WRITE(*,650) 650 FORMAT(1X,'PRESS RETURN TO TERMINATE') PAUSE END -------------------PROGRAM PWRSPR C POWER SPECTRUM C THE INPUT FOR THE POWER SPECTRUM CONSISTS OF A TIME SERIES, C EITHER CALCULATED OR MEASURED IN AN EXPERIMENT. THESE DATA C ARE IN A FILE NAMED 'DATA.' THE NUMBER OF DATA POINTS C OF THE TIME SERIES MUST BE PROVIDED ACCORDING TO THE PROMPT. C THE OUTPUT IS THE POWER SPECTRUM IN A FILE NAMED 'RESULT.' C THERE IS NO WINDOW PROVIDED FOR THE FOURIER TRANSFORM, SO THERE C MAY BE LEAKAGE IN THE TRANSFORM AND THE POWER SPECTRUM. C ALSO, CONSTANT COEFFICIENTS SUCH AS THE TIME INCREMENT AND THE C TOTAL TIME HAVE BEEN OMITTED. C THE OUTPUT DATA MAY BE EXPORTED TO YOUR FAVORITE GRAPHICS PROGRAM. C IMPLICIT REAL*8(A-H,O-Z) DIMENSION X(2700),Y(2700),YIMAG(2700) DATA PI/3.141593/ OPEN(2,FILE='DATA',STATUS='OLD',FORM='FORMATTED') OPEN(3,FILE='RESULT',STATUS='NEW',FORM='FORMATTED') WRITE(*,10) 10 FORMAT(1X,'SELECT THE NUMBER OF POINTS FOR THE POWER SPECTRUM. TH XIS SHOULD AGREE WITH',/1X,'THE OUTPUT (LESS ONE) FROM THE TIME SER XIES. ',\) READ(*,*) N READ (2,20) (X(I), I=1,N) 20 FORMAT (E14.5) C FOURIER TRANSFORM DO 50 J=1,N Y(J) = 0.0 YIMAG(J) = 0.0 DO 40 I=1,N Y(J) = X(I)*COS(2.0*PI*J*(I-1)/(N+1))+Y(J) 40 YIMAG(J) = X(I)*SIN(2.0*PI*J*(I-1)/(N+1))+YIMAG(J) 50 CONTINUE DO 60 J=1,N Y(J) = Y(J)*Y(J) YIMAG(J) = YIMAG(J)*YIMAG(J) 60 Y(J) = Y(J)+YIMAG(J) WRITE(3,20) (Y(J), J=1,N) CLOSE(2) CLOSE(3) WRITE(*,70) 70 FORMAT(1X,'PRESS RETURN TO TERMINATE') PAUSE END ------------------PROGRAM REVCA C C C C C C C C C C C C C C C C REVERSIBLE CELLULAR AUTOMATA THIS PROGRAM CALCULATES ONE-DIMENSIONAL REVERSIBLE CELLULAR AUTOMATA USING THE NEIGHBOR-THREE RULES OF [WOLFRAM, 1983]. THE INPUT CONSISTS OF THE NUMBER OF SITES (CELLS) N IN THE CA PLUS TWO TO TAKE INTO ACCOUNT THE ENDS FOR CYCLIC BOUNDARY CONDITIONS, THE NUMBER OF TIME VALUES (INCLUDING TIME ZERO) NT, AND THE ORIGINAL CONFIGURATION IX(NT,N) COMPRISED OF 1 OR 0. THE VALUES OF N, NT, AND THE INITIAL CONFIGURATION MUST BE ENTERED IN A FILE LABELED 'INPUT.' SEE THE PROGRAM FOR THE FORMAT OF THE INPUT DATA. THE CA RULES IN THE PROGRAM MUST BE CHANGED FOR EACH NEW CA AND THE PROGRAM MUST BE RECOMPILED FOR EACH NEW CA. THE VALUE OF N MUST NOT EXCEED 100 AND THE VALUE OF NT MUST NOT EXCEED 500. THE CA APPEAR DIRECTLY ON THE SCREEN. IMPLICIT REAL*8(A-H,O-V), INTEGER(I-N) DIMENSION IX(500,100),IY(500,100) OPEN(2, FILE='INPUT',STATUS='OLD') C READ IN THE NUMBER OF CELLS (+2) AND THE NUMBER OF TIME STEPS READ(2,*) N,NT C READ IN THE INITIAL CONFIGURATION. READ(2,*) (IX(1,J), J=1,N) DO 20 J=2,N-1 C*****THE CA RULES MUST BE SPECIFIED BELOW. THE NEIGHBORHOODS ARE C*****LABELED. IF DESIRED, THE CA NUMBER CAN BE RECORDED IN THE C*****NEXT STATEMENT. C CELLULAR AUTOMATA RULES FOR CA 126 IF(IX(1,J).EQ.1) GO TO 15 C NEIGHBORHOOD 101 IF(IX(1,J-1).EQ.1.AND.IX(1,J+1).EQ.1) IX(1+1,J) = 1 C NEIGHBORHOOD 100 IF(IX(1,J-1).EQ.1.AND.IX(1,J+1).EQ.0) IX(1+1,J) = 1 C NEIGHBORHOOD 001 IF(IX(1,J-1).EQ.0.AND.IX(1,J+1).EQ.1) IX(1+1,J) = 1 C NEIGHBORHOOD 000 IF(IX(1,J-1).EQ.0.AND.IX(1,J+1).EQ.0) IX(1+1,J) = 0 GO TO 20 C NEIGHBORHOOD 111 15 IF(IX(1,J-1).EQ.1.AND.IX(1,J+1).EQ.1) IX(1+1,J) = 0 C NEIGHBORHOOD 110 IF(IX(1,J-1).EQ.1.AND.IX(1,J+1).EQ.0) IX(1+1,J) = 1 C NEIGHBORHOOD 011 IF(IX(1,J-1).EQ.0.AND.IX(1,J+1).EQ.1) IX(1+1,J) = 1 C NEIGHBORHOOD 010 IF(IX(1,J-1).EQ.0.AND.IX(1,J+1).EQ.0) IX(1+1,J) = 1 20 CONTINUE IX(1+1,1) = IX(1+1,N-1) IX(1+1,N) = IX(1+1,2) DO 120 I=2,NT-1 DO 118 J=2,N-1 C*****THE CA RULES MUST BE SPECIFIED BELOW. THE NEIGHBORHOODS ARE C*****LABELED. IF DESIRED, THE CA NUMBER CAN BE RECORDED IN THE C*****NEXT STATEMENT. C CELLULAR AUTOMATA RULES FOR CA 126 IF(IX(I,J).EQ.1) GO TO 108 C NEIGHBORHOOD 101 IF(IX(I,J-1).EQ.1.AND.IX(I,J+1).EQ.1) IY(I+1,J) = 1 C NEIGHBORHOOD 100 IF(IX(I,J-1).EQ.1.AND.IX(I,J+1).EQ.0) IY(I+1,J) = 1 C NEIGHBORHOOD 001 IF(IX(I,J-1).EQ.0.AND.IX(I,J+1).EQ.1) IY(I+1,J) = 1 C NEIGHBORHOOD 000 IF(IX(I,J-1).EQ.0.AND.IX(I,J+1).EQ.0) IY(I+1,J) = 0 C ADD LINE NT-2 MOD 2 (DO NOT CHANGE THE NEXT FOUR STATEMENTS.) IF(IX(I-1,J).EQ.0.AND.IY(I+1,J).EQ.0) IX(I+1,J) = 0 IF(IX(I-1,J).EQ.0.AND.IY(I+1,J).EQ.1) IX(I+1,J) = 1 IF(IX(I-1,J).EQ.1.AND.IY(I+1,J).EQ.0) IX(I+1,J) = 1 IF(IX(I-1,J).EQ.1.AND.IY(I+1,J).EQ.1) IX(I+1,J) = 0 GO TO 118 C NEIGHBORHOOD 111 108 IF(IX(I,J-1).EQ.1.AND.IX(I,J+1).EQ.1) IY(I+1,J) = 0 C NEIGHBORHOOD 110 IF(IX(I,J-1).EQ.1.AND.IX(I,J+1).EQ.0) IY(I+1,J) = 1 C NEIGHBORHOOD 011 IF(IX(I,J-1).EQ.0.AND.IX(I,J+1).EQ.1) IY(I+1,J) = 1 C NEIGHBORHOOD 010 IF(IX(I,J-1).EQ.0.AND.IX(I,J+1).EQ.0) IY(I+1,J) = 1 C ADD LINE NT-2 MOD 2 (DO NOT CHANGE THE NEXT FOUR STATEMENTS.) IF(IX(I-1,J).EQ.0.AND.IY(I+1,J).EQ.0) IX(I+1,J) = 0 IF(IX(I-1,J).EQ.0.AND.IY(I+1,J).EQ.1) IX(I+1,J) = 1 IF(IX(I-1,J).EQ.1.AND.IY(I+1,J).EQ.0) IX(I+1,J) = 1 IF(IX(I-1,J).EQ.1.AND.IY(I+1,J).EQ.1) IX(I+1,J) = 0 118 CONTINUE C ADD CYCLIC BOUNDARY CONDITIONS IX(I+1,1) = IX(I+1,N-1) IX(I+1,N) = IX(I+1,2) 120 CONTINUE DO 125 I=1,NT DO 127 J=1,N IF(IX(I,J).EQ.0) GO TO 128 WRITE(*,130) 130 FORMAT(''\) GOTO 127 128 WRITE(*,129) 129 FORMAT(' '\) 127 CONTINUE WRITE(*,126) 126 FORMAT(' ') 125 CONTINUE CLOSE(2) C SCREEN REMARK WRITE(*,160) 160 FORMAT(1X,'PRESS RETURN TO TERMINATE') PAUSE END ------------------PROGRAM SQRCA C C C C C C C C C C SQUARE CELLULAR AUTOMATON THIS PROGRAM FOLLOWS THE EVOLUTION OF FIVE-NEIGHBOR, SUM MODULO 2 RULE FOR CA 614. CYCLIC BOUNDARY CONDITIONS ARE USED. THE (1,1), (1,N), (N,1), AND (N,N) ELEMENTS ARE NEVER USED AND CAN BE READ IN AS 0. THE INPUT IS IN A FILE LABELED 'INPUT' AND CONTAINS THE SIZE OF THE CA, THE NUMBER OF TIME STEPS, AND THE INITIAL CONFIGURATION. SEE THE PROGRAM FOR THE FORMAT OF THE INPUT DATA. THE OUTPUT IS DIRECTLY TO THE SCREEN. C C C 20 30 C 50 60 C 80 90 100 C IMPLICIT REAL*8(A-H,O-V), INTEGER(I-N) DIMENSION IX(100,100),IY(100,100) OPEN(2, FILE='INPUT',STATUS='OLD') READ IN THE SIZE OF THE CA (+2) AND THE NUMBER OF TIME STEPS (NT) READ(2,*) N,NT READ IN THE INITIAL CONFIGURATION THE ARRAY IS READ IN WITH THE COLUMN INDEX INCREASING MOST RAPIDLY READ(2,*) ((IX(I,J), J=1,N), I=1,N) DO 100 IT=1,NT DO 30 I=2,N-1 DO 20 J=2,N-1 IY(I,J) = IX(I,J-1)+IX(I,J)+IX(I,J+1)+IX(I-1,J)+IX(I+1,J) IY(I,J) = MOD(IY(I,J),2) CONTINUE SET UP NEW CONFIGURATION DO 60 I=2,N-1 DO 50 J=2,N-1 IX(I,J) = IY(I,J) CONTINUE IMPOSE CYCLIC BOUNDARY CONDITIONS DO 80 I=2,N-1 IX(I,1) = IX(I,N-1) IX(I,N) = IX(I,2) DO 90 J=2,N-1 IX(1,J) = IX(N-1,J) IX(N,J) = IX(2,J) CONTINUE PRINT OUT IN A SQUARE ARRAY DO 140 I=2,N-1 DO 110 J=2,N-1 IF(IX(I,J).EQ.0) GO TO 120 WRITE(*,115) 115 FORMAT(''\) GOTO 110 120 WRITE(*,125) 125 FORMAT(' '\) 110 CONTINUE WRITE(*,130) 130 FORMAT(' ') 140 CONTINUE CLOSE(2) C SCREEN REMARK WRITE(*,160) 160 FORMAT(1X,'PRESS RETURN TO TERMINATE') PAUSE END