SUBROUTINE TPREP(THLIQC, THLIQG, THICEC, THICEG, TBARC,  TBARG,              1
     1                 TBARCS, TBARGS, HCPC,   HCPG,   TCTOP,  TCBOT,
     2                 HCPSNO, TCSNOW, TSNOCS, TSNOGS, TCANO,  TCANS, 
     3                 CEVAP,  IEVAP,  TBAR1P, HCP1P,  WTABLE, FTEMP,
     4                 EVAPC,  EVAPCG, EVAPG,  EVAPCS, EVPCSG, EVAPGS,     
     5                 GSNOWC, GSNOWG, GZEROC, GZEROG, QMELTC, QMELTG,    
     6                 ST,     SU,     SV,     SQ,     CDH,    CDM,    
     7                 TSURF,  QSENS,  QEVAP,  QLWAVG, ILMO,   H,
     8                 FSGV,   FSGS,   FSGG,   FLGV,   FLGS,   FLGG,   
     9                 HFSC,   HFSS,   HFSG,   HEVC,   HEVS,   HEVG,   
     A                 HMFC,   EVPPOT, ACOND,  DRAG,   UE,     FVAP,
     B                 THLIQ,  THICE,  TBAR,   ZPOND,  TPOND,  
     C                 THPOR,  THLMIN, THLRET, THFC,   HCPS,   TCS,    
     D                 TA,     RHOSNO, TSNOW,  ZSNOW,  TCAN,
     E                 FC,     FCS,    DELZW,  ZBOTW,  GZROCS, GZROGS,
     F                 ISAND,  ILG,    IL1,    IL2,    JL,     IG,  
     G                 FVEG,   TCSAT  )           
