- #1
chaim
- 5
- 0
I frequently get the same runtime error when using g77. Here is the error message:
fmt: end of file
apparent state: unit 16 named vi1.src
last format: (F10.6)
lately reading sequential formatted external IO
abnormal program termination
I have added to my code the REWIND statement after my OPEN statement as you can see in the code below but this has not helped me. I know that the error means that the pointer is at the end of the input file, but I think that the REWIND should solve this problem. Where am I going wrong??
Code:
PROGRAM CloudCoverV1
INTEGER NH,TR,ACC
DIMENSION VI(8788), VF(8788)
c=================================================================
OPEN(UNIT=16, FILE='vi1.src', ACCESS='SEQUENTIAL',STATUS='OLD',
$FORM='FORMATTED')
REWIND (UNIT=16)
c=================================================================
READ(UNIT=16, FMT=55) NH
55 FORMAT (I5)
DO 60, NH = 1,NH
READ(UNIT=16, FMT=56) VI
56 FORMAT (F10.6)
60 CONTINUE
c====================================================================
OPEN(UNIT=18, FILE='test1.out', STATUS='NEW', FORM='FORMATTED')
c=====================================================================
DO 110, TR = 1, 20
WRITE(UNIT=17, FMT=111) VI(NH)
111 FORMAT (F10.6)
110 CONTINUE
c====================================================================
OPEN(UNIT=17, FILE='CCV1.out', STATUS='NEW', FORM='FORMATTED')
c=====================================================================
DO 12, ACC = 1,NH
IF (VI(NH) .LT. 100) VF(NH) = VI(NH)
IF (VI(NH) .LT. 100) GOTO 12
IF (VI(NH) .EQ. 100) THEN
CALL INTERPOLATE(NH)
ENDIF
12 CONTINUE
c=================================================================
DO 120, NH = 1, 100
WRITE(UNIT=17, FMT=100) VF(NH)
100 FORMAT (F10.6)
120 CONTINUE
c===================================================================
CLOSE(UNIT=16)
CLOSE(UNIT=17)
CLOSE(UNIT=18)
END PROGRAM CloudCoverV1
SUBROUTINE INTERPOLATE(NH)
INTEGER NH
INTEGER NUME,VAL
DIMENSION VI(8788)
DO 80,NH = NH,NH+24
NUME = 0
IF (VI(NH) .EQ. 100) NUME = NUME + 1
IF (VI(NH) .NE. 100) EXIT
80 CONTINUE
IF ((VI(NH-NUME)- VI(NH+1)) .GT. 0.0) THEN
DO 77, VAL = NH-NUME,NH
VI(VAL) = VI(NH-NUME)-((VI(NH-NUME)- VI(NH+1))/(NUME+1))
77 CONTINUE
ELSEIF ((VI(NH-NUME)- VI(NH+1)) .LT. 0.0) THEN
DO 99, VAL = NH-NUME,NH
VI(VAL)=VI(NH-NUME)+((VI(NH+1)- VI(NH-NUME))/(NUME+1))
99 CONTINUE
ENDIF
RETURN
END SUBROUTINE INTERPOLATE
fmt: end of file
apparent state: unit 16 named vi1.src
last format: (F10.6)
lately reading sequential formatted external IO
abnormal program termination
I have added to my code the REWIND statement after my OPEN statement as you can see in the code below but this has not helped me. I know that the error means that the pointer is at the end of the input file, but I think that the REWIND should solve this problem. Where am I going wrong??
Code:
PROGRAM CloudCoverV1
INTEGER NH,TR,ACC
DIMENSION VI(8788), VF(8788)
c=================================================================
OPEN(UNIT=16, FILE='vi1.src', ACCESS='SEQUENTIAL',STATUS='OLD',
$FORM='FORMATTED')
REWIND (UNIT=16)
c=================================================================
READ(UNIT=16, FMT=55) NH
55 FORMAT (I5)
DO 60, NH = 1,NH
READ(UNIT=16, FMT=56) VI
56 FORMAT (F10.6)
60 CONTINUE
c====================================================================
OPEN(UNIT=18, FILE='test1.out', STATUS='NEW', FORM='FORMATTED')
c=====================================================================
DO 110, TR = 1, 20
WRITE(UNIT=17, FMT=111) VI(NH)
111 FORMAT (F10.6)
110 CONTINUE
c====================================================================
OPEN(UNIT=17, FILE='CCV1.out', STATUS='NEW', FORM='FORMATTED')
c=====================================================================
DO 12, ACC = 1,NH
IF (VI(NH) .LT. 100) VF(NH) = VI(NH)
IF (VI(NH) .LT. 100) GOTO 12
IF (VI(NH) .EQ. 100) THEN
CALL INTERPOLATE(NH)
ENDIF
12 CONTINUE
c=================================================================
DO 120, NH = 1, 100
WRITE(UNIT=17, FMT=100) VF(NH)
100 FORMAT (F10.6)
120 CONTINUE
c===================================================================
CLOSE(UNIT=16)
CLOSE(UNIT=17)
CLOSE(UNIT=18)
END PROGRAM CloudCoverV1
SUBROUTINE INTERPOLATE(NH)
INTEGER NH
INTEGER NUME,VAL
DIMENSION VI(8788)
DO 80,NH = NH,NH+24
NUME = 0
IF (VI(NH) .EQ. 100) NUME = NUME + 1
IF (VI(NH) .NE. 100) EXIT
80 CONTINUE
IF ((VI(NH-NUME)- VI(NH+1)) .GT. 0.0) THEN
DO 77, VAL = NH-NUME,NH
VI(VAL) = VI(NH-NUME)-((VI(NH-NUME)- VI(NH+1))/(NUME+1))
77 CONTINUE
ELSEIF ((VI(NH-NUME)- VI(NH+1)) .LT. 0.0) THEN
DO 99, VAL = NH-NUME,NH
VI(VAL)=VI(NH-NUME)+((VI(NH+1)- VI(NH-NUME))/(NUME+1))
99 CONTINUE
ENDIF
RETURN
END SUBROUTINE INTERPOLATE