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