*IF DEF,A03_7A SFEXCH7A.2
C *****************************COPYRIGHT****************************** SFEXCH7A.3
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. SFEXCH7A.4
C SFEXCH7A.5
C Use, duplication or disclosure of this code is subject to the SFEXCH7A.6
C restrictions as set forth in the contract. SFEXCH7A.7
C SFEXCH7A.8
C Meteorological Office SFEXCH7A.9
C London Road SFEXCH7A.10
C BRACKNELL SFEXCH7A.11
C Berkshire UK SFEXCH7A.12
C RG12 2SZ SFEXCH7A.13
C SFEXCH7A.14
C If no contract has been raised with this copy of the code, the use, SFEXCH7A.15
C duplication or disclosure of it is strictly prohibited. Permission SFEXCH7A.16
C to do so must first be obtained in writing from the Head of Numerical SFEXCH7A.17
C Modelling at the above address. SFEXCH7A.18
C ******************************COPYRIGHT****************************** SFEXCH7A.19
!!! SUBROUTINE SF_EXCH------------------------------------------------ SFEXCH7A.20
!!! SFEXCH7A.21
!!! Purpose: Calculate coefficients of turbulent exchange between SFEXCH7A.22
!!! the surface and the lowest atmospheric layer, and SFEXCH7A.23
!!! "explicit" fluxes between the surface and this layer. SFEXCH7A.24
!!! SFEXCH7A.25
!!! Suitable for Single Column use. AJC1F405.75
!!! SFEXCH7A.27
!!! Model Modification history: SFEXCH7A.28
!!! version Date SFEXCH7A.29
!!! 4.3 17/11/95 New deck Simon Jackson SFEXCH7A.30
!!! 4.4 16/7/97 Version for MOSES II tile model. Richard Essery SFEXCH7A.31
!!! 4.5 Jul. 98 Kill the IBM specific lines (JCThil) AJC1F405.74
!!! 4.5 17/11/98 Introduce Z0H_Z0M and initialise FTL_TILE and ABX1F405.895
!!! RIB_TILE on all tiles at all points. Richard Betts ABX1F405.896
!!! SFEXCH7A.32
!!! SFEXCH7A.33
!!! Programming standard: Unified Model Documentation Paper No 4, SFEXCH7A.34
!!! Version 2, dated 18/1/90. SFEXCH7A.35
!!! SFEXCH7A.36
!!! System component covered: Part of P243. SFEXCH7A.37
!!! SFEXCH7A.38
!!! Project task: SFEXCH7A.39
!!! SFEXCH7A.40
!!! Documentation: UM Documentation Paper No 24, section P243. SFEXCH7A.41
!!! See especially sub-section (ix). SFEXCH7A.42
!!! SFEXCH7A.43
!!!--------------------------------------------------------------------- SFEXCH7A.44
SFEXCH7A.45
! Arguments :- SFEXCH7A.46
SFEXCH7A.47
SUBROUTINE SF_EXCH ( 4,99SFEXCH7A.48
& P_POINTS,P_FIELD,P1,LAND1,LAND_PTS,LAND_FIELD,NTYPE,LAND_INDEX, SFEXCH7A.49
& TILE_INDEX,TILE_PTS, SFEXCH7A.50
& BQ_1,BT_1,CANOPY,CATCH,DZSOIL,GC,HCONS,HO2R2_OROG, SFEXCH7A.51
& ICE_FRACT,LYING_SNOW,PSTAR,P_1,QW_1,RADNET,RADNET_SNOW,SIL_OROG, SFEXCH7A.52
& SMVCST,TILE_FRAC,TIMESTEP,TL_1,TI,TS1,TSNOW,TSTAR_TILE,TSTAR, SFEXCH7A.53
& VSHR,Z0_TILE,Z0_SF_GB,Z1_UV,Z1_TQ,LAND_MASK, SFEXCH7A.54
& SU10,SV10,SQ1P5,ST1P5,SFME,LTIMER,L_Z0_OROG,Z0MSEA, SFEXCH7A.55
& ALPHA1,ALPHA1_SICE,ASHTF,ASHTF_SNOW,CD,CH,CDR10M, SFEXCH7A.56
& CHR1P5M,CHR1P5M_SICE,E_SEA,FME,FQW_1,FQW_TILE,FQW_ICE, SFEXCH7A.57
& FTL_1,FTL_TILE,FTL_ICE,FRACA,H_BLEND_OROG,H_SEA, SFEXCH7A.58
& Q1_SD,RESFS,RESFT,RIB,RIB_TILE,T1_SD,Z0M_EFF, SFEXCH7A.59
& Z0H,Z0H_TILE,Z0M,Z0M_TILE,RHO_ARESIST,ARESIST,RESIST_B, SFEXCH7A.60
& RHO_ARESIST_TILE,ARESIST_TILE,RESIST_B_TILE, SFEXCH7A.61
& RHO_CD_MODV1,RHOKH_1,RHOKH_1_SICE,RHOKM_1,RHOKPM,RHOKPM_SICE, SFEXCH7A.62
& NRML SFEXCH7A.63
& ) SFEXCH7A.64
SFEXCH7A.65
IMPLICIT NONE SFEXCH7A.66
SFEXCH7A.67
INTEGER SFEXCH7A.68
& P_POINTS ! IN Number of P-grid points to be SFEXCH7A.69
! ! processed. SFEXCH7A.70
&,P_FIELD ! IN Total number of P-grid points. SFEXCH7A.71
&,P1 ! IN First P-point to be processed. SFEXCH7A.72
&,LAND1 ! IN First land point to be processed. SFEXCH7A.73
&,LAND_PTS ! IN Number of land points to be processed. SFEXCH7A.74
&,LAND_FIELD ! IN Total number of land points. SFEXCH7A.75
&,NTYPE ! IN Number of tiles per land point. SFEXCH7A.76
&,LAND_INDEX(P_FIELD) ! IN Index of land points. SFEXCH7A.77
&,TILE_INDEX(LAND_FIELD,NTYPE) SFEXCH7A.78
! ! IN Index of tile points. SFEXCH7A.79
&,TILE_PTS(NTYPE) ! IN Number of tile points. SFEXCH7A.80
SFEXCH7A.81
REAL SFEXCH7A.82
& BQ_1(P_FIELD) ! IN A buoyancy parameter for lowest atm SFEXCH7A.83
! ! level ("beta-q twiddle"). SFEXCH7A.84
&,BT_1(P_FIELD) ! IN A buoyancy parameter for lowest atm SFEXCH7A.85
! ! level ("beta-T twiddle"). SFEXCH7A.86
&,CANOPY(LAND_FIELD,NTYPE-1) SFEXCH7A.87
! ! IN Surface water for land tiles SFEXCH7A.88
! ! (kg/m2). SFEXCH7A.89
&,CATCH(LAND_FIELD,NTYPE-1) SFEXCH7A.90
! ! IN Surface capacity (max. surface water) SFEXCH7A.91
! ! of snow-free land tiles (kg/m2). SFEXCH7A.92
&,DZSOIL ! IN Soil or land-ice surface layer SFEXCH7A.93
! ! thickness (m). SFEXCH7A.94
&,GC(LAND_FIELD,NTYPE) ! IN "Stomatal" conductance to evaporation SFEXCH7A.95
! ! for land tiles (m/s). SFEXCH7A.96
&,HCONS(LAND_FIELD) ! IN Soil thermal conductivity including SFEXCH7A.97
! ! effects of water and ice (W/m/K). SFEXCH7A.98
&,HO2R2_OROG(LAND_FIELD)! IN Peak to trough height of unresolved SFEXCH7A.99
! ! orography divided by 2SQRT(2) (m). SFEXCH7A.100
&,ICE_FRACT(P_FIELD) ! IN Fraction of gridbox which is sea-ice. SFEXCH7A.101
&,LYING_SNOW(P_FIELD) ! IN Lying snow amount (kg per sq metre). SFEXCH7A.102
&,PSTAR(P_FIELD) ! IN Surface pressure (Pascals). SFEXCH7A.103
&,P_1(P_FIELD) ! IN Level 1 atmospheric pressure. SFEXCH7A.104
&,QW_1(P_FIELD) ! IN Total water content of lowest SFEXCH7A.105
! ! atmospheric layer (kg per kg air). SFEXCH7A.106
&,RADNET(P_FIELD) ! IN Net surface radiation over snow-free SFEXCH7A.107
! ! land or sea-ice (W/m2) SFEXCH7A.108
&,RADNET_SNOW(P_FIELD) ! IN Net surface radiation over snow or SFEXCH7A.109
! ! land-ice (W/m2) SFEXCH7A.110
&,SIL_OROG(LAND_FIELD) ! IN Silhouette area of unresolved SFEXCH7A.111
! ! orography per unit horizontal area SFEXCH7A.112
&,SMVCST(LAND_FIELD) ! IN Volumetric saturation point SFEXCH7A.113
! ! - zero at land-ice points. SFEXCH7A.114
&,TILE_FRAC(LAND_FIELD,NTYPE) SFEXCH7A.115
! ! IN Tile fractions. SFEXCH7A.116
&,TIMESTEP ! IN Timestep in seconds for EPDT calc. SFEXCH7A.117
&,TL_1(P_FIELD) ! IN Liquid/frozen water temperature for SFEXCH7A.118
! ! lowest atmospheric layer (K). SFEXCH7A.119
&,TI(P_FIELD) ! IN Temperature of sea-ice surface layer SFEXCH7A.120
! ! (K) SFEXCH7A.121
&,TS1(LAND_FIELD) ! IN Temperature of top soil or land-ice SFEXCH7A.122
! ! layer (K) SFEXCH7A.123
&,TSNOW(LAND_FIELD) ! IN Temperature of surface snow layer (K) SFEXCH7A.124
! ! = TS1 at land-ice points. SFEXCH7A.125
&,TSTAR_TILE(LAND_FIELD,NTYPE) SFEXCH7A.126
! ! IN Tile surface temperatures (K). SFEXCH7A.127
&,TSTAR(P_FIELD) ! IN Gridbox mean surface temperature (K). SFEXCH7A.128
&,VSHR(P_FIELD) ! IN Magnitude of surface-to-lowest-level SFEXCH7A.129
! ! wind shear SFEXCH7A.130
&,Z0_TILE(LAND_FIELD,NTYPE) SFEXCH7A.131
! ! IN Tile roughness lengths (m). SFEXCH7A.132
&,Z0_SF_GB(P_FIELD) ! IN Snow-free GBM roughness length (m). SFEXCH7A.133
&,Z1_UV(P_FIELD) ! IN Height of lowest uv level (m). SFEXCH7A.134
&,Z1_TQ(P_FIELD) ! IN Height of lowest tq level (m). SFEXCH7A.135
! ! Note, if the grid used is staggered in SFEXCH7A.136
! ! the vertical, Z1_UV and Z1_TQ can be SFEXCH7A.137
! ! different. SFEXCH7A.138
SFEXCH7A.139
LOGICAL SFEXCH7A.140
& LAND_MASK(P_FIELD) ! IN .TRUE. for land; .FALSE. elsewhere. SFEXCH7A.141
&,SU10 ! IN STASH flag for 10-metre W wind. SFEXCH7A.142
&,SV10 ! IN STASH flag for 10-metre S wind. SFEXCH7A.143
&,SQ1P5 ! IN STASH flag for 1.5-metre sp humidity. SFEXCH7A.144
&,ST1P5 ! IN STASH flag for 1.5-metre temperature. SFEXCH7A.145
&,SFME ! IN STASH flag for wind mixing energy flux SFEXCH7A.146
&,LTIMER ! IN Logical for TIMER. SFEXCH7A.147
&,L_Z0_OROG ! IN .TRUE. to use orographic roughness. SFEXCH7A.148
SFEXCH7A.149
! Modified (INOUT) variables. SFEXCH7A.150
SFEXCH7A.151
REAL SFEXCH7A.152
& Z0MSEA(P_FIELD) ! INOUT Sea-surface roughness length for SFEXCH7A.153
! ! momentum (m). F617. SFEXCH7A.154
SFEXCH7A.155
! Output variables. SFEXCH7A.156
! SFEXCH7A.157
REAL SFEXCH7A.158
& ALPHA1(LAND_FIELD,NTYPE) SFEXCH7A.159
! ! OUT Gradients of saturated specific SFEXCH7A.160
! ! humidity with respect to temperature SFEXCH7A.161
! ! between the bottom model layer and SFEXCH7A.162
! ! tile surface SFEXCH7A.163
&,ALPHA1_SICE(P_FIELD) ! OUT ALPHA1 for sea-ice. SFEXCH7A.164
&,ASHTF(P_FIELD) ! OUT Coefficient to calculate surface heat SFEXCH7A.165
! ! flux into soil or sea-ice (W/m2/K) SFEXCH7A.166
&,ASHTF_SNOW(P_FIELD) ! OUT Coefficient to calculate surface heat SFEXCH7A.167
! ! flux into snow (W/m2/K) SFEXCH7A.168
&,CD(P_FIELD) ! OUT Bulk transfer coefficient for SFEXCH7A.169
! ! momentum. SFEXCH7A.170
&,CH(P_FIELD) ! OUT Bulk transfer coefficient for heat SFEXCH7A.171
! ! and/or moisture. SFEXCH7A.172
&,CDR10M(P_FIELD) ! OUT Reqd for calculation of 10m wind SFEXCH7A.173
! ! (u & v). SFEXCH7A.174
! ! NBB: This is output on the UV-grid, SFEXCH7A.175
! ! but with the first and last rows set SFEXCH7A.176
! ! to a "missing data indicator". SFEXCH7A.177
! ! Sea-ice leads ignored. SFEXCH7A.178
&,CHR1P5M(LAND_FIELD,NTYPE) SFEXCH7A.179
! ! OUT Reqd for calculation of 1.5m temp for SFEXCH7A.180
! ! land tiles. SFEXCH7A.181
&,CHR1P5M_SICE(P_FIELD) ! OUT CHR1P5M for sea and sea-ice SFEXCH7A.182
! ! (leads ignored). SFEXCH7A.183
&,E_SEA(P_FIELD) ! OUT Evaporation from sea times leads SFEXCH7A.184
! ! fraction (kg/m2/s). Zero over land. SFEXCH7A.185
&,FME(P_FIELD) ! OUT Wind mixing energy flux (Watts/sq m). SFEXCH7A.186
&,FQW_1(P_FIELD) ! OUT "Explicit" surface flux of QW (i.e. SFEXCH7A.187
! ! evaporation), on P-grid (kg/m2/s). SFEXCH7A.188
! ! for whole grid-box SFEXCH7A.189
&,FQW_TILE(LAND_FIELD,NTYPE) SFEXCH7A.190
! ! OUT Local FQW_1 for land tiles. SFEXCH7A.191
&,FQW_ICE(P_FIELD) ! OUT GBM FQW_1 for sea-ice. SFEXCH7A.192
&,FTL_1(P_FIELD) ! OUT "Explicit" surface flux of TL = H/CP. SFEXCH7A.193
! ! (sensible heat / CP). grid-box mean SFEXCH7A.194
&,FTL_TILE(LAND_FIELD,NTYPE) SFEXCH7A.195
! ! OUT Local FTL_1 for land tiles. SFEXCH7A.196
&,FTL_ICE(P_FIELD) ! OUT GBM FTL_1 for sea-ice. SFEXCH7A.197
&,FRACA(LAND_FIELD,NTYPE-1) SFEXCH7A.198
! ! OUT Fraction of surface moisture flux SFEXCH7A.199
! ! with only aerodynamic resistance SFEXCH7A.200
! ! for snow-free land tiles. SFEXCH7A.201
&,H_BLEND_OROG(P_FIELD) ! OUT Blending height for orographic SFEXCH7A.202
! ! roughness SFEXCH7A.203
&,H_SEA(P_FIELD) ! OUT Surface sensible heat flux over sea SFEXCH7A.204
! ! times leads fraction (W/m2). SFEXCH7A.205
! ! Zero over land. SFEXCH7A.206
&,Q1_SD(P_FIELD) ! OUT Standard deviation of turbulent SFEXCH7A.207
! ! fluctuations of surface layer SFEXCH7A.208
! ! specific humidity (kg/kg). SFEXCH7A.209
&,RESFS(LAND_FIELD,NTYPE-1) SFEXCH7A.210
! ! OUT Combined soil, stomatal and SFEXCH7A.211
! ! aerodynamic resistance factor for SFEXCH7A.212
! ! fraction 1-FRACA of snow-free tiles SFEXCH7A.213
&,RESFT(LAND_FIELD,NTYPE) SFEXCH7A.214
! ! OUT Total resistance factor SFEXCH7A.215
! ! FRACA+(1-FRACA)*RESFS for snow-free SFEXCH7A.216
! ! tiles, 1 for snow. SFEXCH7A.217
&,RIB(P_FIELD) ! OUT Mean bulk Richardson number for SFEXCH7A.218
! ! lowest layer SFEXCH7A.219
&,RIB_TILE(LAND_FIELD,NTYPE) SFEXCH7A.220
! ! OUT RIB for land tiles. SFEXCH7A.221
&,T1_SD(P_FIELD) ! OUT Standard deviation of turbulent SFEXCH7A.222
! ! fluctuations of surface layer SFEXCH7A.223
! ! temperature (K). SFEXCH7A.224
&,Z0M_EFF(P_FIELD) ! OUT Effective roughness length for SFEXCH7A.225
! ! momentum SFEXCH7A.226
&,Z0H(P_FIELD) ! OUT Roughness length for heat SFEXCH7A.227
! ! and moisture SFEXCH7A.228
&,Z0H_TILE(LAND_FIELD,NTYPE) SFEXCH7A.229
! ! OUT Tile roughness lengths for heat SFEXCH7A.230
! ! and moisture SFEXCH7A.231
&,Z0M(P_FIELD) ! OUT Roughness length for momentum SFEXCH7A.232
&,Z0M_TILE(LAND_FIELD,NTYPE) SFEXCH7A.233
! ! OUT Tile roughness lengths for momentum SFEXCH7A.234
&,RHO_ARESIST(P_FIELD) ! OUT RHOSTAR*CD_STD*VSHR for SCYCLE SFEXCH7A.235
&,ARESIST(P_FIELD) ! OUT 1/(CD_STD*VSHR) for SCYCLE SFEXCH7A.236
&,RESIST_B(P_FIELD) ! OUT (1/CH-1/CD_STD)/VSHR for SCYCLE SFEXCH7A.237
&,RHO_ARESIST_TILE(LAND_FIELD,NTYPE) SFEXCH7A.238
! ! OUT RHOSTAR*CD_STD*VSHR on land tiles SFEXCH7A.239
&,ARESIST_TILE(LAND_FIELD,NTYPE) SFEXCH7A.240
! ! OUT 1/(CD_STD*VSHR) on land tiles SFEXCH7A.241
&,RESIST_B_TILE(LAND_FIELD,NTYPE) SFEXCH7A.242
! ! OUT (1/CH-1/CD_STD)/VSHR on land tiles SFEXCH7A.243
SFEXCH7A.244
! Surface exchange coefficients;passed to subroutine IMPL_CAL SFEXCH7A.245
REAL SFEXCH7A.246
& RHO_CD_MODV1(P_FIELD) ! OUT rhostar*cD*vshr before horizontal SFEXCH7A.247
! ! interpolation output as a diagnostic. SFEXCH7A.248
&,RHOKH_1(LAND_FIELD,NTYPE) SFEXCH7A.249
! ! OUT Surface exchange coefficient for land SFEXCH7A.250
! ! tiles. SFEXCH7A.251
&,RHOKH_1_SICE(P_FIELD) ! OUT Surface exchange coefficient for sea SFEXCH7A.252
! ! or sea-ice. SFEXCH7A.253
&,RHOKM_1(P_FIELD) ! OUT For momentum. NB: This is output on SFEXCH7A.254
! ! UV-grid, but with the first and last SFEXCH7A.255
! ! rows set to "missing data indicator". SFEXCH7A.256
&,RHOKPM(LAND_FIELD,NTYPE) SFEXCH7A.257
! ! OUT Mixing coefficient for land tiles. SFEXCH7A.258
&,RHOKPM_SICE(P_FIELD) ! OUT Mixing coefficient for sea-ice. SFEXCH7A.259
SFEXCH7A.260
INTEGER SFEXCH7A.261
& NRML(P_FIELD) ! OUT 1 if surface layer unstable, else 0. SFEXCH7A.262
SFEXCH7A.263
! Symbolic constants ------------------------------------------------ SFEXCH7A.264
SFEXCH7A.265
! (1) UM-wide common parameters. SFEXCH7A.266
SFEXCH7A.267
*CALL C_0_DG_C
SFEXCH7A.268
*CALL C_G
SFEXCH7A.269
*CALL C_LHEAT
SFEXCH7A.270
*CALL C_R_CP
SFEXCH7A.271
SFEXCH7A.272
! Derived local parameters. SFEXCH7A.273
REAL LS SFEXCH7A.274
PARAMETER ( SFEXCH7A.275
& LS=LF+LC ! Latent heat of sublimation. SFEXCH7A.276
& ) SFEXCH7A.277
SFEXCH7A.278
! (2) Boundary Layer local parameters. SFEXCH7A.279
SFEXCH7A.280
*CALL BLEND_H
SFEXCH7A.281
*CALL C_CHARNK
SFEXCH7A.282
*CALL C_DENSTY
SFEXCH7A.283
*CALL C_KAPPAI
SFEXCH7A.284
*CALL C_ROUGH
SFEXCH7A.285
*CALL C_VKMAN
SFEXCH7A.286
*CALL C_SOILH
SFEXCH7A.287
*CALL C_Z0H_Z0M
ABX1F405.897
SFEXCH7A.288
REAL H_BLEND_MIN SFEXCH7A.289
PARAMETER ( SFEXCH7A.290
& H_BLEND_MIN=0.0 ! Minimum blending height. SFEXCH7A.291
&) SFEXCH7A.292
SFEXCH7A.293
! External subprograms called. SFEXCH7A.294
SFEXCH7A.295
EXTERNAL SF_OROG,SF_OROG_GB,QSAT,SFL_INT,SF_RESIST,TIMER, SFEXCH7A.296
& STDEV1_SEA,STDEV1_LAND,SF_RIB_SEA,SF_RIB_LAND, SFEXCH7A.297
& FCDCH_SEA,FCDCH_LAND,SF_FLUX_SEA,SF_FLUX_LAND SFEXCH7A.298
SFEXCH7A.299
! Define local storage. SFEXCH7A.300
SFEXCH7A.301
! (a) Workspace. SFEXCH7A.302
SFEXCH7A.303
REAL SFEXCH7A.304
& QS1(P_FIELD) ! Sat. specific humidity SFEXCH7A.305
! ! qsat(TL_1,PSTAR) SFEXCH7A.306
&,RHOSTAR(P_FIELD) ! Surface air density SFEXCH7A.307
SFEXCH7A.308
! Workspace for sea and sea-ice leads SFEXCH7A.309
REAL SFEXCH7A.310
& CD_SEA(P_FIELD) ! Drag coefficient SFEXCH7A.311
&,CH_SEA(P_FIELD) ! Transfer coefficient for heat and SFEXCH7A.312
! ! moisture SFEXCH7A.313
&,QSTAR_SEA(P_FIELD) ! Surface saturated sp humidity SFEXCH7A.314
&,RIB_SEA(P_FIELD) ! Bulk Richardson number SFEXCH7A.315
&,TSTAR_SEA(P_FIELD) ! Surface temperature SFEXCH7A.316
&,Z0F_SEA(P_FIELD) ! Roughness length for free-convec. SFEXCH7A.317
! ! heat and moisture transport SFEXCH7A.318
&,Z0H_SEA(P_FIELD) ! Roughness length for heat and SFEXCH7A.319
! ! moisture transport SFEXCH7A.320
SFEXCH7A.321
! Workspace for sea-ice and marginal ice zone SFEXCH7A.322
REAL SFEXCH7A.323
& CD_ICE(P_FIELD) ! Drag coefficient SFEXCH7A.324
&,CD_MIZ(P_FIELD) ! Drag coefficient SFEXCH7A.325
&,CH_ICE(P_FIELD) ! Transfer coefficient for heat and SFEXCH7A.326
! ! moisture SFEXCH7A.327
&,CH_MIZ(P_FIELD) ! Transfer coefficient for heat and SFEXCH7A.328
! ! moisture SFEXCH7A.329
&,QSTAR_ICE(P_FIELD) ! Surface saturated sp humidity SFEXCH7A.330
&,RIB_ICE(P_FIELD) ! Bulk Richardson number SFEXCH7A.331
&,RIB_MIZ(P_FIELD) ! Bulk Richardson number SFEXCH7A.332
&,TSTAR_ICE(P_FIELD) ! Surface temperature SFEXCH7A.333
&,Z0_ICE(P_FIELD) ! Roughness length. SFEXCH7A.334
&,Z0_MIZ(P_FIELD) ! Roughness length. SFEXCH7A.335
INTEGER SFEXCH7A.336
& SICE_INDEX(P_FIELD) ! Index of sea-ice points SFEXCH7A.337
&,NSICE ! Number of sea-ice points. SFEXCH7A.338
SFEXCH7A.339
! Workspace for land tiles SFEXCH7A.340
REAL SFEXCH7A.341
& CD_STD(LAND_FIELD,NTYPE) ! Local drag coefficient for calc SFEXCH7A.342
! ! of interpolation coefficient SFEXCH7A.343
&,CD_TILE(LAND_FIELD,NTYPE) ! Drag coefficient SFEXCH7A.344
&,CH_TILE(LAND_FIELD,NTYPE) ! Transfer coefficient for heat and SFEXCH7A.345
! ! moisture SFEXCH7A.346
&,CHN(LAND_FIELD) ! Neutral value of CH. SFEXCH7A.347
&,DQ(LAND_FIELD) ! Sp humidity difference between SFEXCH7A.348
! ! surface and lowest atmospheric lev SFEXCH7A.349
&,EPDT(LAND_FIELD) ! "Potential" Evaporation * Timestep SFEXCH7A.350
&,PSTAR_LAND(LAND_FIELD) ! Surface pressure for land points. SFEXCH7A.351
&,QSTAR_TILE(LAND_FIELD,NTYPE)! Surface saturated sp humidity. SFEXCH7A.352
&,RHOKM_1_TILE(LAND_FIELD,NTYPE) SFEXCH7A.353
! ! Momentum exchange coefficient. SFEXCH7A.354
&,WIND_PROFILE_FACTOR(LAND_FIELD,NTYPE) SFEXCH7A.355
! ! For transforming effective surface SFEXCH7A.356
! ! transfer coefficients to those SFEXCH7A.357
! ! excluding form drag. SFEXCH7A.358
&,Z0_GB(LAND_FIELD) ! GBM roughness length including snow SFEXCH7A.359
&,Z0M_EFF_TILE(LAND_FIELD,NTYPE) SFEXCH7A.360
! ! Effective momentum roughness length SFEXCH7A.361
&,Z0F_TILE(LAND_FIELD,NTYPE) !Roughness length for free convective SFEXCH7A.362
! ! heat and moisture transport SFEXCH7A.363
SFEXCH7A.364
! (b) Scalars. SFEXCH7A.365
SFEXCH7A.366
INTEGER SFEXCH7A.367
& I ! Loop counter (horizontal field index). SFEXCH7A.368
&,J ! Loop counter (tile field index). SFEXCH7A.369
&,L ! Loop counter (land point field index). SFEXCH7A.370
&,N ! Loop counter (tile index). SFEXCH7A.371
REAL SFEXCH7A.372
& TAU ! Magnitude of surface wind stress over sea. SFEXCH7A.373
&,ZETAM ! Temporary in calculation of CHN. SFEXCH7A.374
&,ZETAH ! Temporary in calculation of CHN. SFEXCH7A.375
&,ZETA1 ! Work space SFEXCH7A.376
&,Z0 ! yet more workspace SFEXCH7A.377
SFEXCH7A.378
IF (LTIMER) THEN SFEXCH7A.379
CALL TIMER
('SFEXCH ',3) SFEXCH7A.380
ENDIF SFEXCH7A.381
SFEXCH7A.382
!----------------------------------------------------------------------- ABX1F405.898
!! 0. Initialise FTL_TILE and RIB_TILE on all tiles at all points, ABX1F405.899
!! to allow STASH to process these as diagnostics. ABX1F405.900
!----------------------------------------------------------------------- ABX1F405.901
DO N=1,NTYPE ABX1F405.902
DO L=1,LAND_FIELD ABX1F405.903
FTL_TILE(L,N) = 0.0 ABX1F405.904
RIB_TILE(L,N) = 0.0 ABX1F405.905
ENDDO ABX1F405.906
ENDDO ABX1F405.907
ABX1F405.908
!----------------------------------------------------------------------- SFEXCH7A.383
!! 1. Index array for sea-ice SFEXCH7A.384
!----------------------------------------------------------------------- SFEXCH7A.385
SFEXCH7A.386
NSICE = 0 SFEXCH7A.387
DO I=P1,P1+P_POINTS-1 SFEXCH7A.388
IF ( ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I) ) THEN SFEXCH7A.389
NSICE = NSICE + 1 SFEXCH7A.390
SICE_INDEX(NSICE) = I SFEXCH7A.391
ENDIF SFEXCH7A.392
ENDDO SFEXCH7A.393
SFEXCH7A.394
!----------------------------------------------------------------------- SFEXCH7A.395
!! 2. Calculate QSAT values required later. SFEXCH7A.396
!----------------------------------------------------------------------- SFEXCH7A.397
SFEXCH7A.398
DO I=P1,P1+P_POINTS-1 SFEXCH7A.399
TSTAR_SEA(I) = TSTAR(I) SFEXCH7A.400
TSTAR_ICE(I) = TSTAR(I) SFEXCH7A.401
RHOSTAR(I) = PSTAR(I) / ( R*TSTAR(I) ) SFEXCH7A.402
! ... surface air density from ideal gas equation SFEXCH7A.403
IF ( ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I) ) THEN SFEXCH7A.404
TSTAR_ICE(I) = ( TSTAR(I) - (1.0-ICE_FRACT(I))*TFS ) SFEXCH7A.405
& / ICE_FRACT(I) ! P2430.1 SFEXCH7A.406
TSTAR_SEA(I) = TFS SFEXCH7A.407
ENDIF SFEXCH7A.408
ENDDO SFEXCH7A.409
CALL QSAT
(QS1(P1),TL_1(P1),PSTAR(P1),P_POINTS) SFEXCH7A.410
CALL QSAT
(QSTAR_SEA(P1),TSTAR_SEA(P1),PSTAR(P1),P_POINTS) SFEXCH7A.411
CALL QSAT
(QSTAR_ICE(P1),TSTAR_ICE(P1),PSTAR(P1),P_POINTS) SFEXCH7A.412
DO L=LAND1,LAND1+LAND_PTS-1 SFEXCH7A.413
I = LAND_INDEX(L) SFEXCH7A.414
PSTAR_LAND(L) = PSTAR(I) SFEXCH7A.415
ENDDO SFEXCH7A.416
DO N=1,NTYPE SFEXCH7A.417
CALL QSAT
(QSTAR_TILE(LAND1,N),TSTAR_TILE(LAND1,N), SFEXCH7A.418
& PSTAR_LAND(LAND1),LAND_PTS) SFEXCH7A.419
ENDDO SFEXCH7A.420
SFEXCH7A.421
!----------------------------------------------------------------------- SFEXCH7A.422
!! 3. Calculation of transfer coefficients and surface layer stability SFEXCH7A.423
!----------------------------------------------------------------------- SFEXCH7A.424
SFEXCH7A.425
!----------------------------------------------------------------------- SFEXCH7A.426
!! 3.1 Calculate neutral roughness lengths SFEXCH7A.427
!----------------------------------------------------------------------- SFEXCH7A.428
SFEXCH7A.429
! Sea, sea-ice leads, sea-ice and marginal ice zone SFEXCH7A.430
DO I=P1,P1+P_POINTS-1 SFEXCH7A.431
Z0H_SEA(I) = Z0HSEA SFEXCH7A.432
Z0F_SEA(I) = Z0FSEA SFEXCH7A.433
Z0_MIZ(I) = Z0MIZ SFEXCH7A.434
Z0_ICE(I) = Z0SICE SFEXCH7A.435
RIB_SEA(I) = 0. SFEXCH7A.436
RIB_ICE(I) = 0. SFEXCH7A.437
ENDDO SFEXCH7A.438
SFEXCH7A.439
! Land tiles SFEXCH7A.440
! Z0_TILE contains the appropriate value for land-ice points, but has to SFEXCH7A.441
! be modified for snow-cover on non-land-ice points SFEXCH7A.442
DO N=1,NTYPE SFEXCH7A.443
DO J=1,TILE_PTS(N) SFEXCH7A.444
L = TILE_INDEX(J,N) SFEXCH7A.445
Z0M_TILE(L,N) = Z0_TILE(L,N) SFEXCH7A.446
IF ( N.EQ.NTYPE .AND. SMVCST(L).NE.0. ) THEN SFEXCH7A.447
I = LAND_INDEX(L) SFEXCH7A.448
Z0 = Z0_SF_GB(I) - 4.0E-4*LYING_SNOW(I)/TILE_FRAC(L,N) SFEXCH7A.449
ZETA1 = MIN( 5.0E-4 , Z0_SF_GB(I) ) SFEXCH7A.450
Z0M_TILE(L,N) = MAX( ZETA1 , Z0 ) SFEXCH7A.451
ENDIF SFEXCH7A.452
Z0H_TILE(L,N) = Z0H_Z0M(N)*Z0M_TILE(L,N) ABX1F405.909
Z0F_TILE(L,N) = Z0H_Z0M(N)*Z0M_TILE(L,N) ABX1F405.910
RIB_TILE(L,N) = 0. SFEXCH7A.455
ENDDO SFEXCH7A.456
ENDDO SFEXCH7A.457
SFEXCH7A.458
DO N=1,NTYPE SFEXCH7A.459
CALL SF_OROG
( SFEXCH7A.460
& P_FIELD,LAND_FIELD,TILE_PTS(N),LAND_INDEX,TILE_INDEX(1,N), SFEXCH7A.461
& L_Z0_OROG,LTIMER, SFEXCH7A.462
& HO2R2_OROG,RIB_TILE(1,N),SIL_OROG,Z0M_TILE(1,N),Z1_UV, SFEXCH7A.463
& WIND_PROFILE_FACTOR(1,N),Z0M_EFF_TILE(1,N) SFEXCH7A.464
& ) SFEXCH7A.465
ENDDO SFEXCH7A.466
SFEXCH7A.467
!----------------------------------------------------------------------- SFEXCH7A.468
! Calculate RESFT with neutral CH and EPDT=0 for use in calculation SFEXCH7A.469
! of Richardson number. RESFT=1 for snow. SFEXCH7A.470
!----------------------------------------------------------------------- SFEXCH7A.471
SFEXCH7A.472
! Snow-free land tiles SFEXCH7A.473
DO N=1,NTYPE-1 SFEXCH7A.474
DO J=1,TILE_PTS(N) SFEXCH7A.475
L = TILE_INDEX(J,N) SFEXCH7A.476
I = LAND_INDEX(L) SFEXCH7A.477
ZETAM = LOG ( (Z1_UV(I) + Z0M_TILE(L,N))/Z0M_TILE(L,N) ) SFEXCH7A.478
ZETAH = LOG ( (Z1_TQ(I) + Z0M_TILE(L,N))/Z0H_TILE(L,N) ) SFEXCH7A.479
CHN(L) = (VKMAN/ZETAH)*(VKMAN/ZETAM)*WIND_PROFILE_FACTOR(L,N) SFEXCH7A.480
DQ(L) = QW_1(I) - QSTAR_TILE(L,N) SFEXCH7A.481
EPDT(L) = 0.0 SFEXCH7A.482
ENDDO SFEXCH7A.483
CALL SF_RESIST
( SFEXCH7A.484
& P_FIELD,LAND_FIELD,TILE_PTS(N),LAND_INDEX,TILE_INDEX(1,N), SFEXCH7A.485
& CANOPY(1,N),CATCH(1,N),CHN,DQ,EPDT,GC(1,N),VSHR, SFEXCH7A.486
& FRACA(1,N),RESFS(1,N),RESFT(1,N),LTIMER SFEXCH7A.487
& ) SFEXCH7A.488
ENDDO SFEXCH7A.489
SFEXCH7A.490
! Snow and land-ice tile SFEXCH7A.491
DO J=1,TILE_PTS(NTYPE) SFEXCH7A.492
L = TILE_INDEX(J,NTYPE) SFEXCH7A.493
RESFT(L,NTYPE) = 1. SFEXCH7A.494
ENDDO SFEXCH7A.495
SFEXCH7A.496
!----------------------------------------------------------------------- SFEXCH7A.497
!! 3.2 Calculate bulk Richardson number for the lowest model level. SFEXCH7A.498
!----------------------------------------------------------------------- SFEXCH7A.499
SFEXCH7A.500
! Sea, sea-ice and sea-ice leads SFEXCH7A.501
CALL SF_RIB_SEA
( SFEXCH7A.502
& P_POINTS,P_FIELD,P1,LAND_MASK,NSICE,SICE_INDEX, SFEXCH7A.503
& BQ_1,BT_1,ICE_FRACT,QSTAR_ICE,QSTAR_SEA,QW_1,TL_1,TSTAR_ICE, SFEXCH7A.504
& TSTAR_SEA,VSHR,Z0_ICE,Z0H_SEA,Z0_ICE,Z0MSEA,Z1_TQ,Z1_UV, SFEXCH7A.505
& RIB_SEA,RIB_ICE,LTIMER SFEXCH7A.506
& ) SFEXCH7A.507
SFEXCH7A.508
! Land tiles SFEXCH7A.509
DO N=1,NTYPE SFEXCH7A.510
CALL SF_RIB_LAND
( SFEXCH7A.511
& P_FIELD,LAND_FIELD,TILE_PTS(N),LAND_INDEX,TILE_INDEX(1,N), SFEXCH7A.512
& BQ_1,BT_1,QSTAR_TILE(1,N),QW_1,RESFT(1,N),TL_1, SFEXCH7A.513
& TSTAR_TILE(1,N),VSHR,Z0H_TILE(1,N),Z0M_TILE(1,N),Z1_TQ,Z1_UV, SFEXCH7A.514
& RIB_TILE(1,N),LTIMER SFEXCH7A.515
& ) SFEXCH7A.516
ENDDO SFEXCH7A.517
SFEXCH7A.518
!----------------------------------------------------------------------- SFEXCH7A.519
!! 3.3 Calculate stability corrected effective roughness length. SFEXCH7A.520
!! Stability correction only applies to land points. SFEXCH7A.521
!----------------------------------------------------------------------- SFEXCH7A.522
SFEXCH7A.523
DO N=1,NTYPE SFEXCH7A.524
CALL SF_OROG
( SFEXCH7A.525
& P_FIELD,LAND_FIELD,TILE_PTS(N),LAND_INDEX,TILE_INDEX(1,N), SFEXCH7A.526
& L_Z0_OROG,LTIMER, SFEXCH7A.527
& HO2R2_OROG,RIB_TILE(1,N),SIL_OROG,Z0M_TILE(1,N),Z1_UV, SFEXCH7A.528
& WIND_PROFILE_FACTOR(1,N),Z0M_EFF_TILE(1,N) SFEXCH7A.529
& ) SFEXCH7A.530
ENDDO SFEXCH7A.531
SFEXCH7A.532
!----------------------------------------------------------------------- SFEXCH7A.533
!! 3.4 Calculate CD, CH via routine FCDCH. SFEXCH7A.534
!----------------------------------------------------------------------- SFEXCH7A.535
SFEXCH7A.536
! Sea-ice SFEXCH7A.537
CALL FCDCH_SEA
(P_POINTS,P_FIELD,P1,LAND_MASK, SFEXCH7A.538
& RIB_ICE,Z0_ICE,Z0_ICE,Z0_ICE,Z1_UV,Z1_TQ, SFEXCH7A.539
& CD_ICE,CH_ICE,LTIMER) SFEXCH7A.540
SFEXCH7A.541
! Marginal Ice Zone SFEXCH7A.542
CALL FCDCH_SEA
(P_POINTS,P_FIELD,P1,LAND_MASK, SFEXCH7A.543
& RIB_ICE,Z0_MIZ,Z0_MIZ,Z0_MIZ,Z1_UV,Z1_TQ, SFEXCH7A.544
& CD_MIZ,CH_MIZ,LTIMER) SFEXCH7A.545
SFEXCH7A.546
! Sea and sea-ice leads SFEXCH7A.547
CALL FCDCH_SEA
(P_POINTS,P_FIELD,P1,LAND_MASK, SFEXCH7A.548
& RIB_SEA,Z0MSEA,Z0H_SEA,Z0F_SEA,Z1_UV,Z1_TQ, SFEXCH7A.549
& CD_SEA,CH_SEA,LTIMER) SFEXCH7A.550
SFEXCH7A.551
! Land tiles SFEXCH7A.552
DO N=1,NTYPE SFEXCH7A.553
CALL FCDCH_LAND
( SFEXCH7A.554
& P_FIELD,LAND_FIELD,TILE_PTS(N),TILE_INDEX(1,N),LAND_INDEX, SFEXCH7A.555
& RIB_TILE(1,N),WIND_PROFILE_FACTOR(1,N), SFEXCH7A.556
& Z0M_EFF_TILE(1,N),Z0H_TILE(1,N),Z0F_TILE(1,N),Z1_UV,Z1_TQ, SFEXCH7A.557
& CD_TILE(1,N),CH_TILE(1,N),CD_STD(1,N),LTIMER SFEXCH7A.558
& ) SFEXCH7A.559
ENDDO SFEXCH7A.560
SFEXCH7A.561
!----------------------------------------------------------------------- SFEXCH7A.562
!! 4.1 Recalculate RESFT using "true" CH and EPDT for snow-free land SFEXCH7A.563
!! tiles SFEXCH7A.564
!----------------------------------------------------------------------- SFEXCH7A.565
SFEXCH7A.566
DO N=1,NTYPE-1 SFEXCH7A.567
DO J=1,TILE_PTS(N) SFEXCH7A.568
L = TILE_INDEX(J,N) SFEXCH7A.569
I = LAND_INDEX(L) SFEXCH7A.570
DQ(L) = QW_1(I) - QSTAR_TILE(L,N) SFEXCH7A.571
EPDT(L) = - RHOSTAR(I)*CH_TILE(L,N)*VSHR(I)*DQ(L)*TIMESTEP SFEXCH7A.572
ENDDO SFEXCH7A.573
CALL SF_RESIST
( SFEXCH7A.574
& P_FIELD,LAND_FIELD,TILE_PTS(N),LAND_INDEX,TILE_INDEX(1,N), SFEXCH7A.575
& CANOPY(1,N),CATCH(1,N),CH_TILE(1,N),DQ,EPDT,GC(1,N),VSHR, SFEXCH7A.576
& FRACA(1,N),RESFS(1,N),RESFT(1,N),LTIMER SFEXCH7A.577
& ) SFEXCH7A.578
ENDDO SFEXCH7A.579
SFEXCH7A.580
!----------------------------------------------------------------------- SFEXCH7A.581
! Calculate gridbox-means of transfer coefficients. SFEXCH7A.582
!----------------------------------------------------------------------- SFEXCH7A.583
SFEXCH7A.584
DO I=P1,P1+P_POINTS-1 SFEXCH7A.585
CD(I) = 0. SFEXCH7A.586
CH(I) = 0. SFEXCH7A.587
SFEXCH7A.588
! Sea and sea-ice SFEXCH7A.589
IF ( .NOT.LAND_MASK(I) ) THEN SFEXCH7A.590
IF ( ICE_FRACT(I) .LT. 0.7 ) THEN SFEXCH7A.591
CD(I) = ( ICE_FRACT(I)*CD_MIZ(I) + SFEXCH7A.592
& (0.7-ICE_FRACT(I))*CD_SEA(I) ) / 0.7 ! P2430.5 SFEXCH7A.593
CH(I) = ( ICE_FRACT(I)*CH_MIZ(I) + SFEXCH7A.594
& (0.7-ICE_FRACT(I))*CH_SEA(I) ) / 0.7 ! P2430.4 SFEXCH7A.595
ELSE SFEXCH7A.596
CD(I) = ( (1.0-ICE_FRACT(I))*CD_MIZ(I) + SFEXCH7A.597
& (ICE_FRACT(I)-0.7)*CD_ICE(I) ) / 0.3 ! P2430.7 SFEXCH7A.598
CH(I) = ( (1.0-ICE_FRACT(I))*CH_MIZ(I) + SFEXCH7A.599
& (ICE_FRACT(I)-0.7)*CH_ICE(I) ) / 0.3 ! P2430.7 SFEXCH7A.600
ENDIF SFEXCH7A.601
ENDIF SFEXCH7A.602
SFEXCH7A.603
ENDDO SFEXCH7A.604
SFEXCH7A.605
! Land tiles SFEXCH7A.606
DO N=1,NTYPE SFEXCH7A.607
DO J=1,TILE_PTS(N) SFEXCH7A.608
L = TILE_INDEX(J,N) SFEXCH7A.609
I = LAND_INDEX(L) SFEXCH7A.610
CD(I) = CD(I) + TILE_FRAC(L,N)*CD_TILE(L,N) SFEXCH7A.611
CH(I) = CH(I) + TILE_FRAC(L,N)*CH_TILE(L,N) SFEXCH7A.612
ENDDO SFEXCH7A.613
ENDDO SFEXCH7A.614
SFEXCH7A.615
!----------------------------------------------------------------------- SFEXCH7A.616
!! 4.3 Calculate the surface exchange coefficients RHOK(*) and SFEXCH7A.617
! resistances for use in Sulphur Cycle SFEXCH7A.618
! (Note that CD_STD, CH and VSHR should never = 0) SFEXCH7A.619
! RHOSTAR * CD * VSHR stored for diagnostic output before SFEXCH7A.620
! horizontal interpolation. SFEXCH7A.621
!----------------------------------------------------------------------- SFEXCH7A.622
SFEXCH7A.623
DO I=P1,P1+P_POINTS-1 SFEXCH7A.624
RHO_ARESIST(I) = 0. SFEXCH7A.625
ARESIST(I) = 0. SFEXCH7A.626
RESIST_B(I) = 0. SFEXCH7A.627
RHOKM_1(I) = 0. SFEXCH7A.628
SFEXCH7A.629
! Sea and sea-ice SFEXCH7A.630
IF ( .NOT.LAND_MASK(I) ) THEN SFEXCH7A.631
RHOKM_1(I) = RHOSTAR(I)*CD(I)*VSHR(I) ! P243.124 SFEXCH7A.632
RHOKH_1_SICE(I) = RHOSTAR(I) * CH(I) * VSHR(I) ! P243.125 SFEXCH7A.633
RHO_ARESIST(I) = RHOSTAR(I) * CD(I) * VSHR(I) SFEXCH7A.634
ARESIST(I) = 1. / (CD(I) * VSHR(I)) SFEXCH7A.635
RESIST_B(I)= (CD(I)/CH(I) - 1.0) * ARESIST(I) SFEXCH7A.636
ENDIF SFEXCH7A.637
SFEXCH7A.638
ENDDO SFEXCH7A.639
SFEXCH7A.640
! Land tiles SFEXCH7A.641
DO N=1,NTYPE SFEXCH7A.642
DO L=LAND1,LAND1+LAND_PTS-1 SFEXCH7A.643
RHO_ARESIST_TILE(L,N) = 0. SFEXCH7A.644
ARESIST_TILE(L,N) = 0. SFEXCH7A.645
RESIST_B_TILE(L,N) = 0. SFEXCH7A.646
ENDDO SFEXCH7A.647
DO J=1,TILE_PTS(N) SFEXCH7A.648
L = TILE_INDEX(J,N) SFEXCH7A.649
I = LAND_INDEX(L) SFEXCH7A.650
RHOKM_1_TILE(L,N) = RHOSTAR(I)*CD_TILE(L,N)*VSHR(I) ! P243.124 SFEXCH7A.651
RHOKM_1(I) = RHOKM_1(I) + TILE_FRAC(L,N)*RHOKM_1_TILE(L,N) SFEXCH7A.652
RHOKH_1(L,N) = RHOSTAR(I)*CH_TILE(L,N)*VSHR(I) ! P243.125 SFEXCH7A.653
RHO_ARESIST_TILE(L,N) = RHOSTAR(I) * CD_STD(L,N) * VSHR(I) SFEXCH7A.654
ARESIST_TILE(L,N) = 1. / ( CD_STD(L,N) * VSHR(I) ) SFEXCH7A.655
RESIST_B_TILE(L,N) = ( CD_STD(L,N)/CH_TILE(L,N) - 1.0 ) * SFEXCH7A.656
& ARESIST_TILE(L,N) SFEXCH7A.657
ENDDO SFEXCH7A.658
ENDDO SFEXCH7A.659
SFEXCH7A.660
DO I=P1,P1+P_POINTS-1 SFEXCH7A.661
RHO_CD_MODV1(I) = RHOKM_1(I) ! diagnostic required for VAR SFEXCH7A.662
ENDDO SFEXCH7A.663
SFEXCH7A.664
!----------------------------------------------------------------------- SFEXCH7A.665
!! Calculate local and gridbox-average surface fluxes of heat and SFEXCH7A.666
!! moisture. Parameters for snow tile depend on whether or not a land SFEXCH7A.667
!! point has permanent ice cover. SFEXCH7A.668
!----------------------------------------------------------------------- SFEXCH7A.669
SFEXCH7A.670
DO I=P1,P1+P_POINTS-1 SFEXCH7A.671
FTL_1(I) = 0. SFEXCH7A.672
FQW_1(I) = 0. SFEXCH7A.673
ASHTF(I) = 2 * KAPPAI / DE SFEXCH7A.674
ENDDO SFEXCH7A.675
SFEXCH7A.676
DO N=1,NTYPE SFEXCH7A.677
DO L = LAND1,LAND1+LAND_PTS-1 SFEXCH7A.678
FTL_TILE(L,N) = 0. SFEXCH7A.679
FQW_TILE(L,N) = 0. SFEXCH7A.680
ENDDO SFEXCH7A.681
ENDDO SFEXCH7A.682
SFEXCH7A.683
DO L = LAND1,LAND1+LAND_PTS-1 SFEXCH7A.684
I = LAND_INDEX(L) SFEXCH7A.685
ASHTF(I) = 2.0 * HCONS(L) / DZSOIL SFEXCH7A.689
ASHTF_SNOW(I) = ASHTF(I) SFEXCH7A.691
IF ( SMVCST(L).NE.0. ) THEN SFEXCH7A.692
ASHTF_SNOW(I) = 2.0 * SNOW_HCON / DEFF_SNOW SFEXCH7A.693
ENDIF SFEXCH7A.694
ENDDO SFEXCH7A.695
SFEXCH7A.696
! Sea and sea-ice SFEXCH7A.697
CALL SF_FLUX_SEA
( SFEXCH7A.698
& P_POINTS,P_FIELD,P1,NSICE,SICE_INDEX,LAND_MASK, SFEXCH7A.699
& ASHTF,ICE_FRACT,QS1,QSTAR_ICE,QSTAR_SEA,QW_1,RADNET,RHOKH_1_SICE, SFEXCH7A.700
& TI,TL_1,TSTAR_ICE,TSTAR_SEA,Z0_ICE,Z0_ICE,Z0H_SEA,Z0MSEA,Z1_TQ, SFEXCH7A.701
& ALPHA1_SICE,E_SEA,FQW_ICE,FQW_1,FTL_ICE,FTL_1,H_SEA,RHOKPM_SICE, SFEXCH7A.702
& LTIMER SFEXCH7A.703
& ) SFEXCH7A.704
SFEXCH7A.705
! Snow-free land tiles SFEXCH7A.706
DO N=1,NTYPE-1 SFEXCH7A.707
CALL SF_FLUX_LAND
( SFEXCH7A.708
& P_FIELD,LAND_FIELD,TILE_PTS(N),LAND_INDEX,TILE_INDEX(1,N), SFEXCH7A.709
& ASHTF,LC,QS1,QSTAR_TILE(1,N),QW_1,RADNET,RESFT(1,N), SFEXCH7A.710
& RHOKH_1(1,N),TILE_FRAC(1,N),TL_1,TS1,TSTAR_TILE(1,N), SFEXCH7A.711
& Z0H_TILE(1,N),Z0M_EFF_TILE(1,N),Z1_TQ, SFEXCH7A.712
& FQW_1,FTL_1, SFEXCH7A.713
& ALPHA1(1,N),FQW_TILE(1,N),FTL_TILE(1,N),RHOKPM(1,N),LTIMER SFEXCH7A.714
& ) SFEXCH7A.715
ENDDO SFEXCH7A.716
SFEXCH7A.717
! Snow and land-ice tile SFEXCH7A.718
N=NTYPE SFEXCH7A.719
CALL SF_FLUX_LAND
( SFEXCH7A.720
& P_FIELD,LAND_FIELD,TILE_PTS(N),LAND_INDEX,TILE_INDEX(1,N), SFEXCH7A.721
& ASHTF_SNOW,LS,QS1,QSTAR_TILE(1,N),QW_1,RADNET_SNOW,RESFT(1,N), SFEXCH7A.722
& RHOKH_1(1,N),TILE_FRAC(1,N),TL_1,TSNOW,TSTAR_TILE(1,N), SFEXCH7A.723
& Z0H_TILE(1,N),Z0M_EFF_TILE(1,N),Z1_TQ, SFEXCH7A.724
& FQW_1,FTL_1, SFEXCH7A.725
& ALPHA1(1,N),FQW_TILE(1,N),FTL_TILE(1,N),RHOKPM(1,N),LTIMER SFEXCH7A.726
& ) SFEXCH7A.727
SFEXCH7A.728
!----------------------------------------------------------------------- SFEXCH7A.729
!! 4.4 Calculate the standard deviations of layer 1 turbulent SFEXCH7A.730
!! fluctuations of temperature and humidity using approximate SFEXCH7A.731
!! formulae from first order closure. SFEXCH7A.732
!----------------------------------------------------------------------- SFEXCH7A.733
SFEXCH7A.734
DO I=P1,P1+P_POINTS-1 SFEXCH7A.735
Q1_SD(I) = 0. SFEXCH7A.736
T1_SD(I) = 0. SFEXCH7A.737
ENDDO SFEXCH7A.738
SFEXCH7A.739
! Sea and sea-ice SFEXCH7A.740
CALL STDEV1_SEA
( SFEXCH7A.741
& P_POINTS,P_FIELD,P1,LAND_MASK, SFEXCH7A.742
& BQ_1,BT_1,FQW_1,FTL_1,ICE_FRACT,RHOKM_1,RHOSTAR,VSHR, SFEXCH7A.743
& Z0MSEA,Z0_ICE,Z1_TQ, SFEXCH7A.744
& Q1_SD,T1_SD,LTIMER SFEXCH7A.745
& ) SFEXCH7A.746
SFEXCH7A.747
! Land tiles SFEXCH7A.748
DO N=1,NTYPE SFEXCH7A.749
CALL STDEV1_LAND
( SFEXCH7A.750
& P_FIELD,LAND_FIELD,TILE_PTS(N),LAND_INDEX,TILE_INDEX(1,N), SFEXCH7A.751
& BQ_1,BT_1,FQW_TILE(1,N),FTL_TILE(1,N),RHOKM_1_TILE(1,N), SFEXCH7A.752
& RHOSTAR,VSHR,Z0M_TILE(1,N),Z1_TQ, SFEXCH7A.753
& Q1_SD,T1_SD,LTIMER SFEXCH7A.754
& ) SFEXCH7A.755
ENDDO SFEXCH7A.756
SFEXCH7A.757
!----------------------------------------------------------------------- SFEXCH7A.758
!! 4.5 Set indicator for unstable suface layer (buoyancy flux +ve.). SFEXCH7A.759
!----------------------------------------------------------------------- SFEXCH7A.760
! Set to 0 - rapidly mixing boundary layer not available with MOSES II SFEXCH7A.761
SFEXCH7A.762
DO I=P1,P1+P_POINTS-1 SFEXCH7A.763
NRML(I) = 0 SFEXCH7A.764
ENDDO SFEXCH7A.765
SFEXCH7A.766
!----------------------------------------------------------------------- SFEXCH7A.767
!! 4.6 For sea points, calculate the wind mixing energy flux and the SFEXCH7A.768
!! sea-surface roughness length on the P-grid, using time-level n SFEXCH7A.769
!! quantities. SFEXCH7A.770
!----------------------------------------------------------------------- SFEXCH7A.771
SFEXCH7A.772
DO I=P1,P1+P_POINTS-1 SFEXCH7A.773
SFEXCH7A.774
IF (SFME) FME(I) = 0.0 SFEXCH7A.775
IF (.NOT.LAND_MASK(I)) THEN SFEXCH7A.776
TAU = RHOKM_1(I) * VSHR(I) ! P243.130 SFEXCH7A.777
IF (ICE_FRACT(I) .GT. 0.0) SFEXCH7A.778
& TAU = RHOSTAR(I) * CD_SEA(I) * VSHR(I) * VSHR(I) SFEXCH7A.779
SFEXCH7A.780
IF (SFME) FME(I) = (1.0-ICE_FRACT(I)) * TAU * SQRT(TAU/RHOSEA) SFEXCH7A.781
! ! P243.96 SFEXCH7A.782
Z0MSEA(I) = MAX ( Z0HSEA , SFEXCH7A.783
& (CHARNOCK/G) * (TAU / RHOSTAR(I)) ) SFEXCH7A.784
! ... P243.B6 (Charnock formula) SFEXCH7A.785
! TAU/RHOSTAR is "mod VS squared", see eqn P243.131 SFEXCH7A.786
ENDIF SFEXCH7A.787
SFEXCH7A.788
ENDDO SFEXCH7A.789
SFEXCH7A.790
!----------------------------------------------------------------------- SFEXCH7A.791
! Calculate effective roughness lengths, orographic blending heights SFEXCH7A.792
! and gridbox-average Richardson numbers. SFEXCH7A.793
!----------------------------------------------------------------------- SFEXCH7A.794
SFEXCH7A.795
DO I=P1,P1+P_POINTS-1 SFEXCH7A.796
RIB(I) = 0. SFEXCH7A.797
Z0M_EFF(I) = 1. SFEXCH7A.798
SFEXCH7A.799
! Sea and sea-ice (leads ignored) SFEXCH7A.800
IF ( .NOT.LAND_MASK(I) ) THEN SFEXCH7A.801
H_BLEND_OROG(I) = H_BLEND_MIN SFEXCH7A.802
RIB(I) = RIB_SEA(I) SFEXCH7A.803
Z0M_EFF(I) = Z0MSEA(I) SFEXCH7A.804
Z0M(I) = Z0MSEA(I) SFEXCH7A.805
Z0H(I) = Z0HSEA SFEXCH7A.806
IF ( ICE_FRACT(I) .GT. 0. ) THEN SFEXCH7A.807
RIB(I) = RIB_ICE(I) SFEXCH7A.808
Z0M_EFF(I) = Z0_ICE(I) SFEXCH7A.809
Z0M(I) = Z0_ICE(I) SFEXCH7A.810
Z0H(I) = Z0_ICE(I) SFEXCH7A.811
ENDIF SFEXCH7A.812
ENDIF SFEXCH7A.813
SFEXCH7A.814
ENDDO SFEXCH7A.815
SFEXCH7A.816
DO N=1,NTYPE SFEXCH7A.817
DO J=1,TILE_PTS(N) SFEXCH7A.818
L = TILE_INDEX(J,N) SFEXCH7A.819
I = LAND_INDEX(L) SFEXCH7A.820
RIB(I) = RIB(I) + TILE_FRAC(L,N)*RIB_TILE(L,N) SFEXCH7A.821
ENDDO SFEXCH7A.822
ENDDO SFEXCH7A.823
SFEXCH7A.824
SFEXCH7A.825
DO L = LAND1,LAND1+LAND_PTS-1 SFEXCH7A.826
Z0_GB(L) = Z0_SF_GB(LAND_INDEX(L)) SFEXCH7A.827
ENDDO SFEXCH7A.828
DO J=1,TILE_PTS(NTYPE) SFEXCH7A.829
L = TILE_INDEX(J,NTYPE) SFEXCH7A.830
Z0 = TILE_FRAC(L,NTYPE) / ( LOG(LB/Z0M_TILE(L,NTYPE))**2 ) + SFEXCH7A.831
& (1. - TILE_FRAC(L,NTYPE)) / ( LOG(LB/Z0_GB(L))**2 ) SFEXCH7A.832
Z0_GB(L) = LB * EXP( - SQRT(1./Z0) ) SFEXCH7A.833
ENDDO SFEXCH7A.834
SFEXCH7A.835
CALL SF_OROG_GB
( SFEXCH7A.836
& P_FIELD,P1,P_POINTS,LAND_FIELD,LAND1,LAND_PTS,LAND_INDEX, SFEXCH7A.837
& LAND_MASK,L_Z0_OROG,HO2R2_OROG,RIB,SIL_OROG,Z0_GB,Z1_UV, SFEXCH7A.838
& H_BLEND_OROG,Z0M_EFF,LTIMER SFEXCH7A.839
& ) SFEXCH7A.840
SFEXCH7A.841
!----------------------------------------------------------------------- SFEXCH7A.842
!! Call SFL_INT to calculate CDR10M and CHR1P5M - interpolation coeffs SFEXCH7A.843
!! used to calculate screen temperature, humidity and 10m winds. SFEXCH7A.844
!----------------------------------------------------------------------- SFEXCH7A.845
SFEXCH7A.846
IF (SU10 .OR. SV10 .OR. SQ1P5 .OR. ST1P5) THEN SFEXCH7A.847
SFEXCH7A.848
! Sea and sea-ice (leads ignored) SFEXCH7A.849
DO I=P1,P1+P_POINTS-1 SFEXCH7A.850
CDR10M(I) =0. SFEXCH7A.851
IF ( .NOT.LAND_MASK(I) .AND. ICE_FRACT(I).GT.0. ) THEN SFEXCH7A.852
CD_SEA(I) = CD_ICE(I) SFEXCH7A.853
CH_SEA(I) = CH_ICE(I) SFEXCH7A.854
Z0H_SEA(I) = Z0_ICE(I) SFEXCH7A.855
Z0F_SEA(I) = Z0_ICE(I) SFEXCH7A.856
ENDIF SFEXCH7A.857
ENDDO SFEXCH7A.858
SFEXCH7A.859
CALL SFL_INT_SEA
( SFEXCH7A.860
& P_POINTS,P_FIELD,P1, SFEXCH7A.861
& CD_SEA,CH_SEA,RIB,Z0M_EFF,Z0H_SEA,Z0F_SEA,Z1_UV, SFEXCH7A.862
& LAND_MASK,SU10,SV10,ST1P5,SQ1P5,LTIMER, SFEXCH7A.863
& CDR10M,CHR1P5M_SICE SFEXCH7A.864
& ) SFEXCH7A.865
SFEXCH7A.866
! Land tiles SFEXCH7A.867
DO N=1,NTYPE SFEXCH7A.868
CALL SFL_INT_LAND
( SFEXCH7A.869
& P_FIELD,LAND_FIELD,TILE_PTS(N),TILE_INDEX(1,N),LAND_INDEX, SFEXCH7A.870
& CD_STD(1,N),CD_TILE(1,N),CH_TILE(1,N),RIB_TILE(1,N), SFEXCH7A.871
& TILE_FRAC(1,N),WIND_PROFILE_FACTOR(1,N),Z0M_TILE(1,N), SFEXCH7A.872
& Z0M_EFF_TILE(1,N),Z0H_TILE(1,N),Z0F_TILE(1,N),Z1_UV, SFEXCH7A.873
& SU10,SV10,ST1P5,SQ1P5,LTIMER, SFEXCH7A.874
& CDR10M,CHR1P5M(1,N) SFEXCH7A.875
& ) SFEXCH7A.876
ENDDO SFEXCH7A.877
SFEXCH7A.878
ENDIF SFEXCH7A.879
SFEXCH7A.880
IF (LTIMER) THEN SFEXCH7A.881
CALL TIMER
('SFEXCH ',4) SFEXCH7A.882
ENDIF SFEXCH7A.883
SFEXCH7A.884
RETURN SFEXCH7A.885
END SFEXCH7A.886
*ENDIF SFEXCH7A.887