C                                                                                 
C     * AUG 19/04 - Y.DELAGE.   REGROUP COMMON BLOCKS
C     *                         MAKE DECLARATIONS EXPLICIT
C     * JUL 30/02 - D.VERSEGHY. MOVE CALCULATION OF VEGETATION 
C     *                         STOMATAL RESISTANCE INTO APREP
C     *                         AND CANALB; SHORTENED CLASS3
C     *                         COMMON BLOCK.
C     * JUN 17/02 - D.VERSEGHY. NEW THERMAL ARRAYS FOR SURFACE 
C     *                         TEMPERATURE ITERATION, WITH PONDED
C     *                         WATER ROLLED INTO SOIL UPPER LAYER;
C     *                         SHORTENED CLASS4 COMMON BLOCK.
C     * MAR 20/02 - D.VERSEGHY. MOVE CALCULATION OF BACKGROUND SOIL 
C     *                         PROPERTIES INTO "CLASSB"; UPDATES 
C     *                         TO MAKE ZPOND A PROGNOSTIC VARIABLE.
C     * FEB 27/02 - D.VERSEGHY. RECALCULATE WILTING POINT BASED ON
C     *                         FIELD CAPACITY.
C     * JAN 18/02 - D.VERSEGHY. INTRODUCTION OF CALCULATION OF FIELD
C     *                         CAPACITY AND NEW BARE SOIL EVAPORATION
C     *                         PARAMETERS.
C     * APR 11/01 - M.LAZARE.   SHORTENED "CLASS2" COMMON BLOCK.     
C     * NOV 01/00 - A.WU/D.VERSEGHY. EXTEND MINERAL SOIL CALCULATION
C     *                              OF SOIL EVAPORATION "BETA" TO
C     *                              ORGANIC SOILS.
C     * SEP 19/00 - A.WU/D.VERSEGHY. CHANGE CALCULATION OF THERMAL
C     *                              CONDUCTIVITY FOR ORGANIC SOILS,
C     *                              USING METHOD OF FAROUKI (1981).
C     *                              ALSO, CALCULATE STOMATAL RESISTANCE
C     *                              USING VEGETATION-VARYING 
C     *                              COEFFICIENTS FOR ENVIRONMENTAL
C     *                              VARIABLES.
C     * FEB 14/00 - D.VERSEGHY. INSERT CALCULATION OF WATER TABLE DEPTH
C     *                         FOR ORGANIC SOILS.
C     * DEC 07/99 - A.WU/D.VERSEGHY.  INCORPORATE CALCULATION OF "BETA"
C     *                               PARAMETER FOR NEW SOIL EVAPORATION
C     *                               FORMULATION.
C     * JUN 20/97 - D.VERSEGHY. CLASS - VERSION 2.7.
C     *                         CHANGES RELATED TO VARIABLE SOIL DEPTH
C     *                         (MOISTURE HOLDING CAPACITY) AND DEPTH-
C     *                         VARYING SOIL PROPERTIES.
C     * JAN 24/97 - D.VERSEGHY. CLASS - VERSION 2.6.
C     *                         SET RC AND RCS TO ZERO FOR GRID CELLS
C     *                         WITH NO VEGETATION.
C     * JAN 02/96 - D.VERSEGHY. CLASS - VERSION 2.5.
C     *                         COMPLETION OF ENERGY BALANCE 
C     *                         DIAGNOSTICS.
C     * AUG 30/95 - D.VERSEGHY. CLASS - VERSION 2.4.
C     *                         REMOVE SUBTRACTION OF RESIDUAL SOIL
C     *                         MOISTURE CONTENT IN CALCULATIONS OF
C     *                         "PSIZRO" AND "PSII".
C     * AUG 18/95 - D.VERSEGHY. REVISIONS TO ALLOW FOR INHOMOGENEITY
C     *                         BETWEEN SOIL LAYERS AND FRACTIONAL
C     *                         ORGANIC MATTER CONTENT.
C     * DEC 16/94 - D.VERSEGHY. CLASS - VERSION 2.3.
C     *                         INITIALIZE THREE NEW DIAGNOSTIC FIELDS.
C     * NOV 12/94 - D.VERSEGHY. SET INITIAL TEMPERATURE OF EMERGING
C     *                         CANOPY TO TA INSTEAD OF TO ZERO.
C     * JAN 31/94 - D.VERSEGHY. CLASS - VERSION 2.2.
C     *                         INTRODUCE LIMITING VALUES INTO
C     *                         CALCULATION OF "PSIZRO" TO AVOID
C     *                         OVERFLOWS.
C     * JUL 27/93 - D.VERSEGHY/M.LAZARE. INITIALIZE NEW DIAGNOSTIC 
C     *                                  FIELDS FSGV,FSGG,FLGV,FLGG,
C     *                                  HFSC,HFSG,HMFC.
C     * MAY 06/93 - D.VERSEGHY/M.LAZARE. CLASS - VERSION 2.1.
C     *                                  MODIFICATIONS TO CANOPY
C     *                                  RESISTANCE TO ADD "RCS"
C     *                                  FIELD FOR SNOW-COVERED
C     *                                  CANOPY. 
C     * JUL 04/92 - D.VERSEGHY/M.LAZARE. REVISED AND VECTORIZED CODE
C     *                                  FOR MODEL VERSION GCM7.                            
C     * AUG 12/91 - D.VERSEGHY. CODE FOR MODEL VERSION GCM7U -
C     *                         CLASS VERSION 2.0 (WITH CANOPY).            
C     * APR 11/89 - D.VERSEGHY. PREPARATION AND INITIALIZATION FOR
C     *                         LAND SURFACE ENERGY BUDGET 
C     *                         CALCULATIONS.
C                                                                                 
      IMPLICIT NONE
      INTEGER ILG,    IL1,    IL2,    JL,     IG,I,J
      REAL THSNOW,SATRAT,THLSAT,THISAT,P1,P2,P3,TCSOIL
C
C     * OUTPUT ARRAYS.                                                            
C                                                                                 
      REAL TBARC (ILG,IG),TBARG (ILG,IG),TBARCS(ILG,IG),TBARGS(ILG,IG),
     1     THLIQC(ILG,IG),THLIQG(ILG,IG),THICEC(ILG,IG),THICEG(ILG,IG),           
     2     HCPC  (ILG,IG),HCPG  (ILG,IG),TCTOP (ILG,IG),TCBOT (ILG,IG)            
C                                                                                 
      REAL HCPSNO(ILG),   TCSNOW(ILG),   TSNOGS(ILG),   TSNOCS(ILG),   
     1     TCANO (ILG),   TCANS (ILG),   CEVAP (ILG),   
     2     TBAR1P(ILG),   HCP1P (ILG),   WTABLE(ILG) 
