SUBROUTINE CLASST (TBARC,  TBARG,  TBARCS, TBARGS, THLIQC, THLIQG, 1,19
     1   THICEC, THICEG, HCPC,   HCPG,   GZEROC, GZEROG, QLWAVG, 
     2   GZROCS, GZROGS, G12C,   G12G,   G12CS,  G12GS,  G23C,   G23G,   
     3   G23CS,  G23GS,  QFREZC, QFREZG, QMELTC, QMELTG, EVAPC,  EVAPCG, 
     4   EVAPG,  EVAPCS, EVPCSG, EVAPGS, TCANO,  TCANS,  
     5   RAICAN, SNOCAN, RAICNS, SNOCNS, CHCAP,  CHCAPS, ILMO,   UE,
     6   TPONDC, TPONDG, TPNDCS, TPNDGS, TSNOCS, TSNOGS, H,
     7   ITERCT, CDH,    CDM,    QSENS,  TFLUX,  QEVAP,  EVAP,   QFLUX,  
     8   EVPPOT, ACOND,  EVAPB,  GT,     QG,     TSURF,  ST,     SU,
     9   SV,     SQ,     FSGV,   FSGS,   FSGG,   FLGV,   FLGS,   FLGG,   
     A   HFSC,   HFSS,   HFSG,   HEVC,   HEVS,   HEVG,   HMFC,   HTCC,   
     B   HTCS,   HTC,    WTABLE, ZREFM,  ZREFH,  ZDIAGM, ZDIAGH,
     C   VPD,    TADP,   RHOAIR, QSWINV, QSWINI, QLWIN,  UWIND,  VWIND,
     D   TA,     QA,     PADRY,  FC,     FG,     FCS,    FGS,    DLEAF,  
     E   AILCAN, AILCNS, FSVF,   FSVFS,  ALVSCN, ALIRCN, ALVSG,  ALIRG,  
     F   ALVSCS, ALIRCS, ALVSSN, ALIRSN, TRVSCN, TRIRCN, TRVSCS, TRIRCS, 
     G   RC,     RCS,    FRAINC, FSNOWC, CMASSC, CMASCS, DISP,   DISPS,  
     H   ZOMLNC, ZOELNC, ZOMLNG, ZOELNG, ZOMLCS, ZOELCS, ZOMLNS, ZOELNS, 
     I   TBAR,   THLIQ,  THICE,  TPOND,  ZPOND,  TBASE,  TCAN,   TSNOW,  
     J   ZSNOW,  TRSNOW, RHOSNO, THPOR,  THLRET, THLMIN, THFC,   RADJ,
     K   HCPS,   TCS,    DELZW,  ZBOTW,  ISAND,  
     L   ILW,    ILG,    IL1,    IL2,    JL,     IC,     IG,     IZREF,
     M   ISLFD,  NLANDCS,NLANDGS,NLANDC, NLANDG, NLANDI, ITER,   NITER )
C
C     * AUG 19/04 - Y.DELAGE.   REMOVE WORK ARRAYS FROM ARGUMENT LIST
C                               REGROUP COMMON BLOCKS
C                               MAKE DECLARATIONS EXPLICIT
C     * NOV 07/02 - Y.DELAGE/D.VERSEGHY. CALLS TO NEW DIAGNOSTIC
C     *                         SUBROUTINES "SLDIAG" AND "DIASURF";
C     *                         MODIFICATIONS TO ACCOMMODATE DIFFERENT
C     *                         SURFACE REFERENCE HEIGHT CONVENTIONS.
C     * JUL 31/02 - D.VERSEGHY. MOVE CALCULATION OF VEGETATION STOMATAL
C     *                         RESISTANCE FROM TPREP INTO APREP AND
C     *                         CANALB; SHORTENED CLASS3 COMMON BLOCK.
C     * JUL 23/02 - D.VERSEGHY. MOVE ADDITION OF AIR TO CANOPY MASS
C     *                         INTO CLASSA; SHORTENED CLASS4
C     *                         COMMON BLOCK.
C     * MAR 28/02 - D.VERSEGHY. STREAMLINED SUBROUTINE CALLS.
C     * MAR 22/02 - D.VERSEGHY. MOVE CALCULATION OF BACKGROUND SOIL 
C     *                         PROPERTIES INTO "CLASSB"; ADD NEW
C     *                         DIAGNOSTIC VARIABLES "EVPPOT", "ACOND" 
C     *                         AND "TSURF"; MODIFY CALCULATIONS OF VAC,
C     *                         EVAPB AND QG.
C     * JAN 18/02 - D.VERSEGHY. CHANGES TO INCORPORATE NEW BARE SOIL
C     *                         EVAPORATION FORMULATION.
C     * APR 11/01 - M.LAZARE.   SHORTENED "CLASS2" COMMON BLOCK.
C     * SEP 19/00 - D.VERSEGHY. PASS VEGETATION-VARYING COEFFICIENTS
C     *                         TO TPREP FOR CALCULATION OF STOMATAL
C     *                         RESISTANCE.
C     * DEC 16/99 - A.WU/D.VERSEGHY. CHANGES MADE TO INCORPORATE NEW SOIL
C     *                              EVAPORATION ALGORITHMS AND NEW CANOPY
C     *                              TURBULENT FLUX FORMULATION.  MODIFY
C     *                              CALCULATION OF BULK RICHARDSON NUMBER
C     *                              AND CANOPY MASS.
C     * APR 15/99 - M.LAZARE.   CORRECT SCREEN-LEVEL CALCULATION FOR WINDS
C     *                         TO HOLD AT ANEMOMETER LEVEL (10M) INSTEAD
C     *                         OF SCREEN LEVEL (2M).
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     *                         ALSO, APPLY UPPER BOUND ON "RATFC1"). 
C     * OCT 11/96 - D.VERSEGHY. CLASS - VERSION 2.6.
C     *                         REVISE CALCULATION OF SLTHKEF AND 
C     *                         DEFINITION OF ZREF FOR INTERNAL 
C     *                         CONSISTENCY.
C     * SEP 27/96 - D.VERSEGHY. FIX BUG IN CALCULATION OF FLUXES
C     *                         BETWEEN SOIL LAYERS (PRESENT SINCE 
C     *                         RELEASE OF CLASS VERSION 2.5).
C     * MAY 21/96 - K.ABDELLA.  CORRECT EXPRESSION FOR ZOSCLH (4 PLACES).
C     * JAN 02/96 - D.VERSEGHY. CLASS - VERSION 2.5.
C     *                         COMPLETION OF ENERGY BALANCE 
C     *                         DIAGNOSTICS; ALSO, PASS IN ZREF AND
C     *                         ILW THROUGH SUBROUTINE CALL.
C     * AUG 18/95 - D.VERSEGHY. CLASS - VERSION 2.4.
C     *                         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     *                         ADD THREE NEW DIAGNOSTIC FIELDS;
C     *                         REVISE CALCULATION OF HTCS, HTC.
C     * DEC 06/94 - M.LAZARE. - PASS "CFLUX" TO TSOLVE INSTEAD OF
C     *                         "CLIMIT" IN CONJUNCTION WITH CHANGES
C     *                         TO THAT ROUTINE.
C     *                       - REVISE CALCULATION OF "ZREF" TO INCLUDE
C     *                         VIRTUAL TEMPERATURE EFFECTS.
C     *                       - REVISE CALCULATION OF "SLTHKEF".
C     * NOV 28/94 - M.LAZARE.   FORM DRAG "CDOM" MODIFICATION REMOVED.
C     * NOV 18/93 - D.VERSEGHY. CLASS - VERSION 2.2.
C     *                         LOCAL VERSION WITH INTERNAL WORK ARRAYS
C     *                         HARD-CODED FOR USE ON PCS.
C     * NOV 05/93 - M.LAZARE.   ADD NEW DIAGNOSTIC OUTPUT FIELD: DRAG.
C     * JUL 27/93 - D.VERSEGHY/M.LAZARE. PREVIOUS VERSION CLASSTO.
      IMPLICIT NONE
      INTEGER I,ILW, ILG,IL1,IL2,JL, IC, IG, IZREF,ISLFD,J,ISNOW
      INTEGER NLANDCS,NLANDGS,NLANDC, NLANDG, NLANDI
      REAL THTOT,CA,CB,wacsat,qacsat
