SUBROUTINE TSPOST(TBARPR,GZERO,G12,G23,TPOND,GSNOW,TSNOW, 2
     1                  QMELTG,GCONST,GCOEFF,TBAR,TCTOP,TCBOT,
     2                  HCP,ZPOND,ZSNOW,TSURF,TBASE,TBAR1P,
     3                  HCPSNO,QTRANS,A1,A2,A3,B1,B2,B3,C2,C3,D3,FI,
     4                  DELZW,ILG,IL1,IL2,JL,IG            )
C
C     * AUG 19/04 - Y.DELAGE.   REGROUP COMMON BLOCKS
C     *                         MAKE DECLARATIONS EXPLICIT
C     * JUN 17/02 - D.VERSEGHY. RESET PONDED WATER TEMPERATURE 
C     *                         USING CALCULATED GROUND HEAT FLUX;
C     *                         SHORTENED CLASS4 COMMON BLOCK.
C     * JUN 20/97 - D.VERSEGHY. CLASS - VERSION 2.7.
C     *                         INCORPORATE EXPLICITLY CALCULATED
C     *                         THERMAL CONDUCTIVITIES AT TOPS AND
C     *                         BOTTOMS OF SOIL LAYERS, AND
C     *                         MODIFICATIONS TO ALLOW FOR VARIABLE
C     *                         SOIL PERMEABLE DEPTH.
C     * SEP 27/96 - D.VERSEGHY. CLASS - VERSION 2.6.
C     *                         FIX BUG IN CALCULATION OF FLUXES
C     *                         BETWEEN SOIL LAYERS (PRESENT SINCE 
C     *                         RELEASE OF CLASS VERSION 2.5).
C     * JAN 02/96 - D.VERSEGHY. CLASS - VERSION 2.5.
C     *                         COMPLETION OF ENERGY BALANCE
C     *                         DIAGNOSTICS.
C     * DEC 22/94 - D.VERSEGHY. CLASS - VERSION 2.3.
C     *                         REVISE CALCULATION OF TBARPR(I,1).
C     * APR 10/92 - M.LAZARE.   CLASS - VERSION 2.2.
C     *                         DIVIDE PREVIOUS SUBROUTINE "T4LAYR" INTO
C     *                         "TSPREP" AND "TSPOST" AND VECTORIZE.
C     * APR 11/89 - D.VERSEGHY. CALCULATE HEAT FLUXES BETWEEN SNOW/SOIL
C     *                         LAYERS; CONSISTENCY CHECK ON CALCULATED 
C     *                         SURFACE LATENT HEAT OF MELTING/
C     *                         FREEZING; STEP AHEAD SNOW LAYER 
C     *                         TEMPERATURE AND ASSIGN EXCESS HEAT TO
C     *                         MELTING IF NECESSARY; DISAGGREGATE
C     *                         FIRST SOIL LAYER TEMPERATURE INTO
C     *                         PONDED WATER AND SOIL TEMPERATURES;
C     *                         ADD SHORTWAVE RADIATION TRANSMITTED
C     *                         THROUGH SNOWPACK TO HEAT FLUX AT TOP
C     *                         OF FIRST SOIL LAYER; CONVERT LAYER
C     *                         TEMPERATURES TO DEGREES C.
C                                                         
      IMPLICIT NONE
      INTEGER ILG,IL1,IL2,JL,IG,I
      REAL GSNOLD,DELZ1
C                        
C     * OUTPUT ARRAYS.
C
      REAL TBARPR(ILG,IG)
C
      REAL GZERO (ILG),    G12   (ILG),    G23   (ILG),    TPOND (ILG)
C
C     * INPUT/OUTPUT ARRAYS.
C
      REAL GSNOW (ILG),    TSNOW (ILG),    QMELTG(ILG)
C
C     * INPUT ARRAYS.
C
      REAL TBAR  (ILG,IG), TCTOP (ILG,IG), TCBOT (ILG,IG),
     1     HCP   (ILG,IG), DELZW (ILG,IG)