C                                                                                 
      INTEGER             IEVAP (ILG)
C                                                                                 
C     * OUTPUT ARRAYS WHICH ARE INTERNAL WORK ARRAYS FOR CLASST                   
C     * AND ARE INITIALIZED TO ZERO HERE.                                               
C                                                                                 
      REAL EVAPC (ILG),   EVAPCG(ILG),   EVAPG (ILG),   EVAPCS(ILG),              
     1     EVPCSG(ILG),   EVAPGS(ILG),   GSNOWC(ILG),   GSNOWG(ILG),   
     2     GZEROC(ILG),   GZEROG(ILG),   QMELTC(ILG),   QMELTG(ILG),
     3     GZROCS(ILG),   GZROGS(ILG)  
C
C     * DIAGNOSTIC ARRAYS.
C
      REAL ST    (ILG),   SU    (ILG),   SV    (ILG),   SQ    (ILG),
     1     CDH   (ILG),   CDM   (ILG),   TSURF (ILG),   FTEMP (ILG),
     2     QSENS (ILG),   QEVAP (ILG),   QLWAVG(ILG),   FVAP  (ILG),
     3     FSGV  (ILG),   FSGS  (ILG),   FSGG  (ILG),   FLGV  (ILG),   
     4     FLGS  (ILG),   FLGG  (ILG),   HFSC  (ILG),   HFSS  (ILG),   
     5     HFSG  (ILG),   HEVC  (ILG),   HEVS  (ILG),   HEVG  (ILG),   
     6     HMFC  (ILG),   EVPPOT(ILG),   ACOND (ILG),   DRAG  (ILG),
     7     ILMO  (ILG),   H     (ILG),   UE    (ILG)
C
C     * INPUT ARRAYS.                                                             
C                                                                                 
      REAL THLIQ (ILG,IG),THICE (ILG,IG),TBAR  (ILG,IG),
     1     ZPOND (ILG),   TPOND (ILG)
C                                                                                 
      REAL TA    (ILG),   RHOSNO(ILG),   TSNOW (ILG),   ZSNOW (ILG),   
     1     TCAN  (ILG),   FC    (ILG),   FCS   (ILG) 
C                                                                                 
C     * SOIL PROPERTY ARRAYS.                                     
C                                                                                 
      REAL THPOR(ILG,IG), THLMIN(ILG,IG),THLRET(ILG,IG),
     1     THFC  (ILG,IG),HCPS  (ILG,IG),TCS   (ILG,IG)

      REAL DELZW(ILG,IG), ZBOTW(ILG,IG)
C                                                                                 
      INTEGER       ISAND (ILG,IG)
C                                                                                 
C     * INTERNAL WORK FIELDS FOR THIS ROUTINE.                                    
C                                                                                 
      REAL FVEG  (ILG),   TCSAT (ILG)
C                                                                                 
#include "class_com.cdk"
C----------------------------------------------------------------------           
C     * INITIALIZE 2-D ARRAYS.                                                    
C                                                                                 
      DO 50 J=1,IG                                                                
      DO 50 I=IL1,IL2                                                             
          THLIQG(I,J)=THLIQ(I,J)                                                  
          THICEG(I,J)=THICE(I,J)                                                  
          THLIQC(I,J)=THLIQ(I,J)                                                  
          THICEC(I,J)=THICE(I,J)                                                  
          TBARCS(I,J)=0.0                                                         
          TBARGS(I,J)=0.0                                                         
          TBARC (I,J)=0.0                                                         
          TBARG (I,J)=0.0
   50 CONTINUE                                                                    
