*IF DEF,W06_1A                                                             WTREORG.2      
!                                                                          WTREORG.3      
! Description:                                                             WTREORG.4      
!  This subroutine is part of the wavetrain diagnostic output code         WTREORG.5      
!  developed by Anne Guillaume at MeteoFrance and ECMWF.                   WTREORG.6      
!  Introduced into the unified wave moel at UM4.1                          WTREORG.7      
!                                                                          WTREORG.8      
! Method:                                                                  WTREORG.9      
!                                                                          WTREORG.10     
!                                                                          WTREORG.11     
!                                                                          WTREORG.12     
! Current Code Owner: Martin Holt                                          WTREORG.13     
!                                                                          WTREORG.14     
! History:                                                                 WTREORG.15     
! Version   Date     Comment                                               WTREORG.16     
! -------   ----     -------                                               WTREORG.17     
! UM4.1    June 1996 Code introduced to UM.  M Holt                        WTREORG.18     
!                                                                          WTREORG.19     
! Code Description:                                                        WTREORG.20     
!   Language: FORTRAN 77 + common extensions.                              WTREORG.21     
!                                                                          WTREORG.22     
!- End of header                                                           WTREORG.23     
                                                                           WTREORG.24     

      SUBROUTINE WTREORG(PSWH,PERIO,PDIR,KBLO,KJS,KJL,                      3WTREORG.25     
     %                   KWTMAX,KWTOT,PFWIND,PDWIND,PDMAX,PMISS,           WTREORG.26     
     %                   KFLAGWS,PMCOEF,KREOSP,KANG,KFRE,KWTRA)            WTREORG.27     
C                                                                          WTREORG.28     
C**** *WTREORG* - ROUTINE TO FIND WINDSEA AND CLASSIFY WAVE TRAINS         WTREORG.29     
C                                                                          WTREORG.30     
C     A.GUILLAUME      ECMWF                01/07/92                       WTREORG.31     
C     A.GUILLAUME      ECMWF save memory space 02/94                       WTREORG.32     
C                                                                          WTREORG.33     
C     PURPOSE.                                                             WTREORG.34     
C     --------                                                             WTREORG.35     
C                                                                          WTREORG.36     
C          *WTREORG*                                                       WTREORG.37     
C                                                                          WTREORG.38     
C**   INTERFACE.                                                           WTREORG.39     
C     ----------                                                           WTREORG.40     
C                                                                          WTREORG.41     
C          *CALL* * WTREORG(PSWH,PERIO,PDIR,KBLO,KJS,KJL,                  WTREORG.42     
C                           KWTMAX,KWTOT,PFWIND,PDWIND,PDMAX,PMISS,        WTREORG.43     
C                           KFLAGWS,PMCOEF,KREOSP,KANG,KFRE,KWTRA)         WTREORG.44     
C                                                                          WTREORG.45     
C       I/O     *PSWH*    - PSWH OF WAVE TRAINS.                           WTREORG.46     
C       I/O     *PERIO*   - MEAN PERIOD  OF WAVE TRAINS.                   WTREORG.47     
C       I/O     *PDIR*    - MEAN DIRECTION OF WAVE TRAINS.                 WTREORG.48     
C       I/      *KBLO*    - DIMENSION OF ONE BLOCK.                        WTREORG.49     
C       I/      *KJS*     - INDEX OF FIRST POINT OF BLOCK TO USE.          WTREORG.50     
C       I/      *KJL*     - INDEX OF LAST POINT OF BLOCK TO USE.           WTREORG.51     
C       I/      *KWTMAX*  - MAX NUMBER OF WAVE TRAINS.                     WTREORG.52     
C       I/O     *KWTOT*   - FINAL NB OF WAVE TRAINS                        WTREORG.53     
C       I/      *PFWIND*  - WIND SPEED TO COMPUTE P.M.FREQUENCY            WTREORG.54     
C       I/      *PDWIND*  - WIND DIRECTION (RADIAN)                        WTREORG.55     
C    I/      *PDMAX*   - MAX ANGULAR DISTANCE BETWEEN WIND AND WINDSEA.    WTREORG.56     
C                   NO WINDSEA FURTHER THAN ZTEMAX FROM WIND DIRECTION     WTREORG.57     
C       I/      *PMISS*   - MISSING VALUE                                  WTREORG.58     
C  I/  *KFLAGWS* - FLAG VALUE TO ISOLATE WINDSEA (DONE IF KFLAGWS.EQ.1,    WTREORG.59     
C                    MUST BE SET TO 0 OTHERWISE,TO SAVE MEMORY SPACE)      WTREORG.60     
C  I/      *PMCOEF*  - TUNING FACTOR FOR FINDING WINDSEA (0.9, 0.8..)      WTREORG.61     
C  I/      *KREOSP*  - FLAG VALUE TO REORGANIZE WAVE TRAIN INDEX MATRIX    WTREORG.62     
C                           DONE IF KREOSP=1                               WTREORG.63     
C                                                                          WTREORG.64     
C       I/      *KANG*    - NUMBER OF DIRECTIONS.                          WTREORG.65     
C       I/      *KFRE*    - NUMBER OF FREQUENCIES.                         WTREORG.66     
C  I/O     *KWTRA*   - WAVE TRAIN INDEX MATRIX (ONLY USED IF KREOSP=1)     WTREORG.67     
C                                                                          WTREORG.68     
C     METHOD.                                                              WTREORG.69     
C     -------                                                              WTREORG.70     
C                                                                          WTREORG.71     
C                                                                          WTREORG.72     
C     EXTERNALS.                                                           WTREORG.73     
C     ----------                                                           WTREORG.74     
C                                                                          WTREORG.75     
C          NONE.                                                           WTREORG.76     
C                                                                          WTREORG.77     
C     REFERENCE.                                                           WTREORG.78     
C     ----------                                                           WTREORG.79     
C                                                                          WTREORG.80     
C          NONE.                                                           WTREORG.81     
C                                                                          WTREORG.82     
      DIMENSION PSWH(KBLO,KWTMAX),PERIO(KBLO,KWTMAX),                      WTREORG.83     
     %          PDIR(KBLO,KWTMAX),PFWIND(1),PDWIND(1),                     WTREORG.84     
     %          KWTOT(KBLO),KWTRA(KJL-KJS+1,KANG,KFRE)                     WTREORG.85     
