*IF DEF,A03_7A SFRIB7A.2
C *****************************COPYRIGHT****************************** SFRIB7A.3
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. SFRIB7A.4
C SFRIB7A.5
C Use, duplication or disclosure of this code is subject to the SFRIB7A.6
C restrictions as set forth in the contract. SFRIB7A.7
C SFRIB7A.8
C Meteorological Office SFRIB7A.9
C London Road SFRIB7A.10
C BRACKNELL SFRIB7A.11
C Berkshire UK SFRIB7A.12
C RG12 2SZ SFRIB7A.13
C SFRIB7A.14
C If no contract has been raised with this copy of the code, the use, SFRIB7A.15
C duplication or disclosure of it is strictly prohibited. Permission SFRIB7A.16
C to do so must first be obtained in writing from the Head of Numerical SFRIB7A.17
C Modelling at the above address. SFRIB7A.18
C ******************************COPYRIGHT****************************** SFRIB7A.19
! SFRIB7A.20
!!! SUBROUTINES SF_RIB_LAND and SF_RIB_SEA --------------------------- SFRIB7A.21
!!! SFRIB7A.22
!!! Purpose: Calculate bulk Richardson number for surface layer SFRIB7A.23
!!! SFRIB7A.24
!!! SJ, RE <- programmer of some or all of previous code changes SFRIB7A.25
!!! SFRIB7A.26
!!! ------------------------------------------------------------------ SFRIB7A.27
SFRIB7A.28
! SUBROUTINE SF_RIB_LAND-------------------------------------------- SFRIB7A.29
! SFRIB7A.30
! Calculate RIB for land tiles SFRIB7A.31
! SFRIB7A.32
! ------------------------------------------------------------------ SFRIB7A.33
SUBROUTINE SF_RIB_LAND ( 1,2SFRIB7A.34
& P_FIELD,LAND_FIELD,TILE_PTS,LAND_INDEX,TILE_INDEX, SFRIB7A.35
& BQ_1,BT_1,QSTAR,QW_1,RESFT,TL_1,TSTAR,VSHR,Z0H,Z0M,Z1_TQ,Z1_UV, SFRIB7A.36
& RIB,LTIMER SFRIB7A.37
& ) SFRIB7A.38
SFRIB7A.39
IMPLICIT NONE SFRIB7A.40
SFRIB7A.41
INTEGER SFRIB7A.42
& P_FIELD ! IN Total number of P-grid points. SFRIB7A.43
&,LAND_FIELD ! IN Total number of land points. SFRIB7A.44
&,TILE_PTS ! IN Number of tile points. SFRIB7A.45
&,LAND_INDEX(P_FIELD) ! IN Index of land points. SFRIB7A.46
&,TILE_INDEX(LAND_FIELD)! IN Index of tile points. SFRIB7A.47
SFRIB7A.48
LOGICAL SFRIB7A.49
& LTIMER ! IN logical for TIMER SFRIB7A.50
SFRIB7A.51
REAL SFRIB7A.52
& BQ_1(P_FIELD) ! IN A buoyancy parameter for lowest atm SFRIB7A.53
! ! level. ("beta-q twiddle"). SFRIB7A.54
&,BT_1(P_FIELD) ! IN A buoyancy parameter for lowest atm SFRIB7A.55
! ! level. ("beta-T twiddle"). SFRIB7A.56
&,QSTAR(LAND_FIELD) ! IN Surface saturated sp humidity. SFRIB7A.57
&,QW_1(P_FIELD) ! IN Total water content of lowest SFRIB7A.58
! ! atmospheric layer (kg per kg air). SFRIB7A.59
&,RESFT(LAND_FIELD) ! IN Total resistance factor. SFRIB7A.60
&,TL_1(P_FIELD) ! IN Liquid/frozen water temperature for SFRIB7A.61
! ! lowest atmospheric layer (K). SFRIB7A.62
&,TSTAR(LAND_FIELD) ! IN Surface temperature (K). SFRIB7A.63
&,VSHR(P_FIELD) ! IN Magnitude of surface-to-lowest-level SFRIB7A.64
! ! wind shear. SFRIB7A.65
&,Z0H(LAND_FIELD) ! IN Roughness length for heat and moisture m SFRIB7A.66
&,Z0M(LAND_FIELD) ! IN Effective roughness length for momentum SFRIB7A.67
&,Z1_TQ(P_FIELD) ! IN Height of lowest TQ level (m). SFRIB7A.68
&,Z1_UV(P_FIELD) ! IN Height of lowest UV level (m). SFRIB7A.69
SFRIB7A.70
REAL SFRIB7A.71
& RIB(LAND_FIELD) ! OUT Bulk Richardson number for lowest layer SFRIB7A.72
SFRIB7A.73
! Symbolic constants ----------------------------------------------- SFRIB7A.74
SFRIB7A.75
*CALL C_G
SFRIB7A.76
*CALL C_R_CP
SFRIB7A.77
SFRIB7A.78
! Workspace -------------------------------------------------------- SFRIB7A.79
INTEGER SFRIB7A.80
& I ! Horizontal field index. SFRIB7A.81
&,J ! Tile field index. SFRIB7A.82
&,L ! Land field index. SFRIB7A.83
SFRIB7A.84
REAL SFRIB7A.85
& DQ(LAND_FIELD) ! Sp humidity difference between surface SFRIB7A.86
! ! and lowest atmospheric level (Q1 - Q*). SFRIB7A.87
&,DTEMP(LAND_FIELD) ! Modified temperature difference between SFRIB7A.88
! surface and lowest atmospheric level. SFRIB7A.89
SFRIB7A.90
IF (LTIMER) THEN SFRIB7A.91
CALL TIMER
('SF_RIB ',3) SFRIB7A.92
ENDIF SFRIB7A.93
SFRIB7A.94
!----------------------------------------------------------------------- SFRIB7A.95
!! 1 Calculate temperature (strictly, liquid/ice static energy) and SFRIB7A.96
!! humidity jumps across the surface layer. SFRIB7A.97
!----------------------------------------------------------------------- SFRIB7A.98
DO J=1,TILE_PTS SFRIB7A.99
L = TILE_INDEX(J) SFRIB7A.100
I = LAND_INDEX(L) SFRIB7A.101
DTEMP(L) = TL_1(I) - TSTAR(L) + (G/CP)*(Z1_TQ(I)+Z0M(L)-Z0H(L)) SFRIB7A.102
! ! P243.118 SFRIB7A.103
DQ(L) = QW_1(I) - QSTAR(L) ! P243.119 SFRIB7A.104
ENDDO SFRIB7A.105
SFRIB7A.106
!----------------------------------------------------------------------- SFRIB7A.107
!! 2 Calculate bulk Richardson numbers for the surface layer. SFRIB7A.108
!----------------------------------------------------------------------- SFRIB7A.109
DO J=1,TILE_PTS SFRIB7A.110
L = TILE_INDEX(J) SFRIB7A.111
I = LAND_INDEX(L) SFRIB7A.112
RIB(L) = G*Z1_UV(I)*(BT_1(I)*DTEMP(L) + BQ_1(I)*RESFT(L)*DQ(L)) SFRIB7A.113
& / ( VSHR(I)*VSHR(I) ) ! P243.43 SFRIB7A.114
ENDDO SFRIB7A.115
SFRIB7A.116
IF (LTIMER) THEN SFRIB7A.117
CALL TIMER
('SF_RIB ',4) SFRIB7A.118
ENDIF SFRIB7A.119
SFRIB7A.120
RETURN SFRIB7A.121
END SFRIB7A.122
SFRIB7A.123
! SUBROUTINE SF_RIB_SEA--------------------------------------------- SFRIB7A.124
! SFRIB7A.125
! Calculate RIB for sea, sea-ice and sea-ice leads SFRIB7A.126
! SFRIB7A.127
! ------------------------------------------------------------------ SFRIB7A.128
SUBROUTINE SF_RIB_SEA ( 1,2SFRIB7A.129
& P_POINTS,P_FIELD,P1,LAND_MASK,NSICE,SICE_INDEX, SFRIB7A.130
& BQ_1,BT_1,ICE_FRACT,QSTAR_ICE,QSTAR_SEA,QW_1,TL_1,TSTAR_ICE, SFRIB7A.131
& TSTAR_SEA,VSHR,Z0H_ICE,Z0H_SEA,Z0M_ICE,Z0M_SEA,Z1_TQ,Z1_UV, SFRIB7A.132
& RIB_SEA,RIB_ICE,LTIMER SFRIB7A.133
& ) SFRIB7A.134
SFRIB7A.135
IMPLICIT NONE SFRIB7A.136
SFRIB7A.137
INTEGER SFRIB7A.138
& P_POINTS ! IN Number of P-grid points to be processed. SFRIB7A.139
&,P_FIELD ! IN Total number of P-grid points. SFRIB7A.140
&,P1 ! IN First P-point to be processed. SFRIB7A.141
&,NSICE ! IN Number of sea-ice points. SFRIB7A.142
&,SICE_INDEX(P_FIELD) ! IN Index of sea-ice points. SFRIB7A.143
SFRIB7A.144
LOGICAL SFRIB7A.145
& LTIMER ! IN logical for TIMER SFRIB7A.146
&,LAND_MASK(P_FIELD) ! IN .TRUE. for land; .FALSE. elsewhere. F60. SFRIB7A.147
SFRIB7A.148
REAL SFRIB7A.149
& BQ_1(P_FIELD) ! IN A buoyancy parameter for lowest atm SFRIB7A.150
! ! level. ("beta-q twiddle"). SFRIB7A.151
&,BT_1(P_FIELD) ! IN A buoyancy parameter for lowest atm SFRIB7A.152
! ! level. ("beta-T twiddle"). SFRIB7A.153
&,ICE_FRACT(P_FIELD) ! IN Fraction of gridbox which is sea-ice. SFRIB7A.154
&,QSTAR_ICE(P_FIELD) ! IN Surface saturated sp humidity over SFRIB7A.155
! ! sea-ice. SFRIB7A.156
&,QSTAR_SEA(P_FIELD) ! IN Surface saturated sp humidity over SFRIB7A.157
! ! sea and sea-ice leads. SFRIB7A.158
&,QW_1(P_FIELD) ! IN Total water content of lowest SFRIB7A.159
! ! atmospheric layer (kg per kg air). SFRIB7A.160
&,TL_1(P_FIELD) ! IN Liquid/frozen water temperature for SFRIB7A.161
! ! lowest atmospheric layer (K). SFRIB7A.162
&,TSTAR_ICE(P_FIELD) ! IN Surface temperature of sea-ice (K). SFRIB7A.163
&,TSTAR_SEA(P_FIELD) ! IN Surface temperature of sea and sea-ice SFRIB7A.164
! ! leads (K). SFRIB7A.165
&,VSHR(P_FIELD) ! IN Magnitude of surface-to-lowest-level SFRIB7A.166
! ! wind shear. SFRIB7A.167
&,Z0H_ICE(P_FIELD) ! IN Roughness length for heat and moisture SFRIB7A.168
! ! transport over sea-ice (m). SFRIB7A.169
&,Z0H_SEA(P_FIELD) ! IN Roughness length for heat and moisture SFRIB7A.170
! ! transport over sea or sea-ice leads (m). SFRIB7A.171
&,Z0M_ICE(P_FIELD) ! IN Roughness length for momentum over SFRIB7A.172
! ! sea-ice (m). SFRIB7A.173
&,Z0M_SEA(P_FIELD) ! IN Roughness length for momentum over sea SFRIB7A.174
! ! or sea-ice leads (m). SFRIB7A.175
&,Z1_TQ(P_FIELD) ! IN Height of lowest TQ level (m). SFRIB7A.176
&,Z1_UV(P_FIELD) ! IN Height of lowest UV level (m). SFRIB7A.177
SFRIB7A.178
REAL SFRIB7A.179
& RIB_SEA(P_FIELD) ! OUT Bulk Richardson number for lowest layer SFRIB7A.180
! ! over sea or sea-ice leads. SFRIB7A.181
&,RIB_ICE(P_FIELD) ! OUT Bulk Richardson number for lowest layer SFRIB7A.182
! ! over sea-ice. SFRIB7A.183
SFRIB7A.184
SFRIB7A.185
! Symbolic constants ----------------------------------------------- SFRIB7A.186
SFRIB7A.187
*CALL C_0_DG_C
SFRIB7A.188
*CALL C_G
SFRIB7A.189
*CALL C_R_CP
SFRIB7A.190
SFRIB7A.191
! Workspace -------------------------------------------------------- SFRIB7A.192
INTEGER SFRIB7A.193
& I ! Horizontal field index. SFRIB7A.194
&,J !Sea-ice field index. SFRIB7A.195
REAL SFRIB7A.196
& DQ ! Sp humidity difference between surface SFRIB7A.197
! ! and lowest atmospheric level (Q1 - Q*). SFRIB7A.198
&,DTEMP ! Modified temperature difference between SFRIB7A.199
! ! surface and lowest atmospheric level. SFRIB7A.200
SFRIB7A.201
IF (LTIMER) THEN SFRIB7A.202
CALL TIMER
('SF_RIB ',3) SFRIB7A.203
ENDIF SFRIB7A.204
SFRIB7A.205
DO I=P1,P1+P_POINTS-1 SFRIB7A.206
IF ( .NOT.LAND_MASK(I) ) THEN SFRIB7A.207
! Sea and sea-ice leads SFRIB7A.208
DTEMP = TL_1(I) - TSTAR_SEA(I) ! P243.118 SFRIB7A.209
& + (G/CP)*(Z1_TQ(I) + Z0M_SEA(I) - Z0H_SEA(I)) SFRIB7A.210
DQ = QW_1(I) - QSTAR_SEA(I) ! P243.119 SFRIB7A.211
RIB_SEA(I) = G*Z1_UV(I)*( BT_1(I)*DTEMP + BQ_1(I)*DQ ) / SFRIB7A.212
& ( VSHR(I)*VSHR(I) ) SFRIB7A.213
ENDIF SFRIB7A.214
ENDDO SFRIB7A.215
SFRIB7A.216
DO J=1,NSICE SFRIB7A.217
I = SICE_INDEX(J) SFRIB7A.218
! Sea-ice SFRIB7A.219
DTEMP = TL_1(I) - TSTAR_ICE(I) SFRIB7A.220
& + (G/CP)*(Z1_TQ(I) + Z0M_ICE(I) - Z0H_ICE(I)) SFRIB7A.221
DQ = QW_1(I) - QSTAR_ICE(I) SFRIB7A.222
RIB_ICE(I) = G*Z1_UV(I)*( BT_1(I)*DTEMP + BQ_1(I)*DQ ) / SFRIB7A.223
& ( VSHR(I) * VSHR(I) ) SFRIB7A.224
ENDDO SFRIB7A.225
SFRIB7A.226
IF (LTIMER) THEN SFRIB7A.227
CALL TIMER
('SF_RIB ',4) SFRIB7A.228
ENDIF SFRIB7A.229
SFRIB7A.230
RETURN SFRIB7A.231
END SFRIB7A.232
*ENDIF SFRIB7A.233