*IF DEF,A03_5A SFEXCH5A.2
C *****************************COPYRIGHT****************************** SFEXCH5A.3
C (c) CROWN COPYRIGHT 1996, METEOROLOGICAL OFFICE, All Rights Reserved. SFEXCH5A.4
C SFEXCH5A.5
C Use, duplication or disclosure of this code is subject to the SFEXCH5A.6
C restrictions as set forth in the contract. SFEXCH5A.7
C SFEXCH5A.8
C Meteorological Office SFEXCH5A.9
C London Road SFEXCH5A.10
C BRACKNELL SFEXCH5A.11
C Berkshire UK SFEXCH5A.12
C RG12 2SZ SFEXCH5A.13
C SFEXCH5A.14
C If no contract has been raised with this copy of the code, the use, SFEXCH5A.15
C duplication or disclosure of it is strictly prohibited. Permission SFEXCH5A.16
C to do so must first be obtained in writing from the Head of Numerical SFEXCH5A.17
C Modelling at the above address. SFEXCH5A.18
C ******************************COPYRIGHT****************************** SFEXCH5A.19
C*LL SUBROUTINE SF_EXCH------------------------------------------------ SFEXCH5A.20
CLL SFEXCH5A.21
CLL Purpose: Calculate coefficients of turbulent exchange between SFEXCH5A.22
CLL the surface and the lowest atmospheric layer, and SFEXCH5A.23
CLL "explicit" fluxes between the surface and this layer. SFEXCH5A.24
CLL SFEXCH5A.25
CLL Suitable for Single Column use. AJC1F405.93
CLL SFEXCH5A.27
CLL Canopy evaporation made implicit SFEXCH5A.28
CLL with respect to canopy water content (requiring TIMESTEP to be SFEXCH5A.29
CLL passed in). SFEXCH5A.30
CLL SFEXCH5A.31
CLL Model Modification history: SFEXCH5A.32
CLL version Date SFEXCH5A.33
CLL 4.1 07/05/96 New deck. M.J.Woodage SFEXCH5A.34
CLL 4.2 Oct. 96 T3E migration - *DEF CRAY removed GSS2F402.291
CLL S J Swarbrick GSS2F402.292
!LL 4.3 14/01/97 MPP code : Corrected setting of polar rows GPB1F403.45
!LL P.Burton GPB1F403.46
CLL 4.3 15/05/97 By-pass call to SF_STOM when land points=0 to ARR0F403.22
CLL prevent occasional failures with MPP. R.Rawlins ARR0F403.23
CLL 4.3 09/06/97 Add swapbounds for CDR10M. D.Sexton/RTHBarnes ASJ1F403.20
CLL 4.4 08/09/97 L_BL_LSPICE specifies mixed phase precipitation ADM3F404.73
CLL scheme D.Wilson ADM3F404.74
CLL 4.5 20/08/98 Option to include a thermal plant canopy APA1F405.386
CLL M.Best APA1F405.387
CLL 4.5 Jul. 98 Kill the IBM specific lines (JCThil) AJC1F405.92
CLL SFEXCH5A.35
CLL Programming standard: Unified Model Documentation Paper No 4, SFEXCH5A.36
CLL Version 2, dated 18/1/90. SFEXCH5A.37
CLL SFEXCH5A.38
CLL System component covered: Part of P243. SFEXCH5A.39
CLL SFEXCH5A.40
CLL Project task: SFEXCH5A.41
CLL SFEXCH5A.42
CLL Documentation: UM Documentation Paper No 24, section P243. SFEXCH5A.43
CLL See especially sub-section (ix). SFEXCH5A.44
CLL SFEXCH5A.45
CLLEND------------------------------------------------------------------ SFEXCH5A.46
C* SFEXCH5A.47
C*L Arguments --------------------------------------------------------- SFEXCH5A.48
SUBROUTINE SF_EXCH ( 4,99SFEXCH5A.49
& P_POINTS,LAND_PTS,U_POINTS,ROW_LENGTH,P_ROWS,U_ROWS SFEXCH5A.50
&,LAND_INDEX,P1,GATHER SFEXCH5A.52
&,AK_1,BK_1 SFEXCH5A.54
&,CANOPY,CATCH,CO2,CF_1,SM_LEVELS,DZSOIL,HCONS,F_TYPE SFEXCH5A.55
&,HT,LAI,PAR,GPP,NPP,RESP_P SFEXCH5A.56
&,ICE_FRACT,LAND_MASK,LYING_SNOW SFEXCH5A.57
&,PSTAR,Q_1,QCF_1,QCL_1,RADNET_C,GC,RESIST,ROOTD,SMC APA1F405.388
&,SMVCCL,SMVCWT SFEXCH5A.59
&,T_1,TIMESTEP,TI,TS1,TSTAR SFEXCH5A.60
&,U_1,V_1,U_1_P,V_1_P,U_0,V_0,V_ROOT,V_SOIL SFEXCH5A.61
&,VFRAC,Z0V,SIL_OROG,Z1,CANCAP,Z0MSEA,HO2R2_OROG APA1F405.389
&, ALPHA1,ASHTF,BQ_1,BT_1,BF_1,CD,CH ADM3F404.75
&,EPOT,FQW_1,FSMC,FTL_1,E_SEA,H_SEA,TAUX_1,TAUY_1,QW_1 ANG1F405.92
&,FRACA,RESFS,F_SE,RESFT,RHOKE,RHOKH_1,RHOKM_1 ANG1F405.93
&,RHOKPM,RHOKPM_POT ANG1F405.94
&,RIB,TL_1,VSHR,Z0H,Z0M,Z0M_EFF,H_BLEND SFEXCH5A.66
&,T1_SD,Q1_SD SFEXCH5A.67
&,RHO_CD_MODV1 SFEXCH5A.68
&,CDR10M,CHR1P5M,CER1P5M,FME SFEXCH5A.69
&,SU10,SV10,SQ1P5,ST1P5,SFME SFEXCH5A.70
&,RHO_ARESIST,ARESIST,RESIST_B SFEXCH5A.71
&,NRML SFEXCH5A.72
&,L_Z0_OROG,L_RMBL,L_BL_LSPICE,ERROR,LTIMER ADM3F404.76
*IF DEF,SCMA AJC0F405.102
& ,OBS AJC0F405.103
*ENDIF AJC0F405.104
&) SFEXCH5A.74
IMPLICIT NONE SFEXCH5A.75
C SFEXCH5A.76
C Input variables. All fields are on P grid except where noted. SFEXCH5A.77
C Fxxx in a comment indicates the file from which the data are taken. SFEXCH5A.78
C SFEXCH5A.79
C SFEXCH5A.81
C GENERAL NOTES ABOUT GRID-DEFINITION INPUT VARIABLES. SFEXCH5A.82
C ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SFEXCH5A.83
C For global data :- SFEXCH5A.84
C SFEXCH5A.85
C An Arakawa B-grid is assumed in which each pole is represented by a SFEXCH5A.86
C row of P-grid points. These polar rows are omitted in the input and SFEXCH5A.87
C output of the present subroutine, so that the argument P_ROWS is two SFEXCH5A.88
C less than the total number of P-rows in the grid. Land specific SFEXCH5A.89
C variables that are required as INput by the higher level routine, SFEXCH5A.90
C BDY_LAYR, are stored on P_grid land points only and land pts on polar SFEXCH5A.91
C rows are not input or output by this routine ; diagnostic variables SFEXCH5A.92
C must be defined on land and sea points for post processing. SFEXCH5A.93
C If defined variable IBM is selected then land point calculations are SFEXCH5A.94
C performed using the array LAND_INDEX to select land points. But note SFEXCH5A.95
C that elements of LAND_INDEX define land points on the full field SFEXCH5A.96
C (ie including polar rows). SFEXCH5A.97
C SFEXCH5A.98
C Entire fields of UV-grid values are taken as input, but the two SFEXCH5A.99
C polemost rows are (a) not updated, in the case of INOUT fields, or SFEXCH5A.100
C (b) set to zero, in the case of OUT fields. SFEXCH5A.101
C SFEXCH5A.102
C For limited-area data :- SFEXCH5A.103
C SFEXCH5A.104
C The above applies, but for "polar rows", etc., read "rows at the SFEXCH5A.105
C north and south boundaries of the area", etc. E.g. if you want to SFEXCH5A.106
C do calculations in UV-rows n to m inclusive, the input data will be SFEXCH5A.107
C on P-rows n to m+1, and UV-rows n-1 to m+1. P-rows n to m will SFEXCH5A.108
C then be updated. Land specific variables are processed as for global SFEXCH5A.109
C data. SFEXCH5A.110
C SFEXCH5A.111
C For both cases, the following equalities apply amongst the input SFEXCH5A.112
C grid-definition variables :- SFEXCH5A.113
C SFEXCH5A.114
C P_POINTS = P_ROWS * ROW_LENGTH SFEXCH5A.115
C U_POINTS = U_ROWS * ROW_LENGTH SFEXCH5A.116
C U_ROWS = P_ROWS + 1 SFEXCH5A.117
C LAND_PTS <= P_POINTS SFEXCH5A.118
C SFEXCH5A.119
C An error condition is returned if the input variables don't satisfy SFEXCH5A.120
C these equalities. (There is of course redundancy here; a compromise SFEXCH5A.121
C between economy, clarity and easy dimensioning is intended.) SFEXCH5A.122
C SFEXCH5A.123
C NB: All this has severe implications for batching/macrotasking; SFEXCH5A.124
C effectively it can't be done on a shared-memory machine without SFEXCH5A.125
C either rewriting this routine or using expensive synchronizations SFEXCH5A.126
C (or other messy and/or undesirable subterfuges). SFEXCH5A.127
C SFEXCH5A.128
C SFEXCH5A.143
LOGICAL LTIMER SFEXCH5A.144
C SFEXCH5A.145
INTEGER ! Variables defining grid. SFEXCH5A.146
& P_POINTS ! IN Number of P-grid points to be processed. SFEXCH5A.147
&,LAND_PTS ! IN Number of land points to be processed. SFEXCH5A.148
&,U_POINTS ! IN Number of UV-grid points. SFEXCH5A.149
&,ROW_LENGTH ! IN No. of points in latitude row (inclusive SFEXCH5A.153
C ! of endpoints for ltd. area model). SFEXCH5A.154
&,P_ROWS ! IN Number of rows of data on P-grid. SFEXCH5A.158
&,U_ROWS ! IN Number of rows of data on UV-grid. SFEXCH5A.162
&,LAND_INDEX(LAND_PTS)! IN Index for compressed land point array; SFEXCH5A.166
C ! ith element holds position in the FULL SFEXCH5A.167
C ! field of the ith land pt to be processed SFEXCH5A.168
&,P1 ! IN First P-point to be processed. SFEXCH5A.169
SFEXCH5A.170
LOGICAL SFEXCH5A.171
& GATHER ! IN If true then leads variables are comp- SFEXCH5A.172
C ! ressed for sea-ice calculations. This SFEXCH5A.173
C ! saves duplicating calculations if there SFEXCH5A.174
C ! are a relatively few of sea-ice points. SFEXCH5A.175
C ! Set to false for a limited area run SFEXCH5A.176
C ! with a high proportion of sea-ice. SFEXCH5A.177
!--------------------------------------------------------------------- SFEXCH5A.179
! Extra variables for the interactive stomatal resistance model SFEXCH5A.180
!--------------------------------------------------------------------- SFEXCH5A.181
INTEGER SFEXCH5A.182
& SM_LEVELS ! IN Number of soil moisture levels SFEXCH5A.183
&,F_TYPE(LAND_PTS) ! IN Plant functional type: SFEXCH5A.184
C ! 1 - Broadleaf Tree SFEXCH5A.185
C ! 2 - Needleleaf Tree SFEXCH5A.186
C ! 3 - C3 Grass SFEXCH5A.187
C ! 4 - C4 Grass SFEXCH5A.188
SFEXCH5A.189
REAL SFEXCH5A.190
& HT(LAND_PTS) ! IN Canopy height (m). SFEXCH5A.191
&,LAI(LAND_PTS) ! IN Leaf area index. SFEXCH5A.192
&,PAR(P_POINTS) ! IN Photosynthetically active radiation SFEXCH5A.193
C ! (W/m2). SFEXCH5A.194
&,GPP(LAND_PTS) ! OUT Gross Primary Productivity SFEXCH5A.195
C ! (kg C/m2/s). SFEXCH5A.196
&,NPP(LAND_PTS) ! OUT Net Primary Productivity SFEXCH5A.197
C ! (kg C/m2/s). SFEXCH5A.198
&,RESP_P(LAND_PTS) ! OUT Plant respiration rate (kg C/m2/s). SFEXCH5A.199
SFEXCH5A.200
REAL SFEXCH5A.201
& AK_1 ! IN Hybrid "A" for lowest model layer. SFEXCH5A.202
&,BK_1 ! IN Hybrid "B" for lowest model layer. SFEXCH5A.203
&,CANOPY(LAND_PTS) ! IN Surface water (kg per sq metre). F642. SFEXCH5A.204
&,CATCH(LAND_PTS) ! IN Surface capacity (max. surface water) SFEXCH5A.205
C ! (kg per sq metre). F6416. SFEXCH5A.206
&,CF_1(P_POINTS) ! IN Cloud fraction for lowest atmospheric SFEXCH5A.207
C ! layer (decimal fraction). SFEXCH5A.208
&,CO2 ! IN CO2 mixing ratio (kg CO2/kg air). SFEXCH5A.209
&,DZSOIL(SM_LEVELS) ! IN Thicknesses of the soil layers (m). SFEXCH5A.210
&,HCONS(LAND_PTS) ! IN Soil thermal conductivity including SFEXCH5A.211
C ! the effects of water and ice (W/m/K). SFEXCH5A.212
&,ICE_FRACT(P_POINTS) ! IN Fraction of gridbox which is sea-ice. SFEXCH5A.213
&,LYING_SNOW(P_POINTS)! IN Lying snow amount (kg per sq metre). SFEXCH5A.214
&,PSTAR(P_POINTS) ! IN Surface pressure (Pascals). SFEXCH5A.215
&,Q_1(P_POINTS) ! IN Specific humidity for lowest atmospheric SFEXCH5A.216
C ! layer (kg water per kg air). SFEXCH5A.217
&,QCF_1(P_POINTS) ! IN Cloud ice for lowest atmospheric layer SFEXCH5A.218
C ! (kg water per kg air). SFEXCH5A.219
&,QCL_1(P_POINTS) ! IN Cloud liquid water for lowest atm layer SFEXCH5A.220
C ! (kg water per kg air). SFEXCH5A.221
&,GC(LAND_PTS) ! IN Interactive canopy conductance SFEXCH5A.224
C ! to evaporation (m/s) SFEXCH5A.225
&,RESIST(LAND_PTS) ! IN Fixed "stomatal" resistance SFEXCH5A.226
C ! to evaporation (s/m) SFEXCH5A.227
&,ROOTD(LAND_PTS) ! IN "Root depth" (metres). F6412. SFEXCH5A.228
&,SMC(LAND_PTS) ! IN Soil moisture content (kg per sq m). SFEXCH5A.229
C ! F621. SFEXCH5A.230
&,SMVCCL(LAND_PTS) ! IN Critical volumetric SMC (cubic metres SFEXCH5A.231
C ! per cubic metre of soil). F6232. SFEXCH5A.232
&,SMVCWT(LAND_PTS) ! IN Volumetric wilting point (cubic m of SFEXCH5A.233
C ! water per cubic m of soil). F6231. SFEXCH5A.234
C SFEXCH5A.235
C Note: (SMVCCL - SMVCWT) is the critical volumetric available soil SFEXCH5A.236
C moisture content. ~~~~~~~~~ SFEXCH5A.237
C SFEXCH5A.238
&,STHU(LAND_PTS,SM_LEVELS)! IN Unfrozen soil moisture content of SFEXCH5A.239
C ! each layer as a fraction of SFEXCH5A.240
C ! saturation. SFEXCH5A.241
C SFEXCH5A.242
REAL ! (Split to avoid > 19 continuations.) SFEXCH5A.243
& T_1(P_POINTS) ! IN Temperature for lowest atmospheric layer SFEXCH5A.244
C ! (Kelvin). SFEXCH5A.245
&,TIMESTEP ! IN Timestep in seconds for EPDT calc. SFEXCH5A.246
&,TI(P_POINTS) ! IN Temperature of sea-ice surface layer (K). SFEXCH5A.247
&,TS1(LAND_PTS) ! IN Temperature of top soil layer (K) SFEXCH5A.248
&,TSTAR(P_POINTS) ! IN Mean gridsquare surface temperature (K). SFEXCH5A.249
&,U_1(U_POINTS) ! IN West-to-east wind component for lowest SFEXCH5A.250
C ! atmospheric layer (m/s). On UV grid. SFEXCH5A.251
&,V_1(U_POINTS) ! IN South-to-north wind component for lowest SFEXCH5A.252
C ! atmospheric layer (m/s). On UV grid. SFEXCH5A.253
&,U_1_P(P_POINTS) ! IN West-to-east wind component for lowest SFEXCH5A.254
C ! atmospheric layer (m/s). On P grid. SFEXCH5A.255
C ! (Same as U_1 for Single Column Model.) SFEXCH5A.257
&,V_1_P(P_POINTS) ! IN South-to-north wind component for lowest SFEXCH5A.259
C ! atmospheric layer (m/s). On P grid. SFEXCH5A.260
C ! (Same as V_1 for Single Column Model.) SFEXCH5A.262
&,U_0(U_POINTS) ! IN West-to-east component of ocean surface SFEXCH5A.264
C ! current (m/s; ASSUMED zero over land). SFEXCH5A.265
C ! UV grid. F615. SFEXCH5A.266
&,V_0(U_POINTS) ! IN South-to-north component of ocean surface SFEXCH5A.267
C ! current (m/s; ASSUMED zero over land). SFEXCH5A.268
C ! UV grid. F616. SFEXCH5A.269
&,V_ROOT(LAND_PTS) ! IN Volumetric soil moisture concentration SFEXCH5A.270
C ! in the rootzone (m3 H2O/m3 soil). SFEXCH5A.271
&,V_SOIL(LAND_PTS) ! IN Volumetric soil moisture concentration SFEXCH5A.272
C ! in the top soil layer (m3 H2O/m3 soil). SFEXCH5A.273
&,VFRAC(LAND_PTS) ! IN Vegetated fraction. SFEXCH5A.274
&,Z0V(P_POINTS) ! IN Vegetative roughness length (m). F6418. SFEXCH5A.275
&,SIL_OROG(LAND_PTS) ! IN Silhouette area of unresolved orography SFEXCH5A.276
C ! per unit horizontal area SFEXCH5A.277
&,Z1(P_POINTS) ! IN Height of lowest atmospheric level (m). SFEXCH5A.278
&,HO2R2_OROG(LAND_PTS) ! IN Peak to trough height of unresolved SFEXCH5A.279
C ! orography devided by 2SQRT(2) (m). SFEXCH5A.280
LOGICAL SFEXCH5A.281
& LAND_MASK(P_POINTS) ! IN .TRUE. for land; .FALSE. elsewhere. F60. SFEXCH5A.282
&,SU10 ! IN STASH flag for 10-metre W wind. SFEXCH5A.283
&,SV10 ! IN STASH flag for 10-metre S wind. SFEXCH5A.284
&,SQ1P5 ! IN STASH flag for 1.5-metre sp humidity. SFEXCH5A.285
&,ST1P5 ! IN STASH flag for 1.5-metre temperature. SFEXCH5A.286
&,SFME ! IN STASH flag for wind mixing energy flux. SFEXCH5A.287
+,L_RMBL ! IN T to use rapidly mixing boundary SFEXCH5A.288
C ! scheme in IMPL_CAL SFEXCH5A.289
&,L_BL_LSPICE ! IN ADM3F404.77
! TRUE Use scientific treatment of mixed ADM3F404.78
! phase precip scheme. ADM3F404.79
! FALSE Do not use mixed phase precip ADM3F404.80
! considerations ADM3F404.81
&,L_Z0_OROG ! IN .TRUE. to use orographic roughness. SFEXCH5A.290
*IF DEF,SCMA AJC0F405.105
LOGICAL OBS ! Switch for OBS forcing AJC0F405.106
*ENDIF AJC0F405.107
C SFEXCH5A.291
C Modified (INOUT) variables. SFEXCH5A.292
C SFEXCH5A.293
REAL SFEXCH5A.294
& CANCAP(P_POINTS) ! INOUT Volumetric heat capacity of APA1F405.390
C ! vegetation canopy (J/Kg/m3). APA1F405.391
&,RADNET_C(P_POINTS) ! INOUT Adjusted net radiation for vegetation APA1F405.392
C ! over land (W/m2). APA1F405.393
&,Z0MSEA(P_POINTS) ! INOUT Sea-surface roughness length for APA1F405.394
C ! momentum (m). F617. SFEXCH5A.296
C SFEXCH5A.297
C Output variables. SFEXCH5A.298
C SFEXCH5A.299
REAL SFEXCH5A.300
& ALPHA1(P_POINTS) ! OUT Gradient of saturated specific humidity SFEXCH5A.301
C ! with respect to temperature between the SFEXCH5A.302
C ! bottom model layer and the surface SFEXCH5A.303
&,ASHTF(P_POINTS) ! OUT Coefficient to calculate surface SFEXCH5A.304
C ! heat flux into soil or sea-ice (W/m2/K). SFEXCH5A.305
&,BQ_1(P_POINTS) ! OUT A buoyancy parameter for lowest atm level SFEXCH5A.306
C ! ("beta-q twiddle"). SFEXCH5A.307
&,BT_1(P_POINTS) ! OUT A buoyancy parameter for lowest atm level. SFEXCH5A.308
C ! ("beta-T twiddle"). SFEXCH5A.309
&,BF_1(P_POINTS) ADM3F404.82
! OUT A buoyancy parameter for lowest atm level. ADM3F404.83
! ("beta-F twiddle"). ADM3F404.84
&,CD(P_POINTS) ! OUT Bulk transfer coefficient for momentum. SFEXCH5A.310
&,CH(P_POINTS) ! OUT Bulk transfer coefficient for heat and/or SFEXCH5A.311
C ! moisture. SFEXCH5A.312
&,CDR10M(U_POINTS) ! OUT Reqd for calculation of 10m wind (u & v). SFEXCH5A.313
C ! NBB: This is output on the UV-grid, but SFEXCH5A.314
C ! with the first and last rows set to a SFEXCH5A.315
C ! "missing data indicator". SFEXCH5A.316
C ! Sea-ice leads ignored. See 3.D.7 below. SFEXCH5A.317
&,CHR1P5M(P_POINTS)! OUT Reqd for calculation of 1.5m temperature. SFEXCH5A.318
C ! Sea-ice leads ignored. See 3.D.7 below. SFEXCH5A.319
&,CER1P5M(P_POINTS)! OUT Reqd for calculation of 1.5m sp humidity. SFEXCH5A.320
C ! Sea-ice leads ignored. See 3.D.7 below. SFEXCH5A.321
&,RHO_CD_MODV1(P_POINTS) SFEXCH5A.322
C ! OUT rhostar*cD*vshr before horizontal SFEXCH5A.323
C ! interpolation output as a diagnostic. SFEXCH5A.324
REAL ! (Split to avoid > 19 continuations.) SFEXCH5A.325
& EPOT(P_POINTS) ! OUT potential evaporation on P-grid ANG1F405.95
C ! (kg/m2/s). ANG1F405.96
&,FQW_1(P_POINTS) ! OUT "Explicit" surface flux of QW (i.e. ANG1F405.97
C ! evaporation), on P-grid (kg/m2/s). ANG1F405.98
&,FTL_1(P_POINTS) ! OUT "Explicit" surface flux of TL = H/CP. SFEXCH5A.328
C ! (sensible heat / CP). SFEXCH5A.329
&,FSMC(LAND_PTS) ! OUT soil moisture availability. ANG1F405.99
&,FRACA(P_POINTS) ! OUT Fraction of surface moisture flux with SFEXCH5A.330
C ! only aerodynamic resistance. SFEXCH5A.331
&,E_SEA(P_POINTS) ! OUT Evaporation from sea times leads SFEXCH5A.332
C ! fraction (kg/m2/s). Zero over land. SFEXCH5A.333
&,H_SEA(P_POINTS) ! OUT Surface sensible heat flux over sea SFEXCH5A.334
C ! times leads fraction (W/m2). SFEXCH5A.335
C ! Zero over land. SFEXCH5A.336
&,TAUX_1(U_POINTS) ! OUT "Explicit" x-component of surface SFEXCH5A.337
C ! turbulent stress; on UV-grid; first and SFEXCH5A.338
C ! last rows set to a "missing data SFEXCH5A.339
C ! indicator". (Newtons per square metre) SFEXCH5A.340
&,TAUY_1(U_POINTS) ! OUT "Explicit" y-component of surface SFEXCH5A.341
C ! turbulent stress; on UV-grid; first and SFEXCH5A.342
C ! last rows set to a "missing data SFEXCH5A.343
C ! indicator". (Newtons per square metre) SFEXCH5A.344
&,QW_1(P_POINTS) ! OUT Total water content of lowest SFEXCH5A.345
C ! atmospheric layer (kg per kg air). SFEXCH5A.346
&,RESFS(P_POINTS) ! OUT Combined soil, stomatal and aerodynamic SFEXCH5A.347
C ! resistance factor = PSIS/(1+RS/RA) for SFEXCH5A.348
C ! fraction (1-FRACA) SFEXCH5A.349
&,F_SE(P_POINTS) ! OUT Fraction of the evapotranspiration which SFEXCH5A.350
C ! is bare soil evaporation. SFEXCH5A.351
&,RESFT(P_POINTS) ! OUT Total resistance factor SFEXCH5A.352
C ! FRACA+(1-FRACA)*RESFS. SFEXCH5A.353
C SFEXCH5A.354
REAL ! Surface exchange coefficients;passed to subroutine IMPL_CAL SFEXCH5A.355
& RHOKE(P_POINTS) ! OUT For FQW, then *GAMMA(1) for implicit calc SFEXCH5A.356
&,RHOKH_1(P_POINTS) ! OUT For FTL,then *GAMMA(1) for implicit calcs SFEXCH5A.357
&,RHOKM_1(U_POINTS) ! OUT For momentum, then *GAMMA(1) for implicit SFEXCH5A.358
C ! calculations. NBB: This is output on the SFEXCH5A.359
C ! UV-grid, but with the first and last SFEXCH5A.360
C ! rows set to a "missing data indicator". SFEXCH5A.361
&,RHOKPM(P_POINTS) ! OUT NB NOT * GAMMA for implicit calcs. SFEXCH5A.362
&,RHOKPM_POT(P_POINTS) ANG1F405.100
C ! OUT Surface exchange coeff. for ANG1F405.101
C potential evaporation. ANG1F405.102
&,Z0M_EFF(P_POINTS) ! OUT Effective roughness length for momentum SFEXCH5A.363
&,H_BLEND(P_POINTS) ! OUT Blending height SFEXCH5A.364
&,T1_SD(P_POINTS) ! OUT Standard deviation of turbulent SFEXCH5A.365
C ! fluctuations of surface layer SFEXCH5A.366
C ! temperature (K). SFEXCH5A.367
&,Q1_SD(P_POINTS) ! OUT Standard deviation of turbulent SFEXCH5A.368
C ! fluctuations of surface layer SFEXCH5A.369
C ! specific humidity (kg/kg). SFEXCH5A.370
&,RIB(P_POINTS) ! OUT Bulk Richardson number for lowest layer. SFEXCH5A.371
&,TL_1(P_POINTS) ! OUT Liquid/frozen water temperature for SFEXCH5A.372
C ! lowest atmospheric layer (K). SFEXCH5A.373
&,VSHR(P_POINTS) ! OUT Magnitude of surface-to-lowest-lev. wind SFEXCH5A.374
&,Z0H(P_POINTS) ! OUT Roughness length for heat and moisture m SFEXCH5A.375
&,Z0M(P_POINTS) ! OUT Roughness length for momentum (m). SFEXCH5A.376
&,FME(P_POINTS) ! OUT Wind mixing energy flux (Watts/sq m). SFEXCH5A.377
&,RHO_ARESIST(P_POINTS) ! OUT, RHOSTAR*CD_STD*VSHR for SCYCLE SFEXCH5A.378
&,ARESIST(P_POINTS) ! OUT, 1/(CD_STD*VSHR) for SCYCLE SFEXCH5A.379
&,RESIST_B(P_POINTS) ! OUT, (1/CH-1/CD_STD)/VSHR for SCYCLE SFEXCH5A.380
C SFEXCH5A.381
INTEGER SFEXCH5A.382
& NRML(P_POINTS) ! OUT 1 if surface layer unstable, else 0. SFEXCH5A.383
&,ERROR ! OUT 1 if grid definition faulty; else 0. SFEXCH5A.384
C* SFEXCH5A.385
C*L Symbolic constants ------------------------------------------------ SFEXCH5A.386
C SFEXCH5A.387
C (1) UM-wide common parameters. SFEXCH5A.388
C SFEXCH5A.389
*CALL C_0_DG_C
SFEXCH5A.390
*CALL C_LHEAT
SFEXCH5A.391
*CALL C_G
SFEXCH5A.392
*CALL C_R_CP
SFEXCH5A.393
*CALL C_EPSLON
SFEXCH5A.394
*CALL C_VKMAN
SFEXCH5A.395
*CALL C_MDI
SFEXCH5A.396
SFEXCH5A.397
C SFEXCH5A.398
C (2) Boundary Layer local parameters. SFEXCH5A.399
C SFEXCH5A.400
*CALL C_CHARNK
SFEXCH5A.401
*CALL C_DENSTY
SFEXCH5A.402
*CALL C_GAMMA
SFEXCH5A.403
*CALL C_HT_M
SFEXCH5A.404
*CALL C_ROUGH
SFEXCH5A.405
*CALL C_SURF
SFEXCH5A.406
*CALL C_SOILH
SFEXCH5A.407
*CALL C_KAPPAI
SFEXCH5A.408
*CALL C_SICEHC
SFEXCH5A.409
SFEXCH5A.410
C SFEXCH5A.411
C (3) Derived local parameters. SFEXCH5A.412
C SFEXCH5A.413
REAL ETAR,GRCP,LCRCP,LFRCP,LS,LSRCP,H_BLEND_MIN,H_BLEND_MAX SFEXCH5A.414
SFEXCH5A.415
PARAMETER ( SFEXCH5A.416
& ETAR=1./(1.-EPSILON) ! Used in calc of buoyancy parameter BETAC. SFEXCH5A.417
&,GRCP=G/CP ! Used in calc of dT across surface layer. SFEXCH5A.418
&,LCRCP=LC/CP ! Evaporation-to-dT conversion factor. SFEXCH5A.419
&,LFRCP=LF/CP ! Freezing-to-dT conversion factor. SFEXCH5A.420
&,LS=LF+LC ! Latent heat of sublimation. SFEXCH5A.421
&,LSRCP=LS/CP ! Sublimation-to-dT conversion factor. SFEXCH5A.422
&,H_BLEND_MIN=0.0 ! Minimum blending height. SFEXCH5A.423
&,H_BLEND_MAX=1000.0 ! Maximum blending height (m). SFEXCH5A.424
&) SFEXCH5A.425
C* SFEXCH5A.426
*IF DEF,MPP GPB1F403.47
! MPP Common block GPB1F403.48
*CALL PARVARS
GPB1F403.49
*ENDIF GPB1F403.50
C*L SFEXCH5A.427
C External subprograms called. SFEXCH5A.428
C SFEXCH5A.429
EXTERNAL SF_ROUGH,SF_RIB,FCDCH,QSAT,SFL_INT,SF_FLUX,SF_STOM SFEXCH5A.430
&,QSAT_WAT ADM3F404.85
*IF -DEF,SCMA AJC1F405.94
EXTERNAL P_TO_UV,UV_TO_P GSS1F403.53
*ENDIF SFEXCH5A.433
EXTERNAL TIMER SFEXCH5A.434
C* SFEXCH5A.435
C SFEXCH5A.436
C Define local storage. SFEXCH5A.437
C SFEXCH5A.438
C (a) Workspace. SFEXCH5A.439
C SFEXCH5A.440
C*L Workspace --------------------------------------------------------- SFEXCH5A.441
C 25 blocks of real workspace are required, as follows. SFEXCH5A.443
REAL SFEXCH5A.444
& CD_LEAD(P_POINTS) ! Bulk transfer coefficient for momentum SFEXCH5A.445
C ! over sea-ice leads.Missing data over non SFEXCH5A.446
C ! sea-ice points.(Temporary store for Z0MIZ) SFEXCH5A.447
&,CD_MIZ(P_POINTS) ! Bulk transfer coefficient for momentum SFEXCH5A.448
C ! over the sea-ice Marginal Ice Zone. SFEXCH5A.449
C ! Missing data indicator over non sea-ice. SFEXCH5A.450
&,CH_LEAD(P_POINTS) ! Bulk transfer coefficient for heat and SFEXCH5A.451
C ! or moisture over sea ice leads. SFEXCH5A.452
C ! Missing data indicator over non sea-ice. SFEXCH5A.453
&,CH_MIZ(P_POINTS) ! Bulk transfer coefficient for heat and SFEXCH5A.454
C ! or moisture over the Marginal Ice Zone. SFEXCH5A.455
C ! Missing data indicator over non sea-ice. SFEXCH5A.456
&,CD_STD(P_POINTS) ! Local drag coefficient for SFEXCH5A.457
C ! calculation of interpolation coefficients SFEXCH5A.458
&,DQ(P_POINTS) ! Sp humidity difference between surface SFEXCH5A.459
C ! and lowest atmospheric level (Q1 - Q*). SFEXCH5A.460
C ! Holds value over sea-ice where ICE_FRACT SFEXCH5A.461
C ! >0 i.e. Leads contribution not included. SFEXCH5A.462
&,DQI(P_POINTS) ADM3F404.86
! Ice water difference between surface ADM3F404.87
! and lowest atmospheric level (Q1 - Q*). ADM3F404.88
! Holds value over sea-ice where ICE_FRACT ADM3F404.89
! >0 i.e. Leads contribution not included. ADM3F404.90
&,DQ_LEAD(P_POINTS) ! DQ for leads fraction of gridsquare. SFEXCH5A.463
C ! Missing data indicator over non sea-ice. SFEXCH5A.464
&,DQI_LEAD(P_POINTS) ADM3F404.91
! DQI for leads fraction of gridsquare. ADM3F404.92
! Missing data indicator over non sea-ice. ADM3F404.93
&,DTEMP(P_POINTS) ! Liquid/ice static energy difference SFEXCH5A.465
C ! between surface and lowest atmospheric SFEXCH5A.466
C ! level, divided by CP (a modified SFEXCH5A.467
C ! temperature difference). SFEXCH5A.468
C ! Holds value over sea-ice where ICE_FRACT SFEXCH5A.469
C ! >0 i.e. Leads contribution not included. SFEXCH5A.470
&,DTEMP_LEAD(P_POINTS) ! DTEMP for leads fraction of gridsquare. SFEXCH5A.471
C ! Missing data indicator over non sea-ice. SFEXCH5A.472
&,EPDT(P_POINTS) ! "Potential" Evaporation * Timestep SFEXCH5A.473
&,NL0(LAND_PTS) ! Nitrogen concentration of the top leaf SFEXCH5A.474
C ! (kg N/kg C). SFEXCH5A.475
&,PSIS(P_POINTS) ! Soil moisture availability factor. SFEXCH5A.476
&,PSTAR_ICE(P_POINTS)! Surface pressure over sea ice (Pa). SFEXCH5A.477
&,QS1(P_POINTS) ! Sat. specific humidity qsat(TL_1,PSTAR) SFEXCH5A.478
&,QSL(P_POINTS) ! Saturated sp humidity at liquid/ice SFEXCH5A.479
C ! temperature and pressure of lowest SFEXCH5A.480
C ! atmospheric level. SFEXCH5A.481
&,QSTAR(P_POINTS) ! Surface saturated sp humidity. Holds SFEXCH5A.482
C ! value over sea-ice where ICE_FRACT > 0. SFEXCH5A.483
C ! i.e. Leads contribution not included. SFEXCH5A.484
&,QSTAR_LEAD(P_POINTS) ! QSTAR for sea-ice leads. SFEXCH5A.485
C ! Missing data indicator over non sea-ice. SFEXCH5A.486
&,RHOSTAR(P_POINTS) ! Surface air density in kg per cubic metre. SFEXCH5A.487
&,RIB_LEAD(P_POINTS) ! Bulk Richardson no. for sea-ice leads at SFEXCH5A.488
C ! lowest layer. At non sea-ice points holds SFEXCH5A.489
C ! RIB for FCDCH calculation, then set to SFEXCH5A.490
C ! to missing data indicator. SFEXCH5A.491
&,RA(P_POINTS) ! Aerodynamic resistance. SFEXCH5A.492
&,ROOT(LAND_PTS) ! Root biomass (kg C/m2). SFEXCH5A.493
&,TSTAR_NL(P_POINTS) ! TSTAR No Leads: surface temperature SFEXCH5A.494
C ! over sea-ice fraction of gridsquare. SFEXCH5A.495
C ! =TSTAR over non sea-ice points. SFEXCH5A.496
&,U_0_P(P_POINTS) ! West-to-east component of ocean surface SFEXCH5A.497
C ! current (m/s; zero over land if U_0 OK). SFEXCH5A.498
C ! P grid. F615. SFEXCH5A.499
&,V_0_P(P_POINTS) ! South-to-north component of ocean surface SFEXCH5A.500
C ! current (m/s; zero over land if V_0 OK). SFEXCH5A.501
C ! P grid. F616. SFEXCH5A.502
&,WIND_PROFILE_FACTOR(P_POINTS) SFEXCH5A.503
C ! For transforming effective surface transfer SFEXCH5A.504
C ! coefficients to those excluding form drag. SFEXCH5A.505
SFEXCH5A.506
&,Z0F(P_POINTS) ! Roughness length for free-convective heat SFEXCH5A.507
C ! and moisture transport. SFEXCH5A.508
&,Z0FS(P_POINTS) ! Roughness length for free-convective heat SFEXCH5A.509
C ! and moisture transport over sea. SFEXCH5A.510
&,Z0HS(P_POINTS) ! Roughness length for heat and moisture SFEXCH5A.511
C ! transport over sea. SFEXCH5A.512
C SFEXCH5A.513
C Workspace (reqd for compression). SFEXCH5A.514
INTEGER SFEXCH5A.515
& SICE_INDEX(P_POINTS) ! Index vector for gather to sea-ice points SFEXCH5A.516
LOGICAL ITEST(P_POINTS) ! Used as 'logical' for compression. SFEXCH5A.517
C* SFEXCH5A.584
C SFEXCH5A.585
C (b) Scalars. SFEXCH5A.586
C SFEXCH5A.587
INTEGER SFEXCH5A.588
& I ! Loop counter (horizontal field index). SFEXCH5A.589
&,J ! Offset counter within I-loop. SFEXCH5A.590
&,K ! Offset counter within I-loop. SFEXCH5A.591
&,L ! Loop counter (land point field index). SFEXCH5A.592
&,N ! Loop counter (land point field index). SFEXCH5A.593
&,NSICE ! Number of sea-ice points. SFEXCH5A.594
&,SI ! Loop counter (sea-ice field index). SFEXCH5A.598
REAL SFEXCH5A.599
& TAU ! Magnitude of surface wind stress over sea. SFEXCH5A.600
&,VS ! Surface layer friction velocity SFEXCH5A.601
&,VSF1_CUBED ! Cube of surface layer free convective scaling SFEXCH5A.602
C ! velocity SFEXCH5A.603
&,WS1 ! Turbulent velocity scale for surface layer SFEXCH5A.604
SFEXCH5A.605
!------------------------------------------------------------------- SFEXCH5A.606
! Extra work variables for the canopy (stomatal) conductance model. SFEXCH5A.607
!------------------------------------------------------------------- SFEXCH5A.608
LOGICAL SFEXCH5A.609
& INT_STOM ! T for interactive stomatal resistance. SFEXCH5A.610
PARAMETER (INT_STOM=.TRUE.) SFEXCH5A.611
SFEXCH5A.612
C SFEXCH5A.613
C----------------------------------------------------------------------- SFEXCH5A.614
CL 0. Check that the scalars input to define the grid are consistent. SFEXCH5A.615
C----------------------------------------------------------------------- SFEXCH5A.616
C SFEXCH5A.617
IF (LTIMER) THEN SFEXCH5A.618
CALL TIMER
('SFEXCH ',3) SFEXCH5A.619
ENDIF SFEXCH5A.620
SFEXCH5A.621
ERROR=0 SFEXCH5A.622
*IF DEF,SCMA AJC1F405.95
IF ( U_ROWS .NE. P_ROWS .OR. AJC1F405.96
& U_POINTS .NE. (U_ROWS*ROW_LENGTH) .OR. AJC1F405.97
& P_POINTS .NE. (P_ROWS*ROW_LENGTH) .OR. AJC1F405.98
& LAND_PTS .GT. P_POINTS ) THEN AJC1F405.99
ERROR=1 AJC1F405.100
GOTO 6 AJC1F405.101
ENDIF AJC1F405.102
*ELSE SFEXCH5A.639
IF ( U_ROWS .NE. (P_ROWS+1) .OR. SFEXCH5A.640
& U_POINTS .NE. (U_ROWS*ROW_LENGTH) .OR. SFEXCH5A.641
& P_POINTS .NE. (P_ROWS*ROW_LENGTH) .OR. SFEXCH5A.642
& LAND_PTS .GT. P_POINTS ) THEN SFEXCH5A.643
ERROR=1 SFEXCH5A.644
GOTO6 SFEXCH5A.645
ENDIF SFEXCH5A.646
*ENDIF AJC1F405.103
C SFEXCH5A.647
C----------------------------------------------------------------------- SFEXCH5A.648
CL 1. Construct SICE_INDEX for compression onto sea points in SFEXCH5A.649
CL sea-ice leads calculations. SFEXCH5A.650
C----------------------------------------------------------------------- SFEXCH5A.651
C SFEXCH5A.652
DO I = 1,P_POINTS SFEXCH5A.653
ITEST(I) = .FALSE. SFEXCH5A.654
IF (ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I)) SFEXCH5A.655
& ITEST(I) = .TRUE. SFEXCH5A.656
ENDDO SFEXCH5A.657
C SFEXCH5A.658
C Routine whenimd is functionally equivalent to WHENILE, so ITEST is SFEXCH5A.659
C 1 for "False", 0 for "True". SFEXCH5A.660
C SFEXCH5A.661
C GSS2F402.293
NSICE = 0 GSS2F402.294
DO I=1,P_POINTS GSS2F402.295
IF(ITEST(I))THEN GSS2F402.296
NSICE = NSICE + 1 GSS2F402.297
SICE_INDEX(NSICE) = I GSS2F402.298
END IF GSS2F402.299
END DO GSS2F402.300
C SFEXCH5A.664
C----------------------------------------------------------------------- SFEXCH5A.665
CL 2. Calculate QSAT values required later and components of ocean SFEXCH5A.666
CL current. SFEXCH5A.667
C Done here to avoid loop splitting. SFEXCH5A.668
C QSTAR 'borrowed' to store P at level 1 (just this once). SFEXCH5A.669
C PSIS 'borrowed' to store leads and non sea-ice surface temp. SFEXCH5A.670
C----------------------------------------------------------------------- SFEXCH5A.671
C SFEXCH5A.672
C----------------------------------------------------------------------- SFEXCH5A.674
CL 2.1 IF (GATHER) THEN SFEXCH5A.675
CL Calculate temperatures and pressures for QSAT calculations. SFEXCH5A.676
CL Calculate QSAT values. For sea-ice points, separate values SFEXCH5A.677
CL are required for the leads (QSTAR_LEAD) and sea-ice (QSTAR) SFEXCH5A.678
CL fractions respectively. QSTAR_LEAD = missing data, elsewhere. SFEXCH5A.679
CL Use RS to store compressed PSTAR for this section only. SFEXCH5A.680
CL NB Unlike QSTAR, TSTAR values at sea-ice points are gridsq. SFEXCH5A.681
CL means and so include the leads contribution. SFEXCH5A.682
CL ELSE SFEXCH5A.683
CL As above with QSTAR_LEAD done on full field. SFEXCH5A.684
CL ENDIF SFEXCH5A.685
C----------------------------------------------------------------------- SFEXCH5A.686
IF (GATHER) THEN SFEXCH5A.687
DO I = 1,P_POINTS SFEXCH5A.688
IF (L_BL_LSPICE) THEN ADM3F404.94
TL_1(I) = T_1(I) - LCRCP*QCL_1(I) ! P243.9 ADM3F404.95
ELSE ADM3F404.96
TL_1(I) = T_1(I) - LCRCP*QCL_1(I) - LSRCP*QCF_1(I) !P243.9 ADM3F404.97
ENDIF ADM3F404.98
TSTAR_NL(I) = TSTAR(I) SFEXCH5A.690
QSTAR_LEAD(I) = 1.0E30 ! Missing data indicato SFEXCH5A.691
QSTAR(I) = AK_1 + BK_1*PSTAR(I) SFEXCH5A.692
ENDDO SFEXCH5A.693
IF (NSICE.GT.0) THEN SFEXCH5A.694
CDIR$ IVDEP SFEXCH5A.695
! Fujitsu vectorization directive GRB0F405.479
!OCL NOVREC GRB0F405.480
DO SI = 1,NSICE SFEXCH5A.696
I = SICE_INDEX(SI) SFEXCH5A.697
TSTAR_NL(I) = (TSTAR(I)-(1.0-ICE_FRACT(I)) *TFS) SFEXCH5A.698
& / ICE_FRACT(I) ! P2430.1 SFEXCH5A.699
PSIS(SI) = TFS SFEXCH5A.700
PSTAR_ICE(SI) = PSTAR(I) SFEXCH5A.701
ENDDO SFEXCH5A.702
ENDIF SFEXCH5A.703
IF (L_BL_LSPICE) THEN ADM3F404.99
CALL QSAT_WAT
(QSL,TL_1,QSTAR,P_POINTS) ADM3F404.100
ELSE ADM3F404.101
CALL QSAT
(QSL,TL_1,QSTAR,P_POINTS) ADM3F404.102
ENDIF ADM3F404.103
SFEXCH5A.705
CALL QSAT
(QSTAR,TSTAR_NL,PSTAR,P_POINTS) SFEXCH5A.706
SFEXCH5A.707
C ...values at sea-ice points contain ice contribution only SFEXCH5A.708
IF (NSICE.GT.0) CALL QSAT
(QSTAR_LEAD,PSIS,PSTAR_ICE,NSICE) SFEXCH5A.709
C ...values at sea-ice points only SFEXCH5A.710
ELSE SFEXCH5A.711
C----------------------------------------------------------------------- SFEXCH5A.713
CL 2.1 Single Column Model selected. SFEXCH5A.714
CL Calculate temperatures and pressures for QSAT calculations. SFEXCH5A.715
CL If there is sea-ice, separate values of surface saturated SFEXCH5A.716
CL specific humidity are required for the leads (QSTAR_LEAD) SFEXCH5A.717
CL and sea-ice (QSTAR) fractions respectively. SFEXCH5A.718
CL NB Unlike QSTAR, TSTAR values at sea-ice points are gridsq. SFEXCH5A.719
CL means and so include the leads contribution. SFEXCH5A.720
CL Also initialise RIB to 0 SFEXCH5A.721
C----------------------------------------------------------------------- SFEXCH5A.722
DO I = 1,P_POINTS SFEXCH5A.724
IF (L_BL_LSPICE) THEN ADM3F404.104
TL_1(I) = T_1(I) - LCRCP*QCL_1(I) ! P243.9 ADM3F404.105
ELSE ADM3F404.106
TL_1(I) = T_1(I) - LCRCP*QCL_1(I) - LSRCP*QCF_1(I) !P243.9 ADM3F404.107
ENDIF ADM3F404.108
TSTAR_NL(I) = TSTAR(I) SFEXCH5A.726
C Set to missing data at non sea-ice points after QSAT. SFEXCH5A.727
PSIS(I) = TSTAR(I) SFEXCH5A.728
QSTAR(I) = AK_1 + BK_1*PSTAR(I) SFEXCH5A.729
IF ( ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I) ) THEN SFEXCH5A.730
TSTAR_NL(I) = (TSTAR(I)-(1.0-ICE_FRACT(I)) *TFS) SFEXCH5A.731
& / ICE_FRACT(I) ! P2430.1 SFEXCH5A.732
PSIS(I) = TFS SFEXCH5A.733
ENDIF SFEXCH5A.734
RIB(I) = 0.0 SFEXCH5A.735
ENDDO SFEXCH5A.736
IF (L_BL_LSPICE) THEN ADM3F404.109
CALL QSAT_WAT
(QSL,TL_1,QSTAR,P_POINTS) ADM3F404.110
ELSE ADM3F404.111
CALL QSAT
(QSL,TL_1,QSTAR,P_POINTS) ADM3F404.112
ENDIF ADM3F404.113
SFEXCH5A.738
CALL QSAT
(QSTAR,TSTAR_NL,PSTAR,P_POINTS) SFEXCH5A.739
C ...values at sea-ice points contain ice contribution only SFEXCH5A.740
IF (NSICE.GT.0) CALL QSAT
(QSTAR_LEAD,PSIS,PSTAR,P_POINTS) SFEXCH5A.741
C ...values at sea-ice points contain leads contribution only SFEXCH5A.742
DO I=1,P_POINTS SFEXCH5A.743
IF ( .NOT.(ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I)) ) SFEXCH5A.744
& QSTAR_LEAD(I) = 1.0E30 SFEXCH5A.745
ENDDO SFEXCH5A.746
ENDIF ! End of IF (GATHER) THEN... ELSE. SFEXCH5A.748
C----------------------------------------------------------------------- SFEXCH5A.750
CL 2.2 Set components of ocean surface current. SFEXCH5A.751
C----------------------------------------------------------------------- SFEXCH5A.752
*IF DEF,SCMA AJC1F405.104
DO I = 1, U_POINTS AJC1F405.105
U_0_P(I) = U_0(I) AJC1F405.106
V_0_P(I) = V_0(I) AJC1F405.107
ENDDO AJC1F405.108
*ELSE SFEXCH5A.756
CALL UV_TO_P
(U_0,U_0_P,U_POINTS,P_POINTS,ROW_LENGTH,U_ROWS) SFEXCH5A.757
CALL UV_TO_P
(V_0,V_0_P,U_POINTS,P_POINTS,ROW_LENGTH,U_ROWS) SFEXCH5A.758
*ENDIF SFEXCH5A.759
C SFEXCH5A.760
C----------------------------------------------------------------------- SFEXCH5A.761
CL 3. Calculation of transfer coefficients and surface layer stability SFEXCH5A.762
C----------------------------------------------------------------------- SFEXCH5A.763
C SFEXCH5A.764
C----------------------------------------------------------------------- SFEXCH5A.765
CL 3.1 Calculate neutral roughness lengths and blending height for SFEXCH5A.766
CL surface SFEXCH5A.767
C----------------------------------------------------------------------- SFEXCH5A.768
SFEXCH5A.769
CALL SF_ROUGH
( SFEXCH5A.770
& P_POINTS,LAND_PTS,LAND_MASK, SFEXCH5A.771
& P1,LAND_INDEX, SFEXCH5A.773
& L_Z0_OROG,Z1,Z0MSEA,ICE_FRACT, SFEXCH5A.775
& LYING_SNOW,Z0V,SIL_OROG,HO2R2_OROG,RIB,Z0M_EFF,Z0M,Z0H, SFEXCH5A.776
& WIND_PROFILE_FACTOR,H_BLEND,CD_LEAD,Z0HS,Z0F,Z0FS, SFEXCH5A.777
& LTIMER) SFEXCH5A.778
SFEXCH5A.779
SFEXCH5A.780
C----------------------------------------------------------------------- SFEXCH5A.781
CL 3.2 Calculate buoyancy parameters and bulk Richardson number for SFEXCH5A.782
CL the lowest model level. SFEXCH5A.783
C----------------------------------------------------------------------- SFEXCH5A.784
C Calculate QSAT(TL1,P*) SFEXCH5A.785
C SFEXCH5A.786
CALL QSAT
(QS1,TL_1,PSTAR,P_POINTS) SFEXCH5A.787
SFEXCH5A.788
CALL SF_RIB
( SFEXCH5A.789
& P_POINTS,LAND_PTS,LAND_MASK,INT_STOM, SFEXCH5A.790
& GATHER,P1,LAND_INDEX, SFEXCH5A.792
& NSICE,SICE_INDEX,ICE_FRACT, SFEXCH5A.794
& PSTAR,AK_1,BK_1,Q_1,QW_1,QCL_1,QCF_1, SFEXCH5A.795
& CF_1,T_1,TL_1,QSL,QSTAR,QSTAR_LEAD, SFEXCH5A.796
& QS1,TSTAR_NL,Z1,Z0M_EFF,Z0M,Z0H,Z0HS,Z0MSEA, SFEXCH5A.797
& WIND_PROFILE_FACTOR,U_1_P,U_0_P,V_1_P,V_0_P, SFEXCH5A.798
& ROOTD,SMVCCL,SMVCWT,SMC,V_SOIL,VFRAC,CANOPY,CATCH, SFEXCH5A.799
& LYING_SNOW,GC,RESIST,RIB,RIB_LEAD,PSIS,VSHR,ALPHA1, SFEXCH5A.800
& BT_1,BQ_1,BF_1,FRACA,RESFS,DQ,DQ_LEAD,DTEMP, ADM3F404.114
& DTEMP_LEAD,L_BL_LSPICE, ADM3F404.115
& LTIMER) SFEXCH5A.802
SFEXCH5A.803
C----------------------------------------------------------------------- SFEXCH5A.804
CL 3.3 Calculate stability corrected effective roughness length. SFEXCH5A.805
CL Simple linear interpolation when RIB between 0 and RIB_CRIT (>0) for SFEXCH5A.806
CL form drag term. SFEXCH5A.807
C----------------------------------------------------------------------- SFEXCH5A.808
SFEXCH5A.809
SFEXCH5A.810
CALL SF_ROUGH
( SFEXCH5A.811
& P_POINTS,LAND_PTS,LAND_MASK, SFEXCH5A.812
& P1,LAND_INDEX, SFEXCH5A.814
& L_Z0_OROG,Z1,Z0MSEA,ICE_FRACT, SFEXCH5A.816
& LYING_SNOW,Z0V,SIL_OROG,HO2R2_OROG,RIB,Z0M_EFF,Z0M,Z0H, SFEXCH5A.817
& WIND_PROFILE_FACTOR,H_BLEND,CD_LEAD,Z0HS,Z0F,Z0FS, SFEXCH5A.818
& LTIMER) SFEXCH5A.819
SFEXCH5A.820
C SFEXCH5A.821
C----------------------------------------------------------------------- SFEXCH5A.822
CL 3.4 Calculate CD, CH via routine FCDCH. SFEXCH5A.823
CL Calculate CD_MIZ,CH_MIZ,CD_LEAD,CH_LEAD on full field then set SFEXCH5A.824
CL non sea-ice points to missing data (contain nonsense after FCDCH) SFEXCH5A.825
C Unlike the QSAT calculations above, arrays are not compressed to SFEXCH5A.827
C sea-ice points for FCDCH. This is because it would require extra SFEXCH5A.828
C work space and initial tests showed that with with the extra SFEXCH5A.829
C compression calculations required no time was saved. SFEXCH5A.830
C NB CD_LEAD stores Z0MIZ for calculation of CD_MIZ,CH_MIZ. SFEXCH5A.832
C----------------------------------------------------------------------- SFEXCH5A.833
C SFEXCH5A.834
CALL FCDCH
(RIB,CD_LEAD,CD_LEAD,CD_LEAD,Z1,WIND_PROFILE_FACTOR, SFEXCH5A.835
& P_POINTS,CD_MIZ,CH_MIZ,CD_STD,LTIMER) SFEXCH5A.836
C ! Marginal Ice Zone.P2430.9 SFEXCH5A.837
CALL FCDCH
(RIB_LEAD,Z0MSEA,Z0HS,Z0FS,Z1,WIND_PROFILE_FACTOR, SFEXCH5A.838
& P_POINTS,CD_LEAD,CH_LEAD,CD_STD,LTIMER) SFEXCH5A.839
C ! Sea-ice leads.P2430.8 SFEXCH5A.840
CALL FCDCH
(RIB,Z0M_EFF,Z0H,Z0F,Z1,WIND_PROFILE_FACTOR, SFEXCH5A.841
& P_POINTS,CD,CH,CD_STD,LTIMER) SFEXCH5A.842
DO I=1,P_POINTS SFEXCH5A.843
C IF ( an ordinary sea points (no sea-ice) or a land point) SFEXCH5A.844
IF (.NOT.(ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I)) ) THEN SFEXCH5A.845
CD_MIZ(I) = 1.E30 SFEXCH5A.846
CH_MIZ(I) = 1.E30 SFEXCH5A.847
CD_LEAD(I) = 1.E30 SFEXCH5A.848
CH_LEAD(I) = 1.E30 SFEXCH5A.849
RIB_LEAD(I) = 1.E30 SFEXCH5A.850
ENDIF SFEXCH5A.851
ENDDO SFEXCH5A.852
C SFEXCH5A.853
SFEXCH5A.854
C----------------------------------------------------------------------- SFEXCH5A.855
CL 4. Loop round gridpoints to be processed, performing calculations SFEXCH5A.856
CL AFTER call to FCDCH which necessitates splitting of loop. SFEXCH5A.857
C----------------------------------------------------------------------- SFEXCH5A.858
CL 4.1 Recalculate RESFS using "true" CH and EPDT SFEXCH5A.859
C----------------------------------------------------------------------- SFEXCH5A.860
SFEXCH5A.861
CDIR$ IVDEP SFEXCH5A.867
! Fujitsu vectorization directive GRB0F405.481
!OCL NOVREC GRB0F405.482
DO L = 1,LAND_PTS SFEXCH5A.868
I = LAND_INDEX(L) - (P1-1) SFEXCH5A.869
EPDT(I) = -PSTAR(I)/(R*TSTAR(I))*CH(I)*VSHR(I)*DQ(I)*TIMESTEP SFEXCH5A.871
ENDDO ! Loop over land-points SFEXCH5A.876
SFEXCH5A.878
!----------------------------------------------------------------------- SFEXCH5A.879
! If the interactive surface resistance is requested call SF_STOM SFEXCH5A.880
!----------------------------------------------------------------------- SFEXCH5A.881
IF (INT_STOM) THEN SFEXCH5A.882
SFEXCH5A.883
!----------------------------------------------------------------------- SFEXCH5A.884
! Calculate the aerodynamic resistance SFEXCH5A.885
!----------------------------------------------------------------------- SFEXCH5A.886
DO I=1,P_POINTS SFEXCH5A.887
RA(I) = 1.0 / (CH(I) * VSHR(I)) SFEXCH5A.888
ENDDO SFEXCH5A.889
SFEXCH5A.890
CDIR$ IVDEP SFEXCH5A.896
! Fujitsu vectorization directive GRB0F405.483
!OCL NOVREC GRB0F405.484
DO L = 1,LAND_PTS SFEXCH5A.897
I = LAND_INDEX(L) - (P1-1) SFEXCH5A.898
!----------------------------------------------------------------------- SFEXCH5A.900
! For mesoscale model release assume uniform functional types and top SFEXCH5A.901
! leaf nitrogen concentrations. Assume that (fine) root biomass is SFEXCH5A.902
! equal to leaf biomass. SFEXCH5A.903
!----------------------------------------------------------------------- SFEXCH5A.904
NL0(L) = 50.0E-3 SFEXCH5A.905
ROOT(L) = 0.04 * LAI(L) SFEXCH5A.906
SFEXCH5A.907
ENDDO ! Loop over land-points SFEXCH5A.912
SFEXCH5A.914
IF(LAND_PTS.GT.0) THEN ! Omit if no land points ARR0F403.24
ARR0F403.25
CALL SF_STOM
(LAND_PTS,LAND_INDEX,P1,P_POINTS SFEXCH5A.915
&, F_TYPE,CO2,HT,PAR,LAI,NL0,PSTAR SFEXCH5A.916
&, Q_1,RA,ROOT,TSTAR,SMVCCL,V_ROOT,SMVCWT SFEXCH5A.917
&, VFRAC,GPP,NPP,RESP_P,GC,LTIMER,FSMC) ANG1F405.104
ARR0F403.26
ENDIF ! End test on land points ARR0F403.27
SFEXCH5A.919
!----------------------------------------------------------------------- SFEXCH5A.920
! Convert carbon fluxes to gridbox mean values SFEXCH5A.921
!----------------------------------------------------------------------- SFEXCH5A.922
CDIR$ IVDEP SFEXCH5A.928
! Fujitsu vectorization directive GRB0F405.485
!OCL NOVREC GRB0F405.486
DO L = 1,LAND_PTS SFEXCH5A.929
I = LAND_INDEX(L) - (P1-1) SFEXCH5A.930
SFEXCH5A.932
GPP(L) = VFRAC(L) * GPP(L) SFEXCH5A.933
NPP(L) = VFRAC(L) * NPP(L) SFEXCH5A.934
RESP_P(L) = VFRAC(L) * RESP_P(L) SFEXCH5A.935
SFEXCH5A.936
ENDDO ! Loop over land-points SFEXCH5A.941
SFEXCH5A.943
ENDIF ! INT_STOM SFEXCH5A.944
SFEXCH5A.945
SFEXCH5A.946
CALL SF_RESIST
( SFEXCH5A.947
& P_POINTS,LAND_PTS,LAND_MASK,INT_STOM, SFEXCH5A.948
& P1,LAND_INDEX, SFEXCH5A.950
& ROOTD,SMVCCL,SMVCWT,SMC,V_SOIL,VFRAC,CANOPY,CATCH,DQ, SFEXCH5A.952
& EPDT,LYING_SNOW,GC,RESIST,VSHR,CH,PSIS,FRACA,RESFS, SFEXCH5A.953
& F_SE,RESFT,LTIMER) SFEXCH5A.954
SFEXCH5A.955
SFEXCH5A.956
C----------------------------------------------------------------------- SFEXCH5A.957
CL 4.D Call SFL_INT to calculate CDR10M, CHR1P5M and CER1P5M - SFEXCH5A.958
CL interpolation coefficients used in SF_EVAP and IMPL_CAL to SFEXCH5A.959
CL calculate screen temperature, specific humidity and 10m winds. SFEXCH5A.960
C----------------------------------------------------------------------- SFEXCH5A.961
C SFEXCH5A.962
IF (SU10 .OR. SV10 .OR. SQ1P5 .OR. ST1P5) THEN SFEXCH5A.963
SFEXCH5A.964
CALL SFL_INT
( SFEXCH5A.965
& P_POINTS,U_POINTS,RIB,Z1,Z0M,Z0M_EFF,Z0H,Z0F,CD_STD,CD,CH, SFEXCH5A.966
& RESFT,WIND_PROFILE_FACTOR, SFEXCH5A.967
& CDR10M,CHR1P5M,CER1P5M, SFEXCH5A.968
& SU10,SV10,ST1P5,SQ1P5,LTIMER SFEXCH5A.969
& ) SFEXCH5A.970
ENDIF SFEXCH5A.971
C----------------------------------------------------------------------- SFEXCH5A.972
CL 4.2 Now that diagnostic calculations are over, update CD and CH SFEXCH5A.973
CL to their correct values (i.e. gridsquare means). SFEXCH5A.974
C----------------------------------------------------------------------- SFEXCH5A.975
DO I = 1,P_POINTS SFEXCH5A.976
IF ( ICE_FRACT(I).GT.0.0 .AND. .NOT.LAND_MASK(I) ) THEN SFEXCH5A.977
IF ( ICE_FRACT(I).LT. 0.7 ) THEN SFEXCH5A.978
CD(I) = ( ICE_FRACT(I)*CD_MIZ(I) + SFEXCH5A.979
& (0.7-ICE_FRACT(I))*CD_LEAD(I) ) / 0.7 ! P2430.5 SFEXCH5A.980
CD_STD(I) = CD(I) ! for SCYCLE: no orog. over sea+ice SFEXCH5A.981
CH(I) = ( ICE_FRACT(I)*CH_MIZ(I) + SFEXCH5A.982
& (0.7-ICE_FRACT(I))*CH_LEAD(I) ) / 0.7 ! P2430.4 SFEXCH5A.983
ELSE SFEXCH5A.984
CD(I) = ( (1.0-ICE_FRACT(I))*CD_MIZ(I) + SFEXCH5A.985
& (ICE_FRACT(I)-0.7)*CD(I) ) / 0.3 ! P2430.7 SFEXCH5A.986
CD_STD(I) = CD(I) ! for SCYCLE: no orog. over sea+ice SFEXCH5A.987
CH(I) = ( (1.0-ICE_FRACT(I))*CH_MIZ(I) + SFEXCH5A.988
& (ICE_FRACT(I)-0.7)*CH(I) ) / 0.3 ! P2430.7 SFEXCH5A.989
ENDIF SFEXCH5A.990
ENDIF SFEXCH5A.991
C----------------------------------------------------------------------- SFEXCH5A.992
CL 4.3 Calculate the surface exchange coefficients RHOK(*). SFEXCH5A.993
C----------------------------------------------------------------------- SFEXCH5A.994
RHOSTAR(I) = PSTAR(I) / ( R*TSTAR(I) ) SFEXCH5A.995
C ... surface air density from ideal gas equation SFEXCH5A.996
C Calculate resistances for use in Sulphur Cycle SFEXCH5A.997
C (Note that CD_STD, CH and VSHR should never = 0) SFEXCH5A.998
RHO_ARESIST(I) = RHOSTAR(I) * CD_STD(I) * VSHR(I) SFEXCH5A.999
ARESIST(I) = RHOSTAR(I)/RHO_ARESIST(I) SFEXCH5A.1000
RESIST_B(I)= (CD_STD(I)/CH(I) - 1.0) * ARESIST(I) SFEXCH5A.1001
! SFEXCH5A.1002
RHOKM_1(I) = RHOSTAR(I) * CD(I) * VSHR(I) ! P243.124 SFEXCH5A.1003
*IF DEF,SCMA AJC0F405.108
C If OBS run use RHOKH_1 and FACTOR_RHOKH AJC0F405.109
C (from FLUX_H and FLUX_E input by namelist) AJC0F405.110
If (.NOT.OBS) then AJC0F405.111
*ENDIF AJC0F405.112
RHOKH_1(I) = RHOSTAR(I) * CH(I) * VSHR(I) ! P243.125 SFEXCH5A.1004
*IF DEF,SCMA AJC0F405.113
endif AJC0F405.114
*ENDIF AJC0F405.115
RHOKE(I) = RESFT(I) * RHOKH_1(I) SFEXCH5A.1005
C SFEXCH5A.1006
C RHOSTAR * CD * VSHR stored for diagnostic output before SFEXCH5A.1007
C horizontal interpolation. SFEXCH5A.1008
C SFEXCH5A.1009
RHO_CD_MODV1(I) = RHOKM_1(I) SFEXCH5A.1010
SFEXCH5A.1011
SFEXCH5A.1012
ENDDO SFEXCH5A.1013
SFEXCH5A.1014
SFEXCH5A.1015
CALL SF_FLUX
( SFEXCH5A.1016
& P_POINTS,LAND_PTS,LAND_MASK, SFEXCH5A.1017
& P1,LAND_INDEX, SFEXCH5A.1019
& ALPHA1,DQ,DQ_LEAD,DTEMP,DTEMP_LEAD,DZSOIL,HCONS,ICE_FRACT, SFEXCH5A.1021
& LYING_SNOW,QS1,QW_1,RADNET_C,RESFT,RHOKE,RHOKH_1,TI,TL_1,TS1, APA1F405.395
& Z0H,Z0M_EFF,Z1, SFEXCH5A.1023
& ASHTF,E_SEA,EPOT,FQW_1,FTL_1,H_SEA,RHOKPM,RHOKPM_POT, ANG1F405.103
& TSTAR,VFRAC,TIMESTEP,CANCAP, APA1F405.396
& LTIMER) SFEXCH5A.1025
SFEXCH5A.1026
C----------------------------------------------------------------------- SFEXCH5A.1027
CL 4.4.1 Set indicator for unstable suface layer (buoyancy flux +ve.). SFEXCH5A.1028
CL if required by logical L_RMBL SFEXCH5A.1029
C----------------------------------------------------------------------- SFEXCH5A.1030
SFEXCH5A.1031
DO I=1,P_POINTS SFEXCH5A.1032
SFEXCH5A.1033
IF (L_RMBL.AND.BT_1(I)*FTL_1(I)+BQ_1(I)*FQW_1(I).GT.0.0 )THEN SFEXCH5A.1034
NRML(I) = 1 SFEXCH5A.1035
ELSE SFEXCH5A.1036
NRML(I) = 0 SFEXCH5A.1037
ENDIF SFEXCH5A.1038
C----------------------------------------------------------------------- SFEXCH5A.1039
CL 4.5 Multiply surface exchange coefficients that are on the P-grid SFEXCH5A.1040
CL by GAMMA(1).Needed for implicit calculations in P244(IMPL_CAL). SFEXCH5A.1041
CL RHOKM_1 dealt with in section 4.1 below. SFEXCH5A.1042
C----------------------------------------------------------------------- SFEXCH5A.1043
RHOKH_1(I) = RHOKH_1(I) * GAMMA(1) SFEXCH5A.1044
RHOKE(I) = RHOKE(I) * GAMMA(1) SFEXCH5A.1045
C----------------------------------------------------------------------- SFEXCH5A.1046
CL 4.5.1 Calculate the standard deviations of layer 1 turbulent SFEXCH5A.1047
CL fluctuations of temperature and humidity using approximate SFEXCH5A.1048
CL formulae from first order closure. SFEXCH5A.1049
C----------------------------------------------------------------------- SFEXCH5A.1050
VS = SQRT ( RHOKM_1(I)/RHOSTAR(I) * VSHR(I) ) SFEXCH5A.1051
VSF1_CUBED = 1.25 * ( Z1(I) + Z0M(I) ) * G * SFEXCH5A.1052
& ( BT_1(I)*FTL_1(I) + BQ_1(I)*FQW_1(I) ) / RHOSTAR(I) SFEXCH5A.1053
C !--------------------------------------------------------------- SFEXCH5A.1054
C ! Only calculate standard deviations for unstable surface layers SFEXCH5A.1055
C !--------------------------------------------------------------- SFEXCH5A.1056
IF (VSF1_CUBED .GT. 0.0) THEN SFEXCH5A.1057
WS1 = ( VSF1_CUBED + VS * VS * VS ) ** (1.0/3.0) SFEXCH5A.1058
T1_SD(I) = MAX ( 0.0 , 1.93 * FTL_1(I) / (RHOSTAR(I) * WS1) ) SFEXCH5A.1059
Q1_SD(I) = MAX ( 0.0 , 1.93 * FQW_1(I) / (RHOSTAR(I) * WS1) ) SFEXCH5A.1060
ELSE SFEXCH5A.1061
T1_SD(I) = 0.0 SFEXCH5A.1062
Q1_SD(I) = 0.0 SFEXCH5A.1063
ENDIF SFEXCH5A.1064
C----------------------------------------------------------------------- SFEXCH5A.1065
CL 4.6 For sea points, calculate the wind mixing energy flux and the SFEXCH5A.1066
CL sea-surface roughness length on the P-grid, using time-level n SFEXCH5A.1067
CL quantities. SFEXCH5A.1068
C----------------------------------------------------------------------- SFEXCH5A.1069
IF (.NOT.LAND_MASK(I)) THEN SFEXCH5A.1070
TAU = RHOKM_1(I) * VSHR(I) ! P243.130 SFEXCH5A.1071
IF (ICE_FRACT(I) .GT. 0.0) SFEXCH5A.1072
& TAU = RHOSTAR(I) * CD_LEAD(I) * VSHR(I) * VSHR(I) SFEXCH5A.1073
IF (SFME) FME(I) = (1.0-ICE_FRACT(I)) * TAU * SQRT(TAU/RHOSEA) SFEXCH5A.1074
C ! P243.96 SFEXCH5A.1075
Z0MSEA(I) = MAX ( Z0HSEA , SFEXCH5A.1076
& (CHARNOCK/G) * (TAU / RHOSTAR(I)) ) SFEXCH5A.1077
C ... P243.B6 (Charnock formula) SFEXCH5A.1078
C TAU/RHOSTAR is "mod VS squared", see eqn P243.131 SFEXCH5A.1079
C SFEXCH5A.1080
ENDIF ! of IF (.NOT. LAND_MASK), land-points done in next loop. SFEXCH5A.1084
ENDDO ! Loop over points for sections 4.2 - 4.6 SFEXCH5A.1085
DO L=1,LAND_PTS SFEXCH5A.1086
I = LAND_INDEX(L) - (P1-1) SFEXCH5A.1087
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFEXCH5A.1089
CL 4.7 Set Z0MSEA to Z0V, FME to zero for land points. SFEXCH5A.1090
C (Former because UM uses same storage for Z0V SFEXCH5A.1091
C and Z0MSEA.) SFEXCH5A.1092
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFEXCH5A.1093
Z0MSEA(I) = Z0V(I) SFEXCH5A.1094
IF (SFME) FME(I) = 0.0 SFEXCH5A.1095
ENDDO ! Loop over points for section 4.7 SFEXCH5A.1101
C SFEXCH5A.1102
*IF -DEF,SCMA AJC1F405.109
C----------------------------------------------------------------------- SFEXCH5A.1103
CL 5. Calculate "explicit" surface fluxes of momentum (on UV-grid). SFEXCH5A.1104
C----------------------------------------------------------------------- SFEXCH5A.1105
CL 5.1 Interpolate exchange coefficient to UV-grid, then mutiply SFEXCH5A.1106
CL by GAMMA(1) to be passed to subroutine IMPL_CAL (P244) which SFEXCH5A.1107
CL only uses RHOKM_1 when mulitplied by GAMMA(1). SFEXCH5A.1108
C----------------------------------------------------------------------- SFEXCH5A.1109
C SFEXCH5A.1110
C PSIS used purely as spare workspace here. SFEXCH5A.1111
C SFEXCH5A.1112
*IF DEF,MPP SFEXCH5A.1113
! RHOKM_1 contains duff data in halos. The P_TO_UV can interpolate this SFEXCH5A.1114
! into the real data, so first we must update east/west halos SFEXCH5A.1115
CALL SWAPBOUNDS
(RHOKM_1,ROW_LENGTH,U_POINTS/ROW_LENGTH,1,0,1) SFEXCH5A.1116
SFEXCH5A.1117
*ENDIF SFEXCH5A.1118
CALL P_TO_UV
(RHOKM_1,PSIS,P_POINTS,U_POINTS,ROW_LENGTH,P_ROWS) SFEXCH5A.1119
DO I=1,U_POINTS-2*ROW_LENGTH SFEXCH5A.1120
J = I+ROW_LENGTH SFEXCH5A.1121
RHOKM_1(J) = PSIS(I) SFEXCH5A.1122
TAUX_1(J) = RHOKM_1(J) * ( U_1(J) - U_0(J) ) ! P243.132 SFEXCH5A.1123
TAUY_1(J) = RHOKM_1(J) * ( V_1(J) - V_0(J) ) ! P243.133 SFEXCH5A.1124
RHOKM_1(J) = GAMMA(1) * RHOKM_1(J) SFEXCH5A.1125
ENDDO SFEXCH5A.1126
C----------------------------------------------------------------------- SFEXCH5A.1127
CL 5.2 Set first and last rows to "missing data indicator". SFEXCH5A.1128
C----------------------------------------------------------------------- SFEXCH5A.1129
*IF DEF,MPP GPB1F403.51
IF (attop) THEN GPB1F403.52
*ENDIF GPB1F403.53
DO I=1,ROW_LENGTH GPB1F403.54
RHOKM_1(I) = 1.0E30 GPB1F403.55
TAUX_1(I) = 1.0E30 GPB1F403.56
TAUY_1(I) = 1.0E30 GPB1F403.57
ENDDO GPB1F403.58
*IF DEF,MPP GPB1F403.59
ENDIF GPB1F403.60
GPB1F403.61
IF (atbase) THEN GPB1F403.62
*ENDIF GPB1F403.63
DO I= (U_ROWS-1)*ROW_LENGTH + 1 , U_ROWS*ROW_LENGTH GPB1F403.64
RHOKM_1(I) = 1.0E30 GPB1F403.65
TAUX_1(I) = 1.0E30 GPB1F403.66
TAUY_1(I) = 1.0E30 GPB1F403.67
ENDDO GPB1F403.68
*IF DEF,MPP GPB1F403.69
ENDIF GPB1F403.70
*ENDIF GPB1F403.71
C----------------------------------------------------------------------- SFEXCH5A.1139
CL 5.D Interpolate CDR10M to UV-grid. SFEXCH5A.1140
C----------------------------------------------------------------------- SFEXCH5A.1141
*IF DEF,MPP ASJ1F403.21
! CDR10M contains incorrect data in halos. The P_TO_UV can interpolate ASJ1F403.22
! this into the real data, so first we must update east/west halos. ASJ1F403.23
CALL SWAPBOUNDS
(CDR10M,ROW_LENGTH,U_POINTS/ROW_LENGTH,1,0,1) ASJ1F403.24
ASJ1F403.25
*ENDIF ASJ1F403.26
IF (SU10 .OR. SV10) THEN SFEXCH5A.1142
CALL P_TO_UV
(CDR10M,PSIS,P_POINTS,U_POINTS,ROW_LENGTH,P_ROWS) SFEXCH5A.1143
DO I=1,U_POINTS-2*ROW_LENGTH SFEXCH5A.1144
J = I + ROW_LENGTH SFEXCH5A.1145
CDR10M(J) = PSIS(I) SFEXCH5A.1146
ENDDO SFEXCH5A.1147
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFEXCH5A.1148
CL 5.D.1 Set first and last rows to "missing data indicator". SFEXCH5A.1149
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SFEXCH5A.1150
*IF DEF,MPP GPB1F403.72
IF (attop) THEN GPB1F403.73
*ENDIF GPB1F403.74
DO I=1,ROW_LENGTH GPB1F403.75
CDR10M(I) = 1.0E30 GPB1F403.76
ENDDO GPB1F403.77
*IF DEF,MPP GPB1F403.78
ENDIF GPB1F403.79
GPB1F403.80
IF (atbase) THEN GPB1F403.81
*ENDIF GPB1F403.82
DO I= (U_ROWS-1)*ROW_LENGTH + 1 , U_ROWS*ROW_LENGTH GPB1F403.83
CDR10M(I) = 1.0E30 GPB1F403.84
ENDDO GPB1F403.85
*IF DEF,MPP GPB1F403.86
ENDIF GPB1F403.87
*ENDIF GPB1F403.88
ENDIF SFEXCH5A.1156
*ELSE SFEXCH5A.1157
C SFEXCH5A.1158
C----------------------------------------------------------------------- SFEXCH5A.1159
CL 5. Calculate "explicit" surface fluxes of momentum, then overwrite SFEXCH5A.1160
CL coefficient with GAMMA(1)*RHOKM_1 to be passed out for implicit SFEXCH5A.1161
CL calculations in P244 (subroutine IMPL_CAL). This routine only SFEXCH5A.1162
CL uses RHOKM_1 when multiplied by GAMMA(1). SFEXCH5A.1163
C----------------------------------------------------------------------- SFEXCH5A.1164
C SFEXCH5A.1165
DO I=1,U_POINTS SFEXCH5A.1166
TAUX_1(I) = RHOKM_1(I) * ( U_1(I) - U_0(I) ) ! P243.132 SFEXCH5A.1167
TAUY_1(I) = RHOKM_1(I) * ( V_1(I) - V_0(I) ) ! P243.133 SFEXCH5A.1168
RHOKM_1(I) = GAMMA(1) * RHOKM_1(I) SFEXCH5A.1169
ENDDO SFEXCH5A.1170
*ENDIF SFEXCH5A.1171
SFEXCH5A.1172
6 CONTINUE ! Branch for error exit. SFEXCH5A.1173
IF (LTIMER) THEN SFEXCH5A.1174
CALL TIMER
('SFEXCH ',4) SFEXCH5A.1175
ENDIF SFEXCH5A.1176
RETURN SFEXCH5A.1177
END SFEXCH5A.1178
*ENDIF SFEXCH5A.1179