*IF DEF,A06_3A,OR,DEF,A06_3B ADR2F405.4
C ******************************COPYRIGHT****************************** GTS2F400.3547
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.3548
C GTS2F400.3549
C Use, duplication or disclosure of this code is subject to the GTS2F400.3550
C restrictions as set forth in the contract. GTS2F400.3551
C GTS2F400.3552
C Meteorological Office GTS2F400.3553
C London Road GTS2F400.3554
C BRACKNELL GTS2F400.3555
C Berkshire UK GTS2F400.3556
C RG12 2SZ GTS2F400.3557
C GTS2F400.3558
C If no contract has been raised with this copy of the code, the use, GTS2F400.3559
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.3560
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.3561
C Modelling at the above address. GTS2F400.3562
C ******************************COPYRIGHT****************************** GTS2F400.3563
C GTS2F400.3564
!+ Calls components of version 3A of gravity wave drag scheme. GWAVE3A.3
! GWAVE3A.4
SUBROUTINE G_WAVE 2,24GWAVE3A.5
1 (PSTAR,PEXNER,THETA,Q,U,V,P_FIELD,U_FIELD, GWAVE3A.6
2 ROWS_P,ROW_LENGTH,START_LEVEL,LEVELS,Q_LEVELS, GWAVE3A.7
*CALL ARGFLDPT
APBEF401.40
3 AK,BK,AKH,BKH,DELTA_AK,DELTA_BK,SD_OROG_LAND, GWAVE3A.8
4 OROG_GRAD_XX_LAND,OROG_GRAD_XY_LAND,OROG_GRAD_YY_LAND, GWAVE3A.9
5 LAND_INDEX,LAND_POINTS,TIMESTEP,KAY,KAY_LEE, ASW1F403.28
6 STRESS_UD,LEN_STRESS_UD,STRESS_UD_ON,U_LIST1,POINTS_STRESS_UD, GWAVE3A.11
7 STRESS_VD,LEN_STRESS_VD,STRESS_VD_ON,V_LIST1,POINTS_STRESS_VD, GWAVE3A.12
8 DU_DT_SATN,LEN_DU_DT_SATN,DU_DT_SATN_ON, GWAVE3A.13
9 U_LIST2,POINTS_DU_DT_SATN, GWAVE3A.14
& DV_DT_SATN,LEN_DV_DT_SATN,DV_DT_SATN_ON, GWAVE3A.15
& V_LIST2,POINTS_DV_DT_SATN, GWAVE3A.16
& DU_DT_JUMP,LEN_DU_DT_JUMP,DU_DT_JUMP_ON, GWAVE3A.17
& U_LIST3,POINTS_DU_DT_JUMP, GWAVE3A.18
& DV_DT_JUMP,LEN_DV_DT_JUMP,DV_DT_JUMP_ON, GWAVE3A.19
& V_LIST3,POINTS_DV_DT_JUMP, GWAVE3A.20
& DU_DT_LEE,LEN_DU_DT_LEE,DU_DT_LEE_ON,U_LIST4,POINTS_DU_DT_LEE, GWAVE3A.21
& DV_DT_LEE,LEN_DV_DT_LEE,DV_DT_LEE_ON,V_LIST4,POINTS_DV_DT_LEE, GWAVE3A.22
& TRANS_D,LEN_TRANS_D,TRANS_D_ON,POINTS_TRANS_D,IRET) GWAVE3A.23
GWAVE3A.24
IMPLICIT NONE GWAVE3A.25
! GWAVE3A.26
! Description: GWAVE3A.27
! 1) INTERPOLATE WINDS TO P/THETA POINTS GWAVE3A.28
! 2) GATHER DATA FOR LAND POINTS ONLY GWAVE3A.29
! 3) CALL ANISOTOPIC SURFACE STRESS ROUTINE GWAVE3A.30
! 4) CALL VERTICAL STRESS PROFILE ROUTINE TO CALCULATE DRAG AT GWAVE3A.31
! EACH LEVEL GWAVE3A.32
! 5) INTERPOLATE ACCELERATION TO WIND POINTS AND UPDATE WINDS GWAVE3A.33
! GWAVE3A.34
! Current Code Owner: S.Webster ASW1F403.29
! GWAVE3A.36
! History: GWAVE3A.37
! Version Date Comment GWAVE3A.38
! ------- ---- ------- GWAVE3A.39
! 3.4 18/10/94 Original code. J.R.Mitchell. GWAVE3A.40
! 4.3 7/03/97 KAY_LEE passed in from namelist. S.Webster ASW1F403.30
! 4.4 19/09/97 Remove *IF -DEF,CRAY compile options. S.Webster ASW1F404.6
! 4.5 13/03/97 Correct MPP GWD diagnostic bug. S. Webster ASW1F405.19
CLL 4.5 Jul. 98 Kill the IBM specific lines. AJC1F405.190
CLL Replace IBM with SCMA (JCThil) AJC1F405.191
! GWAVE3A.41
! Code Description: GWAVE3A.42
! Language: FORTRAN 77 + common extensions. GWAVE3A.43
! This code is written to UMDP3 v6 programming standards. GWAVE3A.44
! System component covered: GWAVE3A.45
! System Task: Part of P22 GWAVE3A.46
! SUITABLE FOR SINGLE COLUMN USE, WITH CALLS TO: UV_TO_P REMOVED GWAVE3A.47
! P_TO_UV REMOVED GWAVE3A.48
! (SCMA on) AJC1F405.192
! SUITABLE FOR ROTATED GRIDS GWAVE3A.49
! GWAVE3A.50
! Global variables (*CALLed COMDECKs etc...): GWAVE3A.51
GWAVE3A.52
! Subroutine arguments GWAVE3A.53
GWAVE3A.54
INTEGER GWAVE3A.55
* P_FIELD !IN 1ST DIMENSION OF FIELD OF PSTAR GWAVE3A.56
*, U_FIELD !IN 1ST DIMENSION OF FIELD OF U,V GWAVE3A.57
*, ROWS_P !IN NUMBER OF ROWS of P grid GWAVE3A.58
*, ROW_LENGTH !IN NUMBER OF POINTS PER ROW GWAVE3A.59
*, START_LEVEL !IN START OF WAVE-BREAKING TEST GWAVE3A.60
*, LEVELS !IN NUMBER OF MODEL LEVELS GWAVE3A.61
*, Q_LEVELS !IN NUMBER OF WET LEVELS GWAVE3A.62
*, LAND_POINTS !IN NUMBER OF LAND POINTS GWAVE3A.63
*, LAND_INDEX((ROWS_P)*ROW_LENGTH) ! INDEX FOR LAND POINTS GWAVE3A.64
*, IRET ! RETURN CODE : IRET=0 NORMAL EXIT GWAVE3A.65
* ! RETURN CODE : IRET=1 ????? GWAVE3A.66
*, LEN_STRESS_UD !IN ) Dimension of diagnostic arrays GWAVE3A.67
*, LEN_STRESS_VD !IN ) for GW stress - u and v GWAVE3A.68
*, POINTS_STRESS_UD !IN ) No of land points in diagnostic GWAVE3A.69
*, POINTS_STRESS_VD !IN ) arrays for GW stress - u and v GWAVE3A.70
*, LEN_DU_DT_SATN !IN ) Dimension of diagnostic arrays GWAVE3A.71
*, LEN_DV_DT_SATN !IN ) for GW satn - du and dv GWAVE3A.72
*, POINTS_DU_DT_SATN !IN ) No of land points in diagnostic GWAVE3A.73
*, POINTS_DV_DT_SATN !IN ) arrays for GW satn - du and dv GWAVE3A.74
*, LEN_DU_DT_JUMP !IN ) Dimension of diagnostic arrays GWAVE3A.75
*, LEN_DV_DT_JUMP !IN ) for GW satn - du and dv GWAVE3A.76
*, POINTS_DU_DT_JUMP !IN ) No of land points in diagnostic GWAVE3A.77
*, POINTS_DV_DT_JUMP !IN ) arrays for GW satn - du and dv GWAVE3A.78
*, LEN_DU_DT_LEE !IN ) Dimension of diagnostic arrays GWAVE3A.79
*, LEN_DV_DT_LEE !IN ) for GW lee - du and dv GWAVE3A.80
*, POINTS_DU_DT_LEE !IN ) No of land points in diagnostic GWAVE3A.81
*, POINTS_DV_DT_LEE !IN ) arrays for GW lee - du and dv GWAVE3A.82
*, LEN_TRANS_D !IN Dimension of diag for trans. coeff. GWAVE3A.83
*, POINTS_TRANS_D !IN No. of land points for trans. coeff. GWAVE3A.84
C GWAVE3A.85
C GWAVE3A.86
! All TYPFLDPT variables are Intent IN APBEF401.41
*CALL TYPFLDPT
APBEF401.42
GWAVE3A.87
REAL GWAVE3A.88
* PSTAR(P_FIELD) !IN PRIMARY MODEL ARRAY FOR PSTAR FIELD GWAVE3A.89
*,PEXNER(P_FIELD,LEVELS+1) !IN ARRAY FOR EXNER PRESSURE FIELD GWAVE3A.90
*,THETA(P_FIELD,LEVELS) !IN PRIMARY MODEL ARRAY FOR THETA FIELD GWAVE3A.91
*,Q(P_FIELD,Q_LEVELS) !IN SPECIFIC HUMIDITY AT FULL LEVELS GWAVE3A.92
*,U(U_FIELD,LEVELS) !INOUT PRIMARY MODEL ARRAY FOR U FIELD GWAVE3A.93
*,V(U_FIELD,LEVELS) !INOUT PRIMARY MODEL ARRAY FOR V FIELD GWAVE3A.94
C AK,BK DEFINE HYBRID VERTICAL COORDINATES P=A+BP*, GWAVE3A.95
C DELTA_AK,DELTA_BK DEFINE LAYER PRESSURE THICKNESS PD=AD+BDP*, GWAVE3A.96
GWAVE3A.97
REAL GWAVE3A.98
* DELTA_AK(LEVELS) !IN LAYER THICKNESS GWAVE3A.99
*,DELTA_BK(LEVELS) !IN LAYER THICKNESS GWAVE3A.100
*,AK (LEVELS) !IN VALUE AT LAYER CENTRE GWAVE3A.101
*,BK (LEVELS) !IN VALUE AT LAYER CENTRE GWAVE3A.102
*,AKH(LEVELS+1) !IN VALUE AT LAYER BOUNDARY GWAVE3A.103
*,BKH(LEVELS+1) !IN VALUE AT LAYER BOUNDARY GWAVE3A.104
*,SD_OROG_LAND(LAND_POINTS) !IN STANDARD DEVIATION OF OROGRAPHY GWAVE3A.105
*,OROG_GRAD_XX_LAND(LAND_POINTS) GWAVE3A.106
* !IN DH/DX SQUARED GRADIENT OROGRAPHY GWAVE3A.107
*,OROG_GRAD_XY_LAND(LAND_POINTS) GWAVE3A.108
* !IN (DH/DX)(DH/DY) GRADIENT OROGRAPHY GWAVE3A.109
*,OROG_GRAD_YY_LAND(LAND_POINTS) GWAVE3A.110
* !IN DH/DY SQUARED GRADIENT OROGRAPHY GWAVE3A.111
*,TIMESTEP !IN TIMESTEP GWAVE3A.112
*,KAY !IN surface stress constant ( m-1) GWAVE3A.113
*,KAY_LEE !IN TRAPPED LEE WAVE CONSTANT ASW1F403.31
GWAVE3A.114
*,STRESS_UD(LEN_STRESS_UD,*) !U STRESS DIAGNOSTIC GWAVE3A.115
*,STRESS_VD(LEN_STRESS_VD,*) !V STRESS DIAGNOSTIC GWAVE3A.116
*,DU_DT_SATN(LEN_DU_DT_SATN,*) !U ACCELN DIAGNOSTIC (SATURATION) GWAVE3A.117
*,DV_DT_SATN(LEN_DV_DT_SATN,*) !V ACCELN DIAGNOSTIC (SATURATION) GWAVE3A.118
*,DU_DT_JUMP(LEN_DU_DT_JUMP,*) !U ACCELN DIAG (HYDRAULIC JUMP) GWAVE3A.119
*,DV_DT_JUMP(LEN_DV_DT_JUMP,*) !V ACCELN DIAG (HYDRAULIC JUMP) GWAVE3A.120
*,DU_DT_LEE(LEN_DU_DT_LEE,*) !U ACCELN DIAG (TRAPPED LEE WAVE) GWAVE3A.121
*,DV_DT_LEE(LEN_DV_DT_LEE,*) !V ACCELN DIAG (TRAPPED LEE WAVE) GWAVE3A.122
*,TRANS_D(LEN_TRANS_D) !TRANSMITTION COEFF DIAGN GWAVE3A.123
GWAVE3A.124
C WARNING: Storage will only be assigned by the calling routine for GWAVE3A.125
C for the number of levels required. GWAVE3A.126
GWAVE3A.127
LOGICAL GWAVE3A.128
* STRESS_UD_ON !U stress diagnostic switch GWAVE3A.129
*,STRESS_VD_ON !V stress diagnostic switch GWAVE3A.130
*,U_LIST1(LEVELS+1) ! Lists of levels for which stresses GWAVE3A.131
*,V_LIST1(LEVELS+1) ! required. GWAVE3A.132
*,DU_DT_SATN_ON !U accel (saturation) diagnostic switch GWAVE3A.133
*,DV_DT_SATN_ON !V accel (saturation) diagnostic switch GWAVE3A.134
*,U_LIST2(LEVELS) ! Lists of levels for which accelerations GWAVE3A.135
*,V_LIST2(LEVELS) ! required. GWAVE3A.136
*,DU_DT_JUMP_ON !U accel (hydr jump) diagnostic switch GWAVE3A.137
*,DV_DT_JUMP_ON !V accel (hydr jump) diagnostic switch GWAVE3A.138
*,U_LIST3(LEVELS) ! Lists of levels for which accelerations GWAVE3A.139
*,V_LIST3(LEVELS) ! required. GWAVE3A.140
*,DU_DT_LEE_ON !U accel (lee wave) diagnostic switch GWAVE3A.141
*,DV_DT_LEE_ON !V accel (lee wave) diagnostic switch GWAVE3A.142
*,U_LIST4(LEVELS) ! Lists of levels for which accelerations GWAVE3A.143
*,V_LIST4(LEVELS) ! required. GWAVE3A.144
*,TRANS_D_ON !Transmittion coefficient diag switch GWAVE3A.145
GWAVE3A.146
! Local dynamic arrays: GWAVE3A.147
GWAVE3A.148
C--- WORKSPACE USAGE:------------------------------------------------- GWAVE3A.149
C DEFINE LOCAL WORKSPACE ARRAYS: GWAVE3A.150
C 8 ARRAYS AT FULL FIELD LENGTH REQUIRED GWAVE3A.151
C 6*LEVELS+9 REAL ARRAYS OF LAND_POINTS LENGTH REQUIRED GWAVE3A.152
C 8*LEVELS REAL ARRAYS OF LAND_POINTS LENGTH REQUIRED FOR DIAGNOSTICS GWAVE3A.153
C---------------------------------------------------------------------- GWAVE3A.154
GWAVE3A.155
INTEGER GWAVE3A.171
* K_LIFT(LAND_POINTS) ! MODEL LEVEL OF BLOCKED LAYER GWAVE3A.172
GWAVE3A.173
REAL GWAVE3A.174
* WORK(P_FIELD,4) ! GENERAL PURPOSE WORK GWAVE3A.175
*,UP_LAND(LAND_POINTS,LEVELS) ! INTERPOLATED U COMPONENT ON PGRID GWAVE3A.176
*,VP_LAND(LAND_POINTS,LEVELS) ! INTERPOLATED U COMPONENT ON PGRID GWAVE3A.177
*,THETA_LAND(LAND_POINTS,LEVELS)! THETA LAND POINTS GWAVE3A.178
*,Q_LAND(LAND_POINTS,Q_LEVELS) ! Q LAND POINTS GWAVE3A.179
*,S_X_STRESS(LAND_POINTS) ! 'SURFACE' X_STRESS LAND POINTS GWAVE3A.180
*,S_Y_STRESS(LAND_POINTS) ! 'SURFACE' Y_STRESS LAND POINTS GWAVE3A.181
*,S_X_OROG(LAND_POINTS) ! 'SURFACE' X_OROG LAND POINTS GWAVE3A.182
*,S_Y_OROG(LAND_POINTS) ! 'SURFACE' Y_OROG LAND POINTS GWAVE3A.183
*,PSTAR_LAND(LAND_POINTS) ! PSTAR LAND POINTS GWAVE3A.184
*,PEXNER_LAND(LAND_POINTS,LEVELS+1) ! PEXNER LAND POINTS GWAVE3A.185
*,DU_DT(LAND_POINTS,LEVELS) ! U-ACCELERATION GWAVE3A.186
*,DV_DT(LAND_POINTS,LEVELS) ! V-ACCELERATION GWAVE3A.187
*,TEST(LAND_POINTS) ! TEST FOR LEE/H_JUMP GWAVE3A.188
*,U_S(LAND_POINTS) ! U-WINDS OVER 'SURFACE' GWAVE3A.189
*,V_S(LAND_POINTS) ! V-WINDS OVER 'SURFACE' GWAVE3A.190
*,RHO_S(LAND_POINTS) ! DENSITY OVER 'SURFACE' GWAVE3A.191
GWAVE3A.192
REAL GWAVE3A.193
* STRESS_UD_LAND(POINTS_STRESS_UD,LEVELS+1) !U STRESS DIAGNOSTIC GWAVE3A.194
*,STRESS_VD_LAND(POINTS_STRESS_VD,LEVELS+1) !V STRESS DIAGNOSTIC GWAVE3A.195
*,DU_DT_SATN_LAND(POINTS_DU_DT_SATN,LEVELS) !U ACCELN DIAGNOSTIC GWAVE3A.196
*,DV_DT_SATN_LAND(POINTS_DV_DT_SATN,LEVELS) !V ACCELN DIAGNOSTIC GWAVE3A.197
*,DU_DT_JUMP_LAND(POINTS_DU_DT_JUMP,LEVELS) !U ACCELN DIAGNOSTIC GWAVE3A.198
*,DV_DT_JUMP_LAND(POINTS_DV_DT_JUMP,LEVELS) !V ACCELN DIAGNOSTIC GWAVE3A.199
*,DU_DT_LEE_LAND(POINTS_DU_DT_LEE,LEVELS) !U ACCELN DIAGNOSTIC GWAVE3A.200
*,DV_DT_LEE_LAND(POINTS_DV_DT_LEE,LEVELS) !V ACCELN DIAGNOSTIC GWAVE3A.201
*,TRANS_D_LAND(POINTS_TRANS_D) !TRANSMITTION COEFF GWAVE3A.202
GWAVE3A.205
! Function & Subroutine calls: GWAVE3A.206
EXTERNAL GW_SURF,GW_VERT AJC1F405.193
*IF -DEF,SCMA AJC1F405.194
& ,P_TO_UV,UV_TO_P AJC1F405.195
*ENDIF AJC1F405.196
GWAVE3A.208
C*------------------------------------------------------------------ GWAVE3A.209
CL MAXIMUM VECTOR LENGTH ASSUMED IS (ROWS_P+1) * ROWLENGTH GWAVE3A.210
C---------------------------------------------------------------------- GWAVE3A.211
! Local parameters: GWAVE3A.212
GWAVE3A.213
! Local scalars: GWAVE3A.214
GWAVE3A.215
INTEGER GWAVE3A.216
* P_POINTS ! NUMBER OF P POINTS NEEDED GWAVE3A.217
*, U_POINTS_1 ! No. U points used to interpolate to P-grid GWAVE3A.218
*, U_POINTS ! NUMBER OF U POINTS UPDATED GWAVE3A.219
*, START_U ! Start position of U points updated GWAVE3A.220
*, START_U1 ! Start position of diagnostics updated ASW1F405.20
C GWAVE3A.221
INTEGER I,IW,K, ! LOOP COUNTERS IN ROUTINE GWAVE3A.222
* KOUT_U,KOUT_V GWAVE3A.223
C GWAVE3A.224
GWAVE3A.225
C GWAVE3A.226
GWAVE3A.227
C------------------------------------------------------------------- GWAVE3A.228
CL 1. INITIALISATION GWAVE3A.229
CL 1.1 SET UP DIMENSIONS GWAVE3A.230
C------------------------------------------------------------------ GWAVE3A.231
GWAVE3A.232
U_POINTS_1 = (ROWS_P+1)*ROW_LENGTH GWAVE3A.233
U_POINTS = (ROWS_P-1)*ROW_LENGTH GWAVE3A.234
P_POINTS = ROWS_P*ROW_LENGTH GWAVE3A.235
START_U = ROW_LENGTH GWAVE3A.236
C ASW1F405.21
C Three separate cases for START_U1. These arise because of different ASW1F405.22
C row offsets in the call to uv_to_p (GWAVE3A.253,256) ASW1F405.23
C ASW1F405.24
*IF DEF,MPP ASW1F405.25
IF ( at_top_of_lpg ) THEN ASW1F405.26
START_U1 = 2*ROW_LENGTH ASW1F405.27
ELSE ASW1F405.28
START_U1 = 0 ASW1F405.29
ENDIF ASW1F405.30
*ELSE ASW1F405.31
START_U1 = ROW_LENGTH ASW1F405.32
*ENDIF ASW1F405.33
GWAVE3A.237
C------------------------------------------------------------------ GWAVE3A.238
CL 1.2 INTERPOLATE WINDS TO P/THETA-GRID GWAVE3A.239
C------------------------------------------------------------------ GWAVE3A.240
DO K=1,LEVELS GWAVE3A.241
GWAVE3A.242
*IF DEF,SCMA AJC1F405.197
DO I=1,LAND_POINTS AJC1F405.198
UP_LAND(I,K) =U(LAND_INDEX(I),K) AJC1F405.199
VP_LAND(I,K) =V(LAND_INDEX(I),K) AJC1F405.200
ENDDO AJC1F405.201
ENDDO AJC1F405.202
*ELSE GWAVE3A.250
GWAVE3A.251
GWAVE3A.252
CALL UV_TO_P
(U(1,K),WORK(1,1),U_POINTS_1,P_POINTS, GWAVE3A.253
* ROW_LENGTH,ROWS_P+1) GWAVE3A.254
CALL UV_TO_P
(V(1,K),WORK(1,2),U_POINTS_1,P_POINTS, GWAVE3A.255
* ROW_LENGTH,ROWS_P+1) GWAVE3A.256
*IF DEF,MPP APBEF401.43
! Correct halos of interpolated U/V APBEF401.44
! Correct halos of interpolated U/V APBEF401.45
! CALL SWAPBOUNDS(WORK(1,1),LOCAL_ROW_LENGTH,ROWS_P, APBEF401.46
! & EW_Halo,NS_Halo,1) ! U field APBEF401.47
! CALL SWAPBOUNDS(WORK(1,2),LOCAL_ROW_LENGTH,ROWS_P, APBEF401.48
! & EW_Halo,NS_Halo,1) ! V field APBEF401.49
*ENDIF APBEF401.50
GWAVE3A.257
C------------------------------------------------------------------ GWAVE3A.258
CL 1.3 GATHER WINDS AT LAND POINTS GWAVE3A.259
C------------------------------------------------------------------ GWAVE3A.260
GWAVE3A.261
DO I=1,LAND_POINTS GWAVE3A.262
UP_LAND(I,K) =WORK(LAND_INDEX(I),1) GWAVE3A.263
VP_LAND(I,K) =WORK(LAND_INDEX(I),2) GWAVE3A.264
END DO GWAVE3A.265
END DO GWAVE3A.266
GWAVE3A.267
*ENDIF GWAVE3A.268
GWAVE3A.269
C------------------------------------------------------------------ GWAVE3A.270
CL 1.4 GATHER PSTAR,PEXNER,THETA,Q,SD_OROG?? AT LAND POINTS GWAVE3A.271
C------------------------------------------------------------------ GWAVE3A.272
GWAVE3A.273
DO I=1,LAND_POINTS GWAVE3A.274
PSTAR_LAND(I) = PSTAR(LAND_INDEX(I)) GWAVE3A.275
END DO GWAVE3A.276
GWAVE3A.277
CL *** Following loop labelled to workaround fmp mistranslation GWAVE3A.278
GWAVE3A.279
CFPP$ SELECT(CONCUR) GWAVE3A.280
DO 140 K=1,LEVELS GWAVE3A.281
DO I=1,LAND_POINTS GWAVE3A.282
PEXNER_LAND(I,K) = PEXNER(LAND_INDEX(I),K) GWAVE3A.283
THETA_LAND(I,K) = THETA(LAND_INDEX(I),K) GWAVE3A.284
END DO GWAVE3A.285
140 CONTINUE GWAVE3A.286
GWAVE3A.287
DO 145 K=1,Q_LEVELS GWAVE3A.288
DO I=1,LAND_POINTS GWAVE3A.289
Q_LAND(I,K) = Q(LAND_INDEX(I),K) GWAVE3A.290
END DO GWAVE3A.291
145 CONTINUE GWAVE3A.292
GWAVE3A.293
DO I=1,LAND_POINTS GWAVE3A.294
PEXNER_LAND(I,LEVELS+1) =PEXNER(LAND_INDEX(I),LEVELS+1) GWAVE3A.295
END DO GWAVE3A.296
GWAVE3A.297
C------------------------------------------------------------------ GWAVE3A.298
CL 2. CALCULATE ANISOTROPIC 'SURFACE' STRESS,CALL GW_SURF GWAVE3A.299
C------------------------------------------------------------------ GWAVE3A.300
GWAVE3A.301
CALL GW_SURF
(PSTAR_LAND,PEXNER_LAND,THETA_LAND,UP_LAND,VP_LAND, GWAVE3A.302
* SD_OROG_LAND,OROG_GRAD_XX_LAND,OROG_GRAD_XY_LAND, GWAVE3A.303
* OROG_GRAD_YY_LAND,S_X_STRESS,S_Y_STRESS,S_X_OROG, GWAVE3A.304
* S_Y_OROG,LEVELS,LAND_POINTS,AK,BK,AKH,BKH,KAY,TEST, GWAVE3A.305
* K_LIFT,U_S,V_S,RHO_S) GWAVE3A.306
GWAVE3A.307
C------------------------------------------------------------------ GWAVE3A.308
CL 3. CALCULATE STRESS PROFILE AND ACCELERATIONS, GWAVE3A.309
CL CALL GW_VERT GWAVE3A.310
C------------------------------------------------------------------ GWAVE3A.311
GWAVE3A.312
CALL GW_VERT
(PSTAR_LAND,PEXNER_LAND,THETA_LAND,Q_LAND,UP_LAND, GWAVE3A.313
1 VP_LAND,S_X_STRESS,S_Y_STRESS,START_LEVEL,LEVELS,Q_LEVELS, GWAVE3A.314
2 LAND_POINTS,AKH,BKH,DELTA_AK,DELTA_BK,KAY,KAY_LEE,SD_OROG_LAND, ASW1F403.32
3 S_X_OROG,S_Y_OROG,OROG_GRAD_XX_LAND,OROG_GRAD_XY_LAND, GWAVE3A.316
4 OROG_GRAD_YY_LAND,TEST,DU_DT,DV_DT,K_LIFT,U_S,V_S,RHO_S, GWAVE3A.317
5 STRESS_UD_LAND ,POINTS_STRESS_UD ,STRESS_UD_ON, GWAVE3A.318
6 STRESS_VD_LAND ,POINTS_STRESS_VD ,STRESS_VD_ON, GWAVE3A.319
7 DU_DT_SATN_LAND,POINTS_DU_DT_SATN,DU_DT_SATN_ON, GWAVE3A.320
8 DV_DT_SATN_LAND,POINTS_DV_DT_SATN,DV_DT_SATN_ON, GWAVE3A.321
9 DU_DT_JUMP_LAND,POINTS_DU_DT_JUMP,DU_DT_JUMP_ON, GWAVE3A.322
& DV_DT_JUMP_LAND,POINTS_DV_DT_JUMP,DV_DT_JUMP_ON, GWAVE3A.323
& DU_DT_LEE_LAND ,POINTS_DU_DT_LEE ,DU_DT_LEE_ON, GWAVE3A.324
& DV_DT_LEE_LAND ,POINTS_DV_DT_LEE ,DV_DT_LEE_ON, GWAVE3A.325
& TRANS_D_LAND ,POINTS_TRANS_D ,TRANS_D_ON ) GWAVE3A.326
GWAVE3A.327
C------------------------------------------------------------------ GWAVE3A.328
CL 4. SCATTER ACCELERATIONS TO FULL AREA, INTERPOLATE TO UV-GRID GWAVE3A.329
CL AND UPDATE WINDS GWAVE3A.330
C------------------------------------------------------------------ GWAVE3A.331
GWAVE3A.332
DO I=1,P_FIELD GWAVE3A.333
DO IW=1,4 GWAVE3A.334
WORK(I,IW) = 0.0 GWAVE3A.335
END DO GWAVE3A.336
END DO GWAVE3A.337
GWAVE3A.338
DO K=1,LEVELS GWAVE3A.339
GWAVE3A.340
*IF -DEF,SCMA AJC1F405.203
CDIR$ IVDEP GWAVE3A.341
! Fujitsu vectorization directive GRB0F405.323
!OCL NOVREC GRB0F405.324
DO I=1,LAND_POINTS GWAVE3A.342
WORK(LAND_INDEX(I),1)= DU_DT(I,K) GWAVE3A.343
WORK(LAND_INDEX(I),2)= DV_DT(I,K) GWAVE3A.344
END DO GWAVE3A.345
GWAVE3A.346
CALL P_TO_UV
(WORK(1,1),WORK(1,3),P_POINTS,U_POINTS, GWAVE3A.347
* ROW_LENGTH,ROWS_P) GWAVE3A.348
CALL P_TO_UV
(WORK(1,2),WORK(1,4),P_POINTS,U_POINTS, GWAVE3A.349
* ROW_LENGTH,ROWS_P) GWAVE3A.350
GWAVE3A.351
DO I=1,U_POINTS GWAVE3A.352
U(START_U+I,K) = U(START_U+I,K) + TIMESTEP*WORK(I,3) GWAVE3A.353
V(START_U+I,K) = V(START_U+I,K) + TIMESTEP*WORK(I,4) GWAVE3A.354
END DO GWAVE3A.355
GWAVE3A.356
*ELSE AJC1F405.204
DO I=1,U_POINTS AJC1F405.205
U(START_U+I,K) = U(START_U+I,K) + TIMESTEP*DU_DT(I,K) AJC1F405.206
V(START_U+I,K) = V(START_U+I,K) + TIMESTEP*DV_DT(I,K) AJC1F405.207
END DO AJC1F405.208
*ENDIF AJC1F405.209
END DO GWAVE3A.357
GWAVE3A.358
IF (STRESS_UD_ON .OR. STRESS_VD_ON) THEN GWAVE3A.359
GWAVE3A.360
KOUT_U=0 GWAVE3A.361
KOUT_V=0 GWAVE3A.362
DO K=START_LEVEL,LEVELS+1 GWAVE3A.363
GWAVE3A.364
IF(STRESS_UD_ON ) THEN GWAVE3A.365
IF(U_LIST1(K)) THEN GWAVE3A.366
KOUT_U=KOUT_U+1 GWAVE3A.367
! Fujitsu vectorization directive GRB0F405.325
!OCL NOVREC GRB0F405.326
CDIR$ IVDEP GWAVE3A.368
*IF -DEF,SCMA AJC1F405.210
DO I=1,LAND_POINTS GWAVE3A.369
WORK(LAND_INDEX(I),1)=STRESS_UD_LAND(I,K) GWAVE3A.370
END DO GWAVE3A.371
CALL P_TO_UV
(WORK(1,1),STRESS_UD(START_U1+1,KOUT_U), ASW1F405.34
* P_POINTS,U_POINTS,ROW_LENGTH,ROWS_P) GWAVE3A.373
*ELSE AJC1F405.211
DO I=1,LAND_POINTS AJC1F405.212
STRESS_UD(START_U+LAND_INDEX(I),KOUT_U)= AJC1F405.213
& STRESS_UD_LAND(I,K) AJC1F405.214
END DO AJC1F405.215
*ENDIF AJC1F405.216
ENDIF GWAVE3A.374
ENDIF GWAVE3A.375
GWAVE3A.376
IF(STRESS_VD_ON ) THEN GWAVE3A.377
IF(V_LIST1(K)) THEN GWAVE3A.378
KOUT_V=KOUT_V+1 GWAVE3A.379
! Fujitsu vectorization directive GRB0F405.327
!OCL NOVREC GRB0F405.328
CDIR$ IVDEP GWAVE3A.380
*IF -DEF,SCMA AJC1F405.217
DO I=1,LAND_POINTS GWAVE3A.381
WORK(LAND_INDEX(I),2)=STRESS_VD_LAND(I,K) GWAVE3A.382
END DO GWAVE3A.383
CALL P_TO_UV
(WORK(1,2),STRESS_VD(START_U1+1,KOUT_V), ASW1F405.35
* P_POINTS,U_POINTS,ROW_LENGTH,ROWS_P) GWAVE3A.385
*ELSE AJC1F405.218
DO I=1,LAND_POINTS AJC1F405.219
STRESS_VD(START_U+LAND_INDEX(I),KOUT_V)= AJC1F405.220
& STRESS_VD_LAND(I,K) AJC1F405.221
END DO AJC1F405.222
*ENDIF AJC1F405.223
ENDIF GWAVE3A.386
ENDIF GWAVE3A.387
GWAVE3A.388
END DO ! K=Start_level,Levels+1 GWAVE3A.389
GWAVE3A.390
ENDIF ! stress_ud/vd on GWAVE3A.391
GWAVE3A.392
IF (DU_DT_SATN_ON .OR. DV_DT_SATN_ON) THEN GWAVE3A.393
GWAVE3A.394
KOUT_U=0 GWAVE3A.395
KOUT_V=0 GWAVE3A.396
DO K=1,LEVELS GWAVE3A.397
GWAVE3A.398
IF(DU_DT_SATN_ON ) THEN GWAVE3A.399
IF(U_LIST2(K)) THEN GWAVE3A.400
KOUT_U=KOUT_U+1 GWAVE3A.401
! Fujitsu vectorization directive GRB0F405.329
!OCL NOVREC GRB0F405.330
CDIR$ IVDEP GWAVE3A.402
*IF -DEF,SCMA AJC1F405.224
DO I=1,LAND_POINTS GWAVE3A.403
WORK(LAND_INDEX(I),1)=DU_DT_SATN_LAND(I,K) GWAVE3A.404
END DO GWAVE3A.405
CALL P_TO_UV
(WORK(1,1),DU_DT_SATN(START_U1+1,KOUT_U), ASW1F405.36
* P_POINTS,U_POINTS,ROW_LENGTH,ROWS_P) GWAVE3A.407
*ELSE AJC1F405.225
DO I=1,LAND_POINTS AJC1F405.226
DU_DT_SATN(START_U+LAND_INDEX(I),KOUT_U)= AJC1F405.227
& DU_DT_SATN_LAND(I,K) AJC1F405.228
END DO AJC1F405.229
*ENDIF AJC1F405.230
ENDIF GWAVE3A.408
ENDIF GWAVE3A.409
GWAVE3A.410
IF(DV_DT_SATN_ON ) THEN GWAVE3A.411
IF(V_LIST2(K)) THEN GWAVE3A.412
KOUT_V=KOUT_V+1 GWAVE3A.413
! Fujitsu vectorization directive GRB0F405.331
!OCL NOVREC GRB0F405.332
CDIR$ IVDEP GWAVE3A.414
*IF -DEF,SCMA AJC1F405.231
DO I=1,LAND_POINTS GWAVE3A.415
WORK(LAND_INDEX(I),2)=DV_DT_SATN_LAND(I,K) GWAVE3A.416
END DO GWAVE3A.417
CALL P_TO_UV
(WORK(1,2),DV_DT_SATN(START_U1+1,KOUT_V), ASW1F405.37
* P_POINTS,U_POINTS,ROW_LENGTH,ROWS_P) GWAVE3A.419
*ELSE AJC1F405.232
DO I=1,LAND_POINTS AJC1F405.233
DV_DT_SATN(START_U+LAND_INDEX(I),KOUT_V)= AJC1F405.234
& DV_DT_SATN_LAND(I,K) AJC1F405.235
END DO AJC1F405.236
*ENDIF AJC1F405.237
ENDIF GWAVE3A.420
ENDIF GWAVE3A.421
GWAVE3A.422
END DO ! K=Start_level,Levels GWAVE3A.423
GWAVE3A.424
ENDIF ! du/dv_dt_satn on GWAVE3A.425
GWAVE3A.426
IF (DU_DT_JUMP_ON .OR. DV_DT_JUMP_ON) THEN GWAVE3A.427
GWAVE3A.428
KOUT_U=0 GWAVE3A.429
KOUT_V=0 GWAVE3A.430
DO K=1,LEVELS GWAVE3A.431
GWAVE3A.432
IF(DU_DT_JUMP_ON ) THEN GWAVE3A.433
IF(U_LIST3(K)) THEN GWAVE3A.434
KOUT_U=KOUT_U+1 GWAVE3A.435
! Fujitsu vectorization directive GRB0F405.333
!OCL NOVREC GRB0F405.334
CDIR$ IVDEP GWAVE3A.436
*IF -DEF,SCMA AJC1F405.238
DO I=1,LAND_POINTS GWAVE3A.437
WORK(LAND_INDEX(I),1)=DU_DT_JUMP_LAND(I,K) GWAVE3A.438
END DO GWAVE3A.439
CALL P_TO_UV
(WORK(1,1),DU_DT_JUMP(START_U1+1,KOUT_U), ASW1F405.38
* P_POINTS,U_POINTS,ROW_LENGTH,ROWS_P) GWAVE3A.441
*ELSE AJC1F405.239
DO I=1,LAND_POINTS AJC1F405.240
DU_DT_JUMP(START_U+LAND_INDEX(I),KOUT_U)= AJC1F405.241
& DU_DT_JUMP_LAND(I,K) AJC1F405.242
END DO AJC1F405.243
*ENDIF AJC1F405.244
ENDIF GWAVE3A.442
ENDIF GWAVE3A.443
GWAVE3A.444
IF(DV_DT_JUMP_ON ) THEN GWAVE3A.445
IF(V_LIST3(K)) THEN GWAVE3A.446
KOUT_V=KOUT_V+1 GWAVE3A.447
! Fujitsu vectorization directive GRB0F405.335
!OCL NOVREC GRB0F405.336
CDIR$ IVDEP GWAVE3A.448
*IF -DEF,SCMA AJC1F405.245
DO I=1,LAND_POINTS GWAVE3A.449
WORK(LAND_INDEX(I),2)=DV_DT_JUMP_LAND(I,K) GWAVE3A.450
END DO GWAVE3A.451
CALL P_TO_UV
(WORK(1,2),DV_DT_JUMP(START_U1+1,KOUT_V), ASW1F405.39
* P_POINTS,U_POINTS,ROW_LENGTH,ROWS_P) GWAVE3A.453
*ELSE AJC1F405.246
DO I=1,LAND_POINTS AJC1F405.247
DV_DT_JUMP(START_U+LAND_INDEX(I),KOUT_V)= AJC1F405.248
& DV_DT_JUMP_LAND(I,K) AJC1F405.249
END DO AJC1F405.250
AJC1F405.251
*ENDIF AJC1F405.252
ENDIF GWAVE3A.454
ENDIF GWAVE3A.455
GWAVE3A.456
END DO ! K=Start_level,Levels GWAVE3A.457
GWAVE3A.458
ENDIF ! du/dv_dt_jump on GWAVE3A.459
GWAVE3A.460
IF (DU_DT_LEE_ON .OR. DV_DT_LEE_ON) THEN GWAVE3A.461
GWAVE3A.462
KOUT_U=0 GWAVE3A.463
KOUT_V=0 GWAVE3A.464
DO K=1,LEVELS GWAVE3A.465
GWAVE3A.466
IF(DU_DT_LEE_ON ) THEN GWAVE3A.467
IF(U_LIST4(K)) THEN GWAVE3A.468
KOUT_U=KOUT_U+1 GWAVE3A.469
! Fujitsu vectorization directive GRB0F405.337
!OCL NOVREC GRB0F405.338
CDIR$ IVDEP GWAVE3A.470
*IF -DEF,SCMA AJC1F405.253
DO I=1,LAND_POINTS GWAVE3A.471
WORK(LAND_INDEX(I),1)=DU_DT_LEE_LAND(I,K) GWAVE3A.472
END DO GWAVE3A.473
CALL P_TO_UV
(WORK(1,1),DU_DT_LEE(START_U1+1,KOUT_U), ASW1F405.40
* P_POINTS,U_POINTS,ROW_LENGTH,ROWS_P) GWAVE3A.475
*ELSE AJC1F405.254
DO I=1,LAND_POINTS AJC1F405.255
DU_DT_LEE(START_U+LAND_INDEX(I),KOUT_U)= AJC1F405.256
& DU_DT_LEE_LAND(I,K) AJC1F405.257
END DO AJC1F405.258
*ENDIF AJC1F405.259
ENDIF GWAVE3A.476
ENDIF GWAVE3A.477
GWAVE3A.478
IF(DV_DT_LEE_ON ) THEN GWAVE3A.479
IF(V_LIST4(K)) THEN GWAVE3A.480
KOUT_V=KOUT_V+1 GWAVE3A.481
! Fujitsu vectorization directive GRB0F405.339
!OCL NOVREC GRB0F405.340
CDIR$ IVDEP GWAVE3A.482
*IF -DEF,SCMA AJC1F405.260
DO I=1,LAND_POINTS GWAVE3A.483
WORK(LAND_INDEX(I),2)=DV_DT_LEE_LAND(I,K) GWAVE3A.484
END DO GWAVE3A.485
CALL P_TO_UV
(WORK(1,2),DV_DT_LEE(START_U1+1,KOUT_V), ASW1F405.41
* P_POINTS,U_POINTS,ROW_LENGTH,ROWS_P) GWAVE3A.487
*ELSE AJC1F405.261
DO I=1,LAND_POINTS AJC1F405.262
DV_DT_LEE(START_U+LAND_INDEX(I),KOUT_V)= AJC1F405.263
& DV_DT_LEE_LAND(I,K) AJC1F405.264
END DO AJC1F405.265
*ENDIF AJC1F405.266
ENDIF GWAVE3A.488
ENDIF GWAVE3A.489
GWAVE3A.490
END DO ! K=Start_level,Levels GWAVE3A.491
GWAVE3A.492
ENDIF ! du/dv_dt_lee on GWAVE3A.493
GWAVE3A.494
IF( TRANS_D_ON ) THEN GWAVE3A.495
*IF -DEF,SCMA AJC1F405.267
DO I=1,LAND_POINTS GWAVE3A.496
WORK(LAND_INDEX(I),2)=TRANS_D_LAND(I) GWAVE3A.497
END DO GWAVE3A.498
CALL P_TO_UV
(WORK(1,2),TRANS_D(START_U1+1), ASW1F405.42
* P_POINTS,U_POINTS,ROW_LENGTH,ROWS_P) GWAVE3A.500
*ELSE AJC1F405.268
DO I=1,LAND_POINTS AJC1F405.269
TRANS_D(START_U+LAND_INDEX(I))= AJC1F405.270
& TRANS_D_LAND(I) AJC1F405.271
END DO AJC1F405.272
*ENDIF AJC1F405.273
ENDIF GWAVE3A.501
GWAVE3A.502
IRET=0 GWAVE3A.503
GWAVE3A.504
RETURN GWAVE3A.505
END GWAVE3A.506
GWAVE3A.507
*ENDIF GWAVE3A.508