*IF DEF,A10_1C,AND,-DEF,SCMA AJC0F405.260
C ******************************COPYRIGHT****************************** ADJCTL1C.3
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. ADJCTL1C.4
C ADJCTL1C.5
C Use, duplication or disclosure of this code is subject to the ADJCTL1C.6
C restrictions as set forth in the contract. ADJCTL1C.7
C ADJCTL1C.8
C Meteorological Office ADJCTL1C.9
C London Road ADJCTL1C.10
C BRACKNELL ADJCTL1C.11
C Berkshire UK ADJCTL1C.12
C RG12 2SZ ADJCTL1C.13
C ADJCTL1C.14
C If no contract has been raised with this copy of the code, the use, ADJCTL1C.15
C duplication or disclosure of it is strictly prohibited. Permission ADJCTL1C.16
C to do so must first be obtained in writing from the Head of Numerical ADJCTL1C.17
C Modelling at the above address. ADJCTL1C.18
C ******************************COPYRIGHT****************************** ADJCTL1C.19
C ADJCTL1C.20
CLL SUBROUTINE ADJ_CTL --------------------------------------------- ADJCTL1C.21
CLL ADJCTL1C.22
CLL PURPOSE: INTEGRATES SURFACE PRESSURE, POTENTIAL TEMPERATURE, ADJCTL1C.23
CLL AND HORIZONTAL WIND COMPONENTS THROUGH A SPECIFIED ADJCTL1C.24
CLL NUMBER OF ADJUSTMENT STEPS. AT THE END OF THE ROUTINE ADJCTL1C.25
CLL UPDATED VALUES OF ALL THESE FIELDS ALONG WITH THE ADJCTL1C.26
CLL UPDATED EXNER PRESSURE ARE HELD IN THE ARGUMENTS. ADJCTL1C.27
CLL FOURIER FILTERING IS PERFORMED UNDER THE ADJCTL1C.28
CLL UPDATE IDENTIFIER 'GLOBAL'. ONE MORE PRESSURE ROW IS ADJCTL1C.29
CLL UPDATED THAN VELOCITY ROW. ADJCTL1C.30
CLL FIRST_ROW IS NORTHERNMOST PRESSURE ROW TO BE UPDATED. ADJCTL1C.31
CLL FIRST_U_ROW UPDATED IS THE FIRST ONE TO THE SOUTH OF ADJCTL1C.32
CLL THE FIRST P ROW. ADJCTL1C.33
CLL NOT SUITABLE FOR SINGLE COLUMN USE. ADJCTL1C.34
CLL WAS VERSION FOR CRAY Y-MP ADJCTL1C.35
CLL WRITTEN BY M.H MAWSON. ADJCTL1C.36
CLL ADJCTL1C.37
CLL MODEL MODIFICATION HISTORY: ADJCTL1C.38
CLL VERSION DATE ADJCTL1C.39
!LL 4.4 11/08/97 New version optimised for T3E. ADJCTL1C.40
!LL Not bit-reproducible with ADJCTL1A. ADJCTL1C.41
CLL 4.4 11/08/97 Remove extra swapbound by transferring it from U ADJCTL1C.42
CLL and V to RECIP_RS*DELTAP_UV array. Need to ADJCTL1C.43
CLL initialise variables such as V_MEAN to zero ADJCTL1C.44
CLL removed. T3E version of P_EXNER calculation ADJCTL1C.45
CLL reworked for efficiency gains. ADJCTL1C.46
CLL A. Dickinson ADJCTL1C.47
!LL 4.5 21/08/98 Comment out cdir$ cache_bypass directives due GSM4F405.16
!LL to t3e hardware error with new compiler. GSM4F405.17
!LL S.D.Mullerworth GSM4F405.18
!LL 4.5 28/10/98 Corrected error in loop bounds for non-T3E code GPB0F405.206
!LL 4.5 23/10/98 Introduce Single Column Model. JC Thil AJC0F405.259
CLL ADJCTL1C.48
CLL PROGRAMMING STANDARD: ADJCTL1C.49
CLL SYSTEM COMPONENTS COVERED: P11 ADJCTL1C.50
CLL SYSTEM TASK: P1 ADJCTL1C.51
CLL DOCUMENTATION: THE EQUATIONS USED ARE (23) TO (30) ADJCTL1C.52
CLL IN UNIFIED MODEL DOCUMENTATION PAPER NO. 10 ADJCTL1C.53
CLL M.J.P. CULLEN,T.DAVIES AND M.H.MAWSON, ADJCTL1C.54
CLLEND------------------------------------------------------------- ADJCTL1C.55
ADJCTL1C.56
C*L ARGUMENTS:--------------------------------------------------- ADJCTL1C.57
ADJCTL1C.58
SUBROUTINE ADJ_CTL 1,28ADJCTL1C.59
1 (U,V,THETA,Q,PSTAR,OROG_HEIGHT,RS,U_MEAN,V_MEAN,P_EXNER, ADJCTL1C.60
2 ETADOT_MEAN,PSTAR_OLD,COS_P_LATITUDE,COS_U_LATITUDE, ADJCTL1C.61
3 SEC_P_LATITUDE,SEC_U_LATITUDE,TAN_U_LATITUDE,F1,F2,F3, ADJCTL1C.62
4 LATITUDE_STEP_INVERSE,LONGITUDE_STEP_INVERSE,AK,BK,DELTA_AK, ADJCTL1C.63
5 DELTA_BK,THETA_REF,ADJUSTMENT_TIMESTEP,ADJUSTMENT_STEPS, ADJCTL1C.64
6 NORTHERN_FILTERED_P_ROW,SOUTHERN_FILTERED_P_ROW,ROW_LENGTH, ADJCTL1C.65
7 P_LEVELS,Q_LEVELS, ADJCTL1C.66
*CALL ARGFLDPT
ADJCTL1C.67
7 P_FIELD,U_FIELD,AKH,BKH, ADJCTL1C.68
8 AKH_TO_THE_KAPPA,BKH_TO_THE_KAPPA,AK_TO_THE_KAPPA, ADJCTL1C.69
9 BK_TO_THE_KAPPA,COS_U_LONGITUDE, ADJCTL1C.70
* SIN_U_LONGITUDE,TRIGS,IFAX,FILTER_WAVE_NUMBER_P_ROWS, ADJCTL1C.71
* FILTER_WAVE_NUMBER_U_ROWS,ERROR_CODE,ERROR_MESSAGE, ADJCTL1C.72
& L_NEG_PSTAR,PHI_OUT,L_PHI_OUT,ADJ_TIME_SMOOTHING_WEIGHT, ADJCTL1C.73
& ADJ_TIME_SMOOTHING_COEFF,LLINTS,LWHITBROM) ADJCTL1C.74
ADJCTL1C.75
IMPLICIT NONE ADJCTL1C.76
ADJCTL1C.77
LOGICAL ADJCTL1C.78
* L_NEG_PSTAR !IN SWITCH, IF TRUE THEN NEGATIVE PSTAR VALUES ADJCTL1C.79
* ! WILL BE DETECTED AND OUTPUT. ADJCTL1C.80
*, L_PHI_OUT !IN. IF TRUE THEN PHI REQUIRED AS OUTPUT. ADJCTL1C.81
*, LLINTS !Logical switch for linear TS ADJCTL1C.82
*, LWHITBROM !Logical switch for White & Bromley terms ADJCTL1C.83
ADJCTL1C.84
INTEGER ADJCTL1C.85
* P_FIELD !IN DIMENSION OF FIELDS ON PRESSSURE GRID. ADJCTL1C.86
*, U_FIELD !IN DIMENSION OF FIELDS ON VELOCITY GRID ADJCTL1C.87
*, P_LEVELS !IN NUMBER OF PRESSURE LEVELS TO BE UPDATED. ADJCTL1C.88
*, Q_LEVELS !IN NUMBER OF MOIST LEVELS TO BE UPDATED. ADJCTL1C.89
*, ROW_LENGTH !IN NUMBER OF POINTS PER ROW ADJCTL1C.90
*, ADJUSTMENT_STEPS !IN NUMBER OF ADJUSTMENT STEPS ADJCTL1C.91
! All TYPFLDPT arguments are intent IN ADJCTL1C.92
*CALL TYPFLDPT
ADJCTL1C.93
ADJCTL1C.94
INTEGER ADJCTL1C.95
* ERROR_CODE !INOUT. 0 ON ENTRY. NON-ZERO ON OUT IF ADJCTL1C.96
* ! ABNORMAL RESULT OBTAINED. ADJCTL1C.97
ADJCTL1C.98
CHARACTER*80 ERROR_MESSAGE ADJCTL1C.99
ADJCTL1C.100
INTEGER ADJCTL1C.101
* NORTHERN_FILTERED_P_ROW !IN P ROW ON WHICH FILTERING STOPS ADJCTL1C.102
* ! MOVING TOWARDS EQUATOR ADJCTL1C.103
*, SOUTHERN_FILTERED_P_ROW !IN P ROW ON WHICH FILTERING STARTS ADJCTL1C.104
* ! AGAIN MOVING TOWARDS SOUTH POLE ADJCTL1C.105
&, FILTER_WAVE_NUMBER_P_ROWS(GLOBAL_P_FIELD/GLOBAL_ROW_LENGTH) ADJCTL1C.106
& ! LAST WAVE NUMBER NOT TO BE CHOPPED ON A P ROW ADJCTL1C.107
&, FILTER_WAVE_NUMBER_U_ROWS(GLOBAL_U_FIELD/GLOBAL_ROW_LENGTH) ADJCTL1C.108
& ! LAST WAVE NUMBER NOT TO BE CHOPPED ON A U ROW ADJCTL1C.109
*, IFAX(10) !IN HOLDS FACTORS OF ROW_LENGTH USED BY ADJCTL1C.110
* ! FILTERING. ADJCTL1C.111
*,ADJ_TIME_SMOOTHING_WEIGHT(ADJUSTMENT_STEPS) !IN COEFFICIENTS FOR ADJCTL1C.112
* ! FINITE DIFFERENCE SMOOTHING DERIVATIVE ADJCTL1C.113
ADJCTL1C.114
REAL ADJCTL1C.115
* U(U_FIELD,P_LEVELS) !INOUT U FIELD ADJCTL1C.116
*,V(U_FIELD,P_LEVELS) !INOUT V FIELD ADJCTL1C.117
*,THETA(P_FIELD,P_LEVELS)!INOUT THETA FIELD ADJCTL1C.118
*,P_EXNER(P_FIELD,P_LEVELS+1)!INOUT EXNER PRESSURE FIELD. ADJCTL1C.119
*,Q(P_FIELD,Q_LEVELS) !INOUT Q FIELD ADJCTL1C.120
*,PSTAR(P_FIELD) !INOUT PSTAR FIELD ADJCTL1C.121
ADJCTL1C.122
REAL ADJCTL1C.123
* U_MEAN(U_FIELD,P_LEVELS) !OUT HOLDS MASS-WEIGHTED U ADJCTL1C.124
* ! AVERAGED OVER ADJUSTMENT STEPS. ADJCTL1C.125
*,V_MEAN(U_FIELD,P_LEVELS) !OUT HOLDS MASS-WEIGHTED V*COS(PHI) ADJCTL1C.126
* ! AVERAGED OVER ADJUSTMENT STEPS. ADJCTL1C.127
*,ETADOT_MEAN(P_FIELD,P_LEVELS) !OUT HOLDS MASS-WEIGHTED VERTICAL ADJCTL1C.128
* ! VELOCITY AVERAGED OVER ADJUSTMENT ADJCTL1C.129
* ! STEPS. ADJCTL1C.130
*,PSTAR_OLD(P_FIELD) !OUT HOLDS VALUE OF PSTAR ON PREVIOUS ADJCTL1C.131
* ! TIMESTEP ADJCTL1C.132
*,RS(P_FIELD,P_LEVELS) !OUT RS FIELD ADJCTL1C.133
*,PHI_OUT(P_FIELD,P_LEVELS) !OUT. HOLDS PHI IF DIAGNOSTIC ADJCTL1C.134
* ! REQUIRED. ADJCTL1C.135
ADJCTL1C.136
REAL ADJCTL1C.137
* DELTA_AK(P_LEVELS) !IN LAYER THICKNESS ADJCTL1C.138
*,DELTA_BK(P_LEVELS) !IN LAYER THICKNESS ADJCTL1C.139
*,AK(P_LEVELS) !IN VALUE OF A AT P POINTS ADJCTL1C.140
*,BK(P_LEVELS) !IN VALUE OF B AT P POINTS ADJCTL1C.141
*,AK_TO_THE_KAPPA(P_LEVELS)!IN (A/100000)**(R/CP) AT FULL LEVELS ADJCTL1C.142
*,BK_TO_THE_KAPPA(P_LEVELS)!IN (B/100000)**(R/CP) AT FULL LEVELS ADJCTL1C.143
*,AKH(P_LEVELS+1) !IN VALUE OF A AT HALF LEVELS. ADJCTL1C.144
*,BKH(P_LEVELS+1) !IN VALUE OF B AT HALF LEVELS. ADJCTL1C.145
*,AKH_TO_THE_KAPPA(P_LEVELS+1)!IN (A/100000)**(R/CP) ADJCTL1C.146
* !AT HALF LEVELS ADJCTL1C.147
*,BKH_TO_THE_KAPPA(P_LEVELS+1)!IN (B/100000)**(R/CP) ADJCTL1C.148
* !AT HALF LEVELS ADJCTL1C.149
*,OROG_HEIGHT(P_FIELD) !IN OROGRAPHIC HEIGHT. ADJCTL1C.150
ADJCTL1C.151
REAL ADJCTL1C.152
* F1(U_FIELD) !IN A CORIOLIS TERM SEE DOCUMENTATION ADJCTL1C.153
*,F2(U_FIELD) !IN A CORIOLIS TERM SEE DOCUMENTATION ADJCTL1C.154
*,F3(U_FIELD) !IN A CORIOLIS TERM SEE DOCUMENTATION ADJCTL1C.155
*,COS_U_LATITUDE(U_FIELD) !IN COS(LAT) AT U POINTS (2-D ARRAY) ADJCTL1C.156
*,COS_P_LATITUDE(P_FIELD) !IN COS(LAT) AT P POINTS (2-D ARRAY) ADJCTL1C.157
*,SEC_U_LATITUDE(U_FIELD) !IN 1/COS(LAT) AT U POINTS (2-D ARRAY) ADJCTL1C.158
*,SEC_P_LATITUDE(P_FIELD) !IN 1/COS(LAT) AT P POINTS (2-D ARRAY) ADJCTL1C.159
*,TAN_U_LATITUDE(U_FIELD) !IN TAN(LAT) AT U POINTS (2-D ARRAY) ADJCTL1C.160
*,COS_U_LONGITUDE(ROW_LENGTH) !IN COS(LONGITUDE) AT U POINTS ADJCTL1C.161
*,SIN_U_LONGITUDE(ROW_LENGTH) !IN SIN(LONGITUDE) AT U POINTS ADJCTL1C.162
ADJCTL1C.163
REAL ADJCTL1C.164
* THETA_REF(P_LEVELS) !IN REFERENCE THETA PROFILE ADJCTL1C.165
*,LONGITUDE_STEP_INVERSE !IN 1/LONGITUDE INCREMENT IN RADIANS ADJCTL1C.166
*,LATITUDE_STEP_INVERSE !IN 1/LATITUDE INCREMENT IN RADIANS ADJCTL1C.167
*,ADJUSTMENT_TIMESTEP !IN ADJCTL1C.168
&,ADJ_TIME_SMOOTHING_COEFF !IN COEFFICIENT. ZERO = NO SMOOTHING ADJCTL1C.169
*,TRIGS(ROW_LENGTH) !IN HOLDS TRIGONOMETRIC FUNCTIONS USED ADJCTL1C.170
* ! IN FILTERING. ADJCTL1C.171
ADJCTL1C.172
C*--------------------------------------------------------------------- ADJCTL1C.173
ADJCTL1C.174
C*L DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE----------------- ADJCTL1C.175
C DEFINE LOCAL ARRAYS: 6 ARE REQUIRED IF TIME SMOOTHING ADJCTL1C.176
REAL ADJCTL1C.177
* RS_DELTAP(P_FIELD) !HOLDS RS * VERTICAL PRESSURE DIFFERENCE ADJCTL1C.178
* !AT P POINTS. ADJCTL1C.179
*,DIVERGENCE_FUNCTIONS(P_FIELD,P_LEVELS) !WORKSPACE FOR HOLDING ADJCTL1C.180
* !QUANTITIES INVOLVING DIVERGENCE ADJCTL1C.181
*,RS_DELTAP_UV(U_FIELD) !HOLDS RS_DELTAP AT U POINTS. ADJCTL1C.182
*,RECIP_RS_SQUARED_SURFACE(P_FIELD) !HOLDS 1/(RS*RS) CALCULATED AT ADJCTL1C.183
* ! MODEL SURFACE. ADJCTL1C.184
*,RECIP_RS_DELTAP_UV(U_FIELD,P_LEVELS) ! 1./RS*DELTAP AT UV POINTS ADJCTL1C.185
&,U_SMOOTH(U_FIELD,P_LEVELS) ! IN ACCUMULATES U DURING ADJUSTMENT ADJCTL1C.186
&,V_SMOOTH(U_FIELD,P_LEVELS) ! IN ACCUMULATES V DURING ADJUSTMENT ADJCTL1C.187
ADJCTL1C.188
C*--------------------------------------------------------------------- ADJCTL1C.189
C DEFINE LOCAL VARIABLES ADJCTL1C.190
INTEGER ADJCTL1C.191
* NORTHERN_FILTERED_U_ROW ! U ROW ON WHICH FITERING STOPS MOVING ADJCTL1C.192
* ! TOWARDS EQUATOR. ADJCTL1C.193
*, SOUTHERN_FILTERED_U_ROW ! U ROW ON WHICH FILTERING STARTS AGAIN ADJCTL1C.194
* ! MOVING TOWARDS SOUTH POLE. ADJCTL1C.195
ADJCTL1C.196
INTEGER ADJCTL1C.197
* I ADJCTL1C.198
*, K ADJCTL1C.199
*, ADJ_STEP_NUMBER ! USED TO HOLD THE NUMBER OF THE ADJCTL1C.200
* ! ADJUSTMENT STEP BEING EXECUTED. ADJCTL1C.201
*, FILTER_SPACE_U ! HORIZONTAL DIMENSION OF SPACE NEEDED IN ADJCTL1C.202
* ! FILTERING ROUTINE FOR U ROWS. ADJCTL1C.203
*, FILTER_SPACE_P ! HORIZONTAL DIMENSION OF SPACE NEEDED IN ADJCTL1C.204
* ! FILTERING ROUTINE FOR P ROWS. ADJCTL1C.205
ADJCTL1C.206
REAL ADJCTL1C.207
* RECIP_RS_DELTAP ! HOLDS 1./RS_DELTAP ADJCTL1C.208
*, RECIP_PREF ! 1/PREF ADJCTL1C.209
*, RECIP_PREF_TO_THE_KAPPA ! 1/PREF ** KAPPA ADJCTL1C.210
*, RECIP_ADJUSTMENT_STEPS ADJCTL1C.211
*, SCALAR ADJCTL1C.212
ADJCTL1C.213
! No. of inputs for T3E vector library function ADJCTL1C.214
integer n_inputs ADJCTL1C.215
ADJCTL1C.216
C*L EXTERNAL SUBROUTINE CALLS:--------------------------------------- ADJCTL1C.217
EXTERNAL UV_ADJ,P_TO_UV,VERT_VEL,FILTER,POLAR_UV, ADJCTL1C.218
* P_TH_ADJ ADJCTL1C.219
C*--------------------------------------------------------------------- ADJCTL1C.220
CL CALL COMDECK TO OBTAIN CONSTANTS USED. ADJCTL1C.221
ADJCTL1C.222
*CALL C_ADJCTL
ADJCTL1C.223
ADJCTL1C.224
CL MAXIMUM VECTOR LENGTH ASSUMED IS P_FIELD ADJCTL1C.225
CL--------------------------------------------------------------------- ADJCTL1C.226
CL INTERNAL STRUCTURE INCLUDING SUBROUTINE CALLS: ADJCTL1C.227
CL ADJCTL1C.228
CL--------------------------------------------------------------------- ADJCTL1C.229
CL SECTION 1. INITIALISATION ADJCTL1C.230
CL--------------------------------------------------------------------- ADJCTL1C.231
C INCLUDE LOCAL CONSTANTS FROM GENERAL CONSTANTS BLOCK ADJCTL1C.232
ADJCTL1C.233
RECIP_PREF = 1./PREF ADJCTL1C.234
RECIP_PREF_TO_THE_KAPPA = RECIP_PREF**KAPPA ADJCTL1C.235
RECIP_ADJUSTMENT_STEPS = 1./ADJUSTMENT_STEPS ADJCTL1C.236
ADJCTL1C.237
*IF DEF,GLOBAL ADJCTL1C.238
CL IF GLOBAL THEN SET FILTERING INFORMATION. ADJCTL1C.239
ADJCTL1C.240
NORTHERN_FILTERED_U_ROW = NORTHERN_FILTERED_P_ROW ADJCTL1C.241
SOUTHERN_FILTERED_U_ROW = SOUTHERN_FILTERED_P_ROW - 1 ADJCTL1C.242
ADJCTL1C.243
C SET FILTER_SPACE WHICH IS ROW_LENGTH+2 TIMES THE NUMBER OF ROWS TO ADJCTL1C.244
C BE FILTERED. ADJCTL1C.245
ADJCTL1C.246
FILTER_SPACE_U = (ROW_LENGTH+2)*(NORTHERN_FILTERED_U_ROW-1+ ADJCTL1C.247
* U_FIELD/ROW_LENGTH-SOUTHERN_FILTERED_U_ROW) ADJCTL1C.248
FILTER_SPACE_P = (ROW_LENGTH+2)*(NORTHERN_FILTERED_P_ROW-1+ ADJCTL1C.249
* P_FIELD/ROW_LENGTH-SOUTHERN_FILTERED_P_ROW) ADJCTL1C.250
ADJCTL1C.251
*ELSE ADJCTL1C.252
CL IF LIMITED AREA SET U,V AT END OF ROW EQUAL TO U,V 1 GRID-LENGTH ADJCTL1C.253
CL TO THE LEFT. ADJCTL1C.254
ADJCTL1C.255
*IF DEF,MPP ADJCTL1C.256
IF (at_right_of_LPG) THEN ! only do this at the RHS of the LPG ADJCTL1C.257
*ENDIF ADJCTL1C.258
DO K=1,P_LEVELS ADJCTL1C.259
DO I=FIRST_FLD_PT-1+LAST_ROW_PT , LAST_U_FLD_PT , ROW_LENGTH ADJCTL1C.260
! Loop over the right-hand column of the field ADJCTL1C.261
U(I,K) = U(I-1,K) ADJCTL1C.262
V(I,K) = V(I-1,K) ADJCTL1C.263
ENDDO ADJCTL1C.264
ENDDO ADJCTL1C.265
*IF DEF,MPP ADJCTL1C.266
ENDIF ! if this processor is at the RHS of the LPG ADJCTL1C.267
*ENDIF ADJCTL1C.268
*ENDIF ADJCTL1C.269
ADJCTL1C.270
ADJCTL1C.271
CL LOOP OVER NUMBER OF ADJUSTMENT STEPS. ADJCTL1C.272
ADJCTL1C.273
DO 110 ADJ_STEP_NUMBER = 1,ADJUSTMENT_STEPS ADJCTL1C.274
ADJCTL1C.275
CL ADJCTL1C.276
CL--------------------------------------------------------------------- ADJCTL1C.277
CL SECTION 2. CALL UV_ADJ TO ADJUST U AND V. ALSO RETURNS RS. ADJCTL1C.278
CL--------------------------------------------------------------------- ADJCTL1C.279
ADJCTL1C.280
CALL UV_ADJ
(U,V,THETA,Q,OROG_HEIGHT,PSTAR,F1,F2, ADJCTL1C.281
* F3,SEC_U_LATITUDE,TAN_U_LATITUDE,AK,BK,DELTA_AK, ADJCTL1C.282
* DELTA_BK,LATITUDE_STEP_INVERSE,ADJUSTMENT_TIMESTEP, ADJCTL1C.283
* LONGITUDE_STEP_INVERSE,RS, ADJCTL1C.284
*CALL ARGFLDPT
ADJCTL1C.285
* U_FIELD,P_FIELD,ROW_LENGTH,P_LEVELS, ADJCTL1C.286
* Q_LEVELS,ADJ_STEP_NUMBER,AKH,BKH,P_EXNER, ADJCTL1C.287
* ADJUSTMENT_STEPS,L_PHI_OUT,PHI_OUT,LLINTS, ADJCTL1C.288
* LWHITBROM) ADJCTL1C.289
CL ADJCTL1C.290
CL--------------------------------------------------------------------- ADJCTL1C.291
CL SECTION 3. MASS-WEIGHTING OF U AND V. ADJCTL1C.292
CL--------------------------------------------------------------------- ADJCTL1C.293
ADJCTL1C.294
! Initialise RS_DELTAP prior to calling P_TO_UV ADJCTL1C.295
! cdir$ cache_bypass rs_deltap GSM4F405.19
DO I=1,FIRST_VALID_PT-1 ADJCTL1C.297
RS_DELTAP(I)=0.0 ADJCTL1C.298
ENDDO ADJCTL1C.299
! cdir$ cache_bypass rs_deltap GSM4F405.20
DO I=LAST_P_VALID_PT+1,P_FIELD ADJCTL1C.301
RS_DELTAP(I)=0.0 ADJCTL1C.302
ENDDO ADJCTL1C.303
CL LOOP OVER P_LEVELS ADJCTL1C.304
ADJCTL1C.305
DO 300 K = 1,P_LEVELS ADJCTL1C.306
ADJCTL1C.307
CL CALCULATE RS * DELTA P AT ALL POINTS ADJCTL1C.308
ADJCTL1C.309
! loop over all points, including valid halos ADJCTL1C.310
DO 310 I= FIRST_VALID_PT , LAST_P_VALID_PT ADJCTL1C.311
RS_DELTAP(I) = RS(I,K)*(DELTA_AK(K) + DELTA_BK(K)*PSTAR(I)) ADJCTL1C.312
310 CONTINUE ADJCTL1C.313
ADJCTL1C.314
CL INTERPOLATE RS DELTAP ONTO U GRID ADJCTL1C.315
ADJCTL1C.316
CALL P_TO_UV
(RS_DELTAP,RS_DELTAP_UV,P_FIELD,U_FIELD, ADJCTL1C.317
& ROW_LENGTH,tot_P_ROWS) ADJCTL1C.318
ADJCTL1C.319
CL CALCULATE MASS WEIGHTED U AND V COS(PHI) AT ALL POINTS. ADJCTL1C.320
ADJCTL1C.321
! loop over "local" points - not including top and bottom halos ADJCTL1C.322
DO 320 I= FIRST_FLD_PT,LAST_U_FLD_PT ADJCTL1C.323
RECIP_RS_DELTAP=1./RS_DELTAP_UV(I) ADJCTL1C.324
U(I,K) = U(I,K)*RS_DELTAP_UV(I) ADJCTL1C.325
V(I,K) = V(I,K)*RS_DELTAP_UV(I) ADJCTL1C.326
RECIP_RS_DELTAP_UV(I,K)=RECIP_RS_DELTAP ADJCTL1C.327
320 CONTINUE ADJCTL1C.328
ADJCTL1C.329
CL END LOOP OVER P_LEVELS ADJCTL1C.330
ADJCTL1C.331
300 CONTINUE ADJCTL1C.332
ADJCTL1C.333
CL ADJCTL1C.334
CL--------------------------------------------------------------------- ADJCTL1C.335
CL SECTION 4. FILTER U,V AND DIVERGENCE FUNCTIONS IF GLOBAL MODEL. ADJCTL1C.336
CL--------------------------------------------------------------------- ADJCTL1C.337
ADJCTL1C.338
*IF DEF,GLOBAL ADJCTL1C.339
ADJCTL1C.340
C---------------------------------------------------------------------- ADJCTL1C.341
CL SECTION 4.1 U_FIELD ADJCTL1C.342
C---------------------------------------------------------------------- ADJCTL1C.343
ADJCTL1C.344
CL CALL FILTER FOR U ADJCTL1C.345
ADJCTL1C.346
CALL FILTER
(U,U_FIELD,P_LEVELS,FILTER_SPACE_U,ROW_LENGTH, ADJCTL1C.347
*CALL ARGFLDPT
ADJCTL1C.348
* FILTER_WAVE_NUMBER_U_ROWS,TRIGS,IFAX, ADJCTL1C.349
* NORTHERN_FILTERED_U_ROW,SOUTHERN_FILTERED_U_ROW) ADJCTL1C.350
ADJCTL1C.351
C---------------------------------------------------------------------- ADJCTL1C.352
CL SECTION 4.2 V_FIELD ADJCTL1C.353
C---------------------------------------------------------------------- ADJCTL1C.354
ADJCTL1C.355
CL CALL FILTER FOR V ADJCTL1C.356
ADJCTL1C.357
CALL FILTER
(V,U_FIELD,P_LEVELS,FILTER_SPACE_U,ROW_LENGTH, ADJCTL1C.358
*CALL ARGFLDPT
ADJCTL1C.359
* FILTER_WAVE_NUMBER_U_ROWS,TRIGS,IFAX, ADJCTL1C.360
* NORTHERN_FILTERED_U_ROW,SOUTHERN_FILTERED_U_ROW) ADJCTL1C.361
ADJCTL1C.362
CALL POLAR_UV
(U,V,ROW_LENGTH,U_FIELD,P_LEVELS, ADJCTL1C.363
*CALL ARGFLDPT
ADJCTL1C.364
& COS_U_LONGITUDE,SIN_U_LONGITUDE) ADJCTL1C.365
*ENDIF ADJCTL1C.366
ADJCTL1C.367
DO K = 1,P_LEVELS ADJCTL1C.368
C MULTIPLY V BY COS(PHI). ADJCTL1C.369
ADJCTL1C.370
! loop over "local" points - not including top and bottom halos ADJCTL1C.371
DO I= FIRST_FLD_PT,LAST_U_FLD_PT ADJCTL1C.372
V(I,K) = V(I,K)* COS_U_LATITUDE(I) ADJCTL1C.373
ENDDO ADJCTL1C.374
ENDDO ADJCTL1C.375
ADJCTL1C.376
*IF DEF,MPP ADJCTL1C.377
! Do halo update for U, V and RECIP_RS_DELTAP_UV ADJCTL1C.378
CALL SWAPBOUNDS
(U,ROW_LENGTH,tot_P_ROWS, ADJCTL1C.379
& EW_Halo,NS_Halo,P_LEVELS) ADJCTL1C.380
CALL SWAPBOUNDS
(V,ROW_LENGTH,tot_P_ROWS, ADJCTL1C.381
& EW_Halo,NS_Halo,P_LEVELS) ADJCTL1C.382
CALL SWAPBOUNDS
(RECIP_RS_DELTAP_UV,ROW_LENGTH,tot_P_ROWS, ADJCTL1C.383
& EW_Halo,NS_Halo,P_LEVELS) ADJCTL1C.384
*ENDIF ADJCTL1C.385
CL ADJCTL1C.386
CL--------------------------------------------------------------------- ADJCTL1C.387
CL SECTION 5. CALCULATE U_MEAN,V_MEAN AND ETA DOT. ADJCTL1C.388
CL--------------------------------------------------------------------- ADJCTL1C.389
ADJCTL1C.390
IF(ADJ_TIME_SMOOTHING_COEFF.NE.0.0) THEN ADJCTL1C.391
IF(ADJ_STEP_NUMBER.EQ.1) THEN ADJCTL1C.392
DO 520 K=1,P_LEVELS ADJCTL1C.393
! loop over all points, including valid halos ADJCTL1C.394
DO I=FIRST_VALID_PT,LAST_U_VALID_PT ADJCTL1C.395
U_SMOOTH(I,K)=ADJ_TIME_SMOOTHING_WEIGHT(ADJ_STEP_NUMBER) ADJCTL1C.396
& *U(I,K) ADJCTL1C.397
V_SMOOTH(I,K)=ADJ_TIME_SMOOTHING_WEIGHT(ADJ_STEP_NUMBER) ADJCTL1C.398
& *V(I,K) ADJCTL1C.399
END DO ADJCTL1C.400
520 CONTINUE ADJCTL1C.401
ELSE IF(ADJ_STEP_NUMBER.EQ.ADJUSTMENT_STEPS) THEN ADJCTL1C.402
DO 530 K=1,P_LEVELS ADJCTL1C.403
! loop over all points, including valid halos ADJCTL1C.404
DO I=FIRST_VALID_PT,LAST_U_VALID_PT ADJCTL1C.405
U(I,K) = U(I,K)+ADJ_TIME_SMOOTHING_COEFF ADJCTL1C.406
& *(ADJ_TIME_SMOOTHING_WEIGHT(ADJ_STEP_NUMBER) ADJCTL1C.407
& *U(I,K)+U_SMOOTH(I,K)) ADJCTL1C.408
V(I,K) = V(I,K)+ADJ_TIME_SMOOTHING_COEFF ADJCTL1C.409
& *(ADJ_TIME_SMOOTHING_WEIGHT(ADJ_STEP_NUMBER) ADJCTL1C.410
& *V(I,K)+V_SMOOTH(I,K)) ADJCTL1C.411
END DO ADJCTL1C.412
530 CONTINUE ADJCTL1C.413
ELSE ADJCTL1C.414
DO 540 K=1,P_LEVELS ADJCTL1C.415
! loop over all points, including valid halos ADJCTL1C.416
DO I=FIRST_VALID_PT,LAST_U_VALID_PT ADJCTL1C.417
U_SMOOTH(I,K)=U_SMOOTH(I,K) + ADJCTL1C.418
& ADJ_TIME_SMOOTHING_WEIGHT(ADJ_STEP_NUMBER) * ADJCTL1C.419
& U(I,K) ADJCTL1C.420
V_SMOOTH(I,K)=V_SMOOTH(I,K) + ADJCTL1C.421
& ADJ_TIME_SMOOTHING_WEIGHT(ADJ_STEP_NUMBER) * ADJCTL1C.422
& V(I,K) ADJCTL1C.423
END DO ADJCTL1C.424
540 CONTINUE ADJCTL1C.425
END IF ADJCTL1C.426
END IF ADJCTL1C.427
ADJCTL1C.428
CL CALCULATE U_MEAN AND V_MEAN AT ALL POINTS AND ALL LEVELS. ADJCTL1C.429
ADJCTL1C.430
IF(ADJ_STEP_NUMBER.EQ.1) THEN ADJCTL1C.431
ADJCTL1C.432
DO K = 1,P_LEVELS ADJCTL1C.433
! loop over all points, including valid halos ADJCTL1C.434
DO I = 1,U_FIELD ADJCTL1C.435
U_MEAN(I,K)= U(I,K) * RECIP_ADJUSTMENT_STEPS ADJCTL1C.436
V_MEAN(I,K)= V(I,K) * RECIP_ADJUSTMENT_STEPS ADJCTL1C.437
ENDDO ADJCTL1C.438
ENDDO ADJCTL1C.439
ADJCTL1C.440
ELSE ADJCTL1C.441
ADJCTL1C.442
DO 500 K = 1,P_LEVELS ADJCTL1C.443
! loop over all points, including valid halos ADJCTL1C.444
DO 510 I = FIRST_VALID_PT,LAST_U_VALID_PT ADJCTL1C.445
U_MEAN(I,K)= U_MEAN(I,K) + U(I,K) * RECIP_ADJUSTMENT_STEPS ADJCTL1C.446
V_MEAN(I,K)= V_MEAN(I,K) + V(I,K) * RECIP_ADJUSTMENT_STEPS ADJCTL1C.447
510 CONTINUE ADJCTL1C.448
500 CONTINUE ADJCTL1C.449
ADJCTL1C.450
ENDIF ADJCTL1C.451
ADJCTL1C.452
CL CALL VERT_VEL TO CALCULATE ETA DOT. ADJCTL1C.453
CL BOTH ETA DOT FOR THIS ADJUSTMENT STEP AND THE AVERAGED VALUE ADJCTL1C.454
CL ARE RETURNED. ADJCTL1C.455
CL THE SUM OF THE DIVERGENCES ARE HELD AT LEVEL 1 IN THE ARRAY. ADJCTL1C.456
ADJCTL1C.457
C ETA DOT FOR THIS ADJUSTMENT STEP IS RETURNED IN DIVERGENCE FUNCTIONS. ADJCTL1C.458
ADJCTL1C.459
CALL VERT_VEL
(U,V,ETADOT_MEAN,SEC_P_LATITUDE, ADJCTL1C.460
* DIVERGENCE_FUNCTIONS, ADJCTL1C.461
* U_FIELD,P_FIELD,P_LEVELS, ADJCTL1C.462
*CALL ARGFLDPT
ADJCTL1C.463
* ROW_LENGTH,LATITUDE_STEP_INVERSE, ADJCTL1C.464
* LONGITUDE_STEP_INVERSE,ADJUSTMENT_STEPS,AKH,BKH, ADJCTL1C.465
* RS,ADJ_STEP_NUMBER,RECIP_RS_SQUARED_SURFACE, ADJCTL1C.466
* PSTAR,LLINTS,LWHITBROM) ADJCTL1C.467
ADJCTL1C.468
*IF DEF,MPP ADJCTL1C.469
! Update halos for DIVERGENCE_FUNCTIONS ADJCTL1C.470
CALL SWAPBOUNDS
(DIVERGENCE_FUNCTIONS,ROW_LENGTH,tot_P_ROWS, ADJCTL1C.471
& EW_Halo,NS_Halo,P_LEVELS) ADJCTL1C.472
ADJCTL1C.473
*ENDIF ADJCTL1C.474
CL ADJCTL1C.475
CL--------------------------------------------------------------------- ADJCTL1C.476
CL SECTION 6. RECREATE U AND V FROM MASS-WEIGHTING U AND V COS(PHI). ADJCTL1C.477
CL--------------------------------------------------------------------- ADJCTL1C.478
ADJCTL1C.479
ADJCTL1C.480
DO 600 K = 1,P_LEVELS ADJCTL1C.481
ADJCTL1C.482
CL RECREATE U AND V FORM MASS-WEIGHTED U AND V COS(PHI) AT ALL POINTS ADJCTL1C.483
ADJCTL1C.484
! loop over "local" points - not including top and bottom halos ADJCTL1C.485
DO 620 I= FIRST_VALID_PT,LAST_U_VALID_PT ADJCTL1C.486
U(I,K) = U(I,K)*RECIP_RS_DELTAP_UV(I,K) ADJCTL1C.487
V(I,K) = V(I,K)*RECIP_RS_DELTAP_UV(I,K)*SEC_U_LATITUDE(I) ADJCTL1C.488
620 CONTINUE ADJCTL1C.489
ADJCTL1C.490
ADJCTL1C.491
600 CONTINUE ADJCTL1C.492
ADJCTL1C.493
CL ADJCTL1C.494
CL--------------------------------------------------------------------- ADJCTL1C.495
CL SECTION 7. CALL P_TH_ADJ TO ADJUST P* AND THETA. ADJCTL1C.496
CL--------------------------------------------------------------------- ADJCTL1C.497
ADJCTL1C.498
CALL P_TH_ADJ
(PSTAR,PSTAR_OLD,THETA,THETA_REF, ADJCTL1C.499
* DIVERGENCE_FUNCTIONS,RS,DELTA_AK,DELTA_BK, ADJCTL1C.500
* P_FIELD,P_LEVELS, ADJCTL1C.501
*CALL ARGFLDPT
ADJCTL1C.502
* ADJ_STEP_NUMBER,ADJUSTMENT_TIMESTEP, ADJCTL1C.503
* ERROR_CODE,ERROR_MESSAGE, ADJCTL1C.504
* RECIP_RS_SQUARED_SURFACE,L_NEG_PSTAR) ADJCTL1C.505
ADJCTL1C.506
IF(ERROR_CODE.NE.0) RETURN ADJCTL1C.507
*IF DEF,MPP ADJCTL1C.508
! Do boundary swap for PSTAR and THETA ADJCTL1C.509
CALL SWAPBOUNDS
(PSTAR,ROW_LENGTH,tot_P_ROWS, ADJCTL1C.510
& EW_Halo,NS_Halo,1) ADJCTL1C.511
! CALL SET_SIDES(PSTAR,P_FIELD,ROW_LENGTH,1,fld_type_p) ADJCTL1C.512
! CALL SWAPBOUNDS(THETA,ROW_LENGTH,lasize(2), ADJCTL1C.513
! & EW_Halo,NS_Halo,P_LEVELS) ADJCTL1C.514
*ENDIF ADJCTL1C.515
CL ADJCTL1C.516
CL--------------------------------------------------------------------- ADJCTL1C.517
CL SECTION 8. CALCULATE P_EXNER FOR PRESSURE AT NEW TIME-LEVEL. ADJCTL1C.518
CL CALCULATION PERFORMED AT ALL HALF-LEVELS. ADJCTL1C.519
CL--------------------------------------------------------------------- ADJCTL1C.520
C ADJCTL1C.521
DO 800 K=1,P_LEVELS+1 ADJCTL1C.522
ADJCTL1C.523
C CALCULATE EXNER AT LEVEL K - 1/2 ADJCTL1C.524
ADJCTL1C.525
IF(BKH(K).EQ.0.) THEN ADJCTL1C.526
C IF A CONSTANT PRESSURE SURFACE SET EXNER TO HELD CONSTANT VALUE. ADJCTL1C.527
DO 810 I= 1,P_FIELD ADJCTL1C.528
P_EXNER(I,K) = AKH_TO_THE_KAPPA(K) ADJCTL1C.529
810 CONTINUE ADJCTL1C.530
ADJCTL1C.531
ELSE IF (K.GT.1.AND.AKH(K).EQ.0.) THEN ADJCTL1C.532
C IF A SIGMA LEVEL THEN THE LEVEL BELOW WAS A SIGMA LEVEL AND ADJCTL1C.533
C EXNER CAN BE CALCULATED BY RESCALING THE VALUE AT THE LOWER LEVEL. ADJCTL1C.534
ADJCTL1C.535
SCALAR = BKH_TO_THE_KAPPA(K)/BKH_TO_THE_KAPPA(K-1) ADJCTL1C.536
! loop over all points, including valid halos ADJCTL1C.537
DO 820 I=FIRST_VALID_PT,LAST_P_VALID_PT ADJCTL1C.538
P_EXNER(I,K) = P_EXNER(I,K-1)* SCALAR ADJCTL1C.539
820 CONTINUE ADJCTL1C.540
ELSE ADJCTL1C.541
C CALCULATE EXNER AS ((A+B*PSTAR)/100000)**(R/CP) ADJCTL1C.542
ADJCTL1C.543
! loop over all points, including valid halos ADJCTL1C.544
ADJCTL1C.545
ADJCTL1C.546
*IF DEF,VECTLIB PXVECTLB.2
do I=FIRST_VALID_PT,LAST_P_VALID_PT ADJCTL1C.548
P_EXNER(I,K)=(AKH(K)+BKH(K)*PSTAR(I))*RECIP_PREF ADJCTL1C.549
enddo ADJCTL1C.550
n_inputs=LAST_P_VALID_PT-FIRST_VALID_PT+1 ADJCTL1C.551
call alog_v(
n_inputs, P_EXNER(FIRST_VALID_PT,K), ADJCTL1C.552
* P_EXNER(FIRST_VALID_PT,K)) ADJCTL1C.553
do I=FIRST_VALID_PT,LAST_P_VALID_PT ADJCTL1C.554
P_EXNER(I,K)=P_EXNER(I,K)* KAPPA ADJCTL1C.555
enddo ADJCTL1C.556
call exp_v(
n_inputs,P_EXNER(FIRST_VALID_PT,K), ADJCTL1C.557
* P_EXNER(FIRST_VALID_PT,K)) ADJCTL1C.558
*ELSE ADJCTL1C.559
DO I=FIRST_VALID_PT,LAST_P_VALID_PT GPB0F405.207
P_EXNER(I,K)=((AKH(K)+BKH(K)*PSTAR(I))*RECIP_PREF)**KAPPA ADJCTL1C.561
END DO ADJCTL1C.562
*ENDIF ADJCTL1C.563
ADJCTL1C.564
END IF ADJCTL1C.565
ADJCTL1C.566
800 CONTINUE ADJCTL1C.567
ADJCTL1C.568
ADJCTL1C.569
CL END OF LOOP OVER ADJUSTMENT STEPS ADJCTL1C.570
ADJCTL1C.571
110 CONTINUE ADJCTL1C.572
*IF DEF,MPP ADJCTL1C.573
! Update halos for ETADOT_MEAN ADJCTL1C.574
CALL SWAPBOUNDS
(ETADOT_MEAN,ROW_LENGTH,tot_P_ROWS, ADJCTL1C.575
& EW_Halo,NS_Halo,P_LEVELS) ADJCTL1C.576
*ENDIF ADJCTL1C.577
ADJCTL1C.578
CL END OF ROUTINE ADJ_CTL ADJCTL1C.579
ADJCTL1C.580
RETURN ADJCTL1C.581
END ADJCTL1C.582
ADJCTL1C.583
*ENDIF ADJCTL1C.584