*IF DEF,A08_5A                                                             SOILHT5A.2      
C *****************************COPYRIGHT******************************     SOILHT5A.3      
C (c) CROWN COPYRIGHT 1996, METEOROLOGICAL OFFICE, All Rights Reserved.    SOILHT5A.4      
C                                                                          SOILHT5A.5      
C Use, duplication or disclosure of this code is subject to the            SOILHT5A.6      
C restrictions as set forth in the contract.                               SOILHT5A.7      
C                                                                          SOILHT5A.8      
C                Meteorological Office                                     SOILHT5A.9      
C                London Road                                               SOILHT5A.10     
C                BRACKNELL                                                 SOILHT5A.11     
C                Berkshire UK                                              SOILHT5A.12     
C                RG12 2SZ                                                  SOILHT5A.13     
C                                                                          SOILHT5A.14     
C If no contract has been raised with this copy of the code, the use,      SOILHT5A.15     
C duplication or disclosure of it is strictly prohibited.  Permission      SOILHT5A.16     
C to do so must first be obtained in writing from the Head of Numerical    SOILHT5A.17     
C Modelling at the above address.                                          SOILHT5A.18     
C ******************************COPYRIGHT******************************    SOILHT5A.19     
!    SUBROUTINE SOIL_HTC------------------------------------------------   SOILHT5A.20     
!                                                                          SOILHT5A.21     
! Subroutine Interface:                                                    SOILHT5A.22     

      SUBROUTINE SOIL_HTC (                                                 2,6SOILHT5A.23     
     & NPNTS,NSHYD,SOIL_PTS,SOIL_INDEX,B,DZ,HCAP,HCON,LYING_SNOW           SOILHT5A.24     
     &,SATHH,SURF_HT_FLUX,TIMESTEP,V_SAT,W_FLUX                            SOILHT5A.25     
     &,SMCL,STHU,STHF,TSOIL                                                SOILHT5A.26     
     +,LTIMER                                                              SOILHT5A.27     
     +)                                                                    SOILHT5A.28     
                                                                           SOILHT5A.29     
      IMPLICIT NONE                                                        SOILHT5A.30     
!                                                                          SOILHT5A.31     
! Description:                                                             SOILHT5A.32     
!     Updates deep soil temperatures, frozen and unfrozen                  SOILHT5A.33     
!     frozen soil water content. Calls the following subroutines:          SOILHT5A.34     
!                                                                          SOILHT5A.35     
!     HEAT_CON - to calculate the soil thermal conductivity                SOILHT5A.36     
!                                                     (Cox, 6/95)          SOILHT5A.37     
!                                                                          SOILHT5A.38     
! Documentation : UM Documentation Paper 25                                SOILHT5A.39     
!                                                                          SOILHT5A.40     
! Current Code Owner : David Gregory                                       SOILHT5A.41     
!                                                                          SOILHT5A.42     
! History:                                                                 SOILHT5A.43     
! Version   Date     Comment                                               SOILHT5A.44     
! -------   ----     -------                                               SOILHT5A.45     
!  4.1               New deck.   Peter Cox                                 SOILHT5A.46     
!  4.4      24/11/97   Offset avoids calculations on uninitialised         GSM1F404.59     
!                      MPP halos of SMCFU and SMCFF. S.D.Mullerworth       GSM1F404.60     
!LL   4.5   18/06/98  Changed Timer calls to indicate non-barrier          GPB8F405.35     
!LL                                                   P.Burton             GPB8F405.36     
!  4.5  22/06/98  Extra Fujitsu vectorization directive for                GRB0F405.177    
!                 snow insulation loop.  R.Barnes@ecmwf.int                GRB0F405.178    
!                                                                          SOILHT5A.47     
! Code Description:                                                        SOILHT5A.48     
!   Language: FORTRAN 77 + common extensions.                              SOILHT5A.49     
!                                                                          SOILHT5A.50     
! System component covered: P25                                            SOILHT5A.51     
! System Task: P25                                                         SOILHT5A.52     
!                                                                          SOILHT5A.53     
                                                                           SOILHT5A.54     
! Global variables:                                                        SOILHT5A.55     
*CALL C_SOILH                                                              SOILHT5A.56     
                                                                           SOILHT5A.57     
! Subroutine arguments                                                     SOILHT5A.58     
!   Scalar arguments with intent(IN) :                                     SOILHT5A.59     
      INTEGER                                                              SOILHT5A.60     
     & NPNTS                ! IN Number of gridpoints.                     SOILHT5A.61     
     &,NSHYD                ! IN Number of soil moisture levels.           SOILHT5A.62     
     &,SOIL_PTS             ! IN Number of soil points.                    SOILHT5A.63     
                                                                           SOILHT5A.64     
      REAL                                                                 SOILHT5A.65     
     & TIMESTEP             ! IN Model timestep (s).                       SOILHT5A.66     
                                                                           SOILHT5A.67     
                                                                           SOILHT5A.68     
