*** empty log message ***
[h316.git] / programs / mandelbrot / src / apfel4.f
CommitLineData
0b8fa875 1C APFELMAENNCHEN-PROGRAMM, 06.FEBRUARY.2007 PHILIPP HACHTMANN
2C INTERMEDIATE VERSION
3C
4C THIS VERSION SHOULD RUN A BIT FASTER BECAUSE THE SQUARE
5C ROOT IS OMMITTED.
6C
7C SWITCH SETTINGS:
8C SENSE-SWITCH 1: IF SET, ASK FOR PARAMETERS
9C SENSE-SWITCH 2: IF SET, DON'T PRINT PARAMETERS ON START
10C SENSE-SWITCH 3: IF SET, RESTORE PARAMETERS TO DEFAULT VALUES
11C
12CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
13C COMMON BLOCK DECLARATIONS
14C
15 INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA
16 COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA
17C
18 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
19 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
20C
21 INTEGER INIT
22 COMMON /PARAM3/INIT
23C
24CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
25C START MESSAGE
26 100 WRITE (1,10)
1f281d48 27 10 FORMAT (46HMANDELBROT-DEMO 4 06.01.2007, PH. HACHTMANN,
0b8fa875 28 + 20H - PRELIMIMARY ISSUE)
29C
30CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31C CONFIGURATION
32CCCCCC RESET DO DEFAULT VALUES?
33 110 CALL SSWTCH(3,I)
34 IF (I.EQ.1) CALL RST
35C
36CCCCCC ON THE FIRST START OR IF DESIRED
37 IF(INIT.EQ.0) CALL STVAL
38C
39CCCCCC DO WE HAVE TO ASK FOR PARAMETERS?
40 CALL SSWTCH(1,I)
41 IF (I.EQ.1) CALL GETCFG
42C
43CCCCCC OUTPUT SETTINGS?
44 CALL SSWTCH(2,I)
45 IF(I.EQ.2) CALL OUTCFG
46C
47 WRITE (1,55)
48 55 FORMAT (1H0)
49C
50 CALL CALC2
51C
52 WRITE(1, 60)
53 60 FORMAT (5HREADY)
54C
55CCCCCC BREAK WITH 7 in A REG, THEN START OVER
56C CALL PWAIT
57 PAUSE 7
58 GO TO 100
59 END
60C END OF MAIN PROGRAM
61C
62CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
63CCCCCC THE MANDELBROT SET CALCULATION
64 SUBROUTINE CALC2
65C
66 INTEGER MAXI,WIDTH,CR,LF
67 COMMON /PARAM2/MAXI,WIDTH,CR,LF
68 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
69 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
70 REAL CMPAVL
71 REAL ZR,ZI,ZRN
72 REAL X,Y
73 INTEGER COUNT
74C
75CCCCCC ENTER THE CALCULATION
76 299 CMPVAL=MAXVAL*MAXVAL
77 X=LOWX
78 Y=HIGHY
79C
80CCCCCC EINSTIEG IN DEN AKTUELLEN PUNKT
81 300 COUNT=0
82 ZR=0.0
83 ZI=0.0
84C
85CCCCCC HIER DER ITERIERTE TEIL
86C
87 400 ZRN=ZR*ZR-ZI*ZI+X
88 ZI=2.0*ZR*ZI+Y
89 ZR=ZRN
90C
91 IF ((ZR*ZR+ZI*ZI).GE.CMPVAL) GO TO 410
92 COUNT=COUNT+1
93 IF (COUNT.GE.MAXI) GO TO 410
94 GO TO 400
95C
96CCCCCC PUNKT FERTIG
97 410 NOUT=32
98C IF (COUNT.GE.8) NOUT=46
99C IF (COUNT.GE.23) NOUT=43
100C IF (COUNT.EQ.MAXI) NOUT=64
101 IF (COUNT.GE.8) NOUT=46
102 IF (COUNT.GE.23) NOUT=43
103 IF (COUNT.EQ.MAXI) NOUT=64
104
105 411 CALL PCHAR(NOUT)
106 GO TO 500
107C
108CCCCCC NEUEN PUNKT MACHEN
109 500 X = X + XSTEP
110CCCCCC ZEILE NOCH NICHT VOLL?
111 IF (X.LE.HIGHX) GO TO 300
112CCCCCC X AN ANFANG SETZTEN, CR+LF DRUCKEN
113 X = LOWX
114 CALL PCHAR(CR)
115 CALL PCHAR(LF)
116CCCCCC Y WEITERRUECKEN - NEGATIV WEIL WIR VON OBEN KOMMEN
117 Y=Y-YSTEP
118 IF (Y.GE.LOWY) GO TO 300
119C
120CCCCCC HIER IST DAS BILD FERTIG.
121 RETURN
122 END
123CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
124CCCCCC STARTWERTE AUSFUELLEN
125 SUBROUTINE STVAL
126C
127 INTEGER MAXI,WIDTH,CR,LF
128 COMMON /PARAM2/MAXI,WIDTH,CR,LF
129 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
130 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
131 INTEGER INIT
132 COMMON /PARAM3/INIT
133C
134 CR = 13
135 LF = 10
136 WIDTH = 68
137 MAXI = 60
138 MAXVAL = 2.0
139 LOWX =-1.48
140 HIGHX = 0.5
141 LOWY =-1.2
142 HIGHY = 1.2
143 INIT = 1
144C
145CCCCCC SCHRITTWEITEN AUSRECHNEN
146 XSTEP = (HIGHX-LOWX)/FLOAT(WIDTH)
147 YSTEP = 2.0 * XSTEP
148C
149 WRITE (1,1500)
150 1500 FORMAT (20HDEFAULT VALUES USED.)
151 RETURN
152 END
153C
154C
155CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
156CCCCCC EINSTELLUNGEN EINLESEN
157 SUBROUTINE GETCFG
158C
159 INTEGER MAXI,WIDTH,CR,LF
160 COMMON /PARAM2/MAXI,WIDTH,CR,LF
161 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
162 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
163C
164 REAL XIN1,XIN2,YIN1,YIN2
165C
166 WRITE(1,11)
167 READ (1,16) XIN1
168 WRITE(1,12)
169 READ (1,16) XIN2
170 WRITE(1,13)
171 READ (1,16) YIN1
172 WRITE(1,14)
173 READ (1,16) YIN2
174 WRITE(1,15)
175 READ (1,17) MAXI
176C
177 11 FORMAT(14H X FROM : )
178 12 FORMAT(14H TO : )
179 13 FORMAT(14H Y FROM : )
180 14 FORMAT(14H TO : )
181 15 FORMAT(14H MAXIT (I3): )
182 16 FORMAT(F12.0)
183 17 FORMAT(I3)
184C
185CCCCCC EVENTUELL STARTWERTE TAUSCHEN:
186CCCCCC WENN XIN2 GROESSER IST OK, ANSONSTEN TAUSCHEN
187 150 I F(XIN2.GT.XIN1) GO TO 200
188 TEMP = XIN1
189 XIN1 = XIN2
190 XIN2 = TEMP
191C
192CCCCCC WENN YIN2 GROESSER IST OK, ANSONSTEN TAUSCHEN
193 200 IF(YIN2.GT.YIN1) GO TO 201
194 TEMP = YIN1
195 YIN1 = YIN2
196 YIN2 = TEMP
197C
198CCCCCC WERTE UEBERNEHMEN
199 201 LOWX = XIN1
200 HIGHX = XIN2
201 LOWY = YIN1
202 HIGHY = YIN2
203C
204CCCCCC SCHRITTWEITEN AUSRECHNEN
205 XSTEP = (HIGHX-LOWX)/FLOAT(WIDTH)
206 YSTEP = 2.0 * XSTEP
207C
208 RETURN
209 END
210C
211C
212CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
213CCCCCC EINSTELLUNGEN AUSGEBEN
214 SUBROUTINE OUTCFG
215C
216 INTEGER MAXI,WIDTH,CR,LF
217 COMMON /PARAM2/MAXI,WIDTH,CR,LF
218 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
219 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
220C
221 WRITE (1,20)
222 20 FORMAT (9HSETTINGS:)
223 WRITE (1,30) LOWX, HIGHX
224 30 FORMAT (12HX-WERTE VON ,1F8.5,5H BIS ,1F8.5)
225 WRITE (1,40) LOWY, HIGHY
226 40 FORMAT (12HY-WERTE VON ,F8.5,5H BIS ,F8.5)
227 WRITE (1,50) MAXI, MAXVAL, XSTEP, YSTEP, WIDTH
228 50 FORMAT ( 4HMAX:,I3,
229 + 8H MAXVAL:,F8.5,
230 + 7H XSTEP:,F8.5,
231 + 7H YSTEP:,F8.5,
232 + 7H WIDTH:,I2)
233 RETURN
234 END
235C
236C
237CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
238CCCCCC RUECKSETZEN
239 SUBROUTINE RST
240C
241 INTEGER MAXI,WIDTH,CR,LF
242 COMMON /PARAM2/MAXI,WIDTH,CR,LF
243C
244 WRITE(1,245)
245 245 FORMAT(25HPARAMETER RESET REQUESTED)
246 INIT=0
247 RETURN
248 END
249C
250C
251CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
252C PRELOAD VALUE OF INIT
253 BLOCK DATA
254 INTEGER INIT
255 COMMON /PARAM3/INIT
256 DATA INIT/0/
257 END
258CCCCCCCCCCCCCCCCCCCCCCCC
259$0