*IF DEF,A13_1C COFTHQ1C.2
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. COFTHQ1C.3
C COFTHQ1C.4
C Use, duplication or disclosure of this code is subject to the COFTHQ1C.5
C restrictions as set forth in the contract. COFTHQ1C.6
C COFTHQ1C.7
C Meteorological Office COFTHQ1C.8
C London Road COFTHQ1C.9
C BRACKNELL COFTHQ1C.10
C Berkshire UK COFTHQ1C.11
C RG12 2SZ COFTHQ1C.12
C COFTHQ1C.13
C If no contract has been raised with this copy of the code, the use, COFTHQ1C.14
C duplication or disclosure of it is strictly prohibited. Permission COFTHQ1C.15
C to do so must first be obtained in writing from the Head of Numerical COFTHQ1C.16
C Modelling at the above address. COFTHQ1C.17
C ******************************COPYRIGHT****************************** COFTHQ1C.18
C COFTHQ1C.19
CLL SUBROUTINE COEFF_TH_Q ----------------------------------------- COFTHQ1C.20
CLL COFTHQ1C.21
CLL PURPOSE: CALCULATES EFFECTIVE DIFFUSION COEFFICIENTS COFTHQ1C.22
CLL FOR THETAL OR Q IN NS AND EW DIRECTIONS COFTHQ1C.23
CLL IF STEEP SLOPE THEN EFFECTIVE DIFFUSION IS ZERO. COFTHQ1C.24
CLL COFTHQ1C.25
CLL NOTE PRESSURE ARRAY NEEDS TO BE GLOBAL (SHARED) COFTHQ1C.26
CLL FOR MULTI-TASKING AT 3.4 UPWARDS. COFTHQ1C.27
CLL COFTHQ1C.28
CLL NOT SUITABLE FOR SINGLE COLUMN USE. COFTHQ1C.29
CLL COFTHQ1C.30
CLL WAS VERSION FOR CRAY Y-MP COFTHQ1C.31
CLL COFTHQ1C.32
CLL MODEL MODIFICATION HISTORY COFTHQ1C.33
CLL VERSION DATE COFTHQ1C.34
!LL 4.4 11/08/97 New version optimised for T3E. COFTHQ1C.35
!LL Not bit-reproducible with COFTHQ1A. COFTHQ1C.36
CLL 4.4 25/07/97 Calling sequence changed from once per level COFTHQ1C.37
CLL to once per dynamics sweep, in COFTHQ1C.38
CLL order to improve MPP scalability. COFTHQ1C.39
CLL A. Dickinson COFTHQ1C.40
CLL COFTHQ1C.41
CLL COFTHQ1C.42
CLL PROGRAMMING STANDARD: COFTHQ1C.43
CLL COFTHQ1C.44
CLL SYSTEM COMPONENTS COVERED: P131 COFTHQ1C.45
CLL COFTHQ1C.46
CLL SYSTEM TASK: P1 COFTHQ1C.47
CLL COFTHQ1C.48
CLL DOCUMENTATION: THE EQUATION USED IS (47) COFTHQ1C.49
CLL IN UNIFIED MODEL DOCUMENTATION PAPER COFTHQ1C.50
CLL NO. 10 M.J.P. CULLEN,T.DAVIES AND M.H.MAWSON COFTHQ1C.51
CLL VERSION 16, DATED 09/01/91. COFTHQ1C.52
CLLEND------------------------------------------------------------- COFTHQ1C.53
COFTHQ1C.54
C*L ARGUMENTS:--------------------------------------------------- COFTHQ1C.55
SUBROUTINE COEFF_TH_Q 4,2COFTHQ1C.56
1 (DIFFUSION_EW,DIFFUSION_NS, COFTHQ1C.57
2 PRESSURE,LEVEL_BASE,PRESSURE_TEST,AK,BK, COFTHQ1C.58
3 COS_U_LATITUDE,ROW_LENGTH, COFTHQ1C.59
*CALL ARGFLDPT
COFTHQ1C.60
5 LATITUDE_STEP_INVERSE,LONGITUDE_STEP_INVERSE, COFTHQ1C.61
6 P_FIELD,U_FIELD,P_LEVELS, COFTHQ1C.62
7 KD,DELTA_AK,DELTA_BK,PSTAR_UV,COS_FUNCTION_U) COFTHQ1C.63
COFTHQ1C.64
IMPLICIT NONE COFTHQ1C.65
COFTHQ1C.66
INTEGER COFTHQ1C.67
* U_FIELD !IN DIMENSION OF FIELDS ON VELOCITY GRID COFTHQ1C.68
*, P_FIELD !IN DIMENSION OF FIELDS ON PRESSURE GRID COFTHQ1C.69
*, P_LEVELS !IN NUMBER OF MODEL LEVELS COFTHQ1C.70
*, ROW_LENGTH !IN NUMBER OF POINTS PER ROW COFTHQ1C.71
*, LEVEL_BASE !IN BOTTOM MODEL LEVEL FOR DIFFUSION COFTHQ1C.72
! All TYPFLDPT arguments are intent IN COFTHQ1C.73
*CALL TYPFLDPT
COFTHQ1C.74
COFTHQ1C.75
REAL COFTHQ1C.76
* DIFFUSION_EW(P_FIELD,P_LEVELS) !OUT HOLDS EAST-WEST COFTHQ1C.77
* !EFFECTIVE DIFFUSION COEFFICIENT. COFTHQ1C.78
*,DIFFUSION_NS(P_FIELD,P_LEVELS) !OUT HOLDS NORTH_SOUTH COFTHQ1C.79
* !EFFECTIVE DIFFUSION COEFFICIENT. COFTHQ1C.80
COFTHQ1C.81
REAL COFTHQ1C.82
* PRESSURE(P_FIELD,P_LEVELS) !IN HOLDS 3-D PRESSURE FIELD COFTHQ1C.83
* ! LEVEL=1 IS SURFACE THEN LEVEL=K IS MODEL LEVEL K-1 COFTHQ1C.84
*,AK(P_LEVELS) !IN LAYER AK'S COFTHQ1C.85
*,BK(P_LEVELS) !IN LAYER BK'S COFTHQ1C.86
*,DELTA_AK(P_LEVELS) !IN LAYER DELTA_AK'S COFTHQ1C.87
*,DELTA_BK(P_LEVELS) !IN LAYER DELTA_BK'S COFTHQ1C.88
*,KD(P_LEVELS) !IN DIFFUSION COEFF SEE EQ. (45) COFTHQ1C.89
*,PSTAR_UV(U_FIELD) !IN PSTAR AT U POINTS COFTHQ1C.90
*,COS_U_LATITUDE(U_FIELD) !IN COS(LAT) AT U POINTS COFTHQ1C.91
*,COS_FUNCTION_U(U_FIELD) !IN COFTHQ1C.92
*,LATITUDE_STEP_INVERSE !IN 1/(DELTA LAMDA) COFTHQ1C.93
*,LONGITUDE_STEP_INVERSE !IN 1/(DELTA PHI) COFTHQ1C.94
*, PRESSURE_TEST ! PRESSURE ALTITUDE LIMIT FOR SLOPE TEST COFTHQ1C.95
COFTHQ1C.96
C*--------------------------------------------------------------------- COFTHQ1C.97
COFTHQ1C.98
C*L DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE----------------- COFTHQ1C.99
C*--------------------------------------------------------------------- COFTHQ1C.100
! Define local arrays COFTHQ1C.101
LOGICAL MASK(P_FIELD) ! Indicates of EW_DIFFUSION to be set to COFTHQ1C.102
COFTHQ1C.103
REAL COFTHQ1C.104
* DIFFUSION_COEFFICIENT(U_FIELD) ! HOLDS EAST-WEST DIFFUSION COFTHQ1C.105
* ! COEFFICIENT. COFTHQ1C.106
*,DIFFUSION_COEFFICIENT2(U_FIELD) ! HOLDS NORTH-SOUTH DIFFUSION COFTHQ1C.107
* ! COEFFICIENT. COFTHQ1C.108
! ! zero at a point COFTHQ1C.109
C DEFINE LOCAL VARIABLES COFTHQ1C.110
COFTHQ1C.111
C LOCAL REALS. COFTHQ1C.112
REAL COFTHQ1C.113
* PRESSURE_LEVEL COFTHQ1C.114
COFTHQ1C.115
C COUNT VARIABLES FOR DO LOOPS ETC. COFTHQ1C.116
INTEGER COFTHQ1C.117
* I,IJ,LEVEL_P,LEVEL COFTHQ1C.118
COFTHQ1C.119
C*L EXTERNAL SUBROUTINE CALLS: NONE------------------------------ COFTHQ1C.120
COFTHQ1C.121
C*--------------------------------------------------------------------- COFTHQ1C.122
CL MAXIMUM VECTOR LENGTH ASSUMED IS END_P_UPDATE-START_P_UPDATE+1 COFTHQ1C.123
CL--------------------------------------------------------------------- COFTHQ1C.124
CL INTERNAL STRUCTURE. COFTHQ1C.125
CL--------------------------------------------------------------------- COFTHQ1C.126
CL COFTHQ1C.127
COFTHQ1C.128
DO LEVEL=LEVEL_BASE,P_LEVELS COFTHQ1C.129
COFTHQ1C.130
C SET DIFFUSION COEFFICIENT AND COPY THETAL INTO FIELD1. COFTHQ1C.131
DO I=FIRST_VALID_PT,LAST_U_VALID_PT COFTHQ1C.132
DIFFUSION_COEFFICIENT2(I) = KD(LEVEL)* COFTHQ1C.133
1 (DELTA_AK(LEVEL)+DELTA_BK(LEVEL)*PSTAR_UV(I)) COFTHQ1C.134
DIFFUSION_COEFFICIENT(I) = COS_FUNCTION_U(I)* COFTHQ1C.135
2 DIFFUSION_COEFFICIENT2(I) COFTHQ1C.136
END DO COFTHQ1C.137
COFTHQ1C.138
COFTHQ1C.139
CL--------------------------------------------------------------------- COFTHQ1C.140
CL SECTION 1. DELTALAMBDA TERMS COFTHQ1C.141
CL--------------------------------------------------------------------- COFTHQ1C.142
LEVEL_P=LEVEL+1 COFTHQ1C.143
C---------------------------------------------------------------------- COFTHQ1C.144
C LEVEL_P =LEVEL+1 SINCE LEVEL_P=1 IS THE SURFACE COFTHQ1C.145
CL TOP LEVEL LEVEL_P = P_LEVELS SINCE SLOPE TEST NEED NOT BE COFTHQ1C.146
CL DONE FOR TOP MOST (PRESSURE) LEVELS COFTHQ1C.147
C---------------------------------------------------------------------- COFTHQ1C.148
IF(LEVEL_P.GT.P_LEVELS)LEVEL_P=P_LEVELS COFTHQ1C.149
C---------------------------------------------------------------------- COFTHQ1C.150
CL SECTION 1.1 CALCULATE DELTAPHILAMBDA*1/(DELTALAMBDA)SQUARED COFTHQ1C.151
C---------------------------------------------------------------------- COFTHQ1C.152
COFTHQ1C.153
DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO COFTHQ1C.154
DIFFUSION_EW(I,LEVEL) = 0.5*(DIFFUSION_COEFFICIENT(I-ROW_LENGTH) COFTHQ1C.155
& + DIFFUSION_COEFFICIENT(I))*LONGITUDE_STEP_INVERSE COFTHQ1C.156
& *LONGITUDE_STEP_INVERSE COFTHQ1C.157
END DO COFTHQ1C.158
COFTHQ1C.159
C---------------------------------------------------------------------- COFTHQ1C.160
CL TEST TO SEE IF DIFFUSION COEFFICIENT SET TO ZERO COFTHQ1C.161
C IF STEEP SLOPE AT PRESSURE > PRESSURE_TEST ONLY COFTHQ1C.162
C APPLY GENERAL TEST FOR REFERENCE SURFACE PRESSURE OF 1000HPA COFTHQ1C.163
PRESSURE_LEVEL=AK(LEVEL)+100000.0*BK(LEVEL) COFTHQ1C.164
C COFTHQ1C.165
IF(PRESSURE_LEVEL.GT.PRESSURE_TEST)THEN COFTHQ1C.166
COFTHQ1C.167
C---------------------------------------------------------------------- COFTHQ1C.168
CL SECTION 1.2 SET EFFECTIVE DIFFUSION COEFFICIENT TO ZERO COFTHQ1C.169
C IF STEEP SLOPE BELOW CHOSEN LEVEL COFTHQ1C.170
C---------------------------------------------------------------------- COFTHQ1C.171
COFTHQ1C.172
DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO-1 COFTHQ1C.173
MASK(I)=((PRESSURE(I,LEVEL_P).GT.PRESSURE(I+1,LEVEL_P-1)).OR. COFTHQ1C.174
& (PRESSURE(I,LEVEL_P).LT.PRESSURE(I+1,LEVEL_P+1))) COFTHQ1C.175
ENDDO COFTHQ1C.176
COFTHQ1C.177
*IF -DEF,MPP COFTHQ1C.178
! Recalculate end-points COFTHQ1C.179
DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO,ROW_LENGTH COFTHQ1C.180
IJ=I+ROW_LENGTH-1 COFTHQ1C.181
MASK(IJ)=((PRESSURE(IJ,LEVEL_P).GT.PRESSURE(I,LEVEL_P-1)).OR. COFTHQ1C.182
& (PRESSURE(IJ,LEVEL_P).LT.PRESSURE(I,LEVEL_P+1))) COFTHQ1C.183
ENDDO COFTHQ1C.184
*ENDIF COFTHQ1C.185
COFTHQ1C.186
! And zero appropriate points of EW_DIFFUSION COFTHQ1C.187
DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO COFTHQ1C.188
IF (MASK(I)) DIFFUSION_EW(I,LEVEL)=0.0 COFTHQ1C.189
ENDDO COFTHQ1C.190
COFTHQ1C.191
ENDIF COFTHQ1C.192
COFTHQ1C.193
COFTHQ1C.194
C---------------------------------------------------------------------- COFTHQ1C.195
CL SECTION 2 CALCULATE NS EFFECTIVE DIFFUSION COFTHQ1C.196
C---------------------------------------------------------------------- COFTHQ1C.197
COFTHQ1C.198
C CALCULATE DELTAPHI TERMS COFTHQ1C.199
C DELTALAMBDAK*COSLAT/(DELTAPHI)SQUARED COFTHQ1C.200
COFTHQ1C.201
DO I= START_POINT_NO_HALO-ROW_LENGTH+1,END_P_POINT_NO_HALO COFTHQ1C.202
DIFFUSION_NS(I,LEVEL)=0.5*(DIFFUSION_COEFFICIENT2(I) COFTHQ1C.203
& *COS_U_LATITUDE(I) COFTHQ1C.204
& +DIFFUSION_COEFFICIENT2(I-1)*COS_U_LATITUDE(I-1))* COFTHQ1C.205
& LATITUDE_STEP_INVERSE*LATITUDE_STEP_INVERSE COFTHQ1C.206
END DO COFTHQ1C.207
COFTHQ1C.208
C RECALCULATE END-POINTS COFTHQ1C.209
COFTHQ1C.210
COFTHQ1C.211
*IF -DEF,MPP COFTHQ1C.212
DO I=START_POINT_NO_HALO-ROW_LENGTH,END_P_POINT_NO_HALO, COFTHQ1C.213
& ROW_LENGTH COFTHQ1C.214
IJ=I+ROW_LENGTH-1 COFTHQ1C.215
DIFFUSION_NS(I,LEVEL)=0.5*(DIFFUSION_COEFFICIENT2(I) COFTHQ1C.216
& *COS_U_LATITUDE(I) COFTHQ1C.217
& +DIFFUSION_COEFFICIENT2(IJ)*COS_U_LATITUDE(IJ))* COFTHQ1C.218
& LATITUDE_STEP_INVERSE*LATITUDE_STEP_INVERSE COFTHQ1C.219
END DO COFTHQ1C.220
*ELSE COFTHQ1C.221
DIFFUSION_NS(START_POINT_NO_HALO-ROW_LENGTH,LEVEL)= COFTHQ1C.222
& DIFFUSION_NS(START_POINT_NO_HALO-ROW_LENGTH+1,LEVEL) COFTHQ1C.223
*ENDIF COFTHQ1C.224
COFTHQ1C.225
C---------------------------------------------------------------------- COFTHQ1C.226
CL SECTION 2.2 SET EFFECTIVE DIFFUSION COEFFICIENT TO ZERO COFTHQ1C.227
C IF STEEP SLOPE COFTHQ1C.228
C---------------------------------------------------------------------- COFTHQ1C.229
CL TEST TO SEE IF DIFFUSION COEFFICIENT SET TO ZERO COFTHQ1C.230
C IF STEEP SLOPE AT PRESSURE > PRESSURE_TEST ONLY COFTHQ1C.231
C APPLY GENERAL TEST FOR REFERENCE SURFACE PRESSURE OF 1000HPA COFTHQ1C.232
C COFTHQ1C.233
IF(PRESSURE_LEVEL.GT.PRESSURE_TEST)THEN COFTHQ1C.234
COFTHQ1C.235
DO I=START_POINT_NO_HALO-ROW_LENGTH,END_P_POINT_NO_HALO COFTHQ1C.236
IF((PRESSURE(I+ROW_LENGTH,LEVEL_P).GT.PRESSURE(I,LEVEL_P-1)).OR. COFTHQ1C.237
& (PRESSURE(I+ROW_LENGTH,LEVEL_P).LT. COFTHQ1C.238
& PRESSURE(I,LEVEL_P+1)))THEN COFTHQ1C.239
DIFFUSION_NS(I,LEVEL)=0.0 COFTHQ1C.240
ENDIF COFTHQ1C.241
END DO COFTHQ1C.242
COFTHQ1C.243
ENDIF COFTHQ1C.244
ENDDO COFTHQ1C.245
COFTHQ1C.246
*IF DEF,MPP COFTHQ1C.247
CALL SWAPBOUNDS
(DIFFUSION_EW,ROW_LENGTH,tot_P_ROWS, COFTHQ1C.248
& EW_Halo,NS_Halo,P_LEVELS) COFTHQ1C.249
CALL SWAPBOUNDS
(DIFFUSION_NS,ROW_LENGTH,tot_P_ROWS, COFTHQ1C.250
& EW_Halo,NS_Halo,P_LEVELS) COFTHQ1C.251
*ENDIF COFTHQ1C.252
COFTHQ1C.253
CL END OF ROUTINE COEFF_TH_Q COFTHQ1C.254
COFTHQ1C.255
RETURN COFTHQ1C.256
END COFTHQ1C.257
*ENDIF COFTHQ1C.258