*IF DEF,A03_6A SFLINT6A.2
C ******************************COPYRIGHT****************************** SFLINT6A.3
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. SFLINT6A.4
C SFLINT6A.5
C Use, duplication or disclosure of this code is subject to the SFLINT6A.6
C restrictions as set forth in the contract. SFLINT6A.7
C SFLINT6A.8
C Meteorological Office SFLINT6A.9
C London Road SFLINT6A.10
C BRACKNELL SFLINT6A.11
C Berkshire UK SFLINT6A.12
C RG12 2SZ SFLINT6A.13
C SFLINT6A.14
C If no contract has been raised with this copy of the code, the use, SFLINT6A.15
C duplication or disclosure of it is strictly prohibited. Permission SFLINT6A.16
C to do so must first be obtained in writing from the Head of Numerical SFLINT6A.17
C Modelling at the above address. SFLINT6A.18
C ******************************COPYRIGHT****************************** SFLINT6A.19
C SFLINT6A.20
!!! SUBROUTINE SFL_INT------------------------------------------------ SFLINT6A.21
!!! SFLINT6A.22
!!! Purpose: To calculate interpolation coefficients for 10m winds SFLINT6A.23
!!! and 1.5m temperature/specific humidity diagnostics. SFLINT6A.24
!!! SFLINT6A.25
!!! Suitable for single column use (via *IF definition IBM). SFLINT6A.26
!!! SFLINT6A.27
!!! Model Modification history: SFLINT6A.28
!!! version Date SFLINT6A.29
!!! SFLINT6A.30
!!! 4.4 09/05/97 New exact formulation based on Monin-Obukhov SFLINT6A.31
!!! stability functions. SFLINT6A.32
!!! R.N.B.Smith SFLINT6A.33
!!! SFLINT6A.34
!!! Programming standard: SFLINT6A.35
!!! SFLINT6A.36
!!! Logical component covered: Part of P243. SFLINT6A.37
!!! SFLINT6A.38
!!! System Task: SFLINT6A.39
!!! SFLINT6A.40
!!! External Documentation: UMDP No.24 SFLINT6A.41
!!! SFLINT6A.42
!!!--------------------------------------------------------------------- SFLINT6A.43
!*L Arguments :- SFLINT6A.44
SUBROUTINE SFL_INT ( 3,8SFLINT6A.45
& P_POINTS,P_FIELD,P1 SFLINT6A.46
&,Z0M,Z0H,CD,CH SFLINT6A.47
&,Z0M_STD,CD_STD ARN0F405.1828
&,RESFT,RECIP_L_MO,V_S,V_S_STD SFLINT6A.48
&,CDR10M,CHR1P5M,CER1P5M SFLINT6A.49
+,SU10,SV10,ST1P5,SQ1P5,LTIMER SFLINT6A.50
+) SFLINT6A.51
IMPLICIT NONE SFLINT6A.52
SFLINT6A.53
INTEGER SFLINT6A.54
& P_POINTS ! IN No. of P-grid points to be processed. SFLINT6A.55
&,P_FIELD ! IN Total No. of P-grid points. SFLINT6A.56
&,P1 ! IN First P-grid point to be processed. SFLINT6A.57
SFLINT6A.58
REAL SFLINT6A.59
+ Z0M(P_FIELD) ! IN Roughness length for momentum (m). SFLINT6A.60
+,Z0H(P_FIELD) ! IN Roughness length for heat and SFLINT6A.61
! ! moisture (m). SFLINT6A.62
&,Z0M_STD(P_FIELD) ! IN Roughness length for momentum without ARN0F405.1829
! ! orographic component (m). ARN0F405.1830
&,CD(P_FIELD) ! IN Surface drag coefficient. SFLINT6A.63
&,CH(P_FIELD) ! IN Surface transfer coefficient for heat and SFLINT6A.64
! ! moisture. SFLINT6A.65
&,CD_STD(P_FIELD) ! IN Surface drag coefficient excluding ARN0F405.1831
! ! orographic from drag. ARN0F405.1832
+,RESFT(P_FIELD) ! IN Total resistance factor for moisture SFLINT6A.66
! ! transfer from the surface. SFLINT6A.67
&,RECIP_L_MO(P_FIELD) SFLINT6A.68
! ! IN Reciprocal of the Monin-Obukhov length (m) SFLINT6A.69
&,V_S(P_FIELD) ! IN Surface layer scaling velocity including SFLINT6A.70
! ! orographic form drag (m/s). SFLINT6A.71
&,V_S_STD(P_FIELD) ! IN Surface layer scaling velocity excluding SFLINT6A.72
! ! orographic form drag (m/s). SFLINT6A.73
SFLINT6A.74
LOGICAL SFLINT6A.75
+ SU10 ! IN 10m U-wind diagnostic flag SFLINT6A.76
+,SV10 ! IN 10m V-wind diagnostic flag SFLINT6A.77
+,ST1P5 ! IN screen temp diagnostic flag SFLINT6A.78
+,SQ1P5 ! IN screen specific humidity SFLINT6A.79
! ! diagnostic flag SFLINT6A.80
+,LTIMER ! IN TIMER diagnostics flag SFLINT6A.81
! Output variables SFLINT6A.82
! SFLINT6A.83
REAL SFLINT6A.84
+ CDR10M(P_FIELD) ! OUT interpolation coefficicent for 10m wind SFLINT6A.85
+,CHR1P5M(P_FIELD) ! OUT Interpolation coefficient for 1.5m SFLINT6A.86
! ! temperature SFLINT6A.87
+,CER1P5M(P_FIELD) ! OUT Interpolation coefficient for 1.5m SFLINT6A.88
! ! specific humidity SFLINT6A.89
!* SFLINT6A.90
!*L--------------------------------------------------------------------- SFLINT6A.91
EXTERNAL TIMER , PHI_M_H SFLINT6A.92
!* SFLINT6A.93
!*L--------------------------------------------------------------------- SFLINT6A.94
! Local and other symbolic constants :- SFLINT6A.95
*CALL C_VKMAN
SFLINT6A.96
REAL Z_OBS_TQ,Z_OBS_WIND SFLINT6A.97
PARAMETER ( SFLINT6A.98
+ Z_OBS_TQ = 1.5 ! Height of screen observations of temperature SFLINT6A.99
! ! and humidity. SFLINT6A.100
+,Z_OBS_WIND = 10.0 ! Height of surface wind observations. SFLINT6A.101
+) SFLINT6A.102
LOGICAL EFF_INT ARN0F405.1833
PARAMETER (EFF_INT = .FALSE.) ARN0F405.1834
! SFLINT6A.103
! Define local storage. SFLINT6A.104
! SFLINT6A.105
! (a) Local work arrays. SFLINT6A.106
! SFLINT6A.107
REAL SFLINT6A.108
& Z_WIND(P_FIELD) ! Height of wind observations. SFLINT6A.109
&,Z_TEMP(P_FIELD) ! Height of temperature and humidity SFLINT6A.110
! ! observations. SFLINT6A.111
&,PHI_M_OBS(P_FIELD) ! Monin-Obukhov stability function for SFLINT6A.112
! ! momentum integrated to the wind observation SFLINT6A.113
! ! height. SFLINT6A.114
&,PHI_H_OBS(P_FIELD) ! Monin-Obukhov stability function for SFLINT6A.115
! ! scalars integrated to their observation SFLINT6A.116
! ! height. SFLINT6A.117
LOGICAL SFLINT6A.118
& L_D_ARRAY(P_FIELD) SFLINT6A.119
! SFLINT6A.120
! (b) Scalars. SFLINT6A.121
! SFLINT6A.122
INTEGER SFLINT6A.123
+ I ! Loop counter (horizontal field index). SFLINT6A.124
LOGICAL SFLINT6A.125
& L_DUMMY SFLINT6A.126
!* SFLINT6A.127
IF (LTIMER) THEN SFLINT6A.128
CALL TIMER
('SFL_INT ',3) SFLINT6A.129
ENDIF SFLINT6A.130
! SFLINT6A.131
!----------------------------------------------------------------------- SFLINT6A.132
!! 1. If diagnostics required calculate M-O stability functions at SFLINT6A.133
!! observation heights. SFLINT6A.134
!----------------------------------------------------------------------- SFLINT6A.135
SFLINT6A.136
IF (SU10 .OR. SV10 .OR. ST1P5 .OR. SQ1P5) THEN SFLINT6A.137
L_DUMMY = .FALSE. SFLINT6A.138
DO I=P1,P1+P_POINTS-1 SFLINT6A.139
Z_WIND(I) = Z_OBS_WIND SFLINT6A.140
Z_TEMP(I) = Z_OBS_TQ SFLINT6A.141
L_D_ARRAY(I) = .TRUE. SFLINT6A.142
ENDDO SFLINT6A.143
CALL PHI_M_H
(P_POINTS,P_FIELD,P1,L_DUMMY,L_D_ARRAY, SFLINT6A.144
& RECIP_L_MO,Z_WIND,Z_TEMP,Z0M,Z0H, SFLINT6A.145
& PHI_M_OBS,PHI_H_OBS,LTIMER) SFLINT6A.146
ENDIF SFLINT6A.147
SFLINT6A.148
!----------------------------------------------------------------------- SFLINT6A.149
!! 2. If diagnostics required calculate interpolation coefficient SFLINT6A.150
!! for 1.5m screen temperature and specific humidity. ARN0F405.1835
!----------------------------------------------------------------------- SFLINT6A.152
! SFLINT6A.153
IF (ST1P5 .OR. SQ1P5) THEN ARN0F405.1836
DO I=P1,P1+P_POINTS-1 SFLINT6A.155
CHR1P5M(I) = CH(I) * PHI_H_OBS(I)/(VKMAN*V_S_STD(I)) ARN0F405.1837
CER1P5M(I) = ( CHR1P5M(I) - 1.0 ) * RESFT(I) ARN0F405.1838
ENDDO SFLINT6A.157
ENDIF SFLINT6A.158
! SFLINT6A.159
!----------------------------------------------------------------------- SFLINT6A.160
!! 3. If diagnostics required calculate interpolation coefficient SFLINT6A.161
!! for 10m winds. ARN0F405.1839
!----------------------------------------------------------------------- SFLINT6A.163
! SFLINT6A.164
IF ( (SU10 .OR. SV10) .AND. EFF_INT ) THEN ARN0F405.1840
DO I=P1,P1+P_POINTS-1 SFLINT6A.166
CDR10M(I) = CD(I) * PHI_M_OBS(I)/(VKMAN*V_S(I)) ARN0F405.1841
ENDDO ARN0F405.1842
ELSEIF ( (SU10 .OR. SV10) .AND. .NOT.EFF_INT ) THEN ARN0F405.1843
CALL PHI_M_H
(P_POINTS,P_FIELD,P1,L_DUMMY,L_D_ARRAY, ARN0F405.1844
& RECIP_L_MO,Z_WIND,Z_TEMP,Z0M_STD,Z0H, ARN0F405.1845
& PHI_M_OBS,PHI_H_OBS,LTIMER) ARN0F405.1846
DO I=P1,P1+P_POINTS-1 ARN0F405.1847
CDR10M(I) = CD_STD(I) * PHI_M_OBS(I)/(VKMAN*V_S_STD(I)) ARN0F405.1848
ENDDO SFLINT6A.169
ENDIF SFLINT6A.170
! SFLINT6A.171
IF (LTIMER) THEN SFLINT6A.172
CALL TIMER
('SFL_INT ',4) SFLINT6A.173
ENDIF SFLINT6A.174
RETURN SFLINT6A.175
END SFLINT6A.176
*ENDIF SFLINT6A.177