| 1 | * | 
|---|
| 2 | * $Id: mnsave.F,v 1.1.1.1 2003-06-11 14:18:29 cmv Exp $ | 
|---|
| 3 | * | 
|---|
| 4 | * $Log: not supported by cvs2svn $ | 
|---|
| 5 | * Revision 1.1.1.1  1996/03/07 14:31:31  mclareni | 
|---|
| 6 | * Minuit | 
|---|
| 7 | * | 
|---|
| 8 | * | 
|---|
| 9 | #include "minuit/pilot.h" | 
|---|
| 10 | SUBROUTINE MNSAVE | 
|---|
| 11 | #include "minuit/d506dp.inc" | 
|---|
| 12 | CC       Writes current parameter values and step sizes onto file ISYSSA | 
|---|
| 13 | CC          in format which can be reread by Minuit for restarting. | 
|---|
| 14 | CC       The covariance matrix is also output if it exists. | 
|---|
| 15 | CC | 
|---|
| 16 | #include "minuit/d506cm.inc" | 
|---|
| 17 | LOGICAL LOPEN,LNAME | 
|---|
| 18 | CHARACTER CGNAME*64, CFNAME*64, CANSWR*1 | 
|---|
| 19 | C | 
|---|
| 20 | INQUIRE(UNIT=ISYSSA,OPENED=LOPEN,NAMED=LNAME,NAME=CGNAME) | 
|---|
| 21 | IF (LOPEN) THEN | 
|---|
| 22 | IF (.NOT.LNAME) CGNAME='UNNAMED FILE' | 
|---|
| 23 | WRITE (ISYSWR,32) ISYSSA,CGNAME | 
|---|
| 24 | 32    FORMAT (' CURRENT VALUES WILL BE SAVED ON UNIT',I3,': ',A/) | 
|---|
| 25 | ELSE | 
|---|
| 26 | C                new file, open it | 
|---|
| 27 | WRITE (ISYSWR,35) ISYSSA | 
|---|
| 28 | 35    FORMAT (' UNIT',I3,' IS NOT OPENED.') | 
|---|
| 29 | IF (ISW(6) .EQ. 1) THEN | 
|---|
| 30 | WRITE (ISYSWR,'(A)') ' PLEASE GIVE FILE NAME:' | 
|---|
| 31 | READ (ISYSRD,'(A)') CFNAME | 
|---|
| 32 | OPEN (UNIT=ISYSSA,FILE=CFNAME,STATUS='NEW',ERR=600) | 
|---|
| 33 | CGNAME = CFNAME | 
|---|
| 34 | ELSE | 
|---|
| 35 | GO TO 650 | 
|---|
| 36 | ENDIF | 
|---|
| 37 | ENDIF | 
|---|
| 38 | C                               file is now correctly opened | 
|---|
| 39 | IF (ISW(6) .EQ. 1)  THEN | 
|---|
| 40 | WRITE (ISYSWR,37)  ISYSSA | 
|---|
| 41 | 37    FORMAT (' SHOULD UNIT',I3,' BE REWOUND BEFORE WRITING TO IT?' ) | 
|---|
| 42 | READ  (ISYSRD,'(A)')  CANSWR | 
|---|
| 43 | IF (CANSWR.EQ.'Y' .OR. CANSWR.EQ.'y') REWIND ISYSSA | 
|---|
| 44 | ENDIF | 
|---|
| 45 | C                               and rewound if requested | 
|---|
| 46 | WRITE (ISYSSA,'(10HSET TITLE )',ERR=700) | 
|---|
| 47 | WRITE (ISYSSA,'(A)')  CTITL | 
|---|
| 48 | WRITE (ISYSSA,'(10HPARAMETERS)') | 
|---|
| 49 | NLINES = 3 | 
|---|
| 50 | C                                write out parameter values | 
|---|
| 51 | DO 200 I= 1, NU | 
|---|
| 52 | IF (NVARL(I) .LT. 0)  GO TO 200 | 
|---|
| 53 | NLINES = NLINES + 1 | 
|---|
| 54 | IINT = NIOFEX(I) | 
|---|
| 55 | IF (NVARL(I) .GT. 1)  GO TO 100 | 
|---|
| 56 | C         parameter without limits | 
|---|
| 57 | WRITE (ISYSSA,1001)  I,CPNAM(I),U(I),WERR(IINT) | 
|---|
| 58 | GO TO 200 | 
|---|
| 59 | C         parameter with limits | 
|---|
| 60 | 100 CONTINUE | 
|---|
| 61 | WRITE (ISYSSA,1001) I,CPNAM(I),U(I),WERR(IINT),ALIM(I),BLIM(I) | 
|---|
| 62 | 1001 FORMAT (1X,I5,1H',A10,1H',4E13.5) | 
|---|
| 63 | 200 CONTINUE | 
|---|
| 64 | WRITE (ISYSSA,'(A)')  ' ' | 
|---|
| 65 | NLINES = NLINES + 1 | 
|---|
| 66 | C                                  write out covariance matrix, if any | 
|---|
| 67 | IF (ISW(2) .LT. 1)  GO TO 750 | 
|---|
| 68 | WRITE (ISYSSA,1003,ERR=700)  NPAR | 
|---|
| 69 | 1003 FORMAT ('SET COVARIANCE',I6) | 
|---|
| 70 | NPAR2 = NPAR*(NPAR+1)/2 | 
|---|
| 71 | WRITE (ISYSSA,1004) (VHMAT(I),I=1,NPAR2) | 
|---|
| 72 | 1004 FORMAT (BN,7E11.4,3X) | 
|---|
| 73 | NCOVAR = NPAR2/7 + 1 | 
|---|
| 74 | IF (MOD(NPAR2,7) .GT. 0)  NCOVAR = NCOVAR + 1 | 
|---|
| 75 | NLINES = NLINES + NCOVAR | 
|---|
| 76 | WRITE (ISYSWR, 501) NLINES,ISYSSA,CGNAME(1:45) | 
|---|
| 77 | 501 FORMAT (1X,I5,' RECORDS WRITTEN TO UNIT',I4,':',A) | 
|---|
| 78 | IF (NCOVAR .GT. 0) WRITE (ISYSWR, 502) NCOVAR | 
|---|
| 79 | 502 FORMAT (' INCLUDING',I5,' RECORDS FOR THE COVARIANCE MATRIX.'/) | 
|---|
| 80 | GO TO 900 | 
|---|
| 81 | C                                           some error conditions | 
|---|
| 82 | 600 WRITE (ISYSWR,'(A,I4)') ' I/O ERROR: UNABLE TO OPEN UNIT',ISYSSA | 
|---|
| 83 | GO TO 900 | 
|---|
| 84 | 650 WRITE (ISYSWR,'(A,I4,A)') ' UNIT',ISYSSA,' IS NOT OPENED.' | 
|---|
| 85 | GO TO 900 | 
|---|
| 86 | 700 WRITE (ISYSWR,'(A,I4)') ' ERROR: UNABLE TO WRITE TO UNIT',ISYSSA | 
|---|
| 87 | GO TO 900 | 
|---|
| 88 | 750 WRITE (ISYSWR,'(A)') ' THERE IS NO COVARIANCE MATRIX TO SAVE.' | 
|---|
| 89 | C | 
|---|
| 90 | 900 RETURN | 
|---|
| 91 | END | 
|---|