*IF DEF,A15_1A WINDMX1A.2
C ******************************COPYRIGHT****************************** GTS2F400.12007
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.12008
C GTS2F400.12009
C Use, duplication or disclosure of this code is subject to the GTS2F400.12010
C restrictions as set forth in the contract. GTS2F400.12011
C GTS2F400.12012
C Meteorological Office GTS2F400.12013
C London Road GTS2F400.12014
C BRACKNELL GTS2F400.12015
C Berkshire UK GTS2F400.12016
C RG12 2SZ GTS2F400.12017
C GTS2F400.12018
C If no contract has been raised with this copy of the code, the use, GTS2F400.12019
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.12020
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.12021
C Modelling at the above address. GTS2F400.12022
C ******************************COPYRIGHT****************************** GTS2F400.12023
C GTS2F400.12024
CLL SUBROUTINE WINDMAX------------------------------------------------- WINDMX1A.3
CLL WINDMX1A.4
CLL PURPOSE: CALCULATES THE MAXIMUM WIND SPEED THAT LIES BETWEEN WINDMX1A.5
CLL 70000 AND 10000 Pa.(ALSO CONSTRAINED TO A PARTICULAR SET WINDMX1A.6
CLL OF MODEL LEVELS BY THE ORDER OF THE MATRIX POLYNOMIAL) WINDMX1A.7
CLL A QUARTIC CURVE IS FITTED TO THE ETA-LEVEL WIND SPEEDS,TREATED WINDMX1A.8
CLL AS LAYER MEANS CENTRED ON THE ETA-LEVELS,IN THE VICINITY WINDMX1A.9
CLL OF THE MAXIMUM ETA-LEVEL WIND. WINDMX1A.10
CLL THE MAXIMUM THAT THIS CURVE ATTAINS IN THE LAYER CENTRED ON THE WINDMX1A.11
CLL APPROPRIATE ETA-LEVEL GIVES THE MAXIMUM WIND SPEED AND LEVEL. WINDMX1A.12
CLL MAXIMUM WIND DIRECTION IS FOUND BY LINEAR INTERPOLATION (IN LOG(P)) WINDMX1A.13
CLL FROM WIND DIRECTIONS AT SURROUNDING ETA-LEVELS. WINDMX1A.14
CLL THE PRESSURE OF THE MAXIMUM WIND IS CALCULATED FROM THE MAXIMUM WINDMX1A.15
CLL WIND ETA-LEVEL. WINDMX1A.16
CLL WINDMX1A.17
CLL NOT SUITABLE FOR SINGLE COLUMN USE WINDMX1A.18
CLL WINDMX1A.19
CLL J.HEMING <- PROGRAMMER OF SOME OR ALL OF PREVIOUS CODE OR CHANGES WINDMX1A.20
CLL WINDMX1A.21
CLL MODEL MODIFICATION HISTORY FROM MODEL VERSION 3.0: WINDMX1A.22
CLL VERSION DATE WINDMX1A.23
CLL WINDMX1A.24
CLL 4.3 17/03/96 MPP SWAPBOUNDS added. And fixed a bug where GSM3F403.318
CLL one loop had inappropriately been split into 2 GSM3F403.319
CLL S.D. Mullerworth GSM3F403.320
!LL 4.5 17/04/98 Removed SWAPBOUNDS and ignore NS halos in loops GSM1F405.418
!LL WARNING - NS Halos need to be initialised by GSM1F405.419
!LL calling routine. GSM1F405.420
!LL Includes minor correction to (7) that changes GSM1F405.421
!LL bit comparison of diagnostic. S.D.Mullerworth GSM1F405.422
CLL GSM3F403.321
CLL PROGRAMMING STANDARD: UNIFIED MODEL DOCUMENTATION PAPER NO. 4, WINDMX1A.25
CLL VERSION 2, DATED 18/01/90 WINDMX1A.26
CLL WINDMX1A.27
CLL SYSTEM TASK: D4 WINDMX1A.28
CLL WINDMX1A.29
CLL SYSTEM COMPONENT: D412 WINDMX1A.30
CLL WINDMX1A.31
CLL DOCUMENTATION: UMDP NO.80 WINDMX1A.32
CLL WINDMX1A.33
CLLEND------------------------------------------------------------------ WINDMX1A.34
C WINDMX1A.35
C*L ARGUMENTS:---------------------------------------------------------- WINDMX1A.36
SUBROUTINE WINDMAX 2,1WINDMX1A.37
1 ( GSM3F403.322
*CALL ARGFLDPT
GSM3F403.323
& PSTAR,U,V, GSM3F403.324
2 U_ROWS,P_ROWS,ROW_LENGTH,P_LEVELS,P_FIELD,U_FIELD, WINDMX1A.39
3 AK,BK,AKH,BKH,ETA_MATRIX_INV,MATRIX_P_O, WINDMX1A.40
4 U_MAXWIND,V_MAXWIND,PRESSURE_MAXWIND) WINDMX1A.41
C WINDMX1A.42
IMPLICIT NONE WINDMX1A.43
C WINDMX1A.44
*CALL TYPFLDPT
GSM3F403.325
INTEGER WINDMX1A.45
* U_ROWS !IN NUMBER OF ROWS FOR (U,V) FIELD WINDMX1A.46
*, P_ROWS !IN NUMBER OF ROWS FOR (P,T) FIELD WINDMX1A.47
*, ROW_LENGTH !IN NO OF POINTS PER ROW WINDMX1A.48
*, P_LEVELS !IN NO OF PRESSURE LEVELS WINDMX1A.49
*, P_FIELD !IN FIRST DIMENSION OF FIELD OF PSTAR WINDMX1A.50
*, U_FIELD !IN FIRST DIMENSION OF (U,V) FIELD WINDMX1A.51
*, MATRIX_P_O !IN ORDER OF POLYNOMIAL USED IN ETA MATRIX WINDMX1A.52
C WINDMX1A.53
REAL WINDMX1A.54
* PSTAR(P_FIELD) !IN PRESSURE AT GROUND LEVEL AT (P,T) POINTS WINDMX1A.55
*, U(U_FIELD,P_LEVELS) !IN EASTERLY WIND COMPONENT IN M/S WINDMX1A.56
*, V(U_FIELD,P_LEVELS) !IN NORTHERLY WIND COMPONENT IN M/S WINDMX1A.57
C WINDMX1A.58
C AK,BK DEFINE HYBRID VERTICAL COORDINATES P=A+BP* WINDMX1A.59
REAL WINDMX1A.60
* AK(P_LEVELS) !IN VALUE AT LAYER CENTRE WINDMX1A.61
*, BK(P_LEVELS) !IN VALUE AT LAYER CENTRE WINDMX1A.62
*, AKH(P_LEVELS+1) !IN LAYER THICKNESS WINDMX1A.63
*, BKH(P_LEVELS+1) !IN LAYER THICKNESS WINDMX1A.64
*, ETA_MATRIX_INV(MATRIX_P_O,MATRIX_P_O,P_LEVELS) WINDMX1A.65
* !IN INVERSE MATRIX OF ETA_HALF VALUES WINDMX1A.66
C WINDMX1A.67
REAL WINDMX1A.68
* U_MAXWIND(U_FIELD) !OUT EASTERLY COMPONENT OF MAXWIND IN M/S WINDMX1A.69
*, V_MAXWIND(U_FIELD) !OUT NORTHERLY COMPONENT OF MAXWIND IN M/S WINDMX1A.70
*, PRESSURE_MAXWIND(U_FIELD)!OUT PRESSURE AT LEVEL OF MAXIMUM WIND WINDMX1A.71
C*---------------------------------------------------------------------- WINDMX1A.72
C WINDMX1A.73
C*L WORKSPACE USAGE----------------------------------------------------- WINDMX1A.74
C*---------------------------------------------------------------------- WINDMX1A.75
C WINDMX1A.76
C*L EXTERNAL SUBROUTINES CALLED----------------------------------------- WINDMX1A.77
EXTERNAL P_TO_UV WINDMX1A.78
C*---------------------------------------------------------------------- WINDMX1A.79
C WINDMX1A.80
*CALL C_PI
WINDMX1A.81
*CALL C_R_CP
WINDMX1A.82
C WINDMX1A.83
C----------------------------------------------------------------------- WINDMX1A.84
C DEFINE LOCAL CONSTANTS WINDMX1A.85
C----------------------------------------------------------------------- WINDMX1A.86
INTEGER WINDMX1A.87
* N21 ! =(MATRIX_P_O+1)/2 WINDMX1A.88
C WINDMX1A.89
REAL WINDMX1A.90
* TWOPI ! = 2 * PI WINDMX1A.91
*, TLEV ! TOP LEVEL IN Pa AT WHICH MAXWIND ALLOWED WINDMX1A.92
*, BLEV ! BOTTOM LEVEL IN Pa AT WHICH MAXWIND ALLOWED WINDMX1A.93
C WINDMX1A.94
PARAMETER(TWOPI=2*PI, WINDMX1A.95
* TLEV=10000.0,BLEV=70000.0) WINDMX1A.96
C----------------------------------------------------------------------- WINDMX1A.97
C DEFINE LOCAL VARIABLES WINDMX1A.98
C----------------------------------------------------------------------- WINDMX1A.99
INTEGER WINDMX1A.100
* KL WINDMX1A.101
*, I,J,K ! LOOP COUNTERS WINDMX1A.102
*, NO ! GRIDPOINT NUMBER WINDMX1A.103
*, NI ! = NO + ROW_LENGTH WINDMX1A.104
*, POINTS ! NO OF POINTS BETWEEN TWO LEVELS WHICH WINDMX1A.105
* ! ARE CHECKED FOR MAXIMUM WIND SPEED. WINDMX1A.106
*, LEVEL_MAXWIND(U_FIELD)! LEVEL AT WHICH MAXIMUM WIND OCCURS WINDMX1A.107
C WINDMX1A.108
REAL WINDMX1A.109
* ETA_LEVEL(P_LEVELS) ! ETA LEVELS WINDMX1A.110
*, ETA_HALF(P_LEVELS+1)! ETA HALF-LEVELS WINDMX1A.111
*, ETA_JMH ! ETA OF J-1/2 WINDMX1A.112
*, ETA_JPH ! ETA OF J+1/2 WINDMX1A.113
*, PSTAR_BAR(U_FIELD) ! P* AT (U,V) POINTS WINDMX1A.114
*, WINDSPEED(U_FIELD,P_LEVELS) ! WINDSPEED AT GRIDPOINTS WINDMX1A.115
*, DIRECTION(U_FIELD,P_LEVELS) ! WIND DIRECTION AT GRIDPOINTS WINDMX1A.116
*, A(U_FIELD,MATRIX_P_O) ! COEFFS OF QUARTIC POLYNOMIAL WINDMX1A.117
*, DIRECTION_MAXWIND(U_FIELD) ! DIRECTION OF MAXIMUM WIND WINDMX1A.118
*, SPEED_MAXWIND(U_FIELD) ! SPEED OF MAXIMUM WIND WINDMX1A.119
*, ETA_MAXWIND(U_FIELD) ! VALUE OF ETA AT MAXWIND LEVEL WINDMX1A.120
C WINDMX1A.121
REAL WINDMX1A.122
* INVPTS ! 1/POINTS WINDMX1A.123
*, X WINDMX1A.124
*, XINC ! INCREMENT IN X WINDMX1A.125
*, F(U_FIELD) ! A(1)+...A(N)*ETA**(N-1) WINDMX1A.126
*, DIFF ! DIFFERENCE IN DIRECTION BETWEEN ETA LEVELS EACH WINDMX1A.127
* ! SIDE OF MAXIMUM WIND LEVEL WINDMX1A.128
*, ETA_J ! ETA_LEVEL(J) ) WHERE J=LEVEL_MAXWIND WINDMX1A.129
*, ETA_JP1 ! ETA_LEVEL(J+1) ) WINDMX1A.130
*, MULT WINDMX1A.131
*, P_JMH ! P AT K=J-1/2 ) P=A(K)+B(K)*PSTAR_BAR WINDMX1A.132
*, P_JPH ! P AT K=J+1/2 ) WINDMX1A.133
C WINDMX1A.134
LOGICAL WINDMX1A.135
* S1 ! ) WINDMX1A.136
*, S2 ! ) 3 LOGICAL STATEMENTS WINDMX1A.137
*, S3 ! ) WINDMX1A.138
C----------------------------------------------------------------------- WINDMX1A.139
CL 1. CALCULATE VALUES OF ETA ON FULL AND HALF LEVELS WINDMX1A.140
C----------------------------------------------------------------------- WINDMX1A.141
DO K=1,P_LEVELS WINDMX1A.142
ETA_LEVEL(K)=AK(K)/PREF+BK(K) WINDMX1A.143
ETA_HALF(K)=AKH(K)/PREF+BKH(K) WINDMX1A.144
ENDDO WINDMX1A.145
ETA_HALF(P_LEVELS+1)=AKH(P_LEVELS+1)/PREF+BKH(P_LEVELS+1) WINDMX1A.146
C----------------------------------------------------------------------- WINDMX1A.147
CL 2. P* IS INTERPOLATED FROM THETA POINTS TO (U,V) POINTS WINDMX1A.148
C----------------------------------------------------------------------- WINDMX1A.149
CALL P_TO_UV
(PSTAR,PSTAR_BAR,P_FIELD,U_FIELD,ROW_LENGTH,P_ROWS) WINDMX1A.150
C----------------------------------------------------------------------- WINDMX1A.151
CL 3. WINDSPEED AND WIND DIRECTION ARE CALCULATED AT EACH GRIDPOINT WINDMX1A.152
CL AT EACH LEVEL WINDMX1A.153
C----------------------------------------------------------------------- WINDMX1A.154
DO 6 K=1,P_LEVELS WINDMX1A.155
DO NO=FIRST_FLD_PT,LAST_U_FLD_PT GSM1F405.423
WINDSPEED(NO,K)=SQRT(U(NO,K)**2+V(NO,K)**2) WINDMX1A.157
IF((U(NO,K).EQ.0.).AND.(V(NO,K).EQ.0.))THEN GSM3F403.329
DIRECTION(NO,K)=0. GSM3F403.330
ELSE GSM3F403.331
DIRECTION(NO,K)=ATAN2(U(NO,K),V(NO,K)) WINDMX1A.158
ENDIF GSM3F403.332
C----------------------------------------------------------------------- WINDMX1A.159
C - DIRECTION IN RADIANS FROM N WINDMX1A.160
C (+VE BETWEEN 0 AND PI, -VE BETWEEN -PI AND 0) WINDMX1A.161
C----------------------------------------------------------------------- WINDMX1A.162
ENDDO WINDMX1A.163
6 CONTINUE WINDMX1A.164
C----------------------------------------------------------------------- WINDMX1A.165
CL 4. FIND THE MAXIMUM ETA-LEVEL WIND SPEED BETWEEN 100mb and 700mb WINDMX1A.166
CL AND WHICH ALSO LIES BETWEEN LEVELS N21 AND P_LEVELS-N21+1 WINDMX1A.167
C----------------------------------------------------------------------- WINDMX1A.168
N21=(MATRIX_P_O+1)/2 WINDMX1A.169
DO NO=FIRST_FLD_PT,LAST_U_FLD_PT GSM1F405.424
LEVEL_MAXWIND(NO)=1 WINDMX1A.171
SPEED_MAXWIND(NO)=0. WINDMX1A.172
ENDDO WINDMX1A.173
DO 20 I=N21,P_LEVELS-N21+1 WINDMX1A.174
DO NO=FIRST_FLD_PT,LAST_U_FLD_PT GSM1F405.425
C----------------------------------------------------------------------- WINDMX1A.176
C CHECK THAT ETA LEVEL IS BELOW TLEV AND ABOVE BLEV WINDMX1A.177
C----------------------------------------------------------------------- WINDMX1A.178
S1=WINDSPEED(NO,I).GE.SPEED_MAXWIND(NO) WINDMX1A.179
S2=TLEV.LT.(AK(I+1)+BK(I+1)*PSTAR_BAR(NO)) WINDMX1A.180
S3=BLEV.GE.(AKH(I)+BKH(I)*PSTAR_BAR(NO)) WINDMX1A.181
IF ((S1.AND.S2).AND.S3) THEN WINDMX1A.182
C----------------------------------------------------------------------- WINDMX1A.183
C STORE NEW MAXIMUM SPEED WINDMX1A.184
C----------------------------------------------------------------------- WINDMX1A.185
SPEED_MAXWIND(NO)=WINDSPEED(NO,I) WINDMX1A.186
C----------------------------------------------------------------------- WINDMX1A.187
C STORE NEW MAXIMUM DIRECTION WINDMX1A.188
C----------------------------------------------------------------------- WINDMX1A.189
DIRECTION_MAXWIND(NO)=DIRECTION(NO,I) WINDMX1A.190
C----------------------------------------------------------------------- WINDMX1A.191
C STORE NEW MAXIMUM ETA WINDMX1A.192
C----------------------------------------------------------------------- WINDMX1A.193
ETA_MAXWIND(NO)=ETA_LEVEL(I) WINDMX1A.194
C----------------------------------------------------------------------- WINDMX1A.195
C STORE LEVEL WINDMX1A.196
C----------------------------------------------------------------------- WINDMX1A.197
LEVEL_MAXWIND(NO)=I WINDMX1A.198
ENDIF WINDMX1A.199
ENDDO WINDMX1A.200
20 CONTINUE WINDMX1A.201
DO NO=FIRST_FLD_PT,LAST_U_FLD_PT GSM1F405.426
IF (LEVEL_MAXWIND(NO).EQ.1) THEN WINDMX1A.203
DIRECTION_MAXWIND(NO)=0.0 WINDMX1A.204
ETA_MAXWIND(NO)=0.0 WINDMX1A.205
ENDIF WINDMX1A.206
ENDDO WINDMX1A.207
C------------------------------------------------------------------ WINDMX1A.208
CL 5. FIND THE COEFFICIENTS A OF WINDMX1A.209
CL F(ETA)=A(1)+A(2)*ETA+.......+A(N)*ETA**(N-1) WINDMX1A.210
C------------------------------------------------------------------ WINDMX1A.211
DO 206 J=1,MATRIX_P_O WINDMX1A.212
DO NO=FIRST_FLD_PT,LAST_U_FLD_PT GSM1F405.427
A(NO,J)=0.0 WINDMX1A.214
ENDDO WINDMX1A.215
206 CONTINUE WINDMX1A.216
DO 207 J=1,MATRIX_P_O WINDMX1A.217
DO I=1,MATRIX_P_O WINDMX1A.218
DO NO=FIRST_FLD_PT,LAST_U_FLD_PT GSM1F405.428
A(NO,J)=A(NO,J)+ETA_MATRIX_INV(I,J,LEVEL_MAXWIND(NO)) WINDMX1A.220
* *WINDSPEED(NO,LEVEL_MAXWIND(NO)-N21+I) WINDMX1A.221
ENDDO WINDMX1A.222
ENDDO WINDMX1A.223
207 CONTINUE WINDMX1A.224
C----------------------------------------------------------------------- WINDMX1A.225
CL 6. CALCULATE FROM THE CURVE THE SPEED OF THE MAXIMUM WIND AND WINDMX1A.226
CL THE VALUE OF ETA AT WHICH IT OCCURS WINDMX1A.227
C----------------------------------------------------------------------- WINDMX1A.228
C FIND THE POINT WHICH GIVES THE MAXIMUM WINDSPEED BETWEEN WINDMX1A.229
C HALF LEVELS EITHER SIDE OF ETA(LEVEL_MAXWIND) WINDMX1A.230
C (THIS MAY OR MAY NOT BE A TURNING POINT OF THE CURVE) WINDMX1A.231
C----------------------------------------------------------------------- WINDMX1A.232
POINTS=20 WINDMX1A.233
INVPTS=1./POINTS WINDMX1A.234
DO NO=FIRST_FLD_PT,LAST_U_FLD_PT GSM1F405.429
F(NO)=A(NO,MATRIX_P_O) WINDMX1A.236
ENDDO WINDMX1A.237
DO 208 I=MATRIX_P_O-1,1,-1 WINDMX1A.238
DO NO =FIRST_FLD_PT,LAST_U_FLD_PT GSM1F405.430
J=LEVEL_MAXWIND(NO) WINDMX1A.240
IF (J.GE.2) THEN WINDMX1A.241
X=ETA_HALF(J+1) WINDMX1A.242
C----------------------------------------------------------------------- WINDMX1A.243
C CALCULATE THE WIND AT ETA(J+.5) USING A POLYNOMIAL WINDMX1A.244
C F=A(1)+A(2)*X+...+A(N)*X**(N-1) WINDMX1A.245
C----------------------------------------------------------------------- WINDMX1A.246
F(NO)=F(NO)*X+A(NO,I) WINDMX1A.247
ENDIF WINDMX1A.248
ENDDO WINDMX1A.249
208 CONTINUE WINDMX1A.250
DO NO=FIRST_FLD_PT,LAST_U_FLD_PT GSM1F405.431
J=LEVEL_MAXWIND(NO) WINDMX1A.252
IF (J.GE.2) THEN WINDMX1A.253
X=ETA_HALF(J+1) WINDMX1A.254
IF (SPEED_MAXWIND(NO).LE.F(NO)) THEN WINDMX1A.255
SPEED_MAXWIND(NO)=F(NO) WINDMX1A.256
ETA_MAXWIND(NO)=X WINDMX1A.257
ENDIF WINDMX1A.258
ENDIF WINDMX1A.259
ENDDO WINDMX1A.260
C----------------------------------------------------------------------- WINDMX1A.261
C INCREMENT FROM ETA(J+.5) TO ETA(J-.5). WINDMX1A.262
C CALCULATE THE WIND AT EACH POINT AND SET IT AS THE SPEED OF THE WINDMX1A.263
C MAXIMUM WIND IF IT IS A LOCAL MAXIMUM WINDMX1A.264
C----------------------------------------------------------------------- WINDMX1A.265
DO K=1,POINTS WINDMX1A.266
DO NO=FIRST_FLD_PT,LAST_U_FLD_PT GSM1F405.432
F(NO)=A(NO,MATRIX_P_O) WINDMX1A.268
ENDDO WINDMX1A.269
DO I=MATRIX_P_O-1,1,-1 WINDMX1A.270
DO NO=FIRST_FLD_PT,LAST_U_FLD_PT GSM1F405.433
J=LEVEL_MAXWIND(NO) WINDMX1A.272
IF (J.GE.2) THEN WINDMX1A.273
XINC=(ETA_HALF(J)-ETA_HALF(J+1))*INVPTS WINDMX1A.274
X=ETA_HALF(J+1)+(XINC*K) WINDMX1A.275
F(NO)=F(NO)*X+A(NO,I) WINDMX1A.276
ENDIF WINDMX1A.277
ENDDO WINDMX1A.278
ENDDO WINDMX1A.279
DO NO=FIRST_FLD_PT,LAST_U_FLD_PT GSM1F405.434
J=LEVEL_MAXWIND(NO) WINDMX1A.281
IF (J.GE.2) THEN WINDMX1A.282
XINC=(ETA_HALF(J)-ETA_HALF(J+1))*INVPTS WINDMX1A.283
X=ETA_HALF(J+1)+(XINC*K) WINDMX1A.284
IF (F(NO).GT.SPEED_MAXWIND(NO)) THEN WINDMX1A.285
SPEED_MAXWIND(NO)=F(NO) WINDMX1A.286
ETA_MAXWIND(NO)=X WINDMX1A.287
ENDIF WINDMX1A.288
ENDIF WINDMX1A.289
ENDDO WINDMX1A.290
ENDDO WINDMX1A.291
C----------------------------------------------------------------------- WINDMX1A.292
CL 7. FIND THE DIRECTION OF THE MAXIMUM WIND BY LINEAR WINDMX1A.293
CL INTERPOLATION IN LOG(ETA) FROM SURROUNDING LEVELS WINDMX1A.294
C----------------------------------------------------------------------- WINDMX1A.295
C MAKE SURE THAT THE MAXIMUM WIND IS IN THE LAYER ABOVE WINDMX1A.296
C LEVEL_MAXWIND. NOTE HERE J=LEVEL_MAXWIND(NO) WINDMX1A.297
C----------------------------------------------------------------------- WINDMX1A.298
DO NO=FIRST_FLD_PT,LAST_U_FLD_PT GSM1F405.435
J=LEVEL_MAXWIND(NO) WINDMX1A.300
IF (J.GE.2) THEN WINDMX1A.301
IF (ETA_LEVEL(J).LT.ETA_MAXWIND(NO)) J=J-1 WINDMX1A.302
DIFF=DIRECTION(NO,J+1)-DIRECTION(NO,J) WINDMX1A.303
C----------------------------------------------------------------------- WINDMX1A.304
C PUT DIFF = ( D(J+1)-D(J) IF ^D(J+1)-D(J)^.LT.PI WINDMX1A.305
C ( TWOPI-^D(J+1)-D(J)^ IF ^D(J+1)-D(J)^.GT.PI WINDMX1A.306
C ( AND D(J+1).LT.D(J) WINDMX1A.307
C ( D(J+1)-D(J)-TWOPI IF ^D(J+1)-D(J)^.GT.PI WINDMX1A.308
C ( AND D(J+1).GT.D(J) WINDMX1A.309
C WHERE D=DIRECTION WINDMX1A.310
C----------------------------------------------------------------------- WINDMX1A.311
IF (ABS(DIFF).GT.PI) THEN WINDMX1A.312
IF (DIFF.LT.0) THEN WINDMX1A.313
DIFF=TWOPI+DIFF WINDMX1A.314
ELSE WINDMX1A.315
DIFF=DIFF-TWOPI WINDMX1A.316
ENDIF WINDMX1A.317
ENDIF WINDMX1A.318
C----------------------------------------------------------------------- WINDMX1A.319
C DIRECTION OF MAX WIND WINDMX1A.320
C =DIRECTION+DIFF*(LOG(ETA_MAXWIND/ETA(J))/LOG(ETA(J+1)/ETA(J))) WINDMX1A.321
C----------------------------------------------------------------------- WINDMX1A.322
ETA_J=ETA_LEVEL(J) WINDMX1A.323
ETA_JP1=ETA_LEVEL(J+1) WINDMX1A.324
MULT=LOG(ETA_MAXWIND(NO)/ETA_J)/LOG(ETA_JP1/ETA_J) WINDMX1A.325
DIRECTION_MAXWIND(NO)=DIRECTION(NO,J)+DIFF*MULT WINDMX1A.326
C----------------------------------------------------------------------- WINDMX1A.327
C OBTAIN A VALUE FOR DIRECTION_MAXWIND LYING BETWEEN 0 AND TWOPI WINDMX1A.328
C----------------------------------------------------------------------- WINDMX1A.329
DIRECTION_MAXWIND(NO)=DIRECTION_MAXWIND(NO)+PI WINDMX1A.330
S1=TWOPI.LT.DIRECTION_MAXWIND(NO) WINDMX1A.331
S2=DIRECTION_MAXWIND(NO).LT.0.0 WINDMX1A.332
IF (S1) DIRECTION_MAXWIND(NO)=DIRECTION_MAXWIND(NO)-TWOPI WINDMX1A.333
IF (S2) DIRECTION_MAXWIND(NO)=DIRECTION_MAXWIND(NO)+TWOPI WINDMX1A.334
IF (TWOPI.LT.DIRECTION_MAXWIND(NO).OR. GSM1F405.436
& DIRECTION_MAXWIND(NO).LT.0.0) DIRECTION_MAXWIND(NO)=0.0 GSM1F405.437
ENDIF WINDMX1A.336
C----------------------------------------------------------------------- WINDMX1A.338
CL 8. CONVERT THE SPEED OF MAXIMUM WIND AND DIRECTION TO U AND V WINDMX1A.339
CL COMPONENTS AND CONVERT THE ETA LEVEL TO PRESSURE LEVEL WINDMX1A.340
C----------------------------------------------------------------------- WINDMX1A.341
C NOTE HERE J=LEVEL_MAXWIND(NO) WINDMX1A.342
C----------------------------------------------------------------------- WINDMX1A.343
U_MAXWIND(NO)=SPEED_MAXWIND(NO)*SIN(DIRECTION_MAXWIND(NO)+PI) WINDMX1A.345
V_MAXWIND(NO)=SPEED_MAXWIND(NO)*COS(DIRECTION_MAXWIND(NO)+PI) WINDMX1A.346
ETA_JPH=ETA_HALF(J+1) WINDMX1A.347
ETA_JMH=ETA_HALF(J) WINDMX1A.348
P_JPH=AKH(J+1)+BKH(J+1)*PSTAR_BAR(NO) WINDMX1A.349
P_JMH=AKH(J)+BKH(J)*PSTAR_BAR(NO) WINDMX1A.350
MULT=(P_JMH-P_JPH)/(ETA_JMH-ETA_JPH) WINDMX1A.351
PRESSURE_MAXWIND(NO)=P_JPH+(ETA_MAXWIND(NO)-ETA_JPH)*MULT WINDMX1A.352
ENDDO WINDMX1A.353
C======================================================================= WINDMX1A.354
C END OF WINDMAX WINDMX1A.355
C======================================================================= WINDMX1A.356
RETURN WINDMX1A.357
END WINDMX1A.358
C======================================================================= WINDMX1A.359
*ENDIF WINDMX1A.360