if [ $# -lt 3 ] then echo " " echo " ***** PROJECTION ***** " echo " " echo "The program projects a vector on a series of vectors" echo " " echo " Syntax: project " echo " " echo " - x - input vector (one record)" echo " - y - input series of vectors" echo " - p - output projection" echo " " echo " p=/" echo " " exit 0 else echo " " echo " ***** PROJECTION ***** " echo " " echo "file1="$1 echo "file2="$2 echo "file3="$3 cp $1 fort.1 cp $2 fort.2 fi cat > projection.f << EOF PROGRAM PROJECTION PARAMETER(NCHAN1=1,NCHAN2=2) INTEGER NSET1,NSET2 CALL PARLES (NCHAN1,NDIM1,NSET1) CALL PARLES (NCHAN2,NDIM2,NSET2) IF (NDIM1.NE.NDIM2) THEN PRINT *,'The maps have different dimensions!' STOP ENDIF CALL WORKIN(NDIM2,NSET2) END C******************************************************************* SUBROUTINE WORKIN (IE,NSET) IMPLICIT REAL (A-H,O-Z) PARAMETER (UNDEF=0.9E+10,UNDEFE=.9*UNDEF) PARAMETER(IE77=10000) DIMENSION Y(IE) DIMENSION XSERIE(IE),YNEW(IE) INTEGER I,NX REAL X(IE),SXY C PRINT *,"dimension of lattice: ",IE C PRINT *,"Number of time moments: ",NSET REWIND 1 REWIND 2 NX=0 SXX=0.0 SXY=0.0 C******************************************************************** C C Have to calculate the patterns of time series and data series C C******************************************************************** READ(1,END=15) ITIME,INAME,ILEV,ISIZE READ(1,END=15) (X(I),I=1,ISIZE) DO J=1,IE IF (X(J).LT.UNDEFE) THEN SXX=SXX+X(J)*X(J) NX=NX+1 ENDIF ENDDO SXX=SXX/REAL(NX) C PRINT *,'SXX=',SXX DO NTIME=1,NSET READ(2,END=15) ITIME,INAME,ILEV,ISIZE READ(2,END=15) (Y(I),I=1,IE) C PRINT *,'ISIZE=',ISIZE,' IE=',IE NXY=0 DO J=1,IE IF ((X(J).LE.UNDEFE).AND.(Y(J).LE.UNDEFE)) THEN SXY=SXY+X(J)*Y(J) NXY=NXY+1 ENDIF ENDDO IF (NXY.GT.0) THEN SXY=SXY/REAL(NXY) C PRINT *,'NTIME=',NTIME,' SXY=',SXY ELSE PRINT *,'ATTENTION ! -> NTIME=',NTIME END IF IF (SXY.EQ.0.0) THEN PRINT *,'NTIME=',NTIME,' SXY=',SXY END IF XSERIE(NTIME)=SXY/SXX C bb=abs(xserie(ntime)) C IF (bb.LT.100000.0) THEN C PRINT *,'NTIME=',NTIME,' XSERIE=',XSERIE(NTIME) C ELSE C PRINT *,'*************************************' C ENDIF ENDDO WRITE(3) ITIME,INAME,ILEV,NSET WRITE(3) (XSERIE(I),I=1,NSET) C PRINT *,"Have to write the series in file!" GOTO 9920 C****************************************************************** 10 WRITE(6,6010) ' INPUT FILE IS EMPTY ' GOTO 9910 11 WRITE(6,6010) ' INPUT GRIDS TOO LARGE ' GOTO 9910 12 WRITE(6,6010) ' PARAMETER CARD TOO SHORT OR MISSING ' GOTO 9910 13 WRITE(6,6010) ' NRWOS * NCOL .NE. IE ' GOTO 9910 14 WRITE(6,6010) ' INVALID RECORD LENGTH:', ISIZE GOTO 9910 15 WRITE(6,6010) ' UNEXPECTED *END OF FILE* DURING READ ' GOTO 9910 C 19 WRITE(6,6010) ' ILAT 1 > ILAT2 ', ILAT1, ILAT2 9910 CONTINUE C C* ABNORMAL TERMINATION. C PRINT *, '*EXTRA*: FATAL END ' STOP C C* NORMAL TERMINATION. C 9920 PRINT *, ' EXTRA : NORMAL ' STOP 6010 FORMAT(' *EXTRA*: ', A,/,(6I10)) 6011 FORMAT(' *EXTRA*: ', A) 6060 FORMAT(' *EXTRA* -- READ ',I10,' RECORDS.') END C******************************************************************* SUBROUTINE PARLES (NCHAN,NDIM,NSET) IMPLICIT REAL (A-H,O-Z) INTEGER I1,I2,I3 NSET=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 NDIM=0 1 READ (NCHAN,END=100) I1,I2,I3,I4 NDIM=MAX0(NDIM,I4) READ (NCHAN,END=101) NSET=NSET+1 GOTO1 101 PRINT *,' MORE HEADER THEN DATA ' 100 PRINT 1000,NCHAN,NDIM,NSET REWIND NCHAN RETURN 1000 FORMAT (1X,' TAPE=',I2,', NDIM=',I5,', NSET=',I5) END EOF lf95 projection.f -o projection.x projection.x $1 $2 $3 cp fort.3 $3 rm fort.1 fort.2 fort.3 rm projection.x projection.f exit