!copyright (C) 2001  MSC-RPN COMM  %%%RPNPHY%%%
***S/P INICHAMP1
*

      SUBROUTINE INICHAMP1(E, ESIZ, F, FSIZ,  1,4
     $                     V, VSIZ, D, DSIZ,
     $                     QCPLUS0, QCDIFV,
     $                     TRAV2D, SELOC, KOUNT, TRNCH,
     $                     DT, CDT1, NI, NK)
*
#include "impnone.cdk"
*
      INTEGER I, IK, K, ESIZ, FSIZ, VSIZ, DSIZ, KOUNT, NI, NK, TRNCH
      REAL E(ESIZ), F(FSIZ), D(DSIZ), V(VSIZ), DT, CDT1
      REAL QCPLUS0(NI,NK)
      REAL SELOC(NI,NK), QCDIFV (NI,NK)
      REAL TRAV2D (NI,NK)
*
*Author
*          B. Bilodeau (July 1997)
*
*Revision
* 001      M. Desgagne (Winter 1998) Add averaged tendencies
* 002      B. Bilodeau (Nov 1998) Merge phyexe and param4
* 003      B. Bilodeau (Feb 1999) Entry bus
* 004      J. Mailhot  (Mar 1999) - Changes for new SURFACE interface
* 005      S. Belair   (Mar 1999) Entry bus for ISBA
*                                 New subroutine INISURF
* 006      A. Methot (May 1999) - Correct bug when FCPFLG < 0
* 007      B. Bilodeau (Nov 2000) - New comdeck phybus.cdk
* 008      B.Dugas     (Jul 2001) - Add MOYHR field ccnm
* 009      B. Bilodeau and A. Zadra (Mar 2003) - Add call to equivmount
* 010      B. Bilodeau (Jun 2003) - IBM conversion
*               - Remove initialization of volatile bus to zero 
*                 since it is already done in the dynamics code
* 011      B. Bilodeau and L. Spacek (Dec 2003) - Move zeroing of 
*                                        accumulators to calcdiag
* 012      B. Bilodeau (Feb 2004) - Change indexing for initialization
*                                   of HST
*
*
*Object
*          To initialize arrays.
*
* Arguments
*
*          - Input -
* F        field for permanent physics variables
* FSIZ     dimension of F
* V        volatile bus
* VSIZ     dimension of V
* D        dynamics bus
* DSIZ     dimension of D
* QCPLUS0  QCPLUS at the beginning of physics calculations
* QCDIFV   QC tendency due to vertical diffusion
* TRAV2D   work field
* SELOC    intermediate (staggered) sigma levels (2D)
* KOUNT    timestep number
* TRNCH    row number
* DT       length of timestep
* CDT1     =   DT for 2-time level models
*          = 2*DT for 3-time level models
* NI       horizontal dimension
* NK       vertical dimension
*
**
*
#include "indx_sfc.cdk"
#include "options.cdk"
#include "phy_macros_f.h"
#include "phybus.cdk"
#include "consphy.cdk"
      INTEGER NIK
*
************************************************************************
*     AUTOMATIC ARRAYS
************************************************************************
*
      AUTOMATIC ( LAND   , REAL   , (NI   ) )
      AUTOMATIC ( ENV    , REAL   , (NI   ) )
      AUTOMATIC ( SXX    , REAL   , (NI   ) )
      AUTOMATIC ( SYY    , REAL   , (NI   ) )
      AUTOMATIC ( SXY    , REAL   , (NI   ) )
      AUTOMATIC ( SLOPE8 , REAL   , (NI   ) )
      AUTOMATIC ( XCENT8 , REAL   , (NI   ) )
      AUTOMATIC ( MTDIR8 , REAL   , (NI   ) )
*
************************************************************************
*
      EXTERNAL INISURF
*
*
      NIK = NI*NK
*
*
*
************************************************************************
*        INITIALISATIONS FAITES A KOUNT = 0 SEULEMENT                  *
*        --------------------------------------------                  *
************************************************************************
*
      IF (KOUNT.EQ.0) THEN
*
         DO I=1,FSIZ
            F(I) = 0.0
         END DO
*
         DO I=1,VSIZ
            V(I) = 0.0
         END DO
*
*        CORRECTIF TEMPORAIRE : CONVERSION DE CM A M
         DO I=0,NI-1
            E(SNODPEN+I) = 0.01 * E(SNODPEN+I)
         END DO
*
         DO I=0,NI-1
            V(SNODEN +I) = 100.0
         END DO
*
         CALL INISURF( E, ESIZ, F, FSIZ, NI, NK)
*
*VDIR NODEP
         DO I=0,NI-1
            F(TSM1+I) = F(TSOIL   +I)
         END DO
*
*
*VDIR NODEP
         DO I=0,NI-1
