*IF DEF,A03_6A SFREST6A.2
C *****************************COPYRIGHT****************************** SFREST6A.3
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. SFREST6A.4
C SFREST6A.5
C Use, duplication or disclosure of this code is subject to the SFREST6A.6
C restrictions as set forth in the contract. SFREST6A.7
C SFREST6A.8
C Meteorological Office SFREST6A.9
C London Road SFREST6A.10
C BRACKNELL SFREST6A.11
C Berkshire UK SFREST6A.12
C RG12 2SZ SFREST6A.13
C SFREST6A.14
C If no contract has been raised with this copy of the code, the use, SFREST6A.15
C duplication or disclosure of it is strictly prohibited. Permission SFREST6A.16
C to do so must first be obtained in writing from the Head of Numerical SFREST6A.17
C Modelling at the above address. SFREST6A.18
C ******************************COPYRIGHT****************************** SFREST6A.19
!!! SUBROUTINE SF_RESIST---------------------------------------------- SFREST6A.20
!!! SFREST6A.21
!!! Purpose: Calculate surface resistances for surface layer SFREST6A.22
!!! SFREST6A.23
!!! SDJ <- programmer of some or all of previous code changes SFREST6A.24
!!! SFREST6A.25
C Modification History: AJC1F405.57
C Version Date Change AJC1F405.58
C 4.5 Jul. 98 Kill the IBM specific lines (JCThil) AJC1F405.59
!!!-------------------------------------------------------------------- SFREST6A.26
SFREST6A.27
! Arguaments ------------------------------------------------------- SFREST6A.28
SUBROUTINE SF_RESIST ( 6,6SFREST6A.29
& P_POINTS,LAND_PTS,P_FIELD,LAND_FIELD,LAND_MASK,INT_STOM,P1,LAND1, SFREST6A.30
& LAND_INDEX, SFREST6A.32
& ROOTD,SMVCCL,SMVCWT,SMC,V_SOIL,VFRAC,CANOPY,CATCH,DQ, SFREST6A.34
& EPDT,LYING_SNOW,GC,RESIST,CHV,PSIS,FRACA, SFREST6A.35
& RESFS,F_SE,RESFT,LTIMER SFREST6A.36
& ) SFREST6A.37
IMPLICIT NONE SFREST6A.38
SFREST6A.39
SFREST6A.40
INTEGER ! Variables defining grid. SFREST6A.41
& P_POINTS ! IN Number of P-grid points to be processed SFREST6A.42
&,LAND_PTS ! IN Number of land points to be processed. SFREST6A.43
&,P1 ! IN First P-point to be processed. SFREST6A.44
&,LAND1 ! IN First land point to be processed. SFREST6A.45
&,P_FIELD ! IN Total number of P-grid points. SFREST6A.46
&,LAND_FIELD ! IN Total number of land points. SFREST6A.47
SFREST6A.48
&,LAND_INDEX(LAND_FIELD)! IN Index for compressed land point array; SFREST6A.50
! i'th element holds position in the FULL SFREST6A.51
! field of the ith land pt to be SFREST6A.52
! processed SFREST6A.53
LOGICAL SFREST6A.55
& INT_STOM ! IN T for interactive stomatal resistance. SFREST6A.56
&,LTIMER SFREST6A.57
SFREST6A.58
REAL SFREST6A.59
& CANOPY(LAND_FIELD) ! IN Surface water (kg per sq metre). F642. SFREST6A.60
&,CATCH(LAND_FIELD) ! IN Surface capacity (max. surface water) SFREST6A.61
! (kg per sq metre). F6416. SFREST6A.62
&,CHV(P_FIELD) ! IN Transport coefficient for heat and SFREST6A.63
! moisture transport SFREST6A.64
&,DQ(P_FIELD) ! IN Sp humidity difference between surface SFREST6A.65
! and lowest atmospheric level (Q1 - Q*). SFREST6A.66
! Holds value over sea-ice where SFREST6A.67
! ICE_FRACT>0 i.e. Leads contribution not SFREST6A.68
! included. SFREST6A.69
&,EPDT(P_FIELD) ! IN "Potential" Evaporation * Timestep. SFREST6A.70
! Dummy variable for first call to routine SFREST6A.71
&,GC(LAND_FIELD) ! IN Interactive canopy conductance SFREST6A.72
&,LYING_SNOW(P_FIELD) ! IN Lying snow amount (kg per sq metre). SFREST6A.73
&,RESIST(LAND_FIELD) ! IN "Stomatal" resistance to evaporation SFREST6A.74
! (seconds per metre). F6415. SFREST6A.75
&,ROOTD(LAND_FIELD) ! IN "Root depth" (metres). F6412. SFREST6A.76
&,SMC(LAND_FIELD) ! IN Soil moisture content (kg per sq m). SFREST6A.77
! F621. SFREST6A.78
&,SMVCCL(LAND_FIELD) ! IN Critical volumetric SMC (cubic metres SFREST6A.79
! per cubic metre of soil). F6232. SFREST6A.80
&,SMVCWT(LAND_FIELD) ! IN Volumetric wilting point (cubic m of SFREST6A.81
! water per cubic m of soil). F6231. SFREST6A.82
! Note: (SMVC!! - SMVCWT) is the critical SFREST6A.83
! volumetric available soil SFREST6A.84
&,V_SOIL(LAND_FIELD) ! IN Volumetric soil moisture concentration SFREST6A.85
! in the top soil layer (m3 H2O/m3 soil). SFREST6A.86
&,VFRAC(LAND_FIELD) ! IN Vegetated fraction. SFREST6A.87
SFREST6A.88
LOGICAL SFREST6A.89
& LAND_MASK(P_FIELD) ! IN .TRUE. for land; .FALSE. elsewhere. F60. SFREST6A.90
SFREST6A.91
! Output variables. SFREST6A.92
SFREST6A.93
REAL SFREST6A.94
& FRACA(P_FIELD) ! OUT Fraction of surface moisture flux with SFREST6A.95
! only aerodynamic resistance. SFREST6A.96
&,PSIS(P_FIELD) ! Soil moisture availability factor. SFREST6A.97
&,RESFS(P_FIELD) ! OUT Combined soil, stomatal and aerodynamic SFREST6A.98
! resistance factor = PSIS/(1+RS/RA) for SFREST6A.99
! fraction (1-FRACA) SFREST6A.100
&,F_SE(P_FIELD) ! OUT Fraction of the evapotranspiration SFREST6A.101
! which is bare soil evaporation. SFREST6A.102
&,RESFT(P_FIELD) ! OUT Total resistance factor SFREST6A.103
! FRACA+(1-FRACA)*RESFS. SFREST6A.104
SFREST6A.105
! Define local storage. SFREST6A.106
SFREST6A.107
! (a) Workspace. SFREST6A.108
SFREST6A.109
*CALL C_DENSTY
SFREST6A.110
*CALL SOIL_THICK
SFREST6A.111
*CALL C_MDI
SFREST6A.112
SFREST6A.113
SFREST6A.114
! Workspace -------------------------------------------------------- SFREST6A.115
INTEGER SFREST6A.116
& I ! Loop counter (horizontal field index). SFREST6A.117
&,L ! Loop counter (land field index). SFREST6A.118
SFREST6A.119
REAL SFREST6A.120
& FSMC ! Soil moisture factor for bare soil evaporation. SFREST6A.121
&,SMCRIT ! "Critical" available SMC in kg per sq m. SFREST6A.122
SFREST6A.123
SFREST6A.124
EXTERNAL TIMER SFREST6A.125
SFREST6A.126
IF (LTIMER) THEN SFREST6A.127
CALL TIMER
('SFRESIST',3) SFREST6A.128
ENDIF SFREST6A.129
SFREST6A.130
!----------------------------------------------------------------------- SFREST6A.131
!! 1 Evaporation over land surfaces without snow is limited by SFREST6A.132
!! soil moisture availability and stomatal resistance. SFREST6A.133
!! Set FRACA (= fA in the documentation) according to P243.68, SFREST6A.134
!! PSIS according to P243.65, and RESFS (= fS) according to P243.75 SFREST6A.135
!! and P243.61, using neutral-stability value of CH (as explained SFREST6A.136
!! in section (v) of the P243 documentation). SFREST6A.137
!----------------------------------------------------------------------- SFREST6A.138
SFREST6A.139
DO I=P1,P1+P_POINTS-1 SFREST6A.140
SFREST6A.141
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFREST6A.142
!! 1.1 Set parameters (workspace) to values relevant for non-land SFREST6A.143
!! points. Only aerodynamic resistance applies. SFREST6A.144
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFREST6A.145
SFREST6A.146
FRACA(I) = 1.0 SFREST6A.147
PSIS(I) = 0.0 SFREST6A.148
RESFT(I) = 1.0 SFREST6A.149
RESFS(I) = 0.0 SFREST6A.150
ENDDO SFREST6A.152
SFREST6A.154
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFREST6A.155
!! 1.2 Over-write workspace for other points. SFREST6A.156
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFREST6A.157
SFREST6A.158
CDIR$ IVDEP SFREST6A.163
! Fujitsu vectorization directive GRB0F405.505
!OCL NOVREC GRB0F405.506
DO L=LAND1,LAND1+LAND_PTS-1 SFREST6A.164
I = LAND_INDEX(L) SFREST6A.165
SFREST6A.167
!----------------------------------------------------------------------- SFREST6A.168
! If the interactive stomatal resistance is being used, calculate the SFREST6A.169
! soil water factor for bare soil evaporation SFREST6A.170
!----------------------------------------------------------------------- SFREST6A.171
SFREST6A.172
IF (INT_STOM) THEN SFREST6A.173
SFREST6A.174
IF (V_SOIL(L) .GT. SMVCCL(L)) THEN SFREST6A.175
FSMC = 1.0 SFREST6A.176
ELSEIF (V_SOIL(L) .LE. SMVCWT(L)) THEN SFREST6A.177
FSMC = 0.0 SFREST6A.178
ELSE SFREST6A.179
FSMC = (V_SOIL(L) - SMVCWT(L)) SFREST6A.180
& / (SMVCCL(L) - SMVCWT(L)) SFREST6A.181
ENDIF SFREST6A.182
SFREST6A.183
ELSE SFREST6A.184
! Calculate the soil moisture availability factor, PSIS. SFREST6A.185
SFREST6A.186
SMCRIT = RHO_WATER * ROOTD(L) * (SMVCCL(L)-SMVCWT(L)) SFREST6A.187
! ... P243.66 SFREST6A.188
SFREST6A.189
PSIS(I) = 0.0 SFREST6A.190
IF (SMC(L).GE.SMCRIT .AND. SMCRIT.GT.0.0) SFREST6A.191
& PSIS(I) = 1.0 SFREST6A.192
IF (SMC(L).LT.SMCRIT .AND. SMC(L).GT.0.0) SFREST6A.193
& PSIS(I) = SMC(L)/SMCRIT SFREST6A.194
SFREST6A.195
SFREST6A.196
ENDIF ! end of INT_STOM block SFREST6A.197
SFREST6A.198
! For snow-covered land or land points with negative moisture flux SFREST6A.199
! set the fraction of the flux with only aerodynamic resistance to 1 SFREST6A.200
! (no surface/stomatal resistance to evap from snow or condensation). SFREST6A.201
SFREST6A.202
FRACA(I) = 1.0 SFREST6A.203
SFREST6A.204
! When there is positive moisture flux from snow-free land, calculate SFREST6A.205
! the fraction of the flux from the "canopy". SFREST6A.206
SFREST6A.207
IF (DQ(I).LT.0.0 .AND. LYING_SNOW(I).LE.0.0) FRACA(I) = 0.0 SFREST6A.208
IF (DQ(I).LT.0.0.AND.LYING_SNOW(I).LE.0.0.AND.CATCH(L).GT.0.0) SFREST6A.209
& FRACA(I) = CANOPY(L)/(EPDT(I) + CATCH(L)) SFREST6A.210
SFREST6A.211
SFREST6A.212
!----------------------------------------------------------------------- SFREST6A.213
! If the interactive stomatal resistance is being used calculate SFREST6A.214
! separate resistance factors for bare soil evaporation and SFREST6A.215
! transpiration. Assume a surface resistance of 100 s/m for bare soil. SFREST6A.216
!----------------------------------------------------------------------- SFREST6A.217
SFREST6A.218
IF (INT_STOM) THEN ! Interactive Canopy Resistance SFREST6A.219
SFREST6A.220
!----------------------------------------------------------------------- SFREST6A.221
! Set resistance and moisture availability factors to zero for land ice SFREST6A.222
!----------------------------------------------------------------------- SFREST6A.223
IF (GC(L).EQ.RMDI) THEN ! land-ice points SFREST6A.224
SFREST6A.225
PSIS(I) = 0.0 SFREST6A.226
RESFS(I) = 0.0 SFREST6A.227
F_SE(I) = 0.0 SFREST6A.228
SFREST6A.229
ELSE SFREST6A.230
SFREST6A.231
!----------------------------------------------------------------------- SFREST6A.232
! If the interactive stomatal resistance is being used set the moisture SFREST6A.233
! availability factor to one, since moisture stress is already taken SFREST6A.234
! account of in SF_STOM (Peter Cox 21/11/95). SFREST6A.235
!----------------------------------------------------------------------- SFREST6A.236
SFREST6A.237
PSIS(I) = 1.0 SFREST6A.238
RESFS(I) = VFRAC(L) * GC(L) / ( GC(L) + CHV(I)) SFREST6A.239
& + (1 - VFRAC(L)) * FSMC / (1.0 + CHV(I)*100.0) SFREST6A.240
SFREST6A.241
F_SE(I) = 0.0 SFREST6A.242
SFREST6A.243
IF (RESFS(I) .GT. 0.0) THEN SFREST6A.244
F_SE(I) = (1 - VFRAC(L)) * FSMC SFREST6A.245
& / (RESFS(I)*(1.0 + CHV(I)*100.0)) SFREST6A.246
ENDIF SFREST6A.247
SFREST6A.248
ENDIF SFREST6A.249
SFREST6A.250
ELSE SFREST6A.251
SFREST6A.252
RESFS(I) = PSIS(I) / ( 1.0 + CHV(I)*RESIST(L) ) SFREST6A.253
F_SE(I)=0 SFREST6A.254
SFREST6A.255
ENDIF SFREST6A.256
SFREST6A.257
RESFT(I) = FRACA(I) + (1.0 - FRACA(I)) * RESFS(I) SFREST6A.258
SFREST6A.259
SFREST6A.260
ENDDO ! Evaporation over land points only, section 3.4.2 SFREST6A.265
SFREST6A.267
IF (LTIMER) THEN SFREST6A.268
CALL TIMER
('SFRESIST',4) SFREST6A.269
ENDIF SFREST6A.270
SFREST6A.271
RETURN SFREST6A.272
END SFREST6A.273
*ENDIF SFREST6A.274