C
C     * OUTPUT FIELDS.
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),HTC   (ILG,IG)             
C   
      REAL GZEROC(ILG),   GZEROG(ILG),   GZROCS(ILG),   GZROGS(ILG),              
     1     G12C  (ILG),   G12G  (ILG),   G12CS (ILG),   G12GS (ILG),               
     2     G23C  (ILG),   G23G  (ILG),   G23CS (ILG),   G23GS (ILG),               
     3     QFREZC(ILG),   QFREZG(ILG),   QMELTC(ILG),   QMELTG(ILG),              
     4     EVAPC (ILG),   EVAPCG(ILG),   EVAPG (ILG),   EVAPCS(ILG),
     5     EVPCSG(ILG),   EVAPGS(ILG),   TCANO (ILG),   TCANS (ILG), 
     6     RAICAN(ILG),   SNOCAN(ILG),   RAICNS(ILG),   SNOCNS(ILG),  
     7     CHCAP (ILG),   CHCAPS(ILG),   TPONDC(ILG),   TPONDG(ILG),   
     8     TPNDCS(ILG),   TPNDGS(ILG),   TSNOCS(ILG),   TSNOGS(ILG),   
     9     CDH   (ILG),   CDM   (ILG),   QSENS (ILG),   TFLUX (ILG),   
     A     QEVAP (ILG),   EVAP  (ILG),   QFLUX (ILG),   
     B     EVPPOT(ILG),   ACOND (ILG),   EVAPB (ILG),   
     C     GT    (ILG),   QG    (ILG),   TSURF (ILG),   WTABLE(ILG),   
     D     ST    (ILG),   SU    (ILG),   SV    (ILG),   SQ    (ILG),   
     E     FSGV  (ILG),   FSGS  (ILG),   FSGG  (ILG),   FLGV  (ILG),
     F     FLGS  (ILG),   FLGG  (ILG),   HFSC  (ILG),   HFSS  (ILG),
     G     HFSG  (ILG),   HEVC  (ILG),   HEVS  (ILG),   HEVG  (ILG),  
     H     HMFC  (ILG),   HTCC  (ILG),   HTCS  (ILG),   QLWAVG(ILG),
     I     ILMO  (ILG),   UE    (ILG),   H     (ILG)
C
      INTEGER  ITERCT(ILG,6,50)
C
C     * INPUT FIELDS.
C
      REAL ZREFM (ILG),   ZREFH (ILG),   ZDIAGM(ILG),   ZDIAGH(ILG),
     1     VPD   (ILG),   TADP  (ILG),   RHOAIR(ILG),   QSWINV(ILG),   
     2     QSWINI(ILG),   QLWIN (ILG),   UWIND (ILG),   VWIND (ILG),   
     3     TA    (ILG),   QA    (ILG),   PADRY (ILG),   FC    (ILG),   
     4     FG    (ILG),   FCS   (ILG),   FGS   (ILG),   DLEAF (ILG), 
     5     AILCAN(ILG),   AILCNS(ILG),   FSVF  (ILG),   FSVFS (ILG),   
     6     ALVSCN(ILG),   ALIRCN(ILG),   ALVSG (ILG),   ALIRG (ILG),              
     7     ALVSCS(ILG),   ALIRCS(ILG),   ALVSSN(ILG),   ALIRSN(ILG),  
     8     TRVSCN(ILG),   TRIRCN(ILG),   TRVSCS(ILG),   TRIRCS(ILG),  
     9     RC    (ILG),   RCS   (ILG),   FRAINC(ILG),   FSNOWC(ILG),  
     A     CMASSC(ILG),   CMASCS(ILG),   DISP  (ILG),   DISPS (ILG),   
     B     ZOMLNC(ILG),   ZOELNC(ILG),   ZOMLNG(ILG),   ZOELNG(ILG),   
     C     ZOMLCS(ILG),   ZOELCS(ILG),   ZOMLNS(ILG),   ZOELNS(ILG),   
     D     ZPOND (ILG),   TBASE (ILG),   TCAN  (ILG),   TSNOW (ILG),  
     E     ZSNOW (ILG),   TRSNOW(ILG),   RHOSNO(ILG),   TPOND (ILG)   
C     
      REAL TBAR  (ILG,IG),THLIQ (ILG,IG),THICE (ILG,IG)
C
      REAL  RADJ  (ILG)
C
C     * SOIL PROPERTY ARRAYS.
C
      REAL THPOR (ILG,IG),THLRET(ILG,IG),THLMIN(ILG,IG),
     1     THFC  (ILG,IG),HCPS  (ILG,IG),TCS   (ILG,IG),
     1     DELZW (ILG,IG),ZBOTW (ILG,IG)
