*IF DEF,A03_5A SFRUGH5A.2
C *****************************COPYRIGHT****************************** SFRUGH5A.3
C (c) CROWN COPYRIGHT 1996, METEOROLOGICAL OFFICE, All Rights Reserved. SFRUGH5A.4
C SFRUGH5A.5
C Use, duplication or disclosure of this code is subject to the SFRUGH5A.6
C restrictions as set forth in the contract. SFRUGH5A.7
C SFRUGH5A.8
C Meteorological Office SFRUGH5A.9
C London Road SFRUGH5A.10
C BRACKNELL SFRUGH5A.11
C Berkshire UK SFRUGH5A.12
C RG12 2SZ SFRUGH5A.13
C SFRUGH5A.14
C If no contract has been raised with this copy of the code, the use, SFRUGH5A.15
C duplication or disclosure of it is strictly prohibited. Permission SFRUGH5A.16
C to do so must first be obtained in writing from the Head of Numerical SFRUGH5A.17
C Modelling at the above address. SFRUGH5A.18
C ******************************COPYRIGHT****************************** SFRUGH5A.19
C*LL SUBROUTINE SF_ROUGH----------------------------------------------- SFRUGH5A.20
CLL SFRUGH5A.21
CLL Purpose: Calculate roughness lengths, blending height and wind SFRUGH5A.22
CLL profile factor SFRUGH5A.23
CLL SFRUGH5A.24
C Modification History: AJC1F405.50
C Version Date Change AJC1F405.51
C 4.5 Jul. 98 Kill the IBM specific lines (JCThil) AJC1F405.52
CLL SFRUGH5A.25
CLLEND------------------------------------------------------------------ SFRUGH5A.26
C* SFRUGH5A.27
C*L Arguaments -------------------------------------------------------- SFRUGH5A.28
SUBROUTINE SF_ROUGH ( 6,4SFRUGH5A.29
& P_POINTS,LAND_PTS,LAND_MASK, SFRUGH5A.30
& P1,LAND_INDEX, SFRUGH5A.32
& L_Z0_OROG,Z1,Z0MSEA,ICE_FRACT, SFRUGH5A.34
& LYING_SNOW,Z0V,SIL_OROG,HO2R2_OROG,RIB,Z0M_EFF,Z0M,Z0H, SFRUGH5A.35
& WIND_PROFILE_FACTOR,H_BLEND,CD_LEAD,Z0HS,Z0F,Z0FS, SFRUGH5A.36
& LTIMER) SFRUGH5A.37
SFRUGH5A.38
IMPLICIT NONE SFRUGH5A.39
C SFRUGH5A.40
INTEGER ! Variables defining grid. SFRUGH5A.41
& P_POINTS ! IN Number of P-grid points to be processed. SFRUGH5A.42
&,LAND_PTS ! IN Number of land points to be processed. SFRUGH5A.43
C SFRUGH5A.44
&,LAND_INDEX(LAND_PTS)! IN Index for compressed land point array; SFRUGH5A.46
C ! i'th element holds position in the FULL SFRUGH5A.47
C ! field of the ith land pt to be SFRUGH5A.48
C ! processed SFRUGH5A.49
&,P1 ! IN First P-point to be processed. SFRUGH5A.50
LOGICAL SFRUGH5A.52
& LAND_MASK(P_POINTS) ! IN .TRUE. for land; .FALSE. elsewhere. F60. SFRUGH5A.53
&,L_Z0_OROG ! IN .TRUE. to use orographic roughness. SFRUGH5A.54
C SFRUGH5A.55
REAL SFRUGH5A.56
& HO2R2_OROG(LAND_PTS)! IN Peak to trough height of unresolved SFRUGH5A.57
C ! orography devided by 2SQRT(2) (m). SFRUGH5A.58
&,ICE_FRACT(P_POINTS) ! IN Fraction of gridbox which is sea-ice. SFRUGH5A.59
&,LYING_SNOW(P_POINTS)! IN Lying snow amount (kg per sq metre). SFRUGH5A.60
&,RIB(P_POINTS) ! IN Bulk Richardson number for lowest layer. SFRUGH5A.61
&,SIL_OROG(LAND_PTS) ! IN Silhouette area of unresolved orography SFRUGH5A.62
C ! per unit horizontal area SFRUGH5A.63
&,Z0V(P_POINTS) ! IN Vegetative roughness length (m). F6418. SFRUGH5A.64
&,Z1(P_POINTS) ! IN Height of lowest atmospheric level (m). SFRUGH5A.65
C SFRUGH5A.66
C Modified (INOUT) variables. SFRUGH5A.67
C SFRUGH5A.68
REAL SFRUGH5A.69
& Z0MSEA(P_POINTS) ! INOUT Sea-surface roughness length for SFRUGH5A.70
C ! momentum (m). F617. SFRUGH5A.71
C SFRUGH5A.72
C Output variables. SFRUGH5A.73
C SFRUGH5A.74
REAL SFRUGH5A.75
& CD_LEAD(P_POINTS) ! Bulk transfer coefficient for momentum SFRUGH5A.76
C ! over sea-ice leads.Missing data over non SFRUGH5A.77
C ! sea-ice points.(Temporary store for Z0MIZ) SFRUGH5A.78
&,H_BLEND(P_POINTS) ! OUT Blending height SFRUGH5A.79
&,WIND_PROFILE_FACTOR(P_POINTS) SFRUGH5A.80
C ! For transforming effective surface transfer SFRUGH5A.81
C ! coefficients to those excluding form drag. SFRUGH5A.82
&,Z0M_EFF(P_POINTS) ! OUT Effective roughness length for momentum SFRUGH5A.83
&,Z0F(P_POINTS) ! Roughness length for free-convective heat SFRUGH5A.84
C ! and moisture transport. SFRUGH5A.85
&,Z0H(P_POINTS) ! OUT Roughness length for heat and moisture SFRUGH5A.86
&,Z0M(P_POINTS) ! OUT Roughness length for momentum (m). SFRUGH5A.87
&,Z0FS(P_POINTS) ! Roughness length for free-convective heat SFRUGH5A.88
C ! and moisture transport over sea. SFRUGH5A.89
&,Z0HS(P_POINTS) ! Roughness length for heat and moisture SFRUGH5A.90
C ! transport over sea. SFRUGH5A.91
SFRUGH5A.92
LOGICAL LTIMER ! Logical switch for TIMER diags SFRUGH5A.93
C SFRUGH5A.94
C Work Variables SFRUGH5A.95
C SFRUGH5A.96
INTEGER SFRUGH5A.97
& I ! Loop counter SFRUGH5A.98
&,L ! Another loop counter - this time for land points SFRUGH5A.99
SFRUGH5A.100
REAL SFRUGH5A.101
& RIB_FN ! Interpolation coefficient for 0 < RIB < RI_CRIT SFRUGH5A.102
&,ZETA1 ! Work space SFRUGH5A.103
&,ZETA2 ! More work space SFRUGH5A.104
&,ZETA3 ! Even more work space SFRUGH5A.105
&,Z0 ! yet more workspace SFRUGH5A.106
C SFRUGH5A.107
C Common parameters SFRUGH5A.108
SFRUGH5A.109
*CALL C_MDI
SFRUGH5A.110
*CALL C_VKMAN
SFRUGH5A.111
*CALL C_ROUGH
SFRUGH5A.112
*CALL C_SURF
SFRUGH5A.113
SFRUGH5A.114
C Local parameters SFRUGH5A.115
SFRUGH5A.116
REAL H_BLEND_MIN,H_BLEND_MAX SFRUGH5A.117
PARAMETER ( SFRUGH5A.118
& H_BLEND_MIN=0.0 ! Minimun value of blending height SFRUGH5A.119
&,H_BLEND_MAX=1000.0 ! Maximum value of blending height SFRUGH5A.120
& ) SFRUGH5A.121
SFRUGH5A.122
IF (LTIMER) THEN SFRUGH5A.123
CALL TIMER
('SFROUGH ',3) SFRUGH5A.124
ENDIF SFRUGH5A.125
C----------------------------------------------------------------------- SFRUGH5A.126
CL 1 Fix roughness lengths for the various surface types. SFRUGH5A.127
C----------------------------------------------------------------------- SFRUGH5A.128
DO I = 1,P_POINTS SFRUGH5A.129
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFRUGH5A.130
CL 1.1 Liquid sea. Overwrite sea-ice and land in 3.1.2, 3.1.3. SFRUGH5A.131
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFRUGH5A.132
Z0M(I) = Z0MSEA(I) ! P243.B5 SFRUGH5A.133
Z0H(I) = Z0HSEA ! " SFRUGH5A.134
Z0M_EFF(I) = Z0MSEA(I) SFRUGH5A.135
Z0F(I) = Z0FSEA ! " SFRUGH5A.136
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFRUGH5A.137
CL 1.2 Sea ice: Z0MIZ set on all points for input to FCDCH routine SFRUGH5A.138
CL in CD_MIZ,CH_MIZ calculations. Similarily Z0HSEA,Z0FSEA for SFRUGH5A.139
CL CD_LEAD,CH_LEAD calculations. Z0SICE for CD,CH over sea-ice. SFRUGH5A.140
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFRUGH5A.141
CD_LEAD(I) = Z0MIZ SFRUGH5A.142
Z0HS(I) = Z0HSEA SFRUGH5A.143
Z0FS(I) = Z0FSEA SFRUGH5A.144
IF (ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I)) THEN SFRUGH5A.145
Z0M(I) = Z0SICE ! P243.B4 SFRUGH5A.146
Z0H(I) = Z0SICE ! " SFRUGH5A.147
Z0M_EFF(I) = Z0SICE SFRUGH5A.148
Z0F(I) = Z0SICE ! " SFRUGH5A.149
ENDIF SFRUGH5A.150
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFRUGH5A.151
CL 1.2a Specify blending height for all points. Set to minimum value SFRUGH5A.152
CL so that LAMBDA_EFF = LAMBDA over the sea in KMKH. SFRUGH5A.153
CL This avoids having to pass land-sea mask into KMKH. SFRUGH5A.154
CL Also set the wind profile factor to the default value of 1.0 SFRUGH5A.155
CL for non-land points. SFRUGH5A.156
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFRUGH5A.157
SFRUGH5A.158
H_BLEND(I) = H_BLEND_MIN SFRUGH5A.159
WIND_PROFILE_FACTOR(I) = 1.0 SFRUGH5A.160
C SFRUGH5A.161
ENDDO SFRUGH5A.163
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFRUGH5A.165
CL 1.3 Land. Reduce roughness if there is any snow lying. SFRUGH5A.166
CL Eqns P243.B1, B2. SFRUGH5A.167
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFRUGH5A.168
CDIR$ IVDEP SFRUGH5A.173
! Fujitsu vectorization directive GRB0F405.515
!OCL NOVREC GRB0F405.516
DO L = 1,LAND_PTS SFRUGH5A.174
I = LAND_INDEX(L) - (P1-1) SFRUGH5A.175
IF (LYING_SNOW(I) .LT. 5.0E3) THEN ! Only reduce non-orographic SFRUGH5A.177
C ! roughness for land points SFRUGH5A.178
C ! without permanent snow. SFRUGH5A.179
C SFRUGH5A.180
Z0 = Z0V(I) - 4.0E-4 * LYING_SNOW(I) SFRUGH5A.181
ZETA1 = MIN( 5.0E-4 , Z0V(I) ) SFRUGH5A.182
Z0M(I) = MAX( ZETA1 , Z0 ) SFRUGH5A.183
Z0H(I) = MIN( Z0V(I) , Z0M(I) ) SFRUGH5A.184
Z0F(I) = Z0H(I) SFRUGH5A.185
ELSE ! for permanent land-ice Z0V is appropriate SFRUGH5A.186
Z0M(I) = Z0V(I) ! P243.B1, based on P243.B2 (2nd case) SFRUGH5A.187
Z0H(I) = Z0V(I) ! " , " " " ( " " ) SFRUGH5A.188
Z0F(I) = Z0V(I) ! " , " " " ( " " ) SFRUGH5A.189
ENDIF SFRUGH5A.190
C SFRUGH5A.191
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFRUGH5A.192
CL 1.4 Orographic roughness. Calculate Z0M_EFF in neutral case. SFRUGH5A.193
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFRUGH5A.194
IF (L_Z0_OROG) THEN SFRUGH5A.195
C SFRUGH5A.196
C ! Set blending height, effective roughness length and SFRUGH5A.197
C ! wind profile factor at land points. SFRUGH5A.198
C SFRUGH5A.199
SFRUGH5A.200
ZETA1 = 0.5 * OROG_DRAG_PARAM * SIL_OROG(L) SFRUGH5A.201
ZETA2 = LOG ( 1.0 + Z1(I)/Z0M(I) ) SFRUGH5A.202
ZETA3 = 1.0 / SQRT ( ZETA1/(VKMAN*VKMAN) + 1.0/(ZETA2*ZETA2) ) SFRUGH5A.203
ZETA2 = 1.0 / EXP(ZETA3) SFRUGH5A.204
H_BLEND(I) = MAX ( Z1(I) / (1.0 - ZETA2) , SFRUGH5A.205
& HO2R2_OROG(L) * SQRT(2.0) ) SFRUGH5A.206
H_BLEND(I) = MIN ( H_BLEND_MAX, H_BLEND(I) ) SFRUGH5A.207
SFRUGH5A.208
SFRUGH5A.209
! Apply simple stability correction to form drag if RIB is stable SFRUGH5A.210
SFRUGH5A.211
IF (SIL_OROG(L) .EQ. RMDI) THEN SFRUGH5A.212
ZETA1 = 0.0 SFRUGH5A.213
ELSE SFRUGH5A.214
RIB_FN = ( 1.0 - RIB(I) / RI_CRIT ) SFRUGH5A.215
IF (RIB_FN.GT.1.0) RIB_FN = 1.0 SFRUGH5A.216
IF (RIB_FN.LT.0.0) RIB_FN = 0.0 SFRUGH5A.217
ZETA1 = 0.5 * OROG_DRAG_PARAM * SIL_OROG(L) * RIB_FN SFRUGH5A.218
ENDIF SFRUGH5A.219
SFRUGH5A.220
SFRUGH5A.221
Z0M_EFF(I) = H_BLEND(I) / EXP ( VKMAN / SQRT ( ZETA1 + SFRUGH5A.222
& (VKMAN / LOG ( H_BLEND(I) / Z0M(I) ) ) * SFRUGH5A.223
& (VKMAN / LOG ( H_BLEND(I) / Z0M(I) ) ) ) ) SFRUGH5A.224
SFRUGH5A.225
SFRUGH5A.226
IF (RIB(I).GT.RI_CRIT) Z0M_EFF(I)=Z0M(I) SFRUGH5A.227
SFRUGH5A.228
WIND_PROFILE_FACTOR(I) = LOG ( H_BLEND(I) / Z0M_EFF(I) ) / SFRUGH5A.229
& LOG ( H_BLEND(I) / Z0M(I) ) SFRUGH5A.230
SFRUGH5A.231
ELSE ! Orographic roughness not represented so SFRUGH5A.232
C ! leave blending height and wind profile factor at their SFRUGH5A.233
C ! default values and set effective roughness length to its SFRUGH5A.234
C ! value based on land type. SFRUGH5A.235
C SFRUGH5A.236
Z0M_EFF(I) = Z0M(I) SFRUGH5A.237
ENDIF SFRUGH5A.238
SFRUGH5A.239
ENDDO SFRUGH5A.244
SFRUGH5A.246
IF (LTIMER) THEN SFRUGH5A.247
CALL TIMER
('SFROUGH ',4) SFRUGH5A.248
ENDIF SFRUGH5A.249
RETURN SFRUGH5A.250
END SFRUGH5A.251
SFRUGH5A.252
*ENDIF SFRUGH5A.253