| [2403] | 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
 | 
|---|