[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"
|
---|
| 12 | CC to print function contours in two variables, on line printer
|
---|
| 13 | CC
|
---|
| 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'/
|
---|
| 21 | C 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
|
---|
| 28 | C
|
---|
| 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
|
---|
| 54 | C 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
|
---|
| 71 | C 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
|
---|
| 91 | C loop over rows
|
---|
| 92 | DO 280 IY= 1, NY
|
---|
| 93 | UNEXT = U(KE2) - BWIDY
|
---|
| 94 | C 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
|
---|
| 102 | C 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
|
---|
| 109 | C 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
|
---|
| 119 | C print a row of the contour plot
|
---|
| 120 | WRITE (ISYSWR,'(1X,G12.4,1X,A)') YLABEL,CHLN(1:NX)
|
---|
| 121 | 280 CONTINUE
|
---|
| 122 | C 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)
|
---|
| 128 | C 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'
|
---|
| 146 | C 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
|
---|