*IF DEF,A03_6A SFRIB6A.2
C *****************************COPYRIGHT****************************** SFRIB6A.3
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. SFRIB6A.4
C SFRIB6A.5
C Use, duplication or disclosure of this code is subject to the SFRIB6A.6
C restrictions as set forth in the contract. SFRIB6A.7
C SFRIB6A.8
C Meteorological Office SFRIB6A.9
C London Road SFRIB6A.10
C BRACKNELL SFRIB6A.11
C Berkshire UK SFRIB6A.12
C RG12 2SZ SFRIB6A.13
C SFRIB6A.14
C If no contract has been raised with this copy of the code, the use, SFRIB6A.15
C duplication or disclosure of it is strictly prohibited. Permission SFRIB6A.16
C to do so must first be obtained in writing from the Head of Numerical SFRIB6A.17
C Modelling at the above address. SFRIB6A.18
C ******************************COPYRIGHT****************************** SFRIB6A.19
! SFRIB6A.20
!!! SUBROUTINE SF_RIB------------------------------------------------ SFRIB6A.21
!!! SFRIB6A.22
!!! Purpose: Calculate bulk Richardson number for surface layer SFRIB6A.23
!!! SFRIB6A.24
!!! <- programmer of some or all of previous code changes SFRIB6A.25
!!! Simon Jackson, Roderick Smith SFRIB6A.26
!!! SFRIB6A.27
C Modification History: AJC1F405.53
C Version Date Change AJC1F405.54
C 4.5 Jul. 98 Kill the IBM specific lines (JCThil) AJC1F405.55
!!!END----------------------------------------------------------------- SFRIB6A.28
SFRIB6A.29
!! Arguaments ------------------------------------------------------- SFRIB6A.30
SUBROUTINE SF_RIB ( 2,6SFRIB6A.31
& P_POINTS,LAND_PTS,P_FIELD,LAND_FIELD,LAND_MASK,L_LAND,INT_STOM, SFRIB6A.32
& P1,LAND1, SFRIB6A.33
& GATHER,LAND_INDEX, SFRIB6A.35
& NSICE,SICE_INDEX,ICE_FRACT,Q_1,QW_1,QCL_1,QCF_1, SFRIB6A.37
& T_1,TL_1,QSL,QSTAR,QSTAR_LEAD, SFRIB6A.38
& QS1,TSTAR_NL,Z1_TQ,Z1_UV,Z0M_EFF,Z0M,Z0H,Z0HS,Z0MSEA, SFRIB6A.39
& WIND_PROFILE_FACTOR,U_1_P,U_0_P,V_1_P,V_0_P, SFRIB6A.40
& ROOTD,SMVCCL,SMVCWT,SMC,VFRAC,V_SOIL,CANOPY,CATCH, SFRIB6A.41
& LYING_SNOW,GC,RESIST,DB,DB_LEAD,RIB,RIB_LEAD,PSIS,VSHR,ALPHA1, SFRIB6A.42
& BT_1,BQ_1,FRACA,RESFS,DQ,DQ_LEAD,DTEMP,DTEMP_LEAD,LTIMER SFRIB6A.43
& ) SFRIB6A.44
SFRIB6A.45
IMPLICIT NONE SFRIB6A.46
SFRIB6A.47
SFRIB6A.48
INTEGER ! Variables defining grid. SFRIB6A.49
& P_POINTS ! IN Number of P-grid points to be processed SFRIB6A.50
&,LAND_PTS ! IN Number of land points to be processed. SFRIB6A.51
&,P_FIELD ! IN Total number of P-grid points SFRIB6A.52
&,LAND_FIELD ! IN Total number of land points. SFRIB6A.53
&,NSICE ! IN Number of sea-ice points. SFRIB6A.54
&,SICE_INDEX(P_FIELD) ! IN Index vector for gather to sea-ice SFRIB6A.55
! ! points SFRIB6A.56
&,P1 ! IN First P-point to be processed. SFRIB6A.57
&,LAND1 ! IN First land-point to be processed. SFRIB6A.58
&,LAND_INDEX(LAND_FIELD) SFRIB6A.60
! IN Index for compressed land point array; SFRIB6A.61
! i'th element holds position in the FULL SFRIB6A.62
! field of the ith land pt to be SFRIB6A.63
! processed SFRIB6A.64
LOGICAL SFRIB6A.65
& GATHER ! IN If true then leads variables are comp- SFRIB6A.66
! ressed for sea-ice calculations. This SFRIB6A.67
! saves duplicating calculations if there SFRIB6A.68
! are a relatively few of sea-ice points. SFRIB6A.69
! Set to false for a limited area run SFRIB6A.70
! with a high proportion of sea-ice. SFRIB6A.71
SFRIB6A.73
LOGICAL SFRIB6A.74
& INT_STOM ! IN T for interactive stomatal resistance. SFRIB6A.75
&,LTIMER ! IN logical for TIMER SFRIB6A.76
&,L_LAND ! IN calculate only over land if .true. SFRIB6A.77
&,LAND_MASK(P_FIELD) ! IN .TRUE. for land; .FALSE. elsewhere. F60. SFRIB6A.78
SFRIB6A.79
REAL SFRIB6A.80
& CANOPY(LAND_FIELD) ! IN Surface water (kg per sq metre). F642. SFRIB6A.81
&,CATCH(LAND_FIELD) ! IN Surface capacity (max. surface water) SFRIB6A.82
! (kg per sq metre). F6416. SFRIB6A.83
&,GC(LAND_FIELD) ! IN Interactive canopy conductance SFRIB6A.84
! to evaporation (m/s) SFRIB6A.85
&,ICE_FRACT(P_FIELD) ! IN Fraction of gridbox which is sea-ice. SFRIB6A.86
&,LYING_SNOW(P_FIELD) ! IN Lying snow amount (kg per sq metre). SFRIB6A.87
&,Q_1(P_FIELD) ! IN Specific humidity for lowest SFRIB6A.88
! atmospheric layer (kg water per kg air) SFRIB6A.89
&,QCF_1(P_FIELD) ! IN Cloud ice for lowest atmospheric layer SFRIB6A.90
! (kg water per kg air). SFRIB6A.91
&,QCL_1(P_FIELD) ! IN Cloud liquid water for lowest atm layer SFRIB6A.92
! (kg water per kg air). SFRIB6A.93
&,QW_1(P_FIELD) ! IN Total water content of lowest SFRIB6A.94
! atmospheric layer (kg per kg air). SFRIB6A.95
&,QS1(P_FIELD) ! IN Sat. specific humidity qsat(TL_1,PSTAR) SFRIB6A.96
&,QSL(P_FIELD) ! IN Saturated sp humidity at liquid/ice SFRIB6A.97
! temperature and pressure of lowest SFRIB6A.98
! atmospheric level. SFRIB6A.99
&,QSTAR(P_FIELD) ! IN Surface saturated sp humidity. Holds SFRIB6A.100
! value over sea-ice where ICE_FRACT > 0. SFRIB6A.101
! i.e. Leads contribution not included. SFRIB6A.102
&,QSTAR_LEAD(P_FIELD) ! IN QSTAR for sea-ice leads. SFRIB6A.103
! Missing data indicator over non sea-ice. SFRIB6A.104
&,RESIST(LAND_FIELD) ! IN "Stomatal" resistance to evaporation SFRIB6A.105
! (seconds per metre). F6415. SFRIB6A.106
&,ROOTD(LAND_FIELD) ! IN "Root depth" (metres). F6412. SFRIB6A.107
&,SMC(LAND_FIELD) ! IN Soil moisture content (kg per sq m). SFRIB6A.108
! F621. SFRIB6A.109
&,SMVCCL(LAND_FIELD) ! IN Critical volumetric SMC (cubic metres SFRIB6A.110
! per cubic metre of soil). F6232. SFRIB6A.111
&,SMVCWT(LAND_FIELD) ! IN Volumetric wilting point (cubic m of SFRIB6A.112
! water per cubic m of soil). F6231. SFRIB6A.113
SFRIB6A.114
! Note: (SMVCCL - SMVCWT) is the critical volumetric available soil SFRIB6A.115
! moisture content. ~~~~~~~~~ SFRIB6A.116
SFRIB6A.117
&,T_1(P_FIELD) ! IN Temperature for lowest atmospheric layer SFRIB6A.118
! (Kelvin). SFRIB6A.119
&,TL_1(P_FIELD) ! IN Liquid/frozen water temperature for SFRIB6A.120
! lowest atmospheric layer (K). SFRIB6A.121
&,TSTAR_NL(P_FIELD) ! IN TSTAR No Leads: surface temperature SFRIB6A.122
! over sea-ice fraction of gridsquare. SFRIB6A.123
! =TSTAR over non sea-ice points. SFRIB6A.124
&,U_1_P(P_FIELD) ! IN West-to-east wind component for lowest SFRIB6A.125
! atmospheric layer (m/s). On P grid. SFRIB6A.126
&,V_1_P(P_FIELD) ! IN South-to-north wind component for lowest SFRIB6A.130
! atmospheric layer (m/s). On P grid. SFRIB6A.131
&,U_0_P(P_FIELD) ! IN West-to-east component of ocean surface SFRIB6A.135
! current (m/s; zero over land if U_0 OK). SFRIB6A.136
! P grid. F615. SFRIB6A.137
&,V_0_P(P_FIELD) ! IN South-to-north component of ocean surface SFRIB6A.138
! current (m/s; zero over land if V_0 OK). SFRIB6A.139
! P grid. F616. SFRIB6A.140
&,V_SOIL(LAND_FIELD) ! IN Volumetric soil moisture concentration SFRIB6A.141
! in the top soil layer (m3 H2O/m3 soil). SFRIB6A.142
&,VFRAC(LAND_FIELD) ! IN Vegetated fraction. SFRIB6A.143
&,WIND_PROFILE_FACTOR(P_FIELD) SFRIB6A.144
! ! IN For transforming effective surface SFRIB6A.145
! transfer coefficients to those excluding SFRIB6A.146
! form drag. SFRIB6A.147
&,Z0H(P_FIELD) ! IN Roughness length for heat and moisture m SFRIB6A.148
&,Z0HS(P_FIELD) ! IN Roughness length for heat and moisture SFRIB6A.149
! transport over sea. SFRIB6A.150
&,Z0M(P_FIELD) ! IN Roughness length for heat and moisture m SFRIB6A.151
&,Z0MSEA(P_FIELD) ! IN Sea-surface roughness length for SFRIB6A.152
! momentum (m). F617. SFRIB6A.153
&,Z0M_EFF(P_FIELD) ! IN Effective roughness length for momentum SFRIB6A.154
&,Z1_TQ(P_FIELD) ! IN Height of lowest TQ level (m). SFRIB6A.155
&,Z1_UV(P_FIELD) ! IN Height of lowest UV level (m). SFRIB6A.156
SFRIB6A.157
SFRIB6A.158
! Output variables. SFRIB6A.159
SFRIB6A.160
REAL SFRIB6A.161
& ALPHA1(P_FIELD) ! OUT Gradient of saturated specific humidity SFRIB6A.162
! with respect to temperature between the SFRIB6A.163
! bottom model layer and the surface SFRIB6A.164
&,BQ_1(P_FIELD) ! OUT A buoyancy parameter for lowest atm SFRIB6A.165
! level. ("beta-q twiddle"). SFRIB6A.166
&,BT_1(P_FIELD) ! OUT A buoyancy parameter for lowest atm SFRIB6A.167
! level. ("beta-T twiddle"). SFRIB6A.168
&,DQ(P_FIELD) ! OUT Sp humidity difference between surface SFRIB6A.169
! and lowest atmospheric level (Q1 - Q*). SFRIB6A.170
! Holds value over sea-ice where SFRIB6A.171
! ICE_FRACT>0 i.e. Leads contribution not SFRIB6A.172
! included. SFRIB6A.173
&,DQ_LEAD(P_FIELD) ! OUT DQ for leads fraction of gridsquare. SFRIB6A.174
&,DTEMP(P_FIELD) ! OUT Liquid/ice static energy difference SFRIB6A.175
! between surface and lowest atmospheric SFRIB6A.176
! level, divided by CP (a modified SFRIB6A.177
! temperature difference). SFRIB6A.178
! Holds value over sea-ice where SFRIB6A.179
! ICE_FRACT>0 i.e. Leads contribution not SFRIB6A.180
! included. SFRIB6A.181
&,DTEMP_LEAD(P_FIELD)! OUT DTEMP for leads fraction of gridsquare. SFRIB6A.182
&,FRACA(P_FIELD) ! OUT Fraction of surface moisture flux with SFRIB6A.183
! only aerodynamic resistance. SFRIB6A.184
&,PSIS(P_FIELD) ! OUT Soil moisture availability factor. SFRIB6A.185
&,RESFS(P_FIELD) ! OUT Combined soil, stomatal and aerodynamic SFRIB6A.186
! resistance factor = PSIS/(1+RS/RA) for SFRIB6A.187
! fraction (1-FRACA) SFRIB6A.188
&,RESFT(P_FIELD) ! OUT Total resistance factor SFRIB6A.189
! FRACA+(1-FRACA)*RESFS. SFRIB6A.190
&,DB(P_POINTS) ! OUT Buoyancy difference between surface SFRIB6A.191
! ! and lowest atmospheric level. SFRIB6A.192
! ! Holds value over sea-ice where ICE_FRACT SFRIB6A.193
! ! >0 i.e. Leads contribution not included. SFRIB6A.194
&,DB_LEAD(P_POINTS) ! OUT DB for leads fraction of gridsquare. SFRIB6A.195
! ! Missing data indicator over non sea-ice. SFRIB6A.196
&,RIB(P_FIELD) ! OUT Bulk Richardson number for lowest layer SFRIB6A.197
&,RIB_LEAD(P_FIELD) ! OUT Bulk Richardson no. for sea-ice leads SFRIB6A.198
! at lowest layer. At non sea-ice points SFRIB6A.199
! holds RIB for FCDCH calculation, then SFRIB6A.200
! set to missing data indicator. SFRIB6A.201
&,VSHR(P_FIELD) ! OUT Magnitude of surface-to-lowest-lev. wind SFRIB6A.202
SFRIB6A.203
SFRIB6A.204
! Symbolic constants ----------------------------------------------- SFRIB6A.205
SFRIB6A.206
SFRIB6A.207
*CALL C_MDI
SFRIB6A.208
*CALL C_0_DG_C
SFRIB6A.209
*CALL C_G
SFRIB6A.210
*CALL C_LHEAT
SFRIB6A.211
*CALL C_SOILH
SFRIB6A.212
*CALL C_R_CP
SFRIB6A.213
*CALL C_EPSLON
SFRIB6A.214
*CALL C_VKMAN
SFRIB6A.215
*CALL C_DENSTY
SFRIB6A.216
SFRIB6A.217
! (3) Derived local parameters. SFRIB6A.218
SFRIB6A.219
REAL ETAR,GRCP,LCRCP,LFRCP,LS,LSRCP SFRIB6A.220
PARAMETER ( SFRIB6A.221
& ETAR=1./(1.-EPSILON)! Used in calc of buoyancy parameter BETAC SFRIB6A.222
&,GRCP=G/CP ! Used in calc of dT across surface layer. SFRIB6A.223
&,LCRCP=LC/CP ! Evaporation-to-dT conversion factor. SFRIB6A.224
&,LFRCP=LF/CP ! Freezing-to-dT conversion factor. SFRIB6A.225
&,LS=LF+LC ! Latent heat of sublimation. SFRIB6A.226
&,LSRCP=LS/CP ! Sublimation-to-dT conversion factor. SFRIB6A.227
& ) SFRIB6A.228
SFRIB6A.229
! Define local storage. SFRIB6A.230
SFRIB6A.231
! (a) Workspace. SFRIB6A.232
SFRIB6A.233
! Workspace -------------------------------------------------------- SFRIB6A.234
INTEGER SFRIB6A.235
& I ! Loop counter (horizontal field index). SFRIB6A.236
&,L ! Loop counter (land field index). SFRIB6A.237
&,SI ! Loop counter (sea-ice field index). SFRIB6A.238
REAL SFRIB6A.239
& VIRT_FACTOR ! Factor for converting temperature to virtual temp. SFRIB6A.240
&,D_T ! Temporary in calculation of alpha1. SFRIB6A.241
&,USHEAR ! U-component of surface-to-lowest-level wind shear. SFRIB6A.242
&,VSHEAR ! V-component of surface-to-lowest-level wind shear. SFRIB6A.243
&,VSHR2 ! Square of magnitude of surface-to-lowest-level SFRIB6A.244
! ! wind shear. SFRIB6A.245
&,ZETAM ! Temporary in calculation of CHN. SFRIB6A.246
&,ZETAH ! Temporary in calculation of CHN. SFRIB6A.247
SFRIB6A.248
REAL SFRIB6A.249
& CHN(P_FIELD) ! Neutral-stability value of CH, used as a SFRIB6A.250
! first approximation to the "true" CH. SFRIB6A.251
&,EPDT(P_FIELD) ! "Potential" Evaporation * Timestep - dummy SFRIB6A.252
! variable = 0. SFRIB6A.253
&,F_SE(P_FIELD) ! Dummy variable - actual value set in SFRIB6A.254
! 2nd Call to SF_RESIST in SF_EXCH SFRIB6A.255
SFRIB6A.256
SFRIB6A.257
EXTERNAL SF_RESIST SFRIB6A.258
SFRIB6A.259
!---------------------------------------------------------------------- SFRIB6A.260
!! 1 Calculate buoyancy parameters for the lowest model level. SFRIB6A.261
!---------------------------------------------------------------------- SFRIB6A.262
IF (LTIMER) THEN SFRIB6A.263
CALL TIMER
('SF_RIB ',3) SFRIB6A.264
ENDIF SFRIB6A.265
SFRIB6A.266
DO I=P1,P1+P_POINTS-1 SFRIB6A.267
SFRIB6A.268
VIRT_FACTOR = 1.0 + C_VIRTUAL*Q_1(I) - QCL_1(I) - QCF_1(I) SFRIB6A.269
BT_1(I) = 1.0 / T_1(I) ! P243.19 (1st eqn) SFRIB6A.270
BQ_1(I) = C_VIRTUAL / VIRT_FACTOR SFRIB6A.271
! ! P243.19 (2nd eqn) SFRIB6A.272
!*********************************************************************** SFRIB6A.273
!! 2. Calculate gradient of saturated specific SFRIB6A.274
!! humidity for use in calculation of surface fluxes SFRIB6A.275
!*********************************************************************** SFRIB6A.276
! SFRIB6A.277
D_T = TSTAR_NL(I)-TL_1(I) SFRIB6A.278
SFRIB6A.279
IF (D_T .GT. 0.05 .OR. D_T .LT. -0.05) THEN SFRIB6A.280
ALPHA1(I) = (QSTAR(I) - QS1(I)) / D_T SFRIB6A.281
ELSEIF (TL_1(I) .GT. TM) THEN SFRIB6A.282
SFRIB6A.283
ALPHA1(I)=(EPSILON * LC * QS1(I) * SFRIB6A.284
& (1.0+C_VIRTUAL*QS1(I)) )/(R*TL_1(I)*TL_1(I)) SFRIB6A.285
SFRIB6A.286
ELSE SFRIB6A.287
SFRIB6A.288
ALPHA1(I)=(EPSILON * LS * QS1(I) * SFRIB6A.289
& (1.0+C_VIRTUAL*QS1(I)) )/(R*TL_1(I)*TL_1(I)) SFRIB6A.290
ENDIF SFRIB6A.291
SFRIB6A.292
! ALPHA1 set to zero over open sea, so that P-M only applies over land SFRIB6A.293
SFRIB6A.294
IF(.NOT.LAND_MASK(I).AND.ICE_FRACT(I).LE.0) ALPHA1(I)=0.0 SFRIB6A.295
SFRIB6A.296
ENDDO SFRIB6A.297
SFRIB6A.298
!----------------------------------------------------------------------- SFRIB6A.299
!! 3 Calculate temperature (strictly, liquid/ice static energy) and SFRIB6A.300
!! humidity jumps, and wind shear, across the surface layer. SFRIB6A.301
!! Separate values are required for the leads and ice fractions SFRIB6A.302
!! of sea-ice grid-squares. SFRIB6A.303
!----------------------------------------------------------------------- SFRIB6A.304
IF (GATHER) THEN SFRIB6A.306
DO I=P1,P1+P_POINTS-1 SFRIB6A.307
DTEMP(I) = TL_1(I) - TSTAR_NL(I) SFRIB6A.308
& + GRCP * ( Z1_TQ(I) + Z0M_EFF(I) - Z0H(I) ) SFRIB6A.309
! ! P243.118 SFRIB6A.310
DQ(I) = QW_1(I) - QSTAR(I) ! P243.119 SFRIB6A.311
SFRIB6A.312
DTEMP_LEAD(I) = 1.E30 ! Missing data indicator SFRIB6A.313
DQ_LEAD(I) = 1.E30 ! Missing data indicator SFRIB6A.314
USHEAR = U_1_P(I) - U_0_P(I) SFRIB6A.315
VSHEAR = V_1_P(I) - V_0_P(I) SFRIB6A.316
VSHR2 = MAX (1.0E-6 , USHEAR*USHEAR + VSHEAR*VSHEAR) SFRIB6A.317
VSHR(I) = SQRT(VSHR2) SFRIB6A.318
! ! P243.120 (previous 4 lines of code) SFRIB6A.319
ENDDO SFRIB6A.320
SFRIB6A.321
!----------------------------------------------------------------------- SFRIB6A.322
!! 4 Calculate leads values by looping round sea-ice points only. SFRIB6A.323
!! Avoids an if test in the above loop, so code can run faster. SFRIB6A.324
!----------------------------------------------------------------------- SFRIB6A.325
CDIR$ IVDEP SFRIB6A.326
! Fujitsu vectorization directive GRB0F405.511
!OCL NOVREC GRB0F405.512
DO SI=1,NSICE SFRIB6A.327
I = SICE_INDEX(SI) SFRIB6A.328
DTEMP_LEAD(I) = TL_1(I)-TFS + GRCP* SFRIB6A.329
& (Z1_TQ(I)+Z0MSEA(I)-Z0HS(I)) SFRIB6A.330
DQ_LEAD(I) = QW_1(I) - QSTAR_LEAD(SI) SFRIB6A.331
ENDDO SFRIB6A.332
ELSE SFRIB6A.333
DO I=P1,P1+P_POINTS-1 SFRIB6A.335
USHEAR = U_1_P(I) - U_0_P(I) SFRIB6A.336
VSHEAR = V_1_P(I) - V_0_P(I) SFRIB6A.337
SFRIB6A.338
VSHR2 = MAX (1.0E-6 , USHEAR*USHEAR + VSHEAR*VSHEAR) SFRIB6A.339
VSHR(I) = SQRT(VSHR2) SFRIB6A.340
! ... P243.120 (previous 4 lines of code) SFRIB6A.341
DTEMP(I) = TL_1(I) - TSTAR_NL(I) SFRIB6A.342
& + GRCP * ( Z1_TQ(I) + Z0M_EFF(I) - Z0H(I) ) SFRIB6A.343
! ! P243.118 SFRIB6A.344
DQ(I) = QW_1(I) - QSTAR(I) ! P243.119 SFRIB6A.345
! SFRIB6A.346
IF ( ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I) ) THEN SFRIB6A.347
DTEMP_LEAD(I) = TL_1(I)-TFS + GRCP* SFRIB6A.348
& (Z1_TQ(I)+Z0MSEA(I)-Z0HS(I)) SFRIB6A.349
DQ_LEAD(I) = QW_1(I) - QSTAR_LEAD(I) SFRIB6A.350
ELSE SFRIB6A.351
DTEMP_LEAD(I) = RMDI ! Missing data indicator SFRIB6A.352
DQ_LEAD(I) = RMDI ! Missing data indicator SFRIB6A.353
ENDIF SFRIB6A.354
SFRIB6A.355
ENDDO SFRIB6A.356
ENDIF ! End of IF (GATHER) THEN... ELSE... SFRIB6A.358
SFRIB6A.360
!----------------------------------------------------------------------- SFRIB6A.361
!! 5 Evaporation over land surfaces without snow is limited by SFRIB6A.362
!! soil moisture availability and stomatal resistance. SFRIB6A.363
!! Set FRACA (= fA in the documentation) according to P243.68, SFRIB6A.364
!! PSIS according to P243.65, and RESFS (= fS) according to P243.75 SFRIB6A.365
!! and P243.61, using neutral-stability value of CH (as explained SFRIB6A.366
!! in section (v) of the P243 documentation). SFRIB6A.367
!----------------------------------------------------------------------- SFRIB6A.368
SFRIB6A.369
DO I=P1,P1+P_POINTS-1 SFRIB6A.370
ZETAM = LOG ( (Z1_UV(I) + Z0M_EFF(I))/Z0M_EFF(I) ) SFRIB6A.371
ZETAH = LOG ( (Z1_TQ(I) + Z0M_EFF(I))/Z0H(I) ) SFRIB6A.372
CHN(I) = (VKMAN/ZETAH) * (VKMAN/ZETAM) * WIND_PROFILE_FACTOR(I) SFRIB6A.373
CHN(I) = CHN(I)*VSHR(I) SFRIB6A.374
SFRIB6A.375
EPDT(I) = 0.0 !Dummy variable for SF_RESIST SFRIB6A.376
SFRIB6A.377
ENDDO ! Calc of CHN SFRIB6A.378
SFRIB6A.379
SFRIB6A.380
CALL SF_RESIST
( SFRIB6A.381
& P_POINTS,LAND_PTS,P_FIELD,LAND_FIELD,LAND_MASK,INT_STOM,P1,LAND1, SFRIB6A.382
& LAND_INDEX, SFRIB6A.384
& ROOTD,SMVCCL,SMVCWT,SMC,V_SOIL,VFRAC,CANOPY,CATCH,DQ, SFRIB6A.386
& EPDT,LYING_SNOW,GC,RESIST,CHN,PSIS,FRACA, SFRIB6A.387
& RESFS,F_SE,RESFT,LTIMER) SFRIB6A.388
SFRIB6A.389
SFRIB6A.390
!----------------------------------------------------------------------- SFRIB6A.391
!! 6 Calculate bulk Richardson numbers for the surface layer. SFRIB6A.392
!! At sea-ice points RIB contains value for ice only (not leads). SFRIB6A.393
!! Initialise RIB_LEAD to RIB so that it contains sensible SFRIB6A.394
!! values at non sea ice points for the FCDCH calculation below. SFRIB6A.395
!----------------------------------------------------------------------- SFRIB6A.396
IF (GATHER) THEN SFRIB6A.398
DO I=P1,P1+P_POINTS-1 SFRIB6A.399
SFRIB6A.400
DB(I) = G * ( BT_1(I)*DTEMP(I) + BQ_1(I)*RESFT(I)*DQ(I) ) SFRIB6A.401
RIB(I) = Z1_UV(I) * DB(I) / ( VSHR(I)*VSHR(I) ) SFRIB6A.402
DB_LEAD(I) = DB(I) SFRIB6A.403
RIB_LEAD(I) = RIB(I) SFRIB6A.404
SFRIB6A.405
ENDDO SFRIB6A.406
!----------------------------------------------------------------------- SFRIB6A.407
!! 6.1 Calculate bulk Richardson no. for leads at sea-ice points SFRIB6A.408
!! only. SFRIB6A.409
!----------------------------------------------------------------------- SFRIB6A.410
SFRIB6A.411
CDIR$ IVDEP SFRIB6A.412
! Fujitsu vectorization directive GRB0F405.513
!OCL NOVREC GRB0F405.514
DO SI = 1,NSICE SFRIB6A.413
I = SICE_INDEX(SI) SFRIB6A.414
DB_LEAD(I) = G * ( BT_1(I) * DTEMP_LEAD(I) + SFRIB6A.415
& BQ_1(I) * RESFT(I) * DQ_LEAD(I) ) SFRIB6A.416
RIB_LEAD(I) = Z1_UV(I) * DB_LEAD(I) / ( VSHR(I) * VSHR(I) ) SFRIB6A.417
! ... P2430.2, for sea-ice leads. SFRIB6A.418
ENDDO SFRIB6A.419
ELSE SFRIB6A.420
DO I=P1,P1+P_POINTS-1 SFRIB6A.422
SFRIB6A.423
DB(I) = G * ( BT_1(I)*DTEMP(I) + BQ_1(I)*RESFT(I)*DQ(I) ) SFRIB6A.424
RIB(I) = Z1_UV(I) * DB(I) / ( VSHR(I)*VSHR(I) ) SFRIB6A.425
! SFRIB6A.426
DB_LEAD(I) = DB(I) SFRIB6A.427
RIB_LEAD(I) = RIB(I) SFRIB6A.428
! SFRIB6A.429
IF ( ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I) ) THEN SFRIB6A.430
DB_LEAD(I) = G * ( BT_1(I) * DTEMP_LEAD(I) + SFRIB6A.431
& BQ_1(I) * RESFT(I) * DQ_LEAD(I) ) SFRIB6A.432
RIB_LEAD(I) = Z1_UV(I) * DB_LEAD(I) / ( VSHR(I) * VSHR(I) ) SFRIB6A.433
! ... P2430.2, for sea-ice leads. SFRIB6A.434
SFRIB6A.435
ENDIF ! Ice_fract SFRIB6A.436
ENDDO SFRIB6A.437
ENDIF ! End of IF (GATHER) THEN... ELSE... SFRIB6A.439
SFRIB6A.441
IF (LTIMER) THEN SFRIB6A.442
CALL TIMER
('SF_RIB ',4) SFRIB6A.443
ENDIF SFRIB6A.444
RETURN SFRIB6A.445
END SFRIB6A.446
SFRIB6A.447
*ENDIF SFRIB6A.448