*
*           HAUTEUR DE LA COUCHE LIMITE
            F(HST + (indx_soil    -1)*NI +I) = 300.
            F(HST + (indx_glacier -1)*NI +I) = 300.
            F(HST + (indx_water   -1)*NI +I) = 300.
            F(HST + (indx_ice     -1)*NI +I) = 300.
            F(H   +I) = 300.
            V(KCL +I) = NK-3
            F(SCL +I) = EXP(-GRAV*F(H+I)/(RGASD*D(TMOINS+(NK-1)*NI+I)))
*
*           TEMPERATURE A LA SURFACE (POUR LA RADIATION)
            IF(FLOAT(IFIX(0.1+F(MG+I))).EQ.0.0) F(TSRAD+I)=F(TWATER+I)
*
         END DO 
*
         IF (ISTCOND.GE.2) THEN
*
*           INITIALISER LE CHAMP D'EAU NUAGEUSE A ZERO.
*           LES PROCESSUS DE CONDENSATION SE CHARGERONT D'Y
*           METTRE DES VALEURS INITIALES.
*
            DO IK=0,NI*(NK-1)-1
               D(QCMOINS   +IK) = 0.0
               D( QCPLUS   +IK) = 0.0
               QCPLUS0 (IK+1,1) = 0.0
            ENDDO

            IF (INILWC) THEN
*
*              INITIALISER LE CHAMP D'EAU NUAGEUSE AINSI QUE LA
*              FRACTION NUAGEUSE POUR L'APPEL A LA RADIATION A KOUNT=0
*              SEULEMENT.
*              CES VALEURS SERONT REMPLACEES PAR CELLES CALCULEES DANS
*              LES MODULES DE CONDENSATION.
*
               CALL CLDWIN(F(CCN),F(LWC),D(TMOINS),D(HUMOINS),D(PMOINS),
     $                     TRAV2D,D(SIGM),NI,NK,SATUCO)
*
            ENDIF
*
         ENDIF
*
*        PRECALCULS POUR SCHEMA DE BLOCAGE
*
         DO I=1,NI
            LAND(I)  = - ABS( NINT( F(mg+I-1) ) )
            ENV(I)   = F(lhtg+I-1)
            SXX(I)   = F(dhdx+I-1)
            SYY(I)   = F(dhdy+I-1)
            SXY(I)   = F(dhdxdy+I-1)
         ENDDO
*
         CALL EQUIVMOUNT (LAND, ENV, SXX, SYY, SXY,
     +                    NI, 1, NI,
     +                    SLOPE8, XCENT8, MTDIR8)
*
         DO  I=1,NI
           F(slope+I-1) = SLOPE8(I)
           F(xcent+I-1) = XCENT8(I)
           F(mtdir+I-1) = MTDIR8(I)
         ENDDO
*
      ENDIF
*
************************************************************************
*     INITIALISATIONS FAITES A TOUS LES PAS DE TEMPS                   *
*     ----------------------------------------------                   *
************************************************************************
*
      DO K=1,NK
         DO I=1,NI
            QCDIFV(I,K)    = 0.0
         END DO
      END DO
*
*
      IF(ICONVEC.EQ.5.OR.ICONVEC.EQ.6) THEN
*
*        POUR CONVEC = "FCP" OU "KFC"
*VDIR NODEP
         DO I=0,NI-1
            D(FCPMSK+I) = 2.0
            D(FCPOID+I) = 1.0
         END DO
* 
      ELSE IF(ICONVEC.NE.11 .AND. ICONVEC.NE.12) THEN
*
*        POUR CONVEC DIFFERENT DE "FCP" ET DE "FCPKUO",
*        FCPMASK EST ZERO.
*        POUR CONVEC = "FCPKUO" ou "KFCKUO2",  LA DYNAMIQUE
*        DOIT OBLIGATOIREMENT SPECIFIER FCPMASK ET FCPOIDS.
*
*VDIR NODEP
         DO I=0,NI-1
            D(FCPMSK+I) = 0.0
            D(FCPOID+I) = 0.0
         END DO
*
      ENDIF
*
*
      IF(ISTCOND.EQ.1) THEN
*
*        EAU LIQUIDE DIAGNOSTIQUE
*        ------------------------
*
         CALL ADILWC(TRAV2D,D(TMOINS),D(HUMOINS),D(OMEGAP),DT,D(PMOINS),
     +               SELOC,NI,NI,NK-1)
*
*VDIR NODEP
         DO IK=1,NI*(NK-1)
            IF(F(FN+IK-1).EQ.0.) THEN
               F(LWC+IK-1) = 0.
            ELSE
               F(LWC+IK-1) = TRAV2D(IK,1)
            ENDIF
         END DO
*
      ENDIF
*
************************************************************************
*     INITIALISATIONS FAITES A KOUNT > 0 SEULEMENT                     *
*     --------------------------------------------                     *
************************************************************************
*
      IF (KOUNT.GT.0) THEN
*
*        correctif temporaire : conversion de cm a m
         do i=0,5*ni-1
            f(snodp +i) = 0.01 * f(snodp+i)
         end do
*
         do i=0,ni-1
            v(snoden+i) = 100.0
         end do
*
      ENDIF
*
*
      RETURN
      END