C..WORKING ARRAYS:                                                         WTREORG.86     
      DIMENSION ZTET1(KBLO),ZTET2(KBLO),ZTEMAX(KBLO)                       WTREORG.87     
      DIMENSION ZPEMIN(KBLO*KFLAGWS),IWDSEA(KBLO*KFLAGWS)                  WTREORG.88     
C                                                                          WTREORG.89     
C*    *PARAMETER* OF GLOBAL CONSTANTS.                                     WTREORG.90     
C                                                                          WTREORG.91     
CCC   PARAMETER (G = 9.806, PI = 3.14159265358978, CIRC = 40000000.,       WTREORG.92     
CCc  1           ZPI = 2.*PI, RAD = PI/180., DEG = 180./PI,                WTREORG.93     
CCC  2           R = CIRC/ZPI)                                             WTREORG.94     
                                                                           WTREORG.95     
*CALL C_G                                                                  WTREORG.96     
*CALL C_PI                                                                 WTREORG.97     
                                                                           WTREORG.98     
C                                                                          WTREORG.99     
C..FUNCTION IN LINE                                                        WTREORG.100    
C                                                                          WTREORG.101    
      IDELTA(I,J)=(ISIGN(1,I-J)+ISIGN(1,J-I))/2                            WTREORG.102    
                                                                           WTREORG.103    
         ZPI=2.*PI                                                         WTREORG.104    
         RAD=PI_OVER_180                                                   WTREORG.105    
         DEG=RECIP_PI_OVER_180                                             WTREORG.106    
                                                                           WTREORG.107    
                                                                           WTREORG.108    
      IWTR1=1                                                              WTREORG.109    
CAG   WRITE(6,*)' KFLAGWS ',KFLAGWS                                        GIE0F403.704    
CCMH UKMO calls with kflagws=0 so comment out lines to help memory probs   WTREORG.111    
      IF(KFLAGWS.NE.1) GO TO 500                                           WTREORG.112    
      IWTR1=2                                                              WTREORG.113    
