*IF DEF,A12_1B UVADV1B.2
C ******************************COPYRIGHT****************************** GTS2F400.10891
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.10892
C GTS2F400.10893
C Use, duplication or disclosure of this code is subject to the GTS2F400.10894
C restrictions as set forth in the contract. GTS2F400.10895
C GTS2F400.10896
C Meteorological Office GTS2F400.10897
C London Road GTS2F400.10898
C BRACKNELL GTS2F400.10899
C Berkshire UK GTS2F400.10900
C RG12 2SZ GTS2F400.10901
C GTS2F400.10902
C If no contract has been raised with this copy of the code, the use, GTS2F400.10903
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.10904
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.10905
C Modelling at the above address. GTS2F400.10906
C ******************************COPYRIGHT****************************** GTS2F400.10907
C GTS2F400.10908
CLL SUBROUTINE UV_ADV ------------------------------------------- UVADV1B.3
CLL UVADV1B.4
CLL PURPOSE: UVADV1B.5
CLL CALCULATES MASS-WEIGHTED INCREMENTS TO U AND V DUE TO UVADV1B.6
CLL ADVECTION BY USING EQUATIONS (37) AND (38) TO CALCULATE UVADV1B.7
CLL PROVISIONAL VALUES OF U AND V AT THE NEW TIME-LEVEL, AND THEN UVADV1B.8
CLL RECALCULATING THE ADVECTION TERMS ON THE RIGHT-HAND SIDE OF (41) UVADV1B.9
CLL AND (42) USING THESE PROVISIONAL VALUES. THE CORIOLIS TERMS UVADV1B.10
CLL ASSOCIATED WITH THE VERTICAL VELOCITY ARE CALCULATED AND INCLUDED UVADV1B.11
CLL IN THE INCREMENTS. THE FINAL INCREMENTS ARE CALCULATED AS IN UVADV1B.12
CLL EQUATIONS (41) AND (42). IF RUNNING A GLOBAL MODEL POLAR_UV IS UVADV1B.13
CLL CALLED TO UPDATE POLAR VALUES. UVADV1B.14
CLL UVADV1B.15
CLL CHANGES INCLUDE:- UVADV1B.16
CLL U_MEAN AND V_MEAN FIELDS NOT OVER-WRITTEN WHEN INTERPOLATION TO UVADV1B.17
CLL U_GRID PERFORMED. ETADOT AND RS FIELDS INTERPOLATED TO U_GRID INSIDE UVADV1B.18
CLL THIS ROUTINE INSTEAD OF INSIDE ADV_CTL. THIS COSTS 8 EXTRA UVADV1B.19
CLL HORIZONTAL FIELDS BUT ALLOWS ROUTINE TO BE CALLED BEFORE TH_ADV SO UVADV1B.20
CLL THAT OMEGA CALCULATED HERE CAN BE USED INSIDE TH_ADV TO CALCULATE UVADV1B.21
CLL EXTRA THERMODYNAMIC TERM. UVADV1B.22
CLL UVADV1B.23
CLL INCLUSION OF L_SECOND TO CHOOSE CHEAPER SECOND ORDER ADVECTION UVADV1B.24
CLL SCHEME ALONG WITH REMOVAL OF CODE PREVIOUSLY UNDER *DEF FORECAST. UVADV1B.25
CLL UVADV1B.27
CLL NOT SUITABLE FOR SINGLE COLUMN USE. UVADV1B.28
CLL VERSION FOR CRAY Y-MP UVADV1B.29
CLL UVADV1B.30
CLL WRITTEN M.H MAWSON. UVADV1B.31
CLL UVADV1B.32
CLL MODEL MODIFICATION HISTORY FROM MODEL VERSION 3.0: UVADV1B.33
CLL VERSION DATE UVADV1B.34
CLL 3.4 06/08/94 New release 1B with error in second order term UVADV1B.35
CLL corrected in addition to faster multi-tasked UVADV1B.36
CLL code achieved by inserting micro tasking UVADV1B.37
CLL directives and code restructuring UVADV1B.38
CLL to improve parallel efficiency on C90. UVADV1B.39
CLL X_FIELD passed as argument to reduce memory UVADV1B.40
CLL usage when 2nd order advection used. UVADV1B.41
CLL Authors: A. Dickinson, D. Salmond UVADV1B.42
CLL Reviewer: M. Mawson UVADV1B.43
CLL 3.4 28/10/94 Argument LLINTS added and passed to V_CORIOL UVADV1B.44
CLL Argument LWHITBROM added and passed to ADV_U_GD UVADV1B.45
CLL R.T.H.Barnes pp. S.J.Swarbrick UVADV1B.46
! 3.5 28/03/95 MPP code: Change updateable area and APB0F305.1030
! add boundary swaps. P.Burton APB0F305.1031
CLL UVADV1B.47
CLL 4.0 14/02/95 Option to run with half_timestep at top level ATD1F400.988
CLL removed. Author: T.Davies, Reviewer: M. Mawson ATD1F400.989
! 4.1 29/04/96 Remove MPP code (new QTADV1C version for MPP) APB0F401.1212
! and add TYPFLDPT arguments P.Burton APB0F401.1213
!LL 4.3 24/04/97 Fix to 4th order calculations - GPB5F403.41
!LL Calculation of NUY via ISMIN P.Burton GPB5F403.42
!LL 4.5 05/05/98 Recode -DEF,CRAY loops to find minimum of NUX/NUY GRB0F405.59
!LL to vectorize on Fujitsu VPP700. Also improve GRB0F405.60
!LL efficiency in section 3.3. RBarnes@ecmwf.int GRB0F405.61
!LL GRB0F405.62
CLL PROGRAMMING STANDARD: UNIFIED MODEL DOCUMENTATION PAPER NO. 4, UVADV1B.48
CLL STANDARD B. UVADV1B.49
CLL UVADV1B.50
CLL SYSTEM COMPONENTS COVERED: P122 UVADV1B.51
CLL UVADV1B.52
CLL SYSTEM TASK: P1 UVADV1B.53
CLL UVADV1B.54
CLL DOCUMENTATION: THE EQUATIONS USED ARE (37-38) AND (41-42) UVADV1B.55
CLL IN UNIFIED MODEL DOCUMENTATION PAPER NO. 10 UVADV1B.56
CLL M.J.P. CULLEN,T.DAVIES AND M.H.MAWSON UVADV1B.57
CLL UVADV1B.58
CLLEND------------------------------------------------------------- UVADV1B.59
UVADV1B.60
C*L ARGUMENTS:--------------------------------------------------- UVADV1B.61
SUBROUTINE UV_ADV 2,59UVADV1B.62
& (U,V,PSTAR_OLD,PSTAR,U_MEAN,V_MEAN,SEC_U_LATITUDE, UVADV1B.63
& ETADOT_MEAN,RS,DELTA_AK,DELTA_BK,AK,BK,F1,F2, UVADV1B.64
& LATITUDE_STEP_INVERSE,ADVECTION_TIMESTEP,NU_BASIC, UVADV1B.65
& LONGITUDE_STEP_INVERSE,U_FIELD,P_FIELD, APB0F401.1214
& ROW_LENGTH,P_LEVELS, APB0F401.1215
*CALL ARGFLDPT
APB0F401.1216
& COS_U_LONGITUDE,SIN_U_LONGITUDE,SEC_P_LATITUDE, APB0F401.1217
& AKH,BKH,OMEGA,L_SECOND,LLINTS, ATD1F400.990
& LWHITBROM,X_FIELD) UVADV1B.70
UVADV1B.71
IMPLICIT NONE UVADV1B.72
UVADV1B.73
INTEGER UVADV1B.74
& P_FIELD !IN DIMENSION OF FIELDS ON PRESSSURE GRID. UVADV1B.75
&, U_FIELD !IN DIMENSION OF FIELDS ON VELOCITY GRID UVADV1B.76
&, X_FIELD !IN 1 IF 2ND ORDER ELSE U_FIELD UVADV1B.77
&, P_LEVELS !IN NUMBER OF PRESSURE LEVELS. UVADV1B.79
&, ROW_LENGTH !IN NUMBER OF POINTS PER ROW UVADV1B.81
APB0F401.1218
! All TYPFLDPT arguments are intent IN APB0F401.1219
*CALL TYPFLDPT
APB0F401.1220
UVADV1B.82
C LOGICAL VARIABLE UVADV1B.83
LOGICAL UVADV1B.84
& L_SECOND ! SET TO TRUE IF NU_BASIC IS ZERO. UVADV1B.85
& ,LLINTS ! Switch for linear TS calc in CALC_TS UVADV1B.88
& ,LWHITBROM ! Switch for White & Bromley terms UVADV1B.89
UVADV1B.90
REAL UVADV1B.91
& U_MEAN(U_FIELD,P_LEVELS) !IN AVERAGED MASS-WEIGHTED U VELOCITY UVADV1B.92
& ! FROM ADJUSTMENT STEP HELD AT U UVADV1B.93
& ! POINTS. UVADV1B.94
&,V_MEAN(U_FIELD,P_LEVELS) !IN AVERAGED MASS-WEIGHTED V VELOCITY UVADV1B.95
& ! * COS(LAT) FROM ADJUSTMENT STEP UVADV1B.96
&,ETADOT_MEAN(P_FIELD,P_LEVELS) !IN AVERAGED MASS-WEIGHTED UVADV1B.97
& !VERTICAL VELOCITY FROM ADJUSTMENT STEP UVADV1B.98
UVADV1B.99
REAL UVADV1B.100
& U(U_FIELD,P_LEVELS) !INOUT IN U FIELD, UVADV1B.101
& ! OUT MASS-WEIGHTED U FIELD. UVADV1B.102
&,V(U_FIELD,P_LEVELS) !INOUT IN V FIELD, UVADV1B.103
& ! OUT MASS-WEIGHTED V FIELD. UVADV1B.104
UVADV1B.105
REAL UVADV1B.106
& PSTAR(U_FIELD) !IN PSTAR FIELD AT NEW TIME-LEVEL ON UVADV1B.107
& ! U GRID. UVADV1B.108
&,PSTAR_OLD(U_FIELD) !IN PSTAR AT PREVIOUS TIME-LEVEL ON UVADV1B.109
& ! U GRID. UVADV1B.110
&,RS(P_FIELD,P_LEVELS) !IN RS FIELD. UVADV1B.111
&,AK(P_LEVELS) !IN FIRST TERM IN HYBRID CO-ORDS. UVADV1B.112
&,BK(P_LEVELS) !IN SECOND TERM IN HYBRID CO-ORDS. UVADV1B.113
&,DELTA_AK(P_LEVELS) !IN LAYER THICKNESS UVADV1B.114
&,DELTA_BK(P_LEVELS) !IN LAYER THICKNESS UVADV1B.115
&,AKH(P_LEVELS+1) !IN HYBRID CO-ORDINATE AT HALF LEVELS UVADV1B.116
&,BKH(P_LEVELS+1) !IN HYBRID CO-ORDINATE AT HALF LEVELS UVADV1B.117
&,SEC_U_LATITUDE(U_FIELD) !IN 1/COS(LAT) AT U POINTS (2-D ARRAY) UVADV1B.118
&,SEC_P_LATITUDE(U_FIELD) !IN 1/COS(LAT) AT P POINTS (2-D ARRAY) UVADV1B.119
&,SIN_U_LONGITUDE(ROW_LENGTH) !IN SIN(LONGITUDE) AT U POINTS. UVADV1B.120
&,COS_U_LONGITUDE(ROW_LENGTH) !IN COS(LONGITUDE) AT U POINTS. UVADV1B.121
UVADV1B.122
REAL UVADV1B.123
& LONGITUDE_STEP_INVERSE !IN 1/(DELTA LAMDA) UVADV1B.124
&,LATITUDE_STEP_INVERSE !IN 1/(DELTA PHI) UVADV1B.125
&,ADVECTION_TIMESTEP !IN UVADV1B.126
&,NU_BASIC !IN STANDARD NU TERM FOR MODEL RUN. UVADV1B.127
&,F1(U_FIELD) !IN A CORIOLIS TERM (SEE DOCUMENTATION) UVADV1B.128
&,F2(U_FIELD) !IN A CORIOLIS TERM (SEE DOCUMENTATION) UVADV1B.129
UVADV1B.130
REAL UVADV1B.131
& OMEGA(U_FIELD,P_LEVELS) !OUT TRUE VERTICAL VELOCITY UVADV1B.132
C*--------------------------------------------------------------------- UVADV1B.133
UVADV1B.134
C*L DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE----------------- UVADV1B.135
C DEFINE LOCAL ARRAYS: 35 ARE REQUIRED UVADV1B.136
REAL UVADV1B.137
& RS_U(U_FIELD,P_LEVELS) ! RS AT U POINTS FOR CURRENT LEVE UVADV1B.138
&,ETADOT_U(U_FIELD,P_LEVELS+1) ! ETADOT AT U POINTS FOR CURRENT LE UVADV1B.139
&,U_MEAN_P(U_FIELD,P_LEVELS) ! U MEAN AT P POINTS FOR CURRENT LEVEL UVADV1B.140
& ! WITH FIRST POINT OF FIELD NOW UVADV1B.141
& ! BEING FIRST P POINT ON SECOND ROW UVADV1B.142
& ! OF P-GRID. UVADV1B.143
&,V_MEAN_P(U_FIELD,P_LEVELS) ! V MEAN AT P POINTS FOR CURRENT LEVEL UVADV1B.144
& ! WITH FIRST POINT OF FIELD NOW UVADV1B.145
& ! BEING FIRST P POINT ON SECOND ROW UVADV1B.146
& ! OF P-GRID. UVADV1B.147
UVADV1B.148
REAL UVADV1B.149
& U_FIRST_INC(U_FIELD) ! HOLDS U INCREMENT UVADV1B.150
& !RETURNED BY FIRST CALL TO ADV_U_GD UVADV1B.151
&,U_SECOND_INC(U_FIELD) ! HOLDS U INCREMENT UVADV1B.152
& !RETURNED BY SECOND CALL TO ADV_U_GD UVADV1B.153
&,U_PROV(U_FIELD,P_LEVELS) ! HOLDS PROVISIONAL VALUE OF UVADV1B.154
UVADV1B.155
REAL UVADV1B.156
& V_FIRST_INC(U_FIELD) ! HOLDS V INCREMENT UVADV1B.157
& !RETURNED BY FIRST CALL TO ADV_U_GD UVADV1B.158
&,V_SECOND_INC(U_FIELD) ! HOLDS V INCREMENT UVADV1B.159
& !RETURNED BY SECOND CALL TO ADV_U_GD UVADV1B.160
&,V_PROV(U_FIELD,P_LEVELS) ! HOLDS PROVISIONAL VALUE OF UVADV1B.161
UVADV1B.162
C NP DENOTES NORTH POLE, SP DENOTES SOUTH POLE. UVADV1B.163
C POLAR INCREMENT ARRAYS ARE NOT USED IN LIMITED AREA MODEL BUT TO UVADV1B.164
C REMOVE THEM WOULD LEAD TO MODIFYING THE NUMBER OF VARIABLES UVADV1B.165
C PASSED TO ADV_U_GD. THE RETENTION OF THESE ARRAYS ADDS ONLY UVADV1B.166
C 12*ROW_LENGTH TO THE SPACE USED AND NOTHING TO THE CALCULATION UVADV1B.167
C TIME AS ALL USES OF THEM IN CALCULATION ARE CONTROLLED BY *IF'S. UVADV1B.168
UVADV1B.169
REAL UVADV1B.170
& NUX(X_FIELD,P_LEVELS) ! COURANT NUMBER DEPENDENT NU AT U POI UVADV1B.171
& ! USED IN EAST-WEST ADVECTION. UVADV1B.172
&,NUY(X_FIELD,P_LEVELS) ! COURANT NUMBER DEPENDENT NU AT U POI UVADV1B.173
& ! USED IN NORTH-SOUTH ADVECTION. UVADV1B.174
UVADV1B.175
REAL UVADV1B.176
& DELTA_AKH(P_LEVELS+1) ! LAYER THICKNESS AK(K) - AK(K-1) UVADV1B.177
&,DELTA_BKH(P_LEVELS+1) ! LAYER THICKNESS BK(K) - BK(K-1) UVADV1B.178
&,WK(U_FIELD) ! WK AS IN EQUATION (46). UVADV1B.179
UVADV1B.180
C*--------------------------------------------------------------------- UVADV1B.181
C DEFINE LOCAL VARIABLES UVADV1B.182
INTEGER UVADV1B.183
& U_POINTS_UPDATE ! NUMBER OF U POINTS TO BE UPDATED. UVADV1B.184
& ! = (ROWS-1)*ROWLENGTH UVADV1B.185
UVADV1B.188
C REAL SCALARS UVADV1B.189
REAL UVADV1B.190
& SCALAR1,SCALAR2,SCALAR3,SCALAR4,TIMESTEP UVADV1B.191
UVADV1B.192
C COUNT VARIABLES FOR DO LOOPS ETC. UVADV1B.193
INTEGER UVADV1B.194
& I,I1,J,KP,KM,IK,K APB0F401.1221
UVADV1B.196
C*L EXTERNAL SUBROUTINE CALLS:--------------------------------------- UVADV1B.197
EXTERNAL ADV_U_GD,POLAR_UV,V_CORIOL,UV_TO_P,P_TO_UV UVADV1B.198
*IF DEF,CRAY UVADV1B.199
INTEGER ISMIN UVADV1B.200
EXTERNAL ISMIN UVADV1B.201
*ENDIF UVADV1B.202
C*--------------------------------------------------------------------- UVADV1B.203
UVADV1B.204
CL MAXIMUM VECTOR LENGTH ASSUMED IS (ROWS+1) * ROWLENGTH UVADV1B.205
CL--------------------------------------------------------------------- UVADV1B.206
CL INTERNAL STRUCTURE INCLUDING SUBROUTINE CALLS: UVADV1B.207
CL--------------------------------------------------------------------- UVADV1B.208
CL UVADV1B.209
CL--------------------------------------------------------------------- UVADV1B.210
CL SECTION 1. INITIALISATION UVADV1B.211
CL--------------------------------------------------------------------- UVADV1B.212
C INCLUDE LOCAL CONSTANTS FROM GENERAL CONSTANTS BLOCK UVADV1B.213
UVADV1B.214
U_POINTS_UPDATE = upd_U_ROWS*ROW_LENGTH APB0F401.1222
DO K=1,P_LEVELS UVADV1B.218
CL INTERPOLATE RS ONTO U GRID. UVADV1B.219
CALL P_TO_UV
(RS(1,K),RS_U(1,K),P_FIELD,U_FIELD,ROW_LENGTH, UVADV1B.220
& tot_P_ROWS) APB0F401.1223
ENDDO UVADV1B.222
UVADV1B.223
CL INTERPOLATE ETADOT ONTO U GRID AND INCLUDE BOTTOM AND TOP UVADV1B.224
CL BOUNDARY CONDITION UVADV1B.225
UVADV1B.226
DO K =2, P_LEVELS UVADV1B.227
CALL P_TO_UV
(ETADOT_MEAN(1,K),ETADOT_U(1,K),P_FIELD,U_FIELD, UVADV1B.228
& ROW_LENGTH,tot_P_ROWS) APB0F401.1224
END DO UVADV1B.230
! Loop over field APB0F401.1225
DO I = FIRST_VALID_PT,LAST_U_VALID_PT APB0F401.1226
ETADOT_U(I,1) = 0. UVADV1B.232
ETADOT_U(I,P_LEVELS+1) = 0. UVADV1B.233
END DO UVADV1B.234
UVADV1B.235
IF (LWHITBROM) THEN UVADV1B.236
CL CALCULATE BRSP TERM AT LEVEL K UVADV1B.237
C STORE IN OMEGA TO SAVE WORKSPACE UVADV1B.238
UVADV1B.239
K=1 UVADV1B.240
! Loop over field APB0F401.1227
DO I=FIRST_VALID_PT,LAST_U_VALID_PT APB0F401.1228
OMEGA(I,K)=(3.*RS_U(I,K)+RS_U(I,K+1))*(RS_U(I,K)-RS_U(I,K+1)) UVADV1B.242
& *BKH(K+1)*.25*(PSTAR(I)-PSTAR_OLD(I)) UVADV1B.243
ENDDO UVADV1B.244
K=P_LEVELS UVADV1B.245
! Loop over field APB0F401.1229
DO I=FIRST_VALID_PT,LAST_U_VALID_PT APB0F401.1230
OMEGA(I,K)=-(3.*RS_U(I,K)+RS_U(I,K-1))*(RS_U(I,K)-RS_U(I,K-1)) UVADV1B.247
& *BKH(K)*.25*(PSTAR(I)-PSTAR_OLD(I)) UVADV1B.248
ENDDO UVADV1B.249
UVADV1B.250
DO K=2,P_LEVELS -1 UVADV1B.251
! Loop over field APB0F401.1231
DO I=FIRST_VALID_PT,LAST_U_VALID_PT APB0F401.1232
OMEGA(I,K)=((3.*RS_U(I,K)+RS_U(I,K+1)) UVADV1B.253
& *(RS_U(I,K)-RS_U(I,K+1))*BKH(K+1) UVADV1B.254
& *.25*(PSTAR(I)-PSTAR_OLD(I))) UVADV1B.255
& -((3.*RS_U(I,K)+RS_U(I,K-1)) UVADV1B.256
& *(RS_U(I,K)-RS_U(I,K-1))*BKH(K) UVADV1B.257
& *.25*(PSTAR(I)-PSTAR_OLD(I))) UVADV1B.258
ENDDO UVADV1B.259
UVADV1B.260
ENDDO UVADV1B.261
END IF UVADV1B.262
UVADV1B.263
CFPP$ NOCONCUR UVADV1B.274
DO I=2,P_LEVELS ATD1F400.992
DELTA_AKH(I) = AK(I) - AK(I-1) UVADV1B.276
DELTA_BKH(I) = BK(I) - BK(I-1) UVADV1B.277
END DO ATD1F400.993
C THESE ZERO VALUES SAVE HAVING TO PASS THE ZERO VERTICAL VELOCITIES UVADV1B.279
C ON LOWER AND UPPER BOUNDARIES TO V_CORIOL AS THE ZERO VELOCITIES ARE UVADV1B.280
C NOT HELD. (SEE CALL TO V_CORIOL IN SECTION 3.3) UVADV1B.281
DELTA_AKH(1) = 0. UVADV1B.282
DELTA_BKH(1) = 0. UVADV1B.283
DELTA_AKH(P_LEVELS+1) = 0. UVADV1B.284
DELTA_BKH(P_LEVELS+1) = 0. UVADV1B.285
UVADV1B.286
CL--------------------------------------------------------------------- UVADV1B.287
CL SECTION 2. ADVECTION OF U AND V. UVADV1B.288
CL SECTION 2 WILL CALCULATE PROVISIONAL VALUES OF UVADV1B.289
CL U AND V. SECTION 3 WILL CALCULATE FINAL VALUES. UVADV1B.290
CL--------------------------------------------------------------------- UVADV1B.291
UVADV1B.292
CL LOOP OVER P_LEVELS. UVADV1B.293
cmic$ parallel shared (advection_timestep, akh, bkh) UVADV1B.294
cmic$* shared(cos_u_longitude,sin_u_longitude) UVADV1B.295
cmic$* shared(longitude_step_inverse,latitude_step_inverse) UVADV1B.296
cmic$* shared(f1,f2,omega,delta_akh,delta_bkh,ak,bk) UVADV1B.297
cmic$* shared (delta_ak, delta_bk) UVADV1B.298
cmic$* shared (etadot_u, l_second, lwhitbrom, llints) UVADV1B.299
cmic$* shared (nu_basic, nux, nuy) UVADV1B.301
cmic$* shared (p_field, pstar) UVADV1B.302
cmic$* shared (pstar_old, p_levels) UVADV1B.303
cmic$* shared (row_length,rs_u, sec_p_latitude, sec_u_latitude) APB0F401.1233
*CALL CMICFLD
APB0F401.1234
cmic$* shared (u,v, u_field, u_mean) UVADV1B.307
cmic$* shared (v_mean) UVADV1B.308
cmic$* private (u_first_inc,v_first_inc) UVADV1B.309
cmic$* shared (u_prov,v_prov) UVADV1B.310
cmic$* shared (u_mean_p,v_mean_p) UVADV1B.311
cmic$* private (const1, i, i1,wk) UVADV1B.312
cmic$* private (ik, j, k, km, kp, kappa_dum ) UVADV1B.313
cmic$* private (omega_p, p_exl_dum, p_exner_full, p_exu_dum, pk) UVADV1B.314
cmic$* private (pk1, pl_dum, pu_dum, scalar1, scalar2) UVADV1B.315
cmic$* private (scalar3,scalar4) UVADV1B.316
cmic$* private (u_second_inc, v_second_inc, timestep) UVADV1B.317
cmic$ do parallel UVADV1B.318
UVADV1B.319
DO K=1,P_LEVELS ATD1F400.994
UVADV1B.322
TIMESTEP = ADVECTION_TIMESTEP UVADV1B.323
UVADV1B.325
CL--------------------------------------------------------------------- UVADV1B.326
CL SECTION 2.0 INTERPOLATE U_MEAN AND V_MEAN TO P GRID. UVADV1B.327
CL INTERPOLATE RS AND ETADOT TO U GRID. UVADV1B.328
CL--------------------------------------------------------------------- UVADV1B.329
UVADV1B.330
CL INTERPOLATE U_MEAN ONTO P GRID. UVADV1B.331
UVADV1B.332
CALL UV_TO_P
(U_MEAN(1,K),U_MEAN_P(1,K),U_FIELD,U_FIELD, UVADV1B.333
& ROW_LENGTH,upd_U_ROWS+2) APB0F401.1235
UVADV1B.335
CL INTERPOLATE V_MEAN ONTO P GRID. UVADV1B.336
UVADV1B.337
CALL UV_TO_P
(V_MEAN(1,K),V_MEAN_P(1,K),U_FIELD,U_FIELD, UVADV1B.338
& ROW_LENGTH,upd_U_ROWS+2) APB0F401.1236
UVADV1B.340
C --------------------------------------------------------------------- UVADV1B.341
CL SECTION 2.1 SET NU DEPENDENT ON NU_BASIC AND MAX COURANT UVADV1B.342
CL NUMBER. UVADV1B.343
C --------------------------------------------------------------------- UVADV1B.344
CL IF NU_BASIC NOT EQUAL TO ZERO. UVADV1B.345
IF(.NOT.L_SECOND) THEN UVADV1B.346
CL THEN SET NU DEPENDENT ON NU_BASIC AND MAX UVADV1B.347
CL COURANT NUMBER. UVADV1B.348
CL CALCULATE COURANT NUMBER SQUARED. UVADV1B.349
! Loop over field missing top and bottom rows APB0F401.1237
DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO APB0F401.1238
SCALAR1 = U_MEAN_P(I,K)*LONGITUDE_STEP_INVERSE UVADV1B.351
SCALAR2 = V_MEAN_P(I,K)*LATITUDE_STEP_INVERSE UVADV1B.352
SCALAR3 = TIMESTEP/ UVADV1B.353
& (RS_U(I,K)*RS_U(I,K)*(DELTA_AK(K)+DELTA_BK(K)* UVADV1B.354
& PSTAR_OLD(I))) UVADV1B.355
SCALAR4 = SEC_U_LATITUDE(I)*SCALAR3 UVADV1B.356
SCALAR1 = SCALAR1*SCALAR1 UVADV1B.357
SCALAR2 = SCALAR2*SCALAR2 UVADV1B.358
SCALAR3 = SCALAR3*SCALAR3 UVADV1B.359
SCALAR4 = SCALAR4*SCALAR4 UVADV1B.360
CL CALCULATE NU PARAMETER. UVADV1B.361
UVADV1B.362
NUX(I,K) = (1.- SCALAR4*SCALAR1)*NU_BASIC UVADV1B.363
NUY(I,K) = (1.- SCALAR3*SCALAR2)*NU_BASIC UVADV1B.364
END DO ATD1F400.996
C SET NUX EQUAL TO MINIMUM ALONG EACH ROW UVADV1B.366
DO J=1,upd_U_ROWS APB0F401.1239
I1 = START_POINT_NO_HALO + (J-1)*ROW_LENGTH APB0F401.1240
*IF DEF,CRAY UVADV1B.369
IK = ISMIN
(ROW_LENGTH,NUX(I1,K),1) UVADV1B.370
SCALAR1 = NUX(IK+I1-1,K) UVADV1B.371
*ELSE UVADV1B.372
SCALAR1 = NUX(I1,K) GRB0F405.63
DO I=I1+1,I1+ROW_LENGTH-1 GRB0F405.64
IF(NUX(I,K).LT.SCALAR1) THEN GRB0F405.65
SCALAR1 = NUX(I,K) GRB0F405.66
END IF GRB0F405.67
END DO GRB0F405.68
*ENDIF UVADV1B.378
IF(SCALAR1.LT.0.) SCALAR1 = 0. UVADV1B.379
DO I=I1,I1+ROW_LENGTH-1 ATD1F400.999
NUX(I,K) = SCALAR1 UVADV1B.381
END DO ATD1F400.1000
END DO UVADV1B.383
UVADV1B.384
C SET NUY EQUAL TO MINIMUM ALONG EACH COLUMN UVADV1B.385
DO J=1,ROW_LENGTH UVADV1B.386
I1 = START_POINT_NO_HALO+ J-1 APB0F401.1241
*IF DEF,CRAY UVADV1B.388
IK = ISMIN
(upd_U_ROWS,NUY(I1,K),ROW_LENGTH) APB0F401.1242
SCALAR1 = NUY((IK-1)*ROW_LENGTH+I1,K) GPB5F403.43
*ELSE UVADV1B.391
SCALAR1 = NUY(I1,K) GRB0F405.69
DO I=I1+ROW_LENGTH,END_U_POINT_NO_HALO,ROW_LENGTH GRB0F405.70
IF(NUY(I,K).LT.SCALAR1) THEN GRB0F405.71
SCALAR1 = NUY(I,K) GRB0F405.72
END IF GRB0F405.73
END DO GRB0F405.74
*ENDIF UVADV1B.397
IF(SCALAR1.LT.0.) SCALAR1 = 0. UVADV1B.398
DO I=I1,END_U_POINT_NO_HALO,ROW_LENGTH APB0F401.1244
NUY(I,K) = SCALAR1 UVADV1B.400
END DO UVADV1B.401
END DO UVADV1B.402
END IF UVADV1B.403
UVADV1B.404
C --------------------------------------------------------------------- UVADV1B.405
CL SECTION 2.3 CALL ADV_U_GD TO OBTAIN FIRST INCREMENT DUE TO UVADV1B.406
CL ADVECTION. UVADV1B.407
C --------------------------------------------------------------------- UVADV1B.408
UVADV1B.409
KP=K+1 UVADV1B.410
KM=K-1 UVADV1B.411
IF (K .EQ. P_LEVELS) THEN UVADV1B.412
KP = K UVADV1B.413
END IF UVADV1B.414
IF (K .EQ. 1) THEN UVADV1B.415
KM = K UVADV1B.416
END IF UVADV1B.417
UVADV1B.418
C BRSP IS CURRENTLY HELD IN OMEGA UVADV1B.419
UVADV1B.420
UVADV1B.421
CALL ADV_U_GD
(U(1,KM),U(1,K),U(1,KP), UVADV1B.422
& U_MEAN_P(1,K),V_MEAN_P(1,K), UVADV1B.423
& ETADOT_U(1,K),ETADOT_U(1,K+1), UVADV1B.424
& SEC_U_LATITUDE,U_FIRST_INC, UVADV1B.425
& NUX(1,K),NUY(1,K),U_FIELD, UVADV1B.426
& ROW_LENGTH, APB0F401.1245
*CALL ARGFLDPT
APB0F401.1246
& TIMESTEP,LATITUDE_STEP_INVERSE, UVADV1B.428
& LONGITUDE_STEP_INVERSE,SEC_P_LATITUDE, UVADV1B.429
& OMEGA(1,K),L_SECOND,LWHITBROM) UVADV1B.430
UVADV1B.431
CL CALL ADV_U_GD FOR V. UVADV1B.432
CALL ADV_U_GD
(V(1,KM),V(1,K),V(1,KP), UVADV1B.433
& U_MEAN_P(1,K),V_MEAN_P(1,K), UVADV1B.434
& ETADOT_U(1,K),ETADOT_U(1,K+1), UVADV1B.435
& SEC_U_LATITUDE,V_FIRST_INC, UVADV1B.436
& NUX(1,K),NUY(1,K),U_FIELD, UVADV1B.437
& ROW_LENGTH, APB0F401.1247
*CALL ARGFLDPT
APB0F401.1248
& TIMESTEP,LATITUDE_STEP_INVERSE, UVADV1B.439
& LONGITUDE_STEP_INVERSE,SEC_P_LATITUDE, UVADV1B.440
& OMEGA(1,K),L_SECOND,LWHITBROM) UVADV1B.441
UVADV1B.442
C --------------------------------------------------------------------- UVADV1B.443
CL SECTION 2.4 REMOVE MASS-WEIGHTING FROM INCREMENT AND ADD ONTO UVADV1B.444
CL FIELD TO OBTAIN INTERMEDIATE VALUE. UVADV1B.445
C --------------------------------------------------------------------- UVADV1B.446
UVADV1B.447
DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO APB0F401.1249
SCALAR1 = 1./(RS_U(I,K)*RS_U(I,K) UVADV1B.449
& *(DELTA_AK(K)+DELTA_BK(K)*PSTAR_OLD(I))) UVADV1B.450
U_PROV(I,K) = U(I,K)- U_FIRST_INC(I)*SCALAR1 UVADV1B.451
V_PROV(I,K) = V(I,K)-V_FIRST_INC(I)*SCALAR1 UVADV1B.452
END DO ATD1F400.1002
UVADV1B.454
*IF -DEF,GLOBAL APB2F401.210
CL LIMITED AREA MODEL THEN FORM PROVISIONAL VALUES ON BOUNDARIES UVADV1B.464
CL EQUAL TO FIELD VALUES AT OLD TIME LEVEL. UVADV1B.465
DO I=1,ROW_LENGTH ATD1F400.1003
IK = U_FIELD - ROW_LENGTH + I UVADV1B.467
U_PROV(I,K)= U(I,K) UVADV1B.468
V_PROV(I,K)= V(I,K) UVADV1B.469
U_PROV(IK,K)= U(IK,K) UVADV1B.470
V_PROV(IK,K)= V(IK,K) UVADV1B.471
END DO ATD1F400.1004
*ENDIF UVADV1B.473
UVADV1B.474
enddo UVADV1B.475
*IF DEF,GLOBAL APB2F401.211
! IF GLOBAL MODEL CALCULATE PROVISIONAL POLAR VALUES. APB2F401.212
! CALL POLAR_UV TO FORM PROVISIONAL VALUES. APB2F401.213
APB2F401.214
CALL POLAR_UV
(U_PROV,V_PROV,ROW_LENGTH, APB2F401.215
& U_FIELD,P_LEVELS, APB2F401.216
*CALL ARGFLDPT
APB2F401.217
& COS_U_LONGITUDE,SIN_U_LONGITUDE) APB2F401.218
*ENDIF APB2F401.219
cmic$ do parallel UVADV1B.476
DO K=1,P_LEVELS ATD1F400.1005
CL--------------------------------------------------------------------- UVADV1B.478
CL SECTION 3. Second advection step. UVADV1B.479
CL--------------------------------------------------------------------- UVADV1B.480
UVADV1B.482
TIMESTEP = ADVECTION_TIMESTEP UVADV1B.483
C --------------------------------------------------------------------- UVADV1B.487
CL SECTION 3.1 CALL ADV_U_GD TO OBTAIN SECOND INCREMENT DUE TO UVADV1B.488
CL ADVECTION. UVADV1B.489
C --------------------------------------------------------------------- UVADV1B.490
UVADV1B.491
KP=K+1 UVADV1B.492
KM=K-1 UVADV1B.493
IF (K .EQ. P_LEVELS) THEN UVADV1B.494
KP = K UVADV1B.495
END IF UVADV1B.496
IF (K .EQ. 1) THEN UVADV1B.497
KM = K UVADV1B.498
END IF UVADV1B.499
UVADV1B.500
CL CALL ADV_U_GD FOR U. UVADV1B.501
UVADV1B.502
C BRSP IS CURRENTLY HELD IN OMEGA UVADV1B.503
UVADV1B.504
CALL ADV_U_GD
(U_PROV(1,KM),U_PROV(1,K),U_PROV(1,KP), UVADV1B.505
& U_MEAN_P(1,K),V_MEAN_P(1,K),ETADOT_U(1,K), UVADV1B.506
& ETADOT_U(1,K+1),SEC_U_LATITUDE, UVADV1B.507
& U_SECOND_INC,NUX(1,K),NUY(1,K),U_FIELD, UVADV1B.508
& ROW_LENGTH, APB0F401.1250
*CALL ARGFLDPT
APB0F401.1251
& TIMESTEP,LATITUDE_STEP_INVERSE, UVADV1B.510
& LONGITUDE_STEP_INVERSE,SEC_P_LATITUDE, UVADV1B.511
& OMEGA(1,K), UVADV1B.512
& L_SECOND,LWHITBROM) UVADV1B.513
UVADV1B.514
CL CALL ADV_U_GD FOR V. UVADV1B.515
CALL ADV_U_GD
(V_PROV(1,KM),V_PROV(1,K),V_PROV(1,KP), UVADV1B.516
& U_MEAN_P(1,K),V_MEAN_P(1,K),ETADOT_U(1,K), UVADV1B.517
& ETADOT_U(1,K+1),SEC_U_LATITUDE, UVADV1B.518
& V_SECOND_INC,NUX(1,K),NUY(1,K),U_FIELD, UVADV1B.519
& ROW_LENGTH, APB0F401.1252
*CALL ARGFLDPT
APB0F401.1253
& TIMESTEP,LATITUDE_STEP_INVERSE, UVADV1B.521
& LONGITUDE_STEP_INVERSE,SEC_P_LATITUDE, UVADV1B.522
& OMEGA(1,K), UVADV1B.523
& L_SECOND,LWHITBROM) UVADV1B.524
UVADV1B.525
C --------------------------------------------------------------------- UVADV1B.526
CL SECTION 3.2 CALL V_CORIOL TO OBTAIN WK AS IN EQUATION (46). UVADV1B.527
C --------------------------------------------------------------------- UVADV1B.528
UVADV1B.529
UVADV1B.530
CALL V_CORIOL
(ETADOT_U(1,K),ETADOT_U(1,K+1),PSTAR, UVADV1B.531
& PSTAR_OLD,U_MEAN_P(1,K),V_MEAN_P(1,K),RS_U(1,K), UVADV1B.532
& SEC_U_LATITUDE,TIMESTEP,AK(K),BK(K), UVADV1B.533
& DELTA_AK(K),DELTA_BK(K),DELTA_AKH(K), UVADV1B.534
& DELTA_BKH(K),DELTA_AKH(K+1),DELTA_BKH(K+1), UVADV1B.535
& ROW_LENGTH, APB0F401.1254
*CALL ARGFLDPT
APB0F401.1255
& LATITUDE_STEP_INVERSE,LONGITUDE_STEP_INVERSE, UVADV1B.537
& WK,U_FIELD,OMEGA(1,K),LLINTS) UVADV1B.538
UVADV1B.539
C --------------------------------------------------------------------- UVADV1B.540
CL SECTION 3.3 CALCULATE TOTAL MASS-WEIGHTED INCREMENT TO FIELD UVADV1B.541
CL INCLUDING CORIOLIS TERM AND ADD ONTO MASS-WEIGHTED UVADV1B.542
CL FIELD. UVADV1B.543
CL IF GLOBAL CALL POLAR_UV TO UPDATE POLAR VALUES. UVADV1B.544
CL IF LIMITED AREA MASS-WEIGHT BOUNDARY VALUES. UVADV1B.545
C --------------------------------------------------------------------- UVADV1B.546
UVADV1B.547
! Loop over field, missing top and bottom rows APB0F401.1256
DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO APB0F401.1257
SCALAR1=1.0/(RS_U(I,K)*RS_U(I,K)* GRB0F405.75
& (DELTA_AK(K)+DELTA_BK(K)*PSTAR(I))) GRB0F405.76
U_SECOND_INC(I)=U_SECOND_INC(I)*SCALAR1 GRB0F405.77
V_SECOND_INC(I)=V_SECOND_INC(I)*SCALAR1 GRB0F405.78
WK(I)=WK(I)*SCALAR1 GRB0F405.79
END DO UVADV1B.554
CL TOTAL MASS-WEIGHTED INCREMENT IS CALCULATED INCLUDING VERTICAL UVADV1B.555
CL CORIOIS TERM AND ADDED ONTO MASS-WEIGHTED FIELD. UVADV1B.556
UVADV1B.557
! Loop over field, missing top and bottom rows APB0F401.1258
DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO APB0F401.1259
U(I,K)=0.5 * (U(I,K)-U_SECOND_INC(I)+U_PROV(I,K)) UVADV1B.560
UVADV1B.564
V(I,K)=0.5 * (V(I,K)-V_SECOND_INC(I)+V_PROV(I,K)) UVADV1B.565
END DO ATD1F400.1007
IF (LWHITBROM) THEN APB0F401.1260
DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO APB0F401.1261
SCALAR3 = 1.0/RS_U(I,K) APB0F401.1262
U(I,K) = U(I,K) -(F2(I) + U(I,K)*SCALAR3)*WK(I)*TIMESTEP APB0F401.1263
V(I,K) = V(I,K) +(F1(I) - V(I,K)*SCALAR3)*WK(I)*TIMESTEP APB0F401.1264
ENDDO APB0F401.1265
ENDIF APB0F401.1266
CL SET POLAR VALUES FOR OMEGA UVADV1B.570
UVADV1B.571
DO I=1,ROW_LENGTH UVADV1B.572
OMEGA(I,K)=OMEGA(I+ROW_LENGTH,K) UVADV1B.573
OMEGA(U_FIELD-ROW_LENGTH+I,K)=OMEGA(U_FIELD-2*ROW_LENGTH UVADV1B.574
& +I,K) UVADV1B.575
END DO UVADV1B.576
UVADV1B.577
UVADV1B.578
UVADV1B.586
CL END LOOP OVER P_LEVELS UVADV1B.587
enddo UVADV1B.588
cmic$ end parallel UVADV1B.589
*IF DEF,GLOBAL APB2F401.220
! UPDATE POLAR VALUES BY CALLING POLAR_UV. APB2F401.221
APB2F401.222
CALL POLAR_UV
(U,V,ROW_LENGTH,U_FIELD,P_LEVELS, APB2F401.223
*CALL ARGFLDPT
APB2F401.224
& COS_U_LONGITUDE,SIN_U_LONGITUDE) APB2F401.225
*ENDIF APB2F401.226
UVADV1B.592
CL MASS WEIGHT THE OUTPUT FIELDS UVADV1B.593
DO K=1,P_LEVELS UVADV1B.594
DO I=FIRST_FLD_PT,LAST_U_FLD_PT APB0F401.1267
U(I,K)=U(I,K)*RS_U(I,K)*RS_U(I,K)*(DELTA_AK(K)+ UVADV1B.596
& DELTA_BK(K)*PSTAR(I)) UVADV1B.597
V(I,K)=V(I,K)*RS_U(I,K)*RS_U(I,K)*(DELTA_AK(K)+ UVADV1B.598
& DELTA_BK(K)*PSTAR(I)) UVADV1B.599
END DO UVADV1B.600
END DO UVADV1B.601
UVADV1B.602
CL END OF ROUTINE UV_ADV UVADV1B.603
UVADV1B.604
RETURN UVADV1B.605
END UVADV1B.606
*ENDIF UVADV1B.607