*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