C
      REAL ZPOND (ILG),    ZSNOW (ILG),    TSURF (ILG),    TBASE (ILG),
     1     HCPSNO(ILG),    QTRANS(ILG),    A1    (ILG),    A2    (ILG),
     2     A3    (ILG),    B1    (ILG),    B2    (ILG),    B3    (ILG),
     3     C2    (ILG),    C3    (ILG),    D3    (ILG),    FI    (ILG),
     4     GCONST(ILG),    GCOEFF(ILG),    TBAR1P(ILG)
C
#include "class_com.cdk"
C-----------------------------------------------------------------------
C
      DO 200 I=IL1,IL2
          IF(FI(I).GT.0.)                                          THEN
              GSNOLD=GCOEFF(I)*TSURF(I)+GCONST(I)
              GZERO(I)=(TSURF(I)-TSNOW(I)-A1(I)*GSNOLD)/B1(I) 
              G12(I)=(TSURF(I)-TBAR1P(I)-A2(I)*GSNOLD-B2(I)*GZERO(I))/
     1               C2(I)                                  
              G23(I)=(TSURF(I)-TBAR(I,2)-A3(I)*GSNOLD-B3(I)*GZERO(I)-
     1               C3(I)*G12(I))/D3(I)                           
              IF(QMELTG(I).LT.0.)                               THEN
                  GSNOW(I)=GSNOW(I)+QMELTG(I)                                                      
                  QMELTG(I)=0.                                                              
              ENDIF                                                                       
              TSNOW(I)=TSNOW(I)+(GSNOW(I)-GZERO(I))*DELT/
     1                          (HCPSNO(I)*ZSNOW(I))-TFREZ                         
              IF(TSNOW(I).GT.0.)                                THEN
                  QMELTG(I)=QMELTG(I)+TSNOW(I)*HCPSNO(I)*ZSNOW(I)/DELT
                  GSNOW(I)=GSNOW(I)-TSNOW(I)*HCPSNO(I)*ZSNOW(I)/DELT
                  TSNOW(I)=0.                                                               
              ENDIF                                                                       
              IF(ZPOND(I).GT.0.)                                THEN 
                  DELZ1=DELZ(1)+ZPOND(I)
                  TPOND(I)=(GZERO(I)/TCTOP(I,1)-G12(I)/TCBOT(I,1))*
     1                     (ZPOND(I)*ZPOND(I)-DELZ1*DELZ1)/(6.0*DELZ1)-
     2                     GZERO(I)*(ZPOND(I)-DELZ1)/(2.0*TCTOP(I,1))+
     3                     TBAR1P(I)-TFREZ
                  TBARPR(I,1)=((HCP(I,1)*DELZW(I,1)+HCPSND*(DELZ(1)-
     1                        DELZW(I,1))+HCPW*ZPOND(I))*TBAR1P(I)-
     2                        HCPW*ZPOND(I)*(TPOND(I)+TFREZ))/
     3                        (HCP(I,1)*DELZW(I,1)+HCPSND*(DELZ(1)-
     4                        DELZW(I,1)))-TFREZ
              ELSE                                                                        
                  TPOND(I)=0.                                                               
                  TBARPR(I,1)=TBAR(I,1)-TFREZ                                             
              ENDIF           
C
              GZERO(I)=GZERO(I)+QTRANS(I)
          ENDIF
  200 CONTINUE
C 
      DO 300 I=IL1,IL2
          IF(FI(I).GT.0.)                                          THEN
              TBARPR(I,2)=TBAR(I,2)-TFREZ
              IF(DELZW(I,3).GT.0.0.AND.DELZW(I,3).LT.DELZ(3))  THEN
                  TBARPR(I,3)=(TBAR(I,3)*(HCP(I,3)*DELZW(I,3)+HCPSND*
     1                        (DELZ(3)-DELZW(I,3)))-TBASE(I)*HCPSND*
     2                        (DELZ(3)-DELZW(I,3)))/(HCP(I,3)*
     3                         DELZW(I,3))-TFREZ
              ELSE
                  TBARPR(I,3)=TBAR(I,3)-TFREZ
              ENDIF
          ENDIF
  300 CONTINUE                                                                    
C                                                                                  
      RETURN                                                                      
      END