]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/mathlib/gen/d/fumili.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / mathlib / gen / d / fumili.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1996/04/01 15:02:21 mclareni
6* Mathlib gen
7*
8*
9#include "gen/pilot.h"
10 SUBROUTINE FUMILI (S,M,N1,N2,N3,EPS,AKAPPA,ALAMBD,IT,MC)
11C-----ENTRY FOR CHISQ MINIMISATION
12#include "d510pl.inc"
13#include "d510si.inc"
14#include "d510ui.inc"
15#include "d510uo.inc"
16C-----10.*MAXIMUM RELATIVE PRECISION ON CDC 6000
17 DATA RP/1.E-14/
18 INDFLG(3)=0
19 1 IF (IT.GE.0) WRITE(6,84)
20#if defined(CERNLIB_IBM)||defined(CERNLIB_CDC)
21 CALL VFILL(AMX,100,1.0E75)
22#endif
23#if (!defined(CERNLIB_CDC))&&(!defined(CERNLIB_IBM))
24 CALL VFILL(AMX,100,1.0E37)
25#endif
26 CALL VCOPYN(AMX,AMN,100)
27 NN2=0
28 N=M
29 FIXFLG=0.
30 ENDFLG=0.
31 INDFLG(2)=0
32 IFIX1=0.
33 FI=0.
34 NN3=0
35 DO 2 I=1,N
36 R(I)=0.
37 IF (EPS.GT.0.) SIGMA(I)=0.
38 2 PL(I)=PL0(I)
39C-----START NEW ITERATION
40 3 NN1=1
41 T1=1.
42C-----REPEAT ITERATION WITH SMALLER STEP
43 4 S=0.
44 N0=0
45 DO 7 I=1,N
46 G(I)=0.
47 IF (PL0(I)) 7,7,5
48 5 N0=N0+1
49 IF (PL(I)) 7,7,6
50 6 PL0(I)=PL(I)
51 7 CONTINUE
52 NN0=N0*(N0+1)/2
53 IF (NN0.LT.1) GO TO 9
54 DO 8 I=1,NN0
55 Z(I)=0.
56 8 CONTINUE
57 9 NA=M
58 INDFLG(1)=0
59C-----CALCULATE OBJECTIVE FUNCTION
60 CALL SGZ (M,S)
61 SP=RP*ABS(S)
62 IF (NN0.LT.1) GO TO 11
63 DO 10 I=1,NN0
64 Z0(I)=Z(I)
65 10 CONTINUE
66 11 IF (NN3) 19,19,12
67 12 IF (NN1-N1) 13,13,19
68 13 T=2.*(S-OLDS-GT)
69 IF (INDFLG(1)) 16,14,16
70 14 IF (ABS(S-OLDS).LE.SP.AND.-GT.LE.SP) GO TO 19
71 IF (0.59*T+GT) 19,15,15
72 15 T=-GT/T
73 IF (T-0.25) 16,17,17
74 16 T=0.25
75 17 GT=GT*T
76 T1=T1*T
77 NN2=0
78 DO 18 I=1,N
79 IF (PL(I).LE.0.) GO TO 18
80 A(I)=A(I)-DA(I)
81 PL(I)=PL(I)*T
82 DA(I)=DA(I)*T
83 A(I)=A(I)+DA(I)
84 18 CONTINUE
85 NN1=NN1+1
86 GO TO 4
87C-----REMOVE CONTRIBUTION OF FIXED PARAMETERS FROM Z
88 19 IF(INDFLG(1).EQ.0) GO TO 20
89 ENDFLG=-4.
90 GO TO 85
91 20 K1=1
92 K2=1
93 I1=1
94 DO 30 I=1,N
95 IF (PL0(I)) 30,30,21
96 21 IF (PL(I).EQ.0.) PL(I)=PL0(I)
97 IF (PL(I)) 23,23,24
98 22 PL(I)=0.
99 23 K1=K1+I1
100 GO TO 29
101 24 IF (A(I).GE.AMX(I).AND.G(I).LT.0.) GO TO 22
102 IF (A(I).LE.AMN(I).AND.G(I).GT.0.) GO TO 22
103 DO 28 J=1,I
104 IF (PL0(J)) 28,28,25
105 25 IF (PL(J)) 27,27,26
106 26 Z(K2)=Z0(K1)
107 K2=K2+1
108 27 K1=K1+1
109 28 CONTINUE
110 29 I1=I1+1
111 30 CONTINUE
112C-----INVERT Z
113 I1=1
114 L=I1
115 DO 32 I=1,N
116 IF (PL(I)) 32,32,31
117 31 R(I)=Z(L)
118 I1=I1+1
119 L=L+I1
120 32 CONTINUE
121 N0=I1-1
122 CALL MCONV (N0)
123 IF (INDFLG(1)) 33,34,33
124 33 INDFLG(1)=0
125 INDFLG(2)=1
126 GO TO 49
127 34 CONTINUE
128C-----CALCULATE THEORETICAL STEP TO MINIMUM
129 I1=1
130 DO 41 I=1,N
131 DA(I)=0.
132 IF (PL(I)) 41,41,35
133 35 L1=1
134 DO 40 L=1,N
135 IF (PL(L)) 40,40,36
136 36 IF (I1-L1) 37,37,38
137 37 K=L1*(L1-1)/2+I1
138 GO TO 39
139 38 K=I1*(I1-1)/2+L1
140 39 DA(I)=DA(I)-G(L)*Z(K)
141 L1=L1+1
142 40 CONTINUE
143 I1=I1+1
144 41 CONTINUE
145C-----CHECK FOR PARAMETERS ON BOUNDARY
146 AFIX=0.
147 IFIX=0
148 I1=1
149 L=I1
150 DO 47 I=1,N
151 IF (PL(I)) 47,47,42
152 42 SIGI=SQRT(ABS(Z(L)))
153 R(I)=R(I)*Z(L)
154 IF (EPS) 44,44,43
155 43 SIGMA(I)=SIGI
156 44 IF ((A(I).LT.AMX(I).OR.DA(I).LE.0.).AND.(A(I).GT.AMN(I).OR.DA(I).G
157 1E.0.)) GO TO 46
158 AKAP=ABS(DA(I)/SIGI)
159 IF (AKAP-AFIX) 46,46,45
160 45 AFIX=AKAP
161 IFIX=I
162 IFIX1=I
163 46 I1=I1+1
164 L=L+I1
165 47 CONTINUE
166 IF (IFIX) 48,50,48
167 48 PL(IFIX)=-1.
168 49 FIXFLG=FIXFLG+1.
169 FI=0.
170C-----REPEAT CALCULATION OF THEORETICAL STEP AFTER FIXING EACH PARAMETER
171 GO TO 19
172C-----CALCULATE STEP CORRECTION FACTOR
173 50 ALAMBD=1.
174 AKAPPA=0.
175 IMAX=0
176 DO 60 I=1,N
177 IF (PL(I)) 60,60,51
178 51 BM=AMX(I)-A(I)
179 ABI=A(I)+PL(I)
180 ABM=AMX(I)
181 IF (DA(I)) 52,52,53
182 52 BM=A(I)-AMN(I)
183 ABI=A(I)-PL(I)
184 ABM=AMN(I)
185 53 BI=PL(I)
186 IF (BI-BM) 55,55,54
187 54 BI=BM
188 ABI=ABM
189 55 IF (ABS(DA(I))-BI) 58,58,56
190 56 AL=ABS(BI/DA(I))
191 IF (ALAMBD-AL) 58,58,57
192 57 IMAX=I
193 AIMAX=ABI
194 ALAMBD=AL
195 58 AKAP=ABS(DA(I)/SIGMA(I))
196 IF (AKAP-AKAPPA) 60,60,59
197 59 AKAPPA=AKAP
198 60 CONTINUE
199C-----CALCULATE NEW CORRECTED STEP
200 GT=0.
201 AMB=1.E18
202 IF (ALAMBD) 62,62,61
203 61 AMB=0.25/ALAMBD
204 62 CONTINUE
205 DO 67 I=1,N
206 IF (PL(I)) 67,67,63
207 63 IF (NN2-N2) 66,66,64
208 64 IF (ABS(DA(I)/PL(I))-AMB) 66,65,65
209 65 PL(I)=4.*PL(I)
210 T1=4.
211 66 DA(I)=DA(I)*ALAMBD
212 GT=GT+DA(I)*G(I)
213 67 CONTINUE
214C-----CHECK IF MINIMUM ATTAINED AND SET EXIT MODE
215 IF (-GT.GT.SP.OR.T1.GE.1..OR.ALAMBD.GE.1.) GO TO 68
216 ENDFLG=-1.
217 68 IF (ENDFLG) 85,69,69
218 69 IF (AKAPPA-ABS(EPS)) 70,75,75
219 70 IF (FIXFLG) 72,71,72
220 71 ENDFLG=1.
221 GO TO 85
222 72 IF (ENDFLG) 85,77,73
223 73 IF (IFIX1) 85,85,76
224 74 IF (FI-FIXFLG) 76,76,77
225 75 IF (FIXFLG) 74,76,74
226 76 FI=FI+1.
227 ENDFLG=0.
228 85 IF(ENDFLG.EQ.0..AND.NN3.GE.N3) ENDFLG=-3.
229 IF(ENDFLG.GT.0..AND.INDFLG(2).GT.0) ENDFLG=-2.
230 CALL MONITO (S,M,NN3,IT,EPS,GT,AKAPPA,ALAMBD)
231 IF (ENDFLG) 83,79,83
232C-----CHECK IF FIXING ON BOUND IS CORRECT
233 77 ENDFLG=1.
234 FIXFLG=0.
235 IFIX1=0
236 DO 78 I=1,M
237 78 PL(I)=PL0(I)
238 INDFLG(2)=0
239 GO TO 19
240C-----NEXT ITERATION
241 79 ENDFLG=0.
242 DO 80 I=1,N
243 A(I)=A(I)+DA(I)
244 80 CONTINUE
245 IF (IMAX) 82,82,81
246 81 A(IMAX)=AIMAX
247 82 OLDS=S
248 NN2=NN2+1
249 NN3=NN3+1
250 GO TO 3
251 83 MC=ENDFLG
252 RETURN
253C-----ENTRY FOR MAXIMUM LIKLEHOOD
254#if (defined(CERNLIB_CDC))&&(defined(CERNLIB_F4))
255 ENTRY LIKELM
256#endif
257#if !defined(CERNLIB_CDC)||!defined(CERNLIB_F4)
258 ENTRY LIKELM(S,M,N1,N2,N3,EPS,AKAPPA,ALAMBD,IT,MC)
259#endif
260 INDFLG(3)=1
261 GO TO 1
262C
263 84 FORMAT('1',43X,'FUNCTION MINIMISATION BY SUBROUTINE FUMILI/LIKE',
264 +'LM'/'0',55X,'IN THE FOLLOWING PRINT-OUT'/
265 + '0',27X,'S = VALUE OF OBJECTIVE FUNCTION,',
266 + 'EC = EXPECTED CHANGE IN S DURING NEXT ITERATION'/
267 + '0',34X,'KAPPA = ESTIMATED DISTANCE TO MINIMUM, LAMBDA =',
268 + 'STEP LENGTH MODIFIER'///)
269 END