C***********************************************************************SUBROUTINE CH_GP_TO_P(PGP,PP,KZ,PGPR,PPR,KZR,KDIR) 2 IMPLICIT NONE INTEGER KZ,KZR,KDIR REAL*8 PGP(KZ),PP(KZ),PGPR(KZR),PPR(KZR) #if defined (DOC) * * **s/r CH_GP_TO_P - Convert geopotential array to pressure array * or vice versa. * * AUTHOR: Y. Rochon *ARQX/AES Jan 1999 * REVISIONS: * * PURPOSE: Convert geopotential array to pressure array. * * This is done by linear interpolation from known profiles. * * ARGUMENTS * * INPUT: * * * KDIR: Flag (see PGP or PP below) * KZ,KZR: Dimension of arrays * PGPR: Reference geopotential profile (m^2/s^2) * PPR: Reference pressure profile (PA, 1-1 mapping between PGPR and PPR) * PGP or PP: Given geopotentials (m^2/s^2; KDIR=1) and pressures * (PA; KDIR=-1) respectively. * * OUTPUT: * * PP or PGP: Pressures (PA; KDIR=1) or geopotentials (m^2/s^2; KDIR=-1) * ************************************************************************ #endif C INTEGER I1,I2,I3,II1,II2,II3,J1,J2 C I1=KZ I2=1 I3=-1 C II1=KZR II2=1 II3=-1 C IF (PPR(1).GT.PPR(KZR)) THEN II1=1 II2=KZR II3=1 END IF C IF (KDIR.EQ.1) THEN IF (PGP(1).LT.PGP(KZ)) THEN I1=1 I2=KZ I3=1 END IF ELSE IF (PP(1).GT.PP(KZ)) THEN I1=1 I2=KZ I3=1 END IF END IF C IF (KDIR.EQ.1) THEN C DO J1=I1,I2,I3 C DO J2=II1,II2,II3 IF (PGP(J1).LT.PGPR(J2)) GO TO 10 END DO 10 CONTINUE C IF (J2.GE.KZR.AND.II3.EQ.1) THEN J2=KZR ELSE IF (J2.GE.KZR.AND.II3.EQ.-1) THEN J2=KZR-1 ELSE IF (J2.LE.1.AND.II3.EQ.1) THEN J2=2 ELSE IF (J2.LE.1.AND.II3.EQ.-1) THEN J2=1 END IF C PP(J1)=EXP( DLOG(PPR(J2))+DLOG(PPR(J2-II3)/PPR(J2))* 1 (PGP(J1)-PGPR(J2))/(PGPR(J2-II3)-PGPR(J2)) ) C END DO C ELSE C DO J1=I1,I2,I3 C DO J2=II1,II2,II3 IF (PP(J1).GT.PPR(J2)) GO TO 20 END DO 20 CONTINUE C IF (J2.GE.KZR.AND.II3.EQ.1) THEN J2=KZR ELSE IF (J2.GE.KZR.AND.II3.EQ.-1) THEN J2=KZR-1 ELSE IF (J2.LE.1.AND.II3.EQ.1) THEN J2=2 ELSE IF (J2.LE.1.AND.II3.EQ.-1) THEN J2=1 END IF C PGP(J1)=PGPR(J2)+(PGPR(J2-II3)-PGPR(J2))* 1 DLOG(PP(J1)/PPR(J2))/DLOG(PPR(J2-II3)/PPR(J2)) C END DO C END IF C RETURN END