| [2403] | 1 | * | 
|---|
|  | 2 | * $Id: mnfree.F,v 1.1.1.1 2003-06-11 14:18:27 cmv Exp $ | 
|---|
|  | 3 | * | 
|---|
|  | 4 | * $Log: not supported by cvs2svn $ | 
|---|
|  | 5 | * Revision 1.1.1.1  1996/03/07 14:31:29  mclareni | 
|---|
|  | 6 | * Minuit | 
|---|
|  | 7 | * | 
|---|
|  | 8 | * | 
|---|
|  | 9 | #include "minuit/pilot.h" | 
|---|
|  | 10 | SUBROUTINE MNFREE(K) | 
|---|
|  | 11 | #include "minuit/d506dp.inc" | 
|---|
|  | 12 | CC        Restores one or more fixed parameter(s) to variable status | 
|---|
|  | 13 | CC        by inserting it into the internal parameter list at the | 
|---|
|  | 14 | CC        appropriate place. | 
|---|
|  | 15 | CC | 
|---|
|  | 16 | #include "minuit/d506cm.inc" | 
|---|
|  | 17 | C--       K = 0 means restore all parameters | 
|---|
|  | 18 | C--       K = 1 means restore the last parameter fixed | 
|---|
|  | 19 | C--       K = -I means restore external parameter I (if possible) | 
|---|
|  | 20 | C--       IQ = fix-location where internal parameters were stored | 
|---|
|  | 21 | C--       IR = external number of parameter being restored | 
|---|
|  | 22 | C--       IS = internal number of parameter being restored | 
|---|
|  | 23 | IF (K .GT. 1)  WRITE (ISYSWR,510) | 
|---|
|  | 24 | IF (NPFIX .LT. 1)  WRITE (ISYSWR,500) | 
|---|
|  | 25 | IF (K.EQ.1 .OR. K.EQ.0)  GO TO 40 | 
|---|
|  | 26 | C                   release parameter with specified external number | 
|---|
|  | 27 | KA = IABS(K) | 
|---|
|  | 28 | IF (NIOFEX(KA) .EQ. 0)  GO TO 15 | 
|---|
|  | 29 | WRITE (ISYSWR,540) | 
|---|
|  | 30 | 540 FORMAT (' IGNORED.  PARAMETER SPECIFIED IS ALREADY VARIABLE.') | 
|---|
|  | 31 | RETURN | 
|---|
|  | 32 | 15 IF (NPFIX .LT. 1)  GO TO 21 | 
|---|
|  | 33 | DO 20 IK= 1, NPFIX | 
|---|
|  | 34 | IF (IPFIX(IK) .EQ. KA)  GO TO 24 | 
|---|
|  | 35 | 20 CONTINUE | 
|---|
|  | 36 | 21 WRITE (ISYSWR,530) KA | 
|---|
|  | 37 | 530 FORMAT (' PARAMETER',I4,' NOT FIXED.  CANNOT BE RELEASED.') | 
|---|
|  | 38 | RETURN | 
|---|
|  | 39 | 24 IF (IK .EQ. NPFIX)  GO TO 40 | 
|---|
|  | 40 | C                   move specified parameter to end of list | 
|---|
|  | 41 | IPSAV = KA | 
|---|
|  | 42 | XV = XS(IK) | 
|---|
|  | 43 | XTV = XTS(IK) | 
|---|
|  | 44 | DIRINV = DIRINS(IK) | 
|---|
|  | 45 | GRDV = GRDS(IK) | 
|---|
|  | 46 | G2V = G2S(IK) | 
|---|
|  | 47 | GSTEPV = GSTEPS(IK) | 
|---|
|  | 48 | DO 30 I= IK+1,NPFIX | 
|---|
|  | 49 | IPFIX(I-1) = IPFIX(I) | 
|---|
|  | 50 | XS(I-1) = XS(I) | 
|---|
|  | 51 | XTS(I-1) = XTS(I) | 
|---|
|  | 52 | DIRINS(I-1) = DIRINS(I) | 
|---|
|  | 53 | GRDS(I-1) = GRDS(I) | 
|---|
|  | 54 | G2S(I-1) = G2S(I) | 
|---|
|  | 55 | GSTEPS(I-1) = GSTEPS(I) | 
|---|
|  | 56 | 30    CONTINUE | 
|---|
|  | 57 | IPFIX(NPFIX) = IPSAV | 
|---|
|  | 58 | XS(NPFIX) = XV | 
|---|
|  | 59 | XTS(NPFIX) = XTV | 
|---|
|  | 60 | DIRINS(NPFIX) = DIRINV | 
|---|
|  | 61 | GRDS(NPFIX) = GRDV | 
|---|
|  | 62 | G2S(NPFIX) = G2V | 
|---|
|  | 63 | GSTEPS(NPFIX) = GSTEPV | 
|---|
|  | 64 | C                restore last parameter in fixed list  -- IPFIX(NPFIX) | 
|---|
|  | 65 | 40 CONTINUE | 
|---|
|  | 66 | IF (NPFIX .LT. 1)  GO TO 300 | 
|---|
|  | 67 | IR = IPFIX(NPFIX) | 
|---|
|  | 68 | IS = 0 | 
|---|
|  | 69 | DO 100 IK= NU, IR, -1 | 
|---|
|  | 70 | IF (NIOFEX(IK) .GT. 0) THEN | 
|---|
|  | 71 | LC = NIOFEX(IK) + 1 | 
|---|
|  | 72 | IS = LC - 1 | 
|---|
|  | 73 | NIOFEX(IK) = LC | 
|---|
|  | 74 | NEXOFI(LC) = IK | 
|---|
|  | 75 | X(LC)     = X(LC-1) | 
|---|
|  | 76 | XT(LC)    = XT(LC-1) | 
|---|
|  | 77 | DIRIN(LC) = DIRIN(LC-1) | 
|---|
|  | 78 | WERR(LC)  = WERR(LC-1) | 
|---|
|  | 79 | GRD(LC)   = GRD(LC-1) | 
|---|
|  | 80 | G2(LC)    = G2(LC-1) | 
|---|
|  | 81 | GSTEP(LC) = GSTEP(LC-1) | 
|---|
|  | 82 | ENDIF | 
|---|
|  | 83 | 100 CONTINUE | 
|---|
|  | 84 | NPAR = NPAR + 1 | 
|---|
|  | 85 | IF (IS .EQ. 0)   IS = NPAR | 
|---|
|  | 86 | NIOFEX(IR) = IS | 
|---|
|  | 87 | NEXOFI(IS) = IR | 
|---|
|  | 88 | IQ = NPFIX | 
|---|
|  | 89 | X(IS) = XS(IQ) | 
|---|
|  | 90 | XT(IS) = XTS(IQ) | 
|---|
|  | 91 | DIRIN(IS) = DIRINS(IQ) | 
|---|
|  | 92 | WERR(IS)  = DIRINS(IQ) | 
|---|
|  | 93 | GRD(IS) = GRDS(IQ) | 
|---|
|  | 94 | G2(IS) = G2S(IQ) | 
|---|
|  | 95 | GSTEP(IS) = GSTEPS(IQ) | 
|---|
|  | 96 | NPFIX = NPFIX - 1 | 
|---|
|  | 97 | ISW(2) = 0 | 
|---|
|  | 98 | DCOVAR = 1. | 
|---|
|  | 99 | IF (ISW(5)-ITAUR .GE. 1)  WRITE(ISYSWR,520) IR,CPNAM(IR) | 
|---|
|  | 100 | IF (K.EQ.0)  GO TO 40 | 
|---|
|  | 101 | 300 CONTINUE | 
|---|
|  | 102 | C         if different from internal, external values are taken | 
|---|
|  | 103 | CALL MNEXIN(X) | 
|---|
|  | 104 | 400 RETURN | 
|---|
|  | 105 | 500 FORMAT (' CALL TO MNFREE IGNORED.  THERE ARE NO FIXED PA', | 
|---|
|  | 106 | + 'RAMETERS'/) | 
|---|
|  | 107 | 510 FORMAT (' CALL TO MNFREE IGNORED.  ARGUMENT GREATER THAN ONE'/) | 
|---|
|  | 108 | 520 FORMAT (20X, 9HPARAMETER,I4,2H, ,A10,' RESTORED TO VARIABLE.') | 
|---|
|  | 109 | END | 
|---|