SUBROUTINE W3FT02 (RAIN, IMAX, JMAX, PI, PJ, AMOUNT) C$$$ SUBPROGRAM DOCUMENTATION BLOCK C C SUBPROGRAM: W3FT02 INTERPOLATE PRECIPITATION TO SPECIFIC POINT C PRGMMR: HIRANO ORG: NMC24 DATE:96-06-23 C C ABSTRACT: INTERPOLATE, USING A FANCY NON-LINEAR METHOD, C GRIDDED QUANTITATIVE PRECIPITATION FORECASTS TO A SPECIFIC C INTERIOR POINT. ONE POINT (E.G. AN OBSERVATION STATION) C PER CALL TO W3FT02. C C PROGRAM HISTORY LOG: C 79-08-05 R.HIRANO C 96-06-23 farley converted to cray fortran 77 C C USAGE: CALL W3FT02(RAIN, IMAX, JMAX, PI, PJ, AMOUNT) C C INPUT VARIABLES: C NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES C ------ --------- ----------------------------------------------- C RAIN ARG LIST REAL*4 GRID FIELD OF (FORECAST) PRECIPITATION C IMAX ARG LIST INTEGER*4 I-DIMENSION OF RAIN FIELD C JMAX ARG LIST INTEGER *4 J-DIMENSION OF RAIN FIELD C PI ARG LIST REAL*4 I-COORDINATE OF INTERPOLATION POINT C PJ ARG LIST REAL*4 J-COORDINATE OF INTERPOLATION POINT C C OUTPUT VARIABLES: C NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES C ------ --------- ----------------------------------------------- C AMOUNT ARG LIST REAL*4 AMOUNT OF PRECIP INTERPOLATED TO PI,PJ C C SUBPROGRAMS CALLED: C NAMES LIBRARY C ------------------------------------------------------- -------- C AMAX1 SYSTEM C C ATTRIBUTES: C LANGUAGE: IBM VS FORTRAN C MACHINE: NAS-9050, 9070 C C NO WRITEUP AVAILABLE. SEE PROGRAMMER FOR ADDITIONAL INFORMATION. C C$$$ C C INTERPOLATE PRECIPITATION FROM RAIN FIELD C TO INTERNAL POINT (PI,PJ). RESULT IN AMOUNT C real RAIN(IMAX,JMAX) C C CHECK FOR INTERPOLATION POINT OUTSIDE GRID C AMOUNT = 0. IF(PI.LE.1.OR.PI.GE.IMAX) GO TO 150 IF(PJ.LE.1.OR.PJ.GE.JMAX) GO TO 150 C C SET UP RAIN AMMOUNTS AT CORNERS OF BOX SURROUNDING POINT (PI,PJ C C R2 R4 C C (PI,PJ) C C R1 R3 C I=PI J=PJ R1=RAIN(I ,J ) R2=RAIN(I ,J+1) R3=RAIN(I+1,J ) R4=RAIN(I+1,J+1) C C CHECK FOR NO RAIN AT ALL C IF(AMAX1(R1,R2,R3,R4).LE.0.) GO TO 150 C C GOT SOME -- FIND APPROPRIATE SECTOR AND SECTION C OF THE GRID BOX IN WHICH THE STATION IS LOCATED C AI = PI-I AJ=PJ-J X = 0.5 C C MEANINOF IC FOR SECTORS (K=1) OR SECTIONS (K=2) C C 2 4 C C 1 3 C C ALSO REFERENCED AS C C TOP DIAGONAL / T D C / C NEAR RIGHT / N R C DO 1 K=1,2 IF(AI.GT.X) GO TO 2 IF(AJ.GT.X) GO TO 4 IC = 1 GO TO 10 4 CONTINUE IC = 2 GO TO 10 2 CONTINUE IF(AJ.GT.X) GO TO 6 IC = 3 GO TO 10 6 CONTINUE IC = 4 10 CONTINUE IF(K.NE.1) GO TO 16 C C SET UP SECTORS THIS BUSINESS IN EFFECT ROTATES THE SECTORS C FOR CONVENIENCE IN LATER INTERPOLATIONS C GO TO (11, 12, 13, 14), IC 11 CONTINUE R = R1 RT = R2 RR = R3 RD = R4 GO TO 15 12 CONTINUE R = R2 RT = R1 RR = R4 RD = R3 AJ = 1. - AJ GO TO 15 13 CONTINUE R = R3 RT = R4 RR = R1 RD = R2 AI = 1. - AI GO TO 15 14 CONTINUE R = R4 RT = R3 RR = R2 RD = R1 AI = 1. - AI AJ = 1. - AJ 15 CONTINUE C C IF NO RAIN IN CORNER SECTTOR WHERE STATION IS - QUIT C IF(R.LE.0.) GO TO 150 X = 0.5 * X 16 CONTINUE 1 CONTINUE C C INTERPOLATE TO STATION IN EASY (NON-CORNER) SECTIONS C GO TO (21, 22, 23, 24), IC 21 CONTINUE AMOUNT = R GO TO 150 22 CONTINUE RC = RT RX = AJ GO TO 120 23 CONTINUE RC = RR RX = AI 120 CONTINUE IF(RC.GT. 0.) GO TO 130 AMOUNT = R - R*(RX-X)/X GO TO 150 130 CONTINUE AMOUNT = R + (0.5*(R+RC)-R)*(RX-X)/X GO TO 150 24 CONTINUE C C CORNER (CENTER OF BOX) SECTION C AA = AMAX1(RR, RT, RD) IF(AA.GT.0.) GO TO 30 RS = 0. RU = 0. RD = 0. GO TO 37 30 CONTINUE IF(RR.GT.0.) GO TO 32 RS = 0. RRD = 0. 33 CONTINUE IF(RT.GT.0.) GO TO 34 RU = 0. RTD = 0. GO TO 35 34 CONTINUE RU = 0.5 * (R+RT) IF(RD.GT.0.) GO TO 36 RTD = 0. GO TO 35 36 CONTINUE RTD = 0.5 * (RT + RD) GO TO 35 32 CONTINUE RS = 0.5 * (R+RR) IF(RD.GT.0.) GO TO 38 RRD = 0. GO TO 33 38 CONTINUE RRD = 0.5 * (RD + RR) GO TO 33 35 CONTINUE RD = 0.25 * (RS + RU + RTD + RRD) IF(RS.LE.0. .AND. RTD.LE.0.) RD = 0. IF(RU.LE.0..AND.RRD.LE.0.) RD=0. RU = RU + (RD-RU) * (AI-X)/X 37 CONTINUE R = R + (RS-R) * (AI-X)/X AMOUNT = R + (RU-R) * (AJ-X)/X 150 CONTINUE RETURN C END