SUBROUTINE GDOUT2(CPVAR,pptrans,kni,knj,KLEV,lplok,kip1) 7
#if defined (DOC)
*
***s/r GDOUT2  - Transfert of the content of COMGD0 on a RPN
*     .         standard file
*
*Author  : P. Gauthier *ARMA/AES  June 9, 1992
*Revision:
*     P. Gauthier *ARMA/AES  Oct. 22, 1993: control of postprocessing
*     .                      through the comdeck COMPOST
*     P. Gauthier *ARMA/AES  May 25, 1993:
*     .                      Transfer of specific humidity and surface
*     .                      pressure on file (only if defined in the model
*     .                      state.
*     P. Koclas   *CMC/CMDA  February 1994
*     .                      -ip3 now= KITER in call to fstecr.
*                            -Add arguments CDTYPV KSTAMP.
*                            -Replace comdeck "comtrl"  by "compost"
*     L. Fillion  *ARMA/AES  Nov 1994:
*                            Output height field in decameters.
*     C. Charette *ARMA/AES  Jan 96
*                 -Read RPN standard file parameters from 'compost'
*     P. Gauthier *ARMA/AES Dec. 1996
*     .           -Add the variables relative (QR)and absolute (QQ)
*     .            vorticity, streamfunction (PP), velocity potential
*     .            (CC) and divergence (DD) in the possible choices for
*     .            output (these fields are computed within POSTPROC
*     .            and are transferred to GDOUT via the comdeck
*     .            "localpost.cdk". This mechanism will allow for the
*     .            computation of diagnostic quantities and their transfer
*     .            The control remains the same as before: through NPPCVAR
*     .            (total number of variables to write) and their names
*     .            in CPVAR(*) defined in COMPOST.
*     S. Pellerin *ARMA/AES Sept 97.
*                  Introduction of Ozone and Passive tracer.
*     S. Pellerin *ARMA/AES Oct 97
*                  -Introduction of NIP1s from COMGEM
*                  -Modification in subroutine parameters (arguments).
*                  -Output of total ozone O3 (DU)
*     M Buehner   July 98
*                  -Get rid of check on level for 2D fields, since this
*                   caused subroutine to return before writing any 3D fields
*                   listed after a 2D field
*                  -Moved IP1= statement inside variables loop
*     L. Fillion  *ARMA/AES 16 nov 98
*                  - Adapt GZ and ES diagnostic output
*     C. Charette *ARMA/AES 26 nov 98
*                  - Adapt HU, VT diagnostic output
*     L. Fillion  *ARMA/AES 4 dec 98
*                  - Allow output of TTB,TTU,GZB,GZU,PSB,PSU
*     S. Pellerin *ARMA/SMC May 2000
*                  -Arguments modification for call in varout.ftn
*     JM Belanger CMDA/SMC  Oct 2000
*                   . 32 bits conversion
*     C. Charette *ARMA/SMC - Sept 2004
*                  - Conversion to hybrid vertical coordinate
*     Y. Yang     Sep. 2004
*                  - Added include "comchem.cdk"
*                  - Added loops for species
*     Y. Yang     Feb. 2005
*                  - Removed 'O3' part as ozone is now part of 'TR'
*
*Arguments
*     i   CPVAR : variable name
*     i   kni,knj : dimension of vector pptrans
*     i   KLEV    : index of the level to be transferred
* OUTPUT
*     o   pptrans : vector containing the variable
*     o   lplok   : logical indicating if the variable has been
*                   implemented
*     o   kip1    : ip1 of the corresponding level

*
#endif
C
      IMPLICIT NONE
*implicits
#include "pardim.cdk"
#include "comdim.cdk"
#include "comlun.cdk"
#include "comcst.cdk"
#include "comgem.cdk"
#include "comchem.cdk"
#include "comcva.cdk"
#include "comgd0.cdk"
#include "compost.cdk"
*
      INTEGER kni,knj,klev,kip1
      real*8 pptrans(kni,knj)
      character*(*) cpvar
      logical lplok
*
      INTEGER JLON, JGL,ig2
      REAL*8 ZTEMP, ZGEOP, ZDAM, ZCON, un, dix
      INTEGER JJ
#include "localpost.cdk"
C
      IG2      =  NIG2
      kiP1      =  NIP1(kLEV)
      un = 1.0D0
      dix = 1.0D1

C
C     2. Transfer of the fields of COMGD to an internal buffer
C     .  -----------------------------------------------------
C
c  SET DIAGNOSTIC VARIABLES ON IF FIRST VAR IS PP (for GENINCR branch)
c
      lplok = .true.
C
C     .  2.1 Fields associated with model variables
C
      IF(CPVAR.EQ.'TT') THEN
C
C     *  Temperature field
C
        DO JLON = 1, NI
          DO JGL = 1, NJ
            PPTRANS(JLON,JGL) = TT0(JLON,KLEV,JGL)
          END DO
        END DO
      ELSE IF(CPVAR.EQ.'TB') THEN
C
C     *  Balanced Temperature field
C
        DO JLON = 1, NI
          DO JGL = 1, NJ
            PPTRANS(JLON,JGL) = ZTTB(JLON,KLEV,JGL)
          END DO
        END DO
      ELSE IF(CPVAR.EQ.'TU') THEN
C
C     *  Unbalanced Temperature field
C
        DO JLON = 1, NI
          DO JGL = 1, NJ
            PPTRANS(JLON,JGL) = ZTTU(JLON,KLEV,JGL)
          END DO
        END DO
      ELSE IF(CPVAR.EQ.'UT') THEN
C
C     *  Unbalanced Temperature field for stat
C
        DO JLON = 1, NI
          DO JGL = 1, NJ
            PPTRANS(JLON,JGL) = ZTP(JLON,KLEV,JGL)
          END DO
        END DO
      ELSE IF(CPVAR.EQ.'VT') THEN
C
C     *  Virtual temperature field
C
        DO JLON = 1, NI
          DO JGL = 1, NJ
            PPTRANS(JLON,JGL) = ZTV(JLON,KLEV,JGL)
          END DO
        END DO
      ELSE IF(CPVAR.EQ.'GZ') THEN
C
C     *  Geopotential field
C
        ZGEOP  = dix * RG
        ZDAM   = un/ZGEOP
c
        DO JLON = 1, NI
          DO JGL = 1, NJ
            PPTRANS(JLON,JGL) = ZDAM * zgz(JLON,KLEV,JGL)
          END DO
        END DO
      ELSE IF(CPVAR.EQ.'ZB') THEN
C
C     *  Balanced Geopotential field
C
        ZGEOP  = dix * RG
        ZDAM   = un/ZGEOP
c
        DO JLON = 1, NI
          DO JGL = 1, NJ
            PPTRANS(JLON,JGL) = ZDAM * zgzb(JLON,KLEV,JGL)
          END DO
        END DO
      ELSE IF(CPVAR.EQ.'ZU') THEN
C
C     *  Unbalanced Geopotential field
C
        ZGEOP  = dix * RG
        ZDAM   = un/ZGEOP
c
        DO JLON = 1, NI
          DO JGL = 1, NJ
            PPTRANS(JLON,JGL) = ZDAM * zgzu(JLON,KLEV,JGL)
          END DO
        END DO
C
C     *  Zonal wind component (in Knots)
C
      ELSE IF(CPVAR.EQ.'UU') THEN
        DO JGL = 1, NJ
          DO JLON = 1, NI
            PPTRANS(JLON,JGL) = UT0(JLON,KLEV,JGL)
     S           *CONPHY(JGL)*RKNTMS
          END DO
        END DO
C
C     *  Meridional wind component (in Knots)
C
      ELSE IF(CPVAR.EQ.'VV') THEN
        DO JGL = 1, NJ
          DO JLON = 1, NI
            PPTRANS(JLON,JGL) = VT0(JLON,KLEV,JGL)
     S           *CONPHY(JGL)*RKNTMS
          END DO
        END DO
C
C     *  Humidity field
C
      ELSE IF(CPVAR.EQ.'ES') THEN
        if(chum .eq. 'LQ') then
          DO JLON = 1, NI
            DO JGL = 1, NJ
              PPTRANS(JLON,JGL) = zes(JLON,KLEV,JGL)
            END DO
          END DO
        elseif(chum .eq. 'ES') then
          DO JLON = 1, NI
            DO JGL = 1, NJ
              PPTRANS(JLON,JGL) = Q0(JLON,KLEV,JGL)
            END DO
          END DO
        endif
C
      ELSE IF(CPVAR.EQ.'LQ') THEN
        IF(CHUM .EQ. 'LQ')THEN
          DO JLON = 1, NI
            DO JGL = 1, NJ
              PPTRANS(JLON,JGL) = Q0(JLON,KLEV,JGL)
            END DO
          END DO
        ELSEIF(CHUM .EQ. 'ES')THEN
          LPLOK = .FALSE.
          WRITE(NULOUT,*)' ****************************************'
          WRITE(NULOUT,'(" GDOUT2: THE REQUESTED FIELD LQ IS NOT "
     &         ,"SUPPORTED WHEN CVCORD= ",A8," AND CHUM= ",A2)')
     &         CVCORD,CHUM
          WRITE(NULOUT,*)' ****************************************'
        ENDIF
C
      ELSE IF(CPVAR.EQ.'HU') THEN
          DO JLON = 1, NI
            DO JGL = 1, NJ
              PPTRANS(JLON,JGL) = zhu(JLON,KLEV,JGL)
            END DO
          END DO
C
C     *    Surface Pressure from units of Pascal to millibar
C
      ELSE IF(CPVAR.EQ.'P0') THEN
        kip1=0
        DO JLON = 1, NI
          DO JGL = 1, NJ
            PPTRANS(JLON,JGL) = GPS0(JLON,1,JGL)*RPATMB
          END DO
        END DO
C
C     *    Ground temperature in Kelvin
C
      ELSE IF(CPVAR.EQ.'TG') THEN
        kip1=0
        DO JLON = 1, NI
          DO JGL = 1, NJ
            PPTRANS(JLON,JGL) = GTG0(JLON,1,JGL)
          END DO
        END DO
c
      else if (LVARDIAG) then
C
C     .  2.2 Diagnostic fields produced in DIAG3DVAR
C
 220    CONTINUE
C
C     Relative vorticity
C
        IF(CPVAR.EQ.'QR') THEN
          DO JLON = 1, NI
            DO JGL = 1, NJ
              PPTRANS(JLON,JGL) = ZQR(JLON,KLEV,JGL)
            END DO
          END DO
C
C    Absolute vorticity
C
        ELSE IF(CPVAR.EQ.'QQ') THEN
          DO JLON = 1, NI
            DO JGL = 1, NJ
              PPTRANS(JLON,JGL) = ZQQ(JLON,KLEV,JGL)
            END DO
          END DO
C
C    Divergence
C
        ELSE IF(CPVAR.EQ.'DD') THEN
          DO JLON = 1, NI
            DO JGL = 1, NJ
              PPTRANS(JLON,JGL) = ZDD(JLON,KLEV,JGL)
            END DO
          END DO
C
C    Velocity potential
C
        ELSE IF(CPVAR.EQ.'CC') THEN
          DO JLON = 1, NI
            DO JGL = 1, NJ
              PPTRANS(JLON,JGL) = ZCC(JLON,KLEV,JGL)
            END DO
          END DO
C
C    Unbalanced Velocity potential
C
        ELSE IF(CPVAR.EQ.'UC') THEN
          DO JLON = 1, NI
            DO JGL = 1, NJ
              PPTRANS(JLON,JGL) = ZUC(JLON,KLEV,JGL)
            END DO
          END DO
C
C    Stream function
C
        ELSE IF(CPVAR.EQ.'PP') THEN
          DO JLON = 1, NI
            DO JGL = 1, NJ
              PPTRANS(JLON,JGL) = ZPP(JLON,KLEV,JGL)
            END DO
          END DO
C
C     *  2.3 OTHER SURFACE FIELDS
C
C
 230      CONTINUE
        ELSE IF(CPVAR.EQ.'PB') THEN
C
C    Balanced surface-pressure
C
          kip1 = 0
          DO JLON = 1, NI
            DO JGL = 1, NJ
              PPTRANS(JLON,JGL) = zpsb(JLON,JGL)*RPATMB
            END DO
          END DO
        ELSE IF(CPVAR.EQ.'PU') THEN
C
C    Unbalanced surface-pressure
C
          kip1 = 0
          DO JLON = 1, NI
            DO JGL = 1, NJ
              PPTRANS(JLON,JGL) = zpsu(JLON,JGL)*RPATMB
            END DO
          END DO
        ELSE IF(CPVAR.EQ.'UP') THEN
C
C    Unbalanced surface-pressure for stat
C
          kip1 = 0
          DO JLON = 1, NI
            DO JGL = 1, NJ
              PPTRANS(JLON,JGL) = ZLPP(JLON,1,JGL)*1.0D-2
            END DO
          END DO
        else
C
C    Chemistry fields
C
          DO JJ = 1, NGCMT
             IF(CPVAR .eq. CGCMT(JJ)) THEN
               DO JLON = 1, NI
                 DO JGL = 1, NJ
                   PPTRANS(JLON,JGL) = GTR0(JLON,(JJ-1)*NFLEV+KLEV,JGL)
                 END DO
               END DO
               LPLOK = .TRUE.
               go to 400
             ENDIF
          ENDDO

          LPLOK = .FALSE.
          WRITE(NULOUT,*)' ****************************************'
          WRITE(NULOUT,'(" GDOUT2: THE DIAGNOSTIC FIELD IS NOT "
     &         ,"SUPPORTED  CPVAR= ",A2)')CPVAR
          WRITE(NULOUT,*)' ****************************************'

        endif

C
 400  continue
C
      else

        LPLOK = .FALSE.
        WRITE(NULOUT,*)' ****************************************'
        WRITE(NULOUT,'(" GDOUT2: THE FOLLOWING FIELD IS NOT "
     &       ,"SUPPORTED  CPVAR= ",A2)')CPVAR
        WRITE(NULOUT,*)' ****************************************'

      END IF

      IF ( IG2 .EQ. 0 .and. lplok) THEN
        DO 262 JLON   = 1, NI
          DO 263 JGL = 1, NJ/2
            ZTEMP=PPTRANS(JLON,JGL)
            PPTRANS(JLON,JGL)=PPTRANS(JLON,NJ-JGL+1)
            PPTRANS(JLON,NJ-JGL+1)=ZTEMP
 263      CONTINUE
 262    CONTINUE
      ENDIF
C
      RETURN
      END