SUBROUTINE INTERP_SC (JMAXIN,FIN,LIN,IBIN, & JMAXOT,FOUT,LOUT,IBOUT,NOUT,KGDSOUT, & N11,N12,N21,N22,W11,W12,W21,W22,IRET) C$$$ SUBPROGRAM DOCUMENTATION BLOCK C . . . . C SUBPROGRAM: INTERP_SC C PRGMMR: BALDWIN ORG: NP22 DATE: 98-08-11 C C ABSTRACT: INTERP_SC INTERPOLATES A SCALAR FIELD USING GIVEN C INTERPOLATION WEIGHTS. C C PROGRAM HISTORY LOG: C 98-08-11 BALDWIN ORIGINATOR C C USAGE: CALL INTERP_SC (JMAXIN,FIN,LIN,IBIN, C & JMAXOT,FOUT,LOUT,IBOUT,NOUT,KGDSOUT, C & N11,N12,N21,N22,W11,W12,W21,W22,IRET) C C INPUT: C JMAXIN INTEGER - MAX DIMENSION OF FIN C JMAXOT INTEGER - MAX DIMENSION OF FOUT C NOUT INTEGER - NUMBER OF PTS ON OUTPUT GRID C KGDSOUT(22) INTEGER - KGDS OF OUTPUT GRID C FIN(JMAXIN) REAL - INPUT FIELD C LIN(JMAXIN) LOGICAL*1 - BITMAP CORRESPONDING TO FIN C IBIN INTEGER - BITMAP FLAG FOR INPUT GRIDS C N11,N12,N21, INTEGER - INDEX OF SURROUNDING INPUT GRID C N22(JMAXOT) POINTS TO OUTPUT GRID C W11,W12,W21, REAL - INTERPOLATION WEIGHTS FOR INPUT C W22(JMAXOT) GRID POINTS SURROUNDING OUTPUT GRID C C OUTPUT: C FOUT(JMAXOT) REAL - OUTPUT GRID C LOUT(JMAXOT) LOGICAL*1 - OUTPUT GRID BITMAP C IBOUT INTEGER - BITMAP FLAG FOR OUTPUT GRID C IRET INTEGER - RETURN CODE C C RETURN CODES: C IRET = 0 - NORMAL EXIT C C ATTRIBUTES: C LANGUAGE: FORTRAN 90 C MACHINE : CRAY J-916 C C INTEGER KGDSOUT(22) INTEGER N11(JMAXOT),N21(JMAXOT),N12(JMAXOT),N22(JMAXOT) LOGICAL*1 LIN(JMAXIN),LOUT(JMAXOT) REAL WO(JMAXOT) REAL FIN(JMAXIN),FOUT(JMAXOT) REAL W11(JMAXOT),W21(JMAXOT), & W12(JMAXOT),W22(JMAXOT) IRET=0 C$OMP PARALLEL DO PRIVATE(I) DO I=1,NOUT FOUT(I)=0. WO(I)=0. IF(N11(I).GT.0) THEN IF(IBIN.EQ.0) THEN FOUT(I)=W11(I)*FIN(N11(I))+W21(I)*FIN(N21(I)) & +W12(I)*FIN(N12(I))+W22(I)*FIN(N22(I)) WO(I)=1. ELSE IF(LIN(N11(I))) THEN FOUT(I)=FOUT(I)+W11(I)*FIN(N11(I)) WO(I)=WO(I)+W11(I) ENDIF IF(LIN(N21(I))) THEN FOUT(I)=FOUT(I)+W21(I)*FIN(N21(I)) WO(I)=WO(I)+W21(I) ENDIF IF(LIN(N12(I))) THEN FOUT(I)=FOUT(I)+W12(I)*FIN(N12(I)) WO(I)=WO(I)+W12(I) ENDIF IF(LIN(N22(I))) THEN FOUT(I)=FOUT(I)+W22(I)*FIN(N22(I)) WO(I)=WO(I)+W22(I) ENDIF ENDIF ENDIF ENDDO IBOUT=IBIN DO I=1,NOUT LOUT(I)=WO(I).GE.0.5 IF(LOUT(I)) THEN FOUT(I)=FOUT(I)/WO(I) ELSE IBOUT=1 FOUT(I)=0. ENDIF ENDDO C c IF(KGDSOUT(1).EQ.0) CALL POLFIXS(NOUT,NOUT,1, c & RLAT,RLON,IBOUT,LOUT,FOUT) RETURN END