!   Array arguments with intent(IN) :                                      SOILHT5A.69     
      INTEGER                                                              SOILHT5A.70     
     & SOIL_INDEX(NPNTS)    ! IN Array of soil points.                     SOILHT5A.71     
                                                                           SOILHT5A.72     
      REAL                                                                 SOILHT5A.73     
     & B(NPNTS)             ! IN Clapp-Hornberger exponent.                SOILHT5A.74     
     &,DZ(NSHYD)            ! IN Thicknesses of the soil layers (m).       SOILHT5A.75     
     &,HCAP(NPNTS)          ! IN Soil heat capacity (J/K/m3).              SOILHT5A.76     
     &,HCON(NPNTS)          ! IN Soil thermal conductivity (W/m/K).        SOILHT5A.77     
     &,LYING_SNOW(NPNTS)    ! IN Lying snow (kg/m2).                       SOILHT5A.78     
     &,SATHH(NPNTS)         ! IN Saturated soil water pressure (m).        SOILHT5A.79     
     &,SMCL(NPNTS,NSHYD)    ! IN Soil moisture content of each             SOILHT5A.80     
!                           !    layer (kg/m2).                            SOILHT5A.81     
     &,SURF_HT_FLUX(NPNTS)  ! IN Net downward surface heat flux (W/m2).    SOILHT5A.82     
     &,V_SAT(NPNTS)         ! IN Volumetric soil moisture                  SOILHT5A.83     
!                           !    concentration at saturation               SOILHT5A.84     
!                           !    (m3 H2O/m3 soil).                         SOILHT5A.85     
     +,W_FLUX(NPNTS,0:NSHYD)! IN The fluxes of water between layers        SOILHT5A.86     
!                           !    (kg/m2/s).                                SOILHT5A.87     
C                                                                          SOILHT5A.88     
      LOGICAL LTIMER        ! Logical switch for TIMER diags               SOILHT5A.89     
                                                                           SOILHT5A.90     
!   Array arguments with intent(OUT) :                                     SOILHT5A.91     
                                                                           SOILHT5A.92     
!   Array arguments with intent(INOUT) :                                   SOILHT5A.93     
      REAL                                                                 SOILHT5A.94     
     & STHF(NPNTS,NSHYD)    ! INOUT Frozen soil moisture content of        SOILHT5A.95     
!                           !       each layer as a fraction of            SOILHT5A.96     
!                           !       saturation.                            SOILHT5A.97     
     &,STHU(NPNTS,NSHYD)    ! INOUT Unfrozen soil moisture content of      SOILHT5A.98     
!                           !       each layer as a fraction of            SOILHT5A.99     
!                           !       saturation.                            SOILHT5A.100    
     &,TSOIL(NPNTS,NSHYD)   ! INOUT Sub-surface temperatures (K).          SOILHT5A.101    
                                                                           SOILHT5A.102    
! Local scalars:                                                           SOILHT5A.103    
      INTEGER                                                              SOILHT5A.104    
     & I,J,M,N              ! WORK Loop counters.                          SOILHT5A.105    
     &,J_ITER               ! WORK Number of soil points which require     SOILHT5A.106    
!                           !      iteration.                              SOILHT5A.107    
     &,MMAX                 ! WORK Maximum number of iterations on         SOILHT5A.108    
!                           !      temperature.                            SOILHT5A.109    
     &,FIRST_SOIL_PT        ! First soil point                             GSM1F404.61     
      REAL                                                                 SOILHT5A.110    
     & FACUR                ! WORK Required flux conservation accuracy     SOILHT5A.111    
!                           !      (W/m2).                                 SOILHT5A.112    
     &,SNOW_DEPTH           ! WORK Depth of lying snow (m).                SOILHT5A.113    
     &,TACUR                ! WORK Required accuracy of temperature        SOILHT5A.114    
!                           !      calculation (Celsius).                  SOILHT5A.115    
      PARAMETER( MMAX=3, FACUR=0.01, TACUR=0.00000 )                       SOILHT5A.116    
                                                                           SOILHT5A.117    
! Local arrays:                                                            SOILHT5A.118    
      INTEGER                                                              SOILHT5A.119    
     & ITER_PTS(NPNTS)      ! WORK Array of soil points which require      SOILHT5A.120    
!                           !      iteration.                              SOILHT5A.121    
                                                                           SOILHT5A.122    
      REAL                                                                 SOILHT5A.123    
     & CEACUR(NPNTS)        ! WORK Flux conservation accuracy of the       SOILHT5A.124    
!                           !      calculation (W/m2)                      SOILHT5A.125    
     &,DHSL0(NPNTS,NSHYD)   ! WORK Total heat increment to the layer       SOILHT5A.126    
!                           !      (J/m2/timestep)                         SOILHT5A.127    
     &,DHSL(NPNTS,NSHYD)    ! WORK The heat available to update the        SOILHT5A.128    
!                           !      layer temperature (J/m2/timestep)       SOILHT5A.129    
     &,DHSLA(NPNTS,NSHYD)   ! WORK The heat increment due to advection o   SOILHT5A.130    