C                                                                                 
C     * INITIALIZE 1-D INTERNAL WORK FIELDS FOR LATER USE.                        
C                                                                                 
      DO 100 I=IL1,IL2                                                            
          FVEG  (I)=FC(I)+FCS(I)                                                  
          IF(TCAN(I).GT.5.0) THEN
              TCANS (I)=TCAN(I)  
              TCANO (I)=TCAN(I) 
          ELSE
              TCANS (I)=TA(I)  
              TCANO (I)=TA(I) 
          ENDIF
          EVAPC (I)=0.                                                            
          EVAPCG(I)=0.                                                            
          EVAPG (I)=0.                                                            
          EVAPCS(I)=0.                                                            
          EVPCSG(I)=0.                                                            
          EVAPGS(I)=0.                                                            
          GSNOWC(I)=0.                                                            
          GSNOWG(I)=0.                                                            
          GZEROC(I)=0.                                                            
          GZEROG(I)=0.                                                            
          GZROCS(I)=0.
          GZROGS(I)=0.
          QMELTC(I)=0.                                                            
          QMELTG(I)=0.
          ST    (I)=0.
          SU    (I)=0.
          SV    (I)=0.
          SQ    (I)=0.
          CDH   (I)=0.
          FTEMP (I)=0.
          FVAP  (I)=0.
          CDM   (I)=0.
          TSURF (I)=0.
          QSENS (I)=0.
          QEVAP (I)=0.
          QLWAVG(I)=0.
          FSGV  (I)=0.
          FSGS  (I)=0.
          FSGG  (I)=0.
          FLGV  (I)=0. 
          FLGS  (I)=0. 
          FLGG  (I)=0.
          HFSC  (I)=0.
          HFSS  (I)=0.
          HFSG  (I)=0.
          HEVC  (I)=0.
          HEVS  (I)=0.
          HEVG  (I)=0.
          HMFC  (I)=0.
          EVPPOT(I)=0.
          ACOND (I)=0.
          DRAG  (I)=0.
          ILMO  (I)=0.
          UE    (I)=0.
          H     (I)=0.
          WTABLE(I)=9999.
  100 CONTINUE                                                                    
C                                                                                 
C     * SURFACE EVAPORATION EFFICIENCY FOR BARE SOIL ENERGY BALANCE
C     * CALCULATIONS.                                 
C
      DO 200 I=IL1,IL2    
          IF(THLIQG(I,1).LE.(THLMIN(I,1)+0.001)) THEN    
              IEVAP(I)=0  
              CEVAP(I)=0.0
          ELSEIF(THLIQG(I,1).GE.THFC(I,1)) THEN
              IEVAP(I)=1   
              CEVAP(I)=1.0
          ELSE
              IEVAP(I)=1
              CEVAP(I)=0.25*(1.0-COS(3.14159*THLIQG(I,1)/THFC(I,1)))**2
          ENDIF
  200 CONTINUE  
C                                                                                 
C     * VOLUMETRIC HEAT CAPACITIES OF SOIL LAYERS AND DEPTH OF 
C     * WATER TABLE IN ORGANIC SOILS.                                
C                                                                                 
      DO 300 J=1,IG                                                               
      DO 300 I=IL1,IL2                                                            
          IF(ISAND(I,1).GT.-4)                                     THEN          
              HCPC(I,J)=0.                                                        
              HCPG(I,J)=0.                                                        
              IF(FVEG(I).LT.1.)                                THEN               
                  HCPG(I,J)=HCPW*THLIQG(I,J)+HCPICE*THICEG(I,J)+
     1                HCPS(I,J)*(1.0-THPOR(I,J))
              ENDIF                                                               
              IF(FVEG(I).GT.0.)                                    THEN                    
                  HCPC(I,J)=HCPW*THLIQC(I,J)+HCPICE*THICEC(I,J)+
     1                HCPS(I,J)*(1.0-THPOR(I,J))
              ENDIF                                                               
          ELSE                                                                    
              HCPC(I,J)=HCPICE                                                    
              HCPG(I,J)=HCPICE                                                    
          ENDIF                                                                   
  300 CONTINUE                                                                    
C                                                                                 
C     * THERMAL PROPERTIES OF SNOW.
C                                                                                 
      DO 400 I=IL1,IL2                                                            
          IF(ZSNOW(I).GT.0.)                                        THEN          
              THSNOW=RHOSNO(I)/RHOICE                                             
              HCPSNO(I)=HCPICE*THSNOW                                             
              TCSNOW(I)=2.576E-6*RHOSNO(I)*RHOSNO(I)+0.074                        
              IF(FVEG(I).LT.1.)                                 THEN              
                  TSNOGS(I)=TSNOW(I)                                              
              ELSE                                                                
                  TSNOGS(I)=0.0                                                   
              ENDIF                                                               
              IF(FVEG(I).GT.0.)                                 THEN              
                  TSNOCS(I)=TSNOW(I)                                              
              ELSE                                                                
                  TSNOCS(I)=0.0                                                   
              ENDIF                                                               
          ELSE                                                                    
              TSNOGS(I)=0.0                                                       
              TSNOCS(I)=0.0                                                       
          ENDIF                                                                   
  400 CONTINUE                                                                    
