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