*** empty log message ***
[h316.git] / programs / mandelbrot / src / apfel2.f
CommitLineData
c08e22bb 1C APFELMAENNCHEN-PROGRAMM, 29.DEC.2004 PHILIPP HACHTMANN
2C
3C SENSE-SWITCH 1: WENN GESETZT, KONFIGURATION
4C SENSE-SWITCH 2: WENN GESETZT, KEINE AUSGABE DER EINSTELLUNGEN
5C SENSE-SWITCH 3: WENN GESETZT, STARTWERTE WIEDERHERSTELLEN
6C
7CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8C COMMON BLOCK DEKLARATIONEN
9C
10 INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA,INIT
11 COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA,INIT
12C
13 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
14 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
15C
16C
17CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
18C STARTMELDUNG
19 100 WRITE (1,10)
20 WRITE (1,11)
21 10 FORMAT (45HMANDELBROT-DEMO NO.2, 29.DEC.2004 HACHTI :-) )
22 11 FORMAT (26HSEE HTTP://H316.HACHTI.DE )
23C
24CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
25C KONFIGURATION
26CCCCCC RUECKSETZEN AUF DEFAULTWERTE?
27 CALL SSWTCH(3,I)
28 IF (I.EQ.1) CALL RST
29C
30C
31CCCCCC BEIM ERSTEN START ODER WENN VERLANGT
32 IF(INIT.EQ.0) CALL STVAL
33C
34C
35CCCCCC EINGABEN VERARBEITEN?
36 CALL SSWTCH(1,I)
37 IF (I.EQ.1) CALL GETCFG
38C
39C
40CCCCCC AUSGABE?
41 CALL SSWTCH(2,I)
42 IF(I.EQ.2) CALL OUTCFG
43C
44 WRITE (1,55)
45 55 FORMAT (1H0)
46C
47 CALL CALC
48C
49 WRITE(1, 60)
50 60 FORMAT (6HFERTIG)
51C
52CCCCCC KURZE PAUSE, DANN NEUSTART
53 PAUSE 7
54 GO TO 100
55 END
56C
57C
58C
59CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
60C EIGENTLICHE BERECHNUNG
61 SUBROUTINE CALC
62C
63 INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA,INIT
64 COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA,INIT
65 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
66 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
67C
68 COMPLEX C,Z
69 REAL X,Y
70 INTEGER COUNT
71C
72CCCCCC EINSTIEG IN BERECHNUNG
73 299 X=LOWX
74 Y=HIGHY
75C
76CCCCCC EINSTIEG IN DEN AKTUELLEN PUNKT
77 300 C=CMPLX(X,Y)
78 COUNT=0
79 Z=(0.0,0.0)
80C
81CCCCCC HIER DER ITERIERTE TEIL
82C
83 400 Z=Z*Z+C
84C
85 IF ((CABS(Z)).GE.MAXVAL) GO TO 410
86 COUNT=COUNT+1
87 IF (COUNT.GE.MAXI) GO TO 420
88 GO TO 400
89C
90CCCCCC PUNKT DURCHGEFALLEN
91 410 CALL PCHAR(NEGA)
92 GO TO 500
93C
94CCCCCC PUNKT HAT MAXI ERREICHT
95 420 CALL PCHAR(POSI)
96C
97CCCCCC NEUEN PUNKT MACHEN
98 500 X = X + XSTEP
99CCCCCC ZEILE NOCH NICHT VOLL?
100 IF (X.LT.HIGHX) GO TO 300
101CCCCCC X AN ANFANG SETZTEN, CR+LF DRUCKEN
102 X = LOWX
103 CALL PCHAR(CR)
104 CALL PCHAR(LF)
105CCCCCC Y WEITERRUECKEN - NEGATIV WEIL WIR VON OBEN KOMMEN
106 Y=Y-YSTEP
107 IF (Y.GT.LOWY) GO TO 300
108C
109CCCCCC HIER IST DAS BILD FERTIG.
110 RETURN
111 END
112CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
113CCCCCC STARTWERTE AUSFUELLEN
114 SUBROUTINE STVAL
115C
116 INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA,INIT
117 COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA,INIT
118 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
119 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
120C
121 CR = 13
122 LF = 10
123 POSI = 79
124 NEGA = 32
125 WIDTH = 70
126 MAXI = 60
127 MAXVAL = 2.0
128 LOWX =-1.45
129 HIGHX = 0.45
130 LOWY =-1.00
131 HIGHY = 1.00
132 INIT = 1
133C
134CCCCCC SCHRITTWEITEN AUSRECHNEN
135 XSTEP = (HIGHX-LOWX)/FLOAT(WIDTH)
136 YSTEP = 2.0 * XSTEP
137C
138 WRITE (1,1500)
139 1500 FORMAT (19HSTARTWERTE GESETZT.)
140 RETURN
141 END
142C
143C
144CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
145CCCCCC EINSTELLUNGEN EINLESEN
146 SUBROUTINE GETCFG
147C
148 INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA,INIT
149 COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA,INIT
150 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
151 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
152C
153 REAL XIN1,XIN2,YIN1,YIN2
154C
155 WRITE(1,11)
156 READ (1,16) XIN1
157 WRITE(1,12)
158 READ (1,16) XIN2
159 WRITE(1,13)
160 READ (1,16) YIN1
161 WRITE(1,14)
162 READ (1,16) YIN2
163 WRITE(1,15)
164 READ (1,17) MAXI
165C
166 11 FORMAT(14H X FROM : )
167 12 FORMAT(14H TO : )
168 13 FORMAT(14H Y FROM : )
169 14 FORMAT(14H TO : )
170 15 FORMAT(14H MAXIT (I3): )
171 16 FORMAT(F12.0)
172 17 FORMAT(I3)
173C
174CCCCCC EVENTUELL STARTWERTE TAUSCHEN:
175CCCCCC WENN XIN2 GROESSER IST OK, ANSONSTEN TAUSCHEN
176 150 I F(XIN2.GT.XIN1) GO TO 200
177 TEMP = XIN1
178 XIN1 = XIN2
179 XIN2 = TEMP
180C
181CCCCCC WENN YIN2 GROESSER IST OK, ANSONSTEN TAUSCHEN
182 200 IF(YIN2.GT.YIN1) GO TO 201
183 TEMP = YIN1
184 YIN1 = YIN2
185 YIN2 = TEMP
186C
187CCCCCC WERTE UEBERNEHMEN
188 201 LOWX = XIN1
189 HIGHX = XIN2
190 LOWY = YIN1
191 HIGHY = YIN2
192C
193CCCCCC SCHRITTWEITEN AUSRECHNEN
194 XSTEP = (HIGHX-LOWX)/FLOAT(WIDTH)
195 YSTEP = 2.0 * XSTEP
196C
197 RETURN
198 END
199C
200C
201CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
202CCCCCC EINSTELLUNGEN AUSGEBEN
203 SUBROUTINE OUTCFG
204C
205 INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA,INIT
206 COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA,INIT
207 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
208 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
209C
210 WRITE (1,20)
211 20 FORMAT (9HSETTINGS:)
212 WRITE (1,30) LOWX, HIGHX
213 30 FORMAT (12HX-WERTE VON ,1F8.5,5H BIS ,1F8.5)
214 WRITE (1,40) LOWY, HIGHY
215 40 FORMAT (12HY-WERTE VON ,F8.5,5H BIS ,F8.5)
216 WRITE (1,50) MAXI, MAXVAL, XSTEP, YSTEP, WIDTH
217 50 FORMAT ( 4HMAX:,I3,
218 + 8H MAXVAL:,F8.5,
219 + 7H XSTEP:,F8.5,
220 + 7H YSTEP:,F8.5,
221 + 7H WIDTH:,I2)
222 RETURN
223 END
224C
225C
226CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
227CCCCCC RUECKSETZEN
228 SUBROUTINE RST
229C
230 INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA,INIT
231 COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA,INIT
232C
233 WRITE(1,245)
234 245 FORMAT(24HRUECKSETZUNG GEWUENSCHT )
235 INIT=0
236 RETURN
237 END
238C
239C
240CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
241C KONSTANTE WERTE
242 BLOCK DATA
243 INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA,INIT
244 COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA,INIT
245 DATA INIT/0/
246 END
247CCCCCCCCCCCCCCCCCCCCCCCC
248$0