!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer,
!                     version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer
!version 3 or (at your option) any later version that should be found at:
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software;
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec),
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
!

      SUBROUTINE INITGD0(PTRANS,KLEV,KNI,KNJ,KIG2,CDVAR) 4,1
*
#if defined (DOC)
*
***s/r INITGD0  - Transfer input grid-point trial fields
*                 to the model state-vector.
* WARNING!!!!!!!!!! :This also involves a transformation from true winds to wind images.
*
*Author  : Luc Fillion *RPN/AES  - Aug 92
*Revision:
*     P. GAUTHIER *ARMA/AES - Sept. 24, 1992
*     .                      Restructuration of the code
*     P. Gauthier *ARMA/AES - May 21, 1993
*     .                      Conversion of winds from knots to m/s
*     .                      RPN standard files require winds to be in knots
*     P. Koclas  *CMC/CMDA   February 1994
*     .                      - Handle cdvar = 'VT' inside
*                            routine instead of inside getfst.
*     P. Koclas  *CMC/CMDA   August 1995
*     .                      - Handle cdvar = 'ES' as moisture variable
*     P. GAUTHIER *ARMA/AES - April 1996
*     .                      Modifications on how to handle GZ and VT
*     S. Pellerin *ARMA/AES Sept 97.
*                            Change from TT to GZ state variables.
*     J. Halle    *CMDA/AES - Oct 1999
*     .                      Added ground temperature (TG) to the model state
*     L. Fillion  *ARMA-MSC - 2 May 2005.
*     .                      Extend the use to Limited-Area analysis.
*     Luc Fillion *ARMA/EC -  10 Apr. 2007: Add warning comment above.
*     Luc Fillion *ARMA/EC -  14 Aug 2007 - Update to v_10_0_3.
*     Luc Fillion *ARMA/EC -  1st May 2009 - Include QQ,DD in grd_typ='LU' mode.
*
*Arguments
*     i : PTRANS(KNI,KNJ) : field to be transferred
*     i : KLEV            : model level
*     i : KNI, KNJ        : must be .le. to NI, NJ
*     i : KIG2            : grid type according to the parameter IG2 of the
*     .                     RPN standard files.
*     i : CDVAR           : variable type being transfer
*
#endif
*
      IMPLICIT NONE
C
*
*IMPLICITS
#include "pardim.cdk"
#include "comdim.cdk"
#include "comcst.cdk"
#include "comlun.cdk"
#include "comgem.cdk"
#include "comgd0.cdk"
#include "comgrd_param.cdk"
#include "comgrd.cdk"
*
**
      INTEGER KLEV, KNI, KNJ, KIG2
      CHARACTER*2  CDVAR
      REAL*8 PTRANS(KNI,KNJ),ZCON, dix
C
      CHARACTER*2  CLVAR
      INTEGER JI, JJ
!
!!
      if(grd_typ.eq.'LU') then
        kig2=1  
        if((kni.gt.ni).or.(knj.gt.nj)) then
          call abort3d(nulout,'INITGD0: Input kni,knj > analysis ni,nj')
        endif
      endif
!
C ---------------------------------------------------
C*    THE TREATMENT OF GZ AND VT IS TEMPORARY.
C     THESE TWO FIELDS ARE BEING PUT IN THE GZ0 FIELD
C ---------------------------------------------------
      CLVAR=CDVAR
!      write(nulout,*) 'initgd0: treating variable ',CDVAR
!      write(nulout,*) 'initgd0: Argument dimensions passed: kni,knj = ',kni,knj

      dix=1.0D1
C
C*    1. Input field is stored from North to South in Global case
C
 100  CONTINUE
      IF(KIG2.EQ.1) THEN
         IF(CLVAR.EQ.'UU') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  UT0(JI,KLEV,JJ) = CONIMA(JJ)*PTRANS(JI,JJ)*RMSKNT  ! build Wind-Images
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'VV') THEN
            DO  JJ = 1, KNJ
               DO JI = 1, KNI
                  VT0(JI,KLEV,JJ) = CONIMA(JJ)*PTRANS(JI,JJ)*RMSKNT  ! build Wind-Images
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'DD') THEN
            DO  JJ = 1, KNJ
               DO JI = 1, KNI
                  VT0(JI,KLEV,JJ) = PTRANS(JI,JJ)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'CC') THEN
            DO  JJ = 1, KNJ
               DO JI = 1, KNI
                  VT0(JI,KLEV,JJ) = PTRANS(JI,JJ)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'UC') THEN
            DO  JJ = 1, KNJ
               DO JI = 1, KNI
                  VT0(JI,KLEV,JJ) = PTRANS(JI,JJ)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'QQ') THEN
            DO  JJ = 1, KNJ
               DO JI = 1, KNI
                  UT0(JI,KLEV,JJ) = PTRANS(JI,JJ)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'PP') THEN
            DO  JJ = 1, KNJ
               DO JI = 1, KNI
                  UT0(JI,KLEV,JJ) = PTRANS(JI,JJ)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'GP') THEN
            ZCON = dix*RG
            DO  JJ = 1, KNJ
               DO JI = 1, KNI
                  GZ0(JI,KLEV,JJ) = PTRANS(JI,JJ)*ZCON
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'GB') THEN
            ZCON = dix*RG
            DO  JJ = 1, KNJ
               DO JI = 1, KNI
                  GZ0(JI,KLEV,JJ) = PTRANS(JI,JJ)*ZCON
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'TT') THEN
            DO  JJ = 1, KNJ
               DO JI = 1, KNI
                  TT0(JI,KLEV,JJ)=PTRANS(JI,JJ)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'UT') THEN
            DO  JJ = 1, KNJ
               DO JI = 1, KNI
                  TT0(JI,KLEV,JJ)=PTRANS(JI,JJ)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'VT') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  TT0(JI,KLEV,JJ)=PTRANS(JI,JJ)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'GZ') THEN
            ZCON = dix*RG
            DO  JJ = 1, KNJ
               DO JI = 1, KNI
                  GZ0(JI,KLEV,JJ)=PTRANS(JI,JJ)*ZCON
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'ES') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  Q0(JI,KLEV,JJ)=PTRANS(JI,JJ)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'LQ') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  Q0(JI,KLEV,JJ)=PTRANS(JI,JJ)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'HU') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  Q0(JI,KLEV,JJ)=PTRANS(JI,JJ)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'O3') THEN
           DO JJ = 1, KNJ
             DO JI = 1, KNI
               GOZ0(JI,KLEV,JJ)=PTRANS(JI,JJ)
             ENDDO
           ENDDO
         ELSE IF(CLVAR.EQ.'TR') THEN
           DO JJ = 1, KNJ
             DO JI = 1, KNI
               GTR0(JI,KLEV,JJ)=PTRANS(JI,JJ)
             ENDDO
           ENDDO
         ELSE IF(CLVAR.EQ.'P0') THEN
            ZCON = 1.D2
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  GPS0(JI,1,JJ)=ZCON*PTRANS(JI,JJ)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'LP') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  GPS0(JI,1,JJ)=PTRANS(JI,JJ)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'TG') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  GTG0(JI,1,JJ)=PTRANS(JI,JJ)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'UP') THEN
            ZCON = 1.D2
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  GPS0(JI,1,JJ)=ZCON*PTRANS(JI,JJ)
               END DO
            END DO
         END IF
