*IF DEF,A15_1A OMEGDI1A.2
C ******************************COPYRIGHT****************************** GTS2F400.7075
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.7076
C GTS2F400.7077
C Use, duplication or disclosure of this code is subject to the GTS2F400.7078
C restrictions as set forth in the contract. GTS2F400.7079
C GTS2F400.7080
C Meteorological Office GTS2F400.7081
C London Road GTS2F400.7082
C BRACKNELL GTS2F400.7083
C Berkshire UK GTS2F400.7084
C RG12 2SZ GTS2F400.7085
C GTS2F400.7086
C If no contract has been raised with this copy of the code, the use, GTS2F400.7087
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.7088
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.7089
C Modelling at the above address. GTS2F400.7090
C ******************************COPYRIGHT****************************** GTS2F400.7091
C GTS2F400.7092
CLL SUBROUTINE OMEGA_DIAG ----------------------------------------- OMEGDI1A.3
CLL OMEGDI1A.4
CLL PURPOSE: CALCULATES OMEGA AT VELOCITY POINTS. OMEGDI1A.5
CLL NOT SUITABLE FOR SINGLE COLUMN USE. OMEGDI1A.6
CLL VERSION FOR CRAY Y-MP OMEGDI1A.7
CLL OMEGDI1A.8
CLL Written by M.H. Mawson OMEGDI1A.9
CLL OMEGDI1A.10
CLL Model Modification history from model version 3.0: OMEGDI1A.11
CLL version Date OMEGDI1A.12
CLL 3.1 02/02/93 CORRECTION OF SIGN ERROR IN DP_BY_DT TERM IR020293.3
CLL OMEGDI1A.13
CLL 4.0 12/07/95 CORRECTION OF FLOATING POINT IN ETADOT FOR AMN1F400.1
CLL DEF GLOBAL NOT TRUE . M. Noguer AMN1F400.2
CLL 4.3 14/03/97 MPP Changes. S.D.Mullerworth GSM3F403.66
CLL Programming Standard: Unified Model Documentation Paper No. 4, OMEGDI1A.14
CLL Standard B. OMEGDI1A.15
CLL OMEGDI1A.16
CLL System components covered: OMEGDI1A.17
CLL OMEGDI1A.18
CLL System task: OMEGDI1A.19
CLL OMEGDI1A.20
CLL Documentation: The equations used are (29),(30) and (44) OMEGDI1A.21
CLL in Unified Model Documentation Paper No. 10 M.J.P. Cullen,T.Davies OMEGDI1A.22
CLL and M.H. Mawson. Except that the variable radius of the earth RS is OMEGDI1A.23
CLL replaced by the constant value A. OMEGDI1A.24
CLL OMEGDI1A.25
CLLEND------------------------------------------------------------- OMEGDI1A.26
OMEGDI1A.27
C*L ARGUMENTS:--------------------------------------------------- OMEGDI1A.28
OMEGDI1A.29
SUBROUTINE OMEGA_DIAG 1,6OMEGDI1A.30
1 ( GSM3F403.67
*CALL ARGFLDPT
GSM3F403.68
& U,V,OMEGA,SEC_P_LATITUDE,COS_U_LATITUDE, GSM3F403.69
2 PSTAR,PSTAR_OLD,DELTA_AK,DELTA_BK, OMEGDI1A.32
3 AK,BK,AKH,BKH,U_FIELD,P_FIELD,P_LEVELS, OMEGDI1A.33
4 ROW_LENGTH,LATITUDE_STEP_INVERSE, OMEGDI1A.34
5 LONGITUDE_STEP_INVERSE,ADVECTION_TIMESTEP) OMEGDI1A.35
OMEGDI1A.36
IMPLICIT NONE OMEGDI1A.37
OMEGDI1A.38
*CALL TYPFLDPT
GSM3F403.70
GSM3F403.71
INTEGER OMEGDI1A.39
& ROW_LENGTH !IN NUMBER OF POINTS PER ROW OMEGDI1A.40
&, P_LEVELS !IN NUMBER OF PRESSURE LEVELS OF DATA OMEGDI1A.41
&, P_FIELD !IN NUMBER OF POINTS IN PRESSURE FIELD OMEGDI1A.42
&, U_FIELD !IN NUMBER OF POINTS IN VELOCITY FIELD OMEGDI1A.43
OMEGDI1A.44
REAL OMEGDI1A.45
& U(U_FIELD,P_LEVELS) !IN U VELOCITY OMEGDI1A.46
&,V(U_FIELD,P_LEVELS) !IN V VELOCITY OMEGDI1A.47
&,PSTAR(P_FIELD) !IN SURFACE PRESSURE AT P POINTS. OMEGDI1A.48
&,PSTAR_OLD(P_FIELD) !IN SURFACE PRESSURE AT PREVIOUS TIMESTEP OMEGDI1A.49
&,SEC_P_LATITUDE(P_FIELD)!IN 1/COS(LAT) AT P POINTS OMEGDI1A.50
&,COS_U_LATITUDE(U_FIELD)!IN COS(LAT) AT U POINTS OMEGDI1A.51
&,LONGITUDE_STEP_INVERSE !IN 1/LONGITUDE INCREMENT OMEGDI1A.52
&,LATITUDE_STEP_INVERSE !IN 1/LATITUDE INCREMENT OMEGDI1A.53
&,BK(P_LEVELS) !IN HOLDS COEFFICIENT WHICH OMEGDI1A.54
& ! MULTIPLIES PSTAR IN HYBRID CO-ORDS OMEGDI1A.55
& ! AT LEVELS K OMEGDI1A.56
&,AK(P_LEVELS) !IN HOLDS FIRST COEFFICIENT OMEGDI1A.57
& ! IN HYBRID CO-ORDS AT LEVELS K OMEGDI1A.58
&,BKH(P_LEVELS+1) !IN HOLDS COEFFICIENT WHICH OMEGDI1A.59
& ! MULTIPLIES PSTAR IN HYBRID CO-ORDS OMEGDI1A.60
& ! AT half LEVELS K OMEGDI1A.61
&,AKH(P_LEVELS+1) !IN HOLDS FIRST COEFFICIENT OMEGDI1A.62
& ! IN HYBRID CO-ORDS AT half LEVELS K OMEGDI1A.63
&,DELTA_AK(P_LEVELS) !IN AK(K+1/2)-AK(K-1/2) OMEGDI1A.64
&,DELTA_BK(P_LEVELS) !IN BK(K+1/2)-BK(K-1/2) OMEGDI1A.65
&,ADVECTION_TIMESTEP !IN OMEGDI1A.66
OMEGDI1A.67
OMEGDI1A.68
REAL OMEGDI1A.69
& OMEGA(U_FIELD,P_LEVELS) !OUT. OMEGA AT U POINTS. OMEGDI1A.70
C*--------------------------------------------------------------------- OMEGDI1A.71
OMEGDI1A.72
C*L 9 LOCAL ARRAYS NEEDED. ----------------------------------------- OMEGDI1A.73
OMEGDI1A.74
REAL OMEGDI1A.75
& ETADOT(P_FIELD,P_LEVELS+1) ! HOLDS ETADOT OR PARTS THEREOF. OMEGDI1A.76
&, WORK1(P_FIELD) ! \ OMEGDI1A.77
&, WORK2(P_FIELD) ! > GENERAL WORK ARRAYS. OMEGDI1A.78
&, WORK3(P_FIELD) ! / OMEGDI1A.79
&, PSTAR_UV(U_FIELD) ! PSTAR AT U POINTS. OMEGDI1A.80
&, DELTA_P(U_FIELD) ! DEPTH OF LAYER AT U POINTS. OMEGDI1A.81
&, WP(U_FIELD) ! TERM IN OMEGA EQUATION. OMEGDI1A.82
&, DELTA_AKH(P_LEVELS+1) ! AK(K) -AK(K-1) OMEGDI1A.83
&, DELTA_BKH(P_LEVELS+1) ! BK(K) - BK(K-1) OMEGDI1A.84
C*--------------------------------------------------------------------- OMEGDI1A.85
OMEGDI1A.86
C DEFINE COUNT VARIABLES FOR DO LOOPS ETC. OMEGDI1A.87
INTEGER OMEGDI1A.88
& I,J,K OMEGDI1A.89
&, START,END OMEGDI1A.90
C DEFINE LOCAL SCALARS OMEGDI1A.91
REAL OMEGDI1A.92
& SCALAR OMEGDI1A.93
OMEGDI1A.94
*IF DEF,GLOBAL OMEGDI1A.95
REAL SUM_N(P_LEVELS),SUM_S(P_LEVELS) GSM3F403.72
*ENDIF OMEGDI1A.97
OMEGDI1A.98
*IF DEF,MPP GSM3F403.73
REAL GSM3F403.74
& SUM_N_ARRAY(ROW_LENGTH,P_LEVELS) GSM3F403.75
& ,SUM_S_ARRAY(ROW_LENGTH,P_LEVELS) GSM3F403.76
GSM3F403.77
INTEGER GSM3F403.78
& info GSM3F403.79
GSM3F403.80
*ENDIF GSM3F403.81
C*L EXTERNAL SUBROUTINE CALLS:--------------------------------------- OMEGDI1A.99
EXTERNAL P_TO_UV OMEGDI1A.100
C*--------------------------------------------------------------------- OMEGDI1A.101
*CALL C_A
OMEGDI1A.102
OMEGDI1A.103
CL MAXIMUM VECTOR LENGTH ASSUMED IS P_FIELD OMEGDI1A.104
CL--------------------------------------------------------------------- OMEGDI1A.105
CL INTERNAL STRUCTURE. OMEGDI1A.106
CL--------------------------------------------------------------------- OMEGDI1A.107
CL OMEGDI1A.108
CL--------------------------------------------------------------------- OMEGDI1A.109
CL SECTION 0. SET UP PSTAR AT U POINTS AND DELTA_AKH,_BKH OMEGDI1A.110
CL--------------------------------------------------------------------- OMEGDI1A.111
CL OMEGDI1A.112
OMEGDI1A.113
CL CALL P_TO_UV TO INTERPOLATE PSTAR TO U POINTS. OMEGDI1A.114
OMEGDI1A.115
CALL P_TO_UV
(PSTAR,PSTAR_UV,P_FIELD,U_FIELD,ROW_LENGTH, OMEGDI1A.116
& P_FIELD/ROW_LENGTH) OMEGDI1A.117
*IF DEF,MPP GSM3F403.82
CALL SWAPBOUNDS
(PSTAR_UV,ROW_LENGTH,tot_U_ROWS, GSM3F403.83
& EW_Halo,NS_Halo,1) GSM3F403.84
*ENDIF GSM3F403.85
OMEGDI1A.118
C SET UP DELTA_AKH,_BKH OMEGDI1A.119
DO K=2,P_LEVELS OMEGDI1A.121
DELTA_AKH(K) = AK(K) - AK(K-1) OMEGDI1A.122
DELTA_BKH(K) = BK(K) - BK(K-1) OMEGDI1A.123
END DO OMEGDI1A.124
DELTA_AKH(1) = 0. OMEGDI1A.125
DELTA_AKH(P_LEVELS+1) = 0. OMEGDI1A.126
DELTA_BKH(1) = 0. OMEGDI1A.127
DELTA_BKH(P_LEVELS+1) = 0. OMEGDI1A.128
OMEGDI1A.129
C LOOP OVER LEVELS OMEGDI1A.130
DO 100 K=1,P_LEVELS OMEGDI1A.131
OMEGDI1A.132
CL--------------------------------------------------------------------- OMEGDI1A.133
CL SECTION 1. CALCULATE DIVERGENCE AS IN EQUATION (30). OMEGDI1A.134
CL--------------------------------------------------------------------- OMEGDI1A.135
OMEGDI1A.136
DO I=1,U_FIELD OMEGDI1A.137
DELTA_P(I) = DELTA_AK(K)+DELTA_BK(K)*PSTAR_UV(I) OMEGDI1A.138
END DO OMEGDI1A.139
OMEGDI1A.140
C CALCULATE DU/D(LAMDA), STORE IN ETADOT. OMEGDI1A.141
DO I=2,U_FIELD OMEGDI1A.142
WORK1(I) = LONGITUDE_STEP_INVERSE*(U(I,K)*DELTA_P(I) OMEGDI1A.143
& -U(I-1,K)*DELTA_P(I-1)) OMEGDI1A.144
END DO OMEGDI1A.145
OMEGDI1A.146
C CALCULATE DV/D(PHI), store in work2. OMEGDI1A.147
DO I=ROW_LENGTH+1,U_FIELD OMEGDI1A.148
WORK2(I) = LATITUDE_STEP_INVERSE*((V(I-ROW_LENGTH,K) GSM3F403.86
& *COS_U_LATITUDE(I-ROW_LENGTH))*DELTA_P(I-ROW_LENGTH) GSM3F403.87
& -(V(I,K)*COS_U_LATITUDE(I))*DELTA_P(I)) GSM3F403.88
END DO OMEGDI1A.152
OMEGDI1A.153
*IF DEF,GLOBAL OMEGDI1A.154
C CALCULATE AVERAGE OF DV/D(PHI), STORE IN WORK3. OMEGDI1A.155
DO I=ROW_LENGTH+2,U_FIELD OMEGDI1A.156
WORK3(I) = WORK2(I) + WORK2(I-1) OMEGDI1A.157
END DO OMEGDI1A.158
OMEGDI1A.159
*IF -DEF,MPP GSM3F403.89
C NOW DO FIRST POINT ON EACH SLICE FOR DU/D(LAMDA) AND DV/D(PHI) OMEGDI1A.160
WORK1(1) = LONGITUDE_STEP_INVERSE * (U(1,K)*DELTA_P(1) OMEGDI1A.161
& - U(ROW_LENGTH,K)*DELTA_P(ROW_LENGTH)) OMEGDI1A.162
DO I=ROW_LENGTH+1,U_FIELD,ROW_LENGTH OMEGDI1A.163
WORK1(I) = LONGITUDE_STEP_INVERSE * (U(I,K)*DELTA_P(I) OMEGDI1A.164
& - U(I+ROW_LENGTH-1,K)*DELTA_P(I+ROW_LENGTH-1)) OMEGDI1A.165
WORK3(I)=WORK2(I)+WORK2(I-1+ROW_LENGTH) OMEGDI1A.166
END DO OMEGDI1A.167
*ENDIF GSM3F403.90
C CALCULATE DIVERGENCES. STORE IN ETADOT. OMEGDI1A.169
OMEGDI1A.170
*IF DEF,MPP GSM3F403.91
DO I=START_POINT_NO_HALO+EW_Halo,END_P_POINT_NO_HALO-EW_Halo GSM3F403.92
*ELSE GSM3F403.93
DO I=ROW_LENGTH+1,U_FIELD OMEGDI1A.171
*ENDIF GSM3F403.94
ETADOT(I,K)= (SEC_P_LATITUDE(I)*.5)*(WORK1(I) GSM3F403.95
& + WORK1(I-ROW_LENGTH) OMEGDI1A.173
& + WORK3(I)) OMEGDI1A.174
END DO OMEGDI1A.175
*ELSE OMEGDI1A.176
WORK2(1) = 0. OMEGDI1A.177
OMEGDI1A.178
C CALCULATE DIVERGENCES. STORE IN ETADOT OMEGDI1A.179
OMEGDI1A.180
*IF DEF,MPP GSM3F403.96
DO I=START_POINT_NO_HALO+EW_Halo,END_P_POINT_NO_HALO-EW_Halo GSM3F403.97
*ELSE GSM3F403.98
DO I=ROW_LENGTH+2,U_FIELD-1 OMEGDI1A.181
*ENDIF GSM3F403.99
ETADOT(I,K)= (SEC_P_LATITUDE(I)*.5)*(WORK1(I) GSM3F403.100
& + WORK1(I-ROW_LENGTH) OMEGDI1A.183
& + WORK2(I) + WORK2(I-1)) OMEGDI1A.184
END DO OMEGDI1A.185
OMEGDI1A.186
C ZERO DIVERGENCES ON BOUNDARIES. OMEGDI1A.187
*IF DEF,MPP GSM3F403.101
IF (at_left_of_LPG) THEN GSM3F403.102
DO I=ROW_LENGTH+1+EW_Halo,P_FIELD,ROW_LENGTH GSM3F403.103
ETADOT(I,K) = 0. GSM3F403.104
ENDDO GSM3F403.105
ENDIF GSM3F403.106
IF (at_right_of_LPG) THEN GSM3F403.107
DO I=2*ROW_LENGTH-EW_Halo,P_FIELD,ROW_LENGTH GSM3F403.108
ETADOT(I,K) = 0. GSM3F403.109
ENDDO GSM3F403.110
ENDIF GSM3F403.111
*ELSE GSM3F403.112
DO I=ROW_LENGTH+1,U_FIELD,ROW_LENGTH OMEGDI1A.188
ETADOT(I,K) = 0. OMEGDI1A.189
ETADOT(I+ROW_LENGTH-1,K) = 0. OMEGDI1A.190
END DO OMEGDI1A.191
*ENDIF GSM3F403.113
*ENDIF OMEGDI1A.192
OMEGDI1A.193
OMEGDI1A.194
*IF DEF,GLOBAL OMEGDI1A.195
C CALCULATE DIVERGENCE AT POLES BY SUMMING DV/D(LAT) AROUND POLAR OMEGDI1A.196
C CIRCLE AND AVERAGING. OMEGDI1A.197
SCALAR = (8.*LATITUDE_STEP_INVERSE) * (LATITUDE_STEP_INVERSE GSM3F403.114
*IF DEF,MPP GSM3F403.115
& /GLOBAL_ROW_LENGTH) GSM3F403.116
*ELSE GSM3F403.117
& /ROW_LENGTH) GSM3F403.118
*ENDIF GSM3F403.119
SUM_N(K) = 0. GSM3F403.120
SUM_S(K) = 0. GSM3F403.121
*IF DEF,MPP GSM3F403.122
IF (at_top_of_LPG) THEN GSM3F403.123
DO I=TOP_ROW_START+EW_Halo,START_POINT_NO_HALO-1-EW_Halo GSM3F403.124
SUM_N_ARRAY(I-TOP_ROW_START,K)= GSM3F403.125
& -(V(I,K)*DELTA_P(I))*(COS_U_LATITUDE(I)*SCALAR) GSM3F403.126
ENDDO GSM3F403.127
ENDIF GSM3F403.128
IF (at_base_of_LPG) THEN GSM3F403.129
DO I=U_BOT_ROW_START+EW_Halo,LAST_U_FLD_PT-EW_Halo GSM3F403.130
SUM_S_ARRAY(I-U_BOT_ROW_START,K)= GSM3F403.131
& (V(I,K)*SCALAR)*(DELTA_P(I)*COS_U_LATITUDE(I)) GSM3F403.132
ENDDO GSM3F403.133
ENDIF GSM3F403.134
GSM3F403.135
*ELSE GSM3F403.136
DO I=1,ROW_LENGTH OMEGDI1A.202
SUM_N(K) = SUM_N(K) - (V(I,K)*DELTA_P(I)) GSM3F403.137
& *(COS_U_LATITUDE(I)*SCALAR) GSM3F403.138
SUM_S(K) = SUM_S(K) + (V(U_FIELD+I-ROW_LENGTH,K)*SCALAR) GSM3F403.139
& *(delta_p(u_field+i-row_length) GSM3F403.140
& *cos_u_latitude(u_field+i-row_length)) GSM3F403.141
END DO OMEGDI1A.207
*ENDIF GSM3F403.142
*ENDIF GSM3F403.143
100 CONTINUE GSM3F403.144
GSM3F403.145
*IF DEF,GLOBAL GSM3F403.146
*IF DEF,MPP GSM3F403.147
IF (at_top_of_LPG) THEN GSM3F403.148
CALL GCG_RVECSUMR(
ROW_LENGTH,ROW_LENGTH-2*EW_Halo, GSM3F403.149
& EW_Halo,P_LEVELS,SUM_N_ARRAY,GC_ROW_GROUP,info,SUM_N) GSM3F403.150
ENDIF GSM3F403.151
IF (at_base_of_LPG) THEN GSM3F403.152
CALL GCG_RVECSUMR(
ROW_LENGTH,ROW_LENGTH-2*EW_Halo, GSM3F403.153
& EW_Halo,P_LEVELS,SUM_S_ARRAY,GC_ROW_GROUP,info,SUM_S) GSM3F403.154
ENDIF GSM3F403.155
*ENDIF GSM3F403.156
GSM3F403.157
DO K=1,P_LEVELS GSM3F403.158
C DIVERGENCE AT POLES GSM3F403.159
*IF DEF,MPP GSM3F403.160
IF (at_top_of_LPG) THEN GSM3F403.161
ETADOT(START_POINT_NO_HALO+EW_Halo-1,K) = SUM_N(K) GSM3F403.162
ENDIF GSM3F403.163
IF (at_base_of_LPG) THEN GSM3F403.164
ETADOT(END_P_POINT_NO_HALO-EW_Halo+1,K) = SUM_S(K) GSM3F403.165
ENDIF GSM3F403.166
*ELSE GSM3F403.167
ETADOT(ROW_LENGTH,K) = SUM_N(K) GSM3F403.168
ETADOT(P_FIELD-ROW_LENGTH+1,K) = SUM_S(K) GSM3F403.169
*ENDIF OMEGDI1A.210
C END LOOP OVER LEVELS OMEGDI1A.211
ENDDO GSM3F403.170
*ENDIF GSM3F403.171
OMEGDI1A.213
CL OMEGDI1A.214
CL--------------------------------------------------------------------- OMEGDI1A.215
CL SECTION 2. CALCULATE VERTICAL VELOCITY. EQUATION (29). OMEGDI1A.216
CL--------------------------------------------------------------------- OMEGDI1A.217
OMEGDI1A.218
*IF DEF,GLOBAL OMEGDI1A.219
C IF GLOBAL PERFORM SECTION 2 OVER POLES AS WELL AS OTHER POINTS. OMEGDI1A.220
C ONLY ONE POLAR POINT NEEDS TO BE DONE. OMEGDI1A.221
*IF DEF,MPP GSM3F403.172
START = START_POINT_NO_HALO+EW_Halo GSM3F403.173
END = END_P_POINT_NO_HALO-EW_Halo GSM3F403.174
C At poles, extra point holds polar values GSM3F403.175
IF (at_top_of_LPG) START = START-1 GSM3F403.176
IF (at_base_of_LPG) END = END+1 GSM3F403.177
*ELSE GSM3F403.178
START = ROW_LENGTH OMEGDI1A.222
END = P_FIELD-ROW_LENGTH + 1 GSM3F403.179
*ENDIF GSM3F403.180
*ELSE GSM3F403.181
*IF DEF,MPP GSM3F403.182
START = START_POINT_NO_HALO+EW_Halo GSM3F403.183
END = END_P_POINT_NO_HALO-EW_Halo GSM3F403.184
*ELSE OMEGDI1A.224
START = ROW_LENGTH + 1 AMN1F400.3
END = P_FIELD-ROW_LENGTH GSM3F403.185
*ENDIF GSM3F403.186
*ENDIF OMEGDI1A.227
OMEGDI1A.228
C --------------------------------------------------------------------- OMEGDI1A.229
CL SECTION 2.1 SUM DIVERGENCES THROUGHOUT ATMOSPHERE. OMEGDI1A.230
C --------------------------------------------------------------------- OMEGDI1A.231
OMEGDI1A.232
C BY CODING THE SUMMATION AS FOLLOWS THE VALUES PUT INTO EACH LEVEL OMEGDI1A.233
C OF ETADOT ARE THE ONES NEEDED FOR THE SECOND SUMMATION TERM OMEGDI1A.234
C IN EQUATION 29, WHILE THE TOTAL SUM IS HELD IN ETADOT( ,1) OMEGDI1A.235
OMEGDI1A.236
DO 210 K=P_LEVELS-1,1,-1 OMEGDI1A.237
DO I=START,END OMEGDI1A.238
ETADOT(I,K)= ETADOT(I,K)+ETADOT(I,K+1) OMEGDI1A.239
END DO OMEGDI1A.240
210 CONTINUE OMEGDI1A.241
OMEGDI1A.242
C --------------------------------------------------------------------- OMEGDI1A.243
CL SECTION 2.2 CALCULATE MASS-WEIGHTED VERTICAL VELOCITY. OMEGDI1A.244
C --------------------------------------------------------------------- OMEGDI1A.245
OMEGDI1A.246
C DP/D(PSTAR) IS NOTHING MORE THAN THE BK COEFFICENT. OMEGDI1A.247
OMEGDI1A.248
DO 220 K= P_LEVELS,2,-1 OMEGDI1A.249
DO I= START, END OMEGDI1A.250
ETADOT(I,K)= ETADOT(I,K) - BKH(K) * ETADOT(I,1) OMEGDI1A.251
END DO OMEGDI1A.252
220 CONTINUE OMEGDI1A.253
OMEGDI1A.254
DO 230 K=1,P_LEVELS OMEGDI1A.255
*IF DEF,GLOBAL OMEGDI1A.256
C IF GLOBAL MODEL SET ALL POINTS AT POLES TO THE UNIQUE VALUE. OMEGDI1A.257
*IF DEF,MPP GSM3F403.187
C MPP: Above, polar values stored in START and END points GSM3F403.188
IF (at_top_of_LPG) THEN GSM3F403.189
DO I=TOP_ROW_START+EW_Halo,START-1 GSM3F403.190
ETADOT(I,K)=ETADOT(START,K) GSM3F403.191
ENDDO GSM3F403.192
ENDIF GSM3F403.193
IF (at_base_of_LPG) THEN GSM3F403.194
DO I=END+1,LAST_P_FLD_PT-EW_Halo GSM3F403.195
ETADOT(I,K)=ETADOT(END,K) GSM3F403.196
ENDDO GSM3F403.197
ENDIF GSM3F403.198
*ELSE GSM3F403.199
CDIR$ IVDEP OMEGDI1A.258
! Fujitsu vectorization directive GRB0F405.429
!OCL NOVREC GRB0F405.430
DO I=1,ROW_LENGTH-1 OMEGDI1A.259
ETADOT(I,K)= ETADOT(ROW_LENGTH,K) OMEGDI1A.260
ETADOT(END+I,K)= ETADOT(END,K) OMEGDI1A.261
END DO OMEGDI1A.262
*ENDIF GSM3F403.200
*ELSE OMEGDI1A.263
C SET NORTHERN AND SOUTHERN BOUNDARIES TO ZERO. OMEGDI1A.264
*IF DEF,MPP GSM3F403.201
IF (at_top_of_LPG) THEN GSM3F403.202
DO I=TOP_ROW_START+EW_Halo,START-1 GSM3F403.203
ETADOT(I,K) = 0. GSM3F403.204
ENDDO GSM3F403.205
ENDIF GSM3F403.206
IF (at_base_of_LPG) THEN GSM3F403.207
DO I=END+1,LAST_P_FLD_PT-EW_Halo GSM3F403.208
ETADOT(I,K) = 0. GSM3F403.209
ENDDO GSM3F403.210
ENDIF GSM3F403.211
*ELSE GSM3F403.212
DO I=1,ROW_LENGTH OMEGDI1A.265
ETADOT(I,K) = 0. OMEGDI1A.266
ETADOT(P_FIELD+1-I,K) = 0. OMEGDI1A.267
END DO OMEGDI1A.268
*ENDIF OMEGDI1A.269
*ENDIF GSM3F403.213
230 CONTINUE OMEGDI1A.270
OMEGDI1A.271
CL INTERPOLATE ETADOT TO U POINTS. OMEGDI1A.272
CL LOOP OVER LEVELS OMEGDI1A.273
*IF DEF,MPP GSM3F403.214
CALL SWAPBOUNDS
(ETADOT(1,2),ROW_LENGTH,tot_P_ROWS,EW_Halo, GSM3F403.215
& NS_Halo,P_LEVELS-1) GSM3F403.216
*ENDIF GSM3F403.217
DO K=2,P_LEVELS OMEGDI1A.274
CALL P_TO_UV
(ETADOT(1,K),WORK1,P_FIELD,U_FIELD,ROW_LENGTH, OMEGDI1A.275
& P_FIELD/ROW_LENGTH) OMEGDI1A.276
DO I=1,U_FIELD OMEGDI1A.277
ETADOT(I,K) = WORK1(I) OMEGDI1A.278
END DO OMEGDI1A.279
END DO OMEGDI1A.280
OMEGDI1A.281
CL SET ETADOT AT TOP AND BOTTOM TO ZERO. OMEGDI1A.282
DO I=1,P_FIELD OMEGDI1A.283
ETADOT(I,1) = 0. OMEGDI1A.284
ETADOT(I,P_LEVELS+1) = 0. OMEGDI1A.285
END DO OMEGDI1A.286
OMEGDI1A.287
CL LOOP OVER LEVELS OMEGDI1A.288
DO 300 K=1,P_LEVELS OMEGDI1A.289
CL OMEGDI1A.290
CL--------------------------------------------------------------------- OMEGDI1A.291
CL SECTION 3. CALCULATE DP/DT OMEGDI1A.292
CL--------------------------------------------------------------------- OMEGDI1A.293
OMEGDI1A.294
IF(BK(K).EQ.0.) THEN OMEGDI1A.295
C A CONSTANT PRESSURE LEVEL SO DP/DT IS ZERO. OMEGDI1A.296
DO I=1,U_FIELD OMEGDI1A.297
WORK3(I) = 0. OMEGDI1A.298
END DO OMEGDI1A.299
ELSE OMEGDI1A.300
C CALCULATE DP/DT. OMEGDI1A.301
SCALAR = BK(k)/ADVECTION_TIMESTEP OMEGDI1A.302
DO I=1,P_FIELD OMEGDI1A.303
WORK2(I) = (PSTAR(I)-PSTAR_OLD(I))*SCALAR OMEGDI1A.304
END DO OMEGDI1A.305
C INTERPOLATE DP/DT TO U POINTS. OMEGDI1A.306
CALL P_TO_UV
(WORK2,WORK3,P_FIELD,U_FIELD,ROW_LENGTH, OMEGDI1A.307
& P_FIELD/ROW_LENGTH) OMEGDI1A.308
END IF OMEGDI1A.309
OMEGDI1A.310
CL--------------------------------------------------------------------- OMEGDI1A.311
CL SECTION 4. CALCULATE U.GRAD P OMEGDI1A.312
CL--------------------------------------------------------------------- OMEGDI1A.313
OMEGDI1A.314
C---------------------------------------------------------------------- OMEGDI1A.315
CL SECTION 4.1 CALCULATE U DP/D(LAMDA) OMEGDI1A.316
C---------------------------------------------------------------------- OMEGDI1A.317
OMEGDI1A.318
C CALCULATE U DP/D(LAMDA) BETWEEN P POINTS OMEGDI1A.319
SCALAR=(.5*LONGITUDE_STEP_INVERSE)*(BK(K)/A) GSM3F403.218
*IF DEF,MPP GSM3F403.219
DO I=START_POINT_NO_HALO+EW_Halo,END_P_POINT_NO_Halo-EW_Halo GSM3F403.220
*ELSE GSM3F403.221
DO I=ROW_LENGTH+1,P_FIELD-ROW_LENGTH-1 GSM3F403.222
*ENDIF GSM3F403.223
WORK1(I) = ((U(I,K)+U(I-ROW_LENGTH,K))* GSM3F403.224
& (PSTAR(I+1)-PSTAR(I)))*(SEC_P_LATITUDE(I)* GSM3F403.225
& SCALAR) GSM3F403.226
END DO OMEGDI1A.324
C SET POLAR/BOUNDARY VALUES TO ZERO. OMEGDI1A.325
*IF DEF,MPP GSM3F403.227
IF (at_top_of_LPG) THEN GSM3F403.228
DO I=TOP_ROW_START+EW_Halo,START_POINT_NO_HALO-1-EW_Halo GSM3F403.229
WORK1(I) = 0. GSM3F403.230
ENDDO GSM3F403.231
ENDIF GSM3F403.232
IF (at_base_of_LPG) THEN GSM3F403.233
DO I=P_BOT_ROW_START+EW_Halo,LAST_P_FLD_PT-EW_Halo GSM3F403.234
WORK1(I) = 0. GSM3F403.235
ENDDO GSM3F403.236
ELSE GSM3F403.237
C Calculate bottom row halo values to allow WP to be calculated GSM3F403.238
DO I=P_BOT_ROW_START+EW_Halo,LAST_P_VALID_PT-EW_Halo GSM3F403.239
WORK1(I) = ((U(I,K)+U(I-ROW_LENGTH,K))* GSM3F403.240
& (PSTAR(I+1)-PSTAR(I)))*(SEC_P_LATITUDE(I) GSM3F403.241
& *SCALAR) GSM3F403.242
ENDDO GSM3F403.243
ENDIF GSM3F403.244
*ELSE GSM3F403.245
DO I=1,ROW_LENGTH OMEGDI1A.326
WORK1(I) = 0. OMEGDI1A.327
WORK1(P_FIELD+1-I) = 0. OMEGDI1A.328
END DO OMEGDI1A.329
*ENDIF GSM3F403.246
*IF -DEF,MPP GSM3F403.247
*IF DEF,GLOBAL OMEGDI1A.331
C GLOBAL MODEL SO RECALCULATE VALUE AT END-POINT OMEGDI1A.332
DO I=ROW_LENGTH*2,U_FIELD,ROW_LENGTH OMEGDI1A.333
WORK1(I) = ((U(I,K)+U(I-ROW_LENGTH,K))* GSM3F403.248
& (PSTAR(I+1-ROW_LENGTH)-PSTAR(I)))*(SEC_P_LATITUDE(I) GSM3F403.249
& *SCALAR) GSM3F403.250
END DO OMEGDI1A.337
*ELSE OMEGDI1A.338
WORK1(U_FIELD) = 0. OMEGDI1A.339
*ENDIF OMEGDI1A.340
*ENDIF GSM3F403.251
OMEGDI1A.341
C CALCULATE U DP/D(LONGITUDE) AT U POINTS OMEGDI1A.342
*IF DEF,MPP GSM3F403.252
IF (at_top_of_LPG) THEN GSM3F403.253
DO I=TOP_ROW_START+EW_Halo,START_POINT_NO_HALO-1+EW_Halo GSM3F403.254
WP(I) = .5*WORK1(I+ROW_LENGTH) GSM3F403.255
ENDDO GSM3F403.256
ENDIF GSM3F403.257
DO I=START_POINT_NO_HALO+EW_Halo,LAST_U_FLD_PT-EW_Halo GSM3F403.258
*ELSE GSM3F403.259
DO I=1,U_FIELD OMEGDI1A.344
*ENDIF GSM3F403.260
WP(I) = .5*(WORK1(I)+WORK1(I+ROW_LENGTH)) OMEGDI1A.345
END DO OMEGDI1A.346
OMEGDI1A.347
C---------------------------------------------------------------------- OMEGDI1A.348
CL SECTION 4.2 CALCULATE V DP/D(PHI) AND HENCE U.GRAD P OMEGDI1A.349
C---------------------------------------------------------------------- OMEGDI1A.350
OMEGDI1A.351
C CALCULATE V DP/D(PHI) BETWEEN P POINTS. OMEGDI1A.352
SCALAR=(.5*LATITUDE_STEP_INVERSE)*(BK(K)/A) GSM3F403.261
*IF DEF,MPP GSM3F403.262
DO I=TOP_ROW_START+1,LAST_U_FLD_PT GSM3F403.263
*ELSE GSM3F403.264
DO I=2,U_FIELD OMEGDI1A.354
*ENDIF GSM3F403.265
WORK2(I) = ((V(I,K)+V(I-1,K))* GSM3F403.266
& (PSTAR(I)-PSTAR(I+ROW_LENGTH))) GSM3F403.267
& *SCALAR GSM3F403.268
END DO OMEGDI1A.358
*IF -DEF,MPP GSM3F403.269
*IF DEF,GLOBAL OMEGDI1A.360
OMEGDI1A.361
C GLOBAL MODEL SO RECALCULATE FIRST POINT VALUES FOR V DP/D(LAT) OMEGDI1A.362
OMEGDI1A.363
DO I=1,U_FIELD,ROW_LENGTH OMEGDI1A.364
WORK2(I) = ((V(I,k)+V(I-1+ROW_LENGTH,k))*(PSTAR(I)- GSM3F403.270
& PSTAR(I+ROW_LENGTH)))*SCALAR GSM3F403.271
END DO OMEGDI1A.367
*ELSE OMEGDI1A.368
WORK2(1) = 0. OMEGDI1A.369
OMEGDI1A.370
*ENDIF OMEGDI1A.371
*ENDIF GSM3F403.272
OMEGDI1A.372
CL CALCULATE V DP/D(LAT) AT U POINTS AND ADD TO WP. OMEGDI1A.373
*IF DEF,MPP GSM3F403.273
DO I=TOP_ROW_START+1,LAST_U_FLD_PT-EW_Halo GSM3F403.274
*ELSE GSM3F403.275
DO I=1,U_FIELD-1 OMEGDI1A.374
*ENDIF GSM3F403.276
WORK1(I) = .5*(WORK2(I)+WORK2(I+1)) OMEGDI1A.375
END DO OMEGDI1A.376
OMEGDI1A.377
*IF -DEF,MPP GSM3F403.277
*IF DEF,GLOBAL OMEGDI1A.378
C RE-CALCULATE END POINT VALUE. OMEGDI1A.379
DO I=ROW_LENGTH,U_FIELD,ROW_LENGTH OMEGDI1A.380
WORK1(I) = .5*(WORK2(I)+WORK2(I+1-ROW_LENGTH)) OMEGDI1A.381
END DO OMEGDI1A.382
*ENDIF OMEGDI1A.383
*ENDIF GSM3F403.278
GSM3F403.279
*IF DEF,MPP GSM3F403.280
DO I=FIRST_FLD_PT+EW_Halo,LAST_U_FLD_PT-EW_Halo GSM3F403.281
*ELSE GSM3F403.282
DO I=1,U_FIELD OMEGDI1A.384
*ENDIF GSM3F403.283
WP(I) = WP(I) +WORK1(I) OMEGDI1A.385
END DO OMEGDI1A.386
OMEGDI1A.387
CL--------------------------------------------------------------------- OMEGDI1A.388
CL SECTION 5. CALCULATE OMEGA AS IN EQUATION (44). OMEGDI1A.389
CL--------------------------------------------------------------------- OMEGDI1A.390
OMEGDI1A.391
*IF DEF,MPP GSM3F403.284
DO I=FIRST_FLD_PT+EW_Halo,LAST_U_FLD_PT-EW_Halo GSM3F403.285
*ELSE GSM3F403.286
*IF DEF,GLOBAL OMEGDI1A.392
DO I=1,U_FIELD OMEGDI1A.393
*ELSE OMEGDI1A.394
DO I=2,U_FIELD-1 OMEGDI1A.395
*ENDIF OMEGDI1A.396
*ENDIF GSM3F403.287
OMEGA(I,K)= (WP(I)+WORK3(I))+((.5*(ETADOT(I,K+1)* GSM3F403.288
& (DELTA_AKH(K+1)+DELTA_BKH(K+1)*PSTAR_UV(I)) OMEGDI1A.398
& +ETADOT(I,K) OMEGDI1A.399
& *(DELTA_AKH(K)+DELTA_BKH(K)*PSTAR_UV(I)))) GSM3F403.289
& /(A*(DELTA_AK(K)+DELTA_BK(K)*PSTAR_UV(I)))) GSM3F403.290
END DO OMEGDI1A.402
*IF DEF,MPP GSM3F403.291
C Initialise unused rows of OMEGA GSM3F403.292
DO I=FIRST_FLD_PT+EW_Halo-1,1,-1 GSM3F403.293
OMEGA(I,K)=OMEGA(I+ROW_LENGTH,K) GSM3F403.294
ENDDO GSM3F403.295
DO I=LAST_U_FLD_PT-EW_Halo+1,U_FIELD GSM3F403.296
OMEGA(I,K)=OMEGA(I-ROW_LENGTH,K) GSM3F403.297
ENDDO GSM3F403.298
*ENDIF GSM3F403.299
*IF -DEF,GLOBAL OMEGDI1A.404
OMEGDI1A.405
CL LIMITED AREA MODEL SET VERTICAL VELOCITY ON BOUNDARY TO ZERO. OMEGDI1A.406
*IF -DEF,MPP GSM3F403.300
DO I=1,U_FIELD,ROW_LENGTH OMEGDI1A.408
OMEGA(I,K) = 0. OMEGDI1A.409
OMEGA(I+ROW_LENGTH-1,K) = 0. OMEGDI1A.410
OMEGA(I+ROW_LENGTH-2,K) = 0. OMEGDI1A.411
END DO OMEGDI1A.412
*ELSE GSM3F403.301
IF (at_left_of_LPG) THEN GSM3F403.302
DO I=ROW_LENGTH+1+EW_Halo,LAST_U_FLD_PT,ROW_LENGTH GSM3F403.303
OMEGA(I,K) = 0. GSM3F403.304
ENDDO GSM3F403.305
ENDIF GSM3F403.306
IF (at_right_of_LPG) THEN GSM3F403.307
DO I=ROW_LENGTH-EW_Halo,LAST_U_FLD_PT,ROW_LENGTH GSM3F403.308
OMEGA(I,K) = 0. GSM3F403.309
OMEGA(I-1,K) = 0. GSM3F403.310
ENDDO GSM3F403.311
ENDIF GSM3F403.312
*ENDIF GSM3F403.313
*ENDIF OMEGDI1A.414
OMEGDI1A.415
CL END LOOP OVER LEVELS. OMEGDI1A.416
300 CONTINUE OMEGDI1A.417
*IF DEF,MPP GSM3F403.314
CALL SWAPBOUNDS
(OMEGA(1,1),ROW_LENGTH,tot_U_ROWS,EW_Halo, GSM3F403.315
& NS_Halo,P_LEVELS) GSM3F403.316
*ENDIF GSM3F403.317
OMEGDI1A.418
CL END OF ROUTINE OMEGA_DIAG OMEGDI1A.419
OMEGDI1A.420
RETURN OMEGDI1A.421
END OMEGDI1A.422
*ENDIF OMEGDI1A.423