SUBROUTINE OPINPUT ( STATUS, STRTYR, STRTMON, STRTDAY, $ STARNUM,STRTSEC,STOPSEC,COHINT,SCANTIME,FRINGOFF,dispf) C C by David Mozurkewich MAY 1, 1987 C moved to PC APR 2, 1988 C Removed baseline jan 21, 1989 C C This subroutine is part of the Mt. Wilson optical interferometer C data reduction package. C C OPINPUT reads in user supplied parameters, via KEYIN, and checks C for illegal values. C IMPLICIT UNDEFINED (A-Z) SAVE INCLUDE 'AVER.INC' C INTEGER MODE, NPARS PARAMETER (MODE = 2 ) PARAMETER ( NPARS = 8 + 18 ) LOGICAL INPUTERR, OPENERR C INTEGER*4 INMODE, I REAL*8 INPARS(NPARS), INVALS(NPARS), ENDMRK CHARACTER *(*) STATUS CHARACTER *1 BACKSLSH CHARACTER *8 LABELS(NPARS), CVALS(0:8) CHARACTER*64 HELP COMMON /KEYCOM/ HELP C INTEGER*4 STARNUM, STRTYR, STRTMON, STRTDAY, STRTSEC, $ STOPSEC INTEGER *4 FIRST, LAST, NROOT REAL *8 COHINT, SCANTIME REAL *4 FRINGOFF(3),dispf(4) LOGICAL NEW DATA NEW / .TRUE. / DATA BACKSLSH / '\\' / C DATA LABELS / 'INFILE', 7*' ', $ 'STARNUM', 'MONTH', 'DAY', 'YEAR', 'START', 'STOP', $ 'COHINT', 'SCANTIME', 3*'FRINGOFF', $ 'OFFSET', 'NLIMIT3', 'NLIMIT4', 4*'DISPF' / DATA CVALS / '/', 8*' ' / DATA INVALS / 8*0.D0, $ 0.0D0, 0.D0, 0.D0, 0.D0, 0.D0, 86400.D0, $ 0.2D0, 300.D0, 3*0.D0, $ 0.0D0, 0.D0, 0.D0, 0.0, 0.0, 0.0, 0.0 / C---------------------------------------------------------------------- C On the first pass, SET UP PARAMETER ARRAYS IF (NEW) THEN DO 30 I = 1, NPARS READ ( LABELS(I), 1100 ) INPARS(I) 30 CONTINUE READ (CVALS(0), 1100 ) ENDMRK NEW = .FALSE. ELSE C C A new file name nust be entered on each call to this subroutine. C DO 35 I = 1, 8 CVALS(I) = ' ' 35 CONTINUE END IF DO 40 I = 1, 8 READ (CVALS(I), 1100 ) INVALS(I) 40 CONTINUE 1100 FORMAT ( A8 ) C---------------------------------------------------------------------- C Read parameters using KEYIN WRITE (TERME, 1001) 1 CONTINUE INMODE = MODE CALL KEYIN (INPARS,INVALS,NPARS,ENDMRK,INMODE,TERMI,TERME ) C WRITE(TERME,*) ' KEYIN end mode = ', INMODE C C Determine input file name. Crop off directory, if any C Add extention to filename if one was not specified. C WRITE ( INDSN, '(8A8)' ) (INVALS( I), I=1,8) IF ( INDSN .EQ. ' ' ) THEN STATUS = 'QUIT ' GO TO 900 END IF FIRST = 1 LAST = 1 NROOT = 65 DO 20 I = 1, 64 IF ( INDSN(I:I) .EQ. BACKSLSH ) THEN FIRST = I+1 ELSE IF ( INDSN(I:I) .EQ. '.' ) THEN NROOT = I ELSE IF ( INDSN(I:I) .EQ. ' ' ) THEN LAST = I-1 GO TO 21 END IF 20 CONTINUE 21 CONTINUE IF ( FIRST .GT. NROOT ) THEN WRITE(0,*) ' BAD FILE SPECIFICATION ', INDSN INPUTERR = .TRUE. ELSE IF ( (NROOT.EQ.65).AND.(LAST.GT.60) ) THEN WRITE(0,*) ' FILE NAME IS TOO LONG ', INDSN INPUTERR = .TRUE. ELSE IF ( (LAST-NROOT) .GT. 4 ) THEN WRITE(0,*) ' FILE EXTENTION IS TOO LONG ', INDSN INPUTERR = .TRUE. ELSE IF ( NROOT .EQ. 65 ) THEN NROOT = LAST + 1 LAST = LAST + 4 INDSN(NROOT:LAST) = '.RAW' INPUTERR = .FALSE. ELSE INPUTERR = .FALSE. END IF C C Determine output file names. C IF ( .NOT. INPUTERR ) THEN AVEDSN = INDSN(FIRST:NROOT) // 'AVG' VISDSN = INDSN(FIRST:NROOT) // 'VIS' PRTDSN = INDSN(FIRST:NROOT) // 'PRT' LOGDSN = INDSN(FIRST:NROOT) // 'LOG' WHTDSN = INDSN(FIRST:NROOT) // 'WHT' TWODSN = INDSN(FIRST:NROOT) // 'TWO' NOLOG = .FALSE. PRTOUT = .TRUE. END IF C---------------------------------------------------------------------- C Load other parameters into apropriate variables, and test STARNUM = INVALS(8+ 1) STRTMON = INVALS(8+ 2) STRTDAY = INVALS(8+ 3) STRTYR = INVALS(8+ 4) STRTSEC = INVALS(8+ 5) STOPSEC = INVALS(8+ 6) COHINT = INVALS(8+ 7) SCANTIME = INVALS(8+ 8) FRINGOFF(1) = INVALS(8+ 9) fringoff(2) = invals(8+10) fringoff(3) = invals(8+11) OFFSET = INVALS(8+12) NLIMIT(3)= INVALS(8+13) NLIMIT(4)= INVALS(8+14) dispf(1) = invals(8+15) dispf(2) = invals(8+16) dispf(3) = invals(8+17) dispf(4) = invals(8+18) C C Check the legality of the input parameters C IF ( STRTMON .LT. 0 .OR. STRTMON .GT. 12 .OR. $ STRTDAY .LT. 0 .OR. STRTDAY .GT. 31 .OR. $ ( STRTYR .LT. 1982 .AND. STRTYR .NE. 0 ) .OR. $ STRTYR .GT. 2000 ) THEN WRITE (TERME ,1000) ' Illegal date. Correct format: '// $ 'DAY=dd MONTH=mm YEAR=yyyy ' INPUTERR = .TRUE. END IF IF ( NLIMIT(3) .NE. 0 ) $ WRITE(6,*) ' *** warning *** ALIAS CORRECTION ON CHANNEL 3' IF ( NLIMIT(4) .NE. 0 ) $ WRITE(6,*) ' *** warning *** ALIAS CORRECTION ON CHANNEL 4' C C Keyin converts times to seconds. Check start and stop. C IF ( STOPSEC .EQ. 0 ) STOPSEC = 86400 IF ( (STRTSEC.GE.STOPSEC) .OR. (STOPSEC.LT.0) $ .OR. (STRTSEC.LT.0) ) THEN WRITE (TERME ,1000) ' Illegal start and/or stop time. ' $ // ' Correct format is HH:MM:SS .' INPUTERR = .TRUE. END IF IF ( INPUTERR ) GO TO 1 C Open the input and output disk files. CALL OPOPEN ( COHINT, OPENERR ) STATUS = ' ' IF ( OPENERR ) THEN WRITE(TERME,*) ' OPINPUT: error opening files. Try again' C C Delete the bad file name, so that the program will not go into C an infinite loop when it runs out of input. C DO 350 I = 1, 8 READ (CVALS(I), 1100 ) INVALS(I) 350 CONTINUE OPENERR = .FALSE. INPUTERR = .TRUE. END IF C IF ( STRTYR .NE. 0 ) STRTYR = 1900 + MOD( STRTYR, 100 ) IF (STRTSEC.LT.0) THEN WRITE(TERME,1000) ' STRTSEC must be greater than zero ' INPUTERR = .TRUE. ELSE IF ( STRTSEC .GT. 86400 ) THEN WRITE(TERME,1000) ' STRTSEC must be less than 86400 ' INPUTERR = .TRUE. END IF C C Unless an error has been detected, exit. IF (INPUTERR) GO TO 1 900 CONTINUE RETURN C 1000 FORMAT (A) 1001 FORMAT (' Free format input:'/ $ ' SHOW shows options, you need only enter the file name ' / $ ' / runs the program ' // $ ' output files will be placed in the current directory ') END SUBROUTINE OPOPEN ( COHINT, OPENERR ) C C by Richard S. Simon C modified (DM) 12-MAY-86 to fix up variable references. C 9 Jul 87 to include log file. C C This subroutine is part of the program FRITZ, which averages C Mt. Wilson optical interferometer data. C C OPOPEN opens the input and output files. C IMPLICIT UNDEFINED (A-Z) SAVE INCLUDE 'AVER.INC' INTEGER *4 IERR, ICOH, INCOH REAL *8 COHINT LOGICAL OPENERR C C Input data file OPEN(UNIT=TERMD,FILE=INDSN,STATUS='OLD',FORM='UNFORMATTED', $ IOSTAT=IERR,RECL=2048,ACCESS='DIRECT') IF (IERR .NE. 0) THEN OPENERR = .TRUE. WRITE (TERME,1000) ' Error', IERR, ' opening INFILE ', INDSN ELSE OPENERR = .FALSE. END IF C C Error Log, former fort.12 c open(12,file=indsn(1:8)//'.err',status='unknown',iostat=ierr) c if(ierr.ne.0)then c openerr=.true. c write(terme,1000) ' Error', ierr, ' opening ERRFILE ', c $ indsn(1:8)//'.err' c else c openerr=.false. c endif C C Open output averaged astrometry data file C OPEN(UNIT=TERMO, FILE=AVEDSN, STATUS='UNKNOWN', IOSTAT=IERR ) IF (IERR .NE. 0) THEN OPENERR = .TRUE. WRITE (TERME,1000) ' Error', IERR, ' opening AVEFILE ', AVEDSN END IF C C Open output two color astrometry data file C OPEN(UNIT=TERM2, FILE=TWODSN, STATUS='UNKNOWN', IOSTAT=IERR ) IF (IERR .NE. 0) THEN OPENERR = .TRUE. WRITE (TERME,1000) ' Error', IERR, ' opening 2C-FILE ', TWODSN END IF C C Open white light data file C OPEN(UNIT=TERMW, FILE=WHTDSN, STATUS='UNKNOWN', IOSTAT=IERR ) IF (IERR .NE. 0) THEN OPENERR = .TRUE. WRITE (TERME,1000) ' Error', IERR, ' opening WHTFILE ', WHTDSN END IF C C Open output visibility data file C C OPEN(UNIT=TERMV, FILE=VISDSN, STATUS='UNKNOWN', C $ FORM='UNFORMATTED', IOSTAT=IERR, RECL=76, ACCESS='DIRECT' ) C IF (IERR .NE. 0) THEN C OPENERR = .TRUE. C WRITE (TERME,1000) ' Error', IERR, ' opening VISFILE ', VISDSN C END IF C C Open output print file, if necessary IF (PRTDSN .EQ. ' ' ) THEN C Data goes to already opened output file TERMP = 6 PRTOUT = .FALSE. ELSE IF (PRTDSN .NE. ' ') THEN PRTOUT = .TRUE. OPEN ( UNIT=TERMP, FILE=PRTDSN, STATUS='UNKNOWN',IOSTAT=IERR) IF (IERR .NE. 0) THEN OPENERR = .TRUE. WRITE (TERME,1000) ' Error ', IERR, $ ' opening DUMPFILE ', PRTDSN END IF ELSE PRTOUT = .FALSE. END IF WRITE(TERMP,1020) INDSN 1020 FORMAT ( 10X, ' INPUT DATA FILE = ', A ) C Open log file C C IF ( LOGDSN .EQ. ' ' ) THEN C NOLOG = .TRUE. C ELSE C NOLOG = .FALSE. C OPEN (UNIT=TERML, FILE=LOGDSN, STATUS='UNKNOWN', IOSTAT=IERR) C IF ( IERR .NE. 0 ) THEN C OPENERR = .TRUE. C WRITE (TERME,1000) ' Error', IERR, C $ ' opening LOG FILE ', LOGDSN C END IF C END IF IF ( OPENERR ) THEN CLOSE (UNIT=TERMD, STATUS='KEEP' ) CLOSE (UNIT=TERMO, STATUS='DELETE') C CLOSE (UNIT=TERMV, STATUS='DELETE') CLOSE (UNIT=TERMP, STATUS='DELETE') C CLOSE (UNIT=TERML, STATUS='DELETE') END IF RETURN 1000 FORMAT ( A, I5, 2A ) END SUBROUTINE OPCLOSE C C by David Mozurkewich 28 Oct 1987 C C This subroutine is part of the program FRITZ, which reduces C Mt. Wilson optical interferometer data. C C OPCLOSE closes all of the files C IMPLICIT UNDEFINED (A-Z) INCLUDE 'AVER.INC' CLOSE (UNIT=TERMD) CLOSE (UNIT=TERMO) C CLOSE (UNIT=TERMV) CLOSE (UNIT=TERMS) CLOSE (UNIT=TERMW) IF ( PRTOUT ) CLOSE (UNIT=TERMP) C IF ( .NOT. NOLOG ) CLOSE (UNIT=TERML) RETURN END