SUBROUTINE CLASSB(THPOR,THLRET,THLMIN,BI,PSISAT,GRKSAT, 1
     1                  GRKTLD,THLRAT,HCPS,TCS,THFC,PSIWLT,
     2                  DELZW,ZBOTW,ALGWET,ALGDRY,
     3                  SAND,CLAY,ORGM,SDEPTH,
     4                  NT,NM,IT,IM,IG)
C
C     * AUG 19/04 - Y.DELAGE.   REGROUP COMMON BLOCKS
C                               MAKE EXPLICIT DECLARATIONS
C     * JUN 28/02 - D.VERSEGHY. ASSIGN SOIL HYDROLOGICAL AND
C     *                         THERMAL PROPERTIES BASED ON
C     *                         SAND, CLAY AND ORGANIC MATTER
C     *                         CONTENT.
       IMPLICIT NONE
       INTEGER NT,NM,IT,IM,IG,I,M,J
       REAL VSAND,VORG,VCLAY,VTOT
C
C     * OUTPUT ARRAYS.
C
      REAL THPOR (NT,NM,IG),  THLRET(NT,NM,IG),  THLMIN(NT,NM,IG),
     1     BI    (NT,NM,IG),  PSISAT(NT,NM,IG),  GRKSAT(NT,NM,IG),  
     2     GRKTLD(NT,NM,IG),  THLRAT(NT,NM,IG),  HCPS  (NT,NM,IG),  
     3     TCS   (NT,NM,IG),  THFC  (NT,NM,IG),  PSIWLT(NT,NM,IG),
     4     DELZW (NT,NM,IG),  ZBOTW (NT,NM,IG),
     4     ALGWET(NT,NM),     ALGDRY(NT,NM)
C
      INTEGER               ISAND (NT,NM,IG),  IORG  (NT,NM,IG)
C
C     * INPUT ARRAYS.
C
      REAL SAND  (NT,NM,IG),  CLAY  (NT,NM,IG),  ORGM  (NT,NM,IG),
     1     SDEPTH(NT,NM) 
C
C     * WORK ARRAYS.
C
      REAL THSAND(NT,NM,IG),  THCLAY(NT,NM,IG),  THORG (NT,NM,IG)
