*IF DEF,A10_1A,OR,DEF,A10_1B,OR,DEF,A10_1C AAD2F404.245
*IF -DEF,SCMA AJC0F405.283
C ******************************COPYRIGHT****************************** GTS2F400.2017
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.2018
C GTS2F400.2019
C Use, duplication or disclosure of this code is subject to the GTS2F400.2020
C restrictions as set forth in the contract. GTS2F400.2021
C GTS2F400.2022
C Meteorological Office GTS2F400.2023
C London Road GTS2F400.2024
C BRACKNELL GTS2F400.2025
C Berkshire UK GTS2F400.2026
C RG12 2SZ GTS2F400.2027
C GTS2F400.2028
C If no contract has been raised with this copy of the code, the use, GTS2F400.2029
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.2030
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.2031
C Modelling at the above address. GTS2F400.2032
C ******************************COPYRIGHT****************************** GTS2F400.2033
C GTS2F400.2034
CLL SUBROUTINE DIAG10_A -------------------------------------------- DIA10A1A.3
CLL DIA10A1A.4
CLL PURPOSE: Calculate diagnostics from section 10 before call to DIA10A1A.5
CLL THETL_QT. DIA10A1A.6
CLL DIA10A1A.7
CLL D.Robinson <- programmer of some or all of previous code or changes DIA10A1A.8
CLL DIA10A1A.9
CLL Model Modification history from model version 3.0: DIA10A1A.10
CLL version Date DIA10A1A.11
CLL DIA10A1A.12
CLL 3.2 26/07/93 CHANGE DIMENSION OF SF TO INCLUDE (0:NITEMS, R.RAWLINS @DYALLOC.838
CLL 3.4 29/04/94 : Correct calculations of temperature from theta ARS1F304.1
CLL (was T=theta/p_exner now T=theta*p_exner) R Stratton ARS1F304.2
CLL 11/10/94 : Correct calls to COPYDIAG_3D. R A Stratton ARS1F304.3
! 4.2 25/04/95 : Scale many of the output fields by 1.0e-6 to avoid ARS1F402.1
! problems with partial sums of the field reaching ARS1F402.2
! numbers too big to be packed to 32 bits (ie > 1.e9) ARS1F402.3
!LL 4.3 11/02/97 Added ARGFLDPT and ARGPPX arguments P.Burton GPB1F403.942
!LL 4.4 10/09/97 : Correct error introduced by MPP GPB1F404.179
!LL 4.5 28/10/98 Introduce Single Column Model. J-C Thil. AJC0F405.284
CLL @DYALLOC.839
CLL Programming standard: U M DOC Paper NO. 4, DIA10A1A.13
CLL DIA10A1A.14
CLL Logical components covered : D3111 DIA10A1A.15
CLL DIA10A1A.16
CLL Project task: P1 DIA10A1A.17
CLL DIA10A1A.18
CLL External documentation: U.M. Doc. Paper 10. Appendix 3. DIA10A1A.19
CLL DIA10A1A.20
CLLEND--------------------------------------------------------------- DIA10A1A.21
DIA10A1A.22
C*L ARGUMENTS:------------------------------------------------------ DIA10A1A.23
DIA10A1A.24
SUBROUTINE DIAG10_A( 1,10DIA10A1A.25
& PSTAR,PSTAR_OLD,U_ADJ,V_ADJ,Q,ETADOT, DIA10A1A.26
& THETA,P_EXNER,RS,SEC_U_LATITUDE, DIA10A1A.27
& ROW_LENGTH,P_LEVELS,Q_LEVELS,P_FIELD, DIA10A1A.28
& U_FIELD,AK,BK,AKH,BKH,ADVECTION_TIMESTEP, DIA10A1A.29
& FIRST_POINT,LAST_POINT, DIA10A1A.30
& NSECTS,NITEMS,TOTITEMS,NUM_STASH_LEVELS, DIA10A1A.31
& NUM_LEVEL_LISTS,LEN_STLIST,STASHLEN,SF, DIA10A1A.32
& STINDEX,STLIST,SI,STASH_LEVELS,STASHWORK, DIA10A1A.33
& FIELD,WORK_LENGTH, GPB1F403.943
& im_ident, GPB1F403.944
*CALL ARGFLDPT
GPB1F403.945
*CALL ARGPPX
GPB1F403.946
& ICODE,CMESSAGE) GPB1F403.947
DIA10A1A.35
IMPLICIT NONE DIA10A1A.36
DIA10A1A.37
INTEGER DIA10A1A.38
& P_FIELD !IN 1ST DIMENSION OF FIELD OF PSTAR DIA10A1A.39
&, U_FIELD !IN 1ST DIMENSION OF FIELD OF U,V DIA10A1A.40
&, ROW_LENGTH !IN NUMBER OF POINTS PER ROW DIA10A1A.41
&, P_LEVELS !IN NUMBER OF PRESSURE LEVELS DIA10A1A.42
&, Q_LEVELS !IN NUMBER OF WET LEVELS DIA10A1A.43
&, FIRST_POINT !IN FIRST POINT OUTPUT REQUIRED FOR. DIA10A1A.44
&, LAST_POINT !IN LAST POINT OUTPUT REQUIRED FOR. DIA10A1A.45
&, WORK_LENGTH !IN SIZE OF DYNAMICALLY ALLOCATED WORKSPACE DIA10A1A.46
DIA10A1A.47
INTEGER GPB1F403.948
& im_ident !IN : Internal model indent GPB1F403.949
GPB1F403.950
*CALL TYPFLDPT
GPB1F403.951
*CALL CSUBMODL
GPB1F403.952
*CALL CPPXREF
GPB1F403.953
*CALL PPXLOOK
GPB1F403.954
INTEGER DIA10A1A.48
& ICODE !OUT RETURN CODE. NON-ZERO IF ERROR-DETECTED DIA10A1A.49
DIA10A1A.50
CHARACTER DIA10A1A.51
& CMESSAGE*(*) !OUT ERROR MESSAGE DIA10A1A.52
DIA10A1A.53
C INPUT DATA DIA10A1A.54
DIA10A1A.55
REAL DIA10A1A.56
& PSTAR(P_FIELD) !IN PRIMARY MODEL ARRAY FOR PSTAR FIELD DIA10A1A.57
&, PSTAR_OLD(P_FIELD) !IN PSTAR FIELD AT PREVIOUS TIMESTEP. DIA10A1A.58
&, P_EXNER(P_FIELD,P_LEVELS+1) !IN EXNER PRESS ON 1/2 LVLS DIA10A1A.59
&, THETA(P_FIELD,P_LEVELS) !IN PRIMARY MODEL ARRAY FOR THETA FIELD DIA10A1A.60
&, U_ADJ(U_FIELD,P_LEVELS) !IN MEAN U OVER ADJUSTMENT STEPS DIA10A1A.61
&, V_ADJ(U_FIELD,P_LEVELS) !IN MEAN V OVER ADJUSTMENT STEPS DIA10A1A.62
&, Q(P_FIELD,Q_LEVELS) !IN PRIMARY MODEL ARRAY FOR HUMIDITY DIA10A1A.63
&, RS(P_FIELD,P_LEVELS) !IN EFFECTIVE RADIUS OF EARTH. DIA10A1A.64
&, ETADOT(P_FIELD,P_LEVELS)!IN VERTICAL VELOCITY. DIA10A1A.65
&, SEC_U_LATITUDE(U_FIELD) !IN 1./(COS(LAT)) AT U POINTS. DIA10A1A.66
DIA10A1A.67
REAL DIA10A1A.68
& AKH(P_LEVELS+1) !IN LAYER THICKNESS DIA10A1A.69
&, BKH(P_LEVELS+1) !IN LAYER THICKNESS DIA10A1A.70
&, AK (P_LEVELS) !IN VALUE AT LAYER CENTRE DIA10A1A.71
&, BK (P_LEVELS) !IN VALUE AT LAYER CENTRE DIA10A1A.72
&, ADVECTION_TIMESTEP !IN ADVECTION TIMESTEP. DIA10A1A.73
DIA10A1A.74
REAL DIA10A1A.75
& FIELD(P_FIELD*P_LEVELS) ! WORK-SPACE FOR OUTPUT FIELD DIA10A1A.76
DIA10A1A.77
C STASH REQUIREMENTS. DIA10A1A.78
DIA10A1A.79
INTEGER DIA10A1A.80
& NSECTS !IN NO OF PROCESSING SECTIONS (MASTER PCRS) DIA10A1A.81
&, NITEMS !IN MAX NO OF STASH ITEMS IN A SECTION DIA10A1A.82
&, TOTITEMS !IN MAX NO OF TOTAL STASH ITEMS DIA10A1A.83
&, NUM_STASH_LEVELS !IN MAX NUMBER OF LEVELS IN A LEVELS LIST DIA10A1A.84
&, NUM_LEVEL_LISTS !IN MAX NUMBER OF LEVELS LIST DIA10A1A.85
&, LEN_STLIST !IN LENGTH OF LIST OF ITEMS FROM STASH DIA10A1A.86
&, STASHLEN !IN SIZE OF STASHWORK DIA10A1A.87
DIA10A1A.88
INTEGER DIA10A1A.89
& STINDEX(2,NITEMS,0:NSECTS) !IN DIA10A1A.90
&, STLIST(LEN_STLIST,TOTITEMS) !IN DIA10A1A.91
&, SI(NITEMS,0:NSECTS) !IN DIA10A1A.92
&, STASH_LEVELS(NUM_STASH_LEVELS+1,NUM_LEVEL_LISTS) !IN DIA10A1A.93
DIA10A1A.94
LOGICAL DIA10A1A.95
& SF(0:NITEMS,0:NSECTS) !IN @DYALLOC.840
DIA10A1A.97
REAL DIA10A1A.98
& STASHWORK(STASHLEN) !INOUT. WORK SPACE HOLDING STASH OUTPUT. DIA10A1A.99
DIA10A1A.100
C*-------------------------------------------------------------------- DIA10A1A.101
DIA10A1A.102
C*L DEFINE LOCAL ARRAYS AND VARIABLES USED IN THIS ROUTINE---------- DIA10A1A.103
C DEFINE LOCAL ARRAYS: 2 ARE REQUIRED. DIA10A1A.104
REAL DIA10A1A.105
& VELOCITY(WORK_LENGTH) ! WORK-SPACE FOR INTERPOLATED DIA10A1A.106
& ! WIND FIELD. DIA10A1A.107
INTEGER ARS1F304.4
& FIRST_U,FIRST_P ! first point for COPYDIAG for U & P grids ARS1F304.5
& ,LAST_U,LAST_P ! last point for COPYDIAG for U & P grids ARS1F304.6
DIA10A1A.108
LOGICAL DIA10A1A.109
& LIST(P_LEVELS) DIA10A1A.110
DIA10A1A.111
C*-------------------------------------------------------------------- DIA10A1A.112
DIA10A1A.113
C DEFINE LOCAL VARIABLES DIA10A1A.114
REAL DIA10A1A.115
& RECIP_TIMESTEP DIA10A1A.116
&, EARTH_RADIUS_INVERSE DIA10A1A.117
&, SCALAR DIA10A1A.118
&, SCALAR_A DIA10A1A.119
&, SCALAR_B DIA10A1A.120
&, PKP1,PK ! Pressures at half levels k+1 and k DIA10A1A.121
&, P_EXNER_FULL ! Exner Pressure at full model level DIA10A1A.122
&, TEMP_I,TEMP_IP1 ! Temperatures at points/rows i and i+1 DIA10A1A.123
& ,FACTOR ! scaling factor ARS1F402.4
DIA10A1A.124
INTEGER DIA10A1A.125
& I,K,K1,LEVEL DIA10A1A.126
DIA10A1A.127
*CALL C_DG10_1
DIA10A1A.128
C Get UM constants DIA10A1A.129
*CALL C_A
DIA10A1A.130
*CALL C_G
DIA10A1A.131
*CALL C_R_CP
DIA10A1A.132
*CALL C_LHEAT
DIA10A1A.133
DIA10A1A.134
C*L EXTERNAL SUBROUTINES CALLED ------------------------------------ DIA10A1A.135
EXTERNAL COPYDIAG_3D,SET_LEVELS_LIST,COPYDIAG DIA10A1A.136
C*-------------------------------------------------------------------- DIA10A1A.137
DIA10A1A.138
*CALL P_EXNERC
DIA10A1A.139
C Comdeck C_DG10_2 initialises local variables defined in C_DG10_1 DIA10A1A.140
*CALL C_DG10_2
DIA10A1A.141
DIA10A1A.142
CL-------------------------------------------------------------------- DIA10A1A.143
CL MAXIMUM VECTOR LENGTH ASSUMED IS P_FIELD DIA10A1A.144
CL-------------------------------------------------------------------- DIA10A1A.145
FIRST_U = FIRST_FLD_PT GPB1F403.955
FIRST_P = FIRST_FLD_PT GPB1F403.956
LAST_U = LAST_U_FLD_PT GPB1F403.957
LAST_P = LAST_P_FLD_PT GPB1F403.958
DIA10A1A.146
CL ------------------------------------------------------------------- DIA10A1A.147
CL SECTION 1. DIAGNOSTICS INVOLVING MEAN U OVER ADJUSTMENT STEP. DIA10A1A.148
CL ------------------------------------------------------------------- DIA10A1A.149
DIA10A1A.150
EARTH_RADIUS_INVERSE = 1./A DIA10A1A.151
FACTOR=1.0e-6 ARS1F402.5
DIA10A1A.152
C -------------------------------------------------------------------- DIA10A1A.153
CL SECTION 1.1 MEAN PRESSURE WEIGHTED U OVER ADJUSTMENT STEPS. DIA10A1A.154
C -------------------------------------------------------------------- DIA10A1A.155
DIA10A1A.156
IF (L_UADJ_DP) THEN DIA10A1A.157
CL REMOVE RADIUS OF EARTH FROM U FIELD. DIA10A1A.158
C MINUS SIGN SETS DELTA P TO POSITIVE VALUE. DIA10A1A.159
DO 110 K=1,P_LEVELS DIA10A1A.160
K1 = (K-1)*U_FIELD DIA10A1A.161
DO I=FIRST_U,LAST_U GPB1F403.959
FIELD(K1+I) = -U_ADJ(I,K)*EARTH_RADIUS_INVERSE DIA10A1A.163
END DO DIA10A1A.164
110 CONTINUE DIA10A1A.165
DIA10A1A.166
CALL COPYDIAG_3D
(STASHWORK(LOC_UADJ_DP),FIELD,FIRST_U, ARS1F304.11
& LAST_U,U_FIELD,ROW_LENGTH,P_LEVELS, ARS1F304.12
& STLIST(1,INDEX_UADJ_DP),LEN_STLIST, DIA10A1A.169
& STASH_LEVELS,NUM_STASH_LEVELS+1, GPB1F403.960
& im_ident,10,201, GPB1F403.961
*CALL ARGPPX
GPB1F403.962
& ICODE,CMESSAGE) GPB1F403.963
IF(ICODE.GT.0) THEN DIA10A1A.172
RETURN DIA10A1A.173
END IF DIA10A1A.174
END IF DIA10A1A.175
DIA10A1A.176
CL CHECK TO SEE IF ANY U DIAGNOSTICS REQUESTED WHICH NEED U_ADJ TO DIA10A1A.177
CL BE INTERPOLATED. DIA10A1A.178
DIA10A1A.179
IF(L_UADJ_T_DP.OR.L_UADJ_Q_DP) THEN DIA10A1A.180
DIA10A1A.181
C -------------------------------------------------------------------- DIA10A1A.182
CL SECTION 1.2 INTERPOLATE U TO C-GRID U POINTS. DIA10A1A.183
C -------------------------------------------------------------------- DIA10A1A.184
DIA10A1A.185
C MINUS SIGN SETS DELTA P TO POSITIVE VALUE. DIA10A1A.186
DO 120 K=1,P_LEVELS DIA10A1A.187
K1 = (K-1)*P_FIELD DIA10A1A.188
DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO GPB1F403.964
VELOCITY(K1+I) = -.5*(U_ADJ(I,K) + U_ADJ(I-ROW_LENGTH,K)) DIA10A1A.190
& *EARTH_RADIUS_INVERSE DIA10A1A.191
END DO DIA10A1A.192
C SET POLAR VALUES EQUAL TO VALUE ON ADJACENT ROW. DIA10A1A.193
DIA10A1A.194
*IF DEF,MPP GPB1F403.965
IF (at_top_of_LPG) THEN GPB1F403.966
*ENDIF GPB1F403.967
DO I=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1 GPB1F403.968
VELOCITY(K1+I) = -U_ADJ(I,K)*EARTH_RADIUS_INVERSE GPB1F403.969
ENDDO GPB1F403.970
*IF DEF,MPP GPB1F403.971
ENDIF GPB1F403.972
GPB1F403.973
IF (at_base_of_LPG) THEN GPB1F403.974
*ENDIF GPB1F403.975
DO I=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1 GPB1F403.976
VELOCITY(K1+I) = -U_ADJ(I-ROW_LENGTH,K)* GPB1F403.977
& EARTH_RADIUS_INVERSE GPB1F403.978
ENDDO GPB1F403.979
*IF DEF,MPP GPB1F403.980
ENDIF GPB1F403.981
*ENDIF GPB1F403.982
120 CONTINUE DIA10A1A.200
DIA10A1A.201
C -------------------------------------------------------------------- DIA10A1A.202
CL SECTION 1.3 MEAN PRESSURE WEIGHTED U OVER ADJUSTMENT STEPS DIA10A1A.203
CL * TEMPERATURE. DIA10A1A.204
C -------------------------------------------------------------------- DIA10A1A.205
DIA10A1A.206
IF (L_UADJ_T_DP) THEN DIA10A1A.207
DO 130 K=1,P_LEVELS DIA10A1A.208
K1 = (K-1)*P_FIELD DIA10A1A.209
DO I=FIRST_P,LAST_P-1 GPB1F403.983
DIA10A1A.211
PKP1 = AKH(K+1) + BKH(K+1)*PSTAR(I) DIA10A1A.212
PK = AKH(K) + BKH(K) *PSTAR(I) DIA10A1A.213
P_EXNER_FULL = P_EXNER_C DIA10A1A.214
& (P_EXNER(I,K+1),P_EXNER(I,K),PKP1,PK,KAPPA) DIA10A1A.215
TEMP_I = THETA(I,K) * P_EXNER_FULL ARS1F304.13
DIA10A1A.217
PKP1 = AKH(K+1) + BKH(K+1)*PSTAR(I+1) DIA10A1A.218
PK = AKH(K) + BKH(K) *PSTAR(I+1) DIA10A1A.219
P_EXNER_FULL = P_EXNER_C DIA10A1A.220
& (P_EXNER(I+1,K+1),P_EXNER(I+1,K),PKP1,PK,KAPPA) DIA10A1A.221
TEMP_IP1 = THETA(I+1,K) * P_EXNER_FULL ARS1F304.14
DIA10A1A.223
FIELD(K1+I) = VELOCITY(K1+I) * 0.5 * (TEMP_I + TEMP_IP1) DIA10A1A.224
& *factor ARS1F402.6
DIA10A1A.225
END DO DIA10A1A.226
*IF -DEF,MPP GPB1F403.984
C RE-CALCULATE END POINTS DIA10A1A.227
DO I=FIRST_P+LAST_ROW_PT-1,LAST_P,ROW_LENGTH GPB1F403.985
DIA10A1A.229
PKP1 = AKH(K+1) + BKH(K+1)*PSTAR(I) DIA10A1A.230
PK = AKH(K) + BKH(K) *PSTAR(I) DIA10A1A.231
P_EXNER_FULL = P_EXNER_C DIA10A1A.232
& (P_EXNER(I,K+1),P_EXNER(I,K),PKP1,PK,KAPPA) DIA10A1A.233
TEMP_I = THETA(I,K) * P_EXNER_FULL ARS1F304.15
DIA10A1A.235
PKP1 = AKH(K+1) + BKH(K+1)*PSTAR(I+1-ROW_LENGTH) DIA10A1A.236
PK = AKH(K) + BKH(K) *PSTAR(I+1-ROW_LENGTH) DIA10A1A.237
P_EXNER_FULL = P_EXNER_C DIA10A1A.238
& (P_EXNER(I+1-ROW_LENGTH,K+1),P_EXNER(I+1-ROW_LENGTH,K), DIA10A1A.239
& PKP1,PK,KAPPA) DIA10A1A.240
TEMP_IP1 = THETA(I+1-ROW_LENGTH,K) * P_EXNER_FULL ARS1F304.16
DIA10A1A.242
FIELD(K1+I) = VELOCITY(K1+I) * 0.5 * (TEMP_I + TEMP_IP1) DIA10A1A.243
& *factor ARS1F402.7
DIA10A1A.244
END DO DIA10A1A.245
*ELSE GPB1F403.986
! Set last point of field (halo) to a valid number GPB1F403.987
FIELD(K1+LAST_P)=FIELD(K1+LAST_P-1) GPB1F403.988
*ENDIF GPB1F403.989
130 CONTINUE DIA10A1A.246
DIA10A1A.247
CALL COPYDIAG_3D
(STASHWORK(LOC_UADJ_T_DP),FIELD,FIRST_P, ARS1F304.17
& LAST_P,P_FIELD,ROW_LENGTH,P_LEVELS, ARS1F304.18
& STLIST(1,INDEX_UADJ_T_DP),LEN_STLIST, DIA10A1A.250
& STASH_LEVELS, DIA10A1A.251
& NUM_STASH_LEVELS+1, GPB1F403.990
& im_ident,10,207, GPB1F403.991
*CALL ARGPPX
GPB1F403.992
& ICODE,CMESSAGE) GPB1F403.993
IF(ICODE.GT.0) THEN DIA10A1A.253
RETURN DIA10A1A.254
END IF DIA10A1A.255
END IF DIA10A1A.256
DIA10A1A.257
C -------------------------------------------------------------------- DIA10A1A.258
CL SECTION 1.4 MEAN PRESSURE WEIGHTED U OVER ADJUSTMENT STEPS DIA10A1A.259
CL * HUMIDITY. DIA10A1A.260
C -------------------------------------------------------------------- DIA10A1A.261
DIA10A1A.262
IF (L_UADJ_Q_DP) THEN DIA10A1A.263
DO 140 K=1,Q_LEVELS DIA10A1A.264
K1 = (K-1)*P_FIELD DIA10A1A.265
DO I=FIRST_P,LAST_P-1 GPB1F403.994
FIELD(K1+I) = VELOCITY(K1+I)*.5* (Q(I,K)+Q(I+1,K)) DIA10A1A.267
END DO DIA10A1A.268
*IF -DEF,MPP GPB1F403.995
C RE-CALCULATE END POINTS DIA10A1A.269
DO I=FIRST_P+LAST_ROW_PT-1,LAST_P,ROW_LENGTH GPB1F403.996
FIELD(K1+I) = VELOCITY(K1+I)*.5* DIA10A1A.271
& (Q(I,K)+Q(I+1-ROW_LENGTH,K)) DIA10A1A.272
END DO DIA10A1A.273
*ELSE GPB1F403.997
! Set last point of field (halo) to a valid number GPB1F403.998
FIELD(K1+LAST_P)=FIELD(K1+LAST_P-1) GPB1F403.999
*ENDIF GPB1F403.1000
140 CONTINUE DIA10A1A.274
DIA10A1A.275
CALL COPYDIAG_3D
(STASHWORK(LOC_UADJ_Q_DP),FIELD,FIRST_P, ARS1F304.19
& LAST_P,P_FIELD,ROW_LENGTH,Q_LEVELS, ARS1F304.20
& STLIST(1,INDEX_UADJ_Q_DP),LEN_STLIST, DIA10A1A.278
& STASH_LEVELS, DIA10A1A.279
& NUM_STASH_LEVELS+1, GPB1F403.1001
& im_ident,10,209, GPB1F403.1002
*CALL ARGPPX
GPB1F403.1003
& ICODE,CMESSAGE) GPB1F403.1004
IF(ICODE.GT.0) THEN DIA10A1A.281
RETURN DIA10A1A.282
END IF DIA10A1A.283
END IF DIA10A1A.284
DIA10A1A.285
C END IF FOR U DIAGNOSTICS DIA10A1A.286
END IF DIA10A1A.287
DIA10A1A.288
CL ------------------------------------------------------------------- DIA10A1A.289
CL SECTION 2. DIAGNOSTICS INVOLVING MEAN V OVER ADJUSTMENT STEP. DIA10A1A.290
CL ------------------------------------------------------------------- DIA10A1A.291
DIA10A1A.292
C -------------------------------------------------------------------- DIA10A1A.293
CL SECTION 2.1 MEAN PRESSURE WEIGHTED V OVER ADJUSTMENT STEPS. DIA10A1A.294
C -------------------------------------------------------------------- DIA10A1A.295
DIA10A1A.296
IF (L_VADJ_DP) THEN DIA10A1A.297
CL REMOVE RADIUS OF EARTH * COSINE OF LATITUDE FROM V FIELD. DIA10A1A.298
C MINUS SIGN SETS DELTA P TO POSITIVE VALUE. DIA10A1A.299
DIA10A1A.300
DO 210 K=1,P_LEVELS DIA10A1A.301
K1 = (K-1)*U_FIELD DIA10A1A.302
DO I=FIRST_U,LAST_U GPB1F403.1005
FIELD(K1+I) = -V_ADJ(I,K)*EARTH_RADIUS_INVERSE DIA10A1A.304
& *SEC_U_LATITUDE(I) DIA10A1A.305
END DO DIA10A1A.306
210 CONTINUE DIA10A1A.307
DIA10A1A.308
CALL COPYDIAG_3D
(STASHWORK(LOC_VADJ_DP),FIELD,FIRST_U, ARS1F304.21
& LAST_U,U_FIELD,ROW_LENGTH,P_LEVELS, ARS1F304.22
& STLIST(1,INDEX_VADJ_DP),LEN_STLIST, DIA10A1A.311
& STASH_LEVELS, DIA10A1A.312
& NUM_STASH_LEVELS+1, GPB1F403.1006
& im_ident,10,202, GPB1F403.1007
*CALL ARGPPX
GPB1F403.1008
& ICODE,CMESSAGE) GPB1F403.1009
IF(ICODE.GT.0) THEN DIA10A1A.314
RETURN DIA10A1A.315
END IF DIA10A1A.316
END IF DIA10A1A.317
DIA10A1A.318
CL CHECK TO SEE IF ANY V DIAGNOSTICS REQUESTED WHICH NEED V_ADJ TO DIA10A1A.319
CL BE INTERPOLATED. DIA10A1A.320
DIA10A1A.321
IF(L_VADJ_T_DP.OR.L_VADJ_Q_DP) THEN DIA10A1A.322
DIA10A1A.323
C -------------------------------------------------------------------- DIA10A1A.324
CL SECTION 2.2 INTERPOLATE V TO C-GRID V POINTS. DIA10A1A.325
C -------------------------------------------------------------------- DIA10A1A.326
DIA10A1A.327
C MINUS SIGN SETS DELTA P TO POSITIVE VALUE. DIA10A1A.328
DO 220 K=1,P_LEVELS DIA10A1A.329
K1 = (K-1)*U_FIELD DIA10A1A.330
DO I=FIRST_U+1,LAST_U GPB1F403.1010
VELOCITY(K1+I)= -.5*(V_ADJ(I,K)*SEC_U_LATITUDE(I) DIA10A1A.332
& +V_ADJ(I-1,K) DIA10A1A.333
& *SEC_U_LATITUDE(I-1)) DIA10A1A.334
& *EARTH_RADIUS_INVERSE DIA10A1A.335
END DO DIA10A1A.336
*IF -DEF,MPP GPB1F403.1011
C RE-CALCULATE END POINTS. DIA10A1A.337
DIA10A1A.338
DO I=FIRST_U+FIRST_ROW_PT-1,LAST_U,ROW_LENGTH GPB1F403.1012
VELOCITY(K1+I)= -.5*(V_ADJ(I,K)*SEC_U_LATITUDE(I) DIA10A1A.340
& +V_ADJ(I-1+ROW_LENGTH,K) DIA10A1A.341
& *SEC_U_LATITUDE(I+ROW_LENGTH-1)) DIA10A1A.342
& *EARTH_RADIUS_INVERSE DIA10A1A.343
END DO DIA10A1A.344
*ELSE GPB1F403.1013
! Set first point of field (halo) to a valid number GPB1F403.1014
VELOCITY(K1+FIRST_U)= VELOCITY(K1+FIRST_U+1) GPB1F404.180
*ENDIF GPB1F403.1016
220 CONTINUE DIA10A1A.345
DIA10A1A.346
C -------------------------------------------------------------------- DIA10A1A.347
CL SECTION 2.3 MEAN PRESSURE WEIGHTED V OVER ADJUSTMENT STEPS DIA10A1A.348
CL * TEMPERATURE. DIA10A1A.349
C -------------------------------------------------------------------- DIA10A1A.350
DIA10A1A.351
IF (L_VADJ_T_DP) THEN DIA10A1A.352
DO 230 K=1,P_LEVELS DIA10A1A.353
K1 = (K-1)*U_FIELD DIA10A1A.354
DO I=FIRST_U,LAST_U GPB1F403.1017
DIA10A1A.356
PKP1 = AKH(K+1) + BKH(K+1)*PSTAR(I) DIA10A1A.357
PK = AKH(K) + BKH(K) *PSTAR(I) DIA10A1A.358
P_EXNER_FULL = P_EXNER_C DIA10A1A.359
& (P_EXNER(I,K+1),P_EXNER(I,K),PKP1,PK,KAPPA) DIA10A1A.360
TEMP_I = THETA(I,K) * P_EXNER_FULL ARS1F304.23
DIA10A1A.362
PKP1 = AKH(K+1) + BKH(K+1)*PSTAR(I+ROW_LENGTH) DIA10A1A.363
PK = AKH(K) + BKH(K) *PSTAR(I+ROW_LENGTH) DIA10A1A.364
P_EXNER_FULL = P_EXNER_C DIA10A1A.365
& (P_EXNER(I+ROW_LENGTH,K+1),P_EXNER(I+ROW_LENGTH,K), DIA10A1A.366
& PKP1,PK,KAPPA) DIA10A1A.367
TEMP_IP1 = THETA(I+ROW_LENGTH,K) * P_EXNER_FULL ARS1F304.24
DIA10A1A.369
FIELD(K1+I) = VELOCITY(K1+I) * 0.5 * (TEMP_I + TEMP_IP1) DIA10A1A.370
& * FACTOR ARS1F402.8
DIA10A1A.371
END DO DIA10A1A.372
230 CONTINUE DIA10A1A.373
DIA10A1A.374
CALL COPYDIAG_3D
(STASHWORK(LOC_VADJ_T_DP),FIELD,FIRST_U, ARS1F304.25
& LAST_U,U_FIELD,ROW_LENGTH,P_LEVELS, ARS1F304.26
& STLIST(1,INDEX_VADJ_T_DP),LEN_STLIST, DIA10A1A.377
& STASH_LEVELS, DIA10A1A.378
& NUM_STASH_LEVELS+1, GPB1F403.1018
& im_ident,10,208, GPB1F403.1019
*CALL ARGPPX
GPB1F403.1020
& ICODE,CMESSAGE) GPB1F403.1021
IF(ICODE.GT.0) THEN DIA10A1A.380
RETURN DIA10A1A.381
END IF DIA10A1A.382
END IF DIA10A1A.383
DIA10A1A.384
C -------------------------------------------------------------------- DIA10A1A.385
CL SECTION 2.4 MEAN PRESSURE WEIGHTED V OVER ADJUSTMENT STEPS DIA10A1A.386
CL * HUMIDITY. DIA10A1A.387
C -------------------------------------------------------------------- DIA10A1A.388
DIA10A1A.389
IF (L_VADJ_Q_DP) THEN DIA10A1A.390
DO 240 K=1,Q_LEVELS DIA10A1A.391
K1 = (K-1)*U_FIELD DIA10A1A.392
DO I=FIRST_U,LAST_U GPB1F403.1022
FIELD(K1+I) = VELOCITY(K1+I)*.5* DIA10A1A.394
& (Q(I,K)+Q(I+ROW_LENGTH,K)) DIA10A1A.395
END DO DIA10A1A.396
240 CONTINUE DIA10A1A.397
DIA10A1A.398
CALL COPYDIAG_3D
(STASHWORK(LOC_VADJ_Q_DP),FIELD,FIRST_U, ARS1F304.27
& LAST_U,U_FIELD,ROW_LENGTH,Q_LEVELS, ARS1F304.28
& STLIST(1,INDEX_VADJ_Q_DP),LEN_STLIST, DIA10A1A.401
& STASH_LEVELS, DIA10A1A.402
& NUM_STASH_LEVELS+1, GPB1F403.1023
& im_ident,10,210, GPB1F403.1024
*CALL ARGPPX
GPB1F403.1025
& ICODE,CMESSAGE) GPB1F403.1026
IF(ICODE.GT.0) THEN DIA10A1A.404
RETURN DIA10A1A.405
END IF DIA10A1A.406
END IF DIA10A1A.407
DIA10A1A.408
C END IF FOR V DIAGNOSTICS DIA10A1A.409
END IF DIA10A1A.410
DIA10A1A.411
CL ------------------------------------------------------------------- DIA10A1A.412
CL SECTION 3. DIAGNOSTICS NOT INVOLVING MEAN HORIZONTAL VELOCITIES. DIA10A1A.413
CL ------------------------------------------------------------------- DIA10A1A.414
DIA10A1A.415
C -------------------------------------------------------------------- DIA10A1A.416
CL SECTION 3.1 EFFECTIVE EARTH RADIUS AT MODEL LEVELS. DIA10A1A.417
C -------------------------------------------------------------------- DIA10A1A.418
DIA10A1A.419
IF (L_EFF_RADIUS) THEN DIA10A1A.420
CALL COPYDIAG_3D
(STASHWORK(LOC_EFF_RADIUS),RS,FIRST_POINT, DIA10A1A.421
& LAST_POINT,P_FIELD,ROW_LENGTH,P_LEVELS, DIA10A1A.422
& STLIST(1,INDEX_EFF_RADIUS),LEN_STLIST, DIA10A1A.423
& STASH_LEVELS, DIA10A1A.424
& NUM_STASH_LEVELS+1, GPB1F403.1027
& im_ident,10,203, GPB1F403.1028
*CALL ARGPPX
GPB1F403.1029
& ICODE,CMESSAGE) GPB1F403.1030
IF(ICODE.GT.0) THEN DIA10A1A.426
RETURN DIA10A1A.427
END IF DIA10A1A.428
END IF DIA10A1A.429
DIA10A1A.430
C -------------------------------------------------------------------- DIA10A1A.431
CL SECTION 3.2 MEAN ETADOT IN ADJUSTMENT STEPS. DIA10A1A.432
C -------------------------------------------------------------------- DIA10A1A.433
DIA10A1A.434
IF (L_ETADOT) THEN DIA10A1A.435
CALL COPYDIAG_3D
(STASHWORK(LOC_ETADOT),ETADOT,FIRST_POINT, DIA10A1A.436
& LAST_POINT,P_FIELD,ROW_LENGTH,P_LEVELS, DIA10A1A.437
& STLIST(1,INDEX_ETADOT),LEN_STLIST, DIA10A1A.438
& STASH_LEVELS, DIA10A1A.439
& NUM_STASH_LEVELS+1, GPB1F403.1031
& im_ident,10,204, GPB1F403.1032
*CALL ARGPPX
GPB1F403.1033
& ICODE,CMESSAGE) GPB1F403.1034
IF(ICODE.GT.0) THEN DIA10A1A.441
RETURN DIA10A1A.442
END IF DIA10A1A.443
DIA10A1A.444
CL CALL SET_LEVELS_LIST TO DETERMINE WHICH LEVELS OUTPUT ARRAY WAS DIA10A1A.445
CL REQUESTED ON. DIA10A1A.446
DIA10A1A.447
CALL SET_LEVELS_LIST
(P_LEVELS,LEN_STLIST, DIA10A1A.448
& STLIST(1,INDEX_ETADOT), DIA10A1A.449
& LIST,STASH_LEVELS,NUM_STASH_LEVELS+1,ICODE, DIA10A1A.450
& CMESSAGE) DIA10A1A.451
K=0 DIA10A1A.452
CL CHECK TO SEE IF LEVEL 1 WAS REQUESTED AS THIS NEEDS SPECIAL TREATMENT DIA10A1A.453
IF(LIST(1)) THEN DIA10A1A.454
K=K+1 DIA10A1A.455
*IF DEF,STRAT DIA10A1A.456
CL IF STRATOSPHERIC MODEL THEN LEVEL 1 HOLDS ETADOT VALUES SO DIA10A1A.457
CL MASS-WEIGHTING NEEDS REMOVING. DIA10A1A.458
C SCALAR HOLDS DELTA ETA / RADIUS OF EARTH SQUARED. DIA10A1A.459
SCALAR= ((AK(1)-AKH(1))/PREF+ DIA10A1A.460
& (BK(1)-BKH(1)))/(A*A) DIA10A1A.461
C SCALAR_A HOLDS DIFFERENCE IN AK PART OF DP DIA10A1A.462
SCALAR_A= AK(1)-AKH(1) DIA10A1A.463
C SCALAR_B HOLDS DIFFERENCE IN BK PART OF DP DIA10A1A.464
SCALAR_B= BK(1)-BKH(1) DIA10A1A.465
C REMOVE A*A*DP/DETA FROM ETADOT FIELD. DIA10A1A.466
DO I=FIRST_P-1,LAST_P-1 GPB1F403.1035
STASHWORK(LOC_ETADOT+I) = STASHWORK(LOC_ETADOT+I)*SCALAR DIA10A1A.468
& /(SCALAR_A+SCALAR_B*PSTAR(I+1)) DIA10A1A.469
END DO DIA10A1A.470
*ELSE DIA10A1A.471
CL IF NOT STRATOSPHERIC MODEL THEN SET OUTPUT ETADOT FIELD TO ZERO. DIA10A1A.472
DO I=0,P_FIELD-1 DIA10A1A.473
STASHWORK(LOC_ETADOT+I) = 0. DIA10A1A.474
END DO DIA10A1A.475
*ENDIF DIA10A1A.476
END IF DIA10A1A.477
CL NOW REMOVE MASS-WEIGHT FROM ALL OTHER REQUESTED LEVELS. DIA10A1A.478
DO LEVEL=2,P_LEVELS DIA10A1A.479
IF(LIST(LEVEL)) THEN DIA10A1A.480
C SCALAR HOLDS DELTA ETA / RADIUS OF EARTH SQUARED. DIA10A1A.481
SCALAR=((AK(LEVEL)-AK(LEVEL-1))/PREF DIA10A1A.482
& +(BK(LEVEL)-BK(LEVEL-1))) DIA10A1A.483
& /(A*A) DIA10A1A.484
C SCALAR_A HOLDS DIFFERENCE IN AK PART OF DP DIA10A1A.485
SCALAR_A= AK(LEVEL)-AK(LEVEL-1) DIA10A1A.486
C SCALAR_B HOLDS DIFFERENCE IN BK PART OF DP DIA10A1A.487
SCALAR_B= BK(LEVEL)-BK(LEVEL-1) DIA10A1A.488
C REMOVE A*A*DP/DETA FROM ETADOT FIELD. DIA10A1A.489
DO I=FIRST_P-1,LAST_P-1 GPB1F403.1036
STASHWORK(LOC_ETADOT+K*P_FIELD+I) = DIA10A1A.491
& STASHWORK(LOC_ETADOT+K*P_FIELD+I) DIA10A1A.492
& *SCALAR DIA10A1A.493
& /(SCALAR_A+SCALAR_B*PSTAR(I+1)) DIA10A1A.494
END DO DIA10A1A.495
K=K+1 DIA10A1A.496
END IF DIA10A1A.497
END DO DIA10A1A.498
END IF DIA10A1A.499
DIA10A1A.500
C -------------------------------------------------------------------- DIA10A1A.501
CL SECTION 3.3 SURFACE PRESSURE TENDENCY. DIA10A1A.502
C -------------------------------------------------------------------- DIA10A1A.503
DIA10A1A.504
IF (L_PRESS_TEND) THEN DIA10A1A.505
RECIP_TIMESTEP = 1./ADVECTION_TIMESTEP DIA10A1A.506
DO I=FIRST_P,LAST_P GPB1F403.1037
FIELD(I) = (PSTAR(I) - PSTAR_OLD(I))*RECIP_TIMESTEP DIA10A1A.508
END DO DIA10A1A.509
CALL COPYDIAG
(STASHWORK(LOC_PRESS_TEND),FIELD,FIRST_POINT, DIA10A1A.510
& LAST_POINT,P_FIELD,ROW_LENGTH, GPB1F403.1038
& im_ident,10,205, GPB1F403.1039
*CALL ARGPPX
GPB1F403.1040
& ICODE,CMESSAGE) GPB1F403.1041
GPB1F403.1042
IF (ICODE .GT. 0) RETURN GPB1F403.1043
ENDIF DIA10A1A.512
DIA10A1A.513
C -------------------------------------------------------------------- DIA10A1A.514
CL SECTION 3.4 GEOPOTENTIAL. DIA10A1A.515
CL THIS DIAGNOSTIC ACCUMULATED IN ADJ_CTL OVER ALL P_LEVELS DIA10A1A.516
CL USED IN DIAG10_B TO CALCULATE ENERGY. DIA10A1A.517
CL ALREADY HELD IN STASHWORK. DIA10A1A.518
C -------------------------------------------------------------------- DIA10A1A.519
DIA10A1A.520
CL END OF ROUTINE DIAG10_A DIA10A1A.521
DIA10A1A.522
RETURN DIA10A1A.523
END DIA10A1A.524
*ENDIF DIA10A1A.525
*ENDIF AJC0F405.285