1 | *
|
---|
2 | * $Id: mnexcm.F,v 1.1.1.1 2003-06-11 14:18:27 cmv Exp $
|
---|
3 | *
|
---|
4 | * $Log: not supported by cvs2svn $
|
---|
5 | * Revision 1.2 1996/03/15 18:02:45 james
|
---|
6 | * Modified Files:
|
---|
7 | * mnderi.F eliminate possible division by zero
|
---|
8 | * mnexcm.F suppress print on STOP when print flag=-1
|
---|
9 | * set FVAL3 to flag if FCN already called with IFLAG=3
|
---|
10 | * mninit.F set version 96.03
|
---|
11 | * mnlims.F remove arguments, not needed
|
---|
12 | * mnmigr.F VLEN -> LENV in debug print statement
|
---|
13 | * mnparm.F move call to MNRSET to after NPAR redefined, to zero all
|
---|
14 | * mnpsdf.F eliminate possible division by zero
|
---|
15 | * mnscan.F suppress printout when print flag =-1
|
---|
16 | * mnset.F remove arguments in call to MNLIMS
|
---|
17 | * mnsimp.F fix CSTATU so status is PROGRESS only if new minimum
|
---|
18 | * mnvert.F eliminate possible division by zero
|
---|
19 | *
|
---|
20 | * Revision 1.1.1.1 1996/03/07 14:31:29 mclareni
|
---|
21 | * Minuit
|
---|
22 | *
|
---|
23 | *
|
---|
24 | #include "minuit/pilot.h"
|
---|
25 | SUBROUTINE MNEXCM(FCN,COMAND,PLIST,LLIST,IERFLG,FUTIL)
|
---|
26 | #include "minuit/d506dp.inc"
|
---|
27 | CC Interprets a command and takes appropriate action,
|
---|
28 | CC either directly by skipping to the corresponding code in
|
---|
29 | CC MNEXCM, or by setting up a call to a subroutine
|
---|
30 | CC
|
---|
31 | #include "minuit/d506cm.inc"
|
---|
32 | EXTERNAL FCN,FUTIL
|
---|
33 | CHARACTER*(*) COMAND
|
---|
34 | C Cannot say DIMENSION PLIST(LLIST) since LLIST can be =0.
|
---|
35 | DIMENSION PLIST(*)
|
---|
36 | PARAMETER (MXPT=101)
|
---|
37 | DIMENSION XPTU(MXPT), YPTU(MXPT)
|
---|
38 | C alphabetical order of command names!
|
---|
39 | CHARACTER*10 CNAME(40), CNEWAY, CHWHY*18, C26*30, CVBLNK*2
|
---|
40 | LOGICAL LTOFIX, LFIXED, LFREED
|
---|
41 | C
|
---|
42 | CHARACTER COMD*4
|
---|
43 | CHARACTER CLOWER*26, CUPPER*26
|
---|
44 | DATA CLOWER/'abcdefghijklmnopqrstuvwxyz'/
|
---|
45 | DATA CUPPER/'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
|
---|
46 | C
|
---|
47 | C recognized MINUIT commands:
|
---|
48 | DATA CNAME( 1) / 'MINImize ' /
|
---|
49 | DATA CNAME( 2) / 'SEEk ' /
|
---|
50 | DATA CNAME( 3) / 'SIMplex ' /
|
---|
51 | DATA CNAME( 4) / 'MIGrad ' /
|
---|
52 | DATA CNAME( 5) / 'MINOs ' /
|
---|
53 | DATA CNAME( 6) / 'SET xxx ' /
|
---|
54 | DATA CNAME( 7) / 'SHOw xxx ' /
|
---|
55 | DATA CNAME( 8) / 'TOP of pag' /
|
---|
56 | DATA CNAME( 9) / 'FIX ' /
|
---|
57 | DATA CNAME(10) / 'REStore ' /
|
---|
58 | DATA CNAME(11) / 'RELease ' /
|
---|
59 | DATA CNAME(12) / 'SCAn ' /
|
---|
60 | DATA CNAME(13) / 'CONtour ' /
|
---|
61 | DATA CNAME(14) / 'HESse ' /
|
---|
62 | DATA CNAME(15) / 'SAVe ' /
|
---|
63 | DATA CNAME(16) / 'IMProve ' /
|
---|
64 | DATA CNAME(17) / 'CALl fcn ' /
|
---|
65 | DATA CNAME(18) / 'STAndard ' /
|
---|
66 | DATA CNAME(19) / 'END ' /
|
---|
67 | DATA CNAME(20) / 'EXIt ' /
|
---|
68 | DATA CNAME(21) / 'RETurn ' /
|
---|
69 | DATA CNAME(22) / 'CLEar ' /
|
---|
70 | DATA CNAME(23) / 'HELP ' /
|
---|
71 | DATA CNAME(24) / 'MNContour ' /
|
---|
72 | DATA CNAME(25) / 'STOp ' /
|
---|
73 | DATA CNAME(26) / 'JUMp ' /
|
---|
74 | DATA CNAME(27) / ' ' /
|
---|
75 | DATA CNAME(28) / ' ' /
|
---|
76 | DATA CNAME(29) / ' ' /
|
---|
77 | DATA CNAME(30) / ' ' /
|
---|
78 | DATA CNAME(31) / ' ' /
|
---|
79 | DATA CNAME(32) / ' ' /
|
---|
80 | DATA CNAME(33) / ' ' /
|
---|
81 | C obsolete commands:
|
---|
82 | DATA CNAME(34) / 'COVARIANCE' /
|
---|
83 | DATA CNAME(35) / 'PRINTOUT ' /
|
---|
84 | DATA CNAME(36) / 'GRADIENT ' /
|
---|
85 | DATA CNAME(37) / 'MATOUT ' /
|
---|
86 | DATA CNAME(38) / 'ERROR DEF ' /
|
---|
87 | DATA CNAME(39) / 'LIMITS ' /
|
---|
88 | DATA CNAME(40) / 'PUNCH ' /
|
---|
89 | DATA NNTOT/40/
|
---|
90 | C IERFLG is now (94.5) defined the same as ICONDN in MNCOMD
|
---|
91 | CC = 0: command executed normally
|
---|
92 | CC 1: command is blank, ignored
|
---|
93 | CC 2: command line unreadable, ignored
|
---|
94 | CC 3: unknown command, ignored
|
---|
95 | CC 4: abnormal termination (e.g., MIGRAD not converged)
|
---|
96 | CC 9: reserved
|
---|
97 | CC 10: END command
|
---|
98 | CC 11: EXIT or STOP command
|
---|
99 | CC 12: RETURN command
|
---|
100 | LK = LEN(COMAND)
|
---|
101 | IF (LK .GT. MAXCWD) LK=MAXCWD
|
---|
102 | CWORD = COMAND(1:LK)
|
---|
103 | C get upper case
|
---|
104 | DO 16 ICOL= 1, LK
|
---|
105 | DO 15 LET= 1, 26
|
---|
106 | IF (CWORD(ICOL:ICOL) .EQ. CLOWER(LET:LET))
|
---|
107 | + CWORD(ICOL:ICOL) = CUPPER(LET:LET)
|
---|
108 | 15 CONTINUE
|
---|
109 | 16 CONTINUE
|
---|
110 | C Copy the first MAXP arguments into COMMON (WORD7), making
|
---|
111 | C sure that WORD7(1)=0. if LLIST=0
|
---|
112 | DO 20 IW= 1, MAXP
|
---|
113 | WORD7(IW) = ZERO
|
---|
114 | IF (IW .LE. LLIST) WORD7(IW) = PLIST(IW)
|
---|
115 | 20 CONTINUE
|
---|
116 | ICOMND = ICOMND + 1
|
---|
117 | NFCNLC = NFCN
|
---|
118 | IF (CWORD(1:7).NE.'SET PRI' .OR. WORD7(1).GE.0.) THEN
|
---|
119 | IF (ISW(5) .GE. 0) THEN
|
---|
120 | LNOW = LLIST
|
---|
121 | IF (LNOW .GT. 4) LNOW=4
|
---|
122 | WRITE (ISYSWR,25) ICOMND,CWORD(1:LK),(PLIST(I),I=1,LNOW)
|
---|
123 | 25 FORMAT (1H ,10(1H*)/' **',I5,' **',A,4G12.4)
|
---|
124 | INONDE = 0
|
---|
125 | IF (LLIST .GT. LNOW) THEN
|
---|
126 | KLL = LLIST
|
---|
127 | IF (LLIST .GT. MAXP) THEN
|
---|
128 | INONDE = 1
|
---|
129 | KLL = MAXP
|
---|
130 | ENDIF
|
---|
131 | WRITE (CVBLNK,'(I2)') LK
|
---|
132 | C26 = '(11H **********,'//CVBLNK//'X,4G12.4)'
|
---|
133 | WRITE (ISYSWR,C26) (PLIST(I),I=LNOW+1,KLL)
|
---|
134 | ENDIF
|
---|
135 | WRITE (ISYSWR, '(1H ,10(1H*))' )
|
---|
136 | IF (INONDE .GT. 0) WRITE (ISYSWR, '(1H ,10(1H*),A,I3,A)')
|
---|
137 | + ' ERROR: ABOVE CALL TO MNEXCM TRIED TO PASS MORE THAN ',
|
---|
138 | + MAXP,' PARAMETERS.'
|
---|
139 | ENDIF
|
---|
140 | ENDIF
|
---|
141 | NFCNMX = WORD7(1)
|
---|
142 | IF (NFCNMX .LE. 0) NFCNMX = 200 + 100*NPAR + 5*NPAR**2
|
---|
143 | EPSI = WORD7(2)
|
---|
144 | IF (EPSI .LE. ZERO) EPSI = 0.1 * UP
|
---|
145 | LNEWMN = .FALSE.
|
---|
146 | LPHEAD = .TRUE.
|
---|
147 | ISW(1) = 0
|
---|
148 | IERFLG = 0
|
---|
149 | C look for command in list CNAME . . . . . . . . . .
|
---|
150 | DO 80 I= 1, NNTOT
|
---|
151 | IF (CWORD(1:3) .EQ. CNAME(I)(1:3)) GO TO 90
|
---|
152 | 80 CONTINUE
|
---|
153 | WRITE (ISYSWR,'(11X,''UNKNOWN COMMAND IGNORED:'',A)') COMAND
|
---|
154 | IERFLG = 3
|
---|
155 | GO TO 5000
|
---|
156 | C normal case: recognized MINUIT command . . . . . . .
|
---|
157 | 90 CONTINUE
|
---|
158 | IF (CWORD(1:4) .EQ. 'MINO') I = 5
|
---|
159 | IF (I.NE.6 .AND. I.NE.7 .AND. I.NE.8 .AND. I.NE.23) THEN
|
---|
160 | CFROM = CNAME(I)
|
---|
161 | NFCNFR = NFCN
|
---|
162 | ENDIF
|
---|
163 | C 1 2 3 4 5 6 7 8 9 10
|
---|
164 | GO TO ( 400, 200, 300, 400, 500, 700, 700, 800, 900,1000,
|
---|
165 | 1 1100,1200,1300,1400,1500,1600,1700,1800,1900,1900,
|
---|
166 | 2 1900,2200,2300,2400,1900,2600,3300,3300,3300,3300,
|
---|
167 | 3 3300,3300,3300,3400,3500,3600,3700,3800,3900,4000) , I
|
---|
168 | C . . . . . . . . . . seek
|
---|
169 | 200 CALL MNSEEK(FCN,FUTIL)
|
---|
170 | GO TO 5000
|
---|
171 | C . . . . . . . . . . simplex
|
---|
172 | 300 CALL MNSIMP(FCN,FUTIL)
|
---|
173 | IF (ISW(4) .LT. 1) IERFLG = 4
|
---|
174 | GO TO 5000
|
---|
175 | C . . . . . . migrad, minimize
|
---|
176 | 400 CONTINUE
|
---|
177 | NF = NFCN
|
---|
178 | APSI = EPSI
|
---|
179 | CALL MNMIGR(FCN,FUTIL)
|
---|
180 | CALL MNWERR
|
---|
181 | IF (ISW(4) .GE. 1) GO TO 5000
|
---|
182 | IERFLG = 4
|
---|
183 | IF (ISW(1) .EQ. 1) GO TO 5000
|
---|
184 | IF (CWORD(1:3) .EQ. 'MIG') GO TO 5000
|
---|
185 | NFCNMX = NFCNMX + NF - NFCN
|
---|
186 | NF = NFCN
|
---|
187 | CALL MNSIMP(FCN,FUTIL)
|
---|
188 | IF (ISW(1) .EQ. 1) GO TO 5000
|
---|
189 | NFCNMX = NFCNMX + NF - NFCN
|
---|
190 | CALL MNMIGR(FCN,FUTIL)
|
---|
191 | IF (ISW(4) .GE. 1) IERFLG = 0
|
---|
192 | CALL MNWERR
|
---|
193 | GO TO 5000
|
---|
194 | C . . . . . . . . . . minos
|
---|
195 | 500 CONTINUE
|
---|
196 | NSUPER = NFCN + 2*(NPAR+1)*NFCNMX
|
---|
197 | C possible loop over new minima
|
---|
198 | EPSI = 0.1 * UP
|
---|
199 | 510 CONTINUE
|
---|
200 | CALL MNCUVE(FCN,FUTIL)
|
---|
201 | CALL MNMNOS(FCN,FUTIL)
|
---|
202 | IF (.NOT. LNEWMN) GO TO 5000
|
---|
203 | CALL MNRSET(0)
|
---|
204 | CALL MNMIGR(FCN,FUTIL)
|
---|
205 | CALL MNWERR
|
---|
206 | IF (NFCN .LT. NSUPER) GO TO 510
|
---|
207 | WRITE (ISYSWR,'(/'' TOO MANY FUNCTION CALLS. MINOS GIVES UP''/)')
|
---|
208 | IERFLG = 4
|
---|
209 | GO TO 5000
|
---|
210 | C . . . . . . . . . .set, show
|
---|
211 | 700 CALL MNSET(FCN,FUTIL)
|
---|
212 | GO TO 5000
|
---|
213 | C . . . . . . . . . . top of page
|
---|
214 | 800 CONTINUE
|
---|
215 | WRITE (ISYSWR,'(1H1)')
|
---|
216 | GO TO 5000
|
---|
217 | C . . . . . . . . . . fix
|
---|
218 | 900 LTOFIX = .TRUE.
|
---|
219 | C . . (also release) ....
|
---|
220 | 901 CONTINUE
|
---|
221 | LFREED = .FALSE.
|
---|
222 | LFIXED = .FALSE.
|
---|
223 | IF (LLIST .EQ. 0) THEN
|
---|
224 | WRITE (ISYSWR,'(A,A)') CWORD,': NO PARAMETERS REQUESTED '
|
---|
225 | GO TO 5000
|
---|
226 | ENDIF
|
---|
227 | DO 950 ILIST= 1, LLIST
|
---|
228 | IEXT = PLIST(ILIST)
|
---|
229 | CHWHY = ' IS UNDEFINED.'
|
---|
230 | IF (IEXT .LE. 0) GO TO 930
|
---|
231 | IF (IEXT .GT. NU) GO TO 930
|
---|
232 | IF (NVARL(IEXT) .LT. 0) GO TO 930
|
---|
233 | CHWHY = ' IS CONSTANT. '
|
---|
234 | IF (NVARL(IEXT) .EQ. 0) GO TO 930
|
---|
235 | IINT = NIOFEX(IEXT)
|
---|
236 | IF (LTOFIX) THEN
|
---|
237 | CHWHY = ' ALREADY FIXED.'
|
---|
238 | IF (IINT .EQ. 0) GO TO 930
|
---|
239 | CALL MNFIXP(IINT,IERR)
|
---|
240 | IF (IERR .EQ. 0) THEN
|
---|
241 | LFIXED = .TRUE.
|
---|
242 | ELSE
|
---|
243 | IERFLG = 4
|
---|
244 | ENDIF
|
---|
245 | ELSE
|
---|
246 | CHWHY = ' ALREADY VARIABLE.'
|
---|
247 | IF (IINT .GT. 0) GO TO 930
|
---|
248 | KRL = -IABS(IEXT)
|
---|
249 | CALL MNFREE(KRL)
|
---|
250 | LFREED = .TRUE.
|
---|
251 | ENDIF
|
---|
252 | GO TO 950
|
---|
253 | 930 WRITE (ISYSWR,'(A,I4,A,A)') ' PARAMETER',IEXT,CHWHY,' IGNORED.'
|
---|
254 | 950 CONTINUE
|
---|
255 | IF (LFREED .OR. LFIXED) CALL MNRSET(0)
|
---|
256 | IF (LFREED) THEN
|
---|
257 | ISW(2) = 0
|
---|
258 | DCOVAR = 1.
|
---|
259 | EDM = BIGEDM
|
---|
260 | ISW(4) = 0
|
---|
261 | ENDIF
|
---|
262 | CALL MNWERR
|
---|
263 | IF (ISW(5) .GT. 1) CALL MNPRIN(5,AMIN)
|
---|
264 | GO TO 5000
|
---|
265 | C . . . . . . . . . . restore
|
---|
266 | 1000 IT = WORD7(1)
|
---|
267 | IF (IT.GT.1 .OR. IT.LT.0) GO TO 1005
|
---|
268 | LFREED = (NPFIX .GT. 0)
|
---|
269 | CALL MNFREE(IT)
|
---|
270 | IF (LFREED) THEN
|
---|
271 | CALL MNRSET(0)
|
---|
272 | ISW(2) = 0
|
---|
273 | DCOVAR = 1.
|
---|
274 | EDM = BIGEDM
|
---|
275 | ENDIF
|
---|
276 | GO TO 5000
|
---|
277 | 1005 WRITE (ISYSWR,'(A,I4)') ' IGNORED. UNKNOWN ARGUMENT:',IT
|
---|
278 | IERFLG = 3
|
---|
279 | GO TO 5000
|
---|
280 | C . . . . . . . . . . release
|
---|
281 | 1100 LTOFIX = .FALSE.
|
---|
282 | GO TO 901
|
---|
283 | C . . . . . . . . . . scan . . .
|
---|
284 | 1200 CONTINUE
|
---|
285 | IEXT = WORD7(1)
|
---|
286 | IF (IEXT .LE. 0) GO TO 1210
|
---|
287 | IT2 = 0
|
---|
288 | IF (IEXT .LE. NU) IT2 = NIOFEX(IEXT)
|
---|
289 | IF (IT2 .LE. 0) GO TO 1250
|
---|
290 | 1210 CALL MNSCAN(FCN,FUTIL)
|
---|
291 | GO TO 5000
|
---|
292 | 1250 WRITE (ISYSWR,'(A,I4,A)') ' PARAMETER',IEXT,' NOT VARIABLE.'
|
---|
293 | IERFLG = 3
|
---|
294 | GO TO 5000
|
---|
295 | C . . . . . . . . . . contour
|
---|
296 | 1300 CONTINUE
|
---|
297 | KE1 = WORD7(1)
|
---|
298 | KE2 = WORD7(2)
|
---|
299 | IF (KE1 .EQ. 0) THEN
|
---|
300 | IF (NPAR .EQ. 2) THEN
|
---|
301 | KE1 = NEXOFI(1)
|
---|
302 | KE2 = NEXOFI(2)
|
---|
303 | ELSE
|
---|
304 | WRITE (ISYSWR,'(A,A)') CWORD,': NO PARAMETERS REQUESTED '
|
---|
305 | IERFLG = 3
|
---|
306 | GO TO 5000
|
---|
307 | ENDIF
|
---|
308 | ENDIF
|
---|
309 | NFCNMX = 1000
|
---|
310 | CALL MNCNTR(FCN,KE1,KE2,IERRF,FUTIL)
|
---|
311 | IF (IERRF .GT. 0) IERFLG = 3
|
---|
312 | GO TO 5000
|
---|
313 | C . . . . . . . . . . hesse
|
---|
314 | 1400 CONTINUE
|
---|
315 | CALL MNHESS(FCN,FUTIL)
|
---|
316 | CALL MNWERR
|
---|
317 | IF (ISW(5) .GE. 0) CALL MNPRIN(2, AMIN)
|
---|
318 | IF (ISW(5) .GE. 1) CALL MNMATU(1)
|
---|
319 | GO TO 5000
|
---|
320 | C . . . . . . . . . . save
|
---|
321 | 1500 CONTINUE
|
---|
322 | CALL MNSAVE
|
---|
323 | GO TO 5000
|
---|
324 | C . . . . . . . . . . improve
|
---|
325 | 1600 CONTINUE
|
---|
326 | CALL MNCUVE(FCN,FUTIL)
|
---|
327 | CALL MNIMPR(FCN,FUTIL)
|
---|
328 | IF (LNEWMN) GO TO 400
|
---|
329 | IERFLG = 4
|
---|
330 | GO TO 5000
|
---|
331 | C . . . . . . . . . . call fcn
|
---|
332 | 1700 IFLAG = WORD7(1)
|
---|
333 | NPARX = NPAR
|
---|
334 | F = UNDEFI
|
---|
335 | CALL FCN(NPARX,GIN,F,U,IFLAG,FUTIL)
|
---|
336 | NFCN = NFCN + 1
|
---|
337 | NOWPRT = 0
|
---|
338 | IF (F .NE. UNDEFI) THEN
|
---|
339 | IF (AMIN .EQ. UNDEFI) THEN
|
---|
340 | AMIN = F
|
---|
341 | NOWPRT = 1
|
---|
342 | ELSE IF (F .LT. AMIN) THEN
|
---|
343 | AMIN = F
|
---|
344 | NOWPRT = 1
|
---|
345 | ENDIF
|
---|
346 | IF (ISW(5).GE.0 .AND. IFLAG.LE.5 .AND. NOWPRT.EQ.1)
|
---|
347 | + CALL MNPRIN(5,AMIN)
|
---|
348 | IF (IFLAG .EQ. 3) FVAL3=F
|
---|
349 | ENDIF
|
---|
350 | IF (IFLAG .GT. 5) CALL MNRSET(1)
|
---|
351 | GO TO 5000
|
---|
352 | C . . . . . . . . . . standard
|
---|
353 | 1800 CALL STAND
|
---|
354 | GO TO 5000
|
---|
355 | C . . . return, stop, end, exit
|
---|
356 | 1900 IT = WORD7(1)
|
---|
357 | IF (FVAL3 .NE. AMIN .AND. IT .EQ. 0) THEN
|
---|
358 | IFLAG = 3
|
---|
359 | IF (ISW(5) .GE. 0)
|
---|
360 | +WRITE (ISYSWR,'(/A/)') ' CALL TO USER FUNCTION WITH IFLAG = 3'
|
---|
361 | NPARX = NPAR
|
---|
362 | CALL FCN(NPARX,GIN,F,U,IFLAG,FUTIL)
|
---|
363 | NFCN = NFCN + 1
|
---|
364 | FVAL3 = F
|
---|
365 | ENDIF
|
---|
366 | IERFLG = 11
|
---|
367 | IF (CWORD(1:3) .EQ. 'END') IERFLG = 10
|
---|
368 | IF (CWORD(1:3) .EQ. 'RET') IERFLG = 12
|
---|
369 | GO TO 5000
|
---|
370 | C . . . . . . . . . . clear
|
---|
371 | 2200 CONTINUE
|
---|
372 | CALL MNCLER
|
---|
373 | IF (ISW(5) .GE. 1) WRITE (ISYSWR,'(A)')
|
---|
374 | + ' MINUIT MEMORY CLEARED. NO PARAMETERS NOW DEFINED.'
|
---|
375 | GO TO 5000
|
---|
376 | C . . . . . . . . . . help
|
---|
377 | 2300 CONTINUE
|
---|
378 | CCCC IF (INDEX(CWORD,'SHO') .GT. 0) GO TO 700
|
---|
379 | CCCC IF (INDEX(CWORD,'SET') .GT. 0) GO TO 700
|
---|
380 | KCOL = 0
|
---|
381 | DO 2310 ICOL= 5,LK
|
---|
382 | IF (CWORD(ICOL:ICOL) .EQ. ' ') GO TO 2310
|
---|
383 | KCOL = ICOL
|
---|
384 | GO TO 2320
|
---|
385 | 2310 CONTINUE
|
---|
386 | 2320 CONTINUE
|
---|
387 | IF (KCOL .EQ. 0) THEN
|
---|
388 | COMD = '* '
|
---|
389 | ELSE
|
---|
390 | COMD = CWORD(KCOL:LK)
|
---|
391 | ENDIF
|
---|
392 | CALL MNHELP(COMD,ISYSWR)
|
---|
393 | GO TO 5000
|
---|
394 | C . . . . . . . . . . MNContour
|
---|
395 | 2400 CONTINUE
|
---|
396 | EPSI = 0.05 * UP
|
---|
397 | KE1 = WORD7(1)
|
---|
398 | KE2 = WORD7(2)
|
---|
399 | IF (KE1.EQ.0 .AND. NPAR.EQ.2) THEN
|
---|
400 | KE1 = NEXOFI(1)
|
---|
401 | KE2 = NEXOFI(2)
|
---|
402 | ENDIF
|
---|
403 | NPTU = WORD7(3)
|
---|
404 | IF (NPTU .LE. 0) NPTU=20
|
---|
405 | IF (NPTU .GT. MXPT) NPTU = MXPT
|
---|
406 | NFCNMX = 100*(NPTU+5)*(NPAR+1)
|
---|
407 | CALL MNCONT(FCN,KE1,KE2,NPTU,XPTU,YPTU,IERRF,FUTIL)
|
---|
408 | IF (IERRF .LT. NPTU) IERFLG = 4
|
---|
409 | IF (IERRF .EQ. -1) IERFLG = 3
|
---|
410 | GO TO 5000
|
---|
411 | C . . . . . . . . . . jump
|
---|
412 | 2600 CONTINUE
|
---|
413 | STEP = WORD7(1)
|
---|
414 | IF (STEP .LE. ZERO) STEP = 2.
|
---|
415 | RNO = 0.
|
---|
416 | IZERO = 0
|
---|
417 | DO 2620 I= 1, NPAR
|
---|
418 | CALL MNRN15(RNO,IZERO)
|
---|
419 | RNO = 2.0*RNO - 1.0
|
---|
420 | 2620 X(I) = X(I) + RNO*STEP*WERR(I)
|
---|
421 | CALL MNINEX(X)
|
---|
422 | CALL MNAMIN(FCN,FUTIL)
|
---|
423 | CALL MNRSET(0)
|
---|
424 | GO TO 5000
|
---|
425 | C . . . . . . . . . . blank line
|
---|
426 | 3300 CONTINUE
|
---|
427 | WRITE (ISYSWR,'(10X,A)') ' BLANK COMMAND IGNORED.'
|
---|
428 | IERFLG = 1
|
---|
429 | GO TO 5000
|
---|
430 | C . . . . . . . . obsolete commands . . . . . . . . . . . . . .
|
---|
431 | C . . . . . . . . . . covariance
|
---|
432 | 3400 CONTINUE
|
---|
433 | WRITE (ISYSWR, '(A)') ' THE "COVARIANCE" COMMAND IS OSBSOLETE.',
|
---|
434 | + ' THE COVARIANCE MATRIX IS NOW SAVED IN A DIFFERENT FORMAT',
|
---|
435 | + ' WITH THE "SAVE" COMMAND AND READ IN WITH:"SET COVARIANCE"'
|
---|
436 | IERFLG = 3
|
---|
437 | GO TO 5000
|
---|
438 | C . . . . . . . . . . printout
|
---|
439 | 3500 CONTINUE
|
---|
440 | CNEWAY = 'SET PRInt '
|
---|
441 | GO TO 3100
|
---|
442 | C . . . . . . . . . . gradient
|
---|
443 | 3600 CONTINUE
|
---|
444 | CNEWAY = 'SET GRAd '
|
---|
445 | GO TO 3100
|
---|
446 | C . . . . . . . . . . matout
|
---|
447 | 3700 CONTINUE
|
---|
448 | CNEWAY = 'SHOW COVar'
|
---|
449 | GO TO 3100
|
---|
450 | C . . . . . . . . . error def
|
---|
451 | 3800 CONTINUE
|
---|
452 | CNEWAY = 'SET ERRdef'
|
---|
453 | GO TO 3100
|
---|
454 | C . . . . . . . . . . limits
|
---|
455 | 3900 CONTINUE
|
---|
456 | CNEWAY = 'SET LIMits'
|
---|
457 | GO TO 3100
|
---|
458 | C . . . . . . . . . . punch
|
---|
459 | 4000 CONTINUE
|
---|
460 | CNEWAY = 'SAVE '
|
---|
461 | C ....... come from obsolete commands
|
---|
462 | 3100 WRITE (ISYSWR, 3101) CWORD,CNEWAY
|
---|
463 | 3101 FORMAT (' OBSOLETE COMMAND:',1X,A10,5X,'PLEASE USE:',1X,A10)
|
---|
464 | CWORD = CNEWAY
|
---|
465 | IF (CWORD .EQ. 'SAVE ') GO TO 1500
|
---|
466 | GO TO 700
|
---|
467 | C . . . . . . . . . . . . . . . . . .
|
---|
468 | 5000 RETURN
|
---|
469 | END
|
---|