#! /bin/sh # # Last change: Mihai Dima 2001 # if [ $# -lt 2 ] then echo " " echo " ***** ANNUAL MEANS ***** " echo " " echo " The program calculates " echo " annual means (file2) from monthly means (file1)" echo " " echo " Syntax: anmean " echo " " exit 0 else echo " " echo " ***** ANNUAL MEANS ***** " echo " " echo "file1="$1 echo "file2="$2 cp $1 fort.1 fi cat > anmean.f << EOF PROGRAM ANMEAN PARAMETER(NCHAN1=1,UNDEF=0.9E+10) REAL X(20000),XMEDAN(20000) INTEGER ICOUNT(20000) INTEGER IDAT,IVAR,ILEV,ILEN,I,J CALL PARLES (NCHAN1,IDIM1,ILEN) IINREG=0 ICONTOR=0 DO I=1,IDIM1 XMEDAN(I)=0.0 ICOUNT(I)=0 ENDDO 66 READ(1,END=77) IDAT,IVAR,ILEV,IDIM1 READ(1)(X(I),I=1,IDIM1) DO J=1,IDIM1 IF (X(J).NE.UNDEF) THEN XMEDAN(J)=XMEDAN(J)+X(J) ICOUNT(J)=ICOUNT(J)+1 ENDIF ENDDO ICONTOR=ICONTOR+1 IF (ICONTOR.EQ.12) THEN DO J=1,IDIM1 IF (ICOUNT(J).EQ.0) THEN XMEDAN(J)=UNDEF ELSE XMEDAN(J)=XMEDAN(J)/REAL(ICOUNT(J)) ICOUNT(J)=0 ENDIF ENDDO WRITE(2) IDAT,IVAR,ILEV,IDIM1 WRITE(2) (XMEDAN(J),J=1,IDIM1) DO I=1,IDIM1 XMEDAN(I)=0.0 ICOUNT(I)=0 ENDDO IINREG=IINREG+1 ICONTOR=0 ENDIF GOTO 66 77 PRINT *,' ',IINREG,' RECORDS WRITTEN!' PRINT*,' REGULAR END!' END C********************************************************************** SUBROUTINE PARLES (NCHAN,IDIM,ILEN) IMPLICIT REAL (A-H,O-Z) INTEGER I1,I2,I3 REAL F ILEN=0 REWIND NCHAN READ(NCHAN,END=10) ITIME,INAME,ILEV,ISIZE GOTO 20 10 PRINT *,'INPUT FILE ON TAPE',NCHAN,' IS EMPTY' STOP 'MISTAKE' 20 REWIND NCHAN IDIM=0 1 READ (NCHAN,END=100) I1,I2,I3,I4 IDIM=MAX0(IDIM,I4) READ (NCHAN,END=101) F ILEN=ILEN+1 GOTO1 101 PRINT *,' MORE HEADER THEN DATA ' 100 PRINT 1000,NCHAN,IDIM,ILEN REWIND NCHAN RETURN 1000 FORMAT (1X,' TAPE=',I2,', IDIM=',I5,', ILEN=',I5) END EOF f77 anmean.f -o anmean.x anmean.x $1 $2 cp fort.2 $2 rm fort.1 fort.2 rm anmean.x anmean.f exit