*IF DEF,A13_1C FILTUV1C.2
C ******************************COPYRIGHT****************************** FILTUV1C.3
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. FILTUV1C.4
C FILTUV1C.5
C Use, duplication or disclosure of this code is subject to the FILTUV1C.6
C restrictions as set forth in the contract. FILTUV1C.7
C FILTUV1C.8
C Meteorological Office FILTUV1C.9
C London Road FILTUV1C.10
C BRACKNELL FILTUV1C.11
C Berkshire UK FILTUV1C.12
C RG12 2SZ FILTUV1C.13
C FILTUV1C.14
C If no contract has been raised with this copy of the code, the use, FILTUV1C.15
C duplication or disclosure of it is strictly prohibited. Permission FILTUV1C.16
C to do so must first be obtained in writing from the Head of Numerical FILTUV1C.17
C Modelling at the above address. FILTUV1C.18
C ******************************COPYRIGHT****************************** FILTUV1C.19
C FILTUV1C.20
CLL SUBROUTINE FILT_UV ------------------------------------------ FILTUV1C.21
CLL FILTUV1C.22
CLL PURPOSE: PERFORMS MASS-WEIGHTED FILTERING AND POLAR AVERAGING OF FILTUV1C.23
CLL U AND V FIELDS. FILTUV1C.24
CLL NOT SUITABLE FOR SINGLE COLUMN USE. FILTUV1C.25
CLL FILTUV1C.26
CLL WRITTEN BY M.H MAWSON. FILTUV1C.27
CLL FILTUV1C.28
CLL MODEL MODIFICATION HISTORY: FILTUV1C.29
CLL VERSION DATE FILTUV1C.30
!LL 4.4 11/08/97 New version optimised for T3E. FILTUV1C.31
!LL Not bit-reproducible with FILTUV1A. FILTUV1C.32
CLL 4.4 14/07/97 Simplify calculation of RS*DELTAP for efficiency. FILTUV1C.33
CLL A.Dickinson FILTUV1C.34
CLL FILTUV1C.35
CLL PROGRAMMING STANDARD: FILTUV1C.36
CLL FILTUV1C.37
CLL SYSTEM COMPONENTS COVERED: P142 FILTUV1C.38
CLL SYSTEM TASK: P1 FILTUV1C.39
CLL DOCUMENTATION: SECTION 3.5 FILTUV1C.40
CLL IN UNIFIED MODEL DOCUMENTATION PAPER FILTUV1C.41
CLL NO. 10 M.J.P. CULLEN,T.DAVIES AND M.H.MAWSON FILTUV1C.42
CLL VERSION 8, DATED 10/09/90. FILTUV1C.43
CLLEND------------------------------------------------------------- FILTUV1C.44
FILTUV1C.45
C*L ARGUMENTS:--------------------------------------------------- FILTUV1C.46
SUBROUTINE FILT_UV 1,8FILTUV1C.47
1 (PSTAR,U,V,RS_FUNCTIONS,DELTA_AK,DELTA_BK, FILTUV1C.48
2 P_FIELD,U_FIELD,NORTHERN_FILTERED_P_ROW, FILTUV1C.49
3 SOUTHERN_FILTERED_P_ROW,P_LEVELS, FILTUV1C.50
4 ROW_LENGTH, FILTUV1C.51
*CALL ARGFLDPT
FILTUV1C.52
& TRIGS,IFAX, FILTUV1C.53
4 COS_LONGITUDE,SIN_LONGITUDE, FILTUV1C.54
5 FILTER_WAVE_NUMBER_U_ROWS) FILTUV1C.55
FILTUV1C.56
IMPLICIT NONE FILTUV1C.57
FILTUV1C.58
INTEGER FILTUV1C.59
* U_FIELD !IN DIMENSION OF FIELDS ON VELOCITY GRID FILTUV1C.60
*, P_FIELD !IN DIMENSION OF FIELDS ON PRESSURE GRID FILTUV1C.61
*, P_LEVELS !IN NUMBER OF MODEL LEVELS. FILTUV1C.62
*, ROW_LENGTH !IN NUMBER OF POINTS PER ROW FILTUV1C.63
*, NORTHERN_FILTERED_P_ROW !IN ROW ON WHICH FILTERING STOPS FILTUV1C.64
* ! MOVING TOWARDS EQUATOR. FILTUV1C.65
*, SOUTHERN_FILTERED_P_ROW !IN ROW ON WHICH FILTERING STARTS AGAIN FILTUV1C.66
* ! MOVING TOWARDS SOUTH POLE. FILTUV1C.67
*, IFAX(10) !IN HOLDS FACTORS OF ROW_LENGTH USED BY FILTUV1C.68
* ! FILTERING. FILTUV1C.69
FILTUV1C.70
! All TYPFLDPT arguments are intent IN FILTUV1C.71
*CALL TYPFLDPT
FILTUV1C.72
FILTUV1C.73
INTEGER FILTUV1C.74
& FILTER_WAVE_NUMBER_U_ROWS(GLOBAL_U_FIELD/GLOBAL_ROW_LENGTH) FILTUV1C.75
! LAST WAVE NUMBER NOT TO BE CHOPPED FILTUV1C.76
REAL FILTUV1C.77
* U(U_FIELD,P_LEVELS) !INOUT U VELOCITY FIELD. FILTUV1C.78
*,V(U_FIELD,P_LEVELS) !INOUT V VELOCITY FIELD. FILTUV1C.79
FILTUV1C.80
REAL FILTUV1C.81
* PSTAR(P_FIELD) !IN PSTAR FIELD. FILTUV1C.82
*,RS_FUNCTIONS(P_FIELD,P_LEVELS) !IN RS FILTUV1C.83
*,DELTA_AK(P_LEVELS) !IN LAYER THICKNESS FILTUV1C.84
*,DELTA_BK(P_LEVELS) !IN LAYER THICKNESS FILTUV1C.85
*,TRIGS(ROW_LENGTH) !IN HOLDS TRIGONOMETRIC FUNCTIONS FILTUV1C.86
* ! USED IN FILTERING. FILTUV1C.87
*,COS_LONGITUDE(ROW_LENGTH) !IN COSINE LONGITUDE AT U POINTS FILTUV1C.88
*,SIN_LONGITUDE(ROW_LENGTH) !IN SINE LONGITUDE AT U POINTS FILTUV1C.89
C*--------------------------------------------------------------------- FILTUV1C.90
FILTUV1C.91
C*L DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE----------------- FILTUV1C.92
C DEFINE LOCAL ARRAYS: 1 IS REQUIRED FILTUV1C.93
REAL FILTUV1C.94
* WORK(P_FIELD) ! GENERAL WORKSPACE. FILTUV1C.95
FILTUV1C.96
C*--------------------------------------------------------------------- FILTUV1C.97
C DEFINE LOCAL VARIABLES FILTUV1C.98
FILTUV1C.99
C REAL SCALARS FILTUV1C.100
REAL FILTUV1C.101
* SCALAR3 FILTUV1C.102
FILTUV1C.103
C COUNT VARIABLES FOR DO LOOPS ETC. FILTUV1C.104
INTEGER FILTUV1C.105
* I,K FILTUV1C.106
*, NORTHERN_FILTERED_U_ROW ! U ROW ON WHICH FILTERING STOPS FILTUV1C.107
*, SOUTHERN_FILTERED_U_ROW ! U ROW ON WHICH FILTERING STARTS AGAIN FILTUV1C.108
*, FILTER_SPACE ! HORIZONTAL DIMENSION OF SPACE NEEDED IN FILTERING FILTUV1C.109
* ! ROUTINE. FILTUV1C.110
FILTUV1C.111
C*L EXTERNAL SUBROUTINE CALLS:--------------------------------------- FILTUV1C.112
EXTERNAL FILTUV1C.113
* P_TO_UV,FILTER,POLAR_UV FILTUV1C.114
C*--------------------------------------------------------------------- FILTUV1C.115
CL MAXIMUM VECTOR LENGTH ASSUMED IS P_FIELD FILTUV1C.116
CL--------------------------------------------------------------------- FILTUV1C.117
CL INTERNAL STRUCTURE. FILTUV1C.118
CL--------------------------------------------------------------------- FILTUV1C.119
CL FILTUV1C.120
CL--------------------------------------------------------------------- FILTUV1C.121
CL SECTION 1. MASS-WEIGHT U AND V FIELDS. FILTUV1C.122
CL--------------------------------------------------------------------- FILTUV1C.123
FILTUV1C.124
! QAN fix : blank out WORK array so halos don't contain junk FILTUV1C.125
DO I=1,P_FIELD FILTUV1C.126
WORK(I)=0.0 FILTUV1C.127
ENDDO FILTUV1C.128
FILTUV1C.129
CL LOOP OVER P_LEVELS. FILTUV1C.130
FILTUV1C.131
DO 100 K=1,P_LEVELS FILTUV1C.132
FILTUV1C.133
CL CALCULATE RS*DELTA P FILTUV1C.134
DO I=FIRST_VALID_PT,LAST_P_VALID_PT FILTUV1C.135
WORK(I) = RS_FUNCTIONS(I,K) FILTUV1C.136
& * (DELTA_AK(K) + DELTA_BK(K)*PSTAR(I)) FILTUV1C.137
END DO FILTUV1C.138
FILTUV1C.139
FILTUV1C.140
CL CALL P_TO_UV TO TRANSFER RS*DELTA P TO U GRID. FILTUV1C.141
FILTUV1C.142
CALL P_TO_UV
(WORK,RS_FUNCTIONS(1,K),P_FIELD,U_FIELD,ROW_LENGTH, FILTUV1C.143
& tot_P_ROWS) FILTUV1C.144
FILTUV1C.145
CL MASS WEIGHT U AND V FIELDS. FILTUV1C.146
FILTUV1C.147
DO 120 I=FIRST_VALID_PT,LAST_U_VALID_PT FILTUV1C.148
U(I,K) = U(I,K) * RS_FUNCTIONS(I,K) FILTUV1C.149
V(I,K) = V(I,K) * RS_FUNCTIONS(I,K) FILTUV1C.150
120 CONTINUE FILTUV1C.151
FILTUV1C.152
CL END LOOP OVER P_LEVELS. FILTUV1C.153
100 CONTINUE FILTUV1C.154
FILTUV1C.155
CL FILTUV1C.156
CL--------------------------------------------------------------------- FILTUV1C.157
CL SECTION 2. CALL FILTER TO FILTER FIELDS. FILTUV1C.158
CL--------------------------------------------------------------------- FILTUV1C.159
FILTUV1C.160
C SET NORTHERN AND SOUTHERN ROWS FOR U FILTERING. FILTUV1C.161
FILTUV1C.162
NORTHERN_FILTERED_U_ROW = NORTHERN_FILTERED_P_ROW FILTUV1C.163
SOUTHERN_FILTERED_U_ROW = SOUTHERN_FILTERED_P_ROW - 1 FILTUV1C.164
FILTUV1C.165
C SET FILTER_SPACE WHICH IS ROW_LENGTH+2 TIMES THE NUMBER OF ROWS TO FILTUV1C.166
C BE FILTERED. FILTUV1C.167
FILTUV1C.168
FILTER_SPACE = (ROW_LENGTH+2)*(NORTHERN_FILTERED_U_ROW-1+ FILTUV1C.169
* U_FIELD/ROW_LENGTH-SOUTHERN_FILTERED_U_ROW) FILTUV1C.170
FILTUV1C.171
CL CALL FILTER FOR U FILTUV1C.172
FILTUV1C.173
CALL FILTER
(U,U_FIELD,P_LEVELS,FILTER_SPACE,ROW_LENGTH, FILTUV1C.174
*CALL ARGFLDPT
FILTUV1C.175
* FILTER_WAVE_NUMBER_U_ROWS,TRIGS,IFAX, FILTUV1C.176
* NORTHERN_FILTERED_U_ROW,SOUTHERN_FILTERED_U_ROW) FILTUV1C.177
FILTUV1C.178
CL CALL FILTER FOR V FILTUV1C.179
FILTUV1C.180
CALL FILTER
(V,U_FIELD,P_LEVELS,FILTER_SPACE,ROW_LENGTH, FILTUV1C.181
*CALL ARGFLDPT
FILTUV1C.182
* FILTER_WAVE_NUMBER_U_ROWS,TRIGS,IFAX, FILTUV1C.183
* NORTHERN_FILTERED_U_ROW,SOUTHERN_FILTERED_U_ROW) FILTUV1C.184
FILTUV1C.185
CL FILTUV1C.186
CL--------------------------------------------------------------------- FILTUV1C.187
CL SECTION 3. REMOVE MASS-WEIGHTING FROM U AND V. FILTUV1C.188
CL--------------------------------------------------------------------- FILTUV1C.189
FILTUV1C.190
FILTUV1C.191
! CALL POLAR_UV TO UPDATE THE POLAR VALUES OF MASS-WEIGHTED U AND V FILTUV1C.192
FILTUV1C.193
CALL POLAR_UV
(U,V,ROW_LENGTH,U_FIELD,P_LEVELS, FILTUV1C.194
*CALL ARGFLDPT
FILTUV1C.195
& COS_LONGITUDE,SIN_LONGITUDE) FILTUV1C.196
CL LOOP OVER P_LEVELS. FILTUV1C.197
FILTUV1C.198
DO 300 K=1,P_LEVELS FILTUV1C.199
FILTUV1C.200
FILTUV1C.201
CL REMOVE MASS-WEIGHTING. FILTUV1C.202
FILTUV1C.203
CFPP$ SELECT(CONCUR) FILTUV1C.204
DO 310 I=FIRST_VALID_PT,LAST_U_VALID_PT FILTUV1C.205
SCALAR3 = 1./RS_FUNCTIONS(I,K) FILTUV1C.206
U(I,K) = U(I,K) * SCALAR3 FILTUV1C.207
V(I,K) = V(I,K) * SCALAR3 FILTUV1C.208
310 CONTINUE FILTUV1C.209
FILTUV1C.210
CL END LOOP OVER P_LEVELS FILTUV1C.211
FILTUV1C.212
300 CONTINUE FILTUV1C.213
FILTUV1C.214
CL END OF ROUTINE FILT_UV FILTUV1C.215
FILTUV1C.216
RETURN FILTUV1C.217
END FILTUV1C.218
*ENDIF FILTUV1C.219