source: Sophya/trunk/SophyaExt/CodeMinuit/code/mncntr.F

Last change on this file 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: 5.0 KB
RevLine 
[2403]1*
2* $Id: mncntr.F,v 1.1.1.1 2003-06-11 14:18:26 cmv Exp $
3*
4* $Log: not supported by cvs2svn $
5* Revision 1.1.1.1 1996/03/07 14:31:28 mclareni
6* Minuit
7*
8*
9#include "minuit/pilot.h"
10 SUBROUTINE MNCNTR(FCN,KE1,KE2,IERRF,FUTIL)
11#include "minuit/d506dp.inc"
12CC to print function contours in two variables, on line printer
13CC
14#include "minuit/d506cm.inc"
15 EXTERNAL FCN,FUTIL
16 PARAMETER (NUMBCS=20,NXMAX=115)
17 DIMENSION CONTUR(NUMBCS), FCNA(NXMAX),FCNB(NXMAX)
18 CHARACTER CLABEL*(NUMBCS)
19 CHARACTER CHLN*(NXMAX),CHMID*(NXMAX),CHZERO*(NXMAX)
20 DATA CLABEL/'0123456789ABCDEFGHIJ'/
21C input arguments: parx, pary, devs, ngrid
22 IF (KE1.LE.0 .OR. KE2.LE.0) GO TO 1350
23 IF (KE1.GT.NU .OR. KE2.GT.NU) GO TO 1350
24 KI1 = NIOFEX(KE1)
25 KI2 = NIOFEX(KE2)
26 IF (KI1.LE.0 .OR. KI2.LE.0) GO TO 1350
27 IF (KI1 .EQ. KI2) GO TO 1350
28C
29 IF (ISW(2) .LT. 1) THEN
30 CALL MNHESS(FCN,FUTIL)
31 CALL MNWERR
32 ENDIF
33 NPARX = NPAR
34 XSAV = U(KE1)
35 YSAV = U(KE2)
36 DEVS = WORD7(3)
37 IF (DEVS .LE. ZERO) DEVS=2.
38 XLO = U(KE1) - DEVS*WERR(KI1)
39 XUP = U(KE1) + DEVS*WERR(KI1)
40 YLO = U(KE2) - DEVS*WERR(KI2)
41 YUP = U(KE2) + DEVS*WERR(KI2)
42 NGRID = WORD7(4)
43 IF (NGRID .LE. 0) THEN
44 NGRID=25
45 NX = MIN(NPAGWD-15,NGRID)
46 NY = MIN(NPAGLN-7, NGRID)
47 ELSE
48 NX = NGRID
49 NY = NGRID
50 ENDIF
51 IF (NX .LT. 11) NX=11
52 IF (NY .LT. 11) NY=11
53 IF (NX .GE. NXMAX) NX=NXMAX-1
54C ask if parameter outside limits
55 IF (NVARL(KE1) .GT. 1) THEN
56 IF (XLO .LT. ALIM(KE1)) XLO = ALIM(KE1)
57 IF (XUP .GT. BLIM(KE1)) XUP = BLIM(KE1)
58 ENDIF
59 IF (NVARL(KE2) .GT. 1) THEN
60 IF (YLO .LT. ALIM(KE2)) YLO = ALIM(KE2)
61 IF (YUP .GT. BLIM(KE2)) YUP = BLIM(KE2)
62 ENDIF
63 BWIDX = (XUP-XLO)/REAL(NX)
64 BWIDY = (YUP-YLO)/REAL(NY)
65 IXMID = INT((XSAV-XLO)*REAL(NX)/(XUP-XLO)) + 1
66 IF (AMIN .EQ. UNDEFI) CALL MNAMIN(FCN,FUTIL)
67 DO 185 I= 1, NUMBCS
68 CONTUR(I) = AMIN + UP*FLOAT(I-1)**2
69 185 CONTINUE
70 CONTUR(1) = CONTUR(1) + 0.01*UP
71C fill FCNB to prepare first row, and find column zero
72 U(KE2) = YUP
73 IXZERO = 0
74 XB4 = ONE
75 DO 200 IX= 1, NX+1
76 U(KE1) = XLO + REAL(IX-1)*BWIDX
77 CALL FCN(NPARX,GIN,FF,U,4,FUTIL)
78 FCNB(IX) = FF
79 IF (XB4.LT.ZERO .AND. U(KE1).GT.ZERO) IXZERO = IX-1
80 XB4 = U(KE1)
81 CHMID(IX:IX) = '*'
82 CHZERO(IX:IX)= '-'
83 200 CONTINUE
84 WRITE (ISYSWR,'(A,I3,A,A)') ' Y-AXIS: PARAMETER ',
85 + KE2,': ',CPNAM(KE2)
86 IF (IXZERO .GT. 0) THEN
87 CHZERO(IXZERO:IXZERO) = '+'
88 CHLN = ' '
89 WRITE (ISYSWR,'(12X,A,A)') CHLN(1:IXZERO),'X=0'
90 ENDIF
91C loop over rows
92 DO 280 IY= 1, NY
93 UNEXT = U(KE2) - BWIDY
94C prepare this line's background pattern for contour
95 CHLN = ' '
96 CHLN(IXMID:IXMID) = '*'
97 IF (IXZERO .NE. 0) CHLN(IXZERO:IXZERO) = ':'
98 IF (U(KE2).GT.YSAV .AND. UNEXT.LT.YSAV) CHLN=CHMID
99 IF (U(KE2).GT.ZERO .AND. UNEXT.LT.ZERO) CHLN=CHZERO
100 U(KE2) = UNEXT
101 YLABEL = U(KE2) + 0.5*BWIDY
102C move FCNB to FCNA and fill FCNB with next row
103 DO 220 IX= 1, NX+1
104 FCNA(IX) = FCNB(IX)
105 U(KE1) = XLO + REAL(IX-1)*BWIDX
106 CALL FCN(NPARX,GIN,FF,U,4,FUTIL)
107 FCNB(IX) = FF
108 220 CONTINUE
109C look for contours crossing the FCNxy squares
110 DO 250 IX= 1, NX
111 FMX = MAX(FCNA(IX),FCNB(IX),FCNA(IX+1),FCNB(IX+1))
112 FMN = MIN(FCNA(IX),FCNB(IX),FCNA(IX+1),FCNB(IX+1))
113 DO 230 ICS= 1, NUMBCS
114 IF (CONTUR(ICS) .GT. FMN) GO TO 240
115 230 CONTINUE
116 GO TO 250
117 240 IF (CONTUR(ICS) .LT. FMX) CHLN(IX:IX)=CLABEL(ICS:ICS)
118 250 CONTINUE
119C print a row of the contour plot
120 WRITE (ISYSWR,'(1X,G12.4,1X,A)') YLABEL,CHLN(1:NX)
121 280 CONTINUE
122C contours printed, label x-axis
123 CHLN = ' '
124 CHLN( 1: 1) = 'I'
125 CHLN(IXMID:IXMID) = 'I'
126 CHLN(NX:NX) = 'I'
127 WRITE (ISYSWR,'(14X,A)') CHLN(1:NX)
128C the hardest of all: print x-axis scale!
129 CHLN = ' '
130 IF (NX .LE. 26) THEN
131 NL = MAX(NX-12,2)
132 NL2 = NL/2
133 WRITE (ISYSWR,'(8X,G12.4,A,G12.4)') XLO,CHLN(1:NL),XUP
134 WRITE (ISYSWR,'(14X,A,G12.4)') CHLN(1:NL2),XSAV
135 ELSE
136 NL = MAX(NX-24,2)/2
137 NL2 = NL
138 IF (NL .GT. 10) NL2=NL-6
139 WRITE (ISYSWR,'(8X,G12.4,A,G12.4,A,G12.4)') XLO,
140 + CHLN(1:NL),XSAV,CHLN(1:NL2),XUP
141 ENDIF
142 WRITE (ISYSWR,'(6X,A,I3,A,A,A,G12.4)') ' X-AXIS: PARAMETER',
143 + KE1,': ',CPNAM(KE1),' ONE COLUMN=',BWIDX
144 WRITE (ISYSWR,'(A,G12.4,A,G12.4,A)') ' FUNCTION VALUES: F(I)=',
145 + AMIN,' +',UP,' *I**2'
146C finished. reset input values
147 U(KE1) = XSAV
148 U(KE2) = YSAV
149 IERRF = 0
150 RETURN
151 1350 WRITE (ISYSWR,1351)
152 1351 FORMAT (' INVALID PARAMETER NUMBER(S) REQUESTED. IGNORED.' /)
153 IERRF = 1
154 RETURN
155 END
Note: See TracBrowser for help on using the repository browser.