*IF DEF,A03_6A SFEXCH6A.2
C *****************************COPYRIGHT****************************** SFEXCH6A.3
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. SFEXCH6A.4
C SFEXCH6A.5
C Use, duplication or disclosure of this code is subject to the SFEXCH6A.6
C restrictions as set forth in the contract. SFEXCH6A.7
C SFEXCH6A.8
C Meteorological Office SFEXCH6A.9
C London Road SFEXCH6A.10
C BRACKNELL SFEXCH6A.11
C Berkshire UK SFEXCH6A.12
C RG12 2SZ SFEXCH6A.13
C SFEXCH6A.14
C If no contract has been raised with this copy of the code, the use, SFEXCH6A.15
C duplication or disclosure of it is strictly prohibited. Permission SFEXCH6A.16
C to do so must first be obtained in writing from the Head of Numerical SFEXCH6A.17
C Modelling at the above address. SFEXCH6A.18
C ******************************COPYRIGHT****************************** SFEXCH6A.19
!!! SUBROUTINE SF_EXCH------------------------------------------------ SFEXCH6A.20
!!! SFEXCH6A.21
!!! Purpose: Calculate coefficients of turbulent exchange between SFEXCH6A.22
!!! the surface and the lowest atmospheric layer, and SFEXCH6A.23
!!! "explicit" fluxes between the surface and this layer. SFEXCH6A.24
!!! SFEXCH6A.25
!!! Suitable for Single Column use. AJC1F405.91
!!! SFEXCH6A.27
!!! Canopy evaporation made implicit SFEXCH6A.28
!!! with respect to canopy water content (requiring TIMESTEP to be SFEXCH6A.29
!!! passed in). SFEXCH6A.30
!!! SFEXCH6A.31
!!! SFEXCH6A.32
!!! Model Modification history: SFEXCH6A.33
!!! version Date SFEXCH6A.34
!!! 4.4 10/09/95 New deck R.N.B.Smith SFEXCH6A.35
!!! 4.5 Jul. 98 Kill the IBM specific lines (JCThil) AJC1F405.90
!!! SFEXCH6A.36
!!! Programming standard: SFEXCH6A.37
!!! SFEXCH6A.38
!!! System component covered: Part of P243. SFEXCH6A.39
!!! SFEXCH6A.40
!!! Project task: SFEXCH6A.41
!!! SFEXCH6A.42
!!! Documentation: UM Documentation Paper No 24, section P243. SFEXCH6A.43
!!! SFEXCH6A.44
!!!--------------------------------------------------------------------- SFEXCH6A.45
SFEXCH6A.46
! Arguments :- SFEXCH6A.47
SFEXCH6A.48
SUBROUTINE SF_EXCH ( 4,99SFEXCH6A.49
& P_POINTS,LAND_PTS,P_FIELD,LAND_FIELD,N_TYPES SFEXCH6A.50
&,P1,LAND1 SFEXCH6A.51
&,LAND_INDEX,GATHER SFEXCH6A.53
&,P_1,TILE_FRAC SFEXCH6A.55
&,CANOPY,CATCH,CO2 SFEXCH6A.56
&,SM_LEVELS,DZSOIL,HCONS,F_TYPE SFEXCH6A.57
&,HT,LAI,PAR,GPP,NPP,RESP_P SFEXCH6A.58
&,ICE_FRACT,LAND_MASK,LYING_SNOW,PSTAR,Q_1 SFEXCH6A.59
&,QCF_1,QCL_1,RADNET_C,GC,RESIST APA1F405.438
&,ROOTD,SMC,SMVCCL,SMVCWT SFEXCH6A.61
&,T_1,TIMESTEP,TI,TS1,TSTAR_GB SFEXCH6A.62
&,TSTAR_TILE,U_1,V_1,U_0,V_0 SFEXCH6A.63
&,V_ROOT,V_SOIL,VFRAC SFEXCH6A.64
&,Z0V_GB,Z0V,SIL_OROG,HO2R2_OROG,ZH SFEXCH6A.65
&,Z1_UV,Z1_TQ,CANCAP,Z0MSEA,ALPHA1_GB,ALPHA1,ASHTF APA1F405.439
&,BQ1_GB,BT1_GB,CD,CH SFEXCH6A.67
&,FQW_1,FQW1_GB,FTL_1,FTL1_GB SFEXCH6A.68
&,EPOT,EPOT_GB,FSMC,FSMC_GB ANG1F405.105
&,E_SEA,H_SEA,FRACA,RESFS,F_SE SFEXCH6A.69
&,RESFT,RESFT_GB,RHOKE,RHOKH_1,RHOKH_1_GB SFEXCH6A.70
&,RHOKM_1_GB,RHOKPM,RHOKPM_GB,RHOKPM_POT,RHOKPM_POT_GB ANG1F405.106
&,RIB_GB,RIB,TL_1,VSHR,Z0H_T,Z0M_T,Z0M_EFF_T,Z0M_EFF SFEXCH6A.72
&,H_BLEND_OROG,H_BLEND,T1_SD,Q1_SD,TV1_SD,U_S,FB_SURF SFEXCH6A.73
&,RHO_CD_MODV1,WIND_BLEND_FACTOR,HEAT_BLEND_FACTOR SFEXCH6A.74
&,CDR10M,CHR1P5M,CER1P5M,FME SFEXCH6A.75
&,SU10,SV10,SQ1P5,ST1P5,SFME SFEXCH6A.76
&,RHO_ARESIST,ARESIST,RESIST_B,NRML SFEXCH6A.77
&,L_Z0_OROG,L_RMBL,LTIMER SFEXCH6A.78
&) SFEXCH6A.79
SFEXCH6A.80
IMPLICIT NONE SFEXCH6A.81
SFEXCH6A.82
! Input variables. All fields are on P grid except where noted. SFEXCH6A.83
! Fxxx in a comment indicates the file from which the data are taken. SFEXCH6A.84
SFEXCH6A.85
SFEXCH6A.87
! GENERAL NOTES ABOUT GRID-DEFINITION INPUT VARIABLES. SFEXCH6A.88
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SFEXCH6A.89
! For global data :- SFEXCH6A.90
SFEXCH6A.91
! An Arakawa B-grid is assumed in which each pole is represented by a SFEXCH6A.92
! row of P-grid points. Entire fields of P-grid values are taken as SFEXCH6A.93
! input, but the two polemost rows are (a) not updated, in the case SFEXCH6A.94
! of INOUT fields, or (b) set to zero, in the case of OUT fields. SFEXCH6A.95
SFEXCH6A.96
! If defined variable IBM is selected then land point calculations are SFEXCH6A.97
! performed using the array LAND_INDEX to select land points. But note SFEXCH6A.98
! that elements of LAND_INDEX define land points on the full field SFEXCH6A.99
! (ie including polar rows). SFEXCH6A.100
SFEXCH6A.101
! Entire fields of UV-grid values are taken as input, but the two SFEXCH6A.102
! polemost rows are (a) not updated, in the case of INOUT fields, or SFEXCH6A.103
! (b) set to zero, in the case of OUT fields. SFEXCH6A.104
SFEXCH6A.105
! For limited-area data :- SFEXCH6A.106
SFEXCH6A.107
! The above applies, but for "polar rows", etc., read "rows at the SFEXCH6A.108
! north and south boundaries of the area", etc. E.g. if you want to SFEXCH6A.109
! do calculations in UV-rows n to m inclusive, the input data will be SFEXCH6A.110
! on P-rows n-1 to m+1, and UV-rows n-1 to m+1. P-rows n to m will SFEXCH6A.111
! then be updated. Land specific variables are processed as for global SFEXCH6A.112
! data. SFEXCH6A.113
SFEXCH6A.114
! For both cases, the following equalities apply amongst the input SFEXCH6A.115
! grid-definition variables :- SFEXCH6A.116
SFEXCH6A.117
! P_POINTS = P_ROWS * ROW_LENGTH SFEXCH6A.118
! U_POINTS = U_ROWS * ROW_LENGTH SFEXCH6A.119
! U_ROWS = P_ROWS + 1 SFEXCH6A.120
! LAND_PTS <= P_POINTS SFEXCH6A.121
SFEXCH6A.122
! NB: All this has severe implications for batching/macrotasking; SFEXCH6A.123
! effectively it can't be done on a shared-memory machine without SFEXCH6A.124
! either rewriting this routine or using expensive synchronizations SFEXCH6A.125
! (or other messy and/or undesirable subterfuges). SFEXCH6A.126
SFEXCH6A.127
SFEXCH6A.142
LOGICAL LTIMER SFEXCH6A.143
SFEXCH6A.144
INTEGER ! Variables defining grid. SFEXCH6A.145
& P_POINTS ! IN Number of P-grid points to be SFEXCH6A.146
! processed. SFEXCH6A.147
&,P_FIELD ! IN Total number of P-grid points. SFEXCH6A.148
&,P1 ! IN First P-point to be processed. SFEXCH6A.149
&,LAND1 ! IN First land point to be processed. SFEXCH6A.150
&,LAND_PTS ! IN Number of land points to be processed. SFEXCH6A.151
&,LAND_FIELD ! IN Total number of land points. SFEXCH6A.152
&,N_TYPES ! IN Number of tiles per land point. SFEXCH6A.153
&,LAND_INDEX(LAND_FIELD)! IN Index for compressed land point array; SFEXCH6A.155
! ith element holds position in the FULL SFEXCH6A.156
! field of the ith land pt to be processed SFEXCH6A.157
SFEXCH6A.158
LOGICAL SFEXCH6A.159
& GATHER ! IN If true then leads variables are comp- SFEXCH6A.160
! ressed for sea-ice calculations. This SFEXCH6A.161
! saves duplicating calculations if there SFEXCH6A.162
! are a relatively few of sea-ice points. SFEXCH6A.163
! Set to false for a limited area run SFEXCH6A.164
! with a high proportion of sea-ice. SFEXCH6A.165
SFEXCH6A.167
! Extra variables for the interactive stomatal resistance model SFEXCH6A.168
SFEXCH6A.169
INTEGER SFEXCH6A.170
& SM_LEVELS ! IN Number of soil moisture levels. SFEXCH6A.171
&,F_TYPE(LAND_FIELD,N_TYPES) SFEXCH6A.172
! IN Plant functional type: SFEXCH6A.173
! 1 - Broadleaf Tree SFEXCH6A.174
! 2 - Needleleaf Tree SFEXCH6A.175
! 3 - C3 Grass SFEXCH6A.176
! 4 - C4 Grass SFEXCH6A.177
REAL SFEXCH6A.178
& CANOPY(LAND_FIELD) ! IN Surface water (kg per sq metre). F642. SFEXCH6A.179
&,CATCH(LAND_FIELD,N_TYPES) SFEXCH6A.180
! IN Surface capacity (max. surface water) SFEXCH6A.181
! (kg per sq metre). F6416. SFEXCH6A.182
&,CO2 ! IN CO2 Mass Mixing Ratio SFEXCH6A.183
&,DZSOIL(SM_LEVELS) ! IN Soil layer thicknesses (m) SFEXCH6A.184
&,HCONS(LAND_FIELD) ! IN Soil thermal conductivity (W/m/K). SFEXCH6A.185
&,HO2R2_OROG(LAND_FIELD)! IN Peak to trough height of unresolved SFEXCH6A.186
! orography devided by 2SQRT(2) (m). SFEXCH6A.187
&,HT(LAND_FIELD,N_TYPES)! IN Canopy height (m). SFEXCH6A.188
&,ICE_FRACT(P_FIELD) ! IN Fraction of gridbox which is sea-ice. SFEXCH6A.189
&,LAI(LAND_FIELD,N_TYPES)!IN Leaf area index. SFEXCH6A.190
&,LYING_SNOW(P_FIELD) ! IN Lying snow amount (kg per sq metre). SFEXCH6A.191
&,PAR(P_FIELD) ! IN Photosynthetically active radiation SFEXCH6A.192
! (W/m2). SFEXCH6A.193
&,PSTAR(P_FIELD) ! IN Surface pressure (Pascals). SFEXCH6A.194
&,P_1(P_FIELD) ! IN pressure lowest atmospheric SFEXCH6A.195
&,Q_1(P_FIELD) ! IN Specific humidity for lowest SFEXCH6A.196
! atmospheric layer (kg water per kg air). SFEXCH6A.197
&,QCF_1(P_FIELD) ! IN Cloud ice for lowest atmospheric layer SFEXCH6A.198
! (kg water per kg air). SFEXCH6A.199
&,QCL_1(P_FIELD) ! IN Cloud liquid water for lowest atm SFEXCH6A.200
! layer (kg water per kg air). SFEXCH6A.201
&,RESIST(LAND_FIELD,N_TYPES) SFEXCH6A.204
! ! IN "Stomatal" resistance to evaporation SFEXCH6A.205
! (seconds per metre). F6415. SFEXCH6A.206
&,ROOTD(LAND_FIELD,N_TYPES) SFEXCH6A.207
! IN "Root depth" (metres). F6412. SFEXCH6A.208
&,SIL_OROG(LAND_FIELD) ! IN Silhouette area of unresolved SFEXCH6A.209
! orography per unit horizontal area SFEXCH6A.210
&,SMC(LAND_FIELD,N_TYPES)!IN Soil moisture content (kg/m2). F621. SFEXCH6A.211
&,SMVCCL(LAND_FIELD) ! IN Critical volumetric SMC (cubic metres SFEXCH6A.212
! per cubic metre of soil). F6232. SFEXCH6A.213
&,SMVCWT(LAND_FIELD) ! IN Volumetric wilting point (cubic m of SFEXCH6A.214
! water per cubic m of soil). F6231. SFEXCH6A.215
SFEXCH6A.216
! Note: (SMVCCL - SMVCWT) is the critical volumetric available soil SFEXCH6A.217
! moisture content. ~~~~~~~~~ SFEXCH6A.218
SFEXCH6A.219
REAL ! (Split to avoid > 19 continuations.) SFEXCH6A.220
& T_1(P_FIELD) ! IN Temperature for lowest atmospheric SFEXCH6A.221
! layer (Kelvin). SFEXCH6A.222
&,TILE_FRAC(P_FIELD,N_TYPES) SFEXCH6A.223
! IN Fractional coverage for each tile SFEXCH6A.224
&,TIMESTEP ! IN Timestep in seconds for EPDT calc. SFEXCH6A.225
&,TI(P_FIELD) ! IN Temperature of sea-ice surface layer SFEXCH6A.226
! (Kelvin) SFEXCH6A.227
&,TL_1(P_FIELD) ! IN Liquid/frozen water temperature for SFEXCH6A.228
! lowest atmospheric layer (K). SFEXCH6A.229
&,TS1(LAND_FIELD) ! IN Temperature of top soil layer (K) SFEXCH6A.230
&,TSTAR_TILE(P_FIELD,N_TYPES) SFEXCH6A.231
! IN Tile surface temperature (K). SFEXCH6A.232
&,TSTAR_GB(P_FIELD) ! IN Mean gridbox surface temperature (K). SFEXCH6A.233
&,U_0(P_FIELD) ! IN West-to-east component of ocean SFEXCH6A.234
! surface current (m/s; ASSUMED zero over SFEXCH6A.235
! land). UV grid. F615. SFEXCH6A.236
&,U_1(P_FIELD) ! IN West-to-east wind component for lowest SFEXCH6A.237
! atmospheric layer (m/s). On UV grid. SFEXCH6A.238
&,V_0(P_FIELD) ! IN South-to-north component of ocean SFEXCH6A.239
! surface current (m/s; ASSUMED zero over SFEXCH6A.240
! land). UV grid. F616. SFEXCH6A.241
&,V_1(P_FIELD) ! IN South-to-north wind component for SFEXCH6A.242
! lowest atm. layer (m/s). On UV grid. SFEXCH6A.243
&,V_ROOT(LAND_FIELD,N_TYPES) SFEXCH6A.244
! ! IN Volumetric soil moisture concentration SFEXCH6A.245
! in the rootzone (m3 H2O/m3 soil). SFEXCH6A.246
&,V_SOIL(LAND_FIELD) ! IN Volumetric soil moisture concentration SFEXCH6A.247
! in the top soil layer (m3 H2O/m3 soil). SFEXCH6A.248
&,VFRAC(LAND_FIELD,N_TYPES) SFEXCH6A.249
! ! IN Vegetation fraction. SFEXCH6A.250
&,Z0V(P_FIELD,N_TYPES) ! IN Tile vegetative roughness length (m). SFEXCH6A.251
&,Z0V_GB(P_FIELD) ! IN Gridbox veg. roughness length (m). SFEXCH6A.252
&,Z1_UV(P_FIELD) ! IN Height of lowest uv level (m). SFEXCH6A.253
&,Z1_TQ(P_FIELD) ! IN Height of lowest tq level (m). SFEXCH6A.254
! Note, if the grid used is staggered in SFEXCH6A.255
! the vertical, Z1_UV and Z1_TQ can be SFEXCH6A.256
! different. SFEXCH6A.257
&,ZH(P_FIELD) ! IN Height of top of boundary layer (m). SFEXCH6A.258
SFEXCH6A.259
LOGICAL SFEXCH6A.260
& LAND_MASK(P_FIELD) ! IN .TRUE. for land; .FALSE. elsewhere. SFEXCH6A.261
! F60. SFEXCH6A.262
&,SU10 ! IN STASH flag for 10-metre W wind. SFEXCH6A.263
&,SV10 ! IN STASH flag for 10-metre S wind. SFEXCH6A.264
&,SQ1P5 ! IN STASH flag for 1.5-metre sp humidity. SFEXCH6A.265
&,ST1P5 ! IN STASH flag for 1.5-metre temperature. SFEXCH6A.266
&,SFME ! IN STASH flag for wind mixing energy flux SFEXCH6A.267
&,L_RMBL ! IN T to use rapidly mixing boundary SFEXCH6A.268
! scheme in IMPL_CAL SFEXCH6A.269
&,L_Z0_OROG ! IN .TRUE. to use orographic roughness. SFEXCH6A.270
SFEXCH6A.271
! Modified (INOUT) variables. SFEXCH6A.272
SFEXCH6A.273
REAL SFEXCH6A.274
& CANCAP(P_FIELD,N_TYPES)! INOUT Volumetric heat capacity of APA1F405.440
C ! vegetation canopy (J/Kg/m3). APA1F405.441
&,RADNET_C(P_FIELD,N_TYPES) ! INOUT Adjusted net radiation for APA1F405.442
C ! vegetation over land (W/m2). APA1F405.443
&,Z0MSEA(P_FIELD) ! INOUT Sea-surface roughness length for APA1F405.444
! momentum (m). F617. SFEXCH6A.276
&,GC(LAND_FIELD,N_TYPES)! INOUT "Stomatal" conductance to SFEXCH6A.277
! evaporation (m/s). SFEXCH6A.278
SFEXCH6A.279
! Output variables. SFEXCH6A.280
! SFEXCH6A.281
REAL SFEXCH6A.282
& ALPHA1(P_FIELD,N_TYPES)!OUT Gradients of saturated specific SFEXCH6A.283
! humidity with respect to temperature SFEXCH6A.284
! between the bottom model layer and tile SFEXCH6A.285
! surface SFEXCH6A.286
&,ALPHA1_GB(P_FIELD) ! OUT Gradient of saturated specific SFEXCH6A.287
! humidity with respect to temperature SFEXCH6A.288
! between the bottom model layer and the SFEXCH6A.289
! mean surface SFEXCH6A.290
&,ASHTF(P_FIELD) ! OUT Coefficient to calculate surface SFEXCH6A.291
! heat flux into soil or sea-ice (W/m2/K) SFEXCH6A.292
&,BQ1_GB(P_FIELD) ! OUT A buoyancy parameter for lowest atm SFEXCH6A.293
! level ("beta-q twiddle"). SFEXCH6A.294
&,BT1_GB(P_FIELD) ! OUT A buoyancy parameter for lowest atm SFEXCH6A.295
! level ("beta-T twiddle"). SFEXCH6A.296
&,CD(P_FIELD) ! OUT Bulk transfer coefficient for SFEXCH6A.297
! momentum. SFEXCH6A.298
&,CH(P_FIELD) ! OUT Bulk transfer coefficient for heat SFEXCH6A.299
! and/or moisture. SFEXCH6A.300
&,CDR10M(P_FIELD) ! OUT Reqd for calculation of 10m wind SFEXCH6A.301
! (u & v). SFEXCH6A.302
! NBB: This is output on the UV-grid, but SFEXCH6A.303
! with the first and last rows set to a SFEXCH6A.304
! "missing data indicator". SFEXCH6A.305
! Sea-ice leads ignored. See 3.D.7 below. SFEXCH6A.306
&,CHR1P5M(P_FIELD) ! OUT Reqd for calculation of 1.5m temp. SFEXCH6A.307
! Sea-ice leads ignored. See 3.D.7 below. SFEXCH6A.308
&,CER1P5M(P_FIELD) ! OUT Reqd for calculation of 1.5m sp SFEXCH6A.309
! humidity. Sea-ice leads ignored. SFEXCH6A.310
! See 3.D.7 below. SFEXCH6A.311
&,E_SEA(P_FIELD) ! OUT Evaporation from sea times leads SFEXCH6A.312
! fraction (kg/m2/s). Zero over land. SFEXCH6A.313
&,FME(P_FIELD) ! OUT Wind mixing energy flux (Watts/sq m). SFEXCH6A.314
&,F_SE(P_FIELD,N_TYPES) ! OUT Fraction of the evapotranspiration SFEXCH6A.315
! which is bare soil evaporation. SFEXCH6A.316
&,EPOT(P_FIELD,N_TYPES) ! OUT "Explicit" potential evaporation ANG1F405.107
! on P-grid (kg/m2/s). ANG1F405.108
&,EPOT_GB(P_FIELD) ! OUT "Explicit" potential evaporation ANG1F405.109
! on P-grid (kg/m2/s) ANG1F405.110
! for whole grid box. ANG1F405.111
&,FSMC(LAND_FIELD,N_TYPES) ANG1F405.112
! OUT soil moisture availability. ANG1F405.113
&,FSMC_GB(LAND_FIELD) ANG1F405.114
! OUT soil moisture availability ANG1F405.115
! for whole grid box. ANG1F405.116
&,FQW_1(P_FIELD,N_TYPES)! OUT "Explicit" surface flux of QW (i.e. SFEXCH6A.317
! evaporation), on P-grid (kg/m2/s). SFEXCH6A.318
&,FQW1_GB(P_FIELD) ! OUT "Explicit" surface flux of QW (i.e. SFEXCH6A.319
! evaporation), on P-grid (kg/m2/s). for SFEXCH6A.320
! whole grid-box SFEXCH6A.321
&,FTL_1(P_FIELD,N_TYPES)! OUT "Explicit" surface flux of TL = H/CP. SFEXCH6A.322
! (sensible heat / CP). SFEXCH6A.323
&,FTL1_GB(P_FIELD) ! OUT "Explicit" surface flux of TL = H/CP. SFEXCH6A.324
! (sensible heat / CP). grid-box mean SFEXCH6A.325
&,FRACA(P_FIELD,N_TYPES)! OUT Fraction of surface moisture flux SFEXCH6A.326
! with only aerodynamic resistance. SFEXCH6A.327
&,GPP(LAND_FIELD,N_TYPES)!OUT Gross Primary Productivity SFEXCH6A.328
! (kg C/m2/s). SFEXCH6A.329
&,H_BLEND(P_FIELD) ! OUT Blending height for tiles SFEXCH6A.330
&,H_BLEND_OROG(P_FIELD) ! OUT Blending height for orographic SFEXCH6A.331
! roughness SFEXCH6A.332
&,H_SEA(P_FIELD) ! OUT Surface sensible heat flux over sea SFEXCH6A.333
! times leads fraction (W/m2). SFEXCH6A.334
! Zero over land. SFEXCH6A.335
&,NPP(LAND_FIELD,N_TYPES)!OUT Net Primary Productivity (kg C/m2/s). SFEXCH6A.336
&,Q1_SD(P_FIELD) ! OUT Standard deviation of turbulent SFEXCH6A.337
! fluctuations of surface layer SFEXCH6A.338
! specific humidity (kg/kg). SFEXCH6A.339
&,RESFS_GB(P_FIELD) ! OUT Combined soil, stomatal and SFEXCH6A.340
! aerodynamic resistance factor = SFEXCH6A.341
! PSIS/(1+RS/RA) for fraction (1-FRACA) SFEXCH6A.342
&,RESFT_GB(P_FIELD) ! OUT Total resistance factor SFEXCH6A.343
! FRACA+(1-FRACA)*RESFS. SFEXCH6A.344
&,RESP_P(LAND_FIELD,N_TYPES) SFEXCH6A.345
! ! OUT Plant respiration rate (kg C/m2/s). SFEXCH6A.346
&,RIB_GB(P_FIELD) ! OUT Mean bulk Richardson number for SFEXCH6A.347
! lowest layer SFEXCH6A.348
&,T1_SD(P_FIELD) ! OUT Standard deviation of turbulent SFEXCH6A.349
! fluctuations of surface layer SFEXCH6A.350
! temperature (K). SFEXCH6A.351
&,TV1_SD(P_FIELD) ! OUT Standard deviation of turbulent SFEXCH6A.352
! ! fluctuations of surface layer SFEXCH6A.353
! ! virtual temperature (K). SFEXCH6A.354
&,U_S(P_FIELD) ! OUT Surface friction velocity (m/s) SFEXCH6A.355
&,FB_SURF(P_FIELD) ! OUT Surface flux buoyancy over density SFEXCH6A.356
! ! (m^2/s^3) SFEXCH6A.357
! SFEXCH6A.358
&,VSHR(P_FIELD) ! OUT Magnitude of surface-to-lowest-level SFEXCH6A.359
! wind SFEXCH6A.360
&,Z0H(P_FIELD) ! OUT Roughness length for heat & moisture SFEXCH6A.361
&,Z0M(P_FIELD) ! OUT Roughness length for momentum (m). SFEXCH6A.362
&,Z0M_EFF(P_FIELD) ! OUT Effective roughness length for SFEXCH6A.363
! momentum SFEXCH6A.364
&,RHO_ARESIST(P_FIELD) ! OUT, RHOSTAR*CD_STD*VSHR for SCYCLE SFEXCH6A.365
&,ARESIST(P_FIELD) ! OUT, 1/(CD_STD*VSHR) for SCYCLE SFEXCH6A.366
&,RESIST_B(P_FIELD) ! OUT, (1/CH-1/CD_STD)/VSHR for SCYCLE SFEXCH6A.367
SFEXCH6A.368
SFEXCH6A.369
! Surface exchange coefficients;passed to subroutine IMPL_CAL SFEXCH6A.370
REAL SFEXCH6A.371
& RHO_CD_MODV1(P_FIELD) ! OUT rhostar*cD*vshr before horizontal SFEXCH6A.372
! interpolation output as a diagnostic. SFEXCH6A.373
&,RHOKE_GB(P_FIELD) ! OUT For FQW SFEXCH6A.374
&,RHOKH_1(P_FIELD,N_TYPES) SFEXCH6A.375
! ! OUT For FTL SFEXCH6A.376
&,RHOKH_1_GB(P_FIELD) ! OUT For FTL SFEXCH6A.377
&,RHOKM_1_GB(P_FIELD) ! OUT For momentum. NB: This is output on SFEXCH6A.378
! UV-grid, but with the first and last SFEXCH6A.379
! rows set to a "missing data indicator". SFEXCH6A.380
&,RHOKPM_GB(P_FIELD) ! OUT Mixing coefficient for Penman- SFEXCH6A.381
! Monteith scheme SFEXCH6A.382
&,RHOKPM_POT(P_FIELD,N_TYPES) ANG1F405.117
! OUT Surface exchange coeff. for ANG1F405.118
! potential evaporation. ANG1F405.119
&,RHOKPM_POT_GB(P_FIELD)! OUT Surface exchange coeff. for ANG1F405.120
! potential evaporation ANG1F405.121
! for whole grid box. ANG1F405.122
SFEXCH6A.383
INTEGER SFEXCH6A.384
& NRML(P_FIELD) ! OUT 1 if surface layer unstable, else 0. SFEXCH6A.385
SFEXCH6A.386
! Symbolic constants ------------------------------------------------ SFEXCH6A.387
SFEXCH6A.388
! (1) UM-wide common parameters. SFEXCH6A.389
SFEXCH6A.390
*CALL C_0_DG_C
SFEXCH6A.391
*CALL C_LHEAT
SFEXCH6A.392
*CALL C_G
SFEXCH6A.393
*CALL C_R_CP
SFEXCH6A.394
*CALL C_EPSLON
SFEXCH6A.395
*CALL C_VKMAN
SFEXCH6A.396
*CALL C_MDI
SFEXCH6A.397
SFEXCH6A.398
SFEXCH6A.399
! (2) Boundary Layer local parameters. SFEXCH6A.400
SFEXCH6A.401
*CALL C_CHARNK
SFEXCH6A.402
*CALL C_DENSTY
SFEXCH6A.403
*CALL C_HT_M
SFEXCH6A.404
*CALL C_ROUGH
SFEXCH6A.405
*CALL C_SURF
SFEXCH6A.406
*CALL C_SOILH
SFEXCH6A.407
*CALL C_KAPPAI
SFEXCH6A.408
*CALL C_SICEHC
SFEXCH6A.409
SFEXCH6A.410
SFEXCH6A.411
! (3) Derived local parameters. SFEXCH6A.412
SFEXCH6A.413
REAL ETAR,GRCP,LCRCP,LFRCP,LS,LSRCP,H_BLEND_MIN,H_BLEND_MAX SFEXCH6A.414
SFEXCH6A.415
PARAMETER ( SFEXCH6A.416
& ETAR=1./(1.-EPSILON) ! Used in calc of buoyancy parameter BETAC. SFEXCH6A.417
&,GRCP=G/CP ! Used in calc of dT across surface layer. SFEXCH6A.418
&,LCRCP=LC/CP ! Evaporation-to-dT conversion factor. SFEXCH6A.419
&,LFRCP=LF/CP ! Freezing-to-dT conversion factor. SFEXCH6A.420
&,LS=LF+LC ! Latent heat of sublimation. SFEXCH6A.421
&,LSRCP=LS/CP ! Sublimation-to-dT conversion factor. SFEXCH6A.422
&,H_BLEND_MIN=0.0 ! Minimum blending height. SFEXCH6A.423
&,H_BLEND_MAX=1000.0 ! Maximum blending height (m). SFEXCH6A.424
&) SFEXCH6A.425
SFEXCH6A.426
SFEXCH6A.427
! External subprograms called. SFEXCH6A.428
SFEXCH6A.429
EXTERNAL SF_ROUGH,SF_LBEST,SF_RIB,FCDCH,QSAT,SFL_INT,SF_RESIST, SFEXCH6A.430
& SF_FLUX,SF_STOM,TIMER SFEXCH6A.431
SFEXCH6A.432
SFEXCH6A.433
! Define local storage. SFEXCH6A.434
SFEXCH6A.435
! (a) Workspace. SFEXCH6A.436
SFEXCH6A.437
! Workspace --------------------------------------------------------- SFEXCH6A.438
REAL SFEXCH6A.439
& BQ_1(P_FIELD,N_TYPES)!A buoyancy parameter for lowest atm level SFEXCH6A.440
! ("beta-q twiddle"). SFEXCH6A.441
&,BT_1(P_FIELD,N_TYPES)!A buoyancy parameter for lowest atm level. SFEXCH6A.442
! ("beta-T twiddle"). SFEXCH6A.443
&,CD_LEAD(P_FIELD) ! Bulk transfer coefficient for momentum SFEXCH6A.444
! over sea-ice leads.Missing data over non SFEXCH6A.445
! sea-ice points.(Temporary store for SFEXCH6A.446
! Z0MIZ) SFEXCH6A.447
&,CD_MIZ(P_FIELD) ! Bulk transfer coefficient for momentum SFEXCH6A.448
! over the sea-ice Marginal Ice Zone. SFEXCH6A.449
! Missing data indicator over non sea-ice. SFEXCH6A.450
&,CD_STD_T(P_FIELD,N_TYPES) SFEXCH6A.451
! Local drag coefficient for SFEXCH6A.452
! calculation of interpolation coefficients SFEXCH6A.453
&,CD_STD(P_FIELD) ! Local drag coefficient for SFEXCH6A.454
! ! calculation of interpolation coefficients SFEXCH6A.455
&,CD_T(P_FIELD,N_TYPES)! Drag coefficient on tile SFEXCH6A.456
&,CH_LEAD(P_FIELD) ! Bulk transfer coefficient for heat and SFEXCH6A.457
! or moisture over sea ice leads. SFEXCH6A.458
! Missing data indicator over non sea-ice. SFEXCH6A.459
&,CH_MIZ(P_FIELD) ! Bulk transfer coefficient for heat and SFEXCH6A.460
! or moisture over the Marginal Ice Zone. SFEXCH6A.461
! Missing data indicator over non sea-ice. SFEXCH6A.462
&,CH_T(P_FIELD,N_TYPES)! Transfer coefficient for heat and SFEXCH6A.463
! moisture on tile SFEXCH6A.464
&,DQ(P_FIELD,N_TYPES) ! Sp humidity difference between surface SFEXCH6A.465
! and lowest atmospheric level (Q1 - Q*). SFEXCH6A.466
! Holds value over sea-ice where ICE_FRACT SFEXCH6A.467
! >0 i.e. Leads contribution not included. SFEXCH6A.468
&,DQ_LEAD(P_FIELD) ! DQ for leads fraction of gridsquare. SFEXCH6A.469
! Missing data indicator over non sea-ice. SFEXCH6A.470
&,DTEMP(P_FIELD,N_TYPES)!Liquid/ice static energy difference SFEXCH6A.471
! between surface and lowest atmospheric SFEXCH6A.472
! level, divided by CP (a modified SFEXCH6A.473
! temperature difference). SFEXCH6A.474
! Holds value over sea-ice where ICE_FRACT SFEXCH6A.475
! >0 i.e. Leads contribution not included. SFEXCH6A.476
&,DTEMP_LEAD(P_FIELD) ! DTEMP for leads fraction of gridsquare. SFEXCH6A.477
! Missing data indicator over non sea-ice. SFEXCH6A.478
&,EPDT(P_FIELD) ! "Potential" Evaporation * Timestep SFEXCH6A.479
&,HEAT_BLEND_FACTOR(P_FIELD) SFEXCH6A.480
! used in estimation of heat and SFEXCH6A.481
! moisture at blending height SFEXCH6A.482
&,NL0(LAND_FIELD) ! Nitrogen concentration of the top leaf SFEXCH6A.483
! (kg N/kg C). SFEXCH6A.484
&,PSIS(P_FIELD,N_TYPES)! Soil moisture availability factor. SFEXCH6A.485
&,PSTAR_ICE(P_FIELD) ! Surface pressure over sea ice (Pa). SFEXCH6A.486
&,Q_BLEND(P_FIELD) ! Estimate of blending height Q SFEXCH6A.487
&,QS_BLEND(P_FIELD) ! Sat. specific humidity SFEXCH6A.488
! qsat(TL_BLEND,PSTAR) SFEXCH6A.489
&,QW_BLEND(P_FIELD) ! Estimate of blending height Q SFEXCH6A.490
&,QS1(P_FIELD) ! Sat. specific humidity qsat(TL_1,PSTAR) SFEXCH6A.491
&,QSL(P_FIELD) ! Saturated sp humidity at liquid/ice SFEXCH6A.492
! temperature and pressure of lowest SFEXCH6A.493
! atmospheric level. SFEXCH6A.494
&,QSTAR_GB(P_FIELD) ! Gridbox mean QSTAR SFEXCH6A.495
&,QSTAR(P_FIELD) ! Surface saturated sp humidity. Holds SFEXCH6A.496
! value over sea-ice where ICE_FRACT > 0. SFEXCH6A.497
! i.e. Leads contribution not included. SFEXCH6A.498
&,QSTAR_LEAD(P_FIELD) ! QSTAR for sea-ice leads. SFEXCH6A.499
! Missing data indicator over non sea-ice. SFEXCH6A.500
&,RA(P_FIELD) ! Aerodynamic resistance. SFEXCH6A.501
&,RESFS(P_FIELD,N_TYPES)!Combined soil, stomatal and aerodynamic SFEXCH6A.502
! resistance factor = PSIS/(1+RS/RA) for SFEXCH6A.503
! fraction (1-FRACA) SFEXCH6A.504
&,RESFT(P_FIELD,N_TYPES)!Total resistance factor SFEXCH6A.505
! FRACA+(1-FRACA)*RESFS. SFEXCH6A.506
&,RHOKE(P_FIELD,N_TYPES)!For FQW SFEXCH6A.507
&,RHOKM_1(P_FIELD,N_TYPES) SFEXCH6A.508
! RHOKM for tile SFEXCH6A.509
&,RHOKPM(P_FIELD,N_TYPES) SFEXCH6A.510
! Mixing coefficient SFEXCH6A.511
&,RHOSTAR(P_FIELD,N_TYPES) SFEXCH6A.512
! Surface air density in kg per cubic metre. SFEXCH6A.513
&,RHOSTAR_GB(P_FIELD) ! Surface air density in kg per cubic metre. SFEXCH6A.514
&,DB_GB(P_FIELD) ! Gridbox mean buoyancy difference. SFEXCH6A.515
&,DB_LEAD(P_FIELD) ! Buoyancy difference for lead part of grdbx SFEXCH6A.516
&,DB(P_FIELD,N_TYPES) ! Buoyancy difference for surface tile SFEXCH6A.517
&,RIB_LEAD(P_FIELD) ! Bulk Richardson no. for sea-ice leads at SFEXCH6A.518
! lowest layer. At non sea-ice points holds SFEXCH6A.519
! RIB for FCDCH calculation, then set to SFEXCH6A.520
! to missing data indicator. SFEXCH6A.521
&,RIB(P_FIELD,N_TYPES) ! Bulk Richardson no. for surface tile SFEXCH6A.522
&,ROOT(LAND_FIELD) ! Root biomass (kg C/m2). SFEXCH6A.523
&,T_BLEND(P_FIELD) ! Estimate of blending height T SFEXCH6A.524
&,TL_BLEND(P_FIELD) ! Estimate of blending height TL SFEXCH6A.525
&,TSTAR_NL(P_FIELD) ! TSTAR No Leads: surface temperature SFEXCH6A.526
! over sea-ice fraction of gridsquare. SFEXCH6A.527
! =TSTAR over non sea-ice points. SFEXCH6A.528
&,U_BLEND(P_FIELD) ! Estimate of blending height U SFEXCH6A.529
&,V_BLEND(P_FIELD) ! Estimate of blending height V SFEXCH6A.530
&,WIND_BLEND_FACTOR(P_FIELD) SFEXCH6A.531
! used in estimation of winds at SFEXCH6A.532
! blending height SFEXCH6A.533
&,WIND_PROFILE_FACTOR(P_FIELD,N_TYPES) SFEXCH6A.534
! For transforming effective surface SFEXCH6A.535
! transfer coefficients to those excluding SFEXCH6A.536
! form drag. SFEXCH6A.537
&,RECIP_L_MO(P_FIELD,N_TYPES) SFEXCH6A.538
! ! Reciprocal of the Monin-Obukhov length. SFEXCH6A.539
&,V_S(P_FIELD,N_TYPES) ! Surface scaling velocity (friction velocit SFEXCH6A.540
! ! modified with convective turbulence SFEXCH6A.541
! ! velocity) including orographic form drag SFEXCH6A.542
! ! effects. SFEXCH6A.543
&,V_S_STD(P_FIELD,N_TYPES) SFEXCH6A.544
! ! Surface scaling velocity (friction velocit SFEXCH6A.545
! ! modified with convective turbulence SFEXCH6A.546
! ! velocity) excluding orographic form drag SFEXCH6A.547
! ! effects. SFEXCH6A.548
&,V_S_LEAD(P_FIELD) ! Surface scaling velocity (friction velocit SFEXCH6A.549
! ! modified with convective turbulence veloci SFEXCH6A.550
! ! for leads part of sea gridbox. SFEXCH6A.551
&,Z0HS(P_FIELD) ! Roughness length for heat and moisture SFEXCH6A.552
! transport over sea. SFEXCH6A.553
&,Z0M_EFF_T(P_FIELD,N_TYPES) SFEXCH6A.554
! Effective roughness length for momentum SFEXCH6A.555
&,Z0H_T(P_FIELD,N_TYPES)!Tile roughness length for heat and SFEXCH6A.556
! moisture SFEXCH6A.557
&,Z0M_T(P_FIELD,N_TYPES)!Local tileroughness length for momentum SFEXCH6A.558
SFEXCH6A.559
! Workspace (reqd for compression). SFEXCH6A.560
INTEGER SFEXCH6A.561
& SICE_INDEX(P_FIELD) ! Index vector for gather to sea-ice points SFEXCH6A.562
SFEXCH6A.563
LOGICAL ITEST(P_FIELD) !Used as 'logical' for compression. SFEXCH6A.564
SFEXCH6A.565
SFEXCH6A.566
! (b) Scalars. SFEXCH6A.567
SFEXCH6A.568
INTEGER SFEXCH6A.569
& I ! Loop counter (horizontal field index). SFEXCH6A.570
&,ITILE ! Loop counter (tile index). SFEXCH6A.571
&,J,K ! Offset counter within I-loop. SFEXCH6A.572
&,L,N ! Loop counter (land point field index). SFEXCH6A.573
&,NSICE ! Number of sea-ice points. SFEXCH6A.574
&,SI ! Loop counter (sea-ice field index). SFEXCH6A.578
REAL SFEXCH6A.579
& TAU ! Magnitude of surface wind stress over sea. SFEXCH6A.580
&,W_S_CUBED ! Cube of surface layer free convective scaling SFEXCH6A.581
! ! velocity SFEXCH6A.582
&,W_M ! Turbulent velocity scale for surface layer SFEXCH6A.583
SFEXCH6A.584
LOGICAL SFEXCH6A.585
& L_LAND ! a logical SFEXCH6A.586
SFEXCH6A.587
! Extra work variables for the canopy (stomatal) conductance model. SFEXCH6A.588
LOGICAL SFEXCH6A.589
& INT_STOM ! T for interactive stomatal resistance. SFEXCH6A.590
PARAMETER (INT_STOM=.TRUE.) SFEXCH6A.591
SFEXCH6A.592
SFEXCH6A.593
!----------------------------------------------------------------------- SFEXCH6A.594
!! 0. Check that the scalars input to define the grid are consistent. SFEXCH6A.595
!----------------------------------------------------------------------- SFEXCH6A.596
SFEXCH6A.597
IF (LTIMER) THEN SFEXCH6A.598
CALL TIMER
('SFEXCH ',3) SFEXCH6A.599
ENDIF SFEXCH6A.600
SFEXCH6A.601
SFEXCH6A.614
!----------------------------------------------------------------------- SFEXCH6A.615
!! 1. Construct SICE_INDEX for compression onto sea points in SFEXCH6A.616
!! sea-ice leads calculations. SFEXCH6A.617
!----------------------------------------------------------------------- SFEXCH6A.618
SFEXCH6A.619
DO I=P1,P1+P_POINTS-1 SFEXCH6A.620
ITEST(I) = .FALSE. SFEXCH6A.621
IF (ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I)) SFEXCH6A.622
& ITEST(I) = .TRUE. SFEXCH6A.623
ENDDO SFEXCH6A.624
SFEXCH6A.625
NSICE = 0 SFEXCH6A.626
DO I=P1,P1+P_POINTS-1 SFEXCH6A.627
IF(ITEST(I))THEN SFEXCH6A.628
NSICE = NSICE + 1 SFEXCH6A.629
SICE_INDEX(NSICE) = I SFEXCH6A.630
END IF SFEXCH6A.631
ENDDO SFEXCH6A.632
SFEXCH6A.634
!----------------------------------------------------------------------- SFEXCH6A.635
!! 2. Calculate QSAT values required later and components of ocean SFEXCH6A.636
!! current. SFEXCH6A.637
!! Done here to avoid loop splitting. SFEXCH6A.638
!! QSTAR 'borrowed' to store P at level 1 (just this once). SFEXCH6A.639
!! PSIS 'borrowed' to store leads and non sea-ice surface temp. SFEXCH6A.640
!----------------------------------------------------------------------- SFEXCH6A.641
SFEXCH6A.642
SFEXCH6A.643
!----------------------------------------------------------------------- SFEXCH6A.645
!! 2.1 IF (GATHER) THEN SFEXCH6A.646
!! Calculate temperatures and pressures for QSAT calculations. SFEXCH6A.647
!! Calculate QSAT values. For sea-ice points, separate values SFEXCH6A.648
!! are required for the leads (QSTAR_LEAD) and sea-ice (QSTAR) SFEXCH6A.649
!! fractions respectively. QSTAR_LEAD = missing data, elsewhere. SFEXCH6A.650
!! Use RS to store compressed PSTAR for this section only. SFEXCH6A.651
!! NB Unlike QSTAR, TSTAR values at sea-ice points are gridsq. SFEXCH6A.652
!! means and so include the leads contribution. SFEXCH6A.653
!! ELSE SFEXCH6A.654
!! As above with QSTAR_LEAD done on full field. SFEXCH6A.655
!! ENDIF SFEXCH6A.656
!----------------------------------------------------------------------- SFEXCH6A.657
IF (GATHER) THEN SFEXCH6A.658
DO I=P1,P1+P_POINTS-1 SFEXCH6A.659
TSTAR_NL(I) = TSTAR_GB(I) SFEXCH6A.660
QSTAR_LEAD(I) = 1.0E30 ! Missing data indicator SFEXCH6A.661
ENDDO SFEXCH6A.662
IF (NSICE.GT.0) THEN SFEXCH6A.663
CDIR$ IVDEP SFEXCH6A.664
! Fujitsu vectorization directive GRB0F405.487
!OCL NOVREC GRB0F405.488
DO SI = 1,NSICE SFEXCH6A.665
I = SICE_INDEX(SI) SFEXCH6A.666
SFEXCH6A.667
TSTAR_NL(I) = (TSTAR_GB(I)-(1.0-ICE_FRACT(I)) *TFS) SFEXCH6A.668
& / ICE_FRACT(I) ! P2430.1 SFEXCH6A.669
PSIS(SI,1) = TFS SFEXCH6A.670
PSTAR_ICE(SI) = PSTAR(I) SFEXCH6A.671
ENDDO SFEXCH6A.672
ENDIF SFEXCH6A.673
SFEXCH6A.674
CALL QSAT
(QSL(P1),TL_1(P1),P_1(P1),P_POINTS) SFEXCH6A.675
CALL QSAT
(QS1(P1),TL_1(P1),PSTAR(P1),P_POINTS) SFEXCH6A.676
SFEXCH6A.677
CALL QSAT
(QSTAR(P1),TSTAR_NL(P1),PSTAR(P1),P_POINTS) SFEXCH6A.678
! ...values at sea-ice points contain ice contribution only SFEXCH6A.679
IF (NSICE.GT.0) CALL QSAT
(QSTAR_LEAD,PSIS,PSTAR_ICE,NSICE) SFEXCH6A.680
! ...values at sea-ice points only SFEXCH6A.681
SFEXCH6A.682
CALL QSAT
(QSTAR_GB(P1),TSTAR_GB(P1),PSTAR(P1),P_POINTS) SFEXCH6A.683
! ...values at sea-ice points gb-average SFEXCH6A.684
SFEXCH6A.685
ELSE SFEXCH6A.686
SFEXCH6A.698
DO I=P1,P1+P_POINTS-1 SFEXCH6A.699
TSTAR_NL(I) = TSTAR_GB(I) SFEXCH6A.700
! Set to missing data at non sea-ice points after QSAT. SFEXCH6A.701
PSIS(I,1) = TSTAR_GB(I) SFEXCH6A.702
IF ( ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I) ) THEN SFEXCH6A.703
TSTAR_NL(I) = (TSTAR_GB(I)-(1.0-ICE_FRACT(I)) *TFS) SFEXCH6A.704
& / ICE_FRACT(I) ! P2430.1 SFEXCH6A.705
PSIS(I,1) = TFS SFEXCH6A.706
ENDIF SFEXCH6A.707
ENDDO SFEXCH6A.708
CALL QSAT
(QSL(P1),TL_1(P1),P_1(P1),P_POINTS) SFEXCH6A.709
CALL QSAT
(QS1(P1),TL_1(P1),PSTAR(P1),P_POINTS) SFEXCH6A.710
SFEXCH6A.711
CALL QSAT
(QSTAR(P1),TSTAR_NL(P1),PSTAR(P1),P_POINTS) SFEXCH6A.712
! ...values at sea-ice points contain ice contribution only SFEXCH6A.713
SFEXCH6A.714
IF (NSICE.GT.0) SFEXCH6A.715
& CALL QSAT
(QSTAR_LEAD(P1),PSIS(P1,1),PSTAR(P1),P_POINTS) SFEXCH6A.716
! ...values at sea-ice points contain leads contribution only SFEXCH6A.717
SFEXCH6A.718
CALL QSAT
(QSTAR_GB(P1),TSTAR_GB(P1),PSTAR(P1),P_POINTS) SFEXCH6A.719
! ...values at sea-ice points gb-average SFEXCH6A.720
SFEXCH6A.721
DO I=P1,P1+P_POINTS-1 SFEXCH6A.722
IF ( .NOT.(ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I)) ) SFEXCH6A.723
& QSTAR_LEAD(I) = 1.0E30 SFEXCH6A.724
ENDDO SFEXCH6A.725
ENDIF ! End of IF (GATHER) THEN... ELSE. SFEXCH6A.727
SFEXCH6A.729
!----------------------------------------------------------------------- SFEXCH6A.730
!! 2.2 Reset aggregated quantities SFEXCH6A.731
!----------------------------------------------------------------------- SFEXCH6A.732
SFEXCH6A.733
DO I=1,P_FIELD SFEXCH6A.734
RHO_ARESIST(I) = 0.0 SFEXCH6A.735
ARESIST(I) = 0.0 SFEXCH6A.736
RESIST_B(I) = 0.0 SFEXCH6A.737
EPOT_GB(I) = 0.0 ANG1F405.123
FQW1_GB(I)=0.0 SFEXCH6A.738
FTL1_GB(I)=0.0 SFEXCH6A.739
RIB_GB(I)=0.0 SFEXCH6A.740
DB_GB(I)=0.0 SFEXCH6A.741
BT1_GB(I)=0.0 SFEXCH6A.742
BQ1_GB(I)=0.0 SFEXCH6A.743
RESFS_GB(I)=0.0 SFEXCH6A.744
RESFT_GB(I)=0.0 SFEXCH6A.745
ALPHA1_GB(I) = 0.0 SFEXCH6A.746
RHOKE_GB(I) = 0.0 SFEXCH6A.747
CD(I)=0.0 SFEXCH6A.748
CD_STD(I)=0.0 SFEXCH6A.749
CH(I)=0.0 SFEXCH6A.750
RHOKH_1_GB(I) = 0.0 SFEXCH6A.751
RHOKM_1_GB(I) = 0.0 SFEXCH6A.752
RHOKPM_GB(I) = 0.0 SFEXCH6A.753
RHOKPM_POT_GB(I) = 0.0 ANG1F405.124
T1_SD(I)=0.0 SFEXCH6A.754
Q1_SD(I)=0.0 SFEXCH6A.755
TV1_SD(I)=0.0 SFEXCH6A.756
RHOSTAR_GB(I)=0.0 SFEXCH6A.757
NRML(I) = 0 SFEXCH6A.758
SFEXCH6A.759
DO ITILE=1,N_TYPES SFEXCH6A.760
DB(I,ITILE)=0.0 SFEXCH6A.761
RIB(I,ITILE)=0.0 SFEXCH6A.762
ENDDO SFEXCH6A.763
ENDDO SFEXCH6A.764
SFEXCH6A.765
DO L=1,LAND_FIELD ANG1F405.125
FSMC_GB(L) = 0.0 ANG1F405.126
ENDDO ANG1F405.127
SFEXCH6A.766
!----------------------------------------------------------------------- SFEXCH6A.767
!! 3. Calculation of transfer coefficients and surface layer stability SFEXCH6A.768
!----------------------------------------------------------------------- SFEXCH6A.769
SFEXCH6A.770
!----------------------------------------------------------------------- SFEXCH6A.771
!! 3.1 Calculate neutral roughness lengths and blending height for SFEXCH6A.772
!! surface SFEXCH6A.773
!----------------------------------------------------------------------- SFEXCH6A.774
SFEXCH6A.775
! Grid box mean value for estimating model values at bending height SFEXCH6A.776
SFEXCH6A.777
L_LAND=.FALSE. ! Calc over all points) SFEXCH6A.778
SFEXCH6A.779
CALL SF_ROUGH
( SFEXCH6A.780
& P_FIELD,P_POINTS,LAND_FIELD,LAND_PTS,LAND_MASK,L_LAND,P1,LAND1, SFEXCH6A.781
& LAND_INDEX, SFEXCH6A.783
& L_Z0_OROG,Z1_UV,Z0MSEA,ICE_FRACT, SFEXCH6A.785
& LYING_SNOW,Z0V_GB,SIL_OROG,HO2R2_OROG,RIB_GB,Z0M_EFF,Z0M,Z0H, SFEXCH6A.786
& WIND_PROFILE_FACTOR(1,1),H_BLEND_OROG,CD_LEAD,Z0HS, SFEXCH6A.787
& LTIMER) SFEXCH6A.788
SFEXCH6A.789
SFEXCH6A.790
! Estimate model values at blending height from neutral profile SFEXCH6A.791
SFEXCH6A.792
CALL SF_LBEST
( SFEXCH6A.793
& P_POINTS,P_FIELD,P1,H_BLEND_OROG, SFEXCH6A.794
& QCL_1,QCF_1,QSTAR_GB,Q_1,TSTAR_GB,T_1,U_1,V_1, SFEXCH6A.795
& Z0M_EFF,Z0H,Z0M,Z1_UV,Z1_TQ,H_BLEND,HEAT_BLEND_FACTOR, SFEXCH6A.796
& Q_BLEND,QW_BLEND,T_BLEND,TL_BLEND,U_BLEND,V_BLEND, SFEXCH6A.797
& WIND_BLEND_FACTOR,LTIMER SFEXCH6A.798
& ) SFEXCH6A.799
SFEXCH6A.800
! Calc. QSAT at blending height SFEXCH6A.801
CALL QSAT
(QS_BLEND(P1),TL_BLEND(P1),PSTAR(P1),P_POINTS) SFEXCH6A.802
SFEXCH6A.803
SFEXCH6A.804
! Calc QSTAR_no_leads and store in QSTAR_GB SFEXCH6A.805
CALL QSAT
(QSTAR_GB(P1),TSTAR_NL(P1),PSTAR(P1),P_POINTS) SFEXCH6A.806
SFEXCH6A.807
SFEXCH6A.808
! Start of loop over tiles SFEXCH6A.809
DO ITILE=1,N_TYPES SFEXCH6A.810
SFEXCH6A.811
!----------------------------------------------------------------------- SFEXCH6A.812
! 3.1.1 Tile roughnesses SFEXCH6A.813
!----------------------------------------------------------------------- SFEXCH6A.814
SFEXCH6A.815
! Only calculate roughnesses for sea points once SFEXCH6A.816
SFEXCH6A.817
L_LAND=.FALSE. SFEXCH6A.818
SFEXCH6A.819
CALL SF_ROUGH
( SFEXCH6A.820
& P_FIELD,P_POINTS,LAND_FIELD,LAND_PTS,LAND_MASK,L_LAND,P1,LAND1, SFEXCH6A.821
& LAND_INDEX, SFEXCH6A.823
& L_Z0_OROG,Z1_UV,Z0MSEA,ICE_FRACT, SFEXCH6A.825
& LYING_SNOW,Z0V(1,ITILE),SIL_OROG,HO2R2_OROG,RIB(1,ITILE), SFEXCH6A.826
& Z0M_EFF_T(1,ITILE),Z0M_T(1,ITILE),Z0H_T(1,ITILE), SFEXCH6A.827
& WIND_PROFILE_FACTOR(1,ITILE),H_BLEND_OROG,CD_LEAD,Z0HS, SFEXCH6A.828
& LTIMER SFEXCH6A.829
& ) SFEXCH6A.830
SFEXCH6A.831
!----------------------------------------------------------------------- SFEXCH6A.832
!! 3.2 Calculate buoyancy parameters and bulk Richardson number for SFEXCH6A.833
!! the lowest model level. SFEXCH6A.834
!----------------------------------------------------------------------- SFEXCH6A.835
SFEXCH6A.836
SFEXCH6A.837
! Tile temperature passed to sf_rib through tstar_nl SFEXCH6A.838
DO I=P1,P1+P_POINTS-1 SFEXCH6A.839
IF ( LAND_MASK(I) ) TSTAR_NL(I)=TSTAR_TILE(I,ITILE) SFEXCH6A.840
ENDDO SFEXCH6A.841
SFEXCH6A.842
SFEXCH6A.843
CALL QSAT
(QSTAR(P1),TSTAR_NL(P1),PSTAR(P1),P_POINTS) SFEXCH6A.844
SFEXCH6A.845
SFEXCH6A.846
! qstar over sea-ice doesn not include leads SFEXCH6A.847
SFEXCH6A.848
DO I=P1,P1+P_POINTS-1 SFEXCH6A.849
IF(.NOT.LAND_MASK(I)) QSTAR(I)=QSTAR_GB(I) SFEXCH6A.850
ENDDO SFEXCH6A.851
SFEXCH6A.852
CALL SF_RIB
( SFEXCH6A.853
& P_POINTS,LAND_PTS,P_FIELD,LAND_FIELD,LAND_MASK,L_LAND,INT_STOM, SFEXCH6A.854
& P1,LAND1, SFEXCH6A.855
& GATHER,LAND_INDEX, SFEXCH6A.857
& NSICE,SICE_INDEX,ICE_FRACT,Q_BLEND,QW_BLEND,QCL_1,QCF_1, SFEXCH6A.859
& T_BLEND,TL_BLEND,QSL,QSTAR,QSTAR_LEAD, SFEXCH6A.860
& QS_BLEND,TSTAR_NL,Z1_TQ,Z1_UV,Z0M_EFF_T(1,ITILE), SFEXCH6A.861
& Z0M_T(1,ITILE),Z0H_T(1,ITILE),Z0HS,Z0MSEA, SFEXCH6A.862
& WIND_PROFILE_FACTOR(1,ITILE),U_BLEND,U_0,V_BLEND,V_0, SFEXCH6A.863
& ROOTD(1,ITILE),SMVCCL,SMVCWT,SMC(1,ITILE),VFRAC(1,ITILE), SFEXCH6A.864
& V_SOIL,CANOPY,CATCH(1,ITILE), SFEXCH6A.865
& LYING_SNOW,GC(1,ITILE),RESIST(1,ITILE), SFEXCH6A.866
& DB(1,ITILE),DB_LEAD,RIB(1,ITILE),RIB_LEAD,PSIS(1,ITILE),VSHR, SFEXCH6A.867
& ALPHA1(1,ITILE),BT_1(1,ITILE),BQ_1(1,ITILE), SFEXCH6A.868
& FRACA(1,ITILE),RESFS(1,ITILE), SFEXCH6A.869
& DQ(1,ITILE),DQ_LEAD,DTEMP(1,ITILE),DTEMP_LEAD,LTIMER SFEXCH6A.870
& ) SFEXCH6A.871
SFEXCH6A.872
!----------------------------------------------------------------------- SFEXCH6A.873
!! 3.3 Calculate stability corrected effective roughness length. SFEXCH6A.874
!! Simple linear interpolation when RIB between 0 and RIB_CRIT (>0) for SFEXCH6A.875
!! form drag term. SFEXCH6A.876
!----------------------------------------------------------------------- SFEXCH6A.877
SFEXCH6A.878
SFEXCH6A.879
! Stability correction only applies to land points SFEXCH6A.880
L_LAND = .TRUE. SFEXCH6A.881
SFEXCH6A.882
CALL SF_ROUGH
( SFEXCH6A.883
& P_FIELD,P_POINTS,LAND_FIELD,LAND_PTS,LAND_MASK,L_LAND,P1,LAND1, SFEXCH6A.884
& LAND_INDEX, SFEXCH6A.886
& L_Z0_OROG,Z1_UV,Z0MSEA,ICE_FRACT, SFEXCH6A.888
& LYING_SNOW,Z0V(1,ITILE),SIL_OROG,HO2R2_OROG,RIB(1,ITILE), SFEXCH6A.889
& Z0M_EFF_T(1,ITILE),Z0M_T(1,ITILE),Z0H_T(1,ITILE), SFEXCH6A.890
& WIND_PROFILE_FACTOR(1,ITILE),H_BLEND_OROG,CD_LEAD,Z0HS, SFEXCH6A.891
& LTIMER SFEXCH6A.892
& ) SFEXCH6A.893
SFEXCH6A.894
ENDDO ! n_types SFEXCH6A.895
SFEXCH6A.896
SFEXCH6A.897
DO ITILE=1,N_TYPES SFEXCH6A.898
SFEXCH6A.899
! Calculate 'mean' richardson number for mean roughness lengths SFEXCH6A.900
DO I=P1,P1+P_POINTS-1 SFEXCH6A.901
SFEXCH6A.902
IF (.NOT.LAND_MASK(I)) THEN SFEXCH6A.903
RIB(I,ITILE) = RIB(I,1) SFEXCH6A.904
DB(I,ITILE) = DB(I,1) SFEXCH6A.905
ENDIF SFEXCH6A.906
SFEXCH6A.907
RIB_GB(I) = RIB_GB(I) + RIB(I,ITILE) * TILE_FRAC(I,ITILE) SFEXCH6A.908
DB_GB(I) = DB_GB(I) + DB(I,ITILE) * TILE_FRAC(I,ITILE) SFEXCH6A.909
SFEXCH6A.910
ENDDO !End of p_point loop SFEXCH6A.911
SFEXCH6A.912
SFEXCH6A.913
DO I=P1,P1+P_POINTS-1 SFEXCH6A.914
IF (.NOT. LAND_MASK(I).AND.ITILE.GT.1) THEN SFEXCH6A.915
PSIS(I,ITILE)=PSIS(I,1) SFEXCH6A.916
DQ(I,ITILE)=DQ(I,1) SFEXCH6A.917
DTEMP(I,ITILE)=DTEMP(I,1) SFEXCH6A.918
FRACA(I,ITILE)=FRACA(I,1) SFEXCH6A.919
RESFS(I,ITILE)=RESFS(I,1) SFEXCH6A.920
BT_1(I,ITILE)=BT_1(I,1) SFEXCH6A.921
BQ_1(I,ITILE)=BQ_1(I,1) SFEXCH6A.922
ALPHA1(I,ITILE)=ALPHA1(I,1) SFEXCH6A.923
Z0M_EFF_T(I,ITILE) = Z0M_EFF_T(I,1) SFEXCH6A.924
Z0M_T(I,ITILE) = Z0M_T(I,1) SFEXCH6A.925
Z0H_T(I,ITILE) = Z0H_T(I,1) SFEXCH6A.926
WIND_PROFILE_FACTOR(I,ITILE) = WIND_PROFILE_FACTOR(I,1) SFEXCH6A.927
ENDIF SFEXCH6A.928
ENDDO !P_POINTS SFEXCH6A.929
ENDDO !loop over tiles SFEXCH6A.930
SFEXCH6A.931
! stability correction for grid box roughness lengths SFEXCH6A.932
SFEXCH6A.933
CALL SF_ROUGH
( SFEXCH6A.934
& P_FIELD,P_POINTS,LAND_FIELD,LAND_PTS,LAND_MASK,L_LAND,P1,LAND1, SFEXCH6A.935
& LAND_INDEX, SFEXCH6A.937
& L_Z0_OROG,Z1_UV,Z0MSEA,ICE_FRACT, SFEXCH6A.939
& LYING_SNOW,Z0V_GB,SIL_OROG,HO2R2_OROG,RIB_GB,Z0M_EFF,Z0M,Z0H, SFEXCH6A.940
& WIND_PROFILE_FACTOR(1,1),H_BLEND_OROG,CD_LEAD,Z0HS, SFEXCH6A.941
& LTIMER) SFEXCH6A.942
SFEXCH6A.943
SFEXCH6A.944
!----------------------------------------------------------------------- SFEXCH6A.945
!! 3.4 Calculate CD, CH via routine FCDCH. SFEXCH6A.946
!! Calculate CD_MIZ,CH_MIZ,CD_LEAD,CH_LEAD on full field then set SFEXCH6A.947
!! non sea-ice points to missing data (contain nonsense after FCDCH) SFEXCH6A.948
! Unlike the QSAT calculations above, arrays are not compressed to SFEXCH6A.950
! sea-ice points for FCDCH. This is because it would require extra SFEXCH6A.951
! work space and initial tests showed that with with the extra SFEXCH6A.952
! compression calculations required no time was saved. SFEXCH6A.953
! NB CD_LEAD stores Z0MIZ for calculation of CD_MIZ,CH_MIZ. SFEXCH6A.955
!----------------------------------------------------------------------- SFEXCH6A.956
SFEXCH6A.957
L_LAND=.FALSE. SFEXCH6A.958
SFEXCH6A.959
CALL FCDCH
(P_POINTS,P_FIELD,P1,L_LAND,LAND_MASK,DB_GB,VSHR, SFEXCH6A.960
& CD_LEAD,CD_LEAD,ZH,Z1_UV,Z1_TQ, SFEXCH6A.961
& WIND_PROFILE_FACTOR(1,1), SFEXCH6A.962
& CD_MIZ,CH_MIZ,CD_STD_T(1,1),V_S(1,1),V_S_STD(1,1), SFEXCH6A.963
& RECIP_L_MO(1,1),LTIMER) SFEXCH6A.964
! ! Marginal Ice Zone.P2430.9 SFEXCH6A.965
! SFEXCH6A.966
CALL FCDCH
(P_POINTS,P_FIELD,P1,L_LAND,LAND_MASK,DB_LEAD,VSHR, SFEXCH6A.967
& Z0MSEA,Z0HS,ZH,Z1_UV,Z1_TQ,WIND_PROFILE_FACTOR(1,1), SFEXCH6A.968
& CD_LEAD,CH_LEAD,CD_STD_T(1,1),V_S_LEAD,V_S_STD(1,1), SFEXCH6A.969
& RECIP_L_MO(1,1),LTIMER) SFEXCH6A.970
! ! Sea-ice leads.P2430.8 SFEXCH6A.971
SFEXCH6A.972
DO ITILE=1,N_TYPES SFEXCH6A.973
SFEXCH6A.974
IF (ITILE.EQ.1) THEN SFEXCH6A.975
L_LAND=.FALSE. SFEXCH6A.976
ELSE SFEXCH6A.977
L_LAND=.TRUE. SFEXCH6A.978
ENDIF SFEXCH6A.979
SFEXCH6A.980
CALL FCDCH
(P_POINTS,P_FIELD,P1,L_LAND,LAND_MASK,DB(1,ITILE), SFEXCH6A.981
& VSHR,Z0M_EFF_T(1,ITILE),Z0H_T(1,ITILE),ZH, SFEXCH6A.982
& Z1_UV,Z1_TQ,WIND_PROFILE_FACTOR(1,ITILE), SFEXCH6A.983
& CD_T(1,ITILE),CH_T(1,ITILE),CD_STD_T(1,ITILE), SFEXCH6A.984
& V_S(1,ITILE),V_S_STD(1,ITILE),RECIP_L_MO(1,ITILE), SFEXCH6A.985
& LTIMER) SFEXCH6A.986
SFEXCH6A.987
SFEXCH6A.988
DO I=P1,P1+P_POINTS-1 SFEXCH6A.989
SFEXCH6A.990
IF (.NOT.LAND_MASK(I).AND.ITILE.GT.1) THEN SFEXCH6A.991
CD_T(I,ITILE)=CD_T(I,1) SFEXCH6A.992
CH_T(I,ITILE)=CH_T(I,1) SFEXCH6A.993
CD_STD_T(I,ITILE)=CD_STD_T(I,1) SFEXCH6A.994
ENDIF SFEXCH6A.995
ENDDO ! loop over P-points SFEXCH6A.996
SFEXCH6A.997
ENDDO ! loop over tiles SFEXCH6A.998
SFEXCH6A.999
SFEXCH6A.1000
DO I=P1,P1+P_POINTS-1 SFEXCH6A.1001
! IF ( an ordinary sea points (no sea-ice) or a land point) SFEXCH6A.1002
IF (.NOT.(ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I)) ) THEN SFEXCH6A.1003
CD_MIZ(I) = 1.E30 SFEXCH6A.1004
CH_MIZ(I) = 1.E30 SFEXCH6A.1005
CD_LEAD(I) = 1.E30 SFEXCH6A.1006
CH_LEAD(I) = 1.E30 SFEXCH6A.1007
RIB_LEAD(I) = 1.E30 SFEXCH6A.1008
ENDIF SFEXCH6A.1009
ENDDO SFEXCH6A.1010
SFEXCH6A.1011
SFEXCH6A.1012
!----------------------------------------------------------------------- SFEXCH6A.1013
!! 4. Loop round gridpoints to be processed, performing calculations SFEXCH6A.1014
!! AFTER call to FCDCH which necessitates splitting of loop. SFEXCH6A.1015
!----------------------------------------------------------------------- SFEXCH6A.1016
SFEXCH6A.1017
DO ITILE=1,N_TYPES SFEXCH6A.1018
SFEXCH6A.1019
!----------------------------------------------------------------------- SFEXCH6A.1020
! 4.1 If the interactive surface resistance is requested call SF_STOM SFEXCH6A.1021
!----------------------------------------------------------------------- SFEXCH6A.1022
SFEXCH6A.1023
IF (INT_STOM) THEN SFEXCH6A.1024
SFEXCH6A.1025
!----------------------------------------------------------------------- SFEXCH6A.1026
! Calculate the aerodynamic resistance SFEXCH6A.1027
!----------------------------------------------------------------------- SFEXCH6A.1028
DO I=P1,P1+P_POINTS-1 SFEXCH6A.1029
RA(I) = 1.0 / CH_T(I,ITILE) SFEXCH6A.1030
ENDDO SFEXCH6A.1031
SFEXCH6A.1032
CDIR$ IVDEP SFEXCH6A.1038
! Fujitsu vectorization directive GRB0F405.489
!OCL NOVREC GRB0F405.490
DO L = LAND1,LAND1+LAND_PTS-1 SFEXCH6A.1039
I = LAND_INDEX(L) SFEXCH6A.1040
!----------------------------------------------------------------------- SFEXCH6A.1042
! For mesoscale model release assume uniform functional types and top SFEXCH6A.1043
! leaf nitrogen concentrations. Assume that (fine) root biomass is SFEXCH6A.1044
! equal to leaf biomass. SFEXCH6A.1045
!----------------------------------------------------------------------- SFEXCH6A.1046
NL0(L) = 50.0E-3 SFEXCH6A.1047
ROOT(L) = 0.04 * LAI(L,ITILE) SFEXCH6A.1048
SFEXCH6A.1049
ENDDO ! Loop over land-points SFEXCH6A.1054
SFEXCH6A.1056
SFEXCH6A.1057
IF(LAND_PTS.GT.0) THEN ! Omit if no land points SFEXCH6A.1058
CALL SF_STOM
( SFEXCH6A.1059
& LAND_PTS,LAND_FIELD,LAND_MASK,P1,LAND1, SFEXCH6A.1060
& LAND_INDEX, SFEXCH6A.1062
& P_POINTS,P_FIELD, SFEXCH6A.1064
& F_TYPE(1,ITILE),CO2,HT(1,ITILE),PAR,LAI(1,ITILE), SFEXCH6A.1065
& NL0,PSTAR,Q_1,RA,ROOT,TSTAR_TILE(1,ITILE),SMVCCL, SFEXCH6A.1066
& V_ROOT(1,ITILE),SMVCWT,VFRAC(1,ITILE),GPP(1,ITILE), SFEXCH6A.1067
& NPP(1,ITILE),RESP_P(1,ITILE), SFEXCH6A.1068
& GC(1,ITILE),LTIMER,FSMC(1,ITILE)) ANG1F405.137
ENDIF ! End test on land points SFEXCH6A.1070
SFEXCH6A.1071
SFEXCH6A.1072
!----------------------------------------------------------------------- ABX1F405.734
! Initialise gridbox mean carbon fluxes on uncalculated points ABX1F405.735
!----------------------------------------------------------------------- ABX1F405.736
IF(LAND_FIELD.GT.0) THEN ABX1F405.737
DO L=1,LAND1-1 ABX1F405.738
GPP(L,ITILE)=0. ABX1F405.739
NPP(L,ITILE)=0. ABX1F405.740
RESP_P(L,ITILE)=0. ABX1F405.741
ENDDO ABX1F405.742
DO L=LAND_PTS+LAND1,LAND_FIELD ABX1F405.743
GPP(L,ITILE)=0. ABX1F405.744
NPP(L,ITILE)=0. ABX1F405.745
RESP_P(L,ITILE)=0. ABX1F405.746
ENDDO ABX1F405.747
ENDIF ABX1F405.748
ABX1F405.749
!----------------------------------------------------------------------- SFEXCH6A.1073
! Convert carbon fluxes to gridbox mean values SFEXCH6A.1074
!----------------------------------------------------------------------- SFEXCH6A.1075
SFEXCH6A.1076
SFEXCH6A.1077
DO L = LAND1,LAND1+LAND_PTS-1 SFEXCH6A.1078
SFEXCH6A.1079
GPP(L,ITILE) = VFRAC(L,ITILE) * GPP(L,ITILE) SFEXCH6A.1080
NPP(L,ITILE) = VFRAC(L,ITILE) * NPP(L,ITILE) SFEXCH6A.1081
RESP_P(L,ITILE) = VFRAC(L,ITILE) * RESP_P(L,ITILE) SFEXCH6A.1082
SFEXCH6A.1083
ENDDO ! Loop over land-points SFEXCH6A.1084
SFEXCH6A.1085
ENDIF ! INT_STOM SFEXCH6A.1086
SFEXCH6A.1087
SFEXCH6A.1088
!----------------------------------------------------------------------- SFEXCH6A.1089
!! 4.2 Recalculate RESFS using "true" CH and EPDT SFEXCH6A.1090
SFEXCH6A.1091
!----------------------------------------------------------------------- SFEXCH6A.1092
CDIR$ IVDEP SFEXCH6A.1098
! Fujitsu vectorization directive GRB0F405.491
!OCL NOVREC GRB0F405.492
DO L = LAND1,LAND1+LAND_PTS-1 SFEXCH6A.1099
I = LAND_INDEX(L) SFEXCH6A.1100
EPDT(I) = -PSTAR(I)/(R*TSTAR_TILE(I,ITILE))*CH_T(I,ITILE)* SFEXCH6A.1102
& DQ(I,ITILE)*TIMESTEP SFEXCH6A.1103
SFEXCH6A.1104
ENDDO ! Loop over land-points SFEXCH6A.1109
SFEXCH6A.1111
SFEXCH6A.1112
CALL SF_RESIST
( SFEXCH6A.1113
& P_POINTS,LAND_PTS,P_FIELD,LAND_FIELD,LAND_MASK,INT_STOM, SFEXCH6A.1114
& P1,LAND1, SFEXCH6A.1115
& LAND_INDEX, SFEXCH6A.1117
& ROOTD(1,ITILE),SMVCCL,SMVCWT,SMC(1,ITILE),V_SOIL, SFEXCH6A.1119
& VFRAC(1,ITILE),CANOPY,CATCH(1,ITILE),DQ(1,ITILE),EPDT, SFEXCH6A.1120
& LYING_SNOW,GC(1,ITILE),RESIST(1,ITILE),CH_T(1,ITILE), SFEXCH6A.1121
& PSIS(1,ITILE),FRACA(1,ITILE),RESFS(1,ITILE),F_SE(1,ITILE), SFEXCH6A.1122
& RESFT(1,ITILE),LTIMER SFEXCH6A.1123
& ) SFEXCH6A.1124
SFEXCH6A.1125
ENDDO ! loop over tiles SFEXCH6A.1126
SFEXCH6A.1127
SFEXCH6A.1128
!----------------------------------------------------------------------- SFEXCH6A.1129
!! 4.D Call SFL_INT to calculate CDR10M, CHR1P5M and CER1P5M - SFEXCH6A.1130
!! interpolation coefficients used in SF_EVAP and IMPL_CAL to SFEXCH6A.1131
!! calculate screen temperature, specific humidity and 10m winds. SFEXCH6A.1132
!----------------------------------------------------------------------- SFEXCH6A.1133
SFEXCH6A.1134
IF (SU10 .OR. SV10 .OR. SQ1P5 .OR. ST1P5) THEN SFEXCH6A.1135
SFEXCH6A.1136
!sjtemp ITILE=3 ! short grass tile SFEXCH6A.1137
SFEXCH6A.1138
ITILE=1 ! single tile mode only SFEXCH6A.1139
SFEXCH6A.1140
CALL SFL_INT
( SFEXCH6A.1141
& P_POINTS,P_FIELD,P1, SFEXCH6A.1142
& Z0M_EFF_T(1,ITILE),Z0H_T(1,ITILE),CD_T(1,ITILE),CH_T(1,ITILE), SFEXCH6A.1143
& Z0M_T(1,ITILE),CD_STD_T(1,ITILE), ARN0F405.1817
& RESFT(1,ITILE),RECIP_L_MO(1,ITILE), SFEXCH6A.1144
& V_S(1,ITILE),V_S_STD(1,ITILE), SFEXCH6A.1145
& CDR10M,CHR1P5M,CER1P5M, SFEXCH6A.1146
& SU10,SV10,ST1P5,SQ1P5, SFEXCH6A.1147
& LTIMER SFEXCH6A.1148
& ) SFEXCH6A.1149
SFEXCH6A.1150
ENDIF SFEXCH6A.1151
SFEXCH6A.1152
!----------------------------------------------------------------------- SFEXCH6A.1153
!! 4.2 Now that diagnostic calculations are over, update sea ice CD SFEXCH6A.1154
!! and CH to their correct values (i.e. gridsquare means). SFEXCH6A.1155
!----------------------------------------------------------------------- SFEXCH6A.1156
SFEXCH6A.1157
DO I=P1,P1+P_POINTS-1 SFEXCH6A.1158
IF ( ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I) ) THEN SFEXCH6A.1159
IF ( ICE_FRACT(I).LT. 0.7 ) THEN SFEXCH6A.1160
CD_T(I,1) = ( ICE_FRACT(I)*CD_MIZ(I) + SFEXCH6A.1161
& (0.7-ICE_FRACT(I))*CD_LEAD(I) ) / 0.7 ! P2430.5 SFEXCH6A.1162
CH_T(I,1) = ( ICE_FRACT(I)*CH_MIZ(I) + SFEXCH6A.1163
& (0.7-ICE_FRACT(I))*CH_LEAD(I) ) / 0.7 ! P2430.4 SFEXCH6A.1164
CD_STD_T(I,1)=CD_T(I,1) ! for SCYCLE: no orog. over sea+ice SFEXCH6A.1165
ELSE SFEXCH6A.1166
CD_T(I,1) = ( (1.0-ICE_FRACT(I))*CD_MIZ(I) + SFEXCH6A.1167
& (ICE_FRACT(I)-0.7)*CD_T(I,1) ) / 0.3 ! P2430.7 SFEXCH6A.1168
CH_T(I,1) = ( (1.0-ICE_FRACT(I))*CH_MIZ(I) + SFEXCH6A.1169
& (ICE_FRACT(I)-0.7)*CH_T(I,1) ) / 0.3 ! P2430.7 SFEXCH6A.1170
CD_STD_T(I,1)=CD_T(I,1) ! for SCYCLE: no orog. over sea+ice SFEXCH6A.1171
ENDIF SFEXCH6A.1172
ENDIF SFEXCH6A.1173
SFEXCH6A.1174
ENDDO !loop over points for sea ice SFEXCH6A.1175
SFEXCH6A.1176
SFEXCH6A.1177
DO ITILE=1,N_TYPES SFEXCH6A.1178
DO I=P1,P1+P_POINTS-1 SFEXCH6A.1179
SFEXCH6A.1180
!----------------------------------------------------------------------- SFEXCH6A.1181
!! 4.3 Calculate the surface exchange coefficients RHOK(*). SFEXCH6A.1182
!----------------------------------------------------------------------- SFEXCH6A.1183
SFEXCH6A.1184
RHOSTAR(I,ITILE) = PSTAR(I) / ( R*TSTAR_TILE(I,ITILE) ) SFEXCH6A.1185
! ... surface air density from ideal gas equation SFEXCH6A.1186
SFEXCH6A.1187
RHOKM_1(I,ITILE) = RHOSTAR(I,ITILE) * CD_T(I,ITILE) SFEXCH6A.1188
! P243.124 SFEXCH6A.1189
RHOKH_1(I,ITILE) = RHOSTAR(I,ITILE) * CH_T(I,ITILE) SFEXCH6A.1190
! P243.125 SFEXCH6A.1191
RHOKE(I,ITILE) = RESFT(I,ITILE) * RHOKH_1(I,ITILE) SFEXCH6A.1192
SFEXCH6A.1193
! Calculate resistances for use in Sulphur Cycle SFEXCH6A.1194
! (Note that CD_STD, CH and VSHR should never = 0) SFEXCH6A.1195
RHO_ARESIST(I) = RHO_ARESIST(I) + TILE_FRAC(I,ITILE) * SFEXCH6A.1196
& (RHOSTAR(I,ITILE) * CD_STD_T(I,ITILE)) SFEXCH6A.1197
SFEXCH6A.1198
ARESIST(I) = ARESIST(I) + TILE_FRAC(I,ITILE) / SFEXCH6A.1199
& CD_STD_T(I,ITILE) SFEXCH6A.1200
SFEXCH6A.1201
RESIST_B(I)= RESIST_B(I) + TILE_FRAC(I,ITILE)* SFEXCH6A.1202
& (CD_STD_T(I,ITILE)/CH_T(I,ITILE) - 1.0) / SFEXCH6A.1203
& CD_STD_T(I,ITILE) SFEXCH6A.1204
SFEXCH6A.1205
! RHOSTAR * CD * VSHR stored for diagnostic output before SFEXCH6A.1206
! horizontal interpolation. SFEXCH6A.1207
SFEXCH6A.1208
ENDDO ! loop over p-points SFEXCH6A.1209
ENDDO ! n_types SFEXCH6A.1210
SFEXCH6A.1211
SFEXCH6A.1212
DO ITILE=1,N_TYPES SFEXCH6A.1213
IF(ITILE.EQ.1) THEN SFEXCH6A.1214
L_LAND=.FALSE. SFEXCH6A.1215
ELSE SFEXCH6A.1216
L_LAND=.TRUE. SFEXCH6A.1217
ENDIF SFEXCH6A.1218
SFEXCH6A.1219
CALL SF_FLUX
( SFEXCH6A.1220
& P_POINTS,P_FIELD,LAND_PTS,LAND_FIELD,LAND_MASK,L_LAND,P1,LAND1, SFEXCH6A.1221
& LAND_INDEX, SFEXCH6A.1223
& ALPHA1(1,ITILE),DQ(1,ITILE),DQ_LEAD,DTEMP(1,ITILE),DTEMP_LEAD, SFEXCH6A.1225
& DZSOIL,HCONS,ICE_FRACT, SFEXCH6A.1226
& LYING_SNOW,QS_BLEND,QW_BLEND,RADNET_C(1,ITILE),RESFT(1,ITILE), APA1F405.445
& RHOKE(1,ITILE),RHOKH_1(1,ITILE),TI,TL_BLEND,TS1, SFEXCH6A.1228
& Z0H_T(1,ITILE),Z0M_EFF_T(1,ITILE),Z1_TQ,Z1_UV, SFEXCH6A.1229
& ASHTF,E_SEA,EPOT(1,ITILE),FQW_1(1,ITILE),FTL_1(1,ITILE),H_SEA, ANG1F405.135
& RHOKPM(1,ITILE),RHOKPM_POT(1,ITILE),LTIMER ANG1F405.136
&, TSTAR_TILE(1,ITILE),VFRAC(1,ITILE),TIMESTEP,CANCAP(1,ITILE) APA1F405.446
& ) SFEXCH6A.1232
SFEXCH6A.1233
ENDDO ! n_types SFEXCH6A.1234
SFEXCH6A.1235
DO ITILE=1,N_TYPES SFEXCH6A.1236
CDIR$ IVDEP SFEXCH6A.1242
! Fujitsu vectorization directive GRB0F405.493
!OCL NOVREC GRB0F405.494
DO L = LAND1,LAND1+LAND_PTS-1 SFEXCH6A.1243
I = LAND_INDEX(L) SFEXCH6A.1244
! average fluxes, resistances and other things SFEXCH6A.1246
SFEXCH6A.1247
FTL1_GB(I)=FTL1_GB(I)+FTL_1(I,ITILE)*TILE_FRAC(I,ITILE) SFEXCH6A.1248
FQW1_GB(I)=FQW1_GB(I)+FQW_1(I,ITILE)*TILE_FRAC(I,ITILE) SFEXCH6A.1249
EPOT_GB(I)=EPOT_GB(I)+EPOT(I,ITILE)*TILE_FRAC(I,ITILE) ANG1F405.128
SFEXCH6A.1250
RESFS_GB(I) = RESFS_GB(I) + SFEXCH6A.1251
& TILE_FRAC(I,ITILE) * RESFS(I,ITILE) SFEXCH6A.1252
RESFT_GB(I) = RESFT_GB(I) + SFEXCH6A.1253
& TILE_FRAC(I,ITILE) * RESFT(I,ITILE) SFEXCH6A.1254
SFEXCH6A.1255
RHOKH_1_GB(I) = RHOKH_1_GB(I) + SFEXCH6A.1256
& RHOKH_1(I,ITILE) * TILE_FRAC(I,ITILE) SFEXCH6A.1257
RHOKM_1_GB(I) = RHOKM_1_GB(I) + SFEXCH6A.1258
& RHOKM_1(I,ITILE) * TILE_FRAC(I,ITILE) SFEXCH6A.1259
RHOKE_GB(I) = RHOKE_GB(I) + SFEXCH6A.1260
& RHOKE(I,ITILE) * TILE_FRAC(I,ITILE) SFEXCH6A.1261
RHOKPM_GB(I) = RHOKPM_GB(I) + SFEXCH6A.1262
& RHOKPM(I,ITILE) * TILE_FRAC(I,ITILE) SFEXCH6A.1263
RHOKPM_POT_GB(I) = RHOKPM_POT_GB(I) + ANG1F405.129
& RHOKPM_POT(I,ITILE) * TILE_FRAC(I,ITILE) ANG1F405.130
FSMC_GB(L) = FSMC_GB(L) + ANG1F405.131
& FSMC(L,ITILE) * TILE_FRAC(I,ITILE) ANG1F405.132
SFEXCH6A.1264
ALPHA1_GB(I) = ALPHA1_GB(I) + SFEXCH6A.1265
& ALPHA1(I,ITILE) * TILE_FRAC(I,ITILE) SFEXCH6A.1266
SFEXCH6A.1267
CD(I) = CD(I) + CD_T(I,ITILE) * TILE_FRAC(I,ITILE) SFEXCH6A.1268
SFEXCH6A.1269
CD_STD(I) = CD_STD(I) + SFEXCH6A.1270
& CD_STD_T(I,ITILE) * TILE_FRAC(I,ITILE) SFEXCH6A.1271
SFEXCH6A.1272
CH(I) = CH(I) + CH_T(I,ITILE) * TILE_FRAC(I,ITILE) SFEXCH6A.1273
SFEXCH6A.1274
BT1_GB(I) = BT1_GB(I) + BT_1(I,ITILE) * TILE_FRAC(I,ITILE) SFEXCH6A.1275
BQ1_GB(I) = BQ1_GB(I) + BQ_1(I,ITILE) * TILE_FRAC(I,ITILE) SFEXCH6A.1276
RHOSTAR_GB(I) = PSTAR(I) / ( R*TSTAR_GB(I) ) SFEXCH6A.1277
! ... surface air density from ideal gas equation SFEXCH6A.1278
SFEXCH6A.1279
SFEXCH6A.1280
ENDDO ! Loop over land-points SFEXCH6A.1285
SFEXCH6A.1287
ENDDO ! loop over tiles SFEXCH6A.1288
SFEXCH6A.1289
SFEXCH6A.1290
DO I=P1,P1+P_POINTS-1 SFEXCH6A.1291
IF(.NOT.LAND_MASK(I)) THEN SFEXCH6A.1292
FTL1_GB(I) = FTL_1(I,1) SFEXCH6A.1293
FQW1_GB(I) = FQW_1(I,1) SFEXCH6A.1294
EPOT_GB(I) = EPOT(I,1) ANG1F405.133
SFEXCH6A.1295
RESFS_GB(I) = RESFS(I,1) SFEXCH6A.1296
RESFT_GB(I) = RESFT(I,1) SFEXCH6A.1297
SFEXCH6A.1298
RHOKH_1_GB(I) = RHOKH_1(I,1) SFEXCH6A.1299
RHOKM_1_GB(I) = RHOKM_1(I,1) SFEXCH6A.1300
RHOKE_GB(I) = RHOKE(I,1) SFEXCH6A.1301
RHOKPM_GB(I) = RHOKPM(I,1) SFEXCH6A.1302
RHOKPM_POT_GB(I) = RHOKPM_POT(I,1) ANG1F405.134
SFEXCH6A.1303
ALPHA1_GB(I) = ALPHA1(I,1) SFEXCH6A.1304
SFEXCH6A.1305
CD(I) = CD_T(I,1) SFEXCH6A.1306
CD_STD(I) = CD_STD_T(I,1) SFEXCH6A.1307
CH(I) = CH_T(I,1) SFEXCH6A.1308
SFEXCH6A.1309
BT1_GB(I) = BT_1(I,1) SFEXCH6A.1310
BQ1_GB(I) = BQ_1(I,1) SFEXCH6A.1311
RHOSTAR_GB(I) = RHOSTAR(I,1) SFEXCH6A.1312
SFEXCH6A.1313
ENDIF SFEXCH6A.1314
SFEXCH6A.1315
RHO_CD_MODV1(I) = RHOKM_1_GB(I) ! diagnostic required for VAR SFEXCH6A.1316
SFEXCH6A.1317
ENDDO SFEXCH6A.1318
SFEXCH6A.1319
!----------------------------------------------------------------------- SFEXCH6A.1320
!! 4.4 Calculate the standard deviations of layer 1 turbulent SFEXCH6A.1321
!! fluctuations of temperature and humidity using approximate SFEXCH6A.1322
!! formulae from first order closure. SFEXCH6A.1323
!----------------------------------------------------------------------- SFEXCH6A.1324
DO I=P1,P1+P_POINTS-1 SFEXCH6A.1325
SFEXCH6A.1326
U_S(I) = SQRT(CD(I) * VSHR(I)) ARN0F405.1818
FB_SURF(I) = G * ( BT1_GB(I)*FTL1_GB(I) + SFEXCH6A.1328
& BQ1_GB(I)*FQW1_GB(I) ) / RHOSTAR_GB(I) SFEXCH6A.1329
SFEXCH6A.1330
W_S_CUBED = 75.0 * FB_SURF(I) SFEXCH6A.1331
C ! 75.0 = 2.5 * height above the surface of 30 m SFEXCH6A.1332
C !--------------------------------------------------------------- SFEXCH6A.1333
C ! Only calculate standard deviations for unstable surface layers SFEXCH6A.1334
C !--------------------------------------------------------------- SFEXCH6A.1335
IF (W_S_CUBED .GT. 0.0) THEN SFEXCH6A.1336
W_M = ( W_S_CUBED + U_S(I) * U_S(I) * U_S(I) ) ** (1.0/3.0) SFEXCH6A.1337
T1_SD(I) = 1.93 * FTL1_GB(I) / (RHOSTAR_GB(I) * W_M) SFEXCH6A.1338
Q1_SD(I) = 1.93 * FQW1_GB(I) / (RHOSTAR_GB(I) * W_M) SFEXCH6A.1339
TV1_SD(I) = T_1(I) * SFEXCH6A.1340
& ( 1.0 + C_VIRTUAL*Q_1(I) - QCL_1(I) - QCF_1(I) ) * SFEXCH6A.1341
& ( BT1_GB(I)*T1_SD(I) + BQ1_GB(I)*Q1_SD(I) ) SFEXCH6A.1342
T1_SD(I) = MAX ( 0.0 , T1_SD(I) ) SFEXCH6A.1343
Q1_SD(I) = MAX ( 0.0 , Q1_SD(I) ) SFEXCH6A.1344
IF (TV1_SD(I) .LE. 0.0) THEN SFEXCH6A.1345
TV1_SD(I) = 0.0 SFEXCH6A.1346
T1_SD(I) = 0.0 SFEXCH6A.1347
Q1_SD(I) = 0.0 SFEXCH6A.1348
ENDIF SFEXCH6A.1349
ELSE SFEXCH6A.1350
T1_SD(I) = 0.0 SFEXCH6A.1351
Q1_SD(I) = 0.0 SFEXCH6A.1352
TV1_SD(I) = 0.0 SFEXCH6A.1353
ENDIF SFEXCH6A.1354
!----------------------------------------------------------------------- SFEXCH6A.1355
!! 4.5 For diagnostic output calculate the dimensionless surface SFEXCH6A.1356
!! transfer coefficients. SFEXCH6A.1357
!---------------------------------------------------------------------- SFEXCH6A.1358
CD(I) = CD(I) / VSHR(I) SFEXCH6A.1359
CH(I) = CH(I) / VSHR(I) SFEXCH6A.1360
! SFEXCH6A.1361
ENDDO SFEXCH6A.1362
SFEXCH6A.1363
!----------------------------------------------------------------------- SFEXCH6A.1364
!! 4.6 For sea points, calculate the wind mixing energy flux and the SFEXCH6A.1365
!! sea-surface roughness length on the P-grid, using time-level n SFEXCH6A.1366
!! quantities. SFEXCH6A.1367
!----------------------------------------------------------------------- SFEXCH6A.1368
SFEXCH6A.1369
DO I=P1,P1+P_POINTS-1 SFEXCH6A.1370
SFEXCH6A.1371
IF (.NOT.LAND_MASK(I)) THEN SFEXCH6A.1372
TAU = RHOSTAR_GB(I) * V_S(I,1) * V_S(I,1) SFEXCH6A.1373
IF (ICE_FRACT(I) .GT. 0.0) SFEXCH6A.1374
& TAU = RHOSTAR_GB(I) * V_S_LEAD(I) * V_S_LEAD(I) SFEXCH6A.1375
IF (SFME) FME(I) = (1.0-ICE_FRACT(I)) * TAU * SQRT(TAU/RHOSEA) SFEXCH6A.1376
! ! P243.96 SFEXCH6A.1377
Z0MSEA(I) = 1.54E-6 / SQRT(TAU / RHOSTAR_GB(I)) + SFEXCH6A.1378
& (CHARNOCK/G) * (TAU / RHOSTAR_GB(I)) SFEXCH6A.1379
! ... (S.Smith formula) SFEXCH6A.1380
ENDIF ! of IF (.NOT. LAND_MASK), land-points done in next loop. SFEXCH6A.1384
ENDDO ! Loop over points for sections 4.2 - 4.6 SFEXCH6A.1385
DO L=LAND1,LAND1+LAND_PTS-1 SFEXCH6A.1386
I = LAND_INDEX(L) SFEXCH6A.1387
SFEXCH6A.1389
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFEXCH6A.1390
!! 4.7 Set Z0MSEA to Z0V, FME to zero for land points. SFEXCH6A.1391
! (Former because UM uses same storage for Z0V SFEXCH6A.1392
! and Z0MSEA.) SFEXCH6A.1393
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFEXCH6A.1394
SFEXCH6A.1395
Z0MSEA(I) = Z0V_GB(I) SFEXCH6A.1396
SFEXCH6A.1397
IF (SFME) FME(I) = 0.0 SFEXCH6A.1398
SFEXCH6A.1399
ENDDO ! Loop over points for section 4.7 SFEXCH6A.1405
SFEXCH6A.1407
IF (LTIMER) THEN SFEXCH6A.1408
CALL TIMER
('SFEXCH ',4) SFEXCH6A.1409
ENDIF SFEXCH6A.1410
SFEXCH6A.1411
RETURN SFEXCH6A.1412
END SFEXCH6A.1413
*ENDIF SFEXCH6A.1414