]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PHOS/shaker/funzer.f
Syntax problems on HP-UX corrected
[u/mrichter/AliRoot.git] / PHOS / shaker / funzer.f
CommitLineData
fe4da5cc 1 SUBROUTINE FUNZER(FUNC,X2LOW,X2HIGH,XLOW,XHIGH)
2C FIND RANGE WHERE FUNC IS NON-ZERO.
3C WRITTEN 1980, F. JAMES
4C MODIFIED, NOV. 1985, TO FIX BUG AND GENERALIZE
5C TO FIND SIMPLY-CONNECTED NON-ZERO REGION (XLOW,XHIGH)
6C ANYWHERE WITHIN THE GIVEN REGION (X2LOW,H2HIGH).
7C WHERE 'ANYWHERE' MEANS EITHER AT THE LOWER OR UPPER
8C EDGE OF THE GIVEN REGION, OR, IF IN THE MIDDLE,
9C COVERING AT LEAST 1% OF THE GIVEN REGION.
10C OTHERWISE IT IS NOT GUARANTEED TO FIND THE NON-ZERO REGION.
11C IF FUNCTION EVERYWHERE ZERO, FUNZER SETS XLOW=XHIGH=0.
12 EXTERNAL FUNC
13 XLOW = X2LOW
14 XHIGH = X2HIGH
15C FIND OUT IF FUNCTION IS ZERO AT ONE END OR BOTH
16 XMID = XLOW
17 IF (FUNC(XLOW) .GT. 0.) GO TO 120
18 XMID = XHIGH
19 IF (FUNC(XHIGH) .GT. 0.) GO TO 50
20C FUNCTION IS ZERO AT BOTH ENDS,
21C LOOK FOR PLACE WHERE IT IS NON-ZERO.
22 DO 30 LOGN= 1, 7
23 NSLICE = 2**LOGN
24 DO 20 I= 1, NSLICE, 2
25 XMID = XLOW + I * (XHIGH-XLOW) / NSLICE
26 IF (FUNC(XMID) .GT. 0.) GO TO 50
27 20 CONTINUE
28 30 CONTINUE
29C FALLING THROUGH LOOP MEANS CANNOT FIND NON-ZERO VALUE
30 WRITE(6,554)
31 WRITE(6,555) XLOW, XHIGH
32 XLOW = 0.
33 XHIGH = 0.
34 GO TO 220
35C
36 50 CONTINUE
37C DELETE 'LEADING' ZERO RANGE
38 XH = XMID
39 XL = XLOW
40 DO 70 K= 1, 20
41 XNEW = 0.5*(XH+XL)
42 IF (FUNC(XNEW) .EQ. 0.) GO TO 68
43 XH = XNEW
44 GO TO 70
45 68 XL = XNEW
46 70 CONTINUE
47 XLOW = XL
48 WRITE(6,555) X2LOW,XLOW
49 120 CONTINUE
50 IF (FUNC(XHIGH) .GT. 0.) GO TO 220
51C DELETE 'TRAILING' RANGE OF ZEROES
52 XL = XMID
53 XH = XHIGH
54 DO 170 K= 1, 20
55 XNEW = 0.5*(XH+XL)
56 IF (FUNC(XNEW) .EQ. 0.) GO TO 168
57 XL = XNEW
58 GO TO 170
59 168 XH = XNEW
60 170 CONTINUE
61 XHIGH = XH
62 WRITE(6,555) XHIGH, X2HIGH
63C
64 220 CONTINUE
65 RETURN
66 554 FORMAT('0CANNOT FIND NON-ZERO FUNCTION VALUE')
67 555 FORMAT(' FUNCTION IS ZERO FROM X=',E12.5,' TO ',E12.5)
68 END