*IF DEF,A10_1A,OR,DEF,A10_1B ATJ0F402.1
*IF -DEF,SCMA AJC0F405.257
C ******************************COPYRIGHT****************************** GTS2F400.199
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.200
C GTS2F400.201
C Use, duplication or disclosure of this code is subject to the GTS2F400.202
C restrictions as set forth in the contract. GTS2F400.203
C GTS2F400.204
C Meteorological Office GTS2F400.205
C London Road GTS2F400.206
C BRACKNELL GTS2F400.207
C Berkshire UK GTS2F400.208
C RG12 2SZ GTS2F400.209
C GTS2F400.210
C If no contract has been raised with this copy of the code, the use, GTS2F400.211
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.212
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.213
C Modelling at the above address. GTS2F400.214
C ******************************COPYRIGHT****************************** GTS2F400.215
C GTS2F400.216
CLL SUBROUTINE ADJ_CTL --------------------------------------------- ADJCTL1A.3
CLL ADJCTL1A.4
CLL PURPOSE: INTEGRATES SURFACE PRESSURE, POTENTIAL TEMPERATURE, ADJCTL1A.5
CLL AND HORIZONTAL WIND COMPONENTS THROUGH A SPECIFIED ADJCTL1A.6
CLL NUMBER OF ADJUSTMENT STEPS. AT THE END OF THE ROUTINE ADJCTL1A.7
CLL UPDATED VALUES OF ALL THESE FIELDS ALONG WITH THE ADJCTL1A.8
CLL UPDATED EXNER PRESSURE ARE HELD IN THE ARGUMENTS. ADJCTL1A.9
CLL FOURIER FILTERING IS PERFORMED UNDER THE ADJCTL1A.10
CLL UPDATE IDENTIFIER 'GLOBAL'. ONE MORE PRESSURE ROW IS ADJCTL1A.11
CLL UPDATED THAN VELOCITY ROW. ADJCTL1A.12
CLL FIRST_ROW IS NORTHERNMOST PRESSURE ROW TO BE UPDATED. ADJCTL1A.13
CLL FIRST_U_ROW UPDATED IS THE FIRST ONE TO THE SOUTH OF ADJCTL1A.14
CLL THE FIRST P ROW. ADJCTL1A.15
CLL NOT SUITABLE FOR SINGLE COLUMN USE. ADJCTL1A.16
CLL VERSION FOR CRAY Y-MP ADJCTL1A.17
CLL WRITTEN BY M.H MAWSON. ADJCTL1A.18
CLL ADJCTL1A.19
CLL MODEL MODIFICATION HISTORY FROM MODEL VERSION 3.0: ADJCTL1A.20
CLL VERSION DATE ADJCTL1A.21
CLL 3.1 24/02/93 Tidy code to remove QA Fortran messages. MM240293.10
CLL 3.2 13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for TS150793.4
CLL portability. Author: Tracey Smith. TS150793.5
CLL 3.4 22/06/94 Arguments LLINTS, LWHITBROM added and passed to GSS1F304.778
CLL VERT_VEL, UV_ADJ GSS1F304.779
CLL S.J.Swarbrick GSS1F304.780
CLL ADJCTL1A.22
CLL 3.4 06/08/94 Micro tasking directives inserted to improve AAD2F304.118
CLL parallel efficiency on C90. AAD2F304.119
CLL Authors: A. Dickinson, D. Salmond AAD2F304.120
CLL Reviewer: M. Mawson AAD2F304.121
! 3.5 28/03/95 MPP code: Change updateable area, add halo APB0F305.118
! updates. P.Burton APB0F305.119
! 4.1 02/04/96 Added TYPFLDPT arguments to dynamics routines APB0F401.138
! which allows many of the differences between APB0F401.139
! MPP and "normal" code to be at top level APB0F401.140
! Added LEVELS argument to POLAR_UV APB0F401.141
! P.Burton APB0F401.142
!LL 4.2 16/08/96 Add TYPFLDPT arguments to FILTER subroutine APB0F402.1
!LL and make the FILTER_WAVE_NUMBER arrays APB0F402.2
!LL globally sized P.Burton APB0F402.3
!LL 4.2 25/11/96 Corrections to allow LAM to run in MPP mode. ARB2F402.38
!LL RTHBarnes. ARB2F402.39
! 4.2 Oct. 96 T3E migration: *DEF CRAY removed; HF functions GSS4F402.13
! replaced by T3E rtor_v funtion (*DEF T3E) GSS4F402.14
! code restructured appropriately. GSS4F402.15
! S.J.Swarbrick GSS4F402.16
C vn4.3 Mar. 97 T3E migration : optimisation changes GSS1F403.1046
C D.Salmond GSS1F403.1047
! 4.5 23/10/98 Introduce Single Column Model. JC Thil AJC0F405.256
! 4.5 12/05/98 Replace **k by exp(k*log( )) for faster running GRB1F405.34
! on Fujitsu VPP700. RBarnes@ecmwf.int GRB1F405.35
CLL AAD2F304.122
CLL PROGRAMMING STANDARD: UNIFIED MODEL DOCUMENTATION PAPER NO. 4, ADJCTL1A.23
CLL STANDARD B, VERSION 2, DATED 18/01/90 ADJCTL1A.24
CLL SYSTEM COMPONENTS COVERED: P11 ADJCTL1A.25
CLL SYSTEM TASK: P1 ADJCTL1A.26
CLL DOCUMENTATION: THE EQUATIONS USED ARE (23) TO (30) ADJCTL1A.27
CLL IN UNIFIED MODEL DOCUMENTATION PAPER NO. 10 ADJCTL1A.28
CLL M.J.P. CULLEN,T.DAVIES AND M.H.MAWSON, ADJCTL1A.29
CLLEND------------------------------------------------------------- ADJCTL1A.30
ADJCTL1A.31
C*L ARGUMENTS:--------------------------------------------------- ADJCTL1A.32
ADJCTL1A.33
SUBROUTINE ADJ_CTL 1,28ADJCTL1A.34
1 (U,V,THETA,Q,PSTAR,OROG_HEIGHT,RS,U_MEAN,V_MEAN,P_EXNER, ADJCTL1A.35
2 ETADOT_MEAN,PSTAR_OLD,COS_P_LATITUDE,COS_U_LATITUDE, ADJCTL1A.36
3 SEC_P_LATITUDE,SEC_U_LATITUDE,TAN_U_LATITUDE,F1,F2,F3, ADJCTL1A.37
4 LATITUDE_STEP_INVERSE,LONGITUDE_STEP_INVERSE,AK,BK,DELTA_AK, ADJCTL1A.38
5 DELTA_BK,THETA_REF,ADJUSTMENT_TIMESTEP,ADJUSTMENT_STEPS, ADJCTL1A.39
6 NORTHERN_FILTERED_P_ROW,SOUTHERN_FILTERED_P_ROW,ROW_LENGTH, ADJCTL1A.40
7 P_LEVELS,Q_LEVELS, APB0F401.143
*CALL ARGFLDPT
APB0F401.144
7 P_FIELD,U_FIELD,AKH,BKH, APB0F401.145
8 AKH_TO_THE_KAPPA,BKH_TO_THE_KAPPA,AK_TO_THE_KAPPA, ADJCTL1A.42
9 BK_TO_THE_KAPPA,COS_U_LONGITUDE, ADJCTL1A.43
* SIN_U_LONGITUDE,TRIGS,IFAX,FILTER_WAVE_NUMBER_P_ROWS, ADJCTL1A.44
* FILTER_WAVE_NUMBER_U_ROWS,ERROR_CODE,ERROR_MESSAGE, ADJCTL1A.45
& L_NEG_PSTAR,PHI_OUT,L_PHI_OUT,ADJ_TIME_SMOOTHING_WEIGHT, ADJCTL1A.46
& ADJ_TIME_SMOOTHING_COEFF,LLINTS,LWHITBROM) GSS1F304.781
ADJCTL1A.48
IMPLICIT NONE ADJCTL1A.49
ADJCTL1A.50
LOGICAL ADJCTL1A.51
* L_NEG_PSTAR !IN SWITCH, IF TRUE THEN NEGATIVE PSTAR VALUES ADJCTL1A.52
* ! WILL BE DETECTED AND OUTPUT. ADJCTL1A.53
*, L_PHI_OUT !IN. IF TRUE THEN PHI REQUIRED AS OUTPUT. ADJCTL1A.54
*, LLINTS !Logical switch for linear TS GSS1F304.782
*, LWHITBROM !Logical switch for White & Bromley terms GSS1F304.783
ADJCTL1A.55
INTEGER ADJCTL1A.56
* P_FIELD !IN DIMENSION OF FIELDS ON PRESSSURE GRID. ADJCTL1A.57
*, U_FIELD !IN DIMENSION OF FIELDS ON VELOCITY GRID ADJCTL1A.58
*, P_LEVELS !IN NUMBER OF PRESSURE LEVELS TO BE UPDATED. ADJCTL1A.61
*, Q_LEVELS !IN NUMBER OF MOIST LEVELS TO BE UPDATED. ADJCTL1A.62
*, ROW_LENGTH !IN NUMBER OF POINTS PER ROW ADJCTL1A.64
*, ADJUSTMENT_STEPS !IN NUMBER OF ADJUSTMENT STEPS ADJCTL1A.65
! All TYPFLDPT arguments are intent IN APB0F401.146
*CALL TYPFLDPT
APB0F401.147
ADJCTL1A.66
INTEGER ADJCTL1A.67
* ERROR_CODE !INOUT. 0 ON ENTRY. NON-ZERO ON OUT IF ADJCTL1A.68
* ! ABNORMAL RESULT OBTAINED. ADJCTL1A.69
ADJCTL1A.70
CHARACTER*80 ERROR_MESSAGE TS150793.6
ADJCTL1A.74
INTEGER ADJCTL1A.75
* NORTHERN_FILTERED_P_ROW !IN P ROW ON WHICH FILTERING STOPS ADJCTL1A.76
* ! MOVING TOWARDS EQUATOR ADJCTL1A.77
*, SOUTHERN_FILTERED_P_ROW !IN P ROW ON WHICH FILTERING STARTS ADJCTL1A.78
* ! AGAIN MOVING TOWARDS SOUTH POLE ADJCTL1A.79
&, FILTER_WAVE_NUMBER_P_ROWS(GLOBAL_P_FIELD/GLOBAL_ROW_LENGTH) APB0F402.4
& ! LAST WAVE NUMBER NOT TO BE CHOPPED ON A P ROW APB0F402.5
&, FILTER_WAVE_NUMBER_U_ROWS(GLOBAL_U_FIELD/GLOBAL_ROW_LENGTH) APB0F402.6
& ! LAST WAVE NUMBER NOT TO BE CHOPPED ON A U ROW APB0F402.7
*, IFAX(10) !IN HOLDS FACTORS OF ROW_LENGTH USED BY ADJCTL1A.84
* ! FILTERING. ADJCTL1A.85
*,ADJ_TIME_SMOOTHING_WEIGHT(ADJUSTMENT_STEPS) !IN COEFFICIENTS FOR ADJCTL1A.86
* ! FINITE DIFFERENCE SMOOTHING DERIVATIVE ADJCTL1A.87
ADJCTL1A.88
REAL ADJCTL1A.89
* U(U_FIELD,P_LEVELS) !INOUT U FIELD ADJCTL1A.90
*,V(U_FIELD,P_LEVELS) !INOUT V FIELD ADJCTL1A.91
*,THETA(P_FIELD,P_LEVELS)!INOUT THETA FIELD ADJCTL1A.92
*,P_EXNER(P_FIELD,P_LEVELS+1)!INOUT EXNER PRESSURE FIELD. ADJCTL1A.93
*,Q(P_FIELD,Q_LEVELS) !INOUT Q FIELD ADJCTL1A.94
*,PSTAR(P_FIELD) !INOUT PSTAR FIELD ADJCTL1A.95
ADJCTL1A.96
REAL ADJCTL1A.97
* U_MEAN(U_FIELD,P_LEVELS) !OUT HOLDS MASS-WEIGHTED U ADJCTL1A.98
* ! AVERAGED OVER ADJUSTMENT STEPS. ADJCTL1A.99
*,V_MEAN(U_FIELD,P_LEVELS) !OUT HOLDS MASS-WEIGHTED V*COS(PHI) ADJCTL1A.100
* ! AVERAGED OVER ADJUSTMENT STEPS. ADJCTL1A.101
*,ETADOT_MEAN(P_FIELD,P_LEVELS) !OUT HOLDS MASS-WEIGHTED VERTICAL ADJCTL1A.102
* ! VELOCITY AVERAGED OVER ADJUSTMENT ADJCTL1A.103
* ! STEPS. ADJCTL1A.104
*,PSTAR_OLD(P_FIELD) !OUT HOLDS VALUE OF PSTAR ON PREVIOUS ADJCTL1A.105
* ! TIMESTEP ADJCTL1A.106
*,RS(P_FIELD,P_LEVELS) !OUT RS FIELD ADJCTL1A.107
*,PHI_OUT(P_FIELD,P_LEVELS) !OUT. HOLDS PHI IF DIAGNOSTIC ADJCTL1A.108
* ! REQUIRED. ADJCTL1A.109
ADJCTL1A.110
REAL ADJCTL1A.111
* DELTA_AK(P_LEVELS) !IN LAYER THICKNESS ADJCTL1A.112
*,DELTA_BK(P_LEVELS) !IN LAYER THICKNESS ADJCTL1A.113
*,AK(P_LEVELS) !IN VALUE OF A AT P POINTS ADJCTL1A.114
*,BK(P_LEVELS) !IN VALUE OF B AT P POINTS ADJCTL1A.115
*,AK_TO_THE_KAPPA(P_LEVELS)!IN (A/100000)**(R/CP) AT FULL LEVELS ADJCTL1A.116
*,BK_TO_THE_KAPPA(P_LEVELS)!IN (B/100000)**(R/CP) AT FULL LEVELS ADJCTL1A.117
*,AKH(P_LEVELS+1) !IN VALUE OF A AT HALF LEVELS. ADJCTL1A.118
*,BKH(P_LEVELS+1) !IN VALUE OF B AT HALF LEVELS. ADJCTL1A.119
*,AKH_TO_THE_KAPPA(P_LEVELS+1)!IN (A/100000)**(R/CP) ADJCTL1A.120
* !AT HALF LEVELS ADJCTL1A.121
*,BKH_TO_THE_KAPPA(P_LEVELS+1)!IN (B/100000)**(R/CP) ADJCTL1A.122
* !AT HALF LEVELS ADJCTL1A.123
*,OROG_HEIGHT(P_FIELD) !IN OROGRAPHIC HEIGHT. ADJCTL1A.124
ADJCTL1A.125
REAL ADJCTL1A.126
* F1(U_FIELD) !IN A CORIOLIS TERM SEE DOCUMENTATION ADJCTL1A.127
*,F2(U_FIELD) !IN A CORIOLIS TERM SEE DOCUMENTATION ADJCTL1A.128
*,F3(U_FIELD) !IN A CORIOLIS TERM SEE DOCUMENTATION ADJCTL1A.129
*,COS_U_LATITUDE(U_FIELD) !IN COS(LAT) AT U POINTS (2-D ARRAY) ADJCTL1A.130
*,COS_P_LATITUDE(P_FIELD) !IN COS(LAT) AT P POINTS (2-D ARRAY) ADJCTL1A.131
*,SEC_U_LATITUDE(U_FIELD) !IN 1/COS(LAT) AT U POINTS (2-D ARRAY) ADJCTL1A.132
*,SEC_P_LATITUDE(P_FIELD) !IN 1/COS(LAT) AT P POINTS (2-D ARRAY) ADJCTL1A.133
*,TAN_U_LATITUDE(U_FIELD) !IN TAN(LAT) AT U POINTS (2-D ARRAY) ADJCTL1A.134
*,COS_U_LONGITUDE(ROW_LENGTH) !IN COS(LONGITUDE) AT U POINTS ADJCTL1A.135
*,SIN_U_LONGITUDE(ROW_LENGTH) !IN SIN(LONGITUDE) AT U POINTS ADJCTL1A.136
ADJCTL1A.137
REAL ADJCTL1A.138
* THETA_REF(P_LEVELS) !IN REFERENCE THETA PROFILE ADJCTL1A.139
*,LONGITUDE_STEP_INVERSE !IN 1/LONGITUDE INCREMENT IN RADIANS ADJCTL1A.140
*,LATITUDE_STEP_INVERSE !IN 1/LATITUDE INCREMENT IN RADIANS ADJCTL1A.141
*,ADJUSTMENT_TIMESTEP !IN ADJCTL1A.142
&,ADJ_TIME_SMOOTHING_COEFF !IN COEFFICIENT. ZERO = NO SMOOTHING ADJCTL1A.143
*,TRIGS(ROW_LENGTH) !IN HOLDS TRIGONOMETRIC FUNCTIONS USED ADJCTL1A.144
* ! IN FILTERING. ADJCTL1A.145
ADJCTL1A.146
C*--------------------------------------------------------------------- ADJCTL1A.147
ADJCTL1A.148
C*L DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE----------------- ADJCTL1A.149
C DEFINE LOCAL ARRAYS: 6 ARE REQUIRED IF TIME SMOOTHING ADJCTL1A.150
REAL ADJCTL1A.151
* RS_DELTAP(P_FIELD) !HOLDS RS * VERTICAL PRESSURE DIFFERENCE ADJCTL1A.152
* !AT P POINTS. ADJCTL1A.153
*,DIVERGENCE_FUNCTIONS(P_FIELD,P_LEVELS) !WORKSPACE FOR HOLDING ADJCTL1A.154
* !QUANTITIES INVOLVING DIVERGENCE ADJCTL1A.155
*,RS_DELTAP_UV(U_FIELD) !HOLDS RS_DELTAP AT U POINTS. ADJCTL1A.156
*,RECIP_RS_SQUARED_SURFACE(P_FIELD) !HOLDS 1/(RS*RS) CALCULATED AT ADJCTL1A.157
* ! MODEL SURFACE. ADJCTL1A.158
&,U_SMOOTH(U_FIELD,P_LEVELS) ! IN ACCUMULATES U DURING ADJUSTMENT ADJCTL1A.159
&,V_SMOOTH(U_FIELD,P_LEVELS) ! IN ACCUMULATES V DURING ADJUSTMENT ADJCTL1A.160
ADJCTL1A.161
C*--------------------------------------------------------------------- ADJCTL1A.162
C DEFINE LOCAL VARIABLES ADJCTL1A.163
INTEGER ADJCTL1A.164
* NORTHERN_FILTERED_U_ROW ! U ROW ON WHICH FITERING STOPS MOVING APB0F401.148
* ! TOWARDS EQUATOR. ADJCTL1A.174
*, SOUTHERN_FILTERED_U_ROW ! U ROW ON WHICH FILTERING STARTS AGAIN ADJCTL1A.175
* ! MOVING TOWARDS SOUTH POLE. ADJCTL1A.176
ADJCTL1A.177
INTEGER ADJCTL1A.178
* I ADJCTL1A.179
*, K ADJCTL1A.180
*, ADJ_STEP_NUMBER ! USED TO HOLD THE NUMBER OF THE ADJCTL1A.181
* ! ADJUSTMENT STEP BEING EXECUTED. ADJCTL1A.182
*, FILTER_SPACE_U ! HORIZONTAL DIMENSION OF SPACE NEEDED IN ADJCTL1A.183
* ! FILTERING ROUTINE FOR U ROWS. ADJCTL1A.184
*, FILTER_SPACE_P ! HORIZONTAL DIMENSION OF SPACE NEEDED IN ADJCTL1A.185
* ! FILTERING ROUTINE FOR P ROWS. ADJCTL1A.186
ADJCTL1A.187
REAL ADJCTL1A.188
* RECIP_RS_DELTAP ! HOLDS 1./RS_DELTAP ADJCTL1A.189
*, RECIP_PREF ! 1/PREF ADJCTL1A.191
*, RECIP_PREF_TO_THE_KAPPA ! 1/PREF ** KAPPA ADJCTL1A.193
*, RECIP_ADJUSTMENT_STEPS ADJCTL1A.195
*, SCALAR ADJCTL1A.196
C Local workspace arrays used in T3E restructured code GSS4F402.17
REAL EXNER_wk(LAST_P_VALID_PT-FIRST_VALID_PT+1) GSS4F402.18
! No. of inputs for T3E vector library function GSS4F402.20
integer n_inputs GSS4F402.21
ADJCTL1A.198
C*L EXTERNAL SUBROUTINE CALLS:--------------------------------------- ADJCTL1A.199
EXTERNAL UV_ADJ,P_TO_UV,VERT_VEL,FILTER,POLAR_UV, ADJCTL1A.200
* P_TH_ADJ MM240293.11
C*--------------------------------------------------------------------- ADJCTL1A.206
CL CALL COMDECK TO OBTAIN CONSTANTS USED. ADJCTL1A.207
ADJCTL1A.208
*CALL C_ADJCTL
ADJCTL1A.209
ADJCTL1A.210
CL MAXIMUM VECTOR LENGTH ASSUMED IS P_FIELD ADJCTL1A.211
CL--------------------------------------------------------------------- ADJCTL1A.212
CL INTERNAL STRUCTURE INCLUDING SUBROUTINE CALLS: ADJCTL1A.213
CL ADJCTL1A.214
CL--------------------------------------------------------------------- ADJCTL1A.215
CL SECTION 1. INITIALISATION ADJCTL1A.216
CL--------------------------------------------------------------------- ADJCTL1A.217
C INCLUDE LOCAL CONSTANTS FROM GENERAL CONSTANTS BLOCK ADJCTL1A.218
ADJCTL1A.219
RECIP_PREF = 1./PREF ADJCTL1A.227
RECIP_PREF_TO_THE_KAPPA = RECIP_PREF**KAPPA ADJCTL1A.229
RECIP_ADJUSTMENT_STEPS = 1./ADJUSTMENT_STEPS ADJCTL1A.231
ADJCTL1A.232
*IF DEF,GLOBAL ADJCTL1A.233
CL IF GLOBAL THEN SET FILTERING INFORMATION. ADJCTL1A.234
ADJCTL1A.235
NORTHERN_FILTERED_U_ROW = NORTHERN_FILTERED_P_ROW ADJCTL1A.236
SOUTHERN_FILTERED_U_ROW = SOUTHERN_FILTERED_P_ROW - 1 ADJCTL1A.237
ADJCTL1A.238
C SET FILTER_SPACE WHICH IS ROW_LENGTH+2 TIMES THE NUMBER OF ROWS TO ADJCTL1A.239
C BE FILTERED. ADJCTL1A.240
ADJCTL1A.241
FILTER_SPACE_U = (ROW_LENGTH+2)*(NORTHERN_FILTERED_U_ROW-1+ ADJCTL1A.242
* U_FIELD/ROW_LENGTH-SOUTHERN_FILTERED_U_ROW) ADJCTL1A.243
FILTER_SPACE_P = (ROW_LENGTH+2)*(NORTHERN_FILTERED_P_ROW-1+ ADJCTL1A.244
* P_FIELD/ROW_LENGTH-SOUTHERN_FILTERED_P_ROW) ADJCTL1A.245
ADJCTL1A.246
*ELSE ADJCTL1A.247
CL IF LIMITED AREA SET U,V AT END OF ROW EQUAL TO U,V 1 GRID-LENGTH ADJCTL1A.248
CL TO THE LEFT. ADJCTL1A.249
ADJCTL1A.250
*IF DEF,MPP APB0F401.149
IF (at_right_of_LPG) THEN ! only do this at the RHS of the LPG APB0F401.150
*ENDIF APB0F401.151
DO K=1,P_LEVELS APB0F401.152
DO I=FIRST_FLD_PT-1+LAST_ROW_PT , LAST_U_FLD_PT , ROW_LENGTH APB0F401.153
! Loop over the right-hand column of the field APB0F401.154
U(I,K) = U(I-1,K) APB0F401.155
V(I,K) = V(I-1,K) APB0F401.156
ENDDO APB0F401.157
ENDDO APB0F401.158
*IF DEF,MPP APB0F401.159
ENDIF ! if this processor is at the RHS of the LPG APB0F401.160
*ENDIF APB0F401.161
*ENDIF ADJCTL1A.257
C SET U_MEAN, ETADOT_MEAN, AND V_MEAN TO ZERO ADJCTL1A.258
ADJCTL1A.259
DO 102 K = 1,P_LEVELS ADJCTL1A.260
DO 104 I = 1,U_FIELD ADJCTL1A.261
U_MEAN(I,K) = 0. ADJCTL1A.262
V_MEAN(I,K) = 0. ADJCTL1A.263
104 CONTINUE ADJCTL1A.264
DO 106 I = 1,P_FIELD ADJCTL1A.265
ETADOT_MEAN(I,K) = 0. ADJCTL1A.266
DIVERGENCE_FUNCTIONS(I,K) = 0.0 ARB2F402.40
106 CONTINUE ADJCTL1A.267
102 CONTINUE ADJCTL1A.268
ADJCTL1A.269
CL LOOP OVER NUMBER OF ADJUSTMENT STEPS. ADJCTL1A.270
ADJCTL1A.271
DO 110 ADJ_STEP_NUMBER = 1,ADJUSTMENT_STEPS ADJCTL1A.272
ADJCTL1A.273
CL ADJCTL1A.274
CL--------------------------------------------------------------------- ADJCTL1A.275
CL SECTION 2. CALL UV_ADJ TO ADJUST U AND V. ALSO RETURNS RS. ADJCTL1A.276
CL--------------------------------------------------------------------- ADJCTL1A.277
ADJCTL1A.278
CALL UV_ADJ
(U,V,THETA,Q,OROG_HEIGHT,PSTAR,F1,F2, MM240293.12
* F3,SEC_U_LATITUDE,TAN_U_LATITUDE,AK,BK,DELTA_AK, ADJCTL1A.280
* DELTA_BK,LATITUDE_STEP_INVERSE,ADJUSTMENT_TIMESTEP, ADJCTL1A.281
* LONGITUDE_STEP_INVERSE,RS, ADJCTL1A.282
*CALL ARGFLDPT
APB0F401.162
* U_FIELD,P_FIELD,ROW_LENGTH,P_LEVELS, APB0F401.163
* Q_LEVELS,ADJ_STEP_NUMBER,AKH,BKH,P_EXNER, ADJCTL1A.284
* ADJUSTMENT_STEPS,L_PHI_OUT,PHI_OUT,LLINTS, GSS1F304.784
* LWHITBROM) GSS1F304.785
CL ADJCTL1A.288
CL--------------------------------------------------------------------- ADJCTL1A.289
CL SECTION 3. MASS-WEIGHTING OF U AND V. ADJCTL1A.290
CL--------------------------------------------------------------------- ADJCTL1A.291
ADJCTL1A.292
! QAN fix APB0F401.164
DO I=1,P_FIELD APB0F401.165
RS_DELTAP(I)=0.0 APB0F401.166
ENDDO APB0F401.167
CL LOOP OVER P_LEVELS ADJCTL1A.293
ADJCTL1A.294
CMIC@ DO ALL SHARED(P_LEVELS, P_FIELD, U_FIELD, ROW_LENGTH, RS, APB0F401.168
CMIC@1 DELTA_AK, DELTA_BK, PSTAR, U, V) PRIVATE(RS_DELTAP_UV, AAD2F304.124
CMIC@2 RS_DELTAP, K, I) AAD2F304.125
*CALL CMICFLD
APB0F401.169
DO 300 K = 1,P_LEVELS ADJCTL1A.295
ADJCTL1A.296
CL CALCULATE RS * DELTA P AT ALL POINTS ADJCTL1A.297
ADJCTL1A.298
! loop over all points, including valid halos APB0F401.170
DO 310 I= FIRST_VALID_PT , LAST_P_VALID_PT APB0F401.171
RS_DELTAP(I) = RS(I,K)*(DELTA_AK(K) + DELTA_BK(K)*PSTAR(I)) ADJCTL1A.300
310 CONTINUE ADJCTL1A.301
ADJCTL1A.302
CL INTERPOLATE RS DELTAP ONTO U GRID ADJCTL1A.303
ADJCTL1A.304
CALL P_TO_UV
(RS_DELTAP,RS_DELTAP_UV,P_FIELD,U_FIELD, ADJCTL1A.305
& ROW_LENGTH,tot_P_ROWS) APB0F401.172
ADJCTL1A.307
CL CALCULATE MASS WEIGHTED U AND V COS(PHI) AT ALL POINTS. ADJCTL1A.308
ADJCTL1A.309
! loop over "local" points - not including top and bottom halos APB0F401.173
DO 320 I= FIRST_FLD_PT,LAST_U_FLD_PT APB0F401.174
U(I,K) = U(I,K)*RS_DELTAP_UV(I) ADJCTL1A.311
V(I,K) = V(I,K)*RS_DELTAP_UV(I) ADJCTL1A.312
320 CONTINUE ADJCTL1A.313
ADJCTL1A.314
CL END LOOP OVER P_LEVELS ADJCTL1A.315
ADJCTL1A.316
300 CONTINUE ADJCTL1A.317
ADJCTL1A.318
CL ADJCTL1A.319
CL--------------------------------------------------------------------- ADJCTL1A.320
CL SECTION 4. FILTER U,V AND DIVERGENCE FUNCTIONS IF GLOBAL MODEL. ADJCTL1A.321
CL--------------------------------------------------------------------- ADJCTL1A.322
ADJCTL1A.323
*IF DEF,GLOBAL ADJCTL1A.324
ADJCTL1A.325
C---------------------------------------------------------------------- ADJCTL1A.326
CL SECTION 4.1 U_FIELD ADJCTL1A.327
C---------------------------------------------------------------------- ADJCTL1A.328
ADJCTL1A.329
CL CALL FILTER FOR U ADJCTL1A.330
ADJCTL1A.331
CALL FILTER
(U,U_FIELD,P_LEVELS,FILTER_SPACE_U,ROW_LENGTH, ADJCTL1A.332
*CALL ARGFLDPT
APB0F402.8
* FILTER_WAVE_NUMBER_U_ROWS,TRIGS,IFAX, ADJCTL1A.333
* NORTHERN_FILTERED_U_ROW,SOUTHERN_FILTERED_U_ROW) ADJCTL1A.334
ADJCTL1A.335
C---------------------------------------------------------------------- ADJCTL1A.336
CL SECTION 4.2 V_FIELD ADJCTL1A.337
C---------------------------------------------------------------------- ADJCTL1A.338
ADJCTL1A.339
CL CALL FILTER FOR V ADJCTL1A.340
ADJCTL1A.341
CALL FILTER
(V,U_FIELD,P_LEVELS,FILTER_SPACE_U,ROW_LENGTH, ADJCTL1A.342
*CALL ARGFLDPT
APB0F402.9
* FILTER_WAVE_NUMBER_U_ROWS,TRIGS,IFAX, ADJCTL1A.343
* NORTHERN_FILTERED_U_ROW,SOUTHERN_FILTERED_U_ROW) ADJCTL1A.344
ADJCTL1A.345
CALL POLAR_UV
(U,V,ROW_LENGTH,U_FIELD,P_LEVELS, APB2F401.198
*CALL ARGFLDPT
APB2F401.199
& COS_U_LONGITUDE,SIN_U_LONGITUDE) APB2F401.200
*ENDIF ADJCTL1A.346
ADJCTL1A.347
DO K = 1,P_LEVELS ADJCTL1A.348
C MULTIPLY V BY COS(PHI). ADJCTL1A.355
ADJCTL1A.356
! loop over "local" points - not including top and bottom halos APB0F401.175
DO I= FIRST_FLD_PT,LAST_U_FLD_PT APB0F401.176
V(I,K) = V(I,K)* COS_U_LATITUDE(I) ADJCTL1A.358
ENDDO ADJCTL1A.359
ENDDO ADJCTL1A.360
ADJCTL1A.361
*IF DEF,MPP APB0F401.177
APB0F401.178
! Do halo update for U and V APB0F401.179
CALL SWAPBOUNDS
(U,ROW_LENGTH,tot_P_ROWS, APB0F401.180
& EW_Halo,NS_Halo,P_LEVELS) APB0F401.181
CALL SWAPBOUNDS
(V,ROW_LENGTH,tot_P_ROWS, APB0F401.182
& EW_Halo,NS_Halo,P_LEVELS) APB0F401.183
*ENDIF APB0F401.184
CL ADJCTL1A.362
CL--------------------------------------------------------------------- ADJCTL1A.363
CL SECTION 5. CALCULATE U_MEAN,V_MEAN AND ETA DOT. ADJCTL1A.364
CL--------------------------------------------------------------------- ADJCTL1A.365
ADJCTL1A.366
IF(ADJ_TIME_SMOOTHING_COEFF.NE.0.0) THEN ADJCTL1A.367
IF(ADJ_STEP_NUMBER.EQ.1) THEN ADJCTL1A.368
DO 520 K=1,P_LEVELS ADJCTL1A.369
! loop over all points, including valid halos APB0F401.185
DO I=FIRST_VALID_PT,LAST_U_VALID_PT APB0F401.186
U_SMOOTH(I,K)=ADJ_TIME_SMOOTHING_WEIGHT(ADJ_STEP_NUMBER) ADJCTL1A.371
& *U(I,K) ADJCTL1A.372
V_SMOOTH(I,K)=ADJ_TIME_SMOOTHING_WEIGHT(ADJ_STEP_NUMBER) ADJCTL1A.373
& *V(I,K) ADJCTL1A.374
END DO ADJCTL1A.375
520 CONTINUE ADJCTL1A.376
ELSE IF(ADJ_STEP_NUMBER.EQ.ADJUSTMENT_STEPS) THEN ADJCTL1A.377
DO 530 K=1,P_LEVELS ADJCTL1A.378
! loop over all points, including valid halos APB0F401.187
DO I=FIRST_VALID_PT,LAST_U_VALID_PT APB0F401.188
U(I,K) = U(I,K)+ADJ_TIME_SMOOTHING_COEFF ADJCTL1A.380
& *(ADJ_TIME_SMOOTHING_WEIGHT(ADJ_STEP_NUMBER) ADJCTL1A.381
& *U(I,K)+U_SMOOTH(I,K)) ADJCTL1A.382
V(I,K) = V(I,K)+ADJ_TIME_SMOOTHING_COEFF ADJCTL1A.383
& *(ADJ_TIME_SMOOTHING_WEIGHT(ADJ_STEP_NUMBER) ADJCTL1A.384
& *V(I,K)+V_SMOOTH(I,K)) ADJCTL1A.385
END DO ADJCTL1A.386
530 CONTINUE ADJCTL1A.387
ELSE ADJCTL1A.388
DO 540 K=1,P_LEVELS ADJCTL1A.389
! loop over all points, including valid halos APB0F401.189
DO I=FIRST_VALID_PT,LAST_U_VALID_PT APB0F401.190
U_SMOOTH(I,K)=U_SMOOTH(I,K) + ADJCTL1A.391
& ADJ_TIME_SMOOTHING_WEIGHT(ADJ_STEP_NUMBER) * ADJCTL1A.392
& U(I,K) ADJCTL1A.393
V_SMOOTH(I,K)=V_SMOOTH(I,K) + ADJCTL1A.394
& ADJ_TIME_SMOOTHING_WEIGHT(ADJ_STEP_NUMBER) * ADJCTL1A.395
& V(I,K) ADJCTL1A.396
END DO ADJCTL1A.397
540 CONTINUE ADJCTL1A.398
END IF ADJCTL1A.399
END IF ADJCTL1A.400
ADJCTL1A.401
CL CALCULATE U_MEAN AND V_MEAN AT ALL POINTS AND ALL LEVELS. ADJCTL1A.402
ADJCTL1A.403
DO 500 K = 1,P_LEVELS ADJCTL1A.404
! loop over all points, including valid halos APB0F401.191
DO 510 I = FIRST_VALID_PT,LAST_U_VALID_PT APB0F401.192
U_MEAN(I,K)= U_MEAN(I,K) + U(I,K) * RECIP_ADJUSTMENT_STEPS ADJCTL1A.406
V_MEAN(I,K)= V_MEAN(I,K) + V(I,K) * RECIP_ADJUSTMENT_STEPS ADJCTL1A.407
510 CONTINUE ADJCTL1A.408
500 CONTINUE ADJCTL1A.409
ADJCTL1A.410
CL CALL VERT_VEL TO CALCULATE ETA DOT. ADJCTL1A.411
CL BOTH ETA DOT FOR THIS ADJUSTMENT STEP AND THE AVERAGED VALUE ADJCTL1A.412
CL ARE RETURNED. ADJCTL1A.413
CL THE SUM OF THE DIVERGENCES ARE HELD AT LEVEL 1 IN THE ARRAY. ADJCTL1A.414
ADJCTL1A.415
C ETA DOT FOR THIS ADJUSTMENT STEP IS RETURNED IN DIVERGENCE FUNCTIONS. ADJCTL1A.416
ADJCTL1A.417
CALL VERT_VEL
(U,V,ETADOT_MEAN,SEC_P_LATITUDE, ADJCTL1A.418
* DIVERGENCE_FUNCTIONS, ADJCTL1A.419
* U_FIELD,P_FIELD,P_LEVELS, APB0F401.193
*CALL ARGFLDPT
APB0F401.194
* ROW_LENGTH,LATITUDE_STEP_INVERSE, ADJCTL1A.421
* LONGITUDE_STEP_INVERSE,ADJUSTMENT_STEPS,AKH,BKH, ADJCTL1A.422
* RS,ADJ_STEP_NUMBER,RECIP_RS_SQUARED_SURFACE, ADJCTL1A.423
* PSTAR,LLINTS,LWHITBROM) GSS1F304.786
ADJCTL1A.425
*IF DEF,MPP APB0F305.177
! Update halos for DIVERGENCE_FUNCTIONS APB0F401.195
CALL SWAPBOUNDS
(DIVERGENCE_FUNCTIONS,ROW_LENGTH,tot_P_ROWS, APB0F401.196
& EW_Halo,NS_Halo,P_LEVELS) APB0F401.197
APB0F305.181
*ENDIF APB0F305.182
CL ADJCTL1A.426
CL--------------------------------------------------------------------- ADJCTL1A.427
CL SECTION 6. RECREATE U AND V FROM MASS-WEIGHTING U AND V COS(PHI). ADJCTL1A.428
CL--------------------------------------------------------------------- ADJCTL1A.429
ADJCTL1A.430
CL LOOP OVER P_LEVELS ADJCTL1A.431
ADJCTL1A.432
DO 600 K = 1,P_LEVELS ADJCTL1A.433
ADJCTL1A.434
CL CALCULATE RS* DELTA P AT ALL POINTS ADJCTL1A.435
ADJCTL1A.436
! loop over all points, including valid halos APB0F401.198
DO 610 I= FIRST_VALID_PT,LAST_P_VALID_PT APB0F401.199
RS_DELTAP(I) = RS(I,K)*(DELTA_AK(K) + DELTA_BK(K)*PSTAR(I)) ADJCTL1A.438
610 CONTINUE ADJCTL1A.439
ADJCTL1A.440
CL INTERPOLATE RS DELTAP ONTO U GRID ADJCTL1A.441
ADJCTL1A.442
CALL P_TO_UV
(RS_DELTAP,RS_DELTAP_UV,P_FIELD,U_FIELD, ADJCTL1A.443
& ROW_LENGTH,tot_P_ROWS) APB0F401.200
ADJCTL1A.445
CL RECREATE U AND V FORM MASS-WEIGHTED U AND V COS(PHI) AT ALL POINTS ADJCTL1A.446
ADJCTL1A.447
! loop over "local" points - not including top and bottom halos APB0F401.201
DO 620 I= FIRST_FLD_PT,LAST_U_FLD_PT APB0F401.202
RECIP_RS_DELTAP = 1./ RS_DELTAP_UV(I) ADJCTL1A.449
U(I,K) = U(I,K) * RECIP_RS_DELTAP ADJCTL1A.450
V(I,K) = V(I,K) * RECIP_RS_DELTAP * SEC_U_LATITUDE(I) ADJCTL1A.451
620 CONTINUE ADJCTL1A.452
ADJCTL1A.453
CL END LOOP OVER P_LEVELS ADJCTL1A.454
ADJCTL1A.455
600 CONTINUE ADJCTL1A.456
ADJCTL1A.457
*IF DEF,MPP APB0F305.191
! Do boundary swap for U and V APB0F305.192
CALL SWAPBOUNDS
(U,ROW_LENGTH,tot_P_ROWS, APB0F401.203
& EW_Halo,NS_Halo,P_LEVELS) APB0F401.204
CALL SWAPBOUNDS
(V,ROW_LENGTH,tot_P_ROWS, APB0F401.205
& EW_Halo,NS_Halo,P_LEVELS) APB0F401.206
*ENDIF APB0F305.195
CL ADJCTL1A.458
CL--------------------------------------------------------------------- ADJCTL1A.459
CL SECTION 7. CALL P_TH_ADJ TO ADJUST P* AND THETA. ADJCTL1A.460
CL--------------------------------------------------------------------- ADJCTL1A.461
ADJCTL1A.462
CALL P_TH_ADJ
(PSTAR,PSTAR_OLD,THETA,THETA_REF, ADJCTL1A.463
* DIVERGENCE_FUNCTIONS,RS,DELTA_AK,DELTA_BK, ADJCTL1A.464
* P_FIELD,P_LEVELS, APB0F401.207
*CALL ARGFLDPT
APB0F401.208
* ADJ_STEP_NUMBER,ADJUSTMENT_TIMESTEP, ADJCTL1A.466
* ERROR_CODE,ERROR_MESSAGE, ADJCTL1A.467
* RECIP_RS_SQUARED_SURFACE,L_NEG_PSTAR) ADJCTL1A.468
ADJCTL1A.469
IF(ERROR_CODE.NE.0) RETURN ADJCTL1A.470
*IF DEF,MPP APB0F305.196
! Do boundary swap for PSTAR and THETA APB0F305.197
CALL SWAPBOUNDS
(PSTAR,ROW_LENGTH,tot_P_ROWS, APB0F401.209
& EW_Halo,NS_Halo,1) APB0F401.210
! CALL SET_SIDES(PSTAR,P_FIELD,ROW_LENGTH,1,fld_type_p) APB0F401.211
! CALL SWAPBOUNDS(THETA,ROW_LENGTH,lasize(2), APB0F401.212
! & EW_Halo,NS_Halo,P_LEVELS) APB0F401.213
*ENDIF APB0F305.201
CL ADJCTL1A.471
CL--------------------------------------------------------------------- ADJCTL1A.472
CL SECTION 8. CALCULATE P_EXNER FOR PRESSURE AT NEW TIME-LEVEL. ADJCTL1A.473
CL CALCULATION PERFORMED AT ALL HALF-LEVELS. ADJCTL1A.474
CL--------------------------------------------------------------------- ADJCTL1A.475
C GSS4F402.22
DO 800 K=1,P_LEVELS+1 ADJCTL1A.479
ADJCTL1A.480
C CALCULATE EXNER AT LEVEL K - 1/2 ADJCTL1A.481
ADJCTL1A.482
IF(BKH(K).EQ.0.) THEN ADJCTL1A.483
C IF A CONSTANT PRESSURE SURFACE SET EXNER TO HELD CONSTANT VALUE. ADJCTL1A.484
DO 810 I= 1,P_FIELD ADJCTL1A.485
P_EXNER(I,K) = AKH_TO_THE_KAPPA(K) ADJCTL1A.486
810 CONTINUE ADJCTL1A.487
ADJCTL1A.488
ELSE IF (K.GT.1.AND.AKH(K).EQ.0.) THEN MM240293.14
C IF A SIGMA LEVEL THEN THE LEVEL BELOW WAS A SIGMA LEVEL AND ADJCTL1A.490
C EXNER CAN BE CALCULATED BY RESCALING THE VALUE AT THE LOWER LEVEL. ADJCTL1A.491
ADJCTL1A.492
SCALAR = BKH_TO_THE_KAPPA(K)/BKH_TO_THE_KAPPA(K-1) ADJCTL1A.493
! loop over all points, including valid halos APB0F401.214
DO 820 I=FIRST_VALID_PT,LAST_P_VALID_PT APB0F401.215
P_EXNER(I,K) = P_EXNER(I,K-1)* SCALAR ADJCTL1A.495
820 CONTINUE ADJCTL1A.496
ELSE ADJCTL1A.497
C CALCULATE EXNER AS ((A+B*PSTAR)/100000)**(R/CP) ADJCTL1A.498
ADJCTL1A.499
! loop over all points, including valid halos APB0F401.216
GSS4F402.23
DO I=FIRST_VALID_PT,LAST_P_VALID_PT GSS4F402.24
EXNER_wk(I-FIRST_VALID_PT+1)=AKH(K)+BKH(K)*PSTAR(I) GSS4F402.25
END DO GSS4F402.26
*IF DEF,VECTLIB PXVECTLB.1
n_inputs=LAST_P_VALID_PT-FIRST_VALID_PT+1 GSS4F402.31
call powr_v(
n_inputs,EXNER_wk,KAPPA,EXNER_wk) GSS1F403.1048
*ELSE GSS4F402.33
DO I=1,LAST_P_VALID_PT-FIRST_VALID_PT+1 GSS4F402.34
*IF -DEF,FUJITSU GRB1F405.36
EXNER_wk(I)=EXNER_wk(I)**KAPPA GSS4F402.35
*ELSE GRB1F405.37
EXNER_wk(I)= exp(KAPPA*log(EXNER_wk(I))) GRB1F405.38
*ENDIF GRB1F405.39
END DO GSS4F402.36
*ENDIF GSS4F402.37
DO 830 I=FIRST_VALID_PT,LAST_P_VALID_PT APB0F401.217
P_EXNER(I,K) = EXNER_wk(I-FIRST_VALID_PT+1) GSS4F402.38
& * RECIP_PREF_TO_THE_KAPPA GSS4F402.39
830 CONTINUE ADJCTL1A.503
END IF ADJCTL1A.504
ADJCTL1A.505
800 CONTINUE ADJCTL1A.506
ADJCTL1A.507
ADJCTL1A.540
CL END OF LOOP OVER ADJUSTMENT STEPS ADJCTL1A.541
ADJCTL1A.542
110 CONTINUE ADJCTL1A.543
*IF DEF,MPP APB0F401.223
! Update halos for ETADOT_MEAN APB0F401.224
CALL SWAPBOUNDS
(ETADOT_MEAN,ROW_LENGTH,tot_P_ROWS, APB0F401.225
& EW_Halo,NS_Halo,P_LEVELS) APB0F401.226
*ENDIF APB0F401.227
ADJCTL1A.544
CL END OF ROUTINE ADJ_CTL ADJCTL1A.545
ADJCTL1A.546
RETURN ADJCTL1A.547
END ADJCTL1A.548
ADJCTL1A.549
*ENDIF ADJCTL1A.550
*ENDIF AJC0F405.258