C                                                                          WTREORG.114    
C          1. COMPUTE P.M.FREQUENCY.                                       WTREORG.115    
C             ----------------------                                       WTREORG.116    
C                                                                          WTREORG.117    
100   CONTINUE                                                             WTREORG.118    
ccc   DO 101 J=KJS,KJL                                                     WTREORG.119    
ccc   ZPEMIN(J)=1./0.13/G*PFWIND(J)/PMCOEF                                 WTREORG.120    
ccc   ZTEMAX(J)=PDMAX                                                      WTREORG.121    
101   CONTINUE                                                             WTREORG.122    
C                                                                          WTREORG.123    
C          2. SHIFT WAVE TRAINS TO PUT WIND SEA IN 1ST.                    WTREORG.124    
C             ----------------------------------------                     WTREORG.125    
C                                                                          WTREORG.126    
200   CONTINUE                                                             WTREORG.127    
ccc   DO 201 JWTR=KWTMAX-1,1,-1                                            WTREORG.128    
cc    DO 201 J=KJS,KJL                                                     WTREORG.129    
cc    PSWH(J,JWTR+1)=PSWH(J,JWTR)                                          WTREORG.130    
cc    PDIR(J,JWTR+1)=PDIR(J,JWTR)                                          WTREORG.131    
cc    PERIO(J,JWTR+1)=PERIO(J,JWTR)                                        WTREORG.132    
201   CONTINUE                                                             WTREORG.133    
CCMH  IF(KREOSP.EQ.1) THEN                                                 WTREORG.134    
cc       DO 202 JFRE=1,KFRE                                                WTREORG.135    
cc       DO 202 JANG=1,KANG                                                WTREORG.136    
cc       DO 202 JWTR=KWTMAX,1,-1                                           WTREORG.137    
cc       DO 202 J=1,KJL-KJS+1                                              WTREORG.138    
cc       KWTRA(J,JANG,JFRE)=(JWTR+1)*IDELTA(KWTRA(J,JANG,JFRE),JWTR)       WTREORG.139    
cc   %      +KWTRA(J,JANG,JFRE)*(1-IDELTA(KWTRA(J,JANG,JFRE),JWTR))        WTREORG.140    
ccc202      CONTINUE                                                       WTREORG.141    
CAG   WRITE(6,*)'IN WTREORG, AFTER WINDSEA SHIFT'                          GIE0F403.705    
CAG   PRINT 1000,PERIO,PSWH,PDIR                                           WTREORG.143    
CAG   PRINT 2000,KWTRA                                                     WTREORG.144    
1000  FORMAT('PERIO =',5F9.2,/,'PSWH  =',5F9.2,/,'PDIR  =',5F9.2,/)        WTREORG.145    
2000  FORMAT(/,(24I2))                                                     WTREORG.146    
cc    ENDIF                                                                WTREORG.147    
cc    DO 203 J=KJS,KJL                                                     WTREORG.148    
cc    PSWH(J,1)=0.                                                         WTREORG.149    
cc    PDIR(J,1)=PMISS                                                      WTREORG.150    
cc    PERIO(J,1)=PMISS                                                     WTREORG.151    
cc    KWTOT(J)=KWTOT(J)+1                                                  WTREORG.152    
203   CONTINUE                                                             WTREORG.153    
C                                                                          WTREORG.154    
C       3. FIND WINDSEA WT.                                                WTREORG.155    
C         THE CLOSER TO WIND DIRECTION WITH PERIOD LESS THAN PM PERIOD     WTREORG.156    
C         ------------------------------------------------------------     WTREORG.157    
C                                                                          WTREORG.158    
300   CONTINUE                                                             WTREORG.159    
cc    DO 301 J=KJS,KJL                                                     WTREORG.160    
cc    IWDSEA(J)=1                                                          WTREORG.161    
301   CONTINUE                                                             WTREORG.162    
cc    DO 302 JWTR=2,KWTMAX                                                 WTREORG.163    
cc    DO 303 J=KJS,KJL                                                     WTREORG.164    
cc    ZTET1(J)=MOD(PDIR(J,JWTR)-PDWIND(J)+ZPI,ZPI)                         WTREORG.165    
cc    ZTET2(J)=MOD(PDWIND(J)-PDIR(J,JWTR)+ZPI,ZPI)                         WTREORG.166    
cc    ZTET1(J)=AMIN1(ABS(ZTET1(J)),ABS(ZTET2(J)))                          WTREORG.167    
303   CONTINUE                                                             WTREORG.168    
cc    DO 304 J=KJS,KJL                                                     WTREORG.169    
cc    IF((PERIO(J,JWTR).LT.ZPEMIN(J))                                      WTREORG.170    
cc   %          .AND.                                                      WTREORG.171    
cc   %    (PERIO(J,JWTR).GT.0.)                                            WTREORG.172    
cc   %          .AND.                                                      WTREORG.173    
cc   %    (ZTET1(J).LT.ZTEMAX(J))) THEN                                    WTREORG.174    
cc       IWDSEA(J)=JWTR                                                    WTREORG.175    
cc       ZTEMAX(J)=ZTET1(J)                                                WTREORG.176    
cc    ENDIF                                                                WTREORG.177    
304   CONTINUE                                                             WTREORG.178    
302   CONTINUE                                                             WTREORG.179    
C                                                                          WTREORG.180    
C          4. PUT FIND WINDSEA WT IN 1ST.                                  WTREORG.181    
C             ---------------------------                                  WTREORG.182    
C                                                                          WTREORG.183    
400   CONTINUE                                                             WTREORG.184    
cc    DO 410 J=KJS,KJL                                                     WTREORG.185    
cc    PSWH(J,1)=PSWH(J,IWDSEA(J))                                          WTREORG.186    
cc    PDIR(J,1)=PDIR(J,IWDSEA(J))                                          WTREORG.187    
cc    PERIO(J,1)=PERIO(J,IWDSEA(J))                                        WTREORG.188    
410   CONTINUE                                                             WTREORG.189    
cc    DO 420 J=KJS,KJL                                                     WTREORG.190    
cc    PSWH(J,IWDSEA(J))=0.                                                 WTREORG.191    
cc    PDIR(J,IWDSEA(J))=PMISS                                              WTREORG.192    
cc    PERIO(J,IWDSEA(J))=PMISS                                             WTREORG.193    
420   CONTINUE                                                             WTREORG.194    
cc    IF(KREOSP.EQ.1) THEN                                                 WTREORG.195    
cc       DO 430 JFRE=1,KFRE                                                WTREORG.196    
cc       DO 430 JANG=1,KANG                                                WTREORG.197    
cc       DO 430 J=1,KJL-KJS+1                                              WTREORG.198    
cc       KWTRA(J,JANG,JFRE)=IDELTA(KWTRA(J,JANG,JFRE),IWDSEA(J))           WTREORG.199    
cc   %     +KWTRA(J,JANG,JFRE)*(1-IDELTA(KWTRA(J,JANG,JFRE),IWDSEA(J)))    WTREORG.200    
430      CONTINUE                                                          WTREORG.201    
CAG      WRITE(6,*)'IN WTREORG, AFTER WINDSEA IN 1'                        GIE0F403.706    
CAG      PRINT 2000,KWTRA                                                  WTREORG.203    
CAG      WRITE(6,*)'IN WTREORG, AFTER SHIFT '                              GIE0F403.707    
CAG      PRINT 1000,PERIO,PSWH,PDIR                                        WTREORG.205    
CAG      PRINT 2000,KWTRA                                                  WTREORG.206    
cc    ENDIF                                                                WTREORG.207    
C                                                                          WTREORG.208    
C          5. CLASSEMENT PAR ENERGIE DES AUTRES WT.                        WTREORG.209    
C             -------------------------------------                        WTREORG.210    
C                                                                          WTREORG.211    
500   CONTINUE                                                             WTREORG.212    
c                                                                          WTREORG.213    
      DO 501 ITR1=IWTR1,KWTMAX                                             WTREORG.214    
      DO 501 ITR2=ITR1+1,KWTMAX                                            WTREORG.215    
      DO 502 J=KJS,KJL                                                     WTREORG.216    