C
#include "class_com.cdk"
C---------------------------------------------------------------------
C
      DO 100 J=1,IG
      DO 100 M=1,IM
      DO 100 I=1,IT
          ISAND (I,M,J)=NINT(SAND(I,M,J))                                               
          IORG  (I,M,J)=NINT(ORGM(I,M,J))                                               
          IF(ISAND(I,M,J).EQ.-4) THEN
              THPOR (I,M,J)=0.0
              THLRET(I,M,J)=0.0
              THLMIN(I,M,J)=0.0
              BI    (I,M,J)=0.0
              PSISAT(I,M,J)=0.0
              GRKSAT(I,M,J)=0.0
              GRKTLD(I,M,J)=0.0
              THLRAT(I,M,J)=0.0
              HCPS(I,M,J)=HCPICE
              TCS(I,M,J)=TCICE
          ELSEIF(ISAND(I,M,J).EQ.-3) THEN
              THPOR (I,M,J)=0.0
              THLRET(I,M,J)=0.0
              THLMIN(I,M,J)=0.0
              BI    (I,M,J)=0.0
              PSISAT(I,M,J)=0.0
              GRKSAT(I,M,J)=0.0
              GRKTLD(I,M,J)=0.0
              THLRAT(I,M,J)=0.0
              HCPS(I,M,J)=HCPSND
              TCS(I,M,J)=TCSAND
          ELSEIF(ISAND(I,M,J).EQ.-2) THEN
              THPOR (I,M,J)=THPORG(IORG(I,M,J))
              THLRET(I,M,J)=THRORG(IORG(I,M,J))
              THLMIN(I,M,J)=THMORG(IORG(I,M,J))
              BI    (I,M,J)=BORG(IORG(I,M,J))
              PSISAT(I,M,J)=PSISORG(IORG(I,M,J))
              GRKSAT(I,M,J)=GRKSORG(IORG(I,M,J))
              GRKTLD(I,M,J)=GRKSAT(I,M,J)/2.0
              THLRAT(I,M,J)=0.5**(1.0/(2.0*BI(I,M,J)+3.0))
              HCPS(I,M,J)=HCPOM
              TCS(I,M,J)=TCOM
          ELSEIF(SAND(I,M,J).GT.0) THEN
              THPOR (I,M,J)=(-0.126*SAND(I,M,J)+48.9)/100.0
              THLRET(I,M,J)=0.04
              THLMIN(I,M,J)=0.04
              BI    (I,M,J)=0.159*CLAY(I,M,J)+2.91
              PSISAT(I,M,J)=(10.0**(-0.0131*SAND(I,M,J)+1.88))/100.0
              GRKSAT(I,M,J)=(10.0**(0.0153*SAND(I,M,J)-0.884))*
     1            7.0556E-6
              GRKTLD(I,M,J)=GRKSAT(I,M,J)/2.0
              THLRAT(I,M,J)=0.5**(1.0/(2.0*BI(I,M,J)+3.0))
              VSAND=SAND(I,M,J)/(RHOSOL*100.0)
              VORG=ORGM(I,M,J)/(RHOOM*100.0)
              VCLAY=(100.0-SAND(I,M,J)-ORGM(I,M,J))/(RHOSOL*100.0)
              VTOT=VSAND+VCLAY+VORG
              THSAND(I,M,J)=(1.0-THPOR(I,M,J))*VSAND/VTOT
              THORG(I,M,J)=(1.0-THPOR(I,M,J))*VORG/VTOT
              THCLAY(I,M,J)=1.0-THPOR(I,M,J)-THSAND(I,M,J)-THORG(I,M,J)
              HCPS(I,M,J)=(HCPSND*THSAND(I,M,J)+HCPCLY*THCLAY(I,M,J)+
     1            HCPOM*THORG(I,M,J))/(1.0-THPOR(I,M,J))
              TCS(I,M,J)=((TCSAND**THSAND(I,M,J))*(TCOM**THORG(I,M,J))*
     1            (TCCLAY**THCLAY(I,M,J)))**(1.0/(1.0-THPOR(I,M,J)))
          ENDIF
          IF(THPOR(I,M,J).GT.0.0) THEN
              THFC(I,M,J)=EXP(LOG(1.157E-9/GRKSAT(I,M,J))/
     1            (2.0*BI(I,M,J)+3.0)+LOG(THPOR(I,M,J)))
              PSIWLT(I,M,J)=PSISAT(I,M,J)*(MIN(0.5*THFC(I,M,J),
     1            THLMIN(I,M,J))/THPOR(I,M,J))**(-BI(I,M,J))
          ELSE
              THFC(I,M,J)=0.0
              PSIWLT(I,M,J)=0.0
          ENDIF
100   CONTINUE
C
      DO 200 M=1,IM
      DO 200 I=1,IT
          IF(SDEPTH(I,M).LE.ZBOT(1)) THEN
              DELZW(I,M,1)=SDEPTH(I,M)
              DELZW(I,M,2)=0.0
              DELZW(I,M,3)=0.0
          ELSEIF(SDEPTH(I,M).LE.ZBOT(2)) THEN
              DELZW(I,M,1)=DELZ(1)
              DELZW(I,M,2)=SDEPTH(I,M)-ZBOT(1)
            if(DELZW(I,M,2).lt..01) DELZW(I,M,2)=0.
              DELZW(I,M,3)=0.0
          ELSEIF(SDEPTH(I,M).LE.ZBOT(3)) THEN
              DELZW(I,M,1)=DELZ(1)
              DELZW(I,M,2)=DELZ(2)
              DELZW(I,M,3)=SDEPTH(I,M)-ZBOT(2)
            if(DELZW(I,M,3).lt..01) DELZW(I,M,3)=0.
          ELSE
              DELZW(I,M,1)=DELZ(1)
              DELZW(I,M,2)=DELZ(2)
              DELZW(I,M,3)=DELZ(3)
          ENDIF
          ZBOTW(I,M,1)=DELZW(I,M,1)
          ZBOTW(I,M,2)=ZBOTW(I,M,1)+DELZW(I,M,2)
          ZBOTW(I,M,3)=ZBOTW(I,M,2)+DELZW(I,M,3)
          IF(SAND(I,M,1).GE.0.0) THEN
              ALGWET(I,M)=0.08+0.0006*SAND(I,M,1)
              ALGDRY(I,M)=0.14+0.0024*SAND(I,M,1)
          ELSE
              ALGWET(I,M)=0.0
              ALGDRY(I,M)=0.0
          ENDIF
200   CONTINUE
C
      RETURN
      END