C
      ELSE IF(KIG2.EQ.0) THEN
C
C*    2. Input field is stored from South to North
C
 200     CONTINUE
C
         IF(CLVAR .EQ.'UU') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  UT0(JI,KLEV,JJ) = CONIMA(JJ)*RMSKNT
     S                 *PTRANS(JI,KNJ- JJ + 1)
               END DO
            END DO
         ELSE IF(CLVAR .EQ.'VV') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  VT0(JI,KLEV,JJ) = CONIMA(JJ)*RMSKNT
     S                 *PTRANS(JI,KNJ-JJ+1)
               END DO
            END DO
         ELSE IF(CLVAR .EQ.'CC') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  VT0(JI,KLEV,JJ) = PTRANS(JI,KNJ-JJ+1)
               END DO
            END DO
         ELSE IF(CLVAR .EQ.'UC') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  VT0(JI,KLEV,JJ) = PTRANS(JI,KNJ-JJ+1)
               END DO
            END DO
         ELSE IF(CLVAR .EQ.'PP') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  UT0(JI,KLEV,JJ) = PTRANS(JI,KNJ-JJ+1)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'TT') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  TT0(JI,KLEV,JJ)=PTRANS(JI,KNJ-JJ+1)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'UT') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  TT0(JI,KLEV,JJ)=PTRANS(JI,KNJ-JJ+1)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'VT') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  TT0(JI,KLEV,JJ)=PTRANS(JI,KNJ-JJ+1)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'GZ') THEN
            ZCON = dix*RG
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  GZ0(JI,KLEV,JJ)=PTRANS(JI,KNJ-JJ+1)*ZCON
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'GP') THEN
            ZCON = dix*RG
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  GZ0(JI,KLEV,JJ)=PTRANS(JI,KNJ-JJ+1)*ZCON
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'GB') THEN
            ZCON = dix*RG
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  GZ0(JI,KLEV,JJ)=PTRANS(JI,KNJ-JJ+1)*ZCON
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'ES') THEN
           DO JJ = 1, KNJ
             DO JI = 1, KNI
               Q0(JI,KLEV,JJ)=PTRANS(JI,KNJ-JJ+1)
             END DO
           END DO
         ELSE IF(CLVAR.EQ.'HU') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  Q0(JI,KLEV,JJ)=PTRANS(JI,KNJ-JJ+1)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'LQ') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  Q0(JI,KLEV,JJ)=PTRANS(JI,KNJ-JJ+1)
               END DO
            END DO
         ELSE IF(CLVAR.EQ.'O3') THEN
           DO JJ = 1, KNJ
             DO JI = 1, KNI
               GOZ0(JI,KLEV,JJ)=PTRANS(JI,KNJ-JJ+1)
             ENDDO
           ENDDO
         ELSE IF(CLVAR.EQ.'TR') THEN
           DO JJ = 1, KNJ
             DO JI = 1, KNI
               GTR0(JI,KLEV,JJ)=PTRANS(JI,KNJ-JJ+1)
             ENDDO
           ENDDO
         ELSE IF(CLVAR.EQ.'P0') THEN
            ZCON = 1.D2
            DO 241 JJ = 1, KNJ
               DO 242 JI = 1, KNI
                  GPS0(JI,1,JJ)=ZCON*PTRANS(JI,KNJ-JJ+1)
 242           CONTINUE
 241        CONTINUE
         ELSE IF(CLVAR.EQ.'LP') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  GPS0(JI,1,JJ)=PTRANS(JI,KNJ-JJ+1)
               ENDDO
            ENDDO
         ELSE IF(CLVAR.EQ.'UP') THEN
            ZCON = 1.D2
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  GPS0(JI,1,JJ)=ZCON*PTRANS(JI,KNJ-JJ+1)
               ENDDO
            ENDDO
         ELSE IF(CLVAR.EQ.'TG') THEN
            DO JJ = 1, KNJ
               DO JI = 1, KNI
                  GTG0(JI,1,JJ)=PTRANS(JI,KNJ-JJ+1)
               ENDDO
            ENDDO
         END IF
C
      END IF
C
      RETURN
      END