C     IF(PSWH(J,ITR1).LT.PSWH(J,ITR2)) ZTEMAX(J)=0                         WTREORG.217    
C     ELSE                             ZTEMAX(J)=1                         WTREORG.218    
      ZTEMAX(J)=AMAX1(0.,SIGN(1.,PSWH(J,ITR1)-PSWH(J,ITR2)))               WTREORG.219    
502   CONTINUE                                                             WTREORG.220    
      DO 503 J=KJS,KJL                                                     WTREORG.221    
C     IF(PSWH(J,ITR1).LT.PSWH(ITR2)) ZTET1(J)=PSWH(J,ITR2)                 WTREORG.222    
C                                    ZTET2(J)=PSWH(J,ITR1)                 WTREORG.223    
C     ELSE                           ZTET1(J)=PSWH(J,ITR1)                 WTREORG.224    
C                                    ZTET2(J)=PSWH(J,ITR2)                 WTREORG.225    
C     ENDIF                                                                WTREORG.226    
      ZTET1(J)=PSWH(J,ITR1)*ZTEMAX(J)                                      WTREORG.227    
     %         +PSWH(J,ITR2)*(1.-ZTEMAX(J))                                WTREORG.228    
      ZTET2(J)=PSWH(J,ITR2)*ZTEMAX(J)                                      WTREORG.229    
     %         +PSWH(J,ITR1)*(1.-ZTEMAX(J))                                WTREORG.230    
