*IF DEF,A03_2C ASJ1F304.330
C ******************************COPYRIGHT****************************** GTS2F400.8857
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.8858
C GTS2F400.8859
C Use, duplication or disclosure of this code is subject to the GTS2F400.8860
C restrictions as set forth in the contract. GTS2F400.8861
C GTS2F400.8862
C Meteorological Office GTS2F400.8863
C London Road GTS2F400.8864
C BRACKNELL GTS2F400.8865
C Berkshire UK GTS2F400.8866
C RG12 2SZ GTS2F400.8867
C GTS2F400.8868
C If no contract has been raised with this copy of the code, the use, GTS2F400.8869
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.8870
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.8871
C Modelling at the above address. GTS2F400.8872
C ******************************COPYRIGHT****************************** GTS2F400.8873
C GTS2F400.8874
CLL SUBROUTINE SFL_INT------------------------------------------------ SFLINT1B.3
CLL SFLINT1B.4
CLL Purpose: To calculate interpolation coefficients for 10m winds SFLINT1B.5
CLL and 1.5m temperature/specific humidity diagnostics SFLINT1B.6
CLL using a generalisation of the method of Geleyn (1988). SFLINT1B.7
CLL SFLINT1B.8
CLL Suitable for single column use (via *IF definition IBM). SFLINT1B.9
CLL SFLINT1B.10
CLL Model Modification history: SFLINT1B.11
CLL version Date SFLINT1B.12
CLL SFLINT1B.13
CLL 3.1 10/92 First version by Simon Jackson SFLINT1B.14
CLL 3.2 7/93 Correction to TIMER calls. S Jackson SJ190793.1
CLL 3.4 6/94 DEF TIMER replaced by LOGICAL LTIMER ASJ1F304.331
CLL Argument LTIMER added ASJ1F304.332
CLL S.J.Swarbrick ASJ1F304.333
CLL 4.2 Oct. 96 T3E migration - *DEF CRAY removed GSS2F402.305
CLL S J Swarbrick GSS2F402.306
CLL SFLINT1B.15
CLL Programming standard: Unified Model Documentation Paper No 4, SFLINT1B.16
CLL Version 2, dated 18/1/90. SFLINT1B.17
CLL SFLINT1B.18
CLL Logical component covered: Part of P243. SFLINT1B.19
CLL SFLINT1B.20
CLL System Task: SFLINT1B.21
CLL SFLINT1B.22
CLL External Documentation: UMDP No.24 SFLINT1B.23
CLL SFLINT1B.24
CLL--------------------------------------------------------------------- SFLINT1B.25
C*L Arguments :- SFLINT1B.26
SUBROUTINE SFL_INT ( 3,8SFLINT1B.27
+ P_POINTS,U_POINTS,RIB,Z1,Z0M,Z0H,Z0F,CD,CH,CDR10M,CHR1P5M SFLINT1B.28
+,CER1P5M,RESFT SFLINT1B.29
+,SU10,SV10,ST1P5,SQ1P5,LTIMER ASJ1F304.334
+) SFLINT1B.31
IMPLICIT NONE SFLINT1B.32
INTEGER SFLINT1B.33
+ P_POINTS ! IN No. of P-grid points to be processed. SFLINT1B.34
+,U_POINTS ! IN No. of UV-grid points to be processed. SFLINT1B.35
REAL SFLINT1B.36
+ RIB(P_POINTS) ! IN Bulk Richardson number for SFLINT1B.37
C ! lowest layer. SFLINT1B.38
+,Z1(P_POINTS) ! IN Height of lowest model level (m). SFLINT1B.39
+,Z0M(P_POINTS) ! IN Roughness length for momentum (m). SFLINT1B.40
+,Z0H(P_POINTS) ! IN Roughness length for heat and SFLINT1B.41
C ! moisture (m). SFLINT1B.42
+,Z0F(P_POINTS) ! IN Roughness length in the free SFLINT1B.43
C ! convective limit (m). SFLINT1B.44
+,CD(P_POINTS) ! IN Drag coefficient for momentum. SFLINT1B.45
+,CH(P_POINTS) ! IN Drag coefficient for heat and SFLINT1B.46
C ! moisture. SFLINT1B.47
+,RESFT(P_POINTS) ! IN Total resistance factor for moisture SFLINT1B.48
C ! transfer from the surface. SFLINT1B.49
LOGICAL SFLINT1B.50
+ SU10 ! IN 10m U-wind diagnostic flag SFLINT1B.51
+,SV10 ! IN 10m V-wind diagnostic flag SFLINT1B.52
+,ST1P5 ! IN screen temp diagnostic flag SFLINT1B.53
+,SQ1P5 ! IN screen specific humidity SFLINT1B.54
C ! diagnostic flag SFLINT1B.55
+,LTIMER ! IN TIMER flag ASJ1F304.335
C Output variables SFLINT1B.56
C SFLINT1B.57
REAL SFLINT1B.58
+ CDR10M(U_POINTS) ! OUT interpolation coefficicent for 10m wind SFLINT1B.59
+,CHR1P5M(P_POINTS) ! OUT Interpolation coefficient for 1.5m SFLINT1B.60
C ! temperature SFLINT1B.61
+,CER1P5M(P_POINTS) ! OUT Interpolation coefficient for 1.5m SFLINT1B.62
C ! specific humidity SFLINT1B.63
C* SFLINT1B.64
C*L--------------------------------------------------------------------- SFLINT1B.65
EXTERNAL TIMER SFLINT1B.67
C*L--------------------------------------------------------------------- SFLINT1B.72
C Local and other symbolic constants :- SFLINT1B.73
*CALL C_VKMAN
SFLINT1B.74
REAL Z1P5M,Z10M SFLINT1B.75
PARAMETER ( SFLINT1B.76
+ Z1P5M = 1.5 ! for diagnosis of screen values of temperature SFLINT1B.77
C ! and humidity (assumed to be at 1.5m). SFLINT1B.78
+,Z10M = 10.0 ! for diagnosis of 10m winds. SFLINT1B.79
+) SFLINT1B.80
C SFLINT1B.81
C Define local storage. SFLINT1B.82
C SFLINT1B.83
C (a) Local work arrays. SFLINT1B.84
C SFLINT1B.85
REAL SFLINT1B.87
+ Z1E(P_POINTS) ! Level 1 height + Z0M SFLINT1B.88
+,SQRTCD(P_POINTS) ! Square root of CD SFLINT1B.89
C SFLINT1B.96
C (b) Scalars. SFLINT1B.97
C SFLINT1B.98
REAL SFLINT1B.99
+ Z1S ! Level 1 height + Z0M - Z0H SFLINT1B.100
+,Z1P5ME ! 1.5m + Z0M (screen height + envelope height) SFLINT1B.101
+,Z10ME ! 10m + Z0M SFLINT1B.102
+,SQRTCD_K ! Temporary storage in calc of 1.5 amd 10m diags SFLINT1B.103
+,Z_OVER_Z1 ! Temporary storage in calc of 1.5 amd 10m diags SFLINT1B.104
+,CDNZ ! Neutral drag coef. for momentum @ 10m SFLINT1B.105
+,CDNZ1 ! Neutral drag coef. for momentum @ level1 SFLINT1B.106
+,CHNZ ! Neutral drag coef. for heat/moisture @ 1.5m SFLINT1B.107
+,CHNZ1 ! Neutral drag coef. for heat/moisture @ level1 SFLINT1B.108
+,CDTEMP ! workspace in calc of interpolation coeffs. SFLINT1B.109
SFLINT1B.110
INTEGER SFLINT1B.111
+ I ! Loop counter (horizontal field index). SFLINT1B.112
C* SFLINT1B.113
IF (LTIMER) THEN ASJ1F304.336
CALL TIMER
('SFLINT ',3) SJ190793.2
ENDIF ASJ1F304.337
C SFLINT1B.117
C----------------------------------------------------------------------- SFLINT1B.118
CL 1. This routine uses a generalised formulation of Geleyn (1988) SFLINT1B.119
CL to interpolate to screen and 10m height using surface and bottom SFLINT1B.120
CL level values as well as roughness lengths for heat and momentum. SFLINT1B.121
CL Start of main loop. Set up variables needed later (eg height of SFLINT1B.122
CL envelope orography). SFLINT1B.123
C----------------------------------------------------------------------- SFLINT1B.124
SFLINT1B.125
DO I=1,P_POINTS SFLINT1B.126
SQRTCD(I) = SQRT(CD(I)) SFLINT1B.127
Z1E(I) = Z1(I) + Z0M(I) SFLINT1B.128
ENDDO SFLINT1B.129
SFLINT1B.130
C----------------------------------------------------------------------- SFLINT1B.131
CL 2. If selected calculate interpolation coefficient for 10m winds. SFLINT1B.132
C----------------------------------------------------------------------- SFLINT1B.133
C SFLINT1B.134
IF(SU10.OR.SV10) THEN SFLINT1B.135
DO I=1,P_POINTS SFLINT1B.136
Z10ME = Z10M + Z0M(I) SFLINT1B.137
CDNZ = LOG( Z10ME / Z0M(I) ) SFLINT1B.138
CDNZ1 = LOG( Z1E(I) / Z0M(I) ) SFLINT1B.139
SQRTCD_K = SQRTCD(I) / VKMAN SFLINT1B.140
Z_OVER_Z1 = Z10M / Z1(I) SFLINT1B.141
SFLINT1B.142
IF (RIB(I).GE.0.0) THEN SFLINT1B.143
CDR10M(I) = Z_OVER_Z1 + SQRTCD_K * SFLINT1B.144
+ (CDNZ - Z_OVER_Z1*CDNZ1) SFLINT1B.145
ELSE SFLINT1B.146
CDTEMP = ( Z10M * Z1E(I) + Z0M(I) * (Z1(I)-Z10M) SFLINT1B.147
+ * EXP (1.0/SQRTCD_K) ) / (Z1(I) * Z10ME) SFLINT1B.148
CDR10M(I) = 1 - SQRTCD_K * LOG (CDTEMP) SFLINT1B.149
ENDIF SFLINT1B.150
ENDDO SFLINT1B.151
ENDIF SFLINT1B.152
C SFLINT1B.153
C----------------------------------------------------------------------- SFLINT1B.154
CL 3. If selected calculate interpolation coefficient for 1.5m screen SFLINT1B.155
CL temperature and specific humidity. SFLINT1B.156
C----------------------------------------------------------------------- SFLINT1B.157
C SFLINT1B.158
IF (ST1P5.OR.SQ1P5) THEN SFLINT1B.159
DO I=1,P_POINTS SFLINT1B.160
C SFLINT1B.161
C variables to be used later SFLINT1B.162
Z1S = Z1E(I) - Z0H(I) SFLINT1B.163
Z1P5ME = Z1P5M + Z0H(I) SFLINT1B.164
CHNZ = LOG( Z1P5ME / Z0H(I) ) SFLINT1B.165
CHNZ1 = LOG( Z1E(I) / Z0H(I) ) SFLINT1B.166
SQRTCD_K = CH(I) / (SQRTCD(I) * VKMAN) SFLINT1B.167
Z_OVER_Z1 = Z1P5M / Z1S SFLINT1B.168
SFLINT1B.169
C SFLINT1B.170
C Stable case SFLINT1B.171
IF (RIB(I).GE.0.0) THEN SFLINT1B.172
CHR1P5M(I) = Z_OVER_Z1 + SQRTCD_K * SFLINT1B.173
+ (CHNZ - Z_OVER_Z1 * CHNZ1) SFLINT1B.174
ELSE SFLINT1B.175
C SFLINT1B.176
C Unstable Case SFLINT1B.177
CDTEMP = ( Z1P5M * Z1E(I) + Z0H(I) * (Z1E(I)-Z1P5ME) * SFLINT1B.178
+ EXP (1.0 / SQRTCD_K) ) / (Z1S * Z1P5ME) SFLINT1B.179
CHR1P5M(I) = 1 - SQRTCD_K * LOG (CDTEMP) SFLINT1B.180
ENDIF SFLINT1B.181
SFLINT1B.182
C SFLINT1B.183
CER1P5M(I) = ( CHR1P5M(I) - 1.0 ) * RESFT(I) ! P243.123 SFLINT1B.184
ENDDO SFLINT1B.185
ENDIF SFLINT1B.186
C SFLINT1B.187
IF (LTIMER) THEN ASJ1F304.338
CALL TIMER
('SFLINT ',4) SJ190793.3
ENDIF ASJ1F304.339
RETURN SFLINT1B.191
END SFLINT1B.192
*ENDIF SFLINT1B.420