!                           !      heat by moisture fluxes (J/m2/timeste   SOILHT5A.131    
     &,DSMCLF(NPNTS,NSHYD)  ! WORK The increment to the layer frozen       SOILHT5A.132    
!                           !      soil moisture (kg/m2/timestep).         SOILHT5A.133    
     &,DTHU(NPNTS,NSHYD)    ! WORK Rate of change of volumetric unfrozen   SOILHT5A.134    
!                           !      soil moisture concentration with        SOILHT5A.135    
!                           !      temperature (m3 liquid H2O/m3 soil/K)   SOILHT5A.136    
     &,DTSL(NPNTS,NSHYD)    ! WORK The increment to the layer temperatur   SOILHT5A.137    
!                           !      (K/timestep).                           SOILHT5A.138    
     &,HCAPT(NPNTS)         ! WORK The total volumetric heat capacity      SOILHT5A.139    
!                           !      (soil+water) of the layer (J/m3/K).     SOILHT5A.140    
     &,HC(NPNTS,NSHYD)      ! WORK The thermal conductivity of each        SOILHT5A.141    
!                           !      layer (W/m/K).                          SOILHT5A.142    
     &,HCONS(NPNTS)         ! WORK The thermal conductivity between        SOILHT5A.143    
!                           !      adjacent soil layers (W/m/K).           SOILHT5A.144    
     &,H_FLUX(NPNTS,0:NSHYD) !WORK The fluxes of heat between layers       SOILHT5A.145    
!                           !      (W/m2).                                 SOILHT5A.146    
     &,SIFACT(NPNTS)        ! WORK Snow insulation factor.                 SOILHT5A.147    
     &,SMCLF(NPNTS,NSHYD)   ! WORK Frozen moisture content of each         SOILHT5A.148    
!                           !      soil layer (kg/m2).                     SOILHT5A.149    
     &,SMCLF0(NPNTS,NSHYD)  ! WORK Previous value of SMCLF (kg/m2).        SOILHT5A.150    
     &,SMCLSAT(NPNTS,NSHYD) ! WORK The saturation moisture content of      SOILHT5A.151    
!                           !      each layer (kg/m2).                     SOILHT5A.152    
     &,SMCLU(NPNTS,NSHYD)   ! WORK Unfrozen moisture content of each       SOILHT5A.153    
!                           !      soil layer (kg/m2).                     SOILHT5A.154    
     &,SMCLU0(NPNTS,NSHYD)  ! WORK Previous value of SMCLU (kg/m2).        SOILHT5A.155    
     &,SMCFU(NPNTS)         ! WORK Fractional saturation (unfrozen water   SOILHT5A.156    
!                           !      at layer boundaries.                    SOILHT5A.157    
     &,SMCFF(NPNTS)         ! WORK Fractional saturation (frozen water)    SOILHT5A.158    
!                           !      at layer boundaries.                    SOILHT5A.159    
     &,TMAX(NPNTS,NSHYD)    ! WORK Temperature above which all water is    SOILHT5A.160    
!                           !      unfrozen (Celsius)                      SOILHT5A.161    
     &,TSL(NPNTS,0:NSHYD)   ! WORK Soil layer temperatures (Celsius)       SOILHT5A.162    
!                           !      TSL(0) temperature of incoming water.   SOILHT5A.163    
!                           !      TSL(1:NSHYD) sub-surface soil           SOILHT5A.164    
!                           !      temperatures .                          SOILHT5A.165    
     &,TSL0(NPNTS,0:NSHYD)  ! WORK Previous value of TSL (Celsius).        SOILHT5A.166    
                                                                           SOILHT5A.167    
! Function & Subroutine calls:                                             SOILHT5A.168    
      EXTERNAL                                                             SOILHT5A.169    
     & HEAT_CON                                                            SOILHT5A.170    
                                                                           SOILHT5A.171    
*CALL C_DENSTY                                                             SOILHT5A.172    
*CALL C_LHEAT                                                              SOILHT5A.173    
*CALL C_PERMA                                                              SOILHT5A.174    
*CALL C_0_DG_C                                                             SOILHT5A.175    
                                                                           SOILHT5A.176    
      IF (LTIMER) THEN                                                     SOILHT5A.177    
        CALL TIMER('SOILHTC ',103)                                         GPB8F405.37     
      ENDIF                                                                SOILHT5A.179    
                                                                           SOILHT5A.180    
!-----------------------------------------------------------------------   SOILHT5A.181    
! Initialisations                                                          SOILHT5A.182    
!-----------------------------------------------------------------------   SOILHT5A.183    
      FIRST_SOIL_PT=SOIL_INDEX(1)                                          GSM1F404.62     
                                                                           GSM1F404.63     
      DO J=1,SOIL_PTS                                                      SOILHT5A.184    
        I=SOIL_INDEX(J)                                                    SOILHT5A.185    
        TSL(I,0)=TSOIL(I,1)-ZERODEGC                                       SOILHT5A.186    
      ENDDO                                                                SOILHT5A.187    
                                                                           SOILHT5A.188    
      DO N=1,NSHYD                                                         SOILHT5A.189    
        DO J=1,SOIL_PTS                                                    SOILHT5A.190    
          I=SOIL_INDEX(J)                                                  SOILHT5A.191    
!-----------------------------------------------------------------------   SOILHT5A.192    
! Define soil layer temperatures TSL (in celsius).                         SOILHT5A.193    
!-----------------------------------------------------------------------   SOILHT5A.194    
          TSL(I,N)=TSOIL(I,N)-ZERODEGC                                     SOILHT5A.195    
        ENDDO                                                              SOILHT5A.196    
      ENDDO                                                                SOILHT5A.197    
                                                                           SOILHT5A.198    
      DO N=1,NSHYD                                                         SOILHT5A.199    
! CDIR$ IVDEP here would force vectorization but changes results!          SOILHT5A.200    
! Fujitsu vectorization directive                                          GRB0F405.179    
!OCL NOVREC                                                                GRB0F405.180    
        DO J=1,SOIL_PTS                                                    SOILHT5A.201    
          I=SOIL_INDEX(J)                                                  SOILHT5A.202    
!-----------------------------------------------------------------------   SOILHT5A.203    
! Diagnose the frozen and unfrozen water.                                  SOILHT5A.204    
!-----------------------------------------------------------------------   SOILHT5A.205    
                                                                           SOILHT5A.206    
          SMCLSAT(I,N)=RHO_WATER*DZ(N)*V_SAT(I)                            SOILHT5A.207    
          SMCLF(I,N)=SMCLSAT(I,N)*STHF(I,N)                                SOILHT5A.208    
          SMCLU(I,N)=SMCL(I,N)-SMCLF(I,N)                                  SOILHT5A.209    
        ENDDO                                  !  J=1,SOIL_PTS             SOILHT5A.210    
      ENDDO                                    ! N=1,NSHYD                 SOILHT5A.211    
                                                                           SOILHT5A.212    
!----------------------------------------------------------------------    SOILHT5A.213    
! Calculate the heat conductivity between adjacent layers                  SOILHT5A.214    
!----------------------------------------------------------------------    SOILHT5A.215    
      DO N=1,NSHYD-1                                                       SOILHT5A.217    
        DO J=1,SOIL_PTS                                                    SOILHT5A.218    
          I=SOIL_INDEX(J)                                                  SOILHT5A.219    
          SMCFU(I)=(DZ(N+1)*STHU(I,N)+DZ(N)*STHU(I,N+1))                   SOILHT5A.220    
     &              /(DZ(N+1)+DZ(N))                                       SOILHT5A.221    
          SMCFF(I)=(DZ(N+1)*STHF(I,N)+DZ(N)*STHF(I,N+1))                   SOILHT5A.222    
     &              /(DZ(N+1)+DZ(N))                                       SOILHT5A.223    
        ENDDO                                                              SOILHT5A.224    
        CALL HEAT_CON(NPNTS-FIRST_SOIL_PT+1,HCON(FIRST_SOIL_PT)            GSM1F404.64     
     &    ,SMCFU(FIRST_SOIL_PT),SMCFF(FIRST_SOIL_PT)                       GSM1F404.65     
     &    ,V_SAT(FIRST_SOIL_PT),HCONS(FIRST_SOIL_PT),LTIMER)               GSM1F404.66     
        DO J=1,SOIL_PTS                                                    SOILHT5A.227    
          I=SOIL_INDEX(J)                                                  SOILHT5A.228    
          HC(I,N)=HCONS(I)                                                 SOILHT5A.229    
        ENDDO                                                              SOILHT5A.230    
      ENDDO                                                                SOILHT5A.231    
                                                                           SOILHT5A.232    
!--------------------------------------------------------------------      SOILHT5A.233    
! Calculate the snow insulation factor                                     SOILHT5A.234    
!--------------------------------------------------------------------      SOILHT5A.235    
! Fujitsu vectorization directive                                          GRB0F405.181    
!OCL NOVREC                                                                GRB0F405.182    
      DO J=1,SOIL_PTS                                                      SOILHT5A.236    
        I=SOIL_INDEX(J)                                                    SOILHT5A.237    
        IF (LYING_SNOW(I) .GT. 0.0) THEN                                   SOILHT5A.238    
          SNOW_DEPTH = LYING_SNOW(I) / RHO_SNOW                            SOILHT5A.239    
          IF (SNOW_DEPTH .LE. (0.5*DZ(1))) THEN                            SOILHT5A.240    
            SIFACT(I)=1.0                                                  SOILHT5A.241    
     &            /(1.0+2*SNOW_DEPTH/(DZ(1) + DZ(2)))                      SOILHT5A.242    
          ELSE                                                             SOILHT5A.243    
            SIFACT(I)=(DZ(1)+DZ(2))                                        SOILHT5A.244    
     &          /(HC(I,1)/SNOW_HCON*(2*SNOW_DEPTH-DZ(1))                   SOILHT5A.245    
     &            +2*DZ(1)+DZ(2))                                          SOILHT5A.246    
          ENDIF                                                            SOILHT5A.247    
        ELSE                                                               SOILHT5A.248    
          SIFACT(I)=1.0                                                    SOILHT5A.249    
        ENDIF                                                              SOILHT5A.250    
      ENDDO                                                                SOILHT5A.251    
                                                                           SOILHT5A.252    
!--------------------------------------------------------------------      SOILHT5A.253    
! Calculate heat fluxes across layer boundaries                            SOILHT5A.254    
!--------------------------------------------------------------------      SOILHT5A.255    
      DO N=1,NSHYD-1                                                       SOILHT5A.256    
        DO J=1,SOIL_PTS                                                    SOILHT5A.257    
          I=SOIL_INDEX(J)                                                  SOILHT5A.258    
          H_FLUX(I,N)=-HC(I,N)*2.0*(TSL(I,N+1)-TSL(I,N))                   SOILHT5A.259    
     &                            /(DZ(N+1)+DZ(N))                         SOILHT5A.260    
        ENDDO                                                              SOILHT5A.261    
      ENDDO                                                                SOILHT5A.262    
CDIR$ IVDEP                                                                SOILHT5A.263    
! Fujitsu vectorization directive                                          GRB0F405.183    
!OCL NOVREC                                                                GRB0F405.184    
      DO J=1,SOIL_PTS                                                      SOILHT5A.264    
        I=SOIL_INDEX(J)                                                    SOILHT5A.265    
        H_FLUX(I,NSHYD)=0.0                                                SOILHT5A.266    
        H_FLUX(I,0)=SURF_HT_FLUX(I)                                        SOILHT5A.267    
        H_FLUX(I,1)=SIFACT(I)*H_FLUX(I,1)                                  SOILHT5A.268    
      ENDDO                                                                SOILHT5A.269    
                                                                           SOILHT5A.270    
!--------------------------------------------------------------------      SOILHT5A.271    
! Calculate the advection of heat by moisture fluxes                       SOILHT5A.272    
!--------------------------------------------------------------------      SOILHT5A.273    
      DO N=2,NSHYD-1                                                       SOILHT5A.274    
        DO J=1,SOIL_PTS                                                    SOILHT5A.275    
          I=SOIL_INDEX(J)                                                  SOILHT5A.276    
          DHSLA(I,N)=TIMESTEP*HCAPW*DZ(N)*                                 SOILHT5A.277    
     &    (W_FLUX(I,N-1)*(TSL(I,N-1)-TSL(I,N))/(DZ(N)+DZ(N-1))             SOILHT5A.278    
     &     +W_FLUX(I,N)*(TSL(I,N)-TSL(I,N+1))/(DZ(N)+DZ(N+1)))             SOILHT5A.279    
        ENDDO                                                              SOILHT5A.280    
      ENDDO                                                                SOILHT5A.281    
                                                                           SOILHT5A.282    
CDIR$ IVDEP                                                                SOILHT5A.283    
! Fujitsu vectorization directive                                          GRB0F405.185    
!OCL NOVREC                                                                GRB0F405.186    
      DO J=1,SOIL_PTS                                                      SOILHT5A.284    
        I=SOIL_INDEX(J)                                                    SOILHT5A.285    
        DHSLA(I,1)=TIMESTEP*HCAPW*DZ(1)*                                   SOILHT5A.286    
     &   (W_FLUX(I,0)*(TSL(I,0)-TSL(I,1))/DZ(1)                            SOILHT5A.287    
     &   +W_FLUX(I,1)*(TSL(I,1)-TSL(I,2))/(DZ(1)+DZ(2)))                   SOILHT5A.288    
        DHSLA(I,NSHYD)=TIMESTEP*HCAPW*DZ(NSHYD)*                           SOILHT5A.289    
     &               W_FLUX(I,NSHYD-1)*(TSL(I,NSHYD-1)-TSL(I,NSHYD))       SOILHT5A.290    
     &               /(DZ(NSHYD)+DZ(NSHYD-1))                              SOILHT5A.291    
      ENDDO                                                                SOILHT5A.292    
                                                                           SOILHT5A.293    
      DO N=1,NSHYD                                                         SOILHT5A.294    
CDIR$ IVDEP                                                                SOILHT5A.295    
! Fujitsu vectorization directive                                          GRB0F405.187    
!OCL NOVREC                                                                GRB0F405.188    
        DO J=1,SOIL_PTS                                                    SOILHT5A.296    
          I=SOIL_INDEX(J)                                                  SOILHT5A.297    
!-----------------------------------------------------------------------   SOILHT5A.298    
! Calculate TMAX, the temperature above which all soil water is            SOILHT5A.299    
! unfrozen. Check that (SMCLSAT/SMCL)**B will not overflow when SMCL is    ACB1F404.2      
! very small. The function EPSILON  gives the number of type (real) of     ACB1F404.3      
! SMCL that is negligeable compared to 1.                                  ACB1F404.4      
!-----------------------------------------------------------------------   SOILHT5A.301    
*IF DEF,SCMA,AND,-DEF,T3E                                                  AJC0F405.243    
          IF (SMCL(I,N).GT. SMCLSAT(I,N)*1E-20) THEN                       AJC0F405.244    
*ELSE                                                                      AJC0F405.245    
          IF (SMCL(I,N) .GT. SMCLSAT(I,N)*(EPSILON(SMCL(I,N)) ) )THEN      ACB1F404.5      
*ENDIF                                                                     AJC0F405.246    
            TMAX(I,N)=-SATHH(I)/DPSIDT                                     SOILHT5A.303    
     &             *(SMCLSAT(I,N)/SMCL(I,N))**(B(I))                       SOILHT5A.304    
          ELSE                                                             SOILHT5A.305    
            TMAX(I,N)=-ZERODEGC                                            SOILHT5A.306    
          ENDIF                                                            SOILHT5A.307    
          TMAX(I,N)=MAX(TMAX(I,N),-ZERODEGC)                               SOILHT5A.308    
                                                                           SOILHT5A.309    
          DHSL0(I,N)=TIMESTEP*(H_FLUX(I,N-1)-H_FLUX(I,N))                  SOILHT5A.310    
     &                 +DHSLA(I,N)                                         SOILHT5A.311    
                                                                           SOILHT5A.312    
                                                                           SOILHT5A.313    
          DHSL(I,N)=DHSL0(I,N)                                             SOILHT5A.314    
                                                                           SOILHT5A.315    
!-----------------------------------------------------------------------   SOILHT5A.316    
! Calculate the soil temperature increments                                SOILHT5A.317    
!-----------------------------------------------------------------------   SOILHT5A.318    
          TSL0(I,N)=TSL(I,N)                                               SOILHT5A.319    
          SMCLF0(I,N)=SMCLF(I,N)                                           SOILHT5A.320    
          SMCLU0(I,N)=SMCLU(I,N)                                           SOILHT5A.321    
                                                                           SOILHT5A.322    
          IF (TSL(I,N).GT.TMAX(I,N)) THEN         ! All water unfrozen     SOILHT5A.323    
            DTHU(I,N)=0.0                                                  SOILHT5A.324    
          ELSEIF (TSL(I,N).EQ.TMAX(I,N).AND.      ! Remains unfrozen       SOILHT5A.325    
     &            DHSL(I,N).GE.0.0) THEN                                   SOILHT5A.326    
            DTHU(I,N)=0.0                                                  SOILHT5A.327    
          ELSE                                    ! Phase changes          SOILHT5A.328    
            DTHU(I,N)=DPSIDT*SMCLSAT(I,N)                                  SOILHT5A.329    
     &               /(B(I)*SATHH(I)*RHO_WATER*DZ(N))                      SOILHT5A.330    
     &               *(-DPSIDT*TSL(I,N)/SATHH(I))**(-1.0/B(I)-1.0)         SOILHT5A.331    
          ENDIF                                                            SOILHT5A.332    
                                                                           SOILHT5A.333    
          HCAPT(I)=HCAP(I)+(HCAPW-HCAPI)*SMCLU(I,N)/DZ(N)                  SOILHT5A.334    
     &            +HCAPI*SMCL(I,N)/DZ(N)                                   SOILHT5A.335    
     &            +RHO_WATER*DTHU(I,N)*((HCAPW-HCAPI)*TSL(I,N)+LF)         SOILHT5A.336    
                                                                           SOILHT5A.337    
          DTSL(I,N)=1.0/(HCAPT(I)*DZ(N))*DHSL(I,N)                         SOILHT5A.338    
          TSL(I,N)=TSL(I,N)+DTSL(I,N)                                      SOILHT5A.339    
                                                                           SOILHT5A.340    
!-----------------------------------------------------------------------   SOILHT5A.341    
! If the temperature increment is small and frozen water exists            SOILHT5A.342    
! assume that the excess energy goes into phase change                     SOILHT5A.343    
!-----------------------------------------------------------------------   SOILHT5A.344    
           IF (ABS(DTSL(I,N)).LT.TACUR.AND.                                SOILHT5A.345    
     &         TSL(I,N).LE.TMAX(I,N)) THEN                                 SOILHT5A.346    
             DSMCLF(I,N)=-DHSL(I,N)/((HCAPW-HCAPI)*TSL(I,N)+LF)            SOILHT5A.347    
             DSMCLF(I,N)=MAX(DSMCLF(I,N),-SMCLF(I,N))                      SOILHT5A.348    
             DSMCLF(I,N)=MIN(DSMCLF(I,N),SMCLU(I,N))                       SOILHT5A.349    
             SMCLU(I,N)=SMCLU(I,N)-DSMCLF(I,N)                             SOILHT5A.350    
             SMCLF(I,N)=SMCLF(I,N)+DSMCLF(I,N)                             SOILHT5A.351    
           ENDIF                                                           SOILHT5A.352    
                                                                           SOILHT5A.353    
!-----------------------------------------------------------------------   SOILHT5A.354    
! Check to see if the discontinuity in HCAPT at TMAX has been crossed      SOILHT5A.355    
! - if it has return to TMAX                                               SOILHT5A.356    
!-----------------------------------------------------------------------   SOILHT5A.357    
          IF ((TSL(I,N)-TMAX(I,N))*(TSL0(I,N)-TMAX(I,N))                   SOILHT5A.358    
     &        .LT.0.0) THEN                                                SOILHT5A.359    
            DTSL(I,N)=DTSL(I,N)+(TMAX(I,N)-TSL(I,N))                       SOILHT5A.360    
            TSL(I,N)=TMAX(I,N)                                             SOILHT5A.361    
          ENDIF                                                            SOILHT5A.362    
                                                                           SOILHT5A.363    
!-----------------------------------------------------------------------   SOILHT5A.364    
! Diagnose unfrozen and frozen water contents                              SOILHT5A.365    
!-----------------------------------------------------------------------   SOILHT5A.366    
          IF (TSL(I,N).GE.TMAX(I,N)) THEN                                  SOILHT5A.367    
            SMCLU(I,N)=SMCL(I,N)                                           SOILHT5A.368    
            SMCLF(I,N)=0.0                                                 SOILHT5A.369    
          ELSE                                                             SOILHT5A.370    
            SMCLU(I,N)=SMCLSAT(I,N)                                        SOILHT5A.371    
     &                *(-DPSIDT*TSL(I,N)/SATHH(I))**(-1.0/B(I))            SOILHT5A.372    
            SMCLF(I,N)=SMCL(I,N)-SMCLU(I,N)                                SOILHT5A.373    
          ENDIF                                                            SOILHT5A.374    
                                                                           SOILHT5A.375    
!-----------------------------------------------------------------------   SOILHT5A.376    
! Calculate the error in heat conservation                                 SOILHT5A.377    
!-----------------------------------------------------------------------   SOILHT5A.378    
          DSMCLF(I,N)=SMCLF(I,N)-SMCLF0(I,N)                               SOILHT5A.379    
          DHSL(I,N)=DHSL(I,N)-(HCAP(I)*DZ(N)+HCAPW*SMCLU0(I,N)             SOILHT5A.380    
     &                        +HCAPI*SMCLF0(I,N))*DTSL(I,N)                SOILHT5A.381    
     &                   -DSMCLF(I,N)*((HCAPI-HCAPW)*TSL0(I,N)-LF)         SOILHT5A.382    
                                                                           SOILHT5A.383    
!-----------------------------------------------------------------------   SOILHT5A.384    
! Calculate the error in flux conservation                                 SOILHT5A.385    
!-----------------------------------------------------------------------   SOILHT5A.386    
          CEACUR(I)=ABS(DHSL(I,N))/TIMESTEP                                SOILHT5A.387    
                                                                           SOILHT5A.388    
        ENDDO                                                              SOILHT5A.389    
                                                                           SOILHT5A.390    
!-----------------------------------------------------------------------   SOILHT5A.391    
! Define the array of points which fail to meet the flux criterion         SOILHT5A.392    
!-----------------------------------------------------------------------   SOILHT5A.393    
        J_ITER=0                                                           SOILHT5A.394    
C          CDIR$ IVDEP                                                     SOILHT5A.395    
! Fujitsu vectorization directive                                          GRB0F405.189    
!OCL NOVREC                                                                GRB0F405.190    
        DO J=1,SOIL_PTS                                                    SOILHT5A.396    
          I=SOIL_INDEX(J)                                                  SOILHT5A.397    
                                                                           SOILHT5A.398    
          IF (CEACUR(I) .GT. FACUR) THEN                                   SOILHT5A.399    
            J_ITER=J_ITER+1                                                SOILHT5A.400    
            ITER_PTS(J_ITER)=J                                             SOILHT5A.401    
          ENDIF                                                            SOILHT5A.402    
                                                                           SOILHT5A.403    
        ENDDO                                                              SOILHT5A.404    
                                                                           SOILHT5A.405    
                                                                           SOILHT5A.406    
!-----------------------------------------------------------------------   SOILHT5A.407    
! Iterate on these points                                                  SOILHT5A.408    
!-----------------------------------------------------------------------   SOILHT5A.409    
        DO M=1,MMAX-1                                                      SOILHT5A.410    
CDIR$ IVDEP                                                                SOILHT5A.411    
! Fujitsu vectorization directive                                          GRB0F405.191    
!OCL NOVREC                                                                GRB0F405.192    
          DO J=1,J_ITER                                                    SOILHT5A.412    
            I=SOIL_INDEX(ITER_PTS(J))                                      SOILHT5A.413    
                                                                           SOILHT5A.414    
            TSL0(I,N)=TSL(I,N)                                             SOILHT5A.415    
            SMCLF0(I,N)=SMCLF(I,N)                                         SOILHT5A.416    
            SMCLU0(I,N)=SMCLU(I,N)                                         SOILHT5A.417    
                                                                           SOILHT5A.418    
            IF (TSL(I,N).GT.TMAX(I,N)) THEN         ! All water unfrozen   SOILHT5A.419    
              DTHU(I,N)=0.0                                                SOILHT5A.420    
            ELSEIF (TSL(I,N).EQ.TMAX(I,N).AND.      ! Remains unfrozen     SOILHT5A.421    
     &              DHSL(I,N).GE.0.0) THEN                                 SOILHT5A.422    
              DTHU(I,N)=0.0                                                SOILHT5A.423    
            ELSE                                    ! Phase changes        SOILHT5A.424    
              DTHU(I,N)=DPSIDT*SMCLSAT(I,N)                                SOILHT5A.425    
     &                 /(B(I)*SATHH(I)*RHO_WATER*DZ(N))                    SOILHT5A.426    
     &                 *(-DPSIDT*TSL(I,N)/SATHH(I))**(-1.0/B(I)-1.0)       SOILHT5A.427    
            ENDIF                                                          SOILHT5A.428    
                                                                           SOILHT5A.429    
            HCAPT(I)=HCAP(I)+(HCAPW-HCAPI)*SMCLU(I,N)/DZ(N)                SOILHT5A.430    
     &              +HCAPI*SMCL(I,N)/DZ(N)                                 SOILHT5A.431    
     &              +RHO_WATER*DTHU(I,N)*((HCAPW-HCAPI)*TSL(I,N)+LF)       SOILHT5A.432    
                                                                           SOILHT5A.433    
            DTSL(I,N)=1.0/(HCAPT(I)*DZ(N))*DHSL(I,N)                       SOILHT5A.434    
            TSL(I,N)=TSL(I,N)+DTSL(I,N)                                    SOILHT5A.435    
                                                                           SOILHT5A.436    
!-----------------------------------------------------------------------   SOILHT5A.437    
! If the temperature increment is small and frozen water exists            SOILHT5A.438    
! assume that the excess energy goes into phase change                     SOILHT5A.439    
!-----------------------------------------------------------------------   SOILHT5A.440    
            IF (ABS(DTSL(I,N)).LT.TACUR.AND.                               SOILHT5A.441    
     &          TSL(I,N).LE.TMAX(I,N)) THEN                                SOILHT5A.442    
              DSMCLF(I,N)=-DHSL(I,N)/((HCAPW-HCAPI)*TSL(I,N)+LF)           SOILHT5A.443    
              DSMCLF(I,N)=MAX(DSMCLF(I,N),-SMCLF(I,N))                     SOILHT5A.444    
              DSMCLF(I,N)=MIN(DSMCLF(I,N),SMCLU(I,N))                      SOILHT5A.445    
              SMCLU(I,N)=SMCLU(I,N)-DSMCLF(I,N)                            SOILHT5A.446    
              SMCLF(I,N)=SMCLF(I,N)+DSMCLF(I,N)                            SOILHT5A.447    
            ENDIF                                                          SOILHT5A.448    
                                                                           SOILHT5A.449    
!-----------------------------------------------------------------------   SOILHT5A.450    
! Check to see if the discontinuity in HCAPT at TMAX has been crossed      SOILHT5A.451    
! - if it has return to TMAX                                               SOILHT5A.452    
!-----------------------------------------------------------------------   SOILHT5A.453    
            IF ((TSL(I,N)-TMAX(I,N))*(TSL0(I,N)-TMAX(I,N))                 SOILHT5A.454    
     &          .LT.0.0) THEN                                              SOILHT5A.455    
              DTSL(I,N)=DTSL(I,N)+(TMAX(I,N)-TSL(I,N))                     SOILHT5A.456    
              TSL(I,N)=TMAX(I,N)                                           SOILHT5A.457    
            ENDIF                                                          SOILHT5A.458    
                                                                           SOILHT5A.459    
!-----------------------------------------------------------------------   SOILHT5A.460    
! Diagnose unfrozen and frozen water contents                              SOILHT5A.461    
!-----------------------------------------------------------------------   SOILHT5A.462    
            IF (TSL(I,N).GE.TMAX(I,N)) THEN                                SOILHT5A.463    
              SMCLU(I,N)=SMCL(I,N)                                         SOILHT5A.464    
              SMCLF(I,N)=0.0                                               SOILHT5A.465    
            ELSE                                                           SOILHT5A.466    
              SMCLU(I,N)=SMCLSAT(I,N)                                      SOILHT5A.467    
     &                  *(-DPSIDT*TSL(I,N)/SATHH(I))**(-1.0/B(I))          SOILHT5A.468    
              SMCLF(I,N)=SMCL(I,N)-SMCLU(I,N)                              SOILHT5A.469    
            ENDIF                                                          SOILHT5A.470    
                                                                           SOILHT5A.471    
!-----------------------------------------------------------------------   SOILHT5A.472    
! Calculate the error in heat conservation                                 SOILHT5A.473    
!-----------------------------------------------------------------------   SOILHT5A.474    
            DSMCLF(I,N)=SMCLF(I,N)-SMCLF0(I,N)                             SOILHT5A.475    
            DHSL(I,N)=DHSL(I,N)-(HCAP(I)*DZ(N)+HCAPW*SMCLU0(I,N)           SOILHT5A.476    
     &                          +HCAPI*SMCLF0(I,N))*DTSL(I,N)              SOILHT5A.477    
     &                     -DSMCLF(I,N)*((HCAPI-HCAPW)*TSL0(I,N)-LF)       SOILHT5A.478    
                                                                           SOILHT5A.479    
          ENDDO                                                            SOILHT5A.480    
        ENDDO                                                              SOILHT5A.481    
      ENDDO                                                                SOILHT5A.482    
                                                                           SOILHT5A.483    
!-----------------------------------------------------------------------   SOILHT5A.484    
! Diagnose soil temperatures (K) and fractional values of unfrozen and     SOILHT5A.485    
! frozen water.                                                            SOILHT5A.486    
!-----------------------------------------------------------------------   SOILHT5A.487    
                                                                           SOILHT5A.488    
      DO N=1,NSHYD                                                         SOILHT5A.489    
        DO J=1,SOIL_PTS                                                    SOILHT5A.490    
          I=SOIL_INDEX(J)                                                  SOILHT5A.491    
          TSOIL(I,N)=TSL(I,N)+ZERODEGC                                     SOILHT5A.492    
          STHU(I,N)=SMCLU(I,N)/SMCLSAT(I,N)                                SOILHT5A.493    
          STHF(I,N)=SMCLF(I,N)/SMCLSAT(I,N)                                SOILHT5A.494    
        ENDDO                                                              SOILHT5A.495    
      ENDDO                                                                SOILHT5A.496    
      IF (LTIMER) THEN                                                     SOILHT5A.497    
        CALL TIMER('SOILHTC ',104)                                         GPB8F405.38     
      ENDIF                                                                SOILHT5A.499    
                                                                           SOILHT5A.500    
      RETURN                                                               SOILHT5A.501    
      END                                                                  SOILHT5A.502    
*ENDIF                                                                     SOILHT5A.503