C                                                                                 
C     * THERMAL CONDUCTIVITIES OF SOIL LAYERS.                                         
C                                                                                 
      DO 500 J=1,IG                                                               
      DO 500 I=IL1,IL2                                                            
c         IF    (ISAND(I,1).EQ.-4)                              THEN          
c             TCTOP(I,J)=TCGLAC                                                     
c             TCBOT(I,J)=TCGLAC
c         ELSEIF(ISAND(I,J).EQ.-3)                              THEN
c             TCTOP(I,J)=TCSAND
c             TCBOT(I,J)=TCSAND
c         ELSEIF(ISAND(I,J).EQ.-2)          THEN 
c             IF (WTABLE(I).GT.999. .AND. THLIQG(I,J).GT. 
c    1            THLRET(I,J))  THEN
c                 WTABLE(I)=ZBOTW(I,J)-
c    1                      DELZW(I,J)*(THLIQG(I,J)-THLRET(I,J))/
c    2                      (THPOR(I,J)-THICEG(I,J)*RHOICE/RHOW-
c    3                      THLRET(I,J))            
c                 THTOT=THLRET(I,J)+THICEG(I,J)*RHOICE/RHOW
c                 SATRAT=MIN((THLRET(I,J)+THICEG(I,J)*RHOICE/RHOW)/
c    1                   THPOR(I,J), 1.0)              
c                 RATICE=(THICEG(I,J)*RHOICE/RHOW)/
c    1                   (THLRET(I,J)+THICEG(I,J)*RHOICE/RHOW)          
c                 RATLIQ=MIN(1.0-RATICE,1.0)
c                 RATLIQ=MAX(0.0,RATLIQ)
c                 TCTHAW=0.55*THTOT*THTOT+0.05
c                 TCFROZ=0.0603*EXP(3.73*SATRAT)
c                 TCSOIL=RATLIQ*TCTHAW+RATICE*TCFROZ
c                 IF(DELZW(I,J).GT.0.0) THEN
c                     TCTOP(I,J)=TCSOIL
c                 ELSE
c                     TCTOP(I,J)=TCSAND
c                 ENDIF
c                 IF(DELZW(I,J).LT.DELZ(J)) THEN
c                     TCBOT(I,J)=TCSAND
c                 ELSE
c                     RATICE=(THICEG(I,J)*RHOICE/RHOW)/THPOR(I,J)
c                     RATLIQ=MIN(1.0-RATICE,1.0)
c                     RATLIQ=MAX(0.0,RATLIQ)
c                     TCTHAW=0.55*THPOR(I,J)*THPOR(I,J)+0.05
c                     TCFROZ=1.80
c                     TCBOT(I,J)=RATLIQ*TCTHAW+RATICE*TCFROZ
c                 ENDIF
c                 IF(J.EQ.1.AND.ZPOND(I).GT.1.0E-3) TCTOP(I,J)=TCW
c             ELSE
c                 THTOT=THLIQG(I,J)+THICEG(I,J)*RHOICE/RHOW
c                 SATRAT=MIN((THLIQG(I,J)+THICEG(I,J)*RHOICE/RHOW)/
c    1                   THPOR(I,J), 1.0)              
c                 RATICE=(THICEG(I,J)*RHOICE/RHOW)/
c    1                   (THLIQG(I,J)+THICEG(I,J)*RHOICE/RHOW)          
c                 RATLIQ=MIN(1.0-RATICE,1.0)
c                 RATLIQ=MAX(0.0,RATLIQ)
c                 TCTHAW=0.55*THTOT*THTOT+0.05
c                 TCFROZ=0.0603*EXP(3.73*SATRAT)
c                 TCSOIL=RATLIQ*TCTHAW+RATICE*TCFROZ
c                 IF(DELZW(I,J).GT.0.0) THEN
c                     TCTOP(I,J)=TCSOIL
c                 ELSE
c                     TCTOP(I,J)=TCSAND
c                 ENDIF
c                 IF(DELZW(I,J).LT.DELZ(J)) THEN
c                     TCBOT(I,J)=TCSAND
c                 ELSE
c                     TCBOT(I,J)=TCSOIL
c                 ENDIF
c                 IF(J.EQ.1.AND.ZPOND(I).GT.1.0E-3) TCTOP(I,J)=TCW
c             ENDIF    
c         ELSE
              SATRAT=MIN((THLIQG(I,J)+THICEG(I,J)*RHOICE/RHOW)/
     1               THPOR(I,J), 1.0)              
              THLSAT=THPOR(I,J)*THLIQG(I,J)/(THLIQG(I,J)+
     1               THICEG(I,J)*RHOICE/RHOW)          
              THISAT=THPOR(I,J)*THICEG(I,J)*RHOICE/RHOW/
     1               (THLIQG(I,J)+THICEG(I,J)*RHOICE/RHOW)          
              p1=TCW**THLSAT
              p2=TCICE**THISAT
              p3=TCS(I,J)**(1.0-THPOR(I,J))
              TCSAT(I)=p1*p2*p3