C
      INTEGER  ISAND (ILG,IG)
C
C     * INTERNAL WORK ARRAYS FOR THIS ROUTINE.
C
      REAL TCTOP (ILG, IG),TCBOT (ILG, IG)
C
      REAL VA    (ILG),   ZRSLDM(ILG),   ZRSLDH(ILG),
     1     ZRSLFM(ILG),   ZRSLFH(ILG),   ZDSLM (ILG),   ZDSLH (ILG),
     2     TPOTA (ILG),   TVIRTA(ILG),   CRIB  (ILG),   CPHCHC(ILG),   
     3     CPHCHG(ILG),   HCPSNO(ILG),   TCSNOW(ILG),   CEVAP (ILG),   
     4     TBAR1P(ILG),   HCP1P (ILG),   GSNOWC(ILG),   GSNOWG(ILG),   
     5     GDENOM(ILG),   GCOEFF(ILG),   GCONST(ILG),   A1    (ILG),   
     6     A2    (ILG),   A3    (ILG),   B1    (ILG),   B2    (ILG),   
     7     B3    (ILG),   C2    (ILG),   C3    (ILG),   D3    (ILG),   
     8     TSTART(ILG),   ZOM   (ILG),   ZOH   (ILG),   ZOSCLM(ILG),   
     9     ZOSCLH(ILG),   VAC   (ILG),   RIB   (ILG),   FCOR  (ILG),
     A     TAC   (ILG),   CFLUX (ILG),   CDHX  (ILG),   CDMX  (ILG),   
     B     QSWX  (ILG),   QSWNC (ILG),   QSWNG (ILG),   QLWX  (ILG),
     C     QLWOC (ILG),   QLWOG (ILG),   QTRANS(ILG),    
     D     QSENSX(ILG),   QSENSC(ILG),   QSENSG(ILG),   QEVAPX(ILG),   
     E     QEVAPC(ILG),   QEVAPG(ILG),   QPHCHC(ILG),   QCANX (ILG),
     F     TSURX (ILG),   QSURX (ILG),   FTEMP (ILG),   FVAP  (ILG),
     G     ILMOX (ILG),   UEX   (ILG),   HX    (ILG),   DRAG  (ILG)
C
      INTEGER             IEVAP (ILG),   IWATER(ILG)
C
C     * INTERNAL WORK ARRAYS FOR TPREP.
C
      REAL FVEG  (ILG),    TCSAT (ILG)
C
C     * INTERNAL WORK ARRAYS FOR TSOLVC/TSOLVE.
C   
      REAL TSTEP (ILG),    TVIRTC(ILG),    TVIRTG(ILG),    TVIRTS(ILG),    
     1     EVBETA(ILG),    XEVAP (ILG),    EVPWET(ILG),    Q0SAT (ILG),
     2     RB    (ILG),    RAGINV(ILG),    RBINV (ILG),    
     3     RBTINV(ILG),    RBCINV(ILG),    
     4     QAC   (ILG),    TVRTAC(ILG),    TPOTG (ILG),    RESID (ILG),    
     5     RESIDL(ILG),    RESIDO(ILG),    TZEROL(ILG),    TZEROO(ILG),    
     6     TCANL (ILG),    TCANP (ILG),    TRTOP (ILG),    QSTOR (ILG),    
     7     AC    (ILG),    BC    (ILG),    ZOMS  (ILG),    ZOHS  (ILG),
     8     LZZ0  (ILG),    LZZ0T (ILG),    FM    (ILG),    FH    (ILG)
C
      INTEGER              ITER  (ILG),    NITER (ILG),
     1                     KF    (ILG),    KF1   (ILG),    KF2   (ILG)
C
#include "class_com.cdk"
C
C----------------------------------------------------------------------
C
C     * CALCULATION OF ATMOSPHERIC INPUT FIELDS REQUIRED BY CLASS FROM 
C     * VARIABLES SUPPLIED BY GCM.
C
      DO 50 I=IL1,IL2                                                            
          VA(I)=MAX(VMIN,SQRT(UWIND(I)*UWIND(I)+VWIND(I)*VWIND(I)))                
          FCOR(I)=2.0*7.29E-5*SIN(RADJ(I))
C
C     * LATENT HEAT OF VAPORIZATION FROM CANOPY.
C
          IF(FSNOWC(I).GT.0. .OR. FRAINC(I).GT.0.)                  THEN
              CPHCHC(I)=(FSNOWC(I)*(CLHVAP+CLHMLT)+FRAINC(I)*CLHVAP)/
     1                  (FSNOWC(I)+FRAINC(I))           
          ELSE                                                                        
              CPHCHC(I)=CLHVAP                                                           
          ENDIF                                                                       
C
C     * CHECK DEPTH OF PONDED WATER FOR UNPHYSICAL VALUES.
C
          IF(ZPOND(I).LT.1.0E-5) ZPOND(I)=0.0
   50 CONTINUE
C
C     * CHECK LIQUID AND FROZEN SOIL MOISTURE CONTENTS FOR SMALL
C     * ABERRATIONS CAUSED BY PACKING/UNPACKING.
C
      DO 60 J=1,IG
      DO 60 I=IL1,IL2
          IF(ISAND(I,1).GT.-4)                                   THEN
              IF(THLIQ(I,J).LT.THLMIN(I,J)) 
     1            THLIQ(I,J)=THLMIN(I,J)
              IF(THICE(I,J).LT.0.0) THICE(I,J)=0.0                        
              THTOT=THLIQ(I,J)+THICE(I,J)*RHOICE/RHOW                     
              IF(THTOT.GT.THPOR(I,J))           THEN                              
                  THLIQ(I,J)=MAX(THLIQ(I,J)*THPOR(I,J)/               
     1                       THTOT,THLMIN(I,J))                                       
                  THICE(I,J)=(THPOR(I,J)-THLIQ(I,J))*
     1                           RHOW/RHOICE
                  IF(THICE(I,J).LT.0.0) THICE(I,J)=0.0
              ENDIF
          ENDIF
   60 CONTINUE                                                        
