source: Sophya/trunk/SophyaExt/CodeMinuit/code/mnlims.F@ 4000

Last change on this file since 4000 was 2403, checked in by cmv, 22 years ago

Creation du module de code source de MINUIT (CERNLIB) extrait par CMV

cmv 11/06/2003

File size: 4.1 KB
Line 
1*
2* $Id: mnlims.F,v 1.1.1.1 2003-06-11 14:18:28 cmv Exp $
3*
4* $Log: not supported by cvs2svn $
5* Revision 1.2 1996/03/15 18:02:48 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:30 mclareni
21* Minuit
22*
23*
24#include "minuit/pilot.h"
25 SUBROUTINE MNLIMS
26#include "minuit/d506dp.inc"
27CC Called from MNSET
28CC Interprets the SET LIM command, to reset the parameter limits
29CC
30#include "minuit/d506cm.inc"
31C
32 CFROM = 'SET LIM '
33 NFCNFR = NFCN
34 CSTATU= 'NO CHANGE '
35 I2 = WORD7(1)
36 IF (I2 .GT. MAXEXT .OR. I2 .LT. 0) GO TO 900
37 IF (I2 .GT. 0) GO TO 30
38C set limits on all parameters
39 NEWCOD = 4
40 IF (WORD7(2) .EQ. WORD7(3)) NEWCOD = 1
41 DO 20 INU= 1, NU
42 IF (NVARL(INU) .LE. 0) GO TO 20
43 IF (NVARL(INU).EQ.1 .AND. NEWCOD.EQ.1) GO TO 20
44 KINT = NIOFEX(INU)
45C see if parameter has been fixed
46 IF (KINT .LE. 0) THEN
47 IF (ISW(5) .GE. 0) WRITE (ISYSWR,'(11X,A,I3)')
48 + ' LIMITS NOT CHANGED FOR FIXED PARAMETER:',INU
49 GO TO 20
50 ENDIF
51 IF (NEWCOD .EQ. 1) THEN
52C remove limits from parameter
53 IF (ISW(5) .GT. 0) WRITE (ISYSWR,134) INU
54 CSTATU = 'NEW LIMITS'
55 CALL MNDXDI(X(KINT),KINT,DXDI)
56 SNEW = GSTEP(KINT)*DXDI
57 GSTEP(KINT) = ABS(SNEW)
58 NVARL(INU) = 1
59 ELSE
60C put limits on parameter
61 ALIM(INU) = MIN(WORD7(2),WORD7(3))
62 BLIM(INU) = MAX(WORD7(2),WORD7(3))
63 IF (ISW(5) .GT. 0) WRITE (ISYSWR,237) INU,ALIM(INU),BLIM(INU)
64 NVARL(INU) = 4
65 CSTATU = 'NEW LIMITS'
66 GSTEP(KINT) = -0.1
67 ENDIF
68 20 CONTINUE
69 GO TO 900
70C set limits on one parameter
71 30 IF (NVARL(I2) .LE. 0) THEN
72 WRITE (ISYSWR,'(A,I3,A)') ' PARAMETER ',I2,' IS NOT VARIABLE.'
73 GO TO 900
74 ENDIF
75 KINT = NIOFEX(I2)
76C see if parameter was fixed
77 IF (KINT .EQ. 0) THEN
78 WRITE (ISYSWR,'(A,I3)')
79 + ' REQUEST TO CHANGE LIMITS ON FIXED PARAMETER:',I2
80 DO 82 IFX= 1, NPFIX
81 IF (I2 .EQ. IPFIX(IFX)) GO TO 92
82 82 CONTINUE
83 WRITE (ISYSWR,'(A)') ' MINUIT BUG IN MNLIMS. SEE F. JAMES'
84 92 CONTINUE
85 ENDIF
86 IF (WORD7(2) .NE. WORD7(3)) GO TO 235
87C remove limits
88 IF (NVARL(I2) .NE. 1) THEN
89 IF (ISW(5) .GT. 0) WRITE (ISYSWR,134) I2
90 134 FORMAT (30H LIMITS REMOVED FROM PARAMETER ,I4)
91 CSTATU = 'NEW LIMITS'
92 IF (KINT .LE. 0) THEN
93 GSTEPS(IFX) = ABS(GSTEPS(IFX))
94 ELSE
95 CALL MNDXDI(X(KINT),KINT,DXDI)
96 IF (ABS(DXDI) .LT. 0.01) DXDI=0.01
97 GSTEP(KINT) = ABS(GSTEP(KINT)*DXDI)
98 GRD(KINT) = GRD(KINT)*DXDI
99 ENDIF
100 NVARL(I2) = 1
101 ELSE
102 WRITE (ISYSWR,'(A,I3)') ' NO LIMITS SPECIFIED. PARAMETER ',
103 + I2,' IS ALREADY UNLIMITED. NO CHANGE.'
104 ENDIF
105 GO TO 900
106C put on limits
107 235 ALIM(I2) = MIN(WORD7(2),WORD7(3))
108 BLIM(I2) = MAX(WORD7(2),WORD7(3))
109 NVARL(I2) = 4
110 IF (ISW(5) .GT. 0) WRITE (ISYSWR,237) I2,ALIM(I2),BLIM(I2)
111 237 FORMAT (10H PARAMETER ,I3, 14H LIMITS SET TO ,2G15.5)
112 CSTATU = 'NEW LIMITS'
113 IF (KINT .LE. 0) THEN
114 GSTEPS(IFX) = -0.1
115 ELSE
116 GSTEP(KINT) = -0.1
117 ENDIF
118C
119 900 CONTINUE
120 IF (CSTATU .NE. 'NO CHANGE ') THEN
121 CALL MNEXIN(X)
122 CALL MNRSET(1)
123 ENDIF
124 RETURN
125 END
Note: See TracBrowser for help on using the repository browser.