*IF DEF,A08_7A HYDROL7A.2
C *****************************COPYRIGHT****************************** HYDROL7A.3
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. HYDROL7A.4
C HYDROL7A.5
C Use, duplication or disclosure of this code is subject to the HYDROL7A.6
C restrictions as set forth in the contract. HYDROL7A.7
C HYDROL7A.8
C Meteorological Office HYDROL7A.9
C London Road HYDROL7A.10
C BRACKNELL HYDROL7A.11
C Berkshire UK HYDROL7A.12
C RG12 2SZ HYDROL7A.13
C HYDROL7A.14
C If no contract has been raised with this copy of the code, the use, HYDROL7A.15
C duplication or disclosure of it is strictly prohibited. Permission HYDROL7A.16
C to do so must first be obtained in writing from the Head of Numerical HYDROL7A.17
C Modelling at the above address. HYDROL7A.18
C ******************************COPYRIGHT****************************** HYDROL7A.19
! SUBROUTINE HYDROL------------------------------------------------- HYDROL7A.20
! HYDROL7A.21
! Subroutine Interface: HYDROL7A.22
SUBROUTINE HYDROL ( 3,22HYDROL7A.23
& LICE_PTS,LICE_INDEX,SOIL_PTS,NTYPE, HYDROL7A.24
& SOIL_INDEX,TILE_PTS,TILE_INDEX, HYDROL7A.25
& NPNTS,NSHYD,B,CAN_CPY,CON_RAIN,CON_SNOW, HYDROL7A.26
& E_CANOPY,EXT,HCAP,HCON,LS_RAIN, HYDROL7A.27
& LS_SNOW,SATCON,SATHH,SNOWSUB,SOIL_SURF_HTF, HYDROL7A.28
& SNOW_SURF_HTF,TSTAR_SNOW,FRAC,SNOW_FRAC, HYDROL7A.29
& TIMESTEP,V_SAT,V_WILT, HYDROL7A.30
& CAN_WCNT,HF_SNOW_MELT,STF_HF_SNOW_MELT, HYDROL7A.31
& RGRAIN,L_SNOW_ALBEDO,SMCL,STHF,STHU, HYDROL7A.32
& SNOW_DEP,TSOIL,TSNOW, HYDROL7A.33
& CAN_WCNT_GB,INFIL,SMC,SNOW_MELT, HYDROL7A.34
& SNOMLT_SUB_HTF,STF_SUB_SURF_ROFF, HYDROL7A.35
& SUB_SURF_ROFF,SURF_ROFF,TOT_TFALL,LTIMER HYDROL7A.36
& ) HYDROL7A.37
HYDROL7A.38
IMPLICIT NONE HYDROL7A.39
! HYDROL7A.40
! Description: HYDROL7A.41
! Surface hydrology module which also updates the HYDROL7A.42
! sub-surface temperatures. Includes soil water phase HYDROL7A.43
! changes and the effect of soil water and ice on the HYDROL7A.44
! thermal and hydraulic characteristics of the soil. HYDROL7A.45
! This version is for use with MOSES II land surface HYDROL7A.46
! scheme. Calls the following: HYDROL7A.47
! HYDROL7A.48
! HEAT_CON - to calculate the thermal conductivity of the top HYDROL7A.49
! soil layer (Cox, 6/95) HYDROL7A.50
! HYDROL7A.51
! SFSNOW - to calculate the sub-surface snowmelt HYDROL7A.52
! and update the lying snow amount (Essery, 1/95) HYDROL7A.53
! HYDROL7A.54
! INFILT - to calculate the maximum surface infiltration rate HYDROL7A.55
! (Cox, 6/95) HYDROL7A.56
! HYDROL7A.57
! SURF_HYD - to calculate canopy interception and HYDROL7A.58
! surface runoff (Allen-Bett, Gregory, 90) HYDROL7A.59
! HYDROL7A.60
! SOIL_HYD - to update the layer soil moisture contents HYDROL7A.61
! and calculate the drainage (Cox 6/95) HYDROL7A.62
! HYDROL7A.63
! SOIL_HTC - to update the soil layer temperatures and the HYDROL7A.64
! layer ice contents (Cox 6/95) HYDROL7A.65
! HYDROL7A.66
! ICE_HTC - to update the layer temperatures for land ice HYDROL7A.67
! (Cox 10/95) HYDROL7A.68
! HYDROL7A.69
! SOIL_MC - to diagnose the soil moisture in the top metre HYDROL7A.70
! (Essery 7/97) HYDROL7A.71
! HYDROL7A.72
! Documentation : UM Documentation Paper 25 HYDROL7A.73
! HYDROL7A.74
! Current Code Owner : David Gregory HYDROL7A.75
! HYDROL7A.76
! History: HYDROL7A.77
! Version Date Comment HYDROL7A.78
! ------- ---- ------- HYDROL7A.79
! 4.1 6/96 New deck. Peter Cox HYDROL7A.80
! 4.4 7/97 MOSES II. Richard Essery HYDROL7A.81
! HYDROL7A.82
! Code Description: HYDROL7A.83
! Language: FORTRAN 77 + common extensions. HYDROL7A.84
! HYDROL7A.85
! System component covered: P25 HYDROL7A.86
! System Task: P25 HYDROL7A.87
! HYDROL7A.88
HYDROL7A.89
! Global variables: HYDROL7A.90
*CALL C_LHEAT
HYDROL7A.91
*CALL SOIL_THICK
HYDROL7A.92
HYDROL7A.93
! Subroutine arguments HYDROL7A.94
! Scalar arguments with intent(IN) : HYDROL7A.95
INTEGER HYDROL7A.96
& LICE_PTS ! IN Number of land ice points. HYDROL7A.97
&,NPNTS ! IN Number of gridpoints. HYDROL7A.98
&,NSHYD ! IN Number of soil moisture levels. HYDROL7A.99
&,SOIL_PTS ! IN Number of soil points. HYDROL7A.100
&,NTYPE ! IN Number of tiles. HYDROL7A.101
HYDROL7A.102
REAL HYDROL7A.103
& TIMESTEP ! IN Model timestep (s). HYDROL7A.104
HYDROL7A.105
LOGICAL LTIMER ! Logical switch for TIMER diags HYDROL7A.106
HYDROL7A.107
LOGICAL HYDROL7A.108
& STF_HF_SNOW_MELT ! IN Stash flag for snowmelt heat flux. HYDROL7A.109
&,STF_SUB_SURF_ROFF ! IN Stash flag for sub-surface runoff. HYDROL7A.110
&,L_SNOW_ALBEDO ! IN Flag for prognostic snow albedo HYDROL7A.111
HYDROL7A.112
HYDROL7A.113
! Array arguments with intent(IN) : HYDROL7A.114
INTEGER HYDROL7A.115
& LICE_INDEX(NPNTS) ! IN Array of land ice points. HYDROL7A.116
&,SOIL_INDEX(NPNTS) ! IN Array of soil points. HYDROL7A.117
&,TILE_PTS(NTYPE) ! IN Number of tile points. HYDROL7A.118
&,TILE_INDEX(NPNTS,NTYPE) HYDROL7A.119
! ! IN Index of tile points. HYDROL7A.120
HYDROL7A.121
REAL HYDROL7A.122
& B(NPNTS) ! IN Clapp-Hornberger exponent. HYDROL7A.123
&,CAN_CPY(NPNTS,NTYPE-1) HYDROL7A.124
! ! IN Canopy/surface capacity of HYDROL7A.125
! ! snow-free land tiles (kg/m2). HYDROL7A.126
&,CON_RAIN(NPNTS) ! IN Convective rain (kg/m2/s). HYDROL7A.127
&,CON_SNOW(NPNTS) ! IN Convective snowfall (kg/m2/s). HYDROL7A.128
&,E_CANOPY(NPNTS,NTYPE-1) HYDROL7A.129
! ! IN Canopy evaporation from snow-free HYDROL7A.130
! ! land tiles (kg/m2/s). HYDROL7A.131
&,EXT(NPNTS,NSHYD) ! IN Extraction of water from each soil HYDROL7A.132
! ! layer (kg/m2/s). HYDROL7A.133
&,HCAP(NPNTS) ! IN Soil heat capacity (J/K/m3). HYDROL7A.134
&,HCON(NPNTS) ! IN Soil thermal conductivity (W/m/K). HYDROL7A.135
&,LS_RAIN(NPNTS) ! IN Large-scale rain (kg/m2/s). HYDROL7A.136
&,LS_SNOW(NPNTS) ! IN Large-scale snowfall (kg/m2/s). HYDROL7A.137
&,SATCON(NPNTS) ! IN Saturated hydraulic conductivity HYDROL7A.138
! ! (kg/m2/s). HYDROL7A.139
&,SATHH(NPNTS) ! IN Saturated soil water pressure (m). HYDROL7A.140
&,SNOWSUB(NPNTS) ! IN Sublimation of lying snow (kg/m2/s). HYDROL7A.141
&,SOIL_SURF_HTF(NPNTS)! IN Net downward surface heat flux (W/m2) HYDROL7A.142
! ! - snow-free land. HYDROL7A.143
&,SNOW_SURF_HTF(NPNTS)! IN Net downward surface heat flux (W/m2) HYDROL7A.144
! ! - snow. HYDROL7A.145
&,TSTAR_SNOW(NPNTS) ! IN Surface temperature (K). HYDROL7A.146
&,FRAC(NPNTS,NTYPE) ! IN Tile fractions. HYDROL7A.147
&,SNOW_FRAC(NPNTS) ! IN Fraction of gridbox with snow cover. HYDROL7A.148
&,V_SAT(NPNTS) ! IN Volumetric soil moisture HYDROL7A.149
! ! concentration at saturation HYDROL7A.150
! ! (m3 H2O/m3 soil). HYDROL7A.151
&,V_WILT(NPNTS) ! IN Volumetric soil moisture HYDROL7A.152
! ! concentration below which HYDROL7A.153
! ! stomata close (m3 H2O/m3 soil). HYDROL7A.154
! HYDROL7A.155
! Array arguments with intent(INOUT) : HYDROL7A.156
! HYDROL7A.157
REAL HYDROL7A.158
& CAN_WCNT(NPNTS,NTYPE-1) HYDROL7A.159
! ! INOUT Canopy water content for snow-free HYDROL7A.160
! ! land tiles (kg/m2). HYDROL7A.161
&,HF_SNOW_MELT(NPNTS) ! INOUT Total snowmelt heat flux (W/m2). HYDROL7A.162
&,RGRAIN(NPNTS) ! INOUT Snow grain size (microns). HYDROL7A.163
&,SMCL(NPNTS,NSHYD) ! INOUT Soil moisture content of each HYDROL7A.164
! ! layer (kg/m2). HYDROL7A.165
&,SNOW_DEP(NPNTS) ! INOUT Snowmass (kg/m2). HYDROL7A.166
&,STHF(NPNTS,NSHYD) ! INOUT Frozen soil moisture content of HYDROL7A.167
! ! each layer as a fraction of HYDROL7A.168
! ! saturation. HYDROL7A.169
&,STHU(NPNTS,NSHYD) ! INOUT Unfrozen soil moisture content of HYDROL7A.170
! ! each layer as a fraction of HYDROL7A.171
! ! saturation. HYDROL7A.172
&,TSOIL(NPNTS,NSHYD) ! INOUT Sub-surface temperatures (K). HYDROL7A.173
&,TSNOW(NPNTS) ! INOUT Snow layer temperature (K). HYDROL7A.174
HYDROL7A.175
HYDROL7A.176
! Array arguments with intent(OUT) : HYDROL7A.177
REAL HYDROL7A.178
& CAN_WCNT_GB(NPNTS) ! OUT Gridbox canopy water content (kg/m2). HYDROL7A.179
&,INFIL(NPNTS) ! OUT Maximum surface infiltration HYDROL7A.180
! ! rate (kg/m2/s). HYDROL7A.181
&,SMC(NPNTS) ! OUT Soil moisture in the top metre (kg/m2) HYDROL7A.182
&,SNOW_MELT(NPNTS) ! OUT Snowmelt (kg/m2/s). HYDROL7A.183
&,SNOMLT_SUB_HTF(NPNTS)! OUT Sub-surface snowmelt heat HYDROL7A.184
! ! flux (W/m2). HYDROL7A.185
&,SUB_SURF_ROFF(NPNTS) ! OUT Sub-surface runoff (kg/m2/s). HYDROL7A.186
&,SURF_ROFF(NPNTS) ! OUT Surface runoff (kg/m2/s). HYDROL7A.187
&,TOT_TFALL(NPNTS) ! OUT Total throughfall (kg/m2/s). HYDROL7A.188
HYDROL7A.189
! Local scalars: HYDROL7A.190
INTEGER HYDROL7A.191
& I,J ! WORK Loop counters. HYDROL7A.192
&,N ! WORK Tile loop counter. HYDROL7A.193
HYDROL7A.194
! Local arrays: HYDROL7A.195
HYDROL7A.196
REAL HYDROL7A.197
& DSMC_DT(NPNTS) ! WORK Rate of change of soil moisture HYDROL7A.198
! ! due to water falling onto the HYDROL7A.199
! ! surface after surface runoff HYDROL7A.200
! ! (kg/m2/s). HYDROL7A.201
&,HCONS(NPNTS) ! WORK Soil surface layer thermal HYDROL7A.202
! ! conductivity including the effects HYDROL7A.203
! ! of water and ice (W/m/K). HYDROL7A.204
&,INFIL_TILE(NPNTS,NTYPE) HYDROL7A.205
! ! WORK Maximum surface infiltration HYDROL7A.206
! ! rate for tiles (kg/m2/s). HYDROL7A.207
&,SNOW_SOIL_HTF(NPNTS) ! WORK Heat flux from snow to soil (W/m2). HYDROL7A.208
&,W_FLUX(NPNTS,0:NSHYD)! WORK Fluxes of water between layers HYDROL7A.209
! ! (kg/m2/s). HYDROL7A.210
HYDROL7A.211
! Tile parameters : HYDROL7A.212
*CALL CINFIL
HYDROL7A.213
HYDROL7A.214
! Function & Subroutine calls: HYDROL7A.215
EXTERNAL HYDROL7A.216
& HEAT_CON,SFSNOW,INFILT,SURF_HYD,SOIL_HYD,SOIL_HTC,ICE_HTC,SOILMC HYDROL7A.217
HYDROL7A.218
! End of header-------------------------------------------------------- HYDROL7A.219
HYDROL7A.220
IF (LTIMER) THEN HYDROL7A.221
CALL TIMER
('HYDROL ',103) GPB8F405.154
ENDIF HYDROL7A.223
HYDROL7A.224
!---------------------------------------------------------------------- HYDROL7A.225
! Calculate the thermal conductivity of the top soil layer HYDROL7A.226
!---------------------------------------------------------------------- HYDROL7A.227
CALL HEAT_CON
(NPNTS,HCON,STHU,STHF,V_SAT,HCONS,LTIMER) HYDROL7A.228
HYDROL7A.229
!---------------------------------------------------------------------- HYDROL7A.230
! Calculate the subsurface snowmelt and update the snow mass HYDROL7A.231
!---------------------------------------------------------------------- HYDROL7A.232
CALL SFSNOW
(NPNTS,SOIL_PTS,SOIL_INDEX, HYDROL7A.233
& CON_SNOW,LS_SNOW,DZSOIL(1),HCONS,SNOW_FRAC, HYDROL7A.234
& SNOWSUB,SNOW_SURF_HTF,TSOIL,TSTAR_SNOW,TIMESTEP, HYDROL7A.235
& SNOW_DEP,RGRAIN,L_SNOW_ALBEDO,SNOW_MELT,TSNOW, HYDROL7A.236
& SNOMLT_SUB_HTF,SNOW_SOIL_HTF,STF_HF_SNOW_MELT,LTIMER) HYDROL7A.237
HYDROL7A.238
!---------------------------------------------------------------------- HYDROL7A.239
! Update the total snowmelt heat flux HYDROL7A.240
!---------------------------------------------------------------------- HYDROL7A.241
IF (STF_HF_SNOW_MELT) THEN HYDROL7A.242
DO I=1,NPNTS HYDROL7A.243
HF_SNOW_MELT(I)=LF*SNOW_MELT(I) HYDROL7A.244
ENDDO HYDROL7A.245
ENDIF HYDROL7A.246
HYDROL7A.247
!---------------------------------------------------------------------- HYDROL7A.248
! Calculate the maximum surface infiltration rate HYDROL7A.249
!---------------------------------------------------------------------- HYDROL7A.250
DO N=1,NTYPE HYDROL7A.251
DO J=1,TILE_PTS(N) HYDROL7A.252
I = TILE_INDEX(J,N) HYDROL7A.253
INFIL_TILE(I,N) = INFIL_FAC(N)*SATCON(I) HYDROL7A.254
ENDDO HYDROL7A.255
ENDDO HYDROL7A.256
HYDROL7A.257
!----------------------------------------------------------------------- HYDROL7A.258
! Calculate throughfall and surface runoff, and update the canopy water HYDROL7A.259
! content HYDROL7A.260
!----------------------------------------------------------------------- HYDROL7A.261
CALL SURF_HYD
(NPNTS,NTYPE,TILE_PTS,TILE_INDEX, HYDROL7A.262
& LICE_PTS,LICE_INDEX, HYDROL7A.263
& CAN_CPY,E_CANOPY,FRAC,INFIL_TILE,CON_RAIN,LS_RAIN, HYDROL7A.264
& SNOW_FRAC,SNOW_MELT,TIMESTEP, HYDROL7A.265
& CAN_WCNT,CAN_WCNT_GB,DSMC_DT,SURF_ROFF,TOT_TFALL) HYDROL7A.266
HYDROL7A.267
!----------------------------------------------------------------------- HYDROL7A.268
! Update the layer soil moisture contents and calculate the HYDROL7A.269
! gravitational drainage. HYDROL7A.270
!----------------------------------------------------------------------- HYDROL7A.271
CALL SOIL_HYD
(NPNTS,NSHYD,SOIL_PTS,SOIL_INDEX,B,DZSOIL, HYDROL7A.272
& EXT,DSMC_DT,SATCON,SATHH,TIMESTEP,V_SAT, HYDROL7A.273
& SUB_SURF_ROFF,SMCL,STHU,W_FLUX, HYDROL7A.274
& STF_SUB_SURF_ROFF,LTIMER) HYDROL7A.275
HYDROL7A.276
!----------------------------------------------------------------------- HYDROL7A.277
! Update the soil temperatures and the frozen moisture fractions HYDROL7A.278
!----------------------------------------------------------------------- HYDROL7A.279
IF (SOIL_PTS.NE.0) THEN HYDROL7A.280
CALL SOIL_HTC
(NPNTS,NSHYD,SOIL_PTS,SOIL_INDEX,B, HYDROL7A.281
& DZSOIL,HCAP,HCON,SATHH,SNOW_SOIL_HTF, ARE1F405.40
& SOIL_SURF_HTF,TIMESTEP,V_SAT, HYDROL7A.283
& W_FLUX,SMCL,STHU,STHF,TSOIL,LTIMER) HYDROL7A.284
ENDIF HYDROL7A.285
HYDROL7A.286
!----------------------------------------------------------------------- HYDROL7A.287
! Update the sub-surface temperatures for land ice HYDROL7A.288
!----------------------------------------------------------------------- HYDROL7A.289
IF (LICE_PTS.NE.0) THEN HYDROL7A.290
CALL ICE_HTC
(NPNTS,NSHYD,LICE_PTS,LICE_INDEX,DZSOIL, HYDROL7A.291
& SNOW_SURF_HTF,TIMESTEP, HYDROL7A.292
& TSOIL,LTIMER) HYDROL7A.293
! Copy surface layer temperature to TSNOW at ice points HYDROL7A.294
DO J=1,LICE_PTS HYDROL7A.295
I=LICE_INDEX(J) HYDROL7A.296
TSNOW(I)=TSOIL(I,1) HYDROL7A.297
ENDDO HYDROL7A.298
ENDIF HYDROL7A.299
HYDROL7A.300
!----------------------------------------------------------------------- HYDROL7A.301
! Diagnose the soil moisture in the top metre. HYDROL7A.302
!----------------------------------------------------------------------- HYDROL7A.303
CALL SOILMC
( NPNTS,NSHYD,SOIL_PTS,SOIL_INDEX, HYDROL7A.304
& DZSOIL,STHU,V_SAT,V_WILT,SMC ) HYDROL7A.305
HYDROL7A.306
IF (LTIMER) THEN HYDROL7A.307
CALL TIMER
('HYDROL ',104) GPB8F405.155
ENDIF HYDROL7A.309
HYDROL7A.310
RETURN HYDROL7A.311
END HYDROL7A.312
*ENDIF HYDROL7A.313