503   CONTINUE                                                             WTREORG.231    
      DO 504 J=KJS,KJL                                                     WTREORG.232    
      PSWH(J,ITR1)=ZTET1(J)                                                WTREORG.233    
      PSWH(J,ITR2)=ZTET2(J)                                                WTREORG.234    
504   CONTINUE                                                             WTREORG.235    
      DO 505 J=KJS,KJL                                                     WTREORG.236    
         ZTET1(J)=PDIR(J,ITR1)*ZTEMAX(J)                                   WTREORG.237    
     %            +PDIR(J,ITR2)*(1.-ZTEMAX(J))                             WTREORG.238    
         ZTET2(J)=PDIR(J,ITR2)*ZTEMAX(J)                                   WTREORG.239    
     %            +PDIR(J,ITR1)*(1.-ZTEMAX(J))                             WTREORG.240    
505   CONTINUE                                                             WTREORG.241    
      DO 506 J=KJS,KJL                                                     WTREORG.242    
      PDIR(J,ITR1)=ZTET1(J)                                                WTREORG.243    
      PDIR(J,ITR2)=ZTET2(J)                                                WTREORG.244    
506   CONTINUE                                                             WTREORG.245    
      DO 507 J=KJS,KJL                                                     WTREORG.246    
      ZTET1(J)=PERIO(J,ITR1)*ZTEMAX(J)                                     WTREORG.247    
     %         +PERIO(J,ITR2)*(1.-ZTEMAX(J))                               WTREORG.248    
      ZTET2(J)=PERIO(J,ITR2)*ZTEMAX(J)                                     WTREORG.249    
     %         +PERIO(J,ITR1)*(1.-ZTEMAX(J))                               WTREORG.250    
507      CONTINUE                                                          WTREORG.251    
      DO 508 J=KJS,KJL                                                     WTREORG.252    
      PERIO(J,ITR1)=ZTET1(J)                                               WTREORG.253    
      PERIO(J,ITR2)=ZTET2(J)                                               WTREORG.254    
508   CONTINUE                                                             WTREORG.255    
      IF(KREOSP.EQ.1) THEN                                                 WTREORG.256    
         DO 509 J=1,KJL-KJS+1                                              WTREORG.257    
         JJZZ=NINT(ZTEMAX(J+KJS-1))                                        WTREORG.258    
         ITR11=ITR1*JJZZ+ITR2*(1-JJZZ)                                     WTREORG.259    
         ITR22=ITR2*JJZZ+ITR1*(1-JJZZ)                                     WTREORG.260    
         DO 509 JFRE=1,KFRE                                                WTREORG.261    
         DO 509 JANG=1,KANG                                                WTREORG.262    
         KWTRA(J,JANG,JFRE)=ITR11*IDELTA(KWTRA(J,JANG,JFRE),ITR1)          WTREORG.263    
     %                     +ITR22*IDELTA(KWTRA(J,JANG,JFRE),ITR2)          WTREORG.264    
     %   +KWTRA(J,JANG,JFRE)*(1-IDELTA(KWTRA(J,JANG,JFRE),ITR1))*          WTREORG.265    
     %                       (1-IDELTA(KWTRA(J,JANG,JFRE),ITR2))           WTREORG.266    
509      CONTINUE                                                          WTREORG.267    
CAG   WRITE(6,*)' AFTER classification, ITR1,ITR2 ',ITR1,ITR2              GIE0F403.708    
CAG   PRINT 599,KWTRA                                                      WTREORG.269    
599   FORMAT('KWTRA IN WTREORG, AFTER classification ',/,(24I2))           WTREORG.270    
      ENDIF                                                                WTREORG.271    
501   CONTINUE                                                             WTREORG.272    
      RETURN                                                               WTREORG.273    
      END                                                                  WTREORG.274    
*ENDIF                                                                     WTREORG.275