C
C     * DEFINE NUMBER OF PIXELS OF EACH LAND SURFACE SUBAREA 
C     * (CANOPY-COVERED, CANOPY-AND-SNOW-COVERED, BARE SOIL, AND 
C     * SNOW OVER BARE SOIL) AND NUMBER OF LAND ICE PIXELS FOR 
C     * CALCULATIONS IN CLASST/CLASSW.

      NLANDC =0
      NLANDCS=0
      NLANDG =0
      NLANDGS=0
      NLANDI =0

      DO 70 I=IL1,IL2
          IF(FC (I).GT.0.)            NLANDC =NLANDC +1
          IF(FCS(I).GT.0.)            NLANDCS=NLANDCS+1
          IF(FG (I).GT.0.)            NLANDG =NLANDG +1
          IF(FGS(I).GT.0.)            NLANDGS=NLANDGS+1
          IF(ISAND(I,1).EQ.-4)        NLANDI =NLANDI +1
70    CONTINUE
C
C     * PREPARATION.
C
      CALL  TPREP     (THLIQC, THLIQG, THICEC, THICEG, TBARC,  TBARG,             
     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     * CALCULATIONS FOR CANOPY OVER SNOW.
C                                                                                  
      IF(NLANDCS.GT.0)                                              THEN
          DO 90 I=IL1,IL2                                    
              IF(FCS(I).GT.0.)                                      THEN
                  ZOM(I)=EXP(ZOMLCS(I))
                  ZOH(I)=EXP(ZOELCS(I))
                  IF(IZREF.EQ.1) THEN
                      ZRSLDM(I)=ZREFM(I)
                      ZRSLDH(I)=ZREFH(I)
                      ZRSLFM(I)=ZREFM(I)-ZOM(I)-DISPS(I)
                      ZRSLFH(I)=ZREFH(I)-ZOM(I)-DISPS(I)
                      ZDSLM(I)=ZDIAGM(I)-ZOM(I)-DISPS(I)
                      ZDSLH(I)=ZDIAGH(I)-ZOM(I)-DISPS(I)
                  ELSE
                      ZRSLDM(I)=ZREFM(I)+ZOM(I)
                      ZRSLDH(I)=ZREFH(I)+ZOM(I)
                      ZRSLFM(I)=ZREFM(I)-DISPS(I)
                      ZRSLFH(I)=ZREFH(I)-DISPS(I)
                      ZDSLM(I)=ZDIAGM(I)-DISPS(I)
                      ZDSLH(I)=ZDIAGH(I)-DISPS(I)
                  ENDIF    
               endif
   90     continue
          do 100 I=IL1,IL2 
              IF(FCS(I).GT.0.)                             then
                  ZOSCLM(I)=ZOM(I)/ZRSLDM(I)
                  ZOSCLH(I)=ZOH(I)/ZRSLDH(I)
                  TPOTA(I)=TA(I)+ZRSLFM(I)*G/SPHAIR
                  TVIRTA(I)=TPOTA(I)*(1.0+0.61*QA(I))
                  VAC(I)=VA(I)*(LOG(10.0*ZOM(I)-DISPS(I))-ZOMLCS(I))/
     1                   (LOG(ZRSLDM(I)-DISPS(I))-ZOMLCS(I))
                  CRIB(I)=-G*(ZRSLDM(I)-DISPS(I))/(TVIRTA(I)*
     1                    VA(I)**2)
                  DRAG(I)=DRAG(I)+FCS(I)*(VKC/(LOG(ZRSLDM(I)-DISPS(I))-
     1                    ZOMLCS(I)))**2
              ENDIF
  100     CONTINUE
C                                     
          CALL CWCALC(TCANS,RAICNS,SNOCNS,CHCAPS,HMFC,HTCC,
     1                FCS,CMASCS,ILG,IL1,IL2,JL)
          CALL TSPREP(A1,A2,A3,B1,B2,B3,C2,C3,D3,GDENOM,GCOEFF,
     1                GCONST,CPHCHG,TSTART,IWATER, 
     2                TBAR,TCTOP,TCBOT,FCS,ZPOND,ZSNOW,TSNOW,TCSNOW,
     3                TBAR1P,ILG,IL1,IL2,JL,IG        )
          ISNOW=1
          CALL TSOLVC(ISNOW,FCS,
     1                QSWX,QSWNC,QSWNG,QLWX,QLWOC,QLWOG,QTRANS,
     2                QSENSX,QSENSC,QSENSG,QEVAPX,QEVAPC,QEVAPG,EVAPCS,
     3                EVPCSG,TCANS,QCANX,TSURX,QSURX,GSNOWC,QPHCHC,
     4                QMELTC,RAICNS,SNOCNS,CDHX,CDMX,RIB,TAC,CFLUX,
     5                FTEMP,FVAP,ILMOX,UEX,HX,
     6                QSWINV,QSWINI,QLWIN,TPOTA,QA,VA,VAC,PADRY,RHOAIR,
     7                ALVSCS,ALIRCS,ALVSSN,ALIRSN,TRVSCS,TRIRCS,FSVFS,
     8                CRIB,CPHCHC,CPHCHG,CEVAP,TADP,TVIRTA,RCS,DLEAF,
     9                AILCNS,ZOSCLH,ZOSCLM,ZRSLFH,ZRSLFM,ZOH,ZOM,
     A                FCOR,GCONST,GCOEFF,TSTART,TRSNOW,FSNOWC,FRAINC,
     B                CHCAPS,CMASCS,IWATER,IEVAP,ITERCT,
     C                ISLFD,ILW,ILG,IL1,IL2,JL,  
     D                TSTEP,TVIRTC,TVIRTG,EVBETA,XEVAP,EVPWET,Q0SAT,
     E                RB,RAGINV,RBINV,RBTINV,RBCINV,QAC,TVRTAC,TPOTG,
     F                RESID,RESIDL,RESIDO,TZEROL,TZEROO,TCANL,TCANP,
     G                TRTOP,QSTOR,AC,BC,ZOMS,ZOHS,LZZ0,LZZ0T,FM,FH,
     H                ITER,NITER,KF1,KF2)
          CALL TSPOST(TBARCS,GZROCS,G12CS,G23CS,TPNDCS,GSNOWC,TSNOCS,
     1                QMELTC,GCONST,GCOEFF,TBAR,TCTOP,TCBOT,
     2                HCPC,ZPOND,ZSNOW,TSURX,TBASE,TBAR1P,
     3                HCPSNO,QTRANS,A1,A2,A3,B1,B2,B3,C2,C3,D3,
     4                FCS,DELZW,ILG,IL1,IL2,JL,IG           )
C
C     * DIAGNOSTICS.
C
          IF(ISLFD.EQ.2)                                        THEN
              CALL DIASURFZ(SU,SV,ST,SQ,ILG,UWIND,VWIND,TAC,QAC,
     1                    ZOM,ZOH,ILMOX,ZRSLFM,HX,UEX,FTEMP,FVAP,
     2                    ZDSLM,ZDSLH,RADJ,FCS,IL1,IL2)
          ENDIF
C
          DO 175 I=IL1,IL2
              IF(FCS(I).GT.0.)                                      THEN
                  IF(TAC(I).GE.TFREZ)                        THEN
                      CA=17.269       
                      CB=35.86       
                  ELSE                
                      CA=21.874    
                      CB=7.66     
                  ENDIF                       
                  WACSAT=0.622*611.0*EXP(CA*(TAC(I)-TFREZ)/
     1                   (TAC(I)-CB))/PADRY(I)           
                  QACSAT=WACSAT/(1.0+WACSAT)    
                  EVPPOT(I)=EVPPOT(I)+FCS(I)*RHOAIR(I)*CFLUX(I)*
     1                     (QACSAT-QA(I))
                  ACOND(I)=ACOND(I)+FCS(I)*CFLUX(I)
                  H(I)=H(I)+FCS(I)*HX(I)
                  UE(I)=UE(I)+FCS(I)*UEX(I)
                  ILMO(I)=ILMO(I)+FCS(I)*ILMOX(I)
                  CDH (I) =CDH(I)+FCS(I)*CDHX(I)
                  CDM (I) =CDM(I)+FCS(I)*CDMX(I)
                  TSURF(I)=TSURF(I)+FCS(I)*TSURX(I)
                  QSENS(I)=QSENS(I)+FCS(I)*QSENSX(I)
                  QEVAP(I)=QEVAP(I)+FCS(I)*QEVAPX(I)
                  QLWAVG(I)=QLWAVG(I)+FCS(I)*QLWX(I)
                  FSGV(I) =FSGV(I)+FCS(I)*QSWNC(I)
                  FSGS(I) =FSGS(I)+FCS(I)*QSWNG(I)
                  FSGG(I) =FSGG(I)+FCS(I)*QTRANS(I)
                  FLGV(I) =FLGV(I)+FCS(I)*(QLWIN(I)+QLWOG(I)-2.0*
     1                     QLWOC(I))*(1.0-FSVFS(I))
                  FLGS(I) =FLGS(I)+FCS(I)*(QLWOC(I)*(1.0-FSVFS(I))+
     1                     QLWIN(I)*FSVFS(I)-QLWOG(I))
                  HFSC(I) =HFSC(I)+FCS(I)*QSENSC(I)
                  HFSS(I) =HFSS(I)+FCS(I)*QSENSG(I)
                  HEVC(I) =HEVC(I)+FCS(I)*QEVAPC(I)
                  HEVS(I) =HEVS(I)+FCS(I)*QEVAPG(I)
                  HMFC(I) =HMFC(I)+FCS(I)*QPHCHC(I)
                  HTCS(I) =HTCS(I)+FCS(I)*(-GZROCS(I)+
     1                     QTRANS(I))
                  HTC(I,1)=HTC(I,1)+FCS(I)*(GZROCS(I)-QTRANS(I)-
     1                     G12CS(I))
                  HTC(I,2)=HTC(I,2)+FCS(I)*(G12CS(I)-G23CS(I))
                  HTC(I,3)=HTC(I,3)+FCS(I)*G23CS(I)
              ENDIF
  175     CONTINUE
      ENDIF                                                               
C
C     * CALCULATIONS FOR SNOW-COVERED GROUND.
C
      IF(NLANDGS.GT.0)                                              THEN
          DO 200 I=IL1,IL2                                    
              IF(FGS(I).GT.0.)                                      THEN
                  ZOM(I)=EXP(ZOMLNS(I))
                  ZOH(I)=EXP(ZOELNS(I))
                  IF(IZREF.EQ.1) THEN
                      ZRSLDM(I)=ZREFM(I)
                      ZRSLDH(I)=ZREFH(I)
                      ZRSLFM(I)=ZREFM(I)-ZOM(I)
                      ZRSLFH(I)=ZREFH(I)-ZOM(I)
                      ZDSLM(I)=ZDIAGM(I)-ZOM(I)
                      ZDSLH(I)=ZDIAGH(I)-ZOM(I)
                  ELSE
                      ZRSLDM(I)=ZREFM(I)+ZOM(I)
                      ZRSLDH(I)=ZREFH(I)+ZOM(I)
                      ZRSLFM(I)=ZREFM(I)
                      ZRSLFH(I)=ZREFH(I)
                      ZDSLM(I)=ZDIAGM(I)
                      ZDSLH(I)=ZDIAGH(I)
                  ENDIF    
                  ZOSCLM(I)=ZOM(I)/ZRSLDM(I)
                  ZOSCLH(I)=ZOH(I)/ZRSLDH(I)
                  TPOTA(I)=TA(I)+ZRSLFM(I)*G/SPHAIR
                  TVIRTA(I)=TPOTA(I)*(1.0+0.61*QA(I))
                  CRIB(I)=-G*ZRSLDM(I)/(TVIRTA(I)*VA(I)**2)
                  DRAG(I)=DRAG(I)+FGS(I)*(VKC/(LOG(ZRSLDM(I))-
     1                    ZOMLNS(I)))**2
              ENDIF
  200     CONTINUE
C
          CALL TSPREP(A1,A2,A3,B1,B2,B3,C2,C3,D3,GDENOM,GCOEFF,
     1                GCONST,CPHCHG,TSTART,IWATER, 
     2                TBAR,TCTOP,TCBOT,FGS,ZPOND,ZSNOW,TSNOW,TCSNOW,
     3                TBAR1P,ILG,IL1,IL2,JL,IG               )
          ISNOW=1 
          CALL TSOLVE(ISNOW,FGS,
     1                QSWX,QLWX,QTRANS,QSENSX,QEVAPX,EVAPGS,
     2                TSURX,QSURX,GSNOWG,QMELTG,CDHX,CDMX,RIB,CFLUX,
     3                FTEMP,FVAP,ILMOX,UEX,HX, 
     4                QSWINV,QSWINI,QLWIN,TPOTA,QA,VA,PADRY,RHOAIR,
     5                ALVSSN,ALIRSN,CRIB,CPHCHG,CEVAP,TADP,TVIRTA,
     6                ZOSCLH,ZOSCLM,ZRSLFH,ZRSLFM,ZOH,ZOM,FCOR,
     7                GCONST,GCOEFF,TSTART,TRSNOW,
     8                IWATER,IEVAP,ITERCT,
     9                ISLFD,ILW,ILG,IL1,IL2,JL,  
     A                TSTEP,TVIRTS,EVBETA,Q0SAT,RESID,RESIDL,RESIDO,
     B                TZEROL,TZEROO,TRTOP,AC,BC,ZOMS,ZOHS,LZZ0,LZZ0T,
     C                FM,FH,ITER,NITER,KF  )
          CALL TSPOST(TBARGS,GZROGS,G12GS,G23GS,TPNDGS,GSNOWG,TSNOGS,
     1                QMELTG,GCONST,GCOEFF,TBAR,TCTOP,TCBOT,
     2                HCPG,ZPOND,ZSNOW,TSURX,TBASE,TBAR1P,
     3                HCPSNO,QTRANS,A1,A2,A3,B1,B2,B3,C2,C3,D3,
     4                FGS,DELZW,ILG,IL1,IL2,JL,IG           )
C
C     * DIAGNOSTICS.
C
          IF(ISLFD.EQ.2)                                        THEN  
              CALL DIASURFZ(SU,SV,ST,SQ,ILG,UWIND,VWIND,TSURX,QSURX,
     1                    ZOM,ZOH,ILMOX,ZRSLFM,HX,UEX,FTEMP,FVAP,
     2                    ZDSLM,ZDSLH,RADJ,FGS,IL1,IL2)
          ENDIF
C
          DO 275 I=IL1,IL2
              IF(FGS(I).GT.0.)                                      THEN
                  EVPPOT(I)=EVPPOT(I)+FGS(I)*RHOAIR(I)*CFLUX(I)*
     1                     (QSURX(I)-QA(I))
                  ACOND(I)=ACOND(I)+FGS(I)*CFLUX(I)
                  H(I)=H(I)+FGS(I)*HX(I)
                  UE(I)=UE(I)+FGS(I)*UEX(I)
                  ILMO(I)=ILMO(I)+FGS(I)*ILMOX(I)
                  CDH (I) =CDH(I)+FGS(I)*CDHX(I)
                  CDM (I) =CDM(I)+FGS(I)*CDMX(I)
                  TSURF(I)=TSURF(I)+FGS(I)*TSURX(I)
                  QSENS(I)=QSENS(I)+FGS(I)*QSENSX(I)
                  QEVAP(I)=QEVAP(I)+FGS(I)*QEVAPX(I)
                  QLWAVG(I)=QLWAVG(I)+FGS(I)*QLWX(I)
                  FSGS(I) =FSGS(I)+FGS(I)*(QSWX(I)-QTRANS(I))
                  FSGG(I) =FSGG(I)+FGS(I)*QTRANS(I)
                  FLGS(I) =FLGS(I)+FGS(I)*(QLWIN(I)-QLWX(I))
                  HFSS(I) =HFSS(I)+FGS(I)*QSENSX(I)
                  HEVS(I) =HEVS(I)+FGS(I)*QEVAPX(I)
                  HTCS(I) =HTCS(I)+FGS(I)*(-GZROGS(I)+
     1                     QTRANS(I))
                  HTC(I,1)=HTC(I,1)+FGS(I)*(GZROGS(I)-QTRANS(I)-
     1                     G12GS(I))
                  HTC(I,2)=HTC(I,2)+FGS(I)*(G12GS(I)-G23GS(I))
                  HTC(I,3)=HTC(I,3)+FGS(I)*G23GS(I)
              ENDIF
  275     CONTINUE
      ENDIF                                                               
C
C     * CALCULATIONS FOR CANOPY OVER BARE GROUND.
C                                                                                  
      IF(NLANDC.GT.0)                                               THEN
          call vsexp(ZOM(il1),ZOMLNC(il1),il2-il1+1)
          call vsexp(ZOH(il1),ZOELNC(il1),il2-il1+1)
          DO 300 I=IL1,IL2                                    
              IF(FC(I).GT.0.)                                       THEN
c                 ZOM(I)=EXP(ZOMLNC(I))
c                 ZOH(I)=EXP(ZOELNC(I))
                  IF(IZREF.EQ.1) THEN
                      ZRSLDM(I)=ZREFM(I)
                      ZRSLDH(I)=ZREFH(I)
                      ZRSLFM(I)=ZREFM(I)-ZOM(I)-DISP(I)
                      ZRSLFH(I)=ZREFH(I)-ZOM(I)-DISP(I)
                      ZDSLM(I)=ZDIAGM(I)-ZOM(I)-DISP(I)
                      ZDSLH(I)=ZDIAGH(I)-ZOM(I)-DISP(I)
                  ELSE
                      ZRSLDM(I)=ZREFM(I)+ZOM(I)
                      ZRSLDH(I)=ZREFH(I)+ZOM(I)
                      ZRSLFM(I)=ZREFM(I)-DISP(I)
                      ZRSLFH(I)=ZREFH(I)-DISP(I)
                      ZDSLM(I)=ZDIAGM(I)-DISP(I)
                      ZDSLH(I)=ZDIAGH(I)-DISP(I)
                  ENDIF    
                  ZOSCLM(I)=ZOM(I)/ZRSLDM(I)
                  ZOSCLH(I)=ZOH(I)/ZRSLDH(I)
                  TPOTA(I)=TA(I)+ZRSLFM(I)*G/SPHAIR
                  TVIRTA(I)=TPOTA(I)*(1.0+0.61*QA(I))
                  VAC(I)=VA(I)*(LOG(10.0*ZOM(I)-DISP(I))-ZOMLNC(I))/
     1                (LOG(ZRSLDM(I)-DISP(I))-ZOMLNC(I))
                  CRIB(I)=-G*(ZRSLDM(I)-DISP(I))/(TVIRTA(I)*VA(I)**2)
                  DRAG(I)=DRAG(I)+FC(I)*(VKC/(LOG(ZRSLDM(I)-DISP(I))-
     1                    ZOMLNC(I)))**2
              ENDIF
  300     CONTINUE
C
          CALL CWCALC(TCANO,RAICAN,SNOCAN,CHCAP,HMFC,HTCC,
     1                FC,CMASSC,ILG,IL1,IL2,JL)
          CALL TNPREP(A1,A2,B1,B2,C2,GDENOM,GCOEFF,
     1                GCONST,CPHCHG,TSTART,IWATER, 
     2                TBAR,TCTOP,TCBOT,FC,ZPOND,TBAR1P,ISAND,
     3                ILG,IL1,IL2,JL,IG                            )
          ISNOW=0
          CALL TSOLVC(ISNOW,FC,
     1                QSWX,QSWNC,QSWNG,QLWX,QLWOC,QLWOG,QTRANS,
     2                QSENSX,QSENSC,QSENSG,QEVAPX,QEVAPC,QEVAPG,EVAPC,
     3                EVAPCG,TCANO,QCANX,TSURX,QSURX,GZEROC,QPHCHC,
     4                QFREZC,RAICAN,SNOCAN,CDHX,CDMX,RIB,TAC,CFLUX,
     5                FTEMP,FVAP,ILMOX,UEX,HX, 
     6                QSWINV,QSWINI,QLWIN,TPOTA,QA,VA,VAC,PADRY,RHOAIR,
     7                ALVSCN,ALIRCN,ALVSG,ALIRG,TRVSCN,TRIRCN,FSVF,
     8                CRIB,CPHCHC,CPHCHG,CEVAP,TADP,TVIRTA,RC,DLEAF,
     9                AILCAN,ZOSCLH,ZOSCLM,ZRSLFH,ZRSLFM,ZOH,ZOM,
     A                FCOR,GCONST,GCOEFF,TSTART,TRSNOW,FSNOWC,FRAINC,
     B                CHCAP,CMASSC,IWATER,IEVAP,ITERCT,
     C                ISLFD,ILW,ILG,IL1,IL2,JL,  
     D                TSTEP,TVIRTC,TVIRTG,EVBETA,XEVAP,EVPWET,Q0SAT,
     E                RB,RAGINV,RBINV,RBTINV,RBCINV,QAC,TVRTAC,TPOTG,
     F                RESID,RESIDL,RESIDO,TZEROL,TZEROO,TCANL,TCANP,
     G                TRTOP,QSTOR,AC,BC,ZOMS,ZOHS,LZZ0,LZZ0T,FM,FH,
     H                ITER,NITER,KF1,KF2)
          CALL TNPOST(TBARC,G12C,G23C,TPONDC,GZEROC,QFREZC,GCONST,
     1                GCOEFF,TBAR,TCTOP,TCBOT,HCPC,ZPOND,TSURX,
     2                TBASE,TBAR1P,A1,A2,B1,B2,C2,FC,IWATER,
     3                DELZW,ILG,IL1,IL2,JL,IG       )
C
C     * DIAGNOSTICS.
C
          IF(ISLFD.EQ.2)                                        THEN    
              CALL DIASURFZ(SU,SV,ST,SQ,ILG,UWIND,VWIND,TAC,QAC,
     1                    ZOM,ZOH,ILMOX,ZRSLFM,HX,UEX,FTEMP,FVAP,
     2                    ZDSLM,ZDSLH,RADJ,FC,IL1,IL2)
          ENDIF
C
          DO 375 I=IL1,IL2
              IF(FC(I).GT.0.)                                       THEN
                  IF(TAC(I).GE.TFREZ)                        THEN
                      CA=17.269       
                      CB=35.86       
                  ELSE                
                      CA=21.874    
                      CB=7.66     
                  ENDIF                       
                  WACSAT=0.622*611.0*EXP(CA*(TAC(I)-TFREZ)/
     1                   (TAC(I)-CB))/PADRY(I)           
                  QACSAT=WACSAT/(1.0+WACSAT)    
                  EVPPOT(I)=EVPPOT(I)+FC(I)*RHOAIR(I)*CFLUX(I)*
     1                     (QACSAT-QA(I))
                  ACOND(I)=ACOND(I)+FC(I)*CFLUX(I)
                  H(I)=H(I)+FC(I)*HX(I)
                  UE(I)=UE(I)+FC(I)*UEX(I)
                  ILMO(I)=ILMO(I)+FC(I)*ILMOX(I)
                  CDH (I) =CDH(I)+FC(I)*CDHX(I)
                  CDM (I) =CDM(I)+FC(I)*CDMX(I)
                  TSURF(I)=TSURF(I)+FC(I)*TSURX(I)
                  QSENS(I)=QSENS(I)+FC(I)*QSENSX(I)
                  QEVAP(I)=QEVAP(I)+FC(I)*QEVAPX(I)
                  QLWAVG(I)=QLWAVG(I)+FC(I)*QLWX(I)
                  FSGV(I) =FSGV(I)+FC(I)*QSWNC(I)
                  FSGG(I) =FSGG(I)+FC(I)*QSWNG(I)
                  FLGV(I) =FLGV(I)+FC(I)*(QLWIN(I)+QLWOG(I)-2.0*
     1                     QLWOC(I))*(1.0-FSVF(I))
                  FLGG(I) =FLGG(I)+FC(I)*(FSVF(I)*QLWIN(I)+
     1                     (1.0-FSVF(I))*QLWOC(I)-QLWOG(I))
                  HFSC(I) =HFSC(I)+FC(I)*QSENSC(I)
                  HFSG(I) =HFSG(I)+FC(I)*QSENSG(I)
                  HEVC(I) =HEVC(I)+FC(I)*QEVAPC(I)
                  HEVG(I) =HEVG(I)+FC(I)*QEVAPG(I)
                  HMFC(I) =HMFC(I)+FC(I)*QPHCHC(I)
                  HTC(I,1)=HTC(I,1)+FC(I)*(-G12C(I))
                  HTC(I,2)=HTC(I,2)+FC(I)*(G12C(I)-G23C(I))
                  HTC(I,3)=HTC(I,3)+FC(I)*G23C(I)
              ENDIF
  375     CONTINUE
      ENDIF                                                               
C
C     * CALCULATIONS FOR BARE GROUND.
C                                                                                  
      IF(NLANDG.GT.0)                                               THEN
          DO 400 I=IL1,IL2                                    
              IF(FG(I).GT.0.)                                       THEN
                  ZOM(I)=EXP(ZOMLNG(I))
                  ZOH(I)=EXP(ZOELNG(I))
                  IF(IZREF.EQ.1) THEN
                      ZRSLDM(I)=ZREFM(I)
                      ZRSLDH(I)=ZREFH(I)
                      ZRSLFM(I)=ZREFM(I)-ZOM(I)
                      ZRSLFH(I)=ZREFH(I)-ZOM(I)
                      ZDSLM(I)=ZDIAGM(I)-ZOM(I)
                      ZDSLH(I)=ZDIAGH(I)-ZOM(I)
                  ELSE
                      ZRSLDM(I)=ZREFM(I)+ZOM(I)
                      ZRSLDH(I)=ZREFH(I)+ZOM(I)
                      ZRSLFM(I)=ZREFM(I)
                      ZRSLFH(I)=ZREFH(I)
                      ZDSLM(I)=ZDIAGM(I)
                      ZDSLH(I)=ZDIAGH(I)
                  ENDIF    
                  ZOSCLM(I)=ZOM(I)/ZRSLDM(I)
                  ZOSCLH(I)=ZOH(I)/ZRSLDH(I)
                  TPOTA(I)=TA(I)+ZRSLFM(I)*G/SPHAIR
                  TVIRTA(I)=TPOTA(I)*(1.0+0.61*QA(I))
                  CRIB(I)=-G*ZRSLDM(I)/(TVIRTA(I)*VA(I)**2)
                  DRAG(I)=DRAG(I)+FG(I)*(VKC/(LOG(ZRSLDM(I))-
     1                    ZOMLNG(I)))**2
              ENDIF
  400     CONTINUE
C
          CALL TNPREP(A1,A2,B1,B2,C2,GDENOM,GCOEFF,
     1                GCONST,CPHCHG,TSTART,IWATER, 
     2                TBAR,TCTOP,TCBOT,FG,ZPOND,TBAR1P,ISAND,
     3                ILG,IL1,IL2,JL,IG                            )
          ISNOW=0
          CALL TSOLVE(ISNOW,FG,
     1                QSWX,QLWX,QTRANS,QSENSX,QEVAPX,EVAPG,
     2                TSURX,QSURX,GZEROG,QFREZG,CDHX,CDMX,RIB,CFLUX,
     3                FTEMP,FVAP,ILMOX,UEX,HX, 
     4                QSWINV,QSWINI,QLWIN,TPOTA,QA,VA,PADRY,RHOAIR,
     5                ALVSG,ALIRG,CRIB,CPHCHG,CEVAP,TADP,TVIRTA,
     6                ZOSCLH,ZOSCLM,ZRSLFH,ZRSLFM,ZOH,ZOM,FCOR,
     7                GCONST,GCOEFF,TSTART,TRSNOW,
     8                IWATER,IEVAP,ITERCT,
     9                ISLFD,ILW,ILG,IL1,IL2,JL,  
     A                TSTEP,TVIRTS,EVBETA,Q0SAT,RESID,RESIDL,RESIDO,
     B                TZEROL,TZEROO,TRTOP,AC,BC,ZOMS,ZOHS,LZZ0,LZZ0T,
     C                FM,FH,ITER,NITER,KF  )
          CALL TNPOST(TBARG,G12G,G23G,TPONDG,GZEROG,QFREZG,GCONST,
     1                GCOEFF,TBAR,TCTOP,TCBOT,HCPG,ZPOND,TSURX,
     2                TBASE,TBAR1P,A1,A2,B1,B2,C2,FG,IWATER,
     3                DELZW,ILG,IL1,IL2,JL,IG      )
C
C     * DIAGNOSTICS.
C
          IF(ISLFD.EQ.2)                                        THEN      
              CALL DIASURFZ(SU,SV,ST,SQ,ILG,UWIND,VWIND,TSURX,QSURX,
     1                    ZOM,ZOH,ILMOX,ZRSLFM,HX,UEX,FTEMP,FVAP,
     2                    ZDSLM,ZDSLH,RADJ,FG,IL1,IL2)
          ENDIF
C
          DO 475 I=IL1,IL2
              IF(FG(I).GT.0.)                                       THEN
                  EVPPOT(I)=EVPPOT(I)+FG(I)*RHOAIR(I)*CFLUX(I)*
     1                     (QSURX(I)-QA(I))
                  ACOND(I)=ACOND(I)+FG(I)*CFLUX(I)
                  H(I)=H(I)+FG(I)*HX(I)
                  UE(I)=UE(I)+FG(I)*UEX(I)
                  ILMO(I)=ILMO(I)+FG(I)*ILMOX(I)
                  CDH (I) =CDH(I)+FG(I)*CDHX(I)
                  CDM (I) =CDM(I)+FG(I)*CDMX(I)
                  TSURF(I)=TSURF(I)+FG(I)*TSURX(I)
                  QSENS(I)=QSENS(I)+FG(I)*QSENSX(I)
                  QEVAP(I)=QEVAP(I)+FG(I)*QEVAPX(I)
                  QLWAVG(I)=QLWAVG(I)+FG(I)*QLWX(I)
                  FSGG(I) =FSGG(I)+FG(I)*QSWX(I)
                  FLGG(I) =FLGG(I)+FG(I)*(QLWIN(I)-QLWX(I))
                  HFSG(I) =HFSG(I)+FG(I)*QSENSX(I)
                  HEVG(I) =HEVG(I)+FG(I)*QEVAPX(I)
                  HTC(I,1)=HTC(I,1)+FG(I)*(-G12G(I))
                  HTC(I,2)=HTC(I,2)+FG(I)*(G12G(I)-G23G(I))
                  HTC(I,3)=HTC(I,3)+FG(I)*G23G(I)
              ENDIF
  475     CONTINUE
      ENDIF                                                               
C
C     * ADDITIONAL DIAGNOSTIC VARIABLES. 
C
      DO 500 I=IL1,IL2
          GT(I)=(QLWAVG(I)/SBC)**0.25                                            
          TFLUX(I)=-QSENS(I)/(RHOAIR(I)*SPHAIR)                                  
          EVAP(I)=FCS(I)*(EVAPCS(I)+EVPCSG(I)) + FGS(I)*EVAPGS(I) +              
     1            FC (I)*(EVAPC (I)+EVAPCG(I)) + FG (I)*EVAPG(I)                       
          EVAP(I)=EVAP(I)*RHOW                                                
          QFLUX(I)=-EVAP(I)/RHOAIR(I)                                            
          IF(EVPPOT(I).NE.0.0) THEN
              EVAPB(I)=EVAP(I)/EVPPOT(I)
          ELSE
              EVAPB(I)=0.0
          ENDIF
          IF(CDH(I).GT.0.0) THEN
              QG(I)=EVAP(I)/(RHOAIR(I)*CDH(I)*VA(I))+QA(I)
          ELSE
              QG(I)=0.0
          ENDIF
  500 CONTINUE
C                                                                                  
      RETURN                                                                      
      END