*IF DEF,A03_6A EXCFNL6A.2
C ******************************COPYRIGHT****************************** EXCFNL6A.3
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. EXCFNL6A.4
C EXCFNL6A.5
C Use, duplication or disclosure of this code is subject to the EXCFNL6A.6
C restrictions as set forth in the contract. EXCFNL6A.7
C EXCFNL6A.8
C Meteorological Office EXCFNL6A.9
C London Road EXCFNL6A.10
C BRACKNELL EXCFNL6A.11
C Berkshire UK EXCFNL6A.12
C RG12 2SZ EXCFNL6A.13
C EXCFNL6A.14
C If no contract has been raised with this copy of the code, the use, EXCFNL6A.15
C duplication or disclosure of it is strictly prohibited. Permission EXCFNL6A.16
C to do so must first be obtained in writing from the Head of Numerical EXCFNL6A.17
C Modelling at the above address. EXCFNL6A.18
C ******************************COPYRIGHT****************************** EXCFNL6A.19
C EXCFNL6A.20
!!! SUBROUTINE EXCF_NL ---------------------------------------------- EXCFNL6A.21
!!! EXCFNL6A.22
!!! Purpose: To calculate non-local exchange coefficients for EXCFNL6A.23
!!! boundary layer subroutine KMKH. EXCFNL6A.24
!!! EXCFNL6A.25
!!! Suitable for single column use (via *IF definition IBM). EXCFNL6A.26
!!! EXCFNL6A.27
!!! EXCFNL6A.28
!!! Model Modification history: EXCFNL6A.29
!!! version Date EXCFNL6A.30
!!! EXCFNL6A.31
!!! 4.4 Feb 1997 Written by R N B Smith EXCFNL6A.32
!!! EXCFNL6A.33
!!! Programming standard: EXCFNL6A.34
!!! EXCFNL6A.35
!!! System component covered: Part of P243. EXCFNL6A.36
!!! EXCFNL6A.37
!!! Project task: EXCFNL6A.38
!!! EXCFNL6A.39
!!! Documentation: UMDP No.24 EXCFNL6A.40
!!! EXCFNL6A.41
!!!--------------------------------------------------------------------- EXCFNL6A.42
! EXCFNL6A.43
!! Arguments :- EXCFNL6A.44
SUBROUTINE EXCF_NL ( 1,2EXCFNL6A.45
& P_FIELD,P1,P_POINTS,BL_LEVELS, EXCFNL6A.46
& NTML,CF, ARN0F405.227
& RDZ,ZH,Z_UV,Z_TQ,RHO_UV,RHO_TQ, EXCFNL6A.48
& Z0M,V_S,FB_SURF,DB_TOP, EXCFNL6A.49
& BFLUX_SURF,BFLUX_SAT_SURF,ZETA_S,BT_TOP,BTT_TOP, ARN0F405.228
& DF_TOP_OVER_CP,ZETA_R,ALPHA_R,BTC_TOP, ARN0F405.229
& DB_TOP_CLD,CHI_S_TOP,ZC, EXCFNL6A.52
& RHOKM,RHOKH,RHOKM_TOP,RHOKH_TOP, ARN0F405.230
& ZHSC,DSCDEPTH,NTDSC,DB_DSCT,SVL, ARN0F405.231
& BT_DSCT,BTT_DSCT, ARN0F405.232
& DF_DSCT_OVER_CP,ZETA_R_DSC,ALPHA_R_DSC,BTC_DSCT, ARN0F405.233
& DB_DSCT_CLD,CHI_S_DSCT,ZC_DSC,COUPLED, ARN0F405.234
& LTIMER ARN0F405.235
&) EXCFNL6A.54
! ARN0F405.236
IMPLICIT NONE EXCFNL6A.55
! ARN0F405.237
LOGICAL LTIMER EXCFNL6A.56
! ARN0F405.238
INTEGER EXCFNL6A.57
& P_FIELD ! IN No. of P-grid points in whole field. EXCFNL6A.58
&,P1 ! IN First P-grid point to be processed. EXCFNL6A.59
&,P_POINTS ! IN No. of P-grid points to be processed. EXCFNL6A.60
&,BL_LEVELS ! IN maximum number of boundary layer levels EXCFNL6A.61
! ARN0F405.239
LOGICAL ARN0F405.240
& COUPLED(P_FIELD) ! IN Flag to indicate Sc layer weakly ARN0F405.241
! ! (de)coupled to surface. ARN0F405.242
! ARN0F405.243
INTEGER EXCFNL6A.62
& NTML(P_FIELD) ! IN Number of turbulently mixed EXCFNL6A.63
! ! layers. EXCFNL6A.64
&,NTDSC(P_FIELD) ! IN Top level of any decoupled ARN0F405.244
! ! turbulently mixed Sc layer. ARN0F405.245
! ARN0F405.246
REAL EXCFNL6A.65
& RDZ(P_FIELD,BL_LEVELS) ! IN Reciprocal of distance between EXCFNL6A.66
! ! T,q-levels (m^-1). 1/RDZ(,K) is EXCFNL6A.67
! ! the vertical distance from level EXCFNL6A.68
! ! K-1 to level K, except that for EXCFNL6A.69
! ! K=1 it is just the height of the EXCFNL6A.70
! ! lowest atmospheric level. EXCFNL6A.71
&,ZH(P_FIELD) ! IN Boundary layer height (m). EXCFNL6A.72
&,Z_UV(P_FIELD,BL_LEVELS) ! IN For a vertically staggered grid EXCFNL6A.73
! ! with a u,v-level first above the EXCFNL6A.74
! ! surface, Z_UV(*,K) is the height EXCFNL6A.75
! ! of the k-th u,v-level (half level EXCFNL6A.76
! ! k-1/2) above the surface; EXCFNL6A.77
! ! for an unstaggered grid the EXCFNL6A.78
! ! heights of the half-levels EXCFNL6A.79
! ! 0.5 to BL_LEVELS-0.5 should be EXCFNL6A.80
! ! input to elements 1 to BL_LEVELS. EXCFNL6A.81
! ! (1st value not used in either EXCFNL6A.82
! ! case.) EXCFNL6A.83
&,Z_TQ(P_FIELD,BL_LEVELS) ! IN For a vertically staggered grid EXCFNL6A.84
! ! with a u,v-level first above the EXCFNL6A.85
! ! surface, Z_TQ(*,K) is the height EXCFNL6A.86
! ! of the k-th T,q-level (full level EXCFNL6A.87
! ! k) above the surface; EXCFNL6A.88
! ! for an unstaggered grid the EXCFNL6A.89
! ! heights of the half levels EXCFNL6A.90
! ! 1.5 to BL_LEVELS+0.5 should be EXCFNL6A.91
! ! input to elements 1 to BL_LEVELS. EXCFNL6A.92
! ! (value for BL_LEVELS not used EXCFNL6A.93
! ! in either case.) EXCFNL6A.94
! EXCFNL6A.95
&,RHO_UV(P_FIELD,BL_LEVELS) ! IN For a vertically staggered grid EXCFNL6A.96
! ! with a u,v-level first above the EXCFNL6A.97
! ! surface, RHO_UV(*,K) is the EXCFNL6A.98
! ! density at the k-th u,v-level EXCFNL6A.99
! ! above the surface; EXCFNL6A.100
! ! for an unstaggered grid the EXCFNL6A.101
! ! densities at the layer interfaces EXCFNL6A.102
! ! (half-levels) 0.5 to BL_LEVELS-0.5 EXCFNL6A.103
! ! should be input to elements 1 to EXCFNL6A.104
! ! BL_LEVELS. EXCFNL6A.105
! ! (1st value not used in either EXCFNL6A.106
! ! case.) EXCFNL6A.107
&,RHO_TQ(P_FIELD,BL_LEVELS) ! IN For a vertically staggered grid EXCFNL6A.108
! ! with a u,v-level first above the EXCFNL6A.109
! ! surface, RHO_TQ(*,K) is the EXCFNL6A.110
! ! density of the k-th T,q-level EXCFNL6A.111
! ! above the surface; EXCFNL6A.112
! ! for an unstaggered grid the EXCFNL6A.113
! ! densities at the layer interfaces EXCFNL6A.114
! ! (half-levels) 1.5 to BL_LEVELS+0.5 EXCFNL6A.115
! ! should be input to elements 1 to EXCFNL6A.116
! ! BL_LEVELS. EXCFNL6A.117
! ! (value for BL_LEVELS not used EXCFNL6A.118
! ! in either case.) EXCFNL6A.119
! EXCFNL6A.120
&,Z0M(P_FIELD) ! IN Roughness length for momentum (m). EXCFNL6A.121
&,V_S(P_FIELD) ! IN Surface friction velocity (m/s). EXCFNL6A.122
&,FB_SURF(P_FIELD) ! IN Buoyancy flux at the surface over EXCFNL6A.123
! ! density (m^2/s^3). EXCFNL6A.124
&,BFLUX_SURF(P_FIELD) ! IN Surface buoyancy flux (clear air ARN0F405.247
! ! term) (kg/m/s^3). ARN0F405.248
&,BFLUX_SAT_SURF(P_FIELD) ! IN Surface buoyancy flux (cloudy air ARN0F405.249
! ! term) (kg/m/s^3). ARN0F405.250
&,DB_TOP(P_FIELD) ! IN Buoyancy jump across top of b.l EXCFNL6A.126
! ! (m/s^2) EXCFNL6A.127
&,DF_TOP_OVER_CP(P_FIELD) ! IN Radiative flux change at cloud top EXCFNL6A.128
! ! divided by c_P (K.kg/m^2/s). EXCFNL6A.129
&,BT_TOP(P_FIELD) ! IN Buoyancy parameter at the top of EXCFNL6A.133
! ! the b.l. (m/s^2/K). EXCFNL6A.134
&,BTT_TOP(P_FIELD) ! IN In-cloud buoyancy parameter at EXCFNL6A.135
! ! the top of the b.l. (m/s^2/K). EXCFNL6A.136
&,BTC_TOP(P_FIELD) ! IN Cloud fraction weighted buoyancy EXCFNL6A.137
! ! parameter at the top of the b.l. EXCFNL6A.138
&,DB_TOP_CLD(P_FIELD) ! IN In-cloud buoyancy jump at the EXCFNL6A.139
! ! top of the b.l. (m/s^2). EXCFNL6A.140
&,CHI_S_TOP(P_FIELD) ! IN Mixing fraction of just saturated EXCFNL6A.141
! ! mixture at top of the b.l. EXCFNL6A.142
&,ZETA_S(P_FIELD) ! IN Non-cloudy fraction of mixing EXCFNL6A.143
! ! layer for surface forced EXCFNL6A.144
! ! entrainment term. EXCFNL6A.145
&,ZETA_R(P_FIELD) ! IN Non-cloudy fraction of mixing EXCFNL6A.146
! ! layer for cloud top radiative EXCFNL6A.147
! ! cooling entrainment term. EXCFNL6A.148
&,ALPHA_R(P_FIELD) ! IN Fraction of the cloud top EXCFNL6A.149
! ! radiative cooling assumed to EXCFNL6A.150
! ! act above the minimum turbulent EXCFNL6A.151
! ! flux level. EXCFNL6A.152
&,ZC(P_FIELD) ! IN Cloud depth (not cloud fraction EXCFNL6A.153
! ! weighted) (m). EXCFNL6A.154
! EXCFNL6A.155
&,CF(P_FIELD,BL_LEVELS) ! IN Cloud fraction. ARN0F405.251
REAL EXCFNL6A.156
& ZHSC(P_FIELD) ! IN Cloud layer height (m). ARN0F405.252
&,DSCDEPTH(P_FIELD) ! IN Decoupled cloud layer depth (m). ARN0F405.253
&,DB_DSCT(P_FIELD) ! IN Buoyancy parameter at the top of ARN0F405.254
! ! the decoupled Sc layer (m/s^2/K). ARN0F405.255
&,SVL(P_FIELD,BL_LEVELS) ! IN Liquid/frozen water virtual ARN0F405.256
! ! static energy over CP. ARN0F405.257
&,DF_DSCT_OVER_CP(P_FIELD) ! IN Radiative flux change at DSC top ARN0F405.258
! ! divided by c_P (K.kg/m^2/s). ARN0F405.259
&,BT_DSCT(P_FIELD) ! IN Buoyancy parameter at the top of ARN0F405.260
! ! the decoupled Sc (m/s^2/K). ARN0F405.261
&,BTT_DSCT(P_FIELD) ! IN In-cloud buoyancy parameter at ARN0F405.262
! ! the top of the decoupled Sc ARN0F405.263
! ! (m/s^2/K). ARN0F405.264
&,BTC_DSCT(P_FIELD) ! IN Cloud fraction weighted buoyancy ARN0F405.265
! ! parameter at the top of the ARN0F405.266
! ! decoupled Sc layer. ARN0F405.267
&,DB_DSCT_CLD(P_FIELD) ! IN In-cloud buoyancy jump at the ARN0F405.268
! ! top of the decoupled SC (m/s^2). ARN0F405.269
&,CHI_S_DSCT(P_FIELD) ! IN Mixing fraction of just saturated ARN0F405.270
! ! mixture at the top of the ARN0F405.271
! ! decoupled Sc layer. ARN0F405.272
&,ZETA_R_DSC(P_FIELD) ! IN Non-cloudy fraction of decoupled ARN0F405.273
! ! Sc layer for cloud top radiative ARN0F405.274
! ! cooling entrainment term. ARN0F405.275
&,ALPHA_R_DSC(P_FIELD) ! IN Fraction of the cloud top ARN0F405.276
! ! radiative cooling assumed to ARN0F405.277
! ! act above the minimum turbulent ARN0F405.278
! ! flux level for the decoupled Sc. ARN0F405.279
&,ZC_DSC(P_FIELD) ! IN Cloud depth (not cloud fraction ARN0F405.280
! ! weighted) of the decoupled Sc (m). ARN0F405.281
REAL ARN0F405.282
& RHOKM(P_FIELD,2:BL_LEVELS)! OUT Layer k-1 - to - layer k EXCFNL6A.157
! ! turbulent mixing coefficient EXCFNL6A.158
! ! for momentum (kg/m/s). EXCFNL6A.159
&,RHOKH(P_FIELD,2:BL_LEVELS)! OUT Layer k-1 - to - layer k EXCFNL6A.160
! ! turbulent mixing coefficient EXCFNL6A.161
! ! for heat and moisture (kg/m/s). EXCFNL6A.162
&,RHOKM_TOP(P_FIELD,2:BL_LEVELS) ARN0F405.283
! ! OUT Non-local turbulent mixing ARN0F405.284
! ! coefficient for top-down mixing ARN0F405.285
! ! of momentum. ARN0F405.286
&,RHOKH_TOP(P_FIELD,2:BL_LEVELS) ARN0F405.287
! ! OUT Non-local turbulent mixing ARN0F405.288
! ! coefficient for top-down mixing ARN0F405.289
! ! of heat and moisture. ARN0F405.290
!* EXCFNL6A.163
!*L--------------------------------------------------------------------- EXCFNL6A.164
EXTERNAL TIMER EXCFNL6A.165
!* EXCFNL6A.166
!*L--------------------------------------------------------------------- EXCFNL6A.167
! Local and other symbolic constants :- EXCFNL6A.168
*CALL C_LHEAT
EXCFNL6A.169
*CALL C_R_CP
EXCFNL6A.170
*CALL C_EPSLON
EXCFNL6A.171
*CALL C_VKMAN
EXCFNL6A.172
REAL A_ENT_1,A_ENT_2,A_ENT_SHR,C_T ARN0F405.291
PARAMETER ( EXCFNL6A.174
& A_ENT_1=0.23 ! Entrainment parameter. EXCFNL6A.175
&,A_ENT_2=0.056 ! Entrainment parameter. EXCFNL6A.176
&,A_ENT_SHR=5.0 ! Entrainment parameter. ARN0F405.292
&,C_T=1.0 ! Parameter in Zilitinkevich term. EXCFNL6A.177
&) EXCFNL6A.178
!* EXCFNL6A.179
! EXCFNL6A.180
! Define local storage. EXCFNL6A.181
! EXCFNL6A.182
! (a) Workspace. EXCFNL6A.183
! EXCFNL6A.184
REAL EXCFNL6A.185
& W_M_TOP(P_FIELD) ! Turbulent velocity scale for momentum EXCFNL6A.186
! ! evaluated at the top of the b.l. EXCFNL6A.187
&,W_H_TOP(P_FIELD) ! Turbulent velocity scale for scalars EXCFNL6A.188
! ! evaluated at the top of the b.l. EXCFNL6A.189
&,V_TOP(P_FIELD) ! Velocity scale for top-down mixing. ARN0F405.293
&,PRANDTL_TOP(P_FIELD) ! Turbulent Prandtl number EXCFNL6A.190
! ! evaluated at the top of the b.l. EXCFNL6A.191
&,KH_TOP_FACTOR(P_FIELD) ! Factor to ensure K_H profile is EXCFNL6A.192
! ! continuous at z_h. EXCFNL6A.193
&,KM_TOP_FACTOR(P_FIELD) ! Factor to ensure K_M profile is EXCFNL6A.194
! ! continuous at z_h. EXCFNL6A.195
&,KH_SCT_FACTOR(P_FIELD) ! Factor to ensure top-down K_H profile ARN0F405.294
! ! is continuous at z_h. ARN0F405.295
&,KM_SCT_FACTOR(P_FIELD) ! Factor to ensure top-down K_M profile ARN0F405.296
! ! is continuous at z_h. ARN0F405.297
&,KH_DSCT_FACTOR(P_FIELD) ! Factor to ensure K_H profile is ARN0F405.298
! ! continuous at ZHSC. ARN0F405.299
&,KM_DSCT_FACTOR(P_FIELD) ! Factor to ensure K_M profile is ARN0F405.300
! ! continuous at ZHSC. ARN0F405.301
&,V_TOP_DSC(P_FIELD) ! Velocity scale for top-down convection ARN0F405.302
! ! in decoupled Sc layer. ARN0F405.303
&,SVL_PLUME(P_FIELD) ! s_VL of descending plume to find ARN0F405.304
! ! decoupled Sc layer base. ARN0F405.305
&,SCDEPTH(P_FIELD) ! Depth of top-driven mixing in ARN0F405.306
! ! well-mixed Sc layer. ARN0F405.307
! (b) Scalars. EXCFNL6A.196
! EXCFNL6A.197
REAL EXCFNL6A.198
& PRANDTL ! Turbulent Prandtl number. EXCFNL6A.199
&,ZK_UV ! Height above surface of u,v-level. EXCFNL6A.200
&,ZK_TQ ! Height above surface of T,q-level. EXCFNL6A.201
&,ZH_M ! Height taken as top of the turbulent mixing layer EXCFNL6A.202
! ! for momentum. EXCFNL6A.203
&,W_S_CUBED_UV ! Cube of free-convective velocity scale (u,v-level) EXCFNL6A.204
&,W_S_CUBED_TQ ! Cube of free-convective velocity scale (T,q-level) EXCFNL6A.205
&,W_M_UV ! Turbulent velocity scale for momentum (u,v-level). EXCFNL6A.206
&,W_M_TQ ! Turbulent velocity scale for momentum (T,q-level). EXCFNL6A.207
&,W_H_UV ! Turbulent velocity scale for scalars (u,v-level). EXCFNL6A.208
&,SF_TERM ! Surface buoyancy flux term for entrainment paramn. ARN0F405.308
&,SF_SHEAR_TERM ARN0F405.309
! ! Surface shear term for the entrainment paramn. ARN0F405.310
&,IR_TERM ! Indirect radiative term for entrainment paramn. EXCFNL6A.210
&,DR_TERM ! Direct radiative term for entrainment paramn. EXCFNL6A.211
&,EVAP_TERM ! Evaporative term in entrainment parametrization. EXCFNL6A.212
&,ZIL_CORR ! Zilitinkevich correction term in entrn. paramn. EXCFNL6A.213
&,ZETA_S_FAC ! Factor involving ZETA_S. ARN0F405.311
&,ZETA_R_SQ ! ZETA_R squared. EXCFNL6A.215
&,ZR ! Ratio ZC/ZH. EXCFNL6A.216
&,Z_PR ! Height above surface layer. ARN0F405.312
&,ZH_PR ! Height of cloud layer top above surface layer. ARN0F405.313
&,ZCML_BASE ! Height of base of cloud mixed layer. ARN0F405.314
&,RHOKH_ENT ! entrainment eddy viscosity. ARN0F405.315
&,FRAC_TOP ! Fraction of turbulent mixing driven from the top. ARN0F405.316
&,FACTOR ! Temporary scalar. ARN0F405.317
&,ENT_FACTOR ! Factor to weight entrainment by CF. ARN0F405.318
&,DTDZ_PAR ! Eddy turnover timescale. ARN0F405.319
! EXCFNL6A.217
INTEGER EXCFNL6A.218
& I ! Loop counter (horizontal field index). EXCFNL6A.219
&,K ! Loop counter (vertical level index). EXCFNL6A.220
! EXCFNL6A.221
LOGICAL ARN0F405.320
& SCBASE(P_FIELD) ! Flag to signal base of convective mixed ARN0F405.321
! ! layer reached. ARN0F405.322
! ARN0F405.323
IF (LTIMER) THEN EXCFNL6A.222
CALL TIMER
('EXCF_NL ',3) EXCFNL6A.223
ENDIF EXCFNL6A.224
! EXCFNL6A.225
!----------------------------------------------------------------------- EXCFNL6A.226
!! 0. Calculate top-of-b.l. velocity scales and Prandtl number. ARN0F405.324
!----------------------------------------------------------------------- EXCFNL6A.228
! EXCFNL6A.229
DO I = P1,P1-1+P_POINTS EXCFNL6A.230
ARN0F405.325
V_TOP(I) = 0.0 ARN0F405.326
V_TOP_DSC(I) = 0.0 ARN0F405.327
SCBASE(I)=.FALSE. ARN0F405.328
SVL_PLUME(I) = 0.0 ARN0F405.329
ARN0F405.330
IF (FB_SURF(I) .GE. 0.0) THEN EXCFNL6A.231
! EXCFNL6A.232
! By definition the top of the b.l. is in the 'outer layer' so EXCFNL6A.233
! the free-convective velocity scale cubed is EXCFNL6A.234
! EXCFNL6A.235
IF (COUPLED(I)) THEN ARN0F405.331
W_S_CUBED_UV = 0.25 * ZHSC(I) * FB_SURF(I) ARN0F405.332
ELSE ARN0F405.333
W_S_CUBED_UV = 0.25 * ZH(I) * FB_SURF(I) EXCFNL6A.236
ENDIF ARN0F405.334
! EXCFNL6A.237
! Turbulent velocity scale for momentum EXCFNL6A.238
! EXCFNL6A.239
W_M_TOP(I) = (V_S(I)*V_S(I)*V_S(I) + W_S_CUBED_UV)**(1.0/3.0) EXCFNL6A.240
! EXCFNL6A.241
! Turbulent Prandtl number and velocity scale for scalars EXCFNL6A.242
! EXCFNL6A.243
PRANDTL_TOP(I) = 0.75 * ( V_S(I)*V_S(I)*V_S(I)*V_S(I) + EXCFNL6A.244
& (4.0/25.0)*W_S_CUBED_UV*W_M_TOP(I) ) / EXCFNL6A.245
& ( V_S(I)*V_S(I)*V_S(I)*V_S(I) + EXCFNL6A.246
& (8.0/25.0)*W_S_CUBED_UV*W_M_TOP(I) ) EXCFNL6A.247
W_H_TOP(I) = W_M_TOP(I) / PRANDTL_TOP(I) EXCFNL6A.248
ELSE EXCFNL6A.249
W_M_TOP(I) = V_S(I) EXCFNL6A.250
PRANDTL_TOP(I) = 0.75 EXCFNL6A.251
W_H_TOP(I) = W_M_TOP(I) / PRANDTL_TOP(I) EXCFNL6A.252
ENDIF EXCFNL6A.253
ENDDO EXCFNL6A.254
! EXCFNL6A.255
!----------------------------------------------------------------------- EXCFNL6A.256
!! 1. Loop round levels; calculate the top-of-b.l. entrainment EXCFNL6A.257
!! mixing coefficients. EXCFNL6A.258
!----------------------------------------------------------------------- EXCFNL6A.259
! EXCFNL6A.260
DO K=2,BL_LEVELS EXCFNL6A.261
DO I=P1,P1+P_POINTS-1 EXCFNL6A.262
! EXCFNL6A.263
!----------------------------------------------------------------------- EXCFNL6A.264
!! 1.2 Calculate top-of-b.l. entrainment mixing coefficients EXCFNL6A.265
!! and store b.l. top quantities for later use. EXCFNL6A.266
!----------------------------------------------------------------------- EXCFNL6A.267
!! First the top of the surface mixed layer (if not coupled) ARN0F405.335
!----------------------------------------------------------------------- ARN0F405.336
IF ( (K .EQ. NTML(I)+1) .AND. (DB_TOP(I) .GT. 0.0) ARN0F405.337
& .AND. .NOT.COUPLED(I) ) THEN ARN0F405.338
! !----------------------------------------------------------- EXCFNL6A.269
! ! Calculate the surface buoyancy flux term ARN0F405.339
! !----------------------------------------------------------- EXCFNL6A.271
ZETA_S_FAC = (1.0 - ZETA_S(I)) * (1.0 - ZETA_S(I)) ARN0F405.340
SF_TERM = A_ENT_1 * MAX ( 0.0 , ARN0F405.341
& ( (1.0 - ZETA_S_FAC) * BFLUX_SURF(I) ARN0F405.342
& + ZETA_S_FAC * BFLUX_SAT_SURF(I) ) ) ARN0F405.343
! !----------------------------------------------------------- EXCFNL6A.276
! ! Calculate the surface shear term ARN0F405.344
! !----------------------------------------------------------- ARN0F405.345
SF_SHEAR_TERM = A_ENT_SHR * V_S(I) * V_S(I) * V_S(I) ARN0F405.346
& * RHO_UV(I,K) / ZH(I) ARN0F405.347
! !----------------------------------------------------------- ARN0F405.348
! ! Calculate the indirect radiative term EXCFNL6A.277
! !----------------------------------------------------------- EXCFNL6A.278
ZETA_R_SQ = ZETA_R(I)*ZETA_R(I) EXCFNL6A.279
IR_TERM = (BT_TOP(I)*ZETA_R_SQ + BTT_TOP(I)*(1.0-ZETA_R_SQ)) EXCFNL6A.280
& * A_ENT_1 * DF_TOP_OVER_CP(I) ARN0F405.349
! !----------------------------------------------------------- EXCFNL6A.282
! ! Calculate the evaporative term EXCFNL6A.283
! !----------------------------------------------------------- EXCFNL6A.284
ZR = SQRT( ZC(I) / ZH(I) ) EXCFNL6A.285
EVAP_TERM = A_ENT_2 * RHO_UV(I,K) EXCFNL6A.286
& * CHI_S_TOP(I) * CHI_S_TOP(I) EXCFNL6A.287
& * ZR * ZR * ZR * DB_TOP_CLD(I) EXCFNL6A.288
& * SQRT( ZH(I) * DB_TOP(I) ) EXCFNL6A.289
! !----------------------------------------------------------- EXCFNL6A.290
! ! Calculate the direct radiative term EXCFNL6A.291
! !----------------------------------------------------------- EXCFNL6A.292
DR_TERM = BTC_TOP(I) * ALPHA_R(I) * DF_TOP_OVER_CP(I) EXCFNL6A.293
! !----------------------------------------------------------- EXCFNL6A.294
! ! Finally combine terms to calculate the entrainment EXCFNL6A.295
! ! mixing coefficients EXCFNL6A.296
! !----------------------------------------------------------- EXCFNL6A.297
IF (CF(I,NTML(I)) .GE. 0.9) THEN ARN0F405.350
ENT_FACTOR = 1.0 ARN0F405.351
ELSE ARN0F405.352
ENT_FACTOR = EXP(-((0.90-CF(I,NTML(I)))**3.0)/0.075) ARN0F405.353
ENDIF ARN0F405.354
! ARN0F405.355
ZIL_CORR = C_T * ( (SF_TERM + SF_SHEAR_TERM + ENT_FACTOR * ARN0F405.356
& (IR_TERM + EVAP_TERM) ) / ARN0F405.357
& (RHO_UV(I,K) * SQRT(ZH(I))) )**(2.0/3.0) EXCFNL6A.299
ARN0F405.358
RHOKH_ENT = (SF_TERM + SF_SHEAR_TERM ARN0F405.359
& + ENT_FACTOR * (IR_TERM + EVAP_TERM ARN0F405.360
& + DR_TERM)) / ((DB_TOP(I) + ZIL_CORR) * RDZ(I,K) ) ARN0F405.361
ARN0F405.362
V_TOP(I) = ( ENT_FACTOR * (IR_TERM + EVAP_TERM) * ZH(I) / ARN0F405.363
& (A_ENT_1*RHO_UV(I,K)) )**(1.0/3.0) ARN0F405.364
FRAC_TOP = V_TOP(I) / ( V_TOP(I) + W_H_TOP(I) + 1.0E-14 ) ARN0F405.365
ARN0F405.366
RHOKH(I,K) = RHOKH_ENT * ( 1.0 - FRAC_TOP ) ARN0F405.367
RHOKM(I,K) = PRANDTL_TOP(I) * RHOKH(I,K) EXCFNL6A.302
& * RHO_TQ(I,K-1) / RHO_UV(I,K) EXCFNL6A.303
ARN0F405.368
RHOKH_TOP(I,K) = RHOKH_ENT * FRAC_TOP ARN0F405.369
RHOKM_TOP(I,K) = 0.75 * RHOKH_TOP(I,K) ARN0F405.370
& * RHO_TQ(I,K-1) / RHO_UV(I,K) ARN0F405.371
ELSE EXCFNL6A.304
RHOKH(I,K) = 0.0 EXCFNL6A.305
RHOKM(I,K) = 0.0 EXCFNL6A.306
RHOKH_TOP(I,K) = 0.0 ARN0F405.372
RHOKM_TOP(I,K) = 0.0 ARN0F405.373
ENDIF EXCFNL6A.307
!----------------------------------------------------------------------- ARN0F405.374
!! Then the top of the decoupled Sc (if coupled use ZHSC ARN0F405.375
!! length-scale). ARN0F405.376
!----------------------------------------------------------------------- ARN0F405.377
IF ( (K .EQ. NTDSC(I)+1) .AND. (DB_DSCT(I) .GT. 0.0) ) THEN ARN0F405.378
IF (COUPLED(I)) THEN ARN0F405.379
! !-------------------------------------------------------- ARN0F405.380
! ! Calculate the surface buoyancy flux term ARN0F405.381
! !-------------------------------------------------------- ARN0F405.382
ZETA_S_FAC = (1.0 - ZETA_S(I)) * (1.0 - ZETA_S(I)) ARN0F405.383
SF_TERM = A_ENT_1 * MAX ( 0.0 , ARN0F405.384
& ( (1.0 - ZETA_S_FAC) * BFLUX_SURF(I) ARN0F405.385
& + ZETA_S_FAC * BFLUX_SAT_SURF(I) ) ) ARN0F405.386
! !-------------------------------------------------------- ARN0F405.387
! ! Calculate the surface shear term ARN0F405.388
! !-------------------------------------------------------- ARN0F405.389
SF_SHEAR_TERM = A_ENT_SHR * V_S(I) * V_S(I) * V_S(I) ARN0F405.390
& * RHO_UV(I,K) / DSCDEPTH(I) ARN0F405.391
ELSE ARN0F405.392
SF_TERM = 0.0 ARN0F405.393
SF_SHEAR_TERM = 0.0 ARN0F405.394
ENDIF ARN0F405.395
! !----------------------------------------------------------- ARN0F405.396
! ! Calculate the indirect radiative term ARN0F405.397
! !----------------------------------------------------------- ARN0F405.398
ZETA_R_SQ = ZETA_R_DSC(I)*ZETA_R_DSC(I) ARN0F405.399
IR_TERM = (BT_DSCT(I)*ZETA_R_SQ+BTT_DSCT(I)*(1.0-ZETA_R_SQ)) ARN0F405.400
& * A_ENT_1 * DF_DSCT_OVER_CP(I) ARN0F405.401
! !----------------------------------------------------------- ARN0F405.402
! ! Calculate the evaporative term ARN0F405.403
! !----------------------------------------------------------- ARN0F405.404
ZR = SQRT( ZC_DSC(I) / DSCDEPTH(I) ) ARN0F405.405
EVAP_TERM = A_ENT_2*RHO_UV(I,K) *CHI_S_DSCT(I)*CHI_S_DSCT(I) ARN0F405.406
& * ZR * ZR * ZR * DB_DSCT_CLD(I) ARN0F405.407
& * SQRT( DSCDEPTH(I) * DB_DSCT(I) ) ARN0F405.408
! !----------------------------------------------------------- ARN0F405.409
! ! Calculate the direct radiative term ARN0F405.410
! !----------------------------------------------------------- ARN0F405.411
DR_TERM = BTC_DSCT(I) * ALPHA_R_DSC(I) * DF_DSCT_OVER_CP(I) ARN0F405.412
! !----------------------------------------------------------- ARN0F405.413
! ! Finally combine terms to calculate the entrainment ARN0F405.414
! ! mixing coefficients ARN0F405.415
! !----------------------------------------------------------- ARN0F405.416
ARN0F405.417
IF (CF(I,NTDSC(I)).GE.0.9) THEN ARN0F405.418
ENT_FACTOR = 1.0 ARN0F405.419
ELSE ARN0F405.420
ENT_FACTOR = EXP(-((0.90-CF(I,NTDSC(I)))**3.0)/0.075) ARN0F405.421
ENDIF ARN0F405.422
ARN0F405.423
V_TOP_DSC(I) =( ENT_FACTOR * (IR_TERM + EVAP_TERM) * ARN0F405.424
& DSCDEPTH(I) / ARN0F405.425
& (A_ENT_1*RHO_UV(I,K)) )**(1.0/3.0) ARN0F405.426
ZIL_CORR = C_T * ( (SF_TERM + SF_SHEAR_TERM + ARN0F405.427
& ENT_FACTOR * (IR_TERM + EVAP_TERM)) / ARN0F405.428
& (RHO_UV(I,K) * SQRT(DSCDEPTH(I))) )**(2.0/3.0) ARN0F405.429
RHOKH_TOP(I,K) = ( SF_TERM + SF_SHEAR_TERM ARN0F405.430
& + ENT_FACTOR * (IR_TERM + EVAP_TERM + DR_TERM) ) ARN0F405.431
& / ((DB_DSCT(I) + ZIL_CORR) * RDZ(I,K) ) ARN0F405.432
RHOKM_TOP(I,K) = 0.75 * RHOKH_TOP(I,K) ARN0F405.433
& * RHO_TQ(I,K-1) / RHO_UV(I,K) ARN0F405.434
ENDIF ARN0F405.435
ENDDO ARN0F405.436
ENDDO ARN0F405.437
!----------------------------------------------------------------------- ARN0F405.438
!! 1.3 Parcel descent to find base of decoupled Sc layer (if there is ARN0F405.439
!! one) can now include the entrainment source and so give a more ARN0F405.440
!! accurate value for DSCDEPTH. ARN0F405.441
!----------------------------------------------------------------------- ARN0F405.442
! Take the current radiatively determined DSCDEPTH as a starting ARN0F405.443
! point (although restricted to less than 1.2*ZC in case the ARN0F405.444
! presence of entrainment makes the parcel positively buoyant ARN0F405.445
! below cloud base - assume the cloud is well mixed and allow ARN0F405.446
! for an overshoot). Assume that the cloudy air parcel (with ARN0F405.447
! s_VL taken from NTDSC assumed to be representative of the ARN0F405.448
! convectively mixed layer) mixes with entrained air and cools ARN0F405.449
! radiatively on a timescale given by the eddy turnover time ARN0F405.450
! ( = DSCDEPTH/V_TOP_DSC) and a length scale of DSCDEPTH so the ARN0F405.451
! flux into the parcel is multiplied by DTDZ_PAR = 1.0/V_TOP_DSC. ARN0F405.452
! ARN0F405.453
! NOTE (1): if V_TOP_DSC = 0, DSCDEPTH is unchanged from its ARN0F405.454
! value estimated in KMKH. ARN0F405.455
! NOTE (2): the entrainment calculation could be repeated ARN0F405.456
! using this new value of DSCDEPTH but the dependence ARN0F405.457
! on DSCDEPTH is small so this isn't done. ARN0F405.458
! NOTE (3): the radiative increment has already been added at ARN0F405.459
! this stage suggesting SVL_PARCEL may have double ARN0F405.460
! counted its radiative contribution (leading to less ARN0F405.461
! decoupling) but it makes little difference to the ARN0F405.462
! results. ARN0F405.463
!----------------------------------------------------------------------- ARN0F405.464
DO I = P1,P1-1+P_POINTS ARN0F405.465
IF ( V_TOP_DSC(I) .GT. 0.0 ) THEN ARN0F405.466
K=NTDSC(I) ARN0F405.467
IF ( NTDSC(I) .LE. 2 ) THEN ARN0F405.468
! ARN0F405.469
! ! svl_plume not needed ARN0F405.470
! ARN0F405.471
DSCDEPTH(I) = Z_UV(I,K+1) ARN0F405.472
SCBASE(I) = .TRUE. ARN0F405.473
ELSE ARN0F405.474
DTDZ_PAR = 1.0 / V_TOP_DSC(I) ARN0F405.475
SVL_PLUME(I) = ! plume perturbation ARN0F405.476
& ( RDZ(I,K+1) * RHOKH_TOP(I,K+1) * (SVL(I,K+1)-SVL(I,K)) ARN0F405.477
& - DF_DSCT_OVER_CP(I) ) * DTDZ_PAR / RHO_UV(I,K+1) ARN0F405.478
IF ( Z_UV(I,K-1) .GE. ZHSC(I)-ZC_DSC(I) .AND. ARN0F405.479
& SVL(I,K-1) .LT. SVL(I,K) ) THEN ARN0F405.480
! ARN0F405.481
! ! cloud layer is at least two layers thick and there is ARN0F405.482
! ! an inversion near cloud top, take layer NTDSC-1 ARN0F405.483
! ! as representative ARN0F405.484
! ARN0F405.485
SVL_PLUME(I) = SVL(I,K-1) + SVL_PLUME(I) ARN0F405.486
ELSE ARN0F405.487
! ARN0F405.488
! ! cloud layer less than two layers thick so take ARN0F405.489
! ! layer NTDSC as representative ARN0F405.490
! ARN0F405.491
SVL_PLUME(I) = SVL(I,K) + SVL_PLUME(I) ARN0F405.492
ENDIF ARN0F405.493
ENDIF ARN0F405.494
ENDIF ARN0F405.495
ENDDO ARN0F405.496
!----------------------------------------------------------------------- ARN0F405.497
! Loop over levels to find where plume becomes positively buoyant ARN0F405.498
!----------------------------------------------------------------------- ARN0F405.499
DO K=BL_LEVELS-1,1,-1 ARN0F405.500
DO I = P1,P1-1+P_POINTS ARN0F405.501
ARN0F405.502
IF ( V_TOP_DSC(I).GT.0.0 .AND. NTDSC(I).GT.2 ) THEN ARN0F405.503
IF ( .NOT.SCBASE(I) .AND. ARN0F405.504
! not yet found Sc base ARN0F405.505
& ( SVL_PLUME(I) .GT. SVL(I,K) ARN0F405.506
! plume positively buoyant ARN0F405.507
& .OR. K .EQ. 1 ) ) ARN0F405.508
! plume reached the surface ARN0F405.509
& THEN ARN0F405.510
DSCDEPTH(I) = MAX( ZHSC(I)-Z_UV(I,K+1), ARN0F405.511
& MIN(1.2*ZC_DSC(I),DSCDEPTH(I)) ) ARN0F405.512
! ARN0F405.513
! depth must be at least MIN( 1.2*ZC , ARN0F405.514
! radiatively-determined-depth ) ARN0F405.515
! ARN0F405.516
SCBASE(I)=.TRUE. ARN0F405.517
ENDIF ARN0F405.518
ENDIF ARN0F405.519
ENDDO ARN0F405.520
ENDDO ARN0F405.521
!----------------------------------------------------------------------- ARN0F405.522
!! 1.4 Identical plume descent to the above but to find depth of ARN0F405.523
! top-down mixing in well mixed Sc layer, SCDEPTH. ARN0F405.524
!----------------------------------------------------------------------- ARN0F405.525
DO I = P1,P1-1+P_POINTS ARN0F405.526
SCBASE(I) = .FALSE. ARN0F405.527
SVL_PLUME(I) = 0.0 ARN0F405.528
SCDEPTH(I) = 0.0 ! default for V_TOP eq 0 ARN0F405.529
ENDDO ARN0F405.530
DO I = P1,P1-1+P_POINTS ARN0F405.531
IF ( V_TOP(I) .GT. 0.0 ) THEN ARN0F405.532
K=NTML(I) ARN0F405.533
IF ( NTML(I).LE.2 ) THEN ARN0F405.534
! ARN0F405.535
! ! svl_plume not needed ARN0F405.536
! ARN0F405.537
SCDEPTH(I) = Z_UV(I,K+1) ARN0F405.538
SCBASE(I) = .TRUE. ARN0F405.539
ELSE ARN0F405.540
DTDZ_PAR = 1.0 / V_TOP(I) ARN0F405.541
SVL_PLUME(I) = ! plume perturbation ARN0F405.542
& ( ( SVL(I,K+1)-SVL(I,K) ) * RDZ(I,K+1) ARN0F405.543
& * ( RHOKH(I,K+1)+RHOKH_TOP(I,K+1) ) ARN0F405.544
& - DF_TOP_OVER_CP(I) ) * DTDZ_PAR / RHO_UV(I,K+1) ARN0F405.545
IF ( Z_UV(I,K-1) .GE. ZH(I)-ZC(I) .AND. ARN0F405.546
& SVL(I,K-1) .LT. SVL(I,K) ) THEN ARN0F405.547
! ARN0F405.548
! ! cloud layer is at least two layers thick and there is ARN0F405.549
! ! an inversion near cloud top, take layer NTML-1 as ARN0F405.550
! ! representative ARN0F405.551
! ARN0F405.552
SVL_PLUME(I) = SVL(I,K-1) + SVL_PLUME(I) ARN0F405.553
ELSE ARN0F405.554
! ARN0F405.555
! ! cloud layer less than two layers thick so take layer ARN0F405.556
! ! NTDSC as representative ARN0F405.557
! ARN0F405.558
SVL_PLUME(I) = SVL(I,K) + SVL_PLUME(I) ARN0F405.559
ENDIF ARN0F405.560
ENDIF ARN0F405.561
ENDIF ARN0F405.562
ENDDO ARN0F405.563
!----------------------------------------------------------------------- ARN0F405.564
! Loop over levels to find where plume becomes positively buoyant ARN0F405.565
!----------------------------------------------------------------------- ARN0F405.566
DO K=BL_LEVELS-1,1,-1 ARN0F405.567
DO I = P1,P1-1+P_POINTS ARN0F405.568
ARN0F405.569
IF ( V_TOP(I).GT.0.0 .AND. NTML(I).GT.2 ) THEN ARN0F405.570
IF ( .NOT.SCBASE(I) .AND. ARN0F405.571
! not yet found scbase ARN0F405.572
& (SVL_PLUME(I) .GT. SVL(I,K) ARN0F405.573
! plume positively buoyant ARN0F405.574
& .OR. K .EQ. 1 ) ) ARN0F405.575
! reached the surface ARN0F405.576
& THEN ARN0F405.577
SCDEPTH(I) = MAX( ZH(I)-Z_UV(I,K+1), 1.2*ZC(I) ) ARN0F405.578
! ! depth must be at least 1.2*ZC ARN0F405.579
SCBASE(I)=.TRUE. ARN0F405.580
ENDIF ARN0F405.581
ENDIF ARN0F405.582
ENDDO ARN0F405.583
ENDDO ARN0F405.584
! ARN0F405.585
!----------------------------------------------------------------------- ARN0F405.586
! Calculate factors required to ensure that the non-local turbulent ARN0F405.587
! mixing coefficient profiles are continuous as the entrainment ARN0F405.588
! level is approached. ARN0F405.589
!----------------------------------------------------------------------- ARN0F405.590
! ARN0F405.591
DO I = P1,P1-1+P_POINTS ARN0F405.592
K=NTML(I)+1 ARN0F405.593
! ! for cubic form of KH and KM: ARN0F405.594
KH_TOP_FACTOR(I) = MAX( 0.7 , 1.0 - SQRT( RHOKH(I,K) / EXCFNL6A.310
& ( RHO_UV(I,K)*W_H_TOP(I)*VKMAN*ZH(I) ) ) ) EXCFNL6A.311
KM_TOP_FACTOR(I) = MAX( 0.7 , 1.0 - SQRT( RHOKM(I,K) / EXCFNL6A.312
& ( RHO_TQ(I,K-1)*W_M_TOP(I)*VKMAN*ZH(I) ) ) ) EXCFNL6A.313
! EXCFNL6A.314
! ! for quadratic form of KH and KM: ARN0F405.595
! KH_TOP_FACTOR(I) = MAX( 0.9 , 1.0 - RHOKH(I,K) / EXCFNL6A.316
! & ( RHO_UV(I,K)*W_H_TOP(I)*VKMAN*ZH(I) ) ) EXCFNL6A.317
! KM_TOP_FACTOR(I) = MAX( 0.9 , 1.0 - RHOKM(I,K) / EXCFNL6A.318
! & ( RHO_TQ(I,K-1)*W_M_TOP(I)*VKMAN*ZH(I) ) ) EXCFNL6A.319
! EXCFNL6A.320
Z_PR = MIN( 0.9*ZH(I) , SCDEPTH(I) ) ARN0F405.596
FACTOR = 0.85 * RHO_UV(I,K) * V_TOP(I) * VKMAN * Z_PR ARN0F405.597
IF ( FACTOR .GT. 0.0) THEN ARN0F405.598
KH_SCT_FACTOR(I) = 1.0 - ARN0F405.599
& ( (RHOKH_TOP(I,K)*RHOKH_TOP(I,K)) / (FACTOR*FACTOR) ) ARN0F405.600
ELSE ARN0F405.601
KH_SCT_FACTOR(I) = 1.0 ARN0F405.602
ENDIF EXCFNL6A.321
Z_PR = MIN( 0.9*Z_TQ(I,K-1) , SCDEPTH(I) ) ARN0F405.603
FACTOR = 0.85 * RHO_TQ(I,K-1) * V_TOP(I) * VKMAN * Z_PR * 0.75 ARN0F405.604
IF ( FACTOR .GT. 0.0) THEN ARN0F405.605
KM_SCT_FACTOR(I) = 1.0 - ARN0F405.606
& ( (RHOKM_TOP(I,K)*RHOKM_TOP(I,K)) / (FACTOR*FACTOR) ) ARN0F405.607
ELSE ARN0F405.608
KM_SCT_FACTOR(I) = 1.0 ARN0F405.609
ENDIF ARN0F405.610
! ARN0F405.611
! !--------------------------------------------------------------- ARN0F405.612
! ! Set up factors to ensure K profile continuity at ZHSC; ARN0F405.613
! ! no need to limit size of factor as precise shape of top-down ARN0F405.614
! ! mixing profile not important. ARN0F405.615
! !--------------------------------------------------------------- ARN0F405.616
! ARN0F405.617
IF (NTDSC(I) .GT. 0) THEN ARN0F405.618
! !------------------------------------------------------------- ARN0F405.619
! ! Only calculate _DSCT_FACTORs when a decoupled stratocumulus ARN0F405.620
! ! layer exists, i.e. NTDSC > 0. ARN0F405.621
! !------------------------------------------------------------- ARN0F405.622
K=NTDSC(I)+1 ARN0F405.623
Z_PR = MAX(0.0 , MIN( ZHSC(I) - 0.1*ZH(I) , DSCDEPTH(I) ) ) ARN0F405.624
FACTOR = 0.85*RHO_UV(I,K)*V_TOP_DSC(I)*VKMAN*Z_PR ARN0F405.625
IF ( FACTOR .GT. 0.0) THEN ARN0F405.626
KH_DSCT_FACTOR(I) = 1.0 - ARN0F405.627
& ( (RHOKH_TOP(I,K)*RHOKH_TOP(I,K)) / (FACTOR*FACTOR) ) ARN0F405.628
ELSE ARN0F405.629
KH_DSCT_FACTOR(I) = 1.0 ARN0F405.630
ENDIF ARN0F405.631
ARN0F405.632
Z_PR = MAX(0.0, MIN( Z_TQ(I,K-1) - 0.1*Z_TQ(I,NTML(I)) , ARN0F405.633
& DSCDEPTH(I) ) ) ARN0F405.634
FACTOR = 0.85*RHO_TQ(I,K-1)*V_TOP_DSC(I)*VKMAN*Z_PR*0.75 ARN0F405.635
IF ( FACTOR .GT. 0.0) THEN ARN0F405.636
KM_DSCT_FACTOR(I) = 1.0 - ARN0F405.637
& ( (RHOKM_TOP(I,K)*RHOKM_TOP(I,K)) / (FACTOR*FACTOR) ) ARN0F405.638
ELSE ARN0F405.639
KM_DSCT_FACTOR(I) = 1.0 ARN0F405.640
ENDIF ARN0F405.641
ENDIF ARN0F405.642
ENDDO EXCFNL6A.322
! EXCFNL6A.324
!----------------------------------------------------------------------- EXCFNL6A.325
!! 2. Loop around levels again calculating height dependent turbulent EXCFNL6A.326
!! transport coefficients within the mixing layer. EXCFNL6A.327
!----------------------------------------------------------------------- EXCFNL6A.328
! EXCFNL6A.329
DO K=2,BL_LEVELS EXCFNL6A.330
DO I = P1,P1-1+P_POINTS EXCFNL6A.331
! EXCFNL6A.333
! Calculate the height of u,v-level above the surface EXCFNL6A.334
! EXCFNL6A.335
ZK_UV = Z_UV(I,K) + Z0M(I) EXCFNL6A.336
! EXCFNL6A.337
! Calculate the height of T,q-level above the surface EXCFNL6A.338
! EXCFNL6A.339
ZK_TQ = Z_TQ(I,K-1) + Z0M(I) EXCFNL6A.340
! EXCFNL6A.341
! !------------------------------------------------------------- ARN0F405.643
! ! Calculate RHOK(H/M)_TOP, top-down turbulent mixing profiles ARN0F405.644
! ! for the surface mixed layer. ARN0F405.645
! ! This is a variation on an up-side-down version of the cubic ARN0F405.646
! ! surface-forced profiles below. Implement between at least ARN0F405.647
! ! the top of the `surface layer' (at Z=0.1*ZH) and ZH. ARN0F405.648
! !------------------------------------------------------------- ARN0F405.649
! ARN0F405.650
ZCML_BASE = MAX( 0.1*ZH(I) , ZH(I)-SCDEPTH(I) ) ARN0F405.651
IF ( ZK_UV .LT. ZH(I) .AND. ARN0F405.652
& ZK_UV .GT. ZCML_BASE ) THEN ARN0F405.653
Z_PR = ZK_UV - ZCML_BASE ARN0F405.654
ZH_PR = ZH(I) - ZCML_BASE ARN0F405.655
RHOKH_TOP(I,K) = RHO_UV(I,K) * V_TOP(I) * 0.85 * VKMAN * ARN0F405.656
& SQRT( 1.0 - KH_SCT_FACTOR(I)*Z_PR/ZH_PR ) ARN0F405.657
& * Z_PR * Z_PR / ZH_PR ARN0F405.658
ENDIF ARN0F405.659
IF (NTDSC(I) .GT. 0) THEN ARN0F405.660
! !------------------------------------------------------------- ARN0F405.661
! ! Only add contribution to top-down mixing coefficient ARN0F405.662
! ! profiles for decoupled stratocumulus layers when ARN0F405.663
! ! one exists, i.e. NTDSC > 0. ARN0F405.664
! !------------------------------------------------------------- ARN0F405.665
ZCML_BASE = MAX( 0.1*ZH(I) , ZHSC(I)-DSCDEPTH(I) ) ARN0F405.666
IF ( ZK_UV .LT. ZHSC(I) .AND. ARN0F405.667
& ZK_UV .GT. ZCML_BASE ) THEN ARN0F405.668
! !----------------------------------------------------------- ARN0F405.669
! ! Calculate RHOK(H/M)_TOP, top-down turbulent mixing ARN0F405.670
! ! profiles and add to any generated in the surface mixing ARN0F405.671
! ! layer. ARN0F405.672
! ! This is a variation on an up-side-down version of the ARN0F405.673
! ! cubic surface-forced profiles above. Implement between ARN0F405.674
! ! at least the top of the `surface layer' (at Z=0.1*ZH) and ARN0F405.675
! ! ZHSC. ARN0F405.676
! !----------------------------------------------------------- ARN0F405.677
Z_PR = ZK_UV - ZCML_BASE ARN0F405.678
ZH_PR = ZHSC(I) - ZCML_BASE ARN0F405.679
RHOKH_TOP(I,K) = RHOKH_TOP(I,K) + ARN0F405.680
& RHO_UV(I,K)*V_TOP_DSC(I)*0.85*VKMAN* ARN0F405.681
& SQRT( 1.0 - KH_DSCT_FACTOR(I)*Z_PR/ZH_PR ) ARN0F405.682
& * Z_PR * Z_PR / ZH_PR ARN0F405.683
ENDIF ARN0F405.684
ENDIF ARN0F405.685
! ARN0F405.686
ZCML_BASE = MAX( 0.1*Z_TQ(I,NTML(I)) , ARN0F405.687
& Z_TQ(I,NTML(I))-SCDEPTH(I) ) ARN0F405.688
IF ( ZK_TQ .LT. Z_TQ(I,NTML(I)) .AND. ARN0F405.689
& ZK_TQ .GT. ZCML_BASE ) THEN ARN0F405.690
Z_PR = ZK_TQ - ZCML_BASE ARN0F405.691
ZH_PR = Z_TQ(I,NTML(I)) - ZCML_BASE ARN0F405.692
RHOKM_TOP(I,K) = 0.75 * RHO_TQ(I,K-1) * V_TOP(I) * 0.85 * ARN0F405.693
& VKMAN * SQRT( 1.0 - KM_SCT_FACTOR(I)*Z_PR/ZH_PR ) ARN0F405.694
& * Z_PR * Z_PR / ZH_PR ARN0F405.695
ENDIF ARN0F405.696
IF (NTDSC(I) .GT. 0) THEN ARN0F405.697
! !------------------------------------------------------------- ARN0F405.698
! ! Only add contribution to top-down mixing coefficient ARN0F405.699
! ! profiles for decoupled stratocumulus layers when ARN0F405.700
! ! one exists, i.e. NTDSC > 0. ARN0F405.701
! !------------------------------------------------------------- ARN0F405.702
ZCML_BASE = MAX( 0.1*Z_TQ(I,NTML(I)) , ARN0F405.703
& Z_TQ(I,NTDSC(I))-DSCDEPTH(I) ) ARN0F405.704
IF ( ZK_TQ .LT. Z_TQ(I,NTDSC(I)) .AND. ARN0F405.705
& ZK_TQ .GT. ZCML_BASE ) THEN ARN0F405.706
Z_PR = ZK_TQ - ZCML_BASE ARN0F405.707
ZH_PR = Z_TQ(I,NTDSC(I)) - ZCML_BASE ARN0F405.708
RHOKM_TOP(I,K) = RHOKM_TOP(I,K) + ARN0F405.709
& 0.75*RHO_TQ(I,K-1)*V_TOP_DSC(I)*0.85*VKMAN* ARN0F405.710
& SQRT( 1.0 - KM_DSCT_FACTOR(I)*Z_PR/ZH_PR ) ARN0F405.711
& * Z_PR * Z_PR / ZH_PR ARN0F405.712
ENDIF ARN0F405.713
ENDIF ARN0F405.714
! ARN0F405.715
IF (FB_SURF(I) .GE. 0.0) THEN ARN0F405.716
! Calculate the free-convective scaling velocity at z(k) EXCFNL6A.342
! EXCFNL6A.343
IF (ZK_UV .LE. 0.1*ZH(I)) THEN EXCFNL6A.344
! EXCFNL6A.345
! Surface layer calculation EXCFNL6A.346
! EXCFNL6A.347
W_S_CUBED_UV = 2.5 * ZK_UV * FB_SURF(I) EXCFNL6A.348
ELSE EXCFNL6A.349
! EXCFNL6A.350
! Outer layer calculation EXCFNL6A.351
! EXCFNL6A.352
IF (COUPLED(I)) THEN ! coupled and cloudy ARN0F405.717
W_S_CUBED_UV = 0.25 * ZHSC(I) * FB_SURF(I) ARN0F405.718
ELSE ARN0F405.719
W_S_CUBED_UV = 0.25 * ZH(I) * FB_SURF(I) EXCFNL6A.353
ENDIF EXCFNL6A.354
ENDIF ARN0F405.720
IF (ZK_TQ .LE. 0.1*Z_TQ(I,NTML(I))) THEN ARN0F405.721
! EXCFNL6A.356
! Surface layer calculation EXCFNL6A.357
! EXCFNL6A.358
W_S_CUBED_TQ = 2.5 * ZK_TQ * FB_SURF(I) EXCFNL6A.359
ELSE EXCFNL6A.360
! EXCFNL6A.361
! Outer layer calculation EXCFNL6A.362
! EXCFNL6A.363
IF (COUPLED(I)) THEN ! coupled and cloudy ARN0F405.722
W_S_CUBED_TQ = 0.25 * ZHSC(I) * FB_SURF(I) ARN0F405.723
ELSE ARN0F405.724
W_S_CUBED_TQ = 0.25 * ZH(I) * FB_SURF(I) EXCFNL6A.364
ENDIF ARN0F405.725
ARN0F405.726
ENDIF EXCFNL6A.365
! EXCFNL6A.366
! Turbulent velocity scale for momentum EXCFNL6A.367
! EXCFNL6A.368
W_M_UV = (V_S(I)*V_S(I)*V_S(I) + W_S_CUBED_UV)**(1.0/3.0) EXCFNL6A.369
! EXCFNL6A.370
W_M_TQ = (V_S(I)*V_S(I)*V_S(I) + W_S_CUBED_TQ)**(1.0/3.0) EXCFNL6A.371
! EXCFNL6A.372
! Turbulent Prandtl number and velocity scale for scalars EXCFNL6A.373
! EXCFNL6A.374
PRANDTL = 0.75 * ( V_S(I)*V_S(I)*V_S(I)*V_S(I) + EXCFNL6A.375
& (4.0/25.0)*W_S_CUBED_UV*W_M_UV ) / EXCFNL6A.376
& ( V_S(I)*V_S(I)*V_S(I)*V_S(I) + EXCFNL6A.377
& (8.0/25.0)*W_S_CUBED_UV*W_M_UV ) EXCFNL6A.378
W_H_UV = W_M_UV / PRANDTL EXCFNL6A.379
! EXCFNL6A.380
IF ( K .LE. NTML(I) ) THEN EXCFNL6A.381
! !--------------------------------------------------------- EXCFNL6A.382
! ! Calculate RHOKH(w_h,z/z_h) EXCFNL6A.383
! !--------------------------------------------------------- EXCFNL6A.384
! N.B. ZH(I) = Z_UV(I,NTML(I)+1) EXCFNL6A.385
! EXCFNL6A.386
! with cubic form EXCFNL6A.387
! EXCFNL6A.388
RHOKH(I,K) = RHO_UV(I,K) * W_H_UV * VKMAN * ZK_UV * EXCFNL6A.389
& ( 1.0 - KH_TOP_FACTOR(I) * ( ZK_UV / ZH(I) ) ) * EXCFNL6A.390
& ( 1.0 - KH_TOP_FACTOR(I) * ( ZK_UV / ZH(I) ) ) EXCFNL6A.391
! EXCFNL6A.392
! with quadratic form EXCFNL6A.393
! EXCFNL6A.394
! RHOKH(I,K) = RHO_UV(I,K) * W_H_UV * VKMAN * ZK_UV * EXCFNL6A.395
! & ( 1.0 - KH_TOP_FACTOR(I) * ( ZK_UV / ZH(I) ) ) EXCFNL6A.396
! !--------------------------------------------------------- EXCFNL6A.397
! ! Calculate RHOKM(w_m,z/z_h) EXCFNL6A.398
! !--------------------------------------------------------- EXCFNL6A.399
ZH_M = Z_TQ(I,NTML(I)) EXCFNL6A.400
! EXCFNL6A.401
! with cubic form EXCFNL6A.402
! EXCFNL6A.403
RHOKM(I,K) = RHO_TQ(I,K-1) * W_M_TQ * VKMAN * ZK_TQ * EXCFNL6A.404
& ( 1.0 - KM_TOP_FACTOR(I) * ( ZK_TQ / ZH_M ) ) * EXCFNL6A.405
& ( 1.0 - KM_TOP_FACTOR(I) * ( ZK_TQ / ZH_M ) ) EXCFNL6A.406
! EXCFNL6A.407
! with quadratic form EXCFNL6A.408
! EXCFNL6A.409
! RHOKM(I,K) = RHO_TQ(I,K-1) * W_M_TQ * VKMAN * ZK_TQ * EXCFNL6A.410
! & ( 1.0 - KM_TOP_FACTOR(I) * ( ZK_TQ / ZH_M ) ) EXCFNL6A.411
EXCFNL6A.412
ENDIF EXCFNL6A.413
ENDIF EXCFNL6A.414
ENDDO EXCFNL6A.415
ENDDO EXCFNL6A.416
IF (LTIMER) THEN EXCFNL6A.417
CALL TIMER
('EXCF_NL ',4) EXCFNL6A.418
ENDIF EXCFNL6A.419
RETURN EXCFNL6A.420
END EXCFNL6A.421
*ENDIF EXCFNL6A.422