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