SUBROUTINE W3FT205(ALOLA,APOLA,INTERP) C$$$ SUBROUTINE DOCUMENTATION BLOCK *** C C SUBROUTINE: W3FT205 CONVERT (361,91) GRID TO (45,39) N. HEMI. GRID C AUTHOR: JONES,R.E. ORG: W342 DATE: 93-10-19 C C ABSTRACT: CONVERT A NORTHERN HEMISPHERE 1.0 DEGREE LAT.,LON. 361 BY C 91 GRID TO A POLAR STEREOGRAPHIC 45 BY 39 GRID. THE POLAR C STEREOGRAPHIC MAP PROJECTION IS TRUE AT 60 DEG. N. , THE MESH C LENGTH IS 190.5 KM. AND THE ORIENTION IS 60 DEG. W. POLE C POINT IS AT (I,J) = (27,57). NEW MAP IS AWIPS MAP 205. C C PROGRAM HISTORY LOG: C 93-10-19 R.E.JONES C C USAGE: CALL W3FT205(ALOLA,APOLA,INTERP) C C INPUT ARGUMENTS: ALOLA - 361*91 GRID 1.0 LAT,LON GRID N. HEMISPHERE C 32851 POINT GRID. 360 * 181 ONE DEGREE C GRIB GRID 3 WAS FLIPPED, GREENWISH ADDED C TO RIGH SIDE AND CUT TO 361 * 91. C INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC C C INPUT FILES: NONE C C OUTPUT ARGUMENTS: APOLA - 45*39 GRID OF NORTHERN HEMISPHERE. C 1755 POINT GRID IS AWIPS GRID TYPE 205 C C OUTPUT FILES: ERROR MESSAGE TO FORTRAN OUTPUT FILE C C WARNINGS: C C 1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE C REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE. C C 2. WIND COMPONENTS ARE NOT ROTATED TO THE 45*39 GRID ORIENTATION C AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS. C C RETURN CONDITIONS: NORMAL SUBROUTINE EXIT C C SUBPROGRAMS CALLED: C UNIQUE : NONE C C LIBRARY: ASIN , ATAN2 C C ATTRIBUTES: C LANGUAGE: SiliconGraphics 3.5 FORTRAN 77 C MACHINE: SiliconGraphics IRIS-4D/25, 35, INDIGO, Indy C C$$$ C PARAMETER (NPTS=1755,II=45,JJ=39) PARAMETER (ORIENT=60.0,IPOLE=27,JPOLE=57) PARAMETER (XMESH=190.5) C REAL R2(NPTS), WLON(NPTS) REAL XLAT(NPTS), XI(II,JJ), XJ(II,JJ) REAL XII(NPTS), XJJ(NPTS), ANGLE(NPTS) REAL ALOLA(361,91), APOLA(NPTS), ERAS(NPTS,4) REAL W1(NPTS), W2(NPTS) REAL XDELI(NPTS), XDELJ(NPTS) REAL XI2TM(NPTS), XJ2TM(NPTS) C INTEGER IV(NPTS), JV(NPTS), JY(NPTS,4) INTEGER IM1(NPTS), IP1(NPTS), IP2(NPTS) C LOGICAL LIN C SAVE C EQUIVALENCE (XI(1,1),XII(1)),(XJ(1,1),XJJ(1)) C DATA DEGPRD/57.2957795/ DATA EARTHR/6371.2/ DATA INTRPO/99/ DATA ISWT /0/ C LIN = .FALSE. IF (INTERP.EQ.1) LIN = .TRUE. C IF (ISWT.EQ.1) GO TO 900 C DEG = 1.0 GI2 = (1.86603 * EARTHR) / XMESH GI2 = GI2 * GI2 C C NEXT 32 LINES OF CODE PUTS SUBROUTINE W3FB05 IN LINE C DO 100 J = 1,JJ XJ1 = J - JPOLE DO 100 I = 1,II XI(I,J) = I - IPOLE XJ(I,J) = XJ1 100 CONTINUE C DO 200 KK = 1,NPTS R2(KK) = XJJ(KK) * XJJ(KK) + XII(KK) * XII(KK) XLAT(KK) = DEGPRD * & ASIN((GI2 - R2(KK)) / (GI2 + R2(KK))) 200 CONTINUE C XII(1647) = 1.0 DO 300 KK = 1,NPTS ANGLE(KK) = DEGPRD * ATAN2(XJJ(KK),XII(KK)) 300 CONTINUE C DO 400 KK = 1,NPTS IF (ANGLE(KK).LT.0.0) ANGLE(KK) = ANGLE(KK) + 360.0 400 CONTINUE C DO 500 KK = 1,NPTS WLON(KK) = 270.0 + ORIENT - ANGLE(KK) 500 CONTINUE C DO 600 KK = 1,NPTS IF (WLON(KK).LT.0.0) WLON(KK) = WLON(KK) + 360.0 600 CONTINUE C DO 700 KK = 1,NPTS IF (WLON(KK).GE.360.0) WLON(KK) = WLON(KK) - 360.0 700 CONTINUE C DO 800 KK = 1,NPTS W1(KK) = (360.0 - WLON(KK)) / DEG + 1.0 W2(KK) = XLAT(KK) / DEG + 1.0 800 CONTINUE C ISWT = 1 INTRPO = INTERP GO TO 1000 C C AFTER THE 1ST CALL TO W3FT203 TEST INTERP, IF IT HAS C CHANGED RECOMPUTE SOME CONSTANTS C 900 CONTINUE IF (INTERP.EQ.INTRPO) GO TO 2100 INTRPO = INTERP C 1000 CONTINUE DO 1100 K = 1,NPTS IV(K) = W1(K) JV(K) = W2(K) XDELI(K) = W1(K) - IV(K) XDELJ(K) = W2(K) - JV(K) IP1(K) = IV(K) + 1 JY(K,3) = JV(K) + 1 JY(K,2) = JV(K) 1100 CONTINUE C IF (LIN) GO TO 1400 C DO 1200 K = 1,NPTS IP2(K) = IV(K) + 2 IM1(K) = IV(K) - 1 JY(K,1) = JV(K) - 1 JY(K,4) = JV(K) + 2 XI2TM(K) = XDELI(K) * (XDELI(K) - 1.0) * .25 XJ2TM(K) = XDELJ(K) * (XDELJ(K) - 1.0) * .25 1200 CONTINUE C 1400 CONTINUE C IF (LIN) GO TO 1700 C DO 1500 KK = 1,NPTS IF (JV(KK).LT.2.OR.JV(KK).GT.89) XJ2TM(KK) = 0.0 1500 CONTINUE C 1700 CONTINUE C IF (.NOT.LIN) THEN DO 2000 KK = 1,NPTS IF (JY(KK,1).LT.1) JY(KK,1) = 1 2000 CONTINUE ENDIF C 2100 CONTINUE IF (LIN) THEN C C LINEAR INTERPOLATION C DO 2200 KK = 1,NPTS ERAS(KK,2) = (ALOLA(IP1(KK),JY(KK,2))-ALOLA(IV(KK),JY(KK,2))) & * XDELI(KK) + ALOLA(IV(KK),JY(KK,2)) ERAS(KK,3) = (ALOLA(IP1(KK),JY(KK,3))-ALOLA(IV(KK),JY(KK,3))) & * XDELI(KK) + ALOLA(IV(KK),JY(KK,3)) 2200 CONTINUE C DO 2300 KK = 1,NPTS APOLA(KK) = ERAS(KK,2) + (ERAS(KK,3) - ERAS(KK,2)) & * XDELJ(KK) 2300 CONTINUE C ELSE C C QUADRATIC INTERPOLATION C DO 2400 KK = 1,NPTS ERAS(KK,1)=(ALOLA(IP1(KK),JY(KK,1))-ALOLA(IV(KK),JY(KK,1))) & * XDELI(KK) + ALOLA(IV(KK),JY(KK,1)) + & ( ALOLA(IM1(KK),JY(KK,1)) - ALOLA(IV(KK),JY(KK,1)) & - ALOLA(IP1(KK),JY(KK,1))+ALOLA(IP2(KK),JY(KK,1))) & * XI2TM(KK) ERAS(KK,2)=(ALOLA(IP1(KK),JY(KK,2))-ALOLA(IV(KK),JY(KK,2))) & * XDELI(KK) + ALOLA(IV(KK),JY(KK,2)) + & ( ALOLA(IM1(KK),JY(KK,2)) - ALOLA(IV(KK),JY(KK,2)) & - ALOLA(IP1(KK),JY(KK,2))+ALOLA(IP2(KK),JY(KK,2))) & * XI2TM(KK) ERAS(KK,3)=(ALOLA(IP1(KK),JY(KK,3))-ALOLA(IV(KK),JY(KK,3))) & * XDELI(KK) + ALOLA(IV(KK),JY(KK,3)) + & ( ALOLA(IM1(KK),JY(KK,3)) - ALOLA(IV(KK),JY(KK,3)) & - ALOLA(IP1(KK),JY(KK,3))+ALOLA(IP2(KK),JY(KK,3))) & * XI2TM(KK) ERAS(KK,4)=(ALOLA(IP1(KK),JY(KK,4))-ALOLA(IV(KK),JY(KK,4))) & * XDELI(KK) + ALOLA(IV(KK),JY(KK,4)) + & ( ALOLA(IM1(KK),JY(KK,4)) - ALOLA(IV(KK),JY(KK,4)) & - ALOLA(IP1(KK),JY(KK,4))+ALOLA(IP2(KK),JY(KK,4))) & * XI2TM(KK) 2400 CONTINUE C DO 2500 KK = 1,NPTS APOLA(KK) = ERAS(KK,2) + (ERAS(KK,3) - ERAS(KK,2)) & * XDELJ(KK) + (ERAS(KK,1) - ERAS(KK,2) & - ERAS(KK,3) + ERAS(KK,4)) * XJ2TM(KK) 2500 CONTINUE C C NO POLE POINT C ENDIF C RETURN END