c             TCSAT(I)=(TCW**THLSAT)*(TCICE**THISAT)*
c    1                 (TCS(I,J)**(1.0-THPOR(I,J)))
              TCSOIL=(TCSAT(I)-TCDRYS)*SATRAT+TCDRYS                              
              IF(DELZW(I,J).GT.0.0) THEN
                  TCTOP(I,J)=TCSOIL
              ELSE
                  TCTOP(I,J)=TCSAND
              ENDIF
              IF(DELZW(I,J).LT.DELZ(J)) THEN
                  TCBOT(I,J)=TCSAND
              ELSE
                  TCBOT(I,J)=TCSOIL
              ENDIF
              IF(J.EQ.1.AND.ZPOND(I).GT.1.0E-3) TCTOP(I,J)=TCW
c         ENDIF                                                                   
  500 CONTINUE                                                                    
C                                                                           
C     * ADD PONDED WATER TEMPERATURE TO FIRST SOIL LAYER FOR USE
C     * IN GROUND HEAT FLUX CALCULATIONS.
C
      DO 600 I=IL1,IL2
          HCP1P (I) = 0.
          IF(ISAND(I,1).GT.-4 .AND.  ZPOND(I).GT.0. 
     1                        .AND. DELZW(I,1).GT.0.) THEN
              HCP1P (I)=HCPW*(THLIQ(I,1)+ZPOND(I)/DELZW(I,1)) +
     1                  HCPICE*THICE(I,1) + HCPS(I,1)*(1.-THPOR(I,1)) 
c             TBAR1P(I)=(TPOND(I)*HCPW*ZPOND(I) + 
c    1                  TBAR(I,1)*((HCPW*THLIQ(I,1) +          
c    2                  HCPICE*THICE(I,1) + 
c    3                  HCPS(I,1)*(1.-THPOR(I,1)))*DELZW(I,1)+
c    4                  HCPSND*(DELZ(1)-DELZW(I,1))))/
c    5                  (HCP1P(I)*DELZW(I,1)+HCPSND*(DELZ(1)-
c    6                  DELZW(I,1)))
          ELSE
              HCP1P (I)=HCPG(I,1)
c             TBAR1P(I)=TBAR(I,1)
          ENDIF
  600 CONTINUE
      do I=IL1,IL2
          if(HCP1P (I).gt.1.e-5) then
              TBAR1P(I)=(TPOND(I)*HCPW*ZPOND(I) +
     1                  TBAR(I,1)*((HCPW*THLIQ(I,1) +
     2                  HCPICE*THICE(I,1) +
     3                  HCPS(I,1)*(1.-THPOR(I,1)))*DELZW(I,1)+
     4                  HCPSND*(DELZ(1)-DELZW(I,1))))/
     5                  (HCP1P(I)*DELZW(I,1)+HCPSND*(DELZ(1)-
     6                  DELZW(I,1)))
          else
               TBAR1P(I)=TBAR(I,1)
          ENDIF
      enddo
C                                                                                 
      RETURN                                                                      
      END