*IF DEF,A13_1B THQDIF1B.2
C ******************************COPYRIGHT****************************** THQDIF1B.3
C (c) CROWN COPYRIGHT 1996, METEOROLOGICAL OFFICE, All Rights Reserved. THQDIF1B.4
C THQDIF1B.5
C Use, duplication or disclosure of this code is subject to the THQDIF1B.6
C restrictions as set forth in the contract. THQDIF1B.7
C THQDIF1B.8
C Meteorological Office THQDIF1B.9
C London Road THQDIF1B.10
C BRACKNELL THQDIF1B.11
C Berkshire UK THQDIF1B.12
C RG12 2SZ THQDIF1B.13
C THQDIF1B.14
C If no contract has been raised with this copy of the code, the use, THQDIF1B.15
C duplication or disclosure of it is strictly prohibited. Permission THQDIF1B.16
C to do so must first be obtained in writing from the Head of Numerical THQDIF1B.17
C Modelling at the above address. THQDIF1B.18
C ******************************COPYRIGHT****************************** THQDIF1B.19
C THQDIF1B.20
CLL SUBROUTINE TH_Q_DIF ----------------------------------------- THQDIF1B.21
CLL THQDIF1B.22
CLL PURPOSE: CALCULATES DIFFUSION INCREMENTS FOR THETAL OR QT THQDIF1B.23
CLL IF STEEP SLOPE THEN EFFECTIVE DIFFUSION IS ZERO. THQDIF1B.24
CLL THQDIF1B.25
CLL NOT SUITABLE FOR SINGLE COLUMN USE. THQDIF1B.26
CLL THQDIF1B.27
CLL VERSION FOR CRAY Y-MP THQDIF1B.28
CLL THQDIF1B.29
CLL MM, TJ <- PROGRAMMER OF SOME OR ALL OF PREVIOUS CODE OR CHANGES THQDIF1B.30
CLL THQDIF1B.31
CLL MODEL MODIFICATION HISTORY FROM MODEL VERSION 4.1: THQDIF1B.32
CLL VERSION DATE THQDIF1B.33
!LL 4.2 28/11/96 New deck for HADCM2-specific section A13_1B, THQDIF1B.34
!LL as THQDIF1A but with reintroduced 'bug' in THQDIF1B.35
!LL value of SCALAR weight at poles. T.Johns THQDIF1B.36
CLL THQDIF1B.37
CLL PROGRAMMING STANDARD: UNIFIED MODEL DOCUMENTATION PAPER NO. 4, THQDIF1B.38
CLL STANDARD B. VERSION 2, DATED 18/01/90 THQDIF1B.39
CLL THQDIF1B.40
CLL SYSTEM COMPONENTS COVERED: P131 THQDIF1B.41
CLL THQDIF1B.42
CLL SYSTEM TASK: P1 THQDIF1B.43
CLL THQDIF1B.44
CLL DOCUMENTATION: THE EQUATION USED IS (47) THQDIF1B.45
CLL IN UNIFIED MODEL DOCUMENTATION PAPER THQDIF1B.46
CLL NO. 10 M.J.P. CULLEN,T.DAVIES AND M.H.MAWSON THQDIF1B.47
CLL VERSION 16, DATED 09/01/91. THQDIF1B.48
CLLEND------------------------------------------------------------- THQDIF1B.49
THQDIF1B.50
C*L ARGUMENTS:--------------------------------------------------- THQDIF1B.51
SUBROUTINE TH_Q_DIF 4,5THQDIF1B.52
1 (FIELD,FIELD_INC, THQDIF1B.53
2 SEC_P_LATITUDE,ROW_LENGTH, THQDIF1B.54
*CALL ARGFLDPT
THQDIF1B.55
4 P_FIELD,U_FIELD, THQDIF1B.56
5 DIFFUSION_EW,DIFFUSION_NS) THQDIF1B.57
THQDIF1B.58
THQDIF1B.59
IMPLICIT NONE THQDIF1B.60
THQDIF1B.61
INTEGER THQDIF1B.62
* U_FIELD !IN DIMENSION OF FIELDS ON VELOCITY GRID THQDIF1B.63
*, P_FIELD !IN DIMENSION OF FIELDS ON PRESSURE GRID THQDIF1B.64
*, ROW_LENGTH !IN NUMBER OF POINTS PER ROW THQDIF1B.65
THQDIF1B.66
! All TYPFLDPT arguments are intent IN THQDIF1B.67
*CALL TYPFLDPT
THQDIF1B.68
THQDIF1B.69
REAL THQDIF1B.70
* FIELD(P_FIELD) !IN. THETAL OR QT FIELD. THQDIF1B.71
*, FIELD_INC(P_FIELD) !OUT DIFFUSION INCREMENT THQDIF1B.72
THQDIF1B.73
REAL THQDIF1B.74
* DIFFUSION_EW(P_FIELD) !IN HOLDS EAST-WEST EFFECTIVE DIFFUSION THQDIF1B.75
*,DIFFUSION_NS(P_FIELD) !IN HOLDS NORTH-SOUTH EFFECTIVE DIFFUSION THQDIF1B.76
*,SEC_P_LATITUDE(P_FIELD) !IN 1/COS(LAT) AT P POINTS THQDIF1B.77
THQDIF1B.78
C*--------------------------------------------------------------------- THQDIF1B.79
THQDIF1B.80
C*L DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE----------------- THQDIF1B.81
C DEFINE LOCAL ARRAYS: 5 ARE REQUIRED THQDIF1B.82
THQDIF1B.83
REAL THQDIF1B.84
* FIELD1(P_FIELD) ! GENERAL WORKSPACE THQDIF1B.85
*,FIELD2(P_FIELD) ! GENERAL WORKSPACE THQDIF1B.86
*,FIELD3(P_FIELD) ! GENERAL WORKSPACE THQDIF1B.87
*,NP_FLUX(ROW_LENGTH) ! HOLDS NORTH POLAR FLUX THQDIF1B.88
*,SP_FLUX(ROW_LENGTH) ! HOLDS SOUTH POLAR FLUX THQDIF1B.89
C*--------------------------------------------------------------------- THQDIF1B.90
C DEFINE LOCAL VARIABLES THQDIF1B.91
THQDIF1B.92
C LOCAL REALS. THQDIF1B.93
REAL THQDIF1B.94
* SCALAR THQDIF1B.95
C COUNT VARIABLES FOR DO LOOPS ETC. THQDIF1B.96
INTEGER THQDIF1B.97
* I,J,IJ THQDIF1B.98
THQDIF1B.99
C*L EXTERNAL SUBROUTINE CALLS:--------------------------------------- THQDIF1B.100
EXTERNAL THQDIF1B.101
* POLAR THQDIF1B.102
C*--------------------------------------------------------------------- THQDIF1B.103
CL MAXIMUM VECTOR LENGTH ASSUMED IS END_P_UPDATE-START_P_UPDATE+1 THQDIF1B.104
CL--------------------------------------------------------------------- THQDIF1B.105
CL INTERNAL STRUCTURE. THQDIF1B.106
CL--------------------------------------------------------------------- THQDIF1B.107
CL THQDIF1B.108
CL--------------------------------------------------------------------- THQDIF1B.109
CL SECTION 1. DELTA LAMBDA TERMS THQDIF1B.110
CL--------------------------------------------------------------------- THQDIF1B.111
C---------------------------------------------------------------------- THQDIF1B.112
CL SECTION 1.1 CALCULATE DELTAPHILAMBDA*1/(DELTALAMBDA)SQUARED THQDIF1B.113
C---------------------------------------------------------------------- THQDIF1B.114
THQDIF1B.115
THQDIF1B.116
DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO-1 THQDIF1B.117
FIELD1(I)=FIELD(I+1)-FIELD(I) THQDIF1B.118
END DO THQDIF1B.119
THQDIF1B.120
THQDIF1B.121
*IF -DEF,MPP THQDIF1B.122
C RECALCULATE END-POINTS THQDIF1B.123
THQDIF1B.124
DO I=START_POINT_NO_HALO-1,END_P_POINT_NO_HALO,ROW_LENGTH THQDIF1B.125
IJ=I-ROW_LENGTH+1 THQDIF1B.126
FIELD1(I)=FIELD(IJ)-FIELD(I) THQDIF1B.127
END DO THQDIF1B.128
*ELSE THQDIF1B.129
! Set last point of field THQDIF1B.130
FIELD1(END_P_POINT_NO_HALO)=FIELD1(END_P_POINT_NO_HALO-1) THQDIF1B.131
*ENDIF THQDIF1B.132
THQDIF1B.133
C---------------------------------------------------------------------- THQDIF1B.134
CL SECTION 1.2 CALCULATE DELTA LAMBDA TERM THQDIF1B.135
C---------------------------------------------------------------------- THQDIF1B.136
THQDIF1B.137
DO I= START_POINT_NO_HALO+1,END_P_POINT_NO_HALO THQDIF1B.138
FIELD2(I)=(DIFFUSION_EW(I)*FIELD1(I)- THQDIF1B.139
& DIFFUSION_EW(I-1)*FIELD1(I-1))* THQDIF1B.140
& SEC_P_LATITUDE(I) THQDIF1B.141
END DO THQDIF1B.142
THQDIF1B.143
THQDIF1B.144
*IF -DEF,MPP THQDIF1B.145
C RECALCULATE END-POINTS THQDIF1B.146
DO I= START_POINT_NO_HALO,END_P_POINT_NO_HALO,ROW_LENGTH THQDIF1B.147
IJ=I+ROW_LENGTH-1 THQDIF1B.148
FIELD2(I)=(DIFFUSION_EW(I)*FIELD1(I)- THQDIF1B.149
& DIFFUSION_EW(IJ)*FIELD1(IJ))* THQDIF1B.150
& SEC_P_LATITUDE(I) THQDIF1B.151
END DO THQDIF1B.152
*ELSE THQDIF1B.153
FIELD2(START_POINT_NO_HALO)=FIELD2(START_POINT_NO_HALO+1) THQDIF1B.154
*ENDIF THQDIF1B.155
THQDIF1B.156
C---------------------------------------------------------------------- THQDIF1B.157
CL SECTION 2 CALCULATE PHI DIRECTION TERM AND ADD THQDIF1B.158
CL ONTO FIRST TERM TO GET TOTAL CORRECTION. THQDIF1B.159
C---------------------------------------------------------------------- THQDIF1B.160
THQDIF1B.161
C CALCULATE DELTA PHI TERMS THQDIF1B.162
THQDIF1B.163
DO I=START_POINT_NO_HALO-ROW_LENGTH,END_P_POINT_NO_HALO THQDIF1B.164
FIELD1(I)=FIELD(I)-FIELD(I+ROW_LENGTH) THQDIF1B.165
END DO THQDIF1B.166
THQDIF1B.167
C---------------------------------------------------------------------- THQDIF1B.168
CL SECTION 2.3 CALCULATE DELTAPHI TERM AND ADD ONTO DELTALAMBDA TERM THQDIF1B.169
C---------------------------------------------------------------------- THQDIF1B.170
THQDIF1B.171
DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO THQDIF1B.172
FIELD_INC(I)= (FIELD2(I)+ THQDIF1B.173
& DIFFUSION_NS(I-ROW_LENGTH)*FIELD1(I-ROW_LENGTH)- THQDIF1B.174
& DIFFUSION_NS(I)*FIELD1(I))*SEC_P_LATITUDE(I) THQDIF1B.175
END DO THQDIF1B.176
THQDIF1B.177
C---------------------------------------------------------------------- THQDIF1B.178
CL SECTION 3 CALCULATE DIFFUSION AT POLES THQDIF1B.179
C---------------------------------------------------------------------- THQDIF1B.180
THQDIF1B.181
*IF DEF,GLOBAL THQDIF1B.182
THQDIF1B.183
C GLOBAL MODEL CALCULATES POLAR DEL-SQUARED USING ACROSS-POLE DIFFERENCE THQDIF1B.184
C ASSUMING FLUX=0 AT HALF-GRID-LENGTH ON OTHER SIDE OF POLE THQDIF1B.185
THQDIF1B.186
THQDIF1B.187
! Note - 2.0* factor is incorrect but consistent with HADCM2 THQDIF1B.188
SCALAR=2.0*SEC_P_LATITUDE(TOP_ROW_START) THQDIF1B.189
THQDIF1B.190
! Do North Pole THQDIF1B.191
*IF DEF,MPP THQDIF1B.192
IF (at_top_of_LPG) THEN THQDIF1B.193
*ENDIF THQDIF1B.194
DO I=1,ROW_LENGTH THQDIF1B.195
J=TOP_ROW_START+I-1 THQDIF1B.196
FIELD3(J)=-DIFFUSION_NS(J)*FIELD1(J)*SCALAR THQDIF1B.197
NP_FLUX(I)=FIELD3(J) THQDIF1B.198
FIELD_INC(J)=0.0 THQDIF1B.199
ENDDO THQDIF1B.200
*IF DEF,MPP THQDIF1B.201
ENDIF THQDIF1B.202
*ENDIF THQDIF1B.203
THQDIF1B.204
! And South Pole THQDIF1B.205
*IF DEF,MPP THQDIF1B.206
! Note - 2.0* factor is incorrect but consistent with HADCM2 THQDIF1B.207
SCALAR=2.0*SEC_P_LATITUDE(P_BOT_ROW_START) THQDIF1B.208
THQDIF1B.209
IF (at_base_of_LPG) THEN THQDIF1B.210
*ENDIF THQDIF1B.211
DO I=1,ROW_LENGTH THQDIF1B.212
J=I+P_BOT_ROW_START-1 THQDIF1B.213
FIELD3(J)=DIFFUSION_NS(J-ROW_LENGTH)*FIELD1(J-ROW_LENGTH)* THQDIF1B.214
& SCALAR THQDIF1B.215
SP_FLUX(I)=FIELD3(J) THQDIF1B.216
FIELD_INC(J)=0.0 THQDIF1B.217
ENDDO THQDIF1B.218
*IF DEF,MPP THQDIF1B.219
ENDIF THQDIF1B.220
*ENDIF THQDIF1B.221
THQDIF1B.222
CL CALL POLAR TO UPDATE POLAR VALUES THQDIF1B.223
THQDIF1B.224
CALL POLAR
(FIELD_INC,NP_FLUX,SP_FLUX, THQDIF1B.225
*CALL ARGFLDPT
THQDIF1B.226
& P_FIELD,ROW_LENGTH,ROW_LENGTH, THQDIF1B.227
& 1,1,ROW_LENGTH,1) THQDIF1B.228
THQDIF1B.229
*ELSE THQDIF1B.230
CL LIMITED AREA MODEL ZEROES DEL-SQUARED ON BOUNDARIES. THQDIF1B.231
*IF DEF,MPP THQDIF1B.232
IF (at_left_of_LPG) THEN THQDIF1B.233
*ENDIF THQDIF1B.234
DO I=START_POINT_NO_HALO+FIRST_ROW_PT-1, THQDIF1B.235
& END_P_POINT_NO_HALO,ROW_LENGTH THQDIF1B.236
FIELD_INC(I)=0.0 THQDIF1B.237
ENDDO THQDIF1B.238
*IF DEF,MPP THQDIF1B.239
ENDIF THQDIF1B.240
THQDIF1B.241
IF (at_right_of_LPG) THEN THQDIF1B.242
*ENDIF THQDIF1B.243
DO I=START_POINT_NO_HALO+LAST_ROW_PT-1, THQDIF1B.244
& END_P_POINT_NO_HALO,ROW_LENGTH THQDIF1B.245
FIELD_INC(I)=0.0 THQDIF1B.246
ENDDO THQDIF1B.247
*IF DEF,MPP THQDIF1B.248
ENDIF THQDIF1B.249
*ENDIF THQDIF1B.250
*ENDIF THQDIF1B.251
CL END OF ROUTINE TH_Q_DIF THQDIF1B.252
THQDIF1B.253
RETURN THQDIF1B.254
END THQDIF1B.255
*